ZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53ZWJfdGVzdHMuZmVhdHVyZS8uY3ZzaWdub3JlIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndlYl90ZXN0cy5mZWF0dXJlLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyMjYwYTQuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndlYl90ZXN0cy5mZWF0dXJlLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLWJ1aWxkLnhtbAotb3JnLmVjbGlwc2Uud3N0LndlYl90ZXN0cy5mZWF0dXJlXyouemlwCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud2ViX3Rlc3RzLmZlYXR1cmUvLnByb2plY3QgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud2ViX3Rlc3RzLmZlYXR1cmUvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkMzI3MGQuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndlYl90ZXN0cy5mZWF0dXJlLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LndlYl90ZXN0cy5mZWF0dXJlPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuRmVhdHVyZU5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndlYl90ZXN0cy5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud2ViX3Rlc3RzLmZlYXR1cmUvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjdhZmZjNS4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud2ViX3Rlc3RzLmZlYXR1cmUvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotYmluLmluY2x1ZGVzID0gZmVhdHVyZS54bWwsXAotICAgICAgICAgICAgICAgZXBsLXYxMC5odG1sLFwKLSAgICAgICAgICAgICAgIGVjbGlwc2VfdXBkYXRlXzEyMC5qcGcsXAotICAgICAgICAgICAgICAgbGljZW5zZS5odG1sLFwKLSAgICAgICAgICAgICAgIGZlYXR1cmUucHJvcGVydGllcwpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndlYl90ZXN0cy5mZWF0dXJlL2VjbGlwc2VfdXBkYXRlXzEyMC5qcGcgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud2ViX3Rlc3RzLmZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZkZjcwOC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud2ViX3Rlc3RzLmZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53ZWJfdGVzdHMuZmVhdHVyZS9lcGwtdjEwLmh0bWwgYi9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud2ViX3Rlc3RzLmZlYXR1cmUvZXBsLXYxMC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDRiMTk2Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53ZWJfdGVzdHMuZmVhdHVyZS9lcGwtdjEwLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMjggKzAsMCBAQAotPGh0bWwgeG1sbnM6bz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIgoteG1sbnM6dz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIKLXhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIj4KLQotPGhlYWQ+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+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndlYl90ZXN0cy5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53ZWJfdGVzdHMuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjNzk4MmMuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndlYl90ZXN0cy5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE0NSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBmZWF0dXJlLnByb3BlcnRpZXMKLSMgY29udGFpbnMgZXh0ZXJuYWxpemVkIHN0cmluZ3MgZm9yIGZlYXR1cmUueG1sCi0jICIlZm9vIiBpbiBmZWF0dXJlLnhtbCBjb3JyZXNwb25kcyB0byB0aGUga2V5ICJmb28iIGluIHRoaXMgZmlsZQotIyBqYXZhLmlvLlByb3BlcnRpZXMgZmlsZSAoSVNPIDg4NTktMSB3aXRoICJcIiBlc2NhcGVzKQotIyBUaGlzIGZpbGUgc2hvdWxkIGJlIHRyYW5zbGF0ZWQuCi0KLSMgImZlYXR1cmVOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGZlYXR1cmUKLWZlYXR1cmVOYW1lPVdTVCBXZWIgVGVzdHMKLQotIyAicHJvdmlkZXJOYW1lIiBwcm9wZXJ0eSAtIG5hbWUgb2YgdGhlIGNvbXBhbnkgdGhhdCBwcm92aWRlcyB0aGUgZmVhdHVyZQotcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCi0KLSMgInVwZGF0ZVNpdGVOYW1lIiBwcm9wZXJ0eSAtIGxhYmVsIGZvciB0aGUgdXBkYXRlIHNpdGUKLXVwZGF0ZVNpdGVOYW1lPVRoZSBFY2xpcHNlIFdlYiBUb29scyBQbGF0Zm9ybSAoV1RQKSBQcm9qZWN0IHVwZGF0ZSBzaXRlCi0KLSMgImRlc2NyaXB0aW9uIiBwcm9wZXJ0eSAtIGRlc2NyaXB0aW9uIG9mIHRoZSBmZWF0dXJlCi1kZXNjcmlwdGlvbj1XU1QgV2ViIHRlc3RzCi0KLSMgImNvcHlyaWdodCIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgQ29weXJpZ2h0IgotY29weXJpZ2h0PVwKLUNvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy5cblwKLUFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHNcblwKLWFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMFxuXAotd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXRcblwKLWh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sXG5cCi1cblwKLUNvbnRyaWJ1dG9yczpcblwKLSAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb25cbgotIyMjIyMjIyMjIyMjIyMjIyBlbmQgb2YgY29weXJpZ2h0IHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jICJsaWNlbnNlVVJMIiBwcm9wZXJ0eSAtIFVSTCBvZiB0aGUgIkZlYXR1cmUgTGljZW5zZSIKLSMgZG8gbm90IHRyYW5zbGF0ZSB2YWx1ZSAtIGp1c3QgY2hhbmdlIHRvIHBvaW50IHRvIGEgbG9jYWxlLXNwZWNpZmljIEhUTUwgcGFnZQotbGljZW5zZVVSTD1saWNlbnNlLmh0bWwKLQotIyAibGljZW5zZSIgcHJvcGVydHkgLSB0ZXh0IG9mIHRoZSAiRmVhdHVyZSBVcGRhdGUgTGljZW5zZSIKLSMgc2hvdWxkIGJlIHBsYWluIHRleHQgdmVyc2lvbiBvZiBsaWNlbnNlIGFncmVlbWVudCBwb2ludGVkIHRvIGJlICJsaWNlbnNlVVJMIgotbGljZW5zZT1cCi1FQ0xJUFNFIEZPVU5EQVRJT04gU09GVFdBUkUgVVNFUiBBR1JFRU1FTlRcblwKLUp1bmUgMDYsIDIwMDdcblwKLVxuXAotVXNhZ2UgT2YgQ29udGVudFxuXAotXG5cCi1USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SXG5cCi1PVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTIChDT0xMRUNUSVZFTFkgIkNPTlRFTlQiKS5cblwKLVVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJU1xuXAotQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SXG5cCi1OT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VXG5cCi1BR1JFRSBUSEFUIFlPVVIgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UXG5cCi1BTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UU1xuXAotT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEVcblwKLVRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlNcblwKLU9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEXG5cCi1CRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuXG5cCi1cblwKLUFwcGxpY2FibGUgTGljZW5zZXNcblwKLVxuXAotVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb25cblwKLWlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljXG5cCi1MaWNlbnNlIFZlcnNpb24gMS4wICgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpc1xuXAotQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuXG5cCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC5cblwKLVxuXAotQ29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsXG5cCi1kb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlNcblwKLXJlcG9zaXRvcnkgKCJSZXBvc2l0b3J5IikgaW4gQ1ZTIG1vZHVsZXMgKCJNb2R1bGVzIikgYW5kIG1hZGUgYXZhaWxhYmxlXG5cCi1hcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCJEb3dubG9hZHMiKS5cblwKLVxuXAotICAgLSBDb250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLFxuXAotICAgICBleHRlbmRpbmcsIGFuZCB1cGdyYWRpbmcgdGhlIENvbnRlbnQuIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoIlBsdWctaW5zIiksXG5cCi0gICAgIHBsdWctaW4gZnJhZ21lbnRzICgiRnJhZ21lbnRzIiksIGFuZCBmZWF0dXJlcyAoIkZlYXR1cmVzIikuXG5cCi0gICAtIEVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YT8gQVJjaGl2ZSlcblwKLSAgICAgaW4gYSBkaXJlY3RvcnkgbmFtZWQgInBsdWdpbnMiLlxuXAotICAgLSBBIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC5cblwKLSAgICAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgImZlYXR1cmVzIi5cblwKLSAgICAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uXG5cCi0gICAgIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS5cblwKLSAgIC0gRmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzXG5cCi0gICAgIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLlxuXAotXG5cCi1GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gRmlsZXMgbmFtZWRcblwKLSJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mXG5cCi1JbmNsdWRlZCBGZWF0dXJlcy5cblwKLVxuXAotVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZVxuXAotY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICJhYm91dC5odG1sIiAoIkFib3V0cyIpLiBUaGUgdGVybXMgYW5kXG5cCi1jb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQgSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZFxuXAotaW4gZmlsZXMgbmFtZWQgImxpY2Vuc2UuaHRtbCIgKCJGZWF0dXJlIExpY2Vuc2VzIikuIEFib3V0cyBhbmQgRmVhdHVyZVxuXAotTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZVxuXAotaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6XG5cCi1cblwKLSAgIC0gVGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5XG5cCi0gICAtIFBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzXG5cCi0gICAtIEluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnNcblwKLSAgIC0gU3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgInNyYyIgb2YgY2VydGFpbiBQbHVnLWluc1xuXAotICAgLSBGZWF0dXJlIGRpcmVjdG9yaWVzXG5cCi1cblwKLU5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGVcblwKLUVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoIkZlYXR1cmUgVXBkYXRlXG5cCi1MaWNlbnNlIikgZHVyaW5nIHRoZSBpbnN0YWxsYXRpb24gcHJvY2Vzcy4gSWYgdGhlIEZlYXR1cmUgY29udGFpbnNcblwKLUluY2x1ZGVkIEZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91XG5cCi13aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yIGluZm9ybVxuXAoteW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpblxuXAotdGhlICJsaWNlbnNlIiBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAiZmVhdHVyZS5wcm9wZXJ0aWVzIi4gU3VjaCBBYm91dHMsXG5cCi1GZWF0dXJlIExpY2Vuc2VzIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmRcblwKLWNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91clxuXAotdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4gdGhhdCBkaXJlY3RvcnkuXG5cCi1cblwKLVRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUlxuXAotVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuXG5cCi1TT01FIE9GIFRIRVNFIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6XG5cCi1cblwKLSAgICAtIENvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sKVxuXAotICAgIC0gQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMS4xIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UpXG5cCi0gICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjApXG5cCi0gICAgLSBJQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwpXG5cCi0gICAgLSBNZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbClcblwKLSAgICAtIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwpXG5cCi0gICAgLSBDb21tb24gRGV2ZWxvcG1lbnQgYW5kIERpc3RyaWJ1dGlvbiBMaWNlbnNlIChDRERMKSBWZXJzaW9uIDEuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuc3VuLmNvbS9jZGRsL2NkZGwuaHRtbClcblwKLVxuXAotSVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUlxuXAotVE8gVVNFIE9GIFRIRSBDT05URU5ULiBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VcblwKLWlzIHByb3ZpZGVkLCBwbGVhc2UgY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zXG5cCi1nb3Zlcm4gdGhhdCBwYXJ0aWN1bGFyIENvbnRlbnQuXG5cCi1cblwKLUNyeXB0b2dyYXBoeVxuXAotXG5cCi1Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmVcblwKLWN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSxcblwKLWFuZC9vciByZS1leHBvcnQgdG8gYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkVcblwKLXVzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLFxuXAotcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgb3IgdXNlLFxuXAotYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuXG5cCi1cblwKLUphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLlxuCi0jIyMjIyMjIyMjIyBlbmQgb2YgbGljZW5zZSBwcm9wZXJ0eSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53ZWJfdGVzdHMuZmVhdHVyZS9mZWF0dXJlLnhtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53ZWJfdGVzdHMuZmVhdHVyZS9mZWF0dXJlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjVjOTU3Yy4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud2ViX3Rlc3RzLmZlYXR1cmUvZmVhdHVyZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGZlYXR1cmUKLSAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud2ViX3Rlc3RzLmZlYXR1cmUiCi0gICAgICBsYWJlbD0iJWZlYXR1cmVOYW1lIgotICAgICAgdmVyc2lvbj0iMy4xLjAucXVhbGlmaWVyIgotICAgICAgcHJvdmlkZXItbmFtZT0iJXByb3ZpZGVyTmFtZSI+Ci0KLSAgIDxkZXNjcmlwdGlvbj4KLSAgICAgICVkZXNjcmlwdGlvbgotICAgPC9kZXNjcmlwdGlvbj4KLQotICAgPGNvcHlyaWdodD4KLSAgICAgICVjb3B5cmlnaHQKLSAgIDwvY29weXJpZ2h0PgotCi0gICA8bGljZW5zZSB1cmw9IiVsaWNlbnNlVVJMIj4KLSAgICAgICVsaWNlbnNlCi0gICA8L2xpY2Vuc2U+Ci0KLSAgIDx1cmw+Ci0gICAgICA8dXBkYXRlIGxhYmVsPSIldXBkYXRlU2l0ZU5hbWUiIHVybD0iaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3dlYnRvb2xzL3VwZGF0ZXMvIi8+Ci0gICA8L3VybD4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cyIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZyIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cyIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy5wZXJmb3JtYW5jZSIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cyIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmciCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy5wZXJmb3JtYW5jZSIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi08L2ZlYXR1cmU+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud2ViX3Rlc3RzLmZlYXR1cmUvbGljZW5zZS5odG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndlYl90ZXN0cy5mZWF0dXJlL2xpY2Vuc2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTY0NDU5OC4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud2ViX3Rlc3RzLmZlYXR1cmUvbGljZW5zZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzNjLm9yZy9UUi8xOTk5L1JFQy1odG1sNDAxLTE5OTkxMjI0L2xvb3NlLmR0ZCI+Ci08IS0tIHNhdmVkIGZyb20gdXJsPSgwMDQ0KWh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsL25vdGljZS5odG1sIC0tPgotPEhUTUw+PEhFQUQ+PFRJVExFPkVjbGlwc2Uub3JnIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC9USVRMRT4KLTxNRVRBIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KLTxNRVRBIGNvbnRlbnQ9Ik1TSFRNTCA2LjAwLjI4MDAuMTQ3OSIgbmFtZT1HRU5FUkFUT1I+PC9IRUFEPgotPEJPRFkgbGFuZz1FTi1VUyB2TGluaz1wdXJwbGUgbGluaz1ibHVlPgotPEgyPkVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvSDI+Ci08UD5KdW5lIDA2LCAyMDA3PC9QPgotPEgzPlVzYWdlIE9mIENvbnRlbnQ8L0gzPgotPFA+VEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIAotQU5EL09SIE9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMgKENPTExFQ1RJVkVMWSAiQ09OVEVOVCIpLiBVU0UgT0YgCi1USEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSAKLVRFUk1TIEFORCBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIAotQkVMT1cuIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1UgQUdSRUUgVEhBVCBZT1VSIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCAKLUJZIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSAKLUFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUgCi1URVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSAKLUFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1csIFRIRU4gWU9VIAotTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuPC9QPgotPEgzPkFwcGxpY2FibGUgTGljZW5zZXM8L0gzPgotPFA+VW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIAotRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIAotUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzIAotQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgPEEgCi1ocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWw8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLTxQPkNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLCAKLWRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWUyByZXBvc2l0b3J5IAotKCJSZXBvc2l0b3J5IikgaW4gQ1ZTIG1vZHVsZXMgKCJNb2R1bGVzIikgYW5kIG1hZGUgYXZhaWxhYmxlIGFzIGRvd25sb2FkYWJsZSAKLWFyY2hpdmVzICgiRG93bmxvYWRzIikuPC9QPgotPFA+Q29udGVudCBtYXkgYmUgYXBwb3J0aW9uZWQgaW50byBwbHVnLWlucyAoIlBsdWctaW5zIiksIHBsdWctaW4gZnJhZ21lbnRzIAotKCJGcmFnbWVudHMiKSwgYW5kIGZlYXR1cmVzICgiRmVhdHVyZXMiKS4gQSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIAotUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC4gRmlsZXMgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgCi1jb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyAKLWFzc29jaWF0ZWQgd2l0aCBhIEZlYXR1cmUuIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgYXJlIGxvY2F0ZWQgaW4gZGlyZWN0b3JpZXMgCi1uYW1lZCAicGx1Z2lucyIgYW5kIEZlYXR1cmVzIGFyZSBsb2NhdGVkIGluIGRpcmVjdG9yaWVzIG5hbWVkICJmZWF0dXJlcyIuPC9QPgotPFA+RmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIEZpbGVzIG5hbWVkIAotImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgCi1GZWF0dXJlcy48L1A+Ci08UD5UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlIGNvbnRhaW5lZCAKLWluIGZpbGVzIG5hbWVkICJhYm91dC5odG1sIiAoIkFib3V0cyIpLiBUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIAotRmVhdHVyZXMgYW5kIEluY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgImxpY2Vuc2UuaHRtbCIgCi0oIkZlYXR1cmUgTGljZW5zZXMiKS4gQWJvdXRzIGFuZCBGZWF0dXJlIExpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSAKLWRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZSBpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIAotbG9jYXRpb25zOjwvUD4KLTxVTD4KLSAgPExJPlRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeSAKLSAgPExJPlBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzIAotICA8TEk+U3ViZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAic3JjIiBvZiBjZXJ0YWluIFBsdWctaW5zIAotICA8TEk+RmVhdHVyZSBkaXJlY3RvcmllcyA8L0xJPjwvVUw+Ci08UD5Ob3RlOiBpZiBhIEZlYXR1cmUgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBpbnN0YWxsZWQgCi11c2luZyB0aGUgRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgiRmVhdHVyZSBVcGRhdGUgCi1MaWNlbnNlIikgZHVyaW5nIHRoZSBpbnN0YWxsYXRpb24gcHJvY2Vzcy4gSWYgdGhlIEZlYXR1cmUgY29udGFpbnMgSW5jbHVkZWQgCi1GZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdSB3aXRoIHRoZSB0ZXJtcyAKLWFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IgaW5mb3JtIHlvdSB3aGVyZSB5b3UgY2FuIAotbG9jYXRlIHRoZW0uIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpbiB0aGUgImxpY2Vuc2UiIHByb3BlcnR5IG9mIAotZmlsZXMgbmFtZWQgImZlYXR1cmUucHJvcGVydGllcyIuIFN1Y2ggQWJvdXRzLCBGZWF0dXJlIExpY2Vuc2VzIGFuZCBGZWF0dXJlIAotVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgCi1hbmQgY29uZGl0aW9ucykgdGhhdCBnb3Zlcm4geW91ciB1c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbiB0aGF0IAotZGlyZWN0b3J5LjwvUD4KLTxQPlRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUiBUTyBUSEUgRVBMIAotT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLiBTT01FIE9GIFRIRVNFIAotT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTo8L1A+Ci08VUw+Ci0gIDxMST5Db21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sPC9BPikgCi0KLSAgPExJPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0U8L0E+KSAKLQotICA8TEk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wPC9BPikgCi0KLSAgPExJPklCTSBQdWJsaWMgTGljZW5zZSAxLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL29zcy5zb2Z0d2FyZS5pYm0uY29tL2RldmVsb3BlcndvcmtzL29wZW5zb3VyY2UvbGljZW5zZTEwLmh0bWwiPmh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sPC9BPikgCi0KLSAgPExJPk1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb3Blbm1vdGlmL3N1cHBvcnRlcnMvbWV0cm9saW5rL2xpY2Vuc2UuaHRtbCI+aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWw8L0E+KSAKLQotICA8TEk+TW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwiPmh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbDwvQT4pIAotICA8L0xJPgotICAgIAotICA8TEk+Q29tbW9uIERldmVsb3BtZW50IGFuZCBEaXN0cmlidXRpb24gTGljZW5zZSAoQ0RETCkgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5zdW4uY29tL2NkZGwvY2RkbC5odG1sIj5odHRwOi8vd3d3LnN1bi5jb20vY2RkbC9jZGRsLmh0bWwpPC9BPgotICA8L0xJPgotPC9VTD4KLTxQPklUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1IgCi1UTyBVU0UgT0YgVEhFIENPTlRFTlQuIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2Ugb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBpcyAKLXByb3ZpZGVkLCBwbGVhc2UgY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCAKLWNvbmRpdGlvbnMgZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LjwvUD4KLTxIMz5DcnlwdG9ncmFwaHk8L0gzPgotPFA+Q29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlIAotY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLCBhbmQvb3IgCi1yZS1leHBvcnQgdG8gYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkUgdXNpbmcgYW55IAotZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cywgcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIAotY29uY2VybmluZyB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgCi10byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuPC9QPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sX3Rlc3RzLmZlYXR1cmUvLmN2c2lnbm9yZSBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWxfdGVzdHMuZmVhdHVyZS8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYWM5OWQwLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWxfdGVzdHMuZmVhdHVyZS8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi1idWlsZC54bWwKLW9yZy5lY2xpcHNlLndzdC54bWxfdGVzdHMuZmVhdHVyZV8xLjAuMC5iaW4uZGlzdC56aXAKZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWxfdGVzdHMuZmVhdHVyZS8ucHJvamVjdCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWxfdGVzdHMuZmVhdHVyZS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2ZmMzI4Ny4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sX3Rlc3RzLmZlYXR1cmUvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3QueG1sX3Rlc3RzLmZlYXR1cmU8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuRmVhdHVyZUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5GZWF0dXJlTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sX3Rlc3RzLmZlYXR1cmUvYnVpbGQucHJvcGVydGllcyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWxfdGVzdHMuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyN2FmZmM1Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWxfdGVzdHMuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1iaW4uaW5jbHVkZXMgPSBmZWF0dXJlLnhtbCxcCi0gICAgICAgICAgICAgICBlcGwtdjEwLmh0bWwsXAotICAgICAgICAgICAgICAgZWNsaXBzZV91cGRhdGVfMTIwLmpwZyxcCi0gICAgICAgICAgICAgICBsaWNlbnNlLmh0bWwsXAotICAgICAgICAgICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sX3Rlc3RzLmZlYXR1cmUvZWNsaXBzZV91cGRhdGVfMTIwLmpwZyBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWxfdGVzdHMuZmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmRmNzA4Li4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWxfdGVzdHMuZmVhdHVyZS9lY2xpcHNlX3VwZGF0ZV8xMjAuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbF90ZXN0cy5mZWF0dXJlL2VwbC12MTAuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWxfdGVzdHMuZmVhdHVyZS9lcGwtdjEwLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkNGIxOTYuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbF90ZXN0cy5mZWF0dXJlL2VwbC12MTAuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMyOCArMCwwIEBACi08aHRtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiCi14bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIgoteG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPgotCi08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPgotPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRvY3VtZW50PgotPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgOSI+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+Ci0KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sX3Rlc3RzLmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbF90ZXN0cy5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmNlMWM5MS4uMDAwMDAwMAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sX3Rlc3RzLmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTQ1ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIGZlYXR1cmUucHJvcGVydGllcwotIyBjb250YWlucyBleHRlcm5hbGl6ZWQgc3RyaW5ncyBmb3IgZmVhdHVyZS54bWwKLSMgIiVmb28iIGluIGZlYXR1cmUueG1sIGNvcnJlc3BvbmRzIHRvIHRoZSBrZXkgImZvbyIgaW4gdGhpcyBmaWxlCi0jIGphdmEuaW8uUHJvcGVydGllcyBmaWxlIChJU08gODg1OS0xIHdpdGggIlwiIGVzY2FwZXMpCi0jIFRoaXMgZmlsZSBzaG91bGQgYmUgdHJhbnNsYXRlZC4KLQotIyAiZmVhdHVyZU5hbWUiIHByb3BlcnR5IC0gbmFtZSBvZiB0aGUgZmVhdHVyZQotZmVhdHVyZU5hbWU9V1NUIFhNTCBUZXN0cwotCi0jICJwcm92aWRlck5hbWUiIHByb3BlcnR5IC0gbmFtZSBvZiB0aGUgY29tcGFueSB0aGF0IHByb3ZpZGVzIHRoZSBmZWF0dXJlCi1wcm92aWRlck5hbWU9RWNsaXBzZS5vcmcKLQotIyAidXBkYXRlU2l0ZU5hbWUiIHByb3BlcnR5IC0gbGFiZWwgZm9yIHRoZSB1cGRhdGUgc2l0ZQotdXBkYXRlU2l0ZU5hbWU9VGhlIEVjbGlwc2UgV2ViIFRvb2xzIFBsYXRmb3JtIChXVFApIFByb2plY3QgdXBkYXRlIHNpdGUKLQotIyAiZGVzY3JpcHRpb24iIHByb3BlcnR5IC0gZGVzY3JpcHRpb24gb2YgdGhlIGZlYXR1cmUKLWRlc2NyaXB0aW9uPVdTVCBYTUwgdGVzdHMKLQotIyAiY29weXJpZ2h0IiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBDb3B5cmlnaHQiCi1jb3B5cmlnaHQ9XAotQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLlxuXAotQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFsc1xuXAotYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wXG5cCi13aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdFxuXAotaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWxcblwKLVxuXAotQ29udHJpYnV0b3JzOlxuXAotICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvblxuCi0jIyMjIyMjIyMjIyMjIyMjIGVuZCBvZiBjb3B5cmlnaHQgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgImxpY2Vuc2VVUkwiIHByb3BlcnR5IC0gVVJMIG9mIHRoZSAiRmVhdHVyZSBMaWNlbnNlIgotIyBkbyBub3QgdHJhbnNsYXRlIHZhbHVlIC0ganVzdCBjaGFuZ2UgdG8gcG9pbnQgdG8gYSBsb2NhbGUtc3BlY2lmaWMgSFRNTCBwYWdlCi1saWNlbnNlVVJMPWxpY2Vuc2UuaHRtbAotCi0jICJsaWNlbnNlIiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIgotIyBzaG91bGQgYmUgcGxhaW4gdGV4dCB2ZXJzaW9uIG9mIGxpY2Vuc2UgYWdyZWVtZW50IHBvaW50ZWQgdG8gYmUgImxpY2Vuc2VVUkwiCi1saWNlbnNlPVwKLUVDTElQU0UgRk9VTkRBVElPTiBTT0ZUV0FSRSBVU0VSIEFHUkVFTUVOVFxuXAotSnVuZSAwNiwgMjAwN1xuXAotXG5cCi1Vc2FnZSBPZiBDb250ZW50XG5cCi1cblwKLVRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1JcblwKLU9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMgKENPTExFQ1RJVkVMWSAiQ09OVEVOVCIpLlxuXAotVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTXG5cCi1BR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1JcblwKLU5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1VcblwKLUFHUkVFIFRIQVQgWU9VUiBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlRcblwKLUFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTXG5cCi1PUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRVxuXAotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OU1xuXAotT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRURcblwKLUJFTE9XLCBUSEVOIFlPVSBNQVkgTk9UIFVTRSBUSEUgQ09OVEVOVC5cblwKLVxuXAotQXBwbGljYWJsZSBMaWNlbnNlc1xuXAotXG5cCi1Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvblxuXAotaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWNcblwKLUxpY2Vuc2UgVmVyc2lvbiAxLjAgKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzXG5cCi1Db250ZW50IGFuZCBpcyBhbHNvIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbC5cblwKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LlxuXAotXG5cCi1Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSxcblwKLWRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2Uub3JnIENWU1xuXAotcmVwb3NpdG9yeSAoIlJlcG9zaXRvcnkiKSBpbiBDVlMgbW9kdWxlcyAoIk1vZHVsZXMiKSBhbmQgbWFkZSBhdmFpbGFibGVcblwKLWFzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoIkRvd25sb2FkcyIpLlxuXAotXG5cCi0gICAtIENvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsXG5cCi0gICAgIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgiUGx1Zy1pbnMiKSxcblwKLSAgICAgcGx1Zy1pbiBmcmFnbWVudHMgKCJGcmFnbWVudHMiKSwgYW5kIGZlYXR1cmVzICgiRmVhdHVyZXMiKS5cblwKLSAgIC0gRWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhPyBBUmNoaXZlKVxuXAotICAgICBpbiBhIGRpcmVjdG9yeSBuYW1lZCAicGx1Z2lucyIuXG5cCi0gICAtIEEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLlxuXAotICAgICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAiZmVhdHVyZXMiLlxuXAotICAgICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb25cblwKLSAgICAgbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLlxuXAotICAgLSBGZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXNcblwKLSAgICAgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuXG5cCi1cblwKLUZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBGaWxlcyBuYW1lZFxuXAotImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2ZcblwKLUluY2x1ZGVkIEZlYXR1cmVzLlxuXAotXG5cCi1UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlXG5cCi1jb250YWluZWQgaW4gZmlsZXMgbmFtZWQgImFib3V0Lmh0bWwiICgiQWJvdXRzIikuIFRoZSB0ZXJtcyBhbmRcblwKLWNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZCBJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkXG5cCi1pbiBmaWxlcyBuYW1lZCAibGljZW5zZS5odG1sIiAoIkZlYXR1cmUgTGljZW5zZXMiKS4gQWJvdXRzIGFuZCBGZWF0dXJlXG5cCi1MaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlXG5cCi1pbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczpcblwKLVxuXAotICAgLSBUaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3RvcnlcblwKLSAgIC0gUGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXNcblwKLSAgIC0gSW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSc1xuXAotICAgLSBTdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAic3JjIiBvZiBjZXJ0YWluIFBsdWctaW5zXG5cCi0gICAtIEZlYXR1cmUgZGlyZWN0b3JpZXNcblwKLVxuXAotTm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZVxuXAotRWNsaXBzZSBVcGRhdGUgTWFuYWdlciwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgiRmVhdHVyZSBVcGRhdGVcblwKLUxpY2Vuc2UiKSBkdXJpbmcgdGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzLiBJZiB0aGUgRmVhdHVyZSBjb250YWluc1xuXAotSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3VcblwKLXdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IgaW5mb3JtXG5cCi15b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluXG5cCi10aGUgImxpY2Vuc2UiIHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICJmZWF0dXJlLnByb3BlcnRpZXMiLiBTdWNoIEFib3V0cyxcblwKLUZlYXR1cmUgTGljZW5zZXMgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZFxuXAotY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyXG5cCi11c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbiB0aGF0IGRpcmVjdG9yeS5cblwKLVxuXAotVEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUyBBTkQgRkVBVFVSRSBVUERBVEUgTElDRU5TRVMgTUFZIFJFRkVSXG5cCi1UTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy5cblwKLVNPTUUgT0YgVEhFU0UgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTIE1BWSBJTkNMVURFIChCVVQgQVJFIE5PVCBMSU1JVEVEIFRPKTpcblwKLVxuXAotICAgIC0gQ29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwpXG5cCi0gICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSlcblwKLSAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMClcblwKLSAgICAtIElCTSBQdWJsaWMgTGljZW5zZSAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbClcblwKLSAgICAtIE1ldHJvIExpbmsgUHVibGljIExpY2Vuc2UgMS4wMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sKVxuXAotICAgIC0gTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbClcblwKLSAgICAtIENvbW1vbiBEZXZlbG9wbWVudCBhbmQgRGlzdHJpYnV0aW9uIExpY2Vuc2UgKENEREwpIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5zdW4uY29tL2NkZGwvY2RkbC5odG1sKVxuXAotXG5cCi1JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SXG5cCi1UTyBVU0UgT0YgVEhFIENPTlRFTlQuIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2Ugb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZVxuXAotaXMgcHJvdmlkZWQsIHBsZWFzZSBjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIGNvbmRpdGlvbnNcblwKLWdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC5cblwKLVxuXAotQ3J5cHRvZ3JhcGh5XG5cCi1cblwKLUNvbnRlbnQgbWF5IGNvbnRhaW4gZW5jcnlwdGlvbiBzb2Z0d2FyZS4gVGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZVxuXAotY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLFxuXAotYW5kL29yIHJlLWV4cG9ydCB0byBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRVxuXAotdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsXG5cCi1yZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgY29uY2VybmluZyB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBvciB1c2UsXG5cCi1hbmQgcmUtZXhwb3J0IG9mIGVuY3J5cHRpb24gc29mdHdhcmUsIHRvIHNlZSBpZiB0aGlzIGlzIHBlcm1pdHRlZC5cblwKLVxuXAotSmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguXG4KLSMjIyMjIyMjIyMjIGVuZCBvZiBsaWNlbnNlIHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbF90ZXN0cy5mZWF0dXJlL2ZlYXR1cmUueG1sIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbF90ZXN0cy5mZWF0dXJlL2ZlYXR1cmUueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzkwYjRkLi4wMDAwMDAwCi0tLSBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWxfdGVzdHMuZmVhdHVyZS9mZWF0dXJlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGZlYXR1cmUKLSAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QueG1sX3Rlc3RzLmZlYXR1cmUiCi0gICAgICBsYWJlbD0iJWZlYXR1cmVOYW1lIgotICAgICAgdmVyc2lvbj0iMy4xLjAucXVhbGlmaWVyIgotICAgICAgcHJvdmlkZXItbmFtZT0iJXByb3ZpZGVyTmFtZSI+Ci0KLSAgIDxkZXNjcmlwdGlvbj4KLSAgICAgICVkZXNjcmlwdGlvbgotICAgPC9kZXNjcmlwdGlvbj4KLQotICAgPGNvcHlyaWdodD4KLSAgICAgICVjb3B5cmlnaHQKLSAgIDwvY29weXJpZ2h0PgotCi0gICA8bGljZW5zZSB1cmw9ImxpY2Vuc2UuaHRtbCI+Ci0gICAgICAlbGljZW5zZQotICAgPC9saWNlbnNlPgotCi0gICA8dXJsPgotICAgICAgPHVwZGF0ZSBsYWJlbD0iJXVwZGF0ZVNpdGVOYW1lIiB1cmw9Imh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy93ZWJ0b29scy91cGRhdGVzLyIvPgotICAgPC91cmw+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGVzdHMiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cyIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLnBlcmZvcm1hbmNlIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmciCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMucGVyZm9ybWFuY2UiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cyIKLSAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiCi0gICAgICAgICBpbnN0YWxsLXNpemU9IjAiCi0gICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgotCi0gICA8cGx1Z2luCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QueHNkLnRlc3RzLnBlcmZvcm1hbmNlIgotICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKLSAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKLSAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+Ci0KLSAgIDxwbHVnaW4KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotICAgPHBsdWdpbgotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMiCi0gICAgICAgICBkb3dubG9hZC1zaXplPSIwIgotICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgotICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KLQotPC9mZWF0dXJlPgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbF90ZXN0cy5mZWF0dXJlL2xpY2Vuc2UuaHRtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWxfdGVzdHMuZmVhdHVyZS9saWNlbnNlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwM2U2NjUuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbF90ZXN0cy5mZWF0dXJlL2xpY2Vuc2UuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczYy5vcmcvVFIvMTk5OS9SRUMtaHRtbDQwMS0xOTk5MTIyNC9sb29zZS5kdGQiPgotPCEtLSBzYXZlZCBmcm9tIHVybD0oMDA0NClodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC9ub3RpY2UuaHRtbCAtLT4KLTxIVE1MPjxIRUFEPjxUSVRMRT5FY2xpcHNlLm9yZyBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvVElUTEU+Ci08TUVUQSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Ci08TUVUQSBjb250ZW50PSJNU0hUTUwgNi4wMC4yODAwLjE0NzkiIG5hbWU9R0VORVJBVE9SPjwvSEVBRD4KLTxCT0RZIGxhbmc9RU4tVVMgdkxpbms9cHVycGxlIGxpbms9Ymx1ZT4KLTxIMj5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L0gyPgotPFA+SnVuZSAwNiwgMjAwNzwvUD4KLTxIMz5Vc2FnZSBPZiBDb250ZW50PC9IMz4KLTxQPlRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiAKLUFORC9PUiBPVEhFUiBNQVRFUklBTFMgRk9SIE9QRU4gU09VUkNFIFBST0pFQ1RTIChDT0xMRUNUSVZFTFkgIkNPTlRFTlQiKS4gVVNFIE9GIAotVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgCi1URVJNUyBBTkQgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCAKLUJFTE9XLiBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VIEFHUkVFIFRIQVQgWU9VUiBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgCi1CWSBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgCi1BR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFIAotVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgCi1BUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLCBUSEVOIFlPVSAKLU1BWSBOT1QgVVNFIFRIRSBDT05URU5ULjwvUD4KLTxIMz5BcHBsaWNhYmxlIExpY2Vuc2VzPC9IMz4KLTxQPlVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSAKLUZvdW5kYXRpb24gaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSAKLVB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wICgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIHByb3ZpZGVkIHdpdGggdGhpcyAKLUNvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IDxBIAotaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci08UD5Db250ZW50IGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSwgCi1kb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlLm9yZyBDVlMgcmVwb3NpdG9yeSAKLSgiUmVwb3NpdG9yeSIpIGluIENWUyBtb2R1bGVzICgiTW9kdWxlcyIpIGFuZCBtYWRlIGF2YWlsYWJsZSBhcyBkb3dubG9hZGFibGUgCi1hcmNoaXZlcyAoIkRvd25sb2FkcyIpLjwvUD4KLTxQPkNvbnRlbnQgbWF5IGJlIGFwcG9ydGlvbmVkIGludG8gcGx1Zy1pbnMgKCJQbHVnLWlucyIpLCBwbHVnLWluIGZyYWdtZW50cyAKLSgiRnJhZ21lbnRzIiksIGFuZCBmZWF0dXJlcyAoIkZlYXR1cmVzIikuIEEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSAKLVBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuIEZpbGVzIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IAotY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgCi1hc3NvY2lhdGVkIHdpdGggYSBGZWF0dXJlLiBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIGFyZSBsb2NhdGVkIGluIGRpcmVjdG9yaWVzIAotbmFtZWQgInBsdWdpbnMiIGFuZCBGZWF0dXJlcyBhcmUgbG9jYXRlZCBpbiBkaXJlY3RvcmllcyBuYW1lZCAiZmVhdHVyZXMiLjwvUD4KLTxQPkZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBGaWxlcyBuYW1lZCAKLSJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIAotRmVhdHVyZXMuPC9QPgotPFA+VGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZSBjb250YWluZWQgCi1pbiBmaWxlcyBuYW1lZCAiYWJvdXQuaHRtbCIgKCJBYm91dHMiKS4gVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyAKLUZlYXR1cmVzIGFuZCBJbmNsdWRlZCBGZWF0dXJlcyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICJsaWNlbnNlLmh0bWwiIAotKCJGZWF0dXJlIExpY2Vuc2VzIikuIEFib3V0cyBhbmQgRmVhdHVyZSBMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgCi1kaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGUgaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyAKLWxvY2F0aW9uczo8L1A+Ci08VUw+Ci0gIDxMST5UaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3RvcnkgCi0gIDxMST5QbHVnLWluIGFuZCBGcmFnbWVudCBkaXJlY3RvcmllcyAKLSAgPExJPlN1YmRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgInNyYyIgb2YgY2VydGFpbiBQbHVnLWlucyAKLSAgPExJPkZlYXR1cmUgZGlyZWN0b3JpZXMgPC9MST48L1VMPgotPFA+Tm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIAotdXNpbmcgdGhlIEVjbGlwc2UgVXBkYXRlIE1hbmFnZXIsIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoIkZlYXR1cmUgVXBkYXRlIAotTGljZW5zZSIpIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MuIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zIEluY2x1ZGVkIAotRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3Ugd2l0aCB0aGUgdGVybXMgCi1hbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yIGluZm9ybSB5b3Ugd2hlcmUgeW91IGNhbiAKLWxvY2F0ZSB0aGVtLiBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW4gdGhlICJsaWNlbnNlIiBwcm9wZXJ0eSBvZiAKLWZpbGVzIG5hbWVkICJmZWF0dXJlLnByb3BlcnRpZXMiLiBTdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcyBhbmQgRmVhdHVyZSAKLVVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIAotYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4gdGhhdCAKLWRpcmVjdG9yeS48L1A+Ci08UD5USEUgQUJPVVRTLCBGRUFUVVJFIExJQ0VOU0VTIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVIgVE8gVEhFIEVQTCAKLU9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy4gU09NRSBPRiBUSEVTRSAKLU9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6PC9QPgotPFVMPgotICA8TEk+Q29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbDwvQT4pCi0KLSAgPExJPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0U8L0E+KQotCi0gIDxMST5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjA8L0E+KQotCi0gIDxMST5JQk0gUHVibGljIExpY2Vuc2UgMS4wIChhdmFpbGFibGUgYXQgPEEgCi0gIGhyZWY9Imh0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9vcGVuc291cmNlL2xpY2Vuc2UxMC5odG1sIj5odHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vZGV2ZWxvcGVyd29ya3Mvb3BlbnNvdXJjZS9saWNlbnNlMTAuaHRtbDwvQT4pCi0gIDxMST5NZXRybyBMaW5rIFB1YmxpYyBMaWNlbnNlIDEuMDAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29wZW5tb3RpZi9zdXBwb3J0ZXJzL21ldHJvbGluay9saWNlbnNlLmh0bWwiPmh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vcGVubW90aWYvc3VwcG9ydGVycy9tZXRyb2xpbmsvbGljZW5zZS5odG1sPC9BPikgCi0gIAotICA8TEk+TW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IDxBIAotICBocmVmPSJodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwiPmh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbDwvQT4pIDwvTEk+Ci0gIAotICA8bGk+Q29tbW9uIERldmVsb3BtZW50IGFuZCBEaXN0cmlidXRpb24gTGljZW5zZSAoQ0RETCkgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8QSAKLSAgaHJlZj0iaHR0cDovL3d3dy5zdW4uY29tL2NkZGwvY2RkbC5odG1sIj5odHRwOi8vd3d3LnN1bi5jb20vY2RkbC9jZGRsLmh0bWwpPC9BPgotICA8L0xJPgotPC9VTD4KLTxQPklUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1IgCi1UTyBVU0UgT0YgVEhFIENPTlRFTlQuIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2Ugb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBpcyAKLXByb3ZpZGVkLCBwbGVhc2UgY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCAKLWNvbmRpdGlvbnMgZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LjwvUD4KLTxIMz5DcnlwdG9ncmFwaHk8L0gzPgotPFA+Q29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlIAotY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLCBhbmQvb3IgCi1yZS1leHBvcnQgdG8gYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkUgdXNpbmcgYW55IAotZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cywgcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIAotY29uY2VybmluZyB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgCi10byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuPC9QPjwvQk9EWT48L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlNzM5MzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS40Ii8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvLmN2c2lnbm9yZSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmY4MmM3Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLWJpbgotYnVpbGQueG1sCi10ZW1wLmZvbGRlcgotanNwZW5jb2Rpbmd0ZXN0cy5qYXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZWE2MWQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmYTVjOTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjMyIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotZW5jb2RpbmcvPHByb2plY3Q+PUlTTy04ODU5LTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkZDhiNWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0jU3VuIEFwciAxNiAxNDozNzoyMSBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuY2xlYW5PdXRwdXRGb2xkZXI9Y2xlYW4KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuZHVwbGljYXRlUmVzb3VyY2VUYXNrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuaW52YWxpZENsYXNzcGF0aD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIucmVzb3VyY2VDb3B5RXhjbHVzaW9uRmlsdGVyPSoubGF1bmNoCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jaXJjdWxhckNsYXNzcGF0aD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLmV4Y2x1c2lvblBhdHRlcm5zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aC5tdWx0aXBsZU91dHB1dExvY2F0aW9ucz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuMgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRvYy5jb21tZW50LnN1cHBvcnQ9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIubWF4UHJvYmxlbVBlclVuaXQ9MTAwCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvYz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzRGVwcmVjYXRlZFJlZj1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc05vdFZpc2libGVSZWY9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXByaXZhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHM9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNPdmVycmlkaW5nPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c1Zpc2liaWxpdHk9cHVibGljCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFncz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzT3ZlcnJpZGluZz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHJpdmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuc2FmZVR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGF0aWJsZUpES0xldmVsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wbGV0ZUNsYXNzcGF0aD1lcnJvcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjJhYzY1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMDQgMDM6MzY6MzkgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1pbnRlcm5hbC5kZWZhdWx0LmNvbXBsaWFuY2U9ZGVmYXVsdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU5MzY4Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMDQgMDM6MzY6MzIgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5lbmFibGUucHJvamVjdC5yZWZhY3RvcmluZy5oaXN0b3J5PWZhbHNlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3MjQ5NTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotI1N1biBBcHIgMTYgMTQ6MDU6MjkgRURUIDIwMDYKLWNvbXBpbGVycy5wLmJ1aWxkPTAKLWNvbXBpbGVycy5wLmRlcHJlY2F0ZWQ9MQotY29tcGlsZXJzLnAuaWxsZWdhbC1hdHQtdmFsdWU9MAotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLm5vdC1leHRlcm5hbGl6ZWQtYXR0PTAKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MAotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTAKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnAudW51c2VkLWVsZW1lbnQtb3ItYXR0cmlidXRlPTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0MTdhZGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZS4wCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nCi1CdW5kbGUtVmVyc2lvbjogMS4wLjMwMC5xdWFsaWZpZXIKLUJ1bmRsZS1DbGFzc1BhdGg6IGpzcGVuY29kaW5ndGVzdHMuamFyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLkpTUEVuY29kaW5nVGVzdHNQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yLjAKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcsCi0gb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy5qc3AKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcywKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCi0gb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLAotIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZSwKLSBvcmcuanVuaXQ7YnVuZGxlLXZlcnNpb249IlszLjguMiw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZSwKLSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nCi1CdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS40CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL2Fib3V0Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTlkZjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSwgMjAwODwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL2J1aWxkLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2Yjg1NDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotc291cmNlLmpzcGVuY29kaW5ndGVzdHMuamFyID0gc3JjLwotb3V0cHV0LmpzcGVuY29kaW5ndGVzdHMuamFyID0gYmluLwotYmluLmluY2x1ZGVzID0ganNwZW5jb2Rpbmd0ZXN0cy5qYXIsXAotICAgICAgICAgICAgICAgdGVzdGZpbGVzLyxcCi0gICAgICAgICAgICAgICB0ZXN0LnhtbCxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcwotc3JjLmluY2x1ZGVzID0gdGVzdGZpbGVzLyxcCi0gICAgICAgICAgICAgICB0ZXN0LnhtbCxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvcGx1Z2luLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZWE5ZjFmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIHByb3BlcnRpZXMgZmlsZSBmb3Igb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZwotQnVuZGxlLVZlbmRvci4wID0gRWNsaXBzZS5vcmcKLUJ1bmRsZS1OYW1lLjAgPSBKU1AgRW5jb2RpbmcgVGVzdHMgUGx1Zy1pbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdGVzdHMvZW5jb2RpbmcvSlNQRW5jb2RpbmdUZXN0U3VpdGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdGVzdHMvZW5jb2RpbmcvSlNQRW5jb2RpbmdUZXN0U3VpdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQwOTdlMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3Rlc3RzL2VuY29kaW5nL0pTUEVuY29kaW5nVGVzdFN1aXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZzsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLmpzcC5KU1BFbmNvZGluZ1Rlc3RzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcuanNwLkpTUEhlYWRUb2tlbml6ZXJUZXN0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy5qc3AuVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uRm9ySlNQOwotCi1wdWJsaWMgY2xhc3MgSlNQRW5jb2RpbmdUZXN0U3VpdGUgZXh0ZW5kcyBUZXN0U3VpdGUgewotCi0JcHJpdmF0ZSBzdGF0aWMgQ2xhc3NbXSBjbGFzc2VzID0gbmV3IENsYXNzW117SlNQRW5jb2RpbmdUZXN0cy5jbGFzcywgSlNQSGVhZFRva2VuaXplclRlc3Rlci5jbGFzcywgVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uRm9ySlNQLmNsYXNzfTsKLQotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBKU1BFbmNvZGluZ1Rlc3RTdWl0ZSgpOwotCX0KLQotCXB1YmxpYyBKU1BFbmNvZGluZ1Rlc3RTdWl0ZSgpIHsKLQkJc3VwZXIoIkpTUCBFbmNvZGluZyBUZXN0IFN1aXRlIik7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY2xhc3Nlcy5sZW5ndGg7IGkrKykgewotCQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKGNsYXNzZXNbaV0sIGNsYXNzZXNbaV0uZ2V0TmFtZSgpKSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gdGhlQ2xhc3MKLQkgKi8KLQlwdWJsaWMgSlNQRW5jb2RpbmdUZXN0U3VpdGUoQ2xhc3MgdGhlQ2xhc3MpIHsKLQkJc3VwZXIodGhlQ2xhc3MpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSB0aGVDbGFzcwotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIEpTUEVuY29kaW5nVGVzdFN1aXRlKENsYXNzIHRoZUNsYXNzLCBTdHJpbmcgbmFtZSkgewotCQlzdXBlcih0aGVDbGFzcywgbmFtZSk7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgSlNQRW5jb2RpbmdUZXN0U3VpdGUoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC90ZXN0cy9lbmNvZGluZy9KU1BFbmNvZGluZ1Rlc3RzUGx1Z2luLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3Rlc3RzL2VuY29kaW5nL0pTUEVuY29kaW5nVGVzdHNQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2ZkZWNkMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3Rlc3RzL2VuY29kaW5nL0pTUEVuY29kaW5nVGVzdHNQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZzsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLQotLyoqCi0gKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSAqLwotcHVibGljIGNsYXNzIEpTUEVuY29kaW5nVGVzdHNQbHVnaW4gZXh0ZW5kcyBQbHVnaW4gewotCS8vIFRoZSBzaGFyZWQgaW5zdGFuY2UuCi0JcHJpdmF0ZSBzdGF0aWMgSlNQRW5jb2RpbmdUZXN0c1BsdWdpbiBwbHVnaW47Ci0KLQlwdWJsaWMgc3RhdGljIExpc3QgZ2V0QWxsVGVzdEZpbGVzKFN0cmluZyB0b3BEaXJOYW1lKSB7Ci0JCUxpc3QgcmVzdWx0ID0gbnVsbDsKLQkJVVJMIGluc3RhbGxVUkwgPSBnZXRJbnN0YWxsTG9jYXRpb24oKTsKLQkJLy8gU3RyaW5nIHNjaGVtZSA9IGluc3RhbGxVUkwuZ2V0UHJvdG9jb2woKTsKLQkJU3RyaW5nIHBhdGggPSBpbnN0YWxsVVJMLmdldFBhdGgoKTsKLQkJU3RyaW5nIGxvY2F0aW9uID0gcGF0aCArIHRvcERpck5hbWU7Ci0JCUZpbGUgdG9wRGlyID0gbmV3IEZpbGUobG9jYXRpb24pOwotCQlpZiAoIXRvcERpci5pc0RpcmVjdG9yeSgpKSB7Ci0JCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKHRvcERpck5hbWUgKyAiIGlzIG5vdCBhIGRpcmVjdG9yeSIpOwotCQl9Ci0KLQkJcmVzdWx0ID0gZ2V0RmlsZXNJbkRpcih0b3BEaXIpOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIEpTUEVuY29kaW5nVGVzdHNQbHVnaW4gZ2V0RGVmYXVsdCgpIHsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBMaXN0IGdldEZpbGVzSW5EaXIoRmlsZSB0b3BEaXIpIHsKLQkJTGlzdCBmaWxlcyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJRmlsZVtdIHRvcEZpbGVzID0gdG9wRGlyLmxpc3RGaWxlcygpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHRvcEZpbGVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlGaWxlIGZpbGUgPSB0b3BGaWxlc1tpXTsKLQkJCWlmIChmaWxlLmlzRmlsZSgpKSB7Ci0JCQkJZmlsZXMuYWRkKGZpbGUpOwotCQkJfQotCQkJZWxzZSBpZiAoZmlsZS5pc0RpcmVjdG9yeSgpICYmICFmaWxlLmdldE5hbWUoKS5lbmRzV2l0aCgiQ1ZTIikpIHsKLQkJCQlMaXN0IGlubmVyRmlsZXMgPSBnZXRGaWxlc0luRGlyKGZpbGUpOwotCQkJCWZpbGVzLmFkZEFsbChpbm5lckZpbGVzKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZmlsZXM7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBVUkwgZ2V0SW5zdGFsbExvY2F0aW9uKCkgewotCQlVUkwgaW5zdGFsbExvY2F0aW9uID0gUGxhdGZvcm0uZ2V0QnVuZGxlKCJvcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nIikuZ2V0RW50cnkoIi8iKTsKLQkJVVJMIHJlc29sdmVkTG9jYXRpb24gPSBudWxsOwotCQl0cnkgewotCQkJcmVzb2x2ZWRMb2NhdGlvbiA9IEZpbGVMb2NhdG9yLnJlc29sdmUoaW5zdGFsbExvY2F0aW9uKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJLy8gaW1wb3NzaWJsZQotCQkJdGhyb3cgbmV3IEVycm9yKGUpOwotCQl9Ci0JCXJldHVybiByZXNvbHZlZExvY2F0aW9uOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHN0cmluZyBmcm9tIHRoZSBwbHVnaW4ncyByZXNvdXJjZSBidW5kbGUsIG9yICdrZXknIGlmIG5vdAotCSAqIGZvdW5kLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFJlc291cmNlU3RyaW5nKFN0cmluZyBrZXkpIHsKLQkJUmVzb3VyY2VCdW5kbGUgYnVuZGxlID0gSlNQRW5jb2RpbmdUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UmVzb3VyY2VCdW5kbGUoKTsKLQkJdHJ5IHsKLQkJCXJldHVybiAoYnVuZGxlICE9IG51bGwgPyBidW5kbGUuZ2V0U3RyaW5nKGtleSkgOiBrZXkpOwotCQl9Ci0JCWNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgewotCQkJcmV0dXJuIGtleTsKLQkJfQotCX0KLQotCXB1YmxpYyBzdGF0aWMgRmlsZSBnZXRUZXN0RmlsZShTdHJpbmcgZmlsZXBhdGgpIHsKLQkJVVJMIGluc3RhbGxVUkwgPSBnZXRJbnN0YWxsTG9jYXRpb24oKTsKLQkJLy8gU3RyaW5nIHNjaGVtZSA9IGluc3RhbGxVUkwuZ2V0UHJvdG9jb2woKTsKLQkJU3RyaW5nIHBhdGggPSBpbnN0YWxsVVJMLmdldFBhdGgoKTsKLQkJU3RyaW5nIGxvY2F0aW9uID0gcGF0aCArIGZpbGVwYXRoOwotCQlGaWxlIHJlc3VsdCA9IG5ldyBGaWxlKGxvY2F0aW9uKTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFJlYWRlciBnZXRUZXN0UmVhZGVyKFN0cmluZyBmaWxlcGF0aCkgdGhyb3dzIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiB7Ci0JCVVSTCBpbnN0YWxsVVJMID0gZ2V0SW5zdGFsbExvY2F0aW9uKCk7Ci0JCS8vIFN0cmluZyBzY2hlbWUgPSBpbnN0YWxsVVJMLmdldFByb3RvY29sKCk7Ci0JCVN0cmluZyBwYXRoID0gaW5zdGFsbFVSTC5nZXRQYXRoKCk7Ci0JCVN0cmluZyBsb2NhdGlvbiA9IHBhdGggKyBmaWxlcGF0aDsKLQkJUmVhZGVyIHJlc3VsdCA9IG5ldyBGaWxlUmVhZGVyKGxvY2F0aW9uKTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB3b3Jrc3BhY2UgaW5zdGFuY2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBJV29ya3NwYWNlIGdldFdvcmtzcGFjZSgpIHsKLQkJcmV0dXJuIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKTsKLQl9Ci0KLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIEpTUEVuY29kaW5nVGVzdHNQbHVnaW4oKSB7Ci0JCXN1cGVyKCk7Ci0JCXBsdWdpbiA9IHRoaXM7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLAotCSAqLwotCXB1YmxpYyBSZXNvdXJjZUJ1bmRsZSBnZXRSZXNvdXJjZUJ1bmRsZSgpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3Rlc3RzL2VuY29kaW5nL2pzcC9KU1BFbmNvZGluZ1Rlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3Rlc3RzL2VuY29kaW5nL2pzcC9KU1BFbmNvZGluZ1Rlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2Nzc3YzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC90ZXN0cy9lbmNvZGluZy9qc3AvSlNQRW5jb2RpbmdUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjA0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLmpzcDsKLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci1pbXBvcnQgamF2YS5uaW8uY2hhcnNldC5DaGFyc2V0OwotaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuQ2hhcnNldERlY29kZXI7Ci1pbXBvcnQgamF2YS5uaW8uY2hhcnNldC5Db2RpbmdFcnJvckFjdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5jb250ZW50dHlwZS5KU1BSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy5KU1BFbmNvZGluZ1Rlc3RzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5FbmNvZGluZ01lbWVudG87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLklSZXNvdXJjZUNoYXJzZXREZXRlY3RvcjsKLQotcHVibGljIGNsYXNzIEpTUEVuY29kaW5nVGVzdHMgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQkvKioKLQkgKiBFbnN1cmVzIHRoYXQgYW4gSW5wdXRTdHJlYW0gaGFzIG1hcmsvcmVzZXQgc3VwcG9ydC4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBJbnB1dFN0cmVhbSBnZXRNYXJrU3VwcG9ydGVkU3RyZWFtKElucHV0U3RyZWFtIG9yaWdpbmFsKSB7Ci0JCWlmIChvcmlnaW5hbCA9PSBudWxsKQotCQkJcmV0dXJuIG51bGw7Ci0JCWlmIChvcmlnaW5hbC5tYXJrU3VwcG9ydGVkKCkpCi0JCQlyZXR1cm4gb3JpZ2luYWw7Ci0JCXJldHVybiBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbShvcmlnaW5hbCk7Ci0JfQotCXByaXZhdGUgYm9vbGVhbiBERUJVRyA9IGZhbHNlOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVEaXIgPSAianNwLyI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZUhvbWUgPSAidGVzdGZpbGVzLyI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZUxvY2F0aW9uID0gZmlsZUhvbWUgKyBmaWxlRGlyOwotCXByaXZhdGUgaW50IFJFQURfQlVGRkVSX1NJWkUgPSA4MDAwOwotCi0JcHVibGljIEpTUEVuY29kaW5nVGVzdHMoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGRvVGVzdEZpbGVTdHJlYW0oU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgZXhwZWN0ZWRJQU5BRW5jb2RpbmcsIElSZXNvdXJjZUNoYXJzZXREZXRlY3RvciBkZXRlY3RvcikgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJRmlsZSBmaWxlID0gSlNQRW5jb2RpbmdUZXN0c1BsdWdpbi5nZXRUZXN0RmlsZShmaWxlbmFtZSk7Ci0JCWlmICghZmlsZS5leGlzdHMoKSkKLQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oZmlsZW5hbWUgKyAiIHdhcyBub3QgZm91bmQiKTsKLQkJSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0gPSBuZXcgRmlsZUlucHV0U3RyZWFtKGZpbGUpOwotCQkvLyBJbnB1dFN0cmVhbSBpblN0cmVhbSA9IGdldENsYXNzKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbShmaWxlbmFtZSk7Ci0JCUlucHV0U3RyZWFtIGlzdHJlYW0gPSBnZXRNYXJrU3VwcG9ydGVkU3RyZWFtKGlucHV0U3RyZWFtKTsKLQkJdHJ5IHsKLQkJCWRldGVjdG9yLnNldChpc3RyZWFtKTsKLQkJCUVuY29kaW5nTWVtZW50byBlbmNvZGluZ01lbWVudG8gPSAoKEpTUFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcilkZXRlY3RvcikuZ2V0RW5jb2RpbmdNZW1lbnRvKCk7Ci0JCQlTdHJpbmcgZm91bmRJQU5BRW5jb2RpbmcgPSBlbmNvZGluZ01lbWVudG8uZ2V0SmF2YUNoYXJzZXROYW1lKCk7Ci0JCQkvLyBJIGNoYW5nZWQgbWFueSAiZXF1YWxzIiB0byAiZXF1YWxzSWdub3JlQ2FzZSIgb24gMTEvNC8yMDAyLAotCQkJLy8gc2luY2UKLQkJCS8vIHNvbWUgaXNzdWVzIHdpdGggU0hJRlRfSklTIHZzLiBTaGlmdF9KSVMgd2VyZSBjYXVzaW5nIGZhaWx1cmVzLgotCQkJLy8gV2UgZG8gd2FudCB0byBiZSB0b2xlcmFudCBvbiBpbnB1dCwgYW5kIGFjY2VwdCBlaXRoZXIsIGJ1dCBJCi0JCQkvLyB0aGluawotCQkJLy8gdGhhdCBTdXBwb3J0ZWRKYXZhRW5jb2RpbmdzIG5lZWRzIHRvIGJlIGNoYW5nZWQgdG8gInJlY29tbWVuZCIKLQkJCS8vIFNoaWZ0X0pJUy4KLQkJCWJvb2xlYW4gZXhwZWN0ZWRJQU5BUmVzdWx0ID0gZmFsc2U7Ci0JCQlleHBlY3RlZElBTkFSZXN1bHQgPSBleHBlY3RlZElBTkFFbmNvZGluZy5lcXVhbHNJZ25vcmVDYXNlKGZvdW5kSUFOQUVuY29kaW5nKTsKLQotCQkJYXNzZXJ0VHJ1ZSgiZW5jb2RpbmcgdGVzdCBmaWxlICIgKyBmaWxlbmFtZSArICIgZXhwZWN0ZWQ6ICIgKyBleHBlY3RlZElBTkFFbmNvZGluZyArICIgZm91bmQ6ICIgKyBmb3VuZElBTkFFbmNvZGluZywgZXhwZWN0ZWRJQU5BUmVzdWx0KTsKLQkJCS8vIGEgdmVyeSBzaW1wbGUgcmVhZCB0ZXN0IC4uLiB3aWxsIGNhdXNlIEpVbml0IGVycm9yIChub3QgZmFpbCkKLQkJCS8vIGlmIHRocm93cyBleGNlcHRpb24uCi0JCQllbnN1cmVDYW5SZWFkKGZpbGVuYW1lLCBmb3VuZElBTkFFbmNvZGluZywgaXN0cmVhbSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAoaXN0cmVhbSAhPSBudWxsKSB7Ci0JCQkJaXN0cmVhbS5jbG9zZSgpOwotCQkJfQotCQkJaWYgKGlucHV0U3RyZWFtICE9IG51bGwpIHsKLQkJCQlpbnB1dFN0cmVhbS5jbG9zZSgpOwotCQkJfQotCQl9Ci0JfQotCi0JLyoqCi0JICogVGhpcyBtZXRob2QganVzdCByZWFkcyB0byBzdHJlYW0sIHRvIGJlIHN1cmUgaXQgY2FuIGJlIHJlYWQgcGVyCi0JICogZW5jb2RpbmcsIHdpdGhvdXQgZXhjZXB0aW9uLgotCSAqLwotCXByaXZhdGUgdm9pZCBlbnN1cmVDYW5SZWFkKFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIGVuY29kaW5nLCBJbnB1dFN0cmVhbSBpblN0cmVhbSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJQ2hhcnNldCBjaGFyc2V0ID0gQ2hhcnNldC5mb3JOYW1lKGVuY29kaW5nKTsKLQkJQ2hhcnNldERlY29kZXIgY2hhcnNldERlY29kZXIgPSBjaGFyc2V0Lm5ld0RlY29kZXIoKTsKLQkJY2hhcnNldERlY29kZXIub25NYWxmb3JtZWRJbnB1dChDb2RpbmdFcnJvckFjdGlvbi5SRVBPUlQpOwotCQljaGFyc2V0RGVjb2Rlci5vblVubWFwcGFibGVDaGFyYWN0ZXIoQ29kaW5nRXJyb3JBY3Rpb24uUkVQT1JUKTsKLQotCQlJbnB1dFN0cmVhbVJlYWRlciByZWFkZXIgPSBuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaW5TdHJlYW0sIGNoYXJzZXREZWNvZGVyKTsKLQkJU3RyaW5nQnVmZmVyIHN0cmluZ0J1ZmZlciA9IHJlYWRJbnB1dFN0cmVhbShyZWFkZXIpOwotCQlpZiAoREVCVUcpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKGZpbGVuYW1lKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihzdHJpbmdCdWZmZXIudG9TdHJpbmcoKSk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIFN0cmluZ0J1ZmZlciByZWFkSW5wdXRTdHJlYW0oUmVhZGVyIHJlYWRlcikgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQotCQlTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlpbnQgbnVtUmVhZCA9IDA7Ci0JCWNoYXIgdEJ1ZmZbXSA9IG5ldyBjaGFyW1JFQURfQlVGRkVSX1NJWkVdOwotCQl3aGlsZSAoKG51bVJlYWQgPSByZWFkZXIucmVhZCh0QnVmZiwgMCwgdEJ1ZmYubGVuZ3RoKSkgIT0gLTEpIHsKLQkJCWJ1ZmZlci5hcHBlbmQodEJ1ZmYsIDAsIG51bVJlYWQpOwotCQl9Ci0JCXJldHVybiBidWZmZXI7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdGRlZmVjdDQyMDV3cHNqc3AoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiZGVmZWN0XzQyMDVfd3BzLmpzcCI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsICJVVEYtOCIsIG5ldyBKU1BSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEpTUEVtcHR5RmlsZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJFbXB0eUZpbGUuanNwIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgIklTTy04ODU5LTEiLCBuZXcgSlNQUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQotCS8qKgotCSAqIENhdXRpb24sIHdoZW4gdGhpcyBmaWxlIHByaW50cyBvdXQgaW4gY29uc29sZSAod2hlbiBkZWJ1ZyBzZXQgdG8gdHJ1ZSwKLQkgKiBpdCBhcHBlYXJzIGluY29ycmVjdCAoZHVlIHRvIGZvbnQgcHJvYmxlbXMgaW4gY29uc29sZSkuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFVURjE2KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInRlc3RVVEYxNi5qc3AiOwotCQkvLyBbMjI4MzY2XSBFbmNvZGluZyBjaGFuZ2VzOiBGb3IgVVRGLTE2IHdpdGggQk9NLCB0aGUgZXhwZWN0ZWQgc2hvdWxkIGJlIFVURi0xNgotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCAiVVRGLTE2IiwgbmV3IEpTUFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLQkvKioKLQkgKiBUaGlzIHRlc3Qgc2hvd3MgdW5pY29kZSBCT00gc2hvdWxkIHRha2UgcHJpb3JpdHkgb3ZlciBzZXR0aW5ncy9kZWZhdWx0cwotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RVdGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInV0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXIyLmpzcCI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsICJVVEYtMTYiLCBuZXcgSlNQUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQotCS8qKgotCSAqIFRoaXMgdGVzdCBzaG93cyB1bmljb2RlIEJPTSBzaG91bGQgdGFrZSBwcmlvcml0eSBvdmVyIHNldHRpbmdzL2RlZmF1bHRzCi0JICogTm90ZTogVVRGLTE2ID09IFVURi0xNkJFCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFV0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXJCRSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ1dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyQkUuanNwIjsKLQkJLy8gWzIyODM2Nl0gRW5jb2RpbmcgY2hhbmdlczogRm9yIFVURi0xNiB3aXRoIEJPTSwgdGhlIGV4cGVjdGVkIHNob3VsZCBiZSBVVEYtMTYKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgIlVURi0xNiIsIG5ldyBKU1BSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFVURjE2V2l0aEphcGFuZXNlQ2hhcnMoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidXRmMTZXaXRoSmFwYW5lc2VDaGFycy5qc3AiOwotCQkvLyBbMjI4MzY2XSBFbmNvZGluZyBjaGFuZ2VzOiBGb3IgVVRGLTE2IHdpdGggQk9NLCB0aGUgZXhwZWN0ZWQgc2hvdWxkIGJlIFVURi0xNgotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCAiVVRGLTE2IiwgbmV3IEpTUFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0VVRGODNCeXRlQk9NKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIlVURjhXaXRoM0J5dGVCT00uanNwIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgIlVURi04IiwgbmV3IEpTUFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0WE1MSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJJbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0LmpzcCI7Ci0JCVN0cmluZyBpYW5hSW5GaWxlID0gIklTTy04ODU5LTgiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCBpYW5hSW5GaWxlLCBuZXcgSlNQUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RYTUxOb0VuY29kaW5nKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIm5vRW5jb2RpbmcuanNwIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgIklTTy04ODU5LTEiLCBuZXcgSlNQUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RYTUxOb3JtYWxOb25EZWZhdWx0KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIk5vcm1hbE5vbkRlZmF1bHQuanNwIjsKLQkJU3RyaW5nIGlhbmFJbkZpbGUgPSAiSVNPLTg4NTktOCI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsIGlhbmFJbkZpbGUsIG5ldyBKU1BSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RVVEYxNmxlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInV0ZjE2bGUuanNwIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgIlVURi0xNkxFIiwgbmV3IEpTUFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFVURjE2YmUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidXRmMTZiZS5qc3AiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCAiVVRGLTE2QkUiLCBuZXcgSlNQUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0VVRGMTZCT00oKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidXRmMTZCT00uanNwIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgIlVURi0xNiIsIG5ldyBKU1BSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RVVEYxNmxlWG1sU3R5bGUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidXRmMTZsZV94bWxTdHlsZS5qc3AiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCAiVVRGLTE2TEUiLCBuZXcgSlNQUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdGVzdHMvZW5jb2RpbmcvanNwL0pTUEhlYWRUb2tlbml6ZXJUZXN0ZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdGVzdHMvZW5jb2RpbmcvanNwL0pTUEhlYWRUb2tlbml6ZXJUZXN0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGZmZTA3NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3Rlc3RzL2VuY29kaW5nL2pzcC9KU1BIZWFkVG9rZW5pemVyVGVzdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcuanNwOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLnV0aWwucmVnZXguUGF0dGVybjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5jb250ZW50dHlwZS5IZWFkUGFyc2VyVG9rZW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLmNvbnRlbnR0eXBlLkpTUEhlYWRUb2tlbml6ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLmNvbnRlbnR0eXBlLkpTUEhlYWRUb2tlbml6ZXJDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy5KU1BFbmNvZGluZ1Rlc3RzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50dHlwZS5FbmNvZGluZ1BhcnNlckNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudHR5cGUuWE1MSGVhZFRva2VuaXplckNvbnN0YW50czsKLQotcHVibGljIGNsYXNzIEpTUEhlYWRUb2tlbml6ZXJUZXN0ZXIgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJpdmF0ZSBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0JcHJpdmF0ZSBTdHJpbmcgZkNoYXJzZXQ7Ci0JcHJpdmF0ZSBTdHJpbmcgZkNvbnRlbnRUeXBlOwotCXByaXZhdGUgU3RyaW5nIGZDb250ZW50VHlwZVZhbHVlOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVEaXIgPSAianNwLyI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZUhvbWUgPSAidGVzdGZpbGVzLyI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZUxvY2F0aW9uID0gZmlsZUhvbWUgKyBmaWxlRGlyOwotCXByaXZhdGUgU3RyaW5nIGZQYWdlRW5jb2RpbmdWYWx1ZSA9IG51bGw7Ci0JcHJpdmF0ZSBTdHJpbmcgZlhNTERlY0VuY29kaW5nTmFtZTsKLQlwcml2YXRlIFN0cmluZyBmTGFuZ3VhZ2U7Ci0KLQlwcml2YXRlIHZvaWQgZG9UZXN0RmlsZShTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyBleHBlY3RlZE5hbWUpIHRocm93cyBFeGNlcHRpb24gewotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCBleHBlY3RlZE5hbWUsIG51bGwsIG51bGwpOwotCX0KLQotCXByaXZhdGUgdm9pZCBkb1Rlc3RGaWxlKFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIGV4cGVjdGVkTmFtZSwgU3RyaW5nIGZpbmFsVG9rZW5UeXBlLCBTdHJpbmcgZXhwZWN0ZWRDb250ZW50VHlwZSkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUpTUEhlYWRUb2tlbml6ZXIgdG9rZW5pemVyID0gbnVsbDsKLQkJUmVhZGVyIGZpbGVSZWFkZXIgPSBudWxsOwotCQl0cnkgewotCQkJaWYgKERFQlVHKSB7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCIgICAgICAgIiArIGZpbGVuYW1lKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJCX0KLQkJCWZpbGVSZWFkZXIgPSBKU1BFbmNvZGluZ1Rlc3RzUGx1Z2luLmdldFRlc3RSZWFkZXIoZmlsZW5hbWUpOwotCQkJdG9rZW5pemVyID0gbmV3IEpTUEhlYWRUb2tlbml6ZXIoZmlsZVJlYWRlcik7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiRXJyb3Igb3BlbmluZyBmaWxlIFwiIiArIGZpbGVuYW1lICsgIlwiIik7Ci0JCX0KLQotCQlIZWFkUGFyc2VyVG9rZW4gdG9rZW4gPSBwYXJzZUhlYWRlcih0b2tlbml6ZXIpOwotCQlTdHJpbmcgcmVzdWx0VmFsdWUgPSBnZXRBcHByb3ByaWF0ZUVuY29kaW5nKCk7Ci0JCWZpbGVSZWFkZXIuY2xvc2UoKTsKLQkJaWYgKGZpbmFsVG9rZW5UeXBlICE9IG51bGwpIHsKLQkJCWFzc2VydFRydWUoImRpZCBub3QgZW5kIGFzIGV4cGVjdGVkLiBmb3VuZDogICIgKyB0b2tlbi5nZXRUeXBlKCksIGZpbmFsVG9rZW5UeXBlLmVxdWFscyh0b2tlbi5nZXRUeXBlKCkpKTsKLQkJfQotCi0JCWlmIChleHBlY3RlZE5hbWUgPT0gbnVsbCkgewotCQkJYXNzZXJ0VHJ1ZSgiZXhwZWN0ZWQgbm8gZW5jb2RpbmcsIGJ1dCBmb3VuZDogIiArIHJlc3VsdFZhbHVlLCByZXN1bHRWYWx1ZSA9PSBudWxsKTsKLQkJfQotCQllbHNlIHsKLQkJCWFzc2VydFRydWUoImV4cGVjdGVkICIgKyBleHBlY3RlZE5hbWUgKyAiIGJ1dCBmb3VuZCAiICsgcmVzdWx0VmFsdWUsIGV4cGVjdGVkTmFtZS5lcXVhbHMocmVzdWx0VmFsdWUpKTsKLQkJfQotCi0JCVN0cmluZyBmb3VuZENvbnRlbnRUeXBlID0gZ2V0Q29udGVudFR5cGUoKTsKLQkJaWYgKGV4cGVjdGVkQ29udGVudFR5cGUgPT0gbnVsbCkgewotCQkJYXNzZXJ0VHJ1ZSgiZXhwZWN0ZWQgbm8gY29udGVudFR5cGUsIGJ1dCBmb3VuZDogIiArIGZvdW5kQ29udGVudFR5cGUsIGZvdW5kQ29udGVudFR5cGUgPT0gbnVsbCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlhc3NlcnRUcnVlKCJleHBlY3RlZCAiICsgZXhwZWN0ZWRDb250ZW50VHlwZSArICIgYnV0IGZvdW5kICIgKyBmb3VuZENvbnRlbnRUeXBlLCBleHBlY3RlZENvbnRlbnRUeXBlLmVxdWFscyhmb3VuZENvbnRlbnRUeXBlKSk7Ci0JCX0KLQotCX0KLQotCS8vIHB1YmxpYyB2b2lkIHRlc3RNYWxmb3JtZWROb0VuY29kaW5nKCkgewotCS8vIFN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJNYWxmb3JtZWROb0VuY29kaW5nLmpzcCI7Ci0JLy8gZG9UZXN0RmlsZShmaWxlbmFtZSk7Ci0JLy8gfQotCS8vIHB1YmxpYyB2b2lkIHRlc3RNYWxmb3JtZWROb0VuY29kaW5nWFNMKCkgewotCS8vIFN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJNYWxmb3JtZWROb0VuY29kaW5nWFNMLmpzcCI7Ci0JLy8gZG9UZXN0RmlsZShmaWxlbmFtZSk7Ci0JLy8gfQotCS8vIHB1YmxpYyB2b2lkIHRlc3ROb0VuY29kaW5nKCkgewotCS8vIFN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJOb0VuY29kaW5nLmpzcCI7Ci0JLy8gZG9UZXN0RmlsZShmaWxlbmFtZSk7Ci0JLy8gfQotCXB1YmxpYyB2b2lkIHRlc3ROb3JtYWxOb25EZWZhdWx0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJOb3JtYWxOb25EZWZhdWx0LmpzcCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJJU08tODg1OS04Iik7Ci0JfQotCi0JLy8gcHVibGljIHZvaWQgdGVzdE5vcm1hbFBhZ2VDYXNlTm9uRGVmYXVsdCgpIHsKLQkvLyBTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiTm9ybWFsUGFnZUNhc2VOb25EZWZhdWx0LmpzcCI7Ci0JLy8gZG9UZXN0RmlsZShmaWxlbmFtZSk7Ci0JLy8gfQotCS8vIHB1YmxpYyB2b2lkIHRlc3RkZWZlY3QyMjMzNjUoKSB7Ci0JLy8gU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIlNlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtLmpzcCI7Ci0JLy8gZG9UZXN0RmlsZShmaWxlbmFtZSk7Ci0JLy8gfQotCS8qKgotCSAqIHJldHVybnMgZW5jb2RpbmcgYWNjb3JkaW5nIHRvIHByaW9yaXR5OiAxLiBYTUwgRGVjbGFyYXRpb24gMi4gcGFnZQotCSAqIGRpcmVjdGl2ZSBwYWdlRW5jb2RpbmcgbmFtZSAzLiBwYWdlIGRpcmVjdGl2ZSBjb250ZW50VHlwZSBjaGFyc2V0IG5hbWUKLQkgKi8KLQlwcml2YXRlIFN0cmluZyBnZXRBcHByb3ByaWF0ZUVuY29kaW5nKCkgewotCQlTdHJpbmcgcmVzdWx0ID0gbnVsbDsKLQkJaWYgKGZYTUxEZWNFbmNvZGluZ05hbWUgIT0gbnVsbCkKLQkJCXJlc3VsdCA9IGZYTUxEZWNFbmNvZGluZ05hbWU7Ci0JCWVsc2UgaWYgKGZQYWdlRW5jb2RpbmdWYWx1ZSAhPSBudWxsKQotCQkJcmVzdWx0ID0gZlBhZ2VFbmNvZGluZ1ZhbHVlOwotCQllbHNlIGlmIChmQ2hhcnNldCAhPSBudWxsKQotCQkJcmVzdWx0ID0gZkNoYXJzZXQ7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgZ2V0Q29udGVudFR5cGUoKSB7Ci0JCXJldHVybiBmQ29udGVudFR5cGU7Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIGlzTGVnYWxTdHJpbmcoU3RyaW5nIHRva2VuVHlwZSkgewotCQlib29sZWFuIHJlc3VsdCA9IGZhbHNlOwotCQlpZiAodG9rZW5UeXBlICE9IG51bGwpIHsKLQkJCXJlc3VsdCA9IHRva2VuVHlwZS5lcXVhbHMoRW5jb2RpbmdQYXJzZXJDb25zdGFudHMuU3RyaW5nVmFsdWUpIHx8IHRva2VuVHlwZS5lcXVhbHMoRW5jb2RpbmdQYXJzZXJDb25zdGFudHMuVW5EZWxpbWl0ZWRTdHJpbmdWYWx1ZSkgfHwgdG9rZW5UeXBlLmVxdWFscyhFbmNvZGluZ1BhcnNlckNvbnN0YW50cy5JbnZhbGlkVGVybWluYXRlZFN0cmluZ1ZhbHVlKSB8fCB0b2tlblR5cGUuZXF1YWxzKEVuY29kaW5nUGFyc2VyQ29uc3RhbnRzLkludmFsaWRUZXJtaW50YXRlZFVuRGVsaW1pdGVkU3RyaW5nVmFsdWUpOwotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JLyoqCi0JICogVGhpcyBtZXRob2Qgc2hvdWxkIGJlIGV4YWN0bHkgdGhlIHNhbWUgYXMgd2hhdCBpcyBpbgotCSAqIEpTUFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcgotCSAqIAotCSAqIEBwYXJhbSBjb250ZW50VHlwZQotCSAqLwotCXByaXZhdGUgdm9pZCBwYXJzZUNvbnRlbnRUeXBlVmFsdWUoU3RyaW5nIGNvbnRlbnRUeXBlKSB7Ci0JCVBhdHRlcm4gcGF0dGVybiA9IFBhdHRlcm4uY29tcGlsZSgiO1xccypjaGFyc2V0XFxzKj1cXHMqIik7IC8vJE5PTi1OTFMtMSQKLQkJU3RyaW5nW10gcGFydHMgPSBwYXR0ZXJuLnNwbGl0KGNvbnRlbnRUeXBlKTsKLQkJaWYgKHBhcnRzLmxlbmd0aCA+IDApIHsKLQkJCS8vIGlmIG9ubHkgb25lIGl0ZW0sIGl0IGNhbiBzdGlsbCBiZSBjaGFyc2V0IGluc3RlYWQgb2YKLQkJCS8vIGNvbnRlbnRUeXBlCi0JCQlpZiAocGFydHMubGVuZ3RoID09IDEpIHsKLQkJCQlpZiAocGFydHNbMF0ubGVuZ3RoKCkgPiA2KSB7Ci0JCQkJCVN0cmluZyBjaGVja0ZvckNoYXJzZXQgPSBwYXJ0c1swXS5zdWJzdHJpbmcoMCwgNyk7Ci0JCQkJCWlmIChjaGVja0ZvckNoYXJzZXQuZXF1YWxzSWdub3JlQ2FzZSgiY2hhcnNldCIpKSB7Ci0JCQkJCQlpbnQgZXFwb3MgPSBwYXJ0c1swXS5pbmRleE9mKCc9Jyk7Ci0JCQkJCQllcXBvcyA9IGVxcG9zICsgMTsKLQkJCQkJCWlmIChlcXBvcyA8IHBhcnRzWzBdLmxlbmd0aCgpKSB7Ci0JCQkJCQkJZkNoYXJzZXQgPSBwYXJ0c1swXS5zdWJzdHJpbmcoZXFwb3MpOwotCQkJCQkJCWZDaGFyc2V0ID0gZkNoYXJzZXQudHJpbSgpOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJCWVsc2UgewotCQkJCQkJZkNvbnRlbnRUeXBlID0gcGFydHNbMF07Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlmQ29udGVudFR5cGUgPSBwYXJ0c1swXTsKLQkJCX0KLQkJfQotCQlpZiAocGFydHMubGVuZ3RoID4gMSkgewotCQkJZkNoYXJzZXQgPSBwYXJ0c1sxXTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEdpdmUncyBwcmlvcml0eSB0byBlbmNvZGluZyB2YWx1ZSwgaWYgZm91bmQgZWxzZSwgbG9va3MgZm9yIGNvbnRlbnRUeXBlCi0JICogdmFsdWU7Ci0JICovCi0JcHJpdmF0ZSBIZWFkUGFyc2VyVG9rZW4gcGFyc2VIZWFkZXIoSlNQSGVhZFRva2VuaXplciB0b2tlbml6ZXIpIHRocm93cyBFeGNlcHRpb24gewotCQlmUGFnZUVuY29kaW5nVmFsdWUgPSBudWxsOwotCQlmQ2hhcnNldCA9IG51bGw7Ci0JCWZDb250ZW50VHlwZSA9IG51bGw7Ci0JCUhlYWRQYXJzZXJUb2tlbiB0b2tlbiA9IG51bGw7Ci0JCUhlYWRQYXJzZXJUb2tlbiBmaW5hbFRva2VuID0gbnVsbDsKLQkJZG8gewotCQkJdG9rZW4gPSB0b2tlbml6ZXIuZ2V0TmV4dFRva2VuKCk7Ci0JCQlTdHJpbmcgdG9rZW5UeXBlID0gdG9rZW4uZ2V0VHlwZSgpOwotCi0JCQlpZihjYW5IYW5kbGVBc1VuaWNvZGVTdHJlYW0odG9rZW5UeXBlKSkgewotCQkJCQotCQkJfQotCQkJZWxzZSBpZiAodG9rZW5UeXBlID09IFhNTEhlYWRUb2tlbml6ZXJDb25zdGFudHMuWE1MRGVsRW5jb2RpbmcpIHsKLQkJCQlpZiAodG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSkgewotCQkJCQlIZWFkUGFyc2VyVG9rZW4gdmFsdWVUb2tlbiA9IHRva2VuaXplci5nZXROZXh0VG9rZW4oKTsKLQkJCQkJU3RyaW5nIHZhbHVlVG9rZW5UeXBlID0gdmFsdWVUb2tlbi5nZXRUeXBlKCk7Ci0JCQkJCWlmIChpc0xlZ2FsU3RyaW5nKHZhbHVlVG9rZW5UeXBlKSkgewotCQkJCQkJZlhNTERlY0VuY29kaW5nTmFtZSA9IHZhbHVlVG9rZW4uZ2V0VGV4dCgpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQkJZWxzZSBpZiAodG9rZW5UeXBlID09IEpTUEhlYWRUb2tlbml6ZXJDb25zdGFudHMuUGFnZUVuY29kaW5nKSB7Ci0JCQkJaWYgKHRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpIHsKLQkJCQkJSGVhZFBhcnNlclRva2VuIHZhbHVlVG9rZW4gPSB0b2tlbml6ZXIuZ2V0TmV4dFRva2VuKCk7Ci0JCQkJCVN0cmluZyB2YWx1ZVRva2VuVHlwZSA9IHZhbHVlVG9rZW4uZ2V0VHlwZSgpOwotCQkJCQlpZiAoaXNMZWdhbFN0cmluZyh2YWx1ZVRva2VuVHlwZSkpIHsKLQkJCQkJCWZQYWdlRW5jb2RpbmdWYWx1ZSA9IHZhbHVlVG9rZW4uZ2V0VGV4dCgpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQkJZWxzZSBpZiAodG9rZW5UeXBlID09IEpTUEhlYWRUb2tlbml6ZXJDb25zdGFudHMuUGFnZUNvbnRlbnRUeXBlKSB7Ci0JCQkJaWYgKHRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpIHsKLQkJCQkJSGVhZFBhcnNlclRva2VuIHZhbHVlVG9rZW4gPSB0b2tlbml6ZXIuZ2V0TmV4dFRva2VuKCk7Ci0JCQkJCVN0cmluZyB2YWx1ZVRva2VuVHlwZSA9IHZhbHVlVG9rZW4uZ2V0VHlwZSgpOwotCQkJCQlpZiAoaXNMZWdhbFN0cmluZyh2YWx1ZVRva2VuVHlwZSkpIHsKLQkJCQkJCWZDb250ZW50VHlwZVZhbHVlID0gdmFsdWVUb2tlbi5nZXRUZXh0KCk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQllbHNlIGlmICh0b2tlblR5cGUgPT0gSlNQSGVhZFRva2VuaXplckNvbnN0YW50cy5QYWdlTGFuZ3VhZ2UpIHsKLQkJCQlpZiAodG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSkgewotCQkJCQlIZWFkUGFyc2VyVG9rZW4gdmFsdWVUb2tlbiA9IHRva2VuaXplci5nZXROZXh0VG9rZW4oKTsKLQkJCQkJU3RyaW5nIHZhbHVlVG9rZW5UeXBlID0gdmFsdWVUb2tlbi5nZXRUeXBlKCk7Ci0JCQkJCWlmIChpc0xlZ2FsU3RyaW5nKHZhbHVlVG9rZW5UeXBlKSkgewotCQkJCQkJZkxhbmd1YWdlID0gdmFsdWVUb2tlbi5nZXRUZXh0KCk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJd2hpbGUgKHRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpOwotCQlpZiAoZkNvbnRlbnRUeXBlVmFsdWUgIT0gbnVsbCkgewotCQkJcGFyc2VDb250ZW50VHlwZVZhbHVlKGZDb250ZW50VHlwZVZhbHVlKTsKLQkJfQotCQlmaW5hbFRva2VuID0gdG9rZW47Ci0JCXJldHVybiBmaW5hbFRva2VuOwotCX0KLQkKLQlwcml2YXRlIGJvb2xlYW4gY2FuSGFuZGxlQXNVbmljb2RlU3RyZWFtKFN0cmluZyB0b2tlblR5cGUpIHsKLQkJYm9vbGVhbiBjYW5IYW5kbGVBc1VuaWNvZGUgPSBmYWxzZTsKLQkJaWYgKHRva2VuVHlwZSA9PSBFbmNvZGluZ1BhcnNlckNvbnN0YW50cy5VVEY4M0J5dGVCT00pIHsKLQkJCWNhbkhhbmRsZUFzVW5pY29kZSA9IHRydWU7Ci0JCQl0aGlzLmZDaGFyc2V0ID0gIlVURi04IjsgLy8kTk9OLU5MUy0xJAotCQl9Ci0JCWVsc2UgaWYgKHRva2VuVHlwZSA9PSBFbmNvZGluZ1BhcnNlckNvbnN0YW50cy5VVEYxNkJFIHx8IHRva2VuVHlwZSA9PSBFbmNvZGluZ1BhcnNlckNvbnN0YW50cy5VVEYxNkxFKSB7Ci0JCQljYW5IYW5kbGVBc1VuaWNvZGUgPSB0cnVlOwotCQkJdGhpcy5mQ2hhcnNldCA9ICJVVEYtMTYiOyAvLyROT04tTkxTLTEkCi0JCX0KLQkJcmV0dXJuIGNhbkhhbmRsZUFzVW5pY29kZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QmVzdENhc2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIm5vbWFsRGlyZWN0aXZlQ2FzZS5qc3AiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiSVNPLTg4NTktMiIsIG51bGwsICJ0ZXh0L2h0bWwiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TWluaW1hbFBhZ2VEaXJlY3RpdmUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIm1pbmltYWxQYWdlRGlyZWN0aXZlLmpzcCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsIG51bGwsIG51bGwsICJ0ZXh0L2h0bWwiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SWxsRm9ybWVkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ0ZXN0SWxsRm9ybWVkLmpzcCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RJbGxGb3JtZWQyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ0ZXN0SWxsRm9ybWVkMi5qc3AiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiVVRGLTgiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdCgpIHRocm93cyBFeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5qc3AiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiSVNPLTg4NTktOCIsIG51bGwsICJ0ZXh0L2h0bWwiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RW1wdHlGaWxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJFbXB0eUZpbGUuanNwIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5vbWFsRGlyZWN0aXZlQ2FzZVVzaW5nWE1MU3ludGF4KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJub21hbERpcmVjdGl2ZUNhc2VVc2luZ1hNTFN5bnRheC5qc3AiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiSVNPLTg4NTktMiIsIG51bGwsICJ0ZXh0L2h0bWwiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9QYWdlRGlyZWN0aXZlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ0ZXN0Tm9QYWdlRGlyZWN0aXZlLmpzcCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3ROb3JtYWxQYWdlRGlyZWN0aXZlV2l0aFhNTERlY2woKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIm5vbWFsRGlyZWN0aXZlQ2FzZXdpdGhYTUxEZWNsLmpzcCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJJU08tODg1OS0xIiwgbnVsbCwgInRleHQvaHRtbCIpOwotCX0KLQotCi0JcHVibGljIHZvaWQgdGVzdE5vUGFnZURpcmVjdGl2ZUF0Rmlyc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInRlc3ROb1BhZ2VEaXJlY3RpdmVBdEZpcnN0LmpzcCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJJU08tODg1OS0yIiwgbnVsbCwgInRleHQvaHRtbCIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3ROb1BhZ2VEaXJlY3RpdmVJbkxhcmdlRmlsZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidGVzdE5vUGFnZURpcmVjdGl2ZUluTGFyZ2VGaWxlLmpzcCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsIG51bGwsIEVuY29kaW5nUGFyc2VyQ29uc3RhbnRzLk1BWF9DSEFSU19SRUFDSEVELCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9ybWFsQ2FzZVdpdGhOZWl0aGVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJub21hbERpcmVjdGl2ZUNhc2VOb0VuY29kaW5nLmpzcCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3ROb3JtYWxDaGFyc2V0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJub21hbERpcmVjdGl2ZUNhc2VVc2luZ0NoYXJzZXQuanNwIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIklTTy04ODU5LTMiLCBudWxsLCAidGV4dC9odG1sIik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RVVEYxNmxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ1dGYxNmxlLmpzcCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJVVEYtMTZMRSIsIG51bGwsICJ0ZXh0L2h0bWwiKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFVURjE2YmUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInV0ZjE2YmUuanNwIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIlVURi0xNkJFIiwgbnVsbCwgInRleHQvaHRtbCIpOwotCX0KLQkKLQkvKgotCQlzdW4uaW8uTWFsZm9ybWVkSW5wdXRFeGNlcHRpb24KLQkJYXQgc3VuLmlvLkJ5dGVUb0NoYXJVVEY4LmNvbnZlcnQoQnl0ZVRvQ2hhclVURjguamF2YToyNjIpCi0JCWF0IHN1bi5uaW8uY3MuU3RyZWFtRGVjb2RlciRDb252ZXJ0ZXJTRC5jb252ZXJ0SW50byhTdHJlYW1EZWNvZGVyLmphdmE6MzE0KQotCQlhdCBzdW4ubmlvLmNzLlN0cmVhbURlY29kZXIkQ29udmVydGVyU0QuaW1wbFJlYWQoU3RyZWFtRGVjb2Rlci5qYXZhOjM2NCkKLQkJYXQgc3VuLm5pby5jcy5TdHJlYW1EZWNvZGVyLnJlYWQoU3RyZWFtRGVjb2Rlci5qYXZhOjI1MCkKLQkJYXQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlci5yZWFkKElucHV0U3RyZWFtUmVhZGVyLmphdmE6MjEyKQotCQlhdCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuY29udGVudHR5cGUuSlNQSGVhZFRva2VuaXplci56elJlZmlsbChKU1BIZWFkVG9rZW5pemVyLmphdmE6MzU5KQotCQlhdCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuY29udGVudHR5cGUuSlNQSGVhZFRva2VuaXplci5wcmltR2V0TmV4dFRva2VuKEpTUEhlYWRUb2tlbml6ZXIuamF2YTo1OTgpCi0JCWF0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5jb250ZW50dHlwZS5KU1BIZWFkVG9rZW5pemVyLmdldE5leHRUb2tlbihKU1BIZWFkVG9rZW5pemVyLmphdmE6MjU0KQotCQlhdCBvcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLmpzcC5KU1BIZWFkVG9rZW5pemVyVGVzdGVyLnBhcnNlSGVhZGVyKEpTUEhlYWRUb2tlbml6ZXJUZXN0ZXIuamF2YToxODIpCi0JCWF0IG9yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcuanNwLkpTUEhlYWRUb2tlbml6ZXJUZXN0ZXIuZG9UZXN0RmlsZShKU1BIZWFkVG9rZW5pemVyVGVzdGVyLmphdmE6NTgpCi0JCWF0IG9yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcuanNwLkpTUEhlYWRUb2tlbml6ZXJUZXN0ZXIudGVzdFVURjE2Qk9NKEpTUEhlYWRUb2tlbml6ZXJUZXN0ZXIuamF2YTozMjQpCi0JKi8KLQotCXB1YmxpYyB2b2lkIHRlc3RVVEYxNkJPTSgpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MjQzNzM1Ci0vLwkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInV0ZjE2Qk9NLmpzcCI7Ci0vLwkJZG90ZXN0ZmlsZShmaWxlbmFtZSwgInV0Zi0xNiIsIG51bGwsIG51bGwpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0VVRGMTZsZVhtbFN0eWxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ1dGYxNmxlX3htbFN0eWxlLmpzcCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJVVEYtMTZMRSIsIG51bGwsIG51bGwpOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2V0TGFuZ3VhZ2UoKSB7Ci0JCXJldHVybiBmTGFuZ3VhZ2U7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC90ZXN0cy9lbmNvZGluZy9qc3AvVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uRm9ySlNQLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3Rlc3RzL2VuY29kaW5nL2pzcC9UZXN0Q29udGVudFR5cGVEZXRlY3Rpb25Gb3JKU1AuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTUzMjE1Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3Rlc3RzL2VuY29kaW5nL2pzcC9UZXN0Q29udGVudFR5cGVEZXRlY3Rpb25Gb3JKU1AuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy5qc3A7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmNvbnRlbnQuSUNvbnRlbnREZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuSUNvbnRlbnREZXNjcmlwdGlvbkZvckpTUDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnJlYWQuVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uRm9ySlNQIGV4dGVuZHMgVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uIHsKLQotCXByb3RlY3RlZCB2b2lkIGRvVGVzdChTdHJpbmcgZXhwZWN0ZWRDb250ZW50VHlwZSwgU3RyaW5nIGZpbGVQYXRoLCBDbGFzcyBleHBlY3RlZEV4Y2VwdGlvbiwgU3RyaW5nIGV4cGVjdGVkSlNQQ29udGVudFR5cGUpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCXN1cGVyLmRvVGVzdChleHBlY3RlZENvbnRlbnRUeXBlLCBmaWxlUGF0aCwgZXhwZWN0ZWRFeGNlcHRpb24pOwotCQkKLQkJSUZpbGUgZmlsZSA9IChJRmlsZSkgZ2V0VGVzdFByb2plY3QoKS5maW5kTWVtYmVyKGZpbGVQYXRoKTsKLQkJYXNzZXJ0Tm90TnVsbCgiRXJyb3IgaW4gdGVzdCBjYXNlOiBmaWxlIG5vdCBmb3VuZDogIiArIGZpbGVQYXRoLCBmaWxlKTsKLQotCi0JCUlDb250ZW50RGVzY3JpcHRpb24gc3RyZWFtQ29udGVudERlc2NyaXB0aW9uID0gZG9HZXRDb250ZW50VHlwZUJhc2VkT25TdHJlYW0oZmlsZSk7Ci0JCUlDb250ZW50RGVzY3JpcHRpb24gZmlsZUNvbnRlbnREZXNjcmlwdGlvbiA9IGRvR2V0Q29udGVudFR5cGVCYXNlZE9uRmlsZShmaWxlKTsKLQotCQlTdHJpbmcgc3RyZWFtSlNQQ29udGVudFR5cGUgPSAoU3RyaW5nKSBzdHJlYW1Db250ZW50RGVzY3JpcHRpb24uZ2V0UHJvcGVydHkoSUNvbnRlbnREZXNjcmlwdGlvbkZvckpTUC5DT05URU5UX1RZUEVfQVRUUklCVVRFKTsKLQotCQljaGVja1Jlc3VsdHMoZXhwZWN0ZWRKU1BDb250ZW50VHlwZSwgc3RyZWFtSlNQQ29udGVudFR5cGUpOwotCQkKLQkJCi0JCVN0cmluZyBmaWxlSlNQQ29udGVudFR5cGUgPSAoU3RyaW5nKSBmaWxlQ29udGVudERlc2NyaXB0aW9uLmdldFByb3BlcnR5KElDb250ZW50RGVzY3JpcHRpb25Gb3JKU1AuQ09OVEVOVF9UWVBFX0FUVFJJQlVURSk7Ci0JCWNoZWNrUmVzdWx0cyhleHBlY3RlZEpTUENvbnRlbnRUeXBlLCBmaWxlSlNQQ29udGVudFR5cGUpOwotCi0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgY2hlY2tSZXN1bHRzKFN0cmluZyBleHBlY3RlZEpTUENvbnRlbnRUeXBlLCBTdHJpbmcgZm91bmRKU1BDb250ZW50VHlwZSkgewotCQlpZiAoZXhwZWN0ZWRKU1BDb250ZW50VHlwZSA9PSBudWxsKSB7Ci0JCQlhc3NlcnRUcnVlKCJleHBlY3RlZCBubyBjb250ZW50VHlwZSwgYnV0IGZvdW5kOiAiICsgZm91bmRKU1BDb250ZW50VHlwZSwgZm91bmRKU1BDb250ZW50VHlwZSA9PSBudWxsKTsKLQkJfQotCQllbHNlIHsKLQkJCWFzc2VydFRydWUoImV4cGVjdGVkICIgKyBleHBlY3RlZEpTUENvbnRlbnRUeXBlICsgIiBidXQgZm91bmQgIiArIGZvdW5kSlNQQ29udGVudFR5cGUsIGV4cGVjdGVkSlNQQ29udGVudFR5cGUuZXF1YWxzKGZvdW5kSlNQQ29udGVudFR5cGUpKTsKLQkJfQotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjMzNjUvU2VsQ29sQmVhblJvdzEyUmVzdWx0c0Zvcm1CLmpzcCIsIG51bGwsICJ0ZXh0L2h0bWwiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjQyOTMvdGVzdHNoaWZ0amlzWG1sU3ludGF4LmpzcCIsIG51bGwsICJ0ZXh0L2h0bWwiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjk2NjcvYXVkaS5qc3AiLCBudWxsLCAidGV4dC9odG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2NSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL0VtcHR5RmlsZS5qc3AiLCBudWxsLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9qc3AvSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5qc3AiLCBudWxsLCAidGV4dC9odG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL2luVmFsaWRFbmNvZGluZ1ZhbHVlLmpzcCIsIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5leGNlcHRpb25zLlVuc3VwcG9ydGVkQ2hhcnNldEV4Y2VwdGlvbldpdGhEZXRhaWwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC9qYXZhRW5jb2RpbmdWYWx1ZS5qc3AiLCBudWxsLCAidGV4dC9odG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL01hbGZvcm1lZE5vRW5jb2RpbmcuanNwIiwgbnVsbCwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL01hbGZvcm1lZE5vRW5jb2RpbmdYU0wuanNwIiwgbnVsbCwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL25vRW5jb2RpbmcuanNwIiwgbnVsbCwgInRleHQvaHRtbCIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC9Ob0VuY29kaW5naW5YTUxEZWNsLmpzcCIsIG51bGwsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2UuanNwIiwgbnVsbCwgInRleHQvaHRtbCIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VOb0VuY29kaW5nLmpzcCIsIG51bGwsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VVc2luZ0NoYXJzZXQuanNwIiwgbnVsbCwgInRleHQvaHRtbCIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VVc2luZ1hNTFN5bnRheC5qc3AiLCBudWxsLCAidGV4dC9odG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL05vcm1hbE5vbkRlZmF1bHQuanNwIiwgbnVsbCwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL05vcm1hbE5vbkRlZmF1bHRXaXRoWE1MRGVjbC5qc3AiLCBudWxsLCAidGV4dC9odG1sIik7Ci0JfQotCXB1YmxpYyB2b2lkIG5vbWFsRGlyZWN0aXZlQ2FzZXdpdGhYTUxEZWNsKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNld2l0aFhNTERlY2wuanNwIiwgbnVsbCwgInRleHQvaHRtbCIpOwotCX0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9qc3AvTm9ybWFsUGFnZUNhc2VOb25EZWZhdWx0LmpzcCIsIG51bGwsICJ0ZXh0L2h0bWwiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9qc3AvU2VsQ29sQmVhblJvdzEyUmVzdWx0c0Zvcm0uanNwIiwgbnVsbCwgInRleHQvaHRtbCIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC90ZXN0QnJva2VuTGluZS5qc3AiLCBudWxsLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9qc3AvdGVzdERlZmF1bHRFbmNvZGluZy5qc3AiLCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZXhjZXB0aW9ucy5VbnN1cHBvcnRlZENoYXJzZXRFeGNlcHRpb25XaXRoRGV0YWlsLmNsYXNzLCAidGV4dC9odG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3REZWZhdWx0RW5jb2RpbmdXaXRoSnVuay5qc3AiLCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZXhjZXB0aW9ucy5VbnN1cHBvcnRlZENoYXJzZXRFeGNlcHRpb25XaXRoRGV0YWlsLmNsYXNzLCAidGV4dC9odG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3RFeHRyYUp1bmsuanNwIiwgbnVsbCwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3RFeHRyYVZhbGlkU3R1ZmYuanNwIiwgbnVsbCwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3RJbGxGb3JtZWQuanNwIiwgbnVsbCwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3RJbGxGb3JtZWQyLmpzcCIsIG51bGwsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC90ZXN0Tm9FbmNvZGluZ1ZhbHVlLmpzcCIsIG51bGwsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC90ZXN0Tm9QYWdlRGlyZWN0aXZlLmpzcCIsIG51bGwsIG51bGwpOwotCX0KLQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmVBdEZpcnN0LmpzcCIsIG51bGwsICJ0ZXh0L2h0bWwiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9qc3AvdGVzdE5vUGFnZURpcmVjdGl2ZUluTGFyZ2VGaWxlLmpzcCIsIG51bGwsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC90ZXN0Tm9ybWFsQ2FzZS5qc3AiLCBudWxsLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9qc3AvdGVzdFVURjE2LmpzcCIsIG51bGwsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyMi5qc3AiLCBudWxsLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9qc3AvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlckJFLmpzcCIsIG51bGwsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC91dGYxNldpdGhKYXBhbmVzZUNoYXJzLmpzcCIsIG51bGwsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC9VVEY4V2l0aDNCeXRlQk9NLmpzcCIsIG51bGwsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC9XZWxsRm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5qc3AiLCBudWxsLCAidGV4dC9odG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjMzNjUvU2VsQ29sQmVhblJvdzEyUmVzdWx0c0Zvcm0uanNwIiwgbnVsbCwgInRleHQvaHRtbCIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL3V0ZjE2bGUuanNwIiwgbnVsbCwgInRleHQvaHRtbCIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL3V0ZjE2YmUuanNwIiwgbnVsbCwgInRleHQvaHRtbCIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL3V0ZjE2Qk9NLmpzcCIsIG51bGwsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9qc3AvdXRmMTZsZV94bWxTdHlsZS5qc3AiLCBudWxsLCBudWxsKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZWQ2OTJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLQotPHByb2plY3QKLQluYW1lPSJ0ZXN0c3VpdGUiCi0JZGVmYXVsdD0icnVuIgotCWJhc2VkaXI9Ii4iPgotICAgIAotICAgIDwhLS0gVGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGlzIHNjcmlwdCAtLT4KLSAgICA8IS0tICR7ZWNsaXBzZS1ob21lfSAgIC0tPgotICAgIDwhLS0gJHtidWlsZERpcmVjdG9yeX0gIC0tPgotICAgIDwhLS0gJHtidWlsZExhYmVsfSAgICAgICAgLS0+Ci0KLSAgICA8IS0tIHNob3VsZCBiZSBsaXR0bGUgbmVlZCB0byBjaGFuZ2Ugd2hhdCdzIGFib3ZlICAtLT4KLSAgICAKLSAgICA8cHJvcGVydHkKLQkJbmFtZT0icGx1Z2luLW5hbWUiCi0JCXZhbHVlPSJvcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJjbGFzc25hbWUiCi0gICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLkpTUEVuY29kaW5nVGVzdFN1aXRlIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJ0ZXN0VHlwZSIKLSAgICAgICAgdmFsdWU9InVpLXRlc3QiIC8+Ci0KLSAgICA8IS0tIHNob3VsZCBiZSBsaXR0bGUgbmVlZCB0byBjaGFuZ2Ugd2hhdCdzIGJlbG93IC0tPgotCi0gICAgPGVjaG8gbWVzc2FnZT0iYmFzZWRpcjogJHtiYXNlZGlyfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJlY2xpcHNlLWhvbWU6ICR7ZWNsaXBzZS1ob21lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJidWlsZERpcmVjdG9yeTogJHtidWlsZERpcmVjdG9yeX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0icGx1Z2luLW5hbWU6ICR7cGx1Z2luLW5hbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImNsYXNzbmFtZTogJHtjbGFzc25hbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9InRlc3RUeXBlICR7dGVzdFR5cGV9IiAvPgotCi0KLQk8cHJvcGVydHkKLQkJbmFtZT0ibGlicmFyeS1maWxlIgotCQl2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2UudGVzdF8zLjEuMC9saWJyYXJ5LnhtbCIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0id29ya3NwYWNlIgotICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L2p1bml0d29ya3NwYWNlcy8ke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgCi0JPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPgotCTwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+Ci0JPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+Ci0gICAgCi0JPHRhcmdldCBuYW1lPSJpbml0Ij4KLSAgICAgICAgPHRzdGFtcCAvPgotCQk8ZGVsZXRlPgotCQkJPGZpbGVzZXQKLQkJCQlkaXI9IiR7ZWNsaXBzZS1ob21lfSIKLSAgICAgICAgICAgICAgICBpbmNsdWRlcz0iJHtwbHVnaW4tbmFtZX0uKnhtbCIgLz4KLQkJPC9kZWxldGU+Ci0gICAgICAgIDwhLS0gbWFrZSBkaXJlY3RvcnksIGluIGNhc2UgcGF0aCBkb2Vzbid0IGV4aXN0IHlldCAtLT4KLSAgICAgICAgPG1rZGlyIGRpcj0iJHt3b3Jrc3BhY2V9IiAvPgotICAgICAgICA8IS0tICBidXQgZGVsZXRlIHRvIG1ha2Ugc3VyZSBmcmVzaCBjb250ZW50cy0tPgotICAgICAgICA8ZGVsZXRlCi0gICAgICAgICAgICBkaXI9IiR7d29ya3NwYWNlfSIKLSAgICAgICAgICAgIHF1aWV0PSJ0cnVlIiAvPgotCi0JPC90YXJnZXQ+Ci0KLQk8IS0tIFRoaXMgdGFyZ2V0IGRlZmluZXMgdGhlIHRlc3RzIHRoYXQgbmVlZCB0byBiZSBydW4uIC0tPgotCTx0YXJnZXQgbmFtZT0ic3VpdGUiPgotCi0JCTxhbnQKLQkJCXRhcmdldD0iJHt0ZXN0VHlwZX0iCi0JCQlhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iCi0JCQlkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCQk8cHJvcGVydHkKLQkJCQluYW1lPSJkYXRhLWRpciIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHt3b3Jrc3BhY2V9IiAvPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0icGx1Z2luLW5hbWUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9IiAvPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0iY2xhc3NuYW1lIgotCQkJCXZhbHVlPSIke2NsYXNzbmFtZX0iIC8+Ci0JCQk8cHJvcGVydHkKLQkJCQluYW1lPSJwbHVnaW4tcGF0aCIKLQkJCQl2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgIDwvYW50PgotCQkgICAgCi0gICAgICAgIDxjb3B5Ci0gICAgICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiCi0gICAgICAgICAgICBmaWxlPSIke3dvcmtzcGFjZX0vLm1ldGFkYXRhLy5sb2ciCi0gICAgICAgICAgICB0b2ZpbGU9IiR7YnVpbGREaXJlY3Rvcnl9LyR7YnVpbGRMYWJlbH0vdGVzdFJlc3VsdHMvY29uc29sZWxvZ3MvJHtwbHVnaW4tbmFtZX0uY29uc29sZWxvZy50eHQiIC8+Ci0KLQk8L3RhcmdldD4KLQotCTwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgotCTwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4KLQk8IS0tIGRlbGV0ZSB0ZW1wb3JhcnkgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZC4gLS0+Ci0JPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KLSAgICAgICAgPCEtLSB1c3VhbGx5IG5vIG5lZWQgdG8gZGVsZXRlIHdvcmtzcGFjZSB1bnRpbCBuZXh0IHJ1biwgYW5kIGxlYXZpbmcgaXQgYWxsb3dzIGluc3BlY3Rpb24gLS0+Ci0JCTwhLS08ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIgLz4tLT4KLQk8L3RhcmdldD4KLQotCTwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4KLQk8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+Ci0JPHRhcmdldAotCQluYW1lPSJydW4iCi0JCWRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+Ci0JCTxhbnQKLQkJCXRhcmdldD0iY29sbGVjdCIKLQkJCWFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLQkJCWRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJCTxwcm9wZXJ0eQotCQkJCW5hbWU9ImluY2x1ZGVzIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfS4qeG1sIiAvPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0ib3V0cHV0LWZpbGUiCi0JCQkJdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIgLz4KLQkJPC9hbnQ+Ci0JPC90YXJnZXQ+Ci0KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvRW1wdHlGaWxlLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9FbXB0eUZpbGUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9FbXB0eUZpbGUuanNwCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9JbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9JbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWZkMGU3NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTg/Pg0KLTwlQHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgcGFnZUVuY29kaW5nPSJJU08tODg1OS03JT4NCi08dGVzdD4NCi08L3Rlc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL01hbGZvcm1lZE5vRW5jb2RpbmcuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL01hbGZvcm1lZE5vRW5jb2RpbmcuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjVlYjE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9NYWxmb3JtZWROb0VuY29kaW5nLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iIj8+DQotPHRhZz4NCi1BdXN0cmFsaesNCi08L3RhZz4NCi0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTWFsZm9ybWVkTm9FbmNvZGluZ1hTTC5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTWFsZm9ybWVkTm9FbmNvZGluZ1hTTC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjMzM1OWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL01hbGZvcm1lZE5vRW5jb2RpbmdYU0wuanNwCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSIiPz4NCi08eHNsOnN0eWxlc2hlZXQgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iDQotICAgIHZlcnNpb249IjEuMCINCi0gICAgeG1sbnM6eGFsYW49Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94c2x0Ij4NCi08eHNsOnZhcmlhYmxlIG5hbWU9ImJhZEVuY29kaW5nIj4NCi1BdXN0cmFsaesNCi08L3hzbDp2YXJpYWJsZT4NCi08L3hzbDpzdHlsZXNoZWV0Pg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9Ob0VuY29kaW5naW5YTUxEZWNsLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9Ob0VuY29kaW5naW5YTUxEZWNsLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTVjZTc2Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTm9FbmNvZGluZ2luWE1MRGVjbC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/Pg0KLTx0ZXN0Pg0KLTwvdGVzdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTm9ybWFsTm9uRGVmYXVsdC5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTm9ybWFsTm9uRGVmYXVsdC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlODllNjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL05vcm1hbE5vbkRlZmF1bHQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSI5OSIgZW5jb2Rpbmc9IklTTy04ODU5LTgiPz4NCi08dGVzdD4NCi08L3Rlc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL05vcm1hbE5vbkRlZmF1bHRXaXRoWE1MRGVjbC5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTm9ybWFsTm9uRGVmYXVsdFdpdGhYTUxEZWNsLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODg2MjQ4Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTm9ybWFsTm9uRGVmYXVsdFdpdGhYTUxEZWNsLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktOCI/Pg0KLTwlQHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgcGFnZXRFbmNvZGluZz0iSVNPLTg4NTktNyIlPg0KLTx0ZXN0Pg0KLTwvdGVzdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTm9ybWFsUGFnZUNhc2VOb25EZWZhdWx0LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9Ob3JtYWxQYWdlQ2FzZU5vbkRlZmF1bHQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjI3YmJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9Ob3JtYWxQYWdlQ2FzZU5vbkRlZmF1bHQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0NCi08JUBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIHBhZ2VFbmNvZGluZz0iSVNPLTg4NTktNyIgJT4NCi08dGVzdD4NCi08L3Rlc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL1NlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9TZWxDb2xCZWFuUm93MTJSZXN1bHRzRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4MzdlZTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL1NlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDEyMiArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4NCi1JIGZvdW5kIHRoaXMgY2hhbmdlDQotDQotPCVAIHBhZ2UNCi1pbXBvcnQ9IlNlbENvbEJlYW5Sb3cxMlZpZXdCZWFuIg0KLSBwYWdlRW5jb2Rpbmc9IlNISUZUX0pJUyINCi0gY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1KVU5LIg0KLSU+DQotPEhUTUw+DQotPEhFQUQ+DQotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9TUVUQUpVTksiPg0KLTxNRVRBIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iSUJNIFdlYlNwaGVyZSBTdHVkaW8iPg0KLTxUSVRMRT5SZXN1bHRzIHBhZ2U8L1RJVExFPg0KLQ0KLTwhLS1TdHlsZXMtLT4NCi08U1RZTEUgVFlQRT0idGV4dC9jc3MiPg0KLTwhLS0NCi1CT0RZIHsNCi0JYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZiAhaW1wb3J0YW50Ow0KLX0NCi1IMSB7DQotCWNvbG9yOiAjMDAwMGZmICFpbXBvcnRhbnQ7DQotCXRleHQtYWxpZ246IGNlbnRlciAhaW1wb3J0YW50Ow0KLX0NCi1USCB7DQotCXRleHQtYWxpZ246bGVmdCAhaW1wb3J0YW50Ow0KLQljb2xvcjogIzAwMDAwMCAhaW1wb3J0YW50Ow0KLQl2ZXJ0aWNhbC1hbGlnbjogdG9wICFpbXBvcnRhbnQ7DQotfQ0KLVREIHsNCi0JdGV4dC1hbGlnbjpsZWZ0ICFpbXBvcnRhbnQ7DQotCXZlcnRpY2FsLWFsaWduOiB0b3AgIWltcG9ydGFudDsNCi19DQotVEgucmVzdWx0IHsNCi0JYmFja2dyb3VuZC1jb2xvcjogIzk5OTk5OSAhaW1wb3J0YW50Ow0KLX0NCi1URC5yZXN1bHQgew0KLQliYWNrZ3JvdW5kLWNvbG9yOiAjY2NjY2NjOw0KLQl2ZXJ0aWNhbC1hbGlnbjogdG9wICFpbXBvcnRhbnQ7DQotfQ0KLS0tPg0KLTwvU1RZTEU+DQotDQotDQotPCEtLVN0eWxlIFNoZWV0LS0+DQotPExJTksgaHJlZj0iL3QvdGhlbWUvTWFzdGVyLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+DQotPC9oZWFkPg0KLTxib2R5Pg0KLQ0KLTxqc3A6dXNlQmVhbiBpZD0ic2VsQ29sQmVhblJvdzEyQmVhbiIgc2NvcGU9InNlc3Npb24iIGNsYXNzPSJTZWxDb2xCZWFuUm93MTJWaWV3QmVhbiIgdHlwZT0iU2VsQ29sQmVhblJvdzEyVmlld0JlYW4iLz4NCi08JQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLSU+DQotDQotPCUNCi0vL0V4ZWN1dGUgQmVhbiBNZXRob2RzDQotDQotDQotJT4NCi0NCi08IS0tQmFubmVyLS0+DQotPEgxPlJlc3VsdHMgcGFnZTwvSDE+DQotDQotPEJSPjxCUj4NCi0NCi08IS0tIFJlc3VsdCBUYWJsZSAtLT4NCi08VEFCTEUgYm9yZGVyPSIwIj4NCi08VEJPRFk+DQotCQkJPFRSPg0KLQkJCTxUSD5URVNUMl+LjYuOi488L1RIPg0KLQkJCTxURD4NCi0NCi0JPCU9c2VsQ29sQmVhblJvdzEyQmVhbi5nZXRURVNUMl+LjYuOi48oKT09IG51bGwgPyAiTlVMTCIgOiBzZWxDb2xCZWFuUm93MTJCZWFuLmdldFRFU1QyX4uNi46LjygpLnRvU3RyaW5nKCklPg0KLQkJCTwvVEQ+DQotCQk8L1RSPg0KLQkJPFRSPg0KLQkJCTxUSD5URVNUMl+Pio+Jj488L1RIPg0KLQkJCTxURD4NCi0NCi0JPCU9c2VsQ29sQmVhblJvdzEyQmVhbi5nZXRURVNUMl+Pio+Jj48oKT09IG51bGwgPyAiTlVMTCIgOiBzZWxDb2xCZWFuUm93MTJCZWFuLmdldFRFU1QyX4+Kj4mPjygpLnRvU3RyaW5nKCklPg0KLQkJCTwvVEQ+DQotCQk8L1RSPg0KLQkJPFRSPg0KLQkJCTxUSD5URVNUMl+JjYmOiY88L1RIPg0KLQkJCTxURD4NCi0NCi0JPCU9c2VsQ29sQmVhblJvdzEyQmVhbi5nZXRURVNUMl+JjYmOiY8oKT09IG51bGwgPyAiTlVMTCIgOiBzZWxDb2xCZWFuUm93MTJCZWFuLmdldFRFU1QyX4mNiY6JjygpLnRvU3RyaW5nKCklPg0KLQkJCTwvVEQ+DQotCQk8L1RSPg0KLQkJPFRSPg0KLQkJCTxUSD5URVNUMl+NXI1ajV88L1RIPg0KLQkJCTxURD4NCi0NCi0JPCU9c2VsQ29sQmVhblJvdzEyQmVhbi5nZXRURVNUMl+NXI1ajV8oKT09IG51bGwgPyAiTlVMTCIgOiBzZWxDb2xCZWFuUm93MTJCZWFuLmdldFRFU1QyX41cjVqNXygpLnRvU3RyaW5nKCklPg0KLQkJCTwvVEQ+DQotCQk8L1RSPg0KLQkJPFRSPg0KLQkJCTxUSD5URVNUMl+OjY6Ojo88L1RIPg0KLQkJCTxURD4NCi0NCi0JPCU9c2VsQ29sQmVhblJvdzEyQmVhbi5nZXRURVNUMl+OjY6Ojo8oKT09IG51bGwgPyAiTlVMTCIgOiBzZWxDb2xCZWFuUm93MTJCZWFuLmdldFRFU1QyX46Njo6OjygpLnRvU3RyaW5nKCklPg0KLQkJCTwvVEQ+DQotCQk8L1RSPg0KLQ0KLTwvVEJPRFk+DQotPC9UQUJMRSA+DQotPC9ib2R5Pg0KLTwvaHRtbD4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvVVRGOFdpdGgzQnl0ZUJPTS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvVVRGOFdpdGgzQnl0ZUJPTS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5YTM5Y2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL1VURjhXaXRoM0J5dGVCT00uanNwCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi3vu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTx0ZXN0Pg0KLTwvdGVzdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvV2VsbEZvcm1lZE5vcm1hbE5vbkRlZmF1bHQuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL1dlbGxGb3JtZWROb3JtYWxOb25EZWZhdWx0LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWYyOTY1Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvV2VsbEZvcm1lZE5vcm1hbE5vbkRlZmF1bHQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS04Ij8+DQotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgcGFnZUVuY29kaW5nPSJJU08tODg1OS03IiU+DQotPHRlc3Q+DQotPC90ZXN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9kZWZlY3RfNDIwNV93cHMuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL2RlZmVjdF80MjA1X3dwcy5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4ZGJkNmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL2RlZmVjdF80MjA1X3dwcy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08JUAgcGFnZSBzZXNzaW9uPSJmYWxzZSIgYnVmZmVyPSJub25lIiAlPg0KLTwlQCBwYWdlIGxhbmd1YWdlPSJqYXZhIiBjb250ZW50VHlwZT0idGV4dC9odG1sO2NoYXJzZXQ9dXRmLTgiJT4NCi08JUAgdGFnbGliIHVyaT0iL1dFQi1JTkYvdGxkL2VuZ2luZS50bGQiIHByZWZpeD0id3BzIiAlPg0KLTx3cHM6Y29uc3RhbnRzLz4NCi0NCi08dGFibGU+DQotPHRyPjx0ZD48aW1nIGFsdD0iIiB0aXRsZT0iIiBzcmM9JzwlPSB3cHNCYXNlVVJMICU+L2ltYWdlcy93ZWxjb21lXzUuZ2lmJyBib3JkZXI9IjAiIGFsaWduPSJsZWZ0IiAvPjwvdGQ+PC90cj4NCi08dHI+PHRkPg0KLTxzcGFuIGNsYXNzPSJ3cHNUaW55VGV4dCI+PGI+PCU9IFZlcnNpb24uU0VSVkVSX05BTUUgJT4gPCU9IFZlcnNpb24uU0VSVkVSX1ZFUlNJT04gJT48L2I+PGJyLz4NCi3lu7rnva7lsaTmrKHvvJo8JT0gVmVyc2lvbi5CVUlMRF9OVU1CRVIgJT4gPCU9IFZlcnNpb24uQlVJTERfREFURSAlPiA8JT0gVmVyc2lvbi5CVUlMRF9USU1FICU+PGJyLz4NCi08YnIvPg0KLUxpY2Vuc2VkIE1hdGVyaWFscyAtIFByb3BlcnR5IG9mIElCTTxici8+DQotPCU9IFZlcnNpb24uUFJPRFVDVF9OVU1CRVIgJT48YnIvPg0KLShDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDwlPSBDb3B5cmlnaHQuWUVBUlMgJT4gQWxsIFJpZ2h0cyBSZXNlcnZlZC48L3NwYW4+PC90ZD48L3RyPg0KLTwvdGFibGU+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL2luVmFsaWRFbmNvZGluZ1ZhbHVlLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9pblZhbGlkRW5jb2RpbmdWYWx1ZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkMDkyZTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL2luVmFsaWRFbmNvZGluZ1ZhbHVlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPg0KLTxIVE1MPg0KLTxIRUFEPg0KLTwlQCBwYWdlIA0KLWxhbmd1YWdlPSJqYXZhIg0KLWNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9YWJjIg0KLSU+DQotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPg0KLTxNRVRBIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iSUJNIFdlYlNwaGVyZSBTdHVkaW8iPg0KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPg0KLTxMSU5LIGhyZWY9Ii4uL3RoZW1lL01hc3Rlci5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPg0KLTxUSVRMRT5pblZhbGlkRW5jb2RpbmdWYWx1ZS5qc3A8L1RJVExFPg0KLTwvSEVBRD4NCi08Qk9EWT4NCi08UD5QbGFjZSBpblZhbGlkRW5jb2RpbmdWYWx1ZS5qc3AncyBjb250ZW50IGhlcmUuPC9QPg0KLTwvQk9EWT4NCi08L0hUTUw+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL2phdmFFbmNvZGluZ1ZhbHVlLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9qYXZhRW5jb2RpbmdWYWx1ZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5YzZkMTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL2phdmFFbmNvZGluZ1ZhbHVlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPg0KLTxIVE1MPg0KLTxIRUFEPg0KLTwlQCBwYWdlIA0KLWxhbmd1YWdlPSJqYXZhIiAgDQotY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1DcDEyNTIiDQotJT4NCi08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+DQotPE1FVEEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJJQk0gV2ViU3BoZXJlIFN0dWRpbyI+DQotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+DQotPExJTksgaHJlZj0iLi4vdGhlbWUvTWFzdGVyLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+DQotPFRJVExFPmluVmFsaWRFbmNvZGluZ1ZhbHVlLmpzcDwvVElUTEU+DQotPC9IRUFEPg0KLTxCT0RZPg0KLTxQPlBsYWNlIGluVmFsaWRFbmNvZGluZ1ZhbHVlLmpzcCdzIGNvbnRlbnQgaGVyZS48L1A+DQotPC9CT0RZPg0KLTwvSFRNTD4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvbWluaW1hbFBhZ2VEaXJlY3RpdmUuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL21pbmltYWxQYWdlRGlyZWN0aXZlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjlhMjJiNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvbWluaW1hbFBhZ2VEaXJlY3RpdmUuanNwCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbCIgJT4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9FbmNvZGluZy5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9FbmNvZGluZy5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0OWQwNGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL25vRW5jb2RpbmcuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+DQotPEhUTUw+DQotPEhFQUQ+DQotPCVAIHBhZ2UgDQotbGFuZ3VhZ2U9ImphdmEiDQotY29udGVudFR5cGU9InRleHQvaHRtbCINCi0lPg0KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4NCi08TUVUQSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9IklCTSBXZWJTcGhlcmUgU3R1ZGlvIj4NCi08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4NCi08TElOSyBocmVmPSIuLi90aGVtZS9NYXN0ZXIuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj4NCi08VElUTEU+bm9FbmNvZGluZy5qc3A8L1RJVExFPg0KLTwvSEVBRD4NCi08Qk9EWT4NCi08UD5QbGFjZSBub0VuY29kaW5nLmpzcCdzIGNvbnRlbnQgaGVyZS48L1A+DQotPC9CT0RZPg0KLTwvSFRNTD4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2UuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjQzMmZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2UuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08JUAgcGFnZQ0KLXBhZ2VFbmNvZGluZz0gIklTTy04ODU5LTIiDQotbGFuZ3VhZ2U9ImphdmEiDQotY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0zIg0KLSU+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZU5vRW5jb2RpbmcuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZU5vRW5jb2RpbmcuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NjU2OTAyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VOb0VuY29kaW5nLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPCVAIHBhZ2UgDQotbGFuZ3VhZ2U9ImphdmEiDQotJT4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlVXNpbmdDaGFyc2V0LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VVc2luZ0NoYXJzZXQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NGQ5MDhmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VVc2luZ0NoYXJzZXQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08JUAgcGFnZSANCi1sYW5ndWFnZT0iamF2YSINCi1jb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTMiDQotJT4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlVXNpbmdYTUxTeW50YXguanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZVVzaW5nWE1MU3ludGF4LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzg3NGEwOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlVXNpbmdYTUxTeW50YXguanNwCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08anNwOmRpcmVjdGl2ZS5wYWdlIA0KLXBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMiINCi1sYW5ndWFnZT0iamF2YSINCi1jb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTMiLz4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNld2l0aFhNTERlY2wuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZXdpdGhYTUxEZWNsLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjFjYjA0Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNld2l0aFhNTERlY2wuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xIj8+DQotPCVAIHBhZ2UNCi1wYWdlRW5jb2Rpbmc9ICJJU08tODg1OS0yIg0KLWxhbmd1YWdlPSJqYXZhIg0KLWNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMyINCi0lPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0QnJva2VuTGluZS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdEJyb2tlbkxpbmUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjY3OTgxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0QnJva2VuTGluZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgIA0KLQ0KLWVuY29kaW5nPSJJU08tODg1OS0zIiANCi0NCi0gPz4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdERlZmF1bHRFbmNvZGluZy5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdERlZmF1bHRFbmNvZGluZy5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxZjI4N2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3REZWZhdWx0RW5jb2RpbmcuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idGVzdGp1bmsiPz4NCi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4NCi08SFRNTD4NCi08SEVBRD4NCi08JUAgcGFnZSANCi1sYW5ndWFnZT0iamF2YSINCi1jb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiDQotJT4NCi08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD10ZXN0anVuayI+DQotPE1FVEEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJJQk0gV2ViU3BoZXJlIFN0dWRpbyI+DQotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+DQotPExJTksgaHJlZj0iLi4vdGhlbWUvTWFzdGVyLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+DQotPFRJVExFPnRlc3REZWZhdWx0RW5jb2RpbmcuanNwPC9USVRMRT4NCi08L0hFQUQ+DQotPEJPRFk+DQotPFA+UGxhY2UgdGVzdERlZmF1bHRFbmNvZGluZy5qc3AncyBjb250ZW50IGhlcmUuPC9QPg0KLTwvQk9EWT4NCi08L0hUTUw+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3REZWZhdWx0RW5jb2RpbmdXaXRoSnVuay5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdERlZmF1bHRFbmNvZGluZ1dpdGhKdW5rLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQ0ODY4NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdERlZmF1bHRFbmNvZGluZ1dpdGhKdW5rLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InRlc3RqdW5rIj8+DQotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+DQotPEhUTUw+DQotPEhFQUQ+DQotPCVAIHBhZ2UgDQotbGFuZ3VhZ2U9ImphdmEiDQotY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIg0KLSU+DQotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dGVzdGp1bmsiPg0KLTxNRVRBIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iSUJNIFdlYlNwaGVyZSBTdHVkaW8iPg0KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPg0KLTxMSU5LIGhyZWY9Ii4uL3RoZW1lL01hc3Rlci5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPg0KLTxUSVRMRT50ZXN0RGVmYXVsdEVuY29kaW5nLmpzcDwvVElUTEU+DQotPC9IRUFEPg0KLTxCT0RZPg0KLTxQPlBsYWNlIHRlc3REZWZhdWx0RW5jb2RpbmcuanNwJ3MgY29udGVudCBoZXJlLjwvUD4NCi08JQ0KLVN5c3RlbS5vdXQucHJpbnRsbigidGVzdCIpOw0KLSU+DQotPC9CT0RZPg0KLTwvSFRNTD4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdEV4dHJhSnVuay5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdEV4dHJhSnVuay5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1N2Y5NTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RFeHRyYUp1bmsuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiICBhYmNkPSJlZmMiDQotDQotZW5jb2Rpbmc9IklTTy04ODU5LTEiIA0KLQ0KLSA/Pg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0RXh0cmFWYWxpZFN0dWZmLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0RXh0cmFWYWxpZFN0dWZmLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzdkMGEzYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdEV4dHJhVmFsaWRTdHVmZi5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ieWVzIj8+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RJbGxGb3JtZWQuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RJbGxGb3JtZWQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNmJmOTAxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0SWxsRm9ybWVkLmpzcAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCBlbmNvZGluZz1VVEYtOCIgc3RhbmRhbG9uZT0ieWVzIj8+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RJbGxGb3JtZWQyLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0SWxsRm9ybWVkMi5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzOGVjMmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RJbGxGb3JtZWQyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz1VVEYtOCANCi08dGVzdD4NCi08L3Rlc3Q+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3ROb0VuY29kaW5nVmFsdWUuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3ROb0VuY29kaW5nVmFsdWUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4M2QwYzE4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0Tm9FbmNvZGluZ1ZhbHVlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgICAgPz4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdE5vUGFnZURpcmVjdGl2ZS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdE5vUGFnZURpcmVjdGl2ZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhMDE3NGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08dGVzdD4NCi0NCi08L3Rlc3Q+DQotDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmVBdEZpcnN0LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0Tm9QYWdlRGlyZWN0aXZlQXRGaXJzdC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5YTBjM2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmVBdEZpcnN0LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPHRlc3Q+DQotIDwlQCBwYWdlIA0KLXBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMiINCi1sYW5ndWFnZT0iamF2YSINCi1jb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTMiDQotJT4NCi08L3Rlc3Q+DQotDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmVJbkxhcmdlRmlsZS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdE5vUGFnZURpcmVjdGl2ZUluTGFyZ2VGaWxlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzM0NjM2Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdE5vUGFnZURpcmVjdGl2ZUluTGFyZ2VGaWxlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDM1NiArMCwwIEBACi08dGVzdD4NCi0NCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotPC90ZXN0Pg0KLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3ROb3JtYWxDYXNlLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0Tm9ybWFsQ2FzZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhMmM0MmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3ROb3JtYWxDYXNlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RVVEYxNi5Gcm9tTm90ZXBhZGpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0VVRGMTYuRnJvbU5vdGVwYWRqc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1Yjk4NTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RVVEYxNi5Gcm9tTm90ZXBhZGpzcAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0VVRGMTYuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RVVEYxNi5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkOWU4MTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RVVEYxNi5qc3AKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdXRmMTZCT00uanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2Qk9NLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmVlMjQyZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdXRmMTZCT00uanNwCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXIyLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyMi5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3ZTY5MTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXIyLmpzcAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyQkUuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXJCRS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3ZmZkNmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXJCRS5qc3AKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdXRmMTZXaXRoSmFwYW5lc2VDaGFycy5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdXRmMTZXaXRoSmFwYW5lc2VDaGFycy5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkYmE5YmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2V2l0aEphcGFuZXNlQ2hhcnMuanNwCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2YmUuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2YmUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjcyMzc4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC91dGYxNmJlLmpzcAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC91dGYxNmxlLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC91dGYxNmxlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDg3M2NiZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdXRmMTZsZS5qc3AKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdXRmMTZsZV94bWxTdHlsZS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdXRmMTZsZV94bWxTdHlsZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3NzJmMmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2bGVfeG1sU3R5bGUuanNwCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTczOTMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNCIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhNWU5MzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1iaW4KLWJpbi5wcm9qZWN0Ci1idWlsZC54bWwKLWRldi5wcm9wZXJ0aWVzCi1vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzXzEuMC4wLmphcgotanNwdWl0ZXN0cy5qYXIKLXRlbXAuZm9sZGVyCi1QZXJmb3JtYW5jZVJlc3VsdHMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MWE1MGYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmYTVjOTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjMyIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotZW5jb2RpbmcvPHByb2plY3Q+PUlTTy04ODU5LTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkZDhiNWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0jU3VuIEFwciAxNiAxNDozNzoyMSBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuY2xlYW5PdXRwdXRGb2xkZXI9Y2xlYW4KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuZHVwbGljYXRlUmVzb3VyY2VUYXNrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuaW52YWxpZENsYXNzcGF0aD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIucmVzb3VyY2VDb3B5RXhjbHVzaW9uRmlsdGVyPSoubGF1bmNoCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jaXJjdWxhckNsYXNzcGF0aD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLmV4Y2x1c2lvblBhdHRlcm5zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aC5tdWx0aXBsZU91dHB1dExvY2F0aW9ucz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuMgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRvYy5jb21tZW50LnN1cHBvcnQ9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIubWF4UHJvYmxlbVBlclVuaXQ9MTAwCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvYz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzRGVwcmVjYXRlZFJlZj1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc05vdFZpc2libGVSZWY9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXByaXZhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHM9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNPdmVycmlkaW5nPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c1Zpc2liaWxpdHk9cHVibGljCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFncz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzT3ZlcnJpZGluZz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHJpdmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuc2FmZVR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGF0aWJsZUpES0xldmVsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wbGV0ZUNsYXNzcGF0aD1lcnJvcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjJhYzY1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMDQgMDM6MzY6MzkgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1pbnRlcm5hbC5kZWZhdWx0LmNvbXBsaWFuY2U9ZGVmYXVsdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU5MzY4Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMDQgMDM6MzY6MzIgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5lbmFibGUucHJvamVjdC5yZWZhY3RvcmluZy5oaXN0b3J5PWZhbHNlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3MjQ5NTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotI1N1biBBcHIgMTYgMTQ6MDU6MjkgRURUIDIwMDYKLWNvbXBpbGVycy5wLmJ1aWxkPTAKLWNvbXBpbGVycy5wLmRlcHJlY2F0ZWQ9MQotY29tcGlsZXJzLnAuaWxsZWdhbC1hdHQtdmFsdWU9MAotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLm5vdC1leHRlcm5hbGl6ZWQtYXR0PTAKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MAotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTAKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnAudW51c2VkLWVsZW1lbnQtb3ItYXR0cmlidXRlPTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1NGQyODMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZS4wCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzOyBzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMzAwLnF1YWxpZmllcgotQnVuZGxlLUNsYXNzUGF0aDoganNwdWl0ZXN0cy5qYXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuSlNQVUlUZXN0c1BsdWdpbgotQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IuMAotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cywKLSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLmNvbnRlbnRhc3Npc3QsCi0gb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5jb250ZW50YXNzaXN0LnRlc3RmaWxlcywKLSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLmNvbnRlbnRkZXNjcmlwdGlvbiwKLSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLmRvY3VtZW50LAotIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuZXhhbXBsZXMsCi0gb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5mb3JtYXQsCi0gb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5tb2RlbCwKLSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLm1vZGVscXVlcnksCi0gb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5vdGhlciwKLSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnBhZ2VkaXJlY3RpdmUsCi0gb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5wYXJ0aXRpb25pbmcsCi0gb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5wYXJ0aXRpb25pbmcudGVzdGZpbGVzLmpzcCwKLSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnJlZ2lzdHJ5LAotIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuc2VhcmNoLAotIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMudGhyZWFkZWQsCi0gb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy51dGlsLAotIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMudmFsaWRhdGlvbiwKLSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnZpZXdlcgotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQsCi0gb3JnLmVjbGlwc2UudWksCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMsCi0gb3JnLmVjbGlwc2UuamR0LnVpLAotIG9yZy5lY2xpcHNlLmpkdC5jb3JlLAotIG9yZy5lY2xpcHNlLmpzdC5qc3AudWksCi0gb3JnLmp1bml0O2J1bmRsZS12ZXJzaW9uPSJbMy44LjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLAotIG9yZy5lY2xpcHNlLndzdC5zc2UudWksCi0gb3JnLmVjbGlwc2UudWkuaWRlLAotIG9yZy5lY2xpcHNlLnVpLmVkaXRvcnMsCi0gb3JnLmVjbGlwc2UudWkud29ya2JlbmNoLnRleHRlZGl0b3IsCi0gb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLAotIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLAotIG9yZy5lY2xpcHNlLnVpLnZpZXdzLAotIG9yZy5lY2xpcHNlLnVpLndvcmtiZW5jaCwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC51aSwKLSBjb20uaWJtLmljdSwKLSBvcmcuZWNsaXBzZS53c3QuaHRtbC51aSwKLSBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbiwKLSBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLAotIG9yZy5lY2xpcHNlLmNvcmUuZXhwcmVzc2lvbnMKLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCi1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvYWJvdXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE5OWRmMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODc0YjJkYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1iaW4uaW5jbHVkZXMgPSBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIHRlc3RmaWxlcy56aXAsXAotICAgICAgICAgICAgICAgdGVzdC54bWwsXAotICAgICAgICAgICAgICAgcHJvamVjdHRlc3RmaWxlcy8sXAotICAgICAgICAgICAgICAgdGVzdGZpbGVzLyxcCi0gICAgICAgICAgICAgICBqc3B1aXRlc3RzLmphcixcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcwotamFycy5jb21waWxlLm9yZGVyID0ganNwdWl0ZXN0cy5qYXIKLXNvdXJjZS5qc3B1aXRlc3RzLmphciA9IHNyYy8KLW91dHB1dC5qc3B1aXRlc3RzLmphciA9IGJpbi8KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvaWNvbnMvZnVsbC9kbGNsMTYvcmVtX2FsbF9jby5naWYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2ljb25zL2Z1bGwvZGxjbDE2L3JlbV9hbGxfY28uZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlY2QxYmU1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvaWNvbnMvZnVsbC9kbGNsMTYvcmVtX2FsbF9jby5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2ljb25zL2Z1bGwvZGxjbDE2L3Jlc3VtZV9jby5naWYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2ljb25zL2Z1bGwvZGxjbDE2L3Jlc3VtZV9jby5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2NTI3OTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9pY29ucy9mdWxsL2RsY2wxNi9yZXN1bWVfY28uZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9pY29ucy9mdWxsL2RsY2wxNi9zdXNwZW5kX2NvLmdpZiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvaWNvbnMvZnVsbC9kbGNsMTYvc3VzcGVuZF9jby5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0Nzc3N2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9pY29ucy9mdWxsL2RsY2wxNi9zdXNwZW5kX2NvLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvaWNvbnMvZnVsbC9lbGNsMTYvcmVtX2FsbF9jby5naWYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2ljb25zL2Z1bGwvZWxjbDE2L3JlbV9hbGxfY28uZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOGEzNzg1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvaWNvbnMvZnVsbC9lbGNsMTYvcmVtX2FsbF9jby5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2ljb25zL2Z1bGwvZWxjbDE2L3Jlc3VtZV9jby5naWYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2ljb25zL2Z1bGwvZWxjbDE2L3Jlc3VtZV9jby5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2ZjRlMjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9pY29ucy9mdWxsL2VsY2wxNi9yZXN1bWVfY28uZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9pY29ucy9mdWxsL2VsY2wxNi9zdXNwZW5kX2NvLmdpZiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvaWNvbnMvZnVsbC9lbGNsMTYvc3VzcGVuZF9jby5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2MWUzZjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9pY29ucy9mdWxsL2VsY2wxNi9zdXNwZW5kX2NvLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvaWNvbnMvc291cmNlRWRpdG9yLmdpZiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvaWNvbnMvc291cmNlRWRpdG9yLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzVlYmRiOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2ljb25zL3NvdXJjZUVkaXRvci5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmUyOTEyYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBwcm9wZXJ0aWVzIGZpbGUgZm9yIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMKLUJ1bmRsZS1WZW5kb3IuMCA9IEVjbGlwc2Uub3JnCi1CdW5kbGUtTmFtZS4wID0gU3RydWN0dXJlZCBTb3VyY2UgRWRpdG9yIGZvciBKU1AgVGVzdHMKLXZpZXcubmFtZS4wID0gRW1iZWRkZWQgSlNQIFN0cnVjdHVyZWQgVGV4dCBWaWV3ZXIKLXRhZ2xpYnZpZXcubmFtZS4wPVRhZ2xpYkluZGV4IERlbHRhIFRyYWNlIFZpZXcKLV9VSV9TSE9XX1RSQU5TTEFUSU9OPVNob3cgVHJhbnNsYXRpb24KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3BsdWdpbi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiMmY0NzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLTxwbHVnaW4+Ci0KLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS52aWV3cyI+Ci0JCTx2aWV3Ci0JCQluYW1lPSIldmlldy5uYW1lLjAiCi0JCQlpY29uPSIkbmwkL2ljb25zL3NvdXJjZUVkaXRvci5naWYiCi0JCQljYXRlZ29yeT0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cyIKLQkJCWNsYXNzPSJvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnZpZXdlci5WaWV3ZXJUZXN0SlNQIgotCQkJaWQ9Im9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMudmlld2VyLlZpZXdlclRlc3RKU1AiIC8+Ci0JCTx2aWV3Ci0JCQluYW1lPSIldGFnbGlidmlldy5uYW1lLjAiCi0JCQlpY29uPSIkbmwkL2ljb25zL3NvdXJjZUVkaXRvci5naWYiCi0JCQljYXRlZ29yeT0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cyIKLQkJCWNsYXNzPSJvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLlRhZ2xpYkluZGV4RGVsdGFUcmFjZVZpZXciCi0JCQlpZD0ib3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5UYWdsaWJJbmRleERlbHRhVHJhY2VWaWV3IiAvPgotCTwvZXh0ZW5zaW9uPgotICAgIDxleHRlbnNpb24KLSAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkuY29tbWFuZHMiPgotCSAgICA8Y29tbWFuZAotCSAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuanN0LmpzcC51aS5zaG93VHJhbnNsYXRpb24iCi0JICAgICAgICAgIG5hbWU9IiVfVUlfU0hPV19UUkFOU0xBVElPTiI+Ci0JICAgIDwvY29tbWFuZD4KLQk8L2V4dGVuc2lvbj4KLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5iaW5kaW5ncyI+Ci0gICAgICA8IS0tICB3aW4zMjogIE0xPUNUUkwsICAgIE0yPVNISUZULCBNMz1BTFQsIE00PS0KLSAgICAgICAgICAgIGNhcmJvbjogTTE9Q09NTUFORCwgTTI9U0hJRlQsIE0zPUFMVCwgTTQ9Q1RSTAotICAgICAgICAgICAgZ3RrOiA/IAotICAgICAgLS0+Ci0JCTxrZXkKLQkJCXNlcXVlbmNlPSJNMStNMis5IgotCQkJY29udGV4dElkPSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnN0cnVjdHVyZWRUZXh0RWRpdG9yU2NvcGUiCi0JCQljb21tYW5kSWQ9Im9yZy5lY2xpcHNlLmpzdC5qc3AudWkuc2hvd1RyYW5zbGF0aW9uIgotCQkJc2NoZW1lSWQ9Im9yZy5lY2xpcHNlLnVpLmRlZmF1bHRBY2NlbGVyYXRvckNvbmZpZ3VyYXRpb24iLz4KLQk8L2V4dGVuc2lvbj4KLSAgICA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5oYW5kbGVycyI+Ci0gICAgICAgPGhhbmRsZXIKLSAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5TaG93VHJhbnNsYXRpb25IYW5kbGVyIgotICAgICAgICAgICAgIGNvbW1hbmRJZD0ib3JnLmVjbGlwc2UuanN0LmpzcC51aS5zaG93VHJhbnNsYXRpb24iPgotICAgICAgIDwvaGFuZGxlcj4KLQk8L2V4dGVuc2lvbj4KLTwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9wcm9qZWN0dGVzdGZpbGVzL2JlYW5pbmZvX3Rlc3RzLnppcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvcHJvamVjdHRlc3RmaWxlcy9iZWFuaW5mb190ZXN0cy56aXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1MGE5YTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9wcm9qZWN0dGVzdGZpbGVzL2JlYW5pbmZvX3Rlc3RzLnppcAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvcHJvamVjdHRlc3RmaWxlcy9pbmNsdWRlc190ZXN0cy56aXAgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Byb2plY3R0ZXN0ZmlsZXMvaW5jbHVkZXNfdGVzdHMuemlwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjIwNGYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvcHJvamVjdHRlc3RmaWxlcy9pbmNsdWRlc190ZXN0cy56aXAKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Byb2plY3R0ZXN0ZmlsZXMvanNwc2VhcmNoX3Rlc3RzLnppcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvcHJvamVjdHRlc3RmaWxlcy9qc3BzZWFyY2hfdGVzdHMuemlwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzNhMzAzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvcHJvamVjdHRlc3RmaWxlcy9qc3BzZWFyY2hfdGVzdHMuemlwCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9KU1BUcmFuc2xhdGlvbkVkaXRvcklucHV0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL0pTUFRyYW5zbGF0aW9uRWRpdG9ySW5wdXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTA1MzYzNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL0pTUFRyYW5zbGF0aW9uRWRpdG9ySW5wdXQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0czsKLQotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JU3RvcmFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5qYXZhLklKU1BUcmFuc2xhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuamF2YS5KU1BUcmFuc2xhdGlvbkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVBlcnNpc3RhYmxlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JU3RvcmFnZUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC51dGlsLkRvY3VtZW50SW5wdXRTdHJlYW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLQotLyoqCi0gKiBAYXV0aG9yIG5pdGluCi0gKiAKLSAqLwotcHVibGljIGNsYXNzIEpTUFRyYW5zbGF0aW9uRWRpdG9ySW5wdXQgaW1wbGVtZW50cyBJU3RvcmFnZUVkaXRvcklucHV0IHsKLQlwcml2YXRlIGNsYXNzIEpTUFRyYW5zbGF0aW9uU3RvcmFnZSBpbXBsZW1lbnRzIElTdG9yYWdlIHsKLQkJLyoqCi0JCSAqIAotCQkgKi8KLQkJcHVibGljIEpTUFRyYW5zbGF0aW9uU3RvcmFnZShJRE9NTW9kZWwganNwTW9kZWwpIHsKLQkJCWZNb2RlbCA9IGpzcE1vZGVsOwotCQl9Ci0KLQkJLyoKLQkJICogKG5vbi1KYXZhZG9jKQotCQkgKiAKLQkJICogQHNlZQotCQkgKiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZSNnZXRBZGFwdGVyKGphdmEubGFuZy5DbGFzcykKLQkJICovCi0JCXB1YmxpYyBPYmplY3QgZ2V0QWRhcHRlcihDbGFzcyBhZGFwdGVyKSB7Ci0JCQlyZXR1cm4gZk1vZGVsLmdldEFkYXB0ZXIoYWRhcHRlcik7Ci0JCX0KLQotCQkvKgotCQkgKiAobm9uLUphdmFkb2MpCi0JCSAqIAotCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklTdG9yYWdlI2dldENvbnRlbnRzKCkKLQkJICovCi0JCXB1YmxpYyBJbnB1dFN0cmVhbSBnZXRDb250ZW50cygpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJCXJldHVybiBuZXcgRG9jdW1lbnRJbnB1dFN0cmVhbShnZXRUcmFuc2xhdGlvbkFkYXB0ZXIoKS5nZXRKU1BUcmFuc2xhdGlvbigpLmdldEphdmFEb2N1bWVudCgpKTsKLQkJfQotCi0JCS8qCi0JCSAqIChub24tSmF2YWRvYykKLQkJICogCi0JCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVN0b3JhZ2UjZ2V0RnVsbFBhdGgoKQotCQkgKi8KLQkJcHVibGljIElQYXRoIGdldEZ1bGxQYXRoKCkgewotCQkJcmV0dXJuIG5ldyBQYXRoKGdldFRyYW5zbGF0aW9uQWRhcHRlcigpLmdldEpTUFRyYW5zbGF0aW9uKCkuZ2V0SmF2YVBhdGgoKSk7Ci0JCX0KLQotCQkvKgotCQkgKiAobm9uLUphdmFkb2MpCi0JCSAqIAotCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklTdG9yYWdlI2dldE5hbWUoKQotCQkgKi8KLQkJcHVibGljIFN0cmluZyBnZXROYW1lKCkgewotCQkJcmV0dXJuIGdldFRyYW5zbGF0aW9uQWRhcHRlcigpLmdldEpTUFRyYW5zbGF0aW9uKCkuZ2V0Q29tcGlsYXRpb25Vbml0KCkuZ2V0RWxlbWVudE5hbWUoKTsKLQkJfQotCi0JCS8qCi0JCSAqIChub24tSmF2YWRvYykKLQkJICogCi0JCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVN0b3JhZ2UjaXNSZWFkT25seSgpCi0JCSAqLwotCQlwdWJsaWMgYm9vbGVhbiBpc1JlYWRPbmx5KCkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQl9Ci0KLQlJRE9NTW9kZWwgZk1vZGVsOwotCi0JcHJpdmF0ZSBKU1BUcmFuc2xhdGlvblN0b3JhZ2UgZlN0b3JhZ2U7Ci0KLQkvKioKLQkgKiAKLQkgKi8KLQlwdWJsaWMgSlNQVHJhbnNsYXRpb25FZGl0b3JJbnB1dChJRE9NTW9kZWwgbW9kZWwpIHsKLQkJZlN0b3JhZ2UgPSBuZXcgSlNQVHJhbnNsYXRpb25TdG9yYWdlKG1vZGVsKTsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dCNleGlzdHMoKQotCSAqLwotCXB1YmxpYyBib29sZWFuIGV4aXN0cygpIHsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGUjZ2V0QWRhcHRlcihqYXZhLmxhbmcuQ2xhc3MpCi0JICovCi0JcHVibGljIE9iamVjdCBnZXRBZGFwdGVyKENsYXNzIGFkYXB0ZXIpIHsKLQkJcmV0dXJuIGZNb2RlbC5nZXRBZGFwdGVyKGFkYXB0ZXIpOwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSUVkaXRvcklucHV0I2dldEltYWdlRGVzY3JpcHRvcigpCi0JICovCi0JcHVibGljIEltYWdlRGVzY3JpcHRvciBnZXRJbWFnZURlc2NyaXB0b3IoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSUVkaXRvcklucHV0I2dldE5hbWUoKQotCSAqLwotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKLQkJcmV0dXJuIGZTdG9yYWdlLmdldE5hbWUoKTsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dCNnZXRQZXJzaXN0YWJsZSgpCi0JICovCi0JcHVibGljIElQZXJzaXN0YWJsZUVsZW1lbnQgZ2V0UGVyc2lzdGFibGUoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVN0b3JhZ2VFZGl0b3JJbnB1dCNnZXRTdG9yYWdlKCkKLQkgKi8KLQlwdWJsaWMgSVN0b3JhZ2UgZ2V0U3RvcmFnZSgpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJcmV0dXJuIGZTdG9yYWdlOwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSUVkaXRvcklucHV0I2dldFRvb2xUaXBUZXh0KCkKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQlyZXR1cm4gZk1vZGVsLmdldEJhc2VMb2NhdGlvbigpOwotCX0KLQotCUpTUFRyYW5zbGF0aW9uQWRhcHRlciBnZXRUcmFuc2xhdGlvbkFkYXB0ZXIoKSB7Ci0JCUpTUFRyYW5zbGF0aW9uQWRhcHRlciBhZGFwdGVyID0gKEpTUFRyYW5zbGF0aW9uQWRhcHRlcikgZk1vZGVsLmdldERvY3VtZW50KCkuZ2V0QWRhcHRlckZvcihJSlNQVHJhbnNsYXRpb24uY2xhc3MpOwotCQlyZXR1cm4gYWRhcHRlcjsKLQl9Ci0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9KU1BVSVByZWZlcmVuY2VzVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9KU1BVSVByZWZlcmVuY2VzVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZWM2ZmVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvSlNQVUlQcmVmZXJlbmNlc1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5JUHJlZmVyZW5jZVN0b3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkuaW50ZXJuYWwuSlNQVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5KU1BVSVByZWZlcmVuY2VOYW1lczsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVFeGNlcHRpb247Ci0KLS8qKgotICogVGhlIHB1cnBvc2Ugb2YgdGhpcyB0ZXN0IGlzIHRvIHZlcmlmeSB0aGUgdmFsaWRpdHkgb2YgdGhlIEpTUCBTb3VyY2UKLSAqIGVkaXRvciBwcmVmZXJlbmNlcy4gVGVzdHMgaW5jbHVkZSBzZXR0aW5nL2dldHRpbmcgcHJlZmVyZW5jZXMuCi0gKiAKLSAqIE5PVEU6IFRoaXMgdGVzdCBzaG91bGQgYmUgcHJlZm9ybWVkIG9uIGEgY2xlYW4gd29ya3NwYWNlLiBJZiBwZXJmb3JtZWQgb24KLSAqIGFuIGV4aXN0aW5nIHdvcmtzcGFjZSwgdGhpcyB0ZXN0IHdpbGwgbWFuaXB1bGF0ZSBwcmVmZXJlbmNlcyBpbiB0aGUKLSAqIHdvcmtzcGFjZSwgdGhvdWdoIGF0dGVtcHRzIHdpbGwgYmUgbWFkZSB0byByZXN0b3JlIG9yaWdpbmFsIHZhbHVlcyBhZnRlcgotICogdGVzdGluZy4KLSAqLwotcHVibGljIGNsYXNzIEpTUFVJUHJlZmVyZW5jZXNUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCS8qKgotCSAqIFRlc3RzIGV4aXN0YW5jZSBvZiBwcmVmZXJlbmNlIHZhbHVlcyB3aGVuIGdldHRpbmcgcHJlZmVyZW5jZSB2YWx1ZXMKLQkgKiB0aHJvdWdoIFBsYXRmb3JtLmdldFByZWZlcmVuY2VzU2VydmljZSgpCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEJ1bmRsZUdldFByZWZlcmVuY2VzKCkgewotCQlmaW5hbCBTdHJpbmcgYnVuZGxlTmFtZSA9ICJvcmcuZWNsaXBzZS53c3QuaHRtbC51aSI7Ci0KLQkJLy8gbmVlZCB0byBzdGFydCB1cCBidW5kbGUgZm9yIGRlZmF1bHQgdmFsdWVzIHRvIGJlIGxvYWRlZAotCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKGJ1bmRsZU5hbWUpOwotCQl0cnkgewotCQkJaWYgKGJ1bmRsZSAhPSBudWxsKQotCQkJCWJ1bmRsZS5zdGFydCgpOwotCQkJZWxzZQotCQkJCWZhaWwoIkdldCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCBiZWNhdXNlIGNvdWxkIG5vdCBmaW5kIGJ1bmRsZTogIiArIGJ1bmRsZU5hbWUpOwotCQl9IGNhdGNoIChCdW5kbGVFeGNlcHRpb24gZSkgewotCQkJZmFpbCgiR2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIGJlY2F1c2Ugb2YgZXhjZXB0aW9uIHN0YXJ0aW5nIGJ1bmRsZTogIiArIGJ1bmRsZU5hbWUgKyAiIGV4Y2VwdGlvbjogIiArIGUpOwotCQl9Ci0KLQkJYnVuZGxlR2V0UHJlZmVyZW5jZShidW5kbGVOYW1lLCBKU1BVSVByZWZlcmVuY2VOYW1lcy5BVVRPX1BST1BPU0UpOwotCQlidW5kbGVHZXRQcmVmZXJlbmNlKGJ1bmRsZU5hbWUsIEpTUFVJUHJlZmVyZW5jZU5hbWVzLkFVVE9fUFJPUE9TRV9DT0RFKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgYnVuZGxlR2V0UHJlZmVyZW5jZShTdHJpbmcgYnVuZGxlTmFtZSwgU3RyaW5nIHByZWZLZXkpIHsKLQkJU3RyaW5nIGRlZmF1bHRWYWx1ZSA9IExvbmcudG9TdHJpbmcoU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkpOyAvLyByYW5kb20KLQkJCQkJCQkJCQkJCQkJCQkJCQkvLyBzdHJpbmcKLQotCQlTdHJpbmcgdmFsdWUgPSBQbGF0Zm9ybS5nZXRQcmVmZXJlbmNlc1NlcnZpY2UoKS5nZXRTdHJpbmcoYnVuZGxlTmFtZSwgcHJlZktleSwgZGVmYXVsdFZhbHVlLCBudWxsKTsKLQkJYXNzZXJ0Tm90U2FtZSgiR2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIHVzaW5nIFBsYXRmb3JtLmdldFByZWZlcmVuY2VzU2VydmljZS4gS2V5OiAiICsgcHJlZktleSwgZGVmYXVsdFZhbHVlLCB2YWx1ZSk7Ci0JfQotCi0JLyoqCi0JICogVGVzdHMgZGVmYXVsdCB2YWx1ZXMgb2YgcHJlZmVyZW5jZXMuCi0JICogCi0JICogTk9URTogRXhwZWN0ZWQgZGVmYXVsdCB2YWx1ZXMgYXJlIGhhcmQtY29kZWQsIHNvIGlmIGRlZmF1bHQgdmFsdWVzIGRvCi0JICogZ2V0IGNoYW5nZWQsIGFzc2VydGlvbnMgbmVlZCB0byBiZSB1cGRhdGVkIGFzIHdlbGwKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0UGx1Z2luR2V0RGVmYXVsdFByZWZlcmVuY2VzKCkgewotCQlJUHJlZmVyZW5jZVN0b3JlIHN0b3JlID0gSlNQVUlQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpOwotCi0JCXBsdWdpbkdldERlZmF1bHRQcmVmZXJlbmNlKHN0b3JlLCBKU1BVSVByZWZlcmVuY2VOYW1lcy5BVVRPX1BST1BPU0UsIEJvb2xlYW4udG9TdHJpbmcodHJ1ZSkpOwotCQlwbHVnaW5HZXREZWZhdWx0UHJlZmVyZW5jZShzdG9yZSwgSlNQVUlQcmVmZXJlbmNlTmFtZXMuQVVUT19QUk9QT1NFX0NPREUsICI8PSIpOwotCX0KLQotCXByaXZhdGUgdm9pZCBwbHVnaW5HZXREZWZhdWx0UHJlZmVyZW5jZShJUHJlZmVyZW5jZVN0b3JlIHN0b3JlLCBTdHJpbmcgcHJlZktleSwgU3RyaW5nIGV4cGVjdGVkKSB7Ci0JCVN0cmluZyBkZWZhdWx0VmFsdWUgPSBzdG9yZS5nZXREZWZhdWx0U3RyaW5nKHByZWZLZXkpOwotCQlhc3NlcnRFcXVhbHMoIkdldCBkZWZhdWx0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIHVzaW5nIHBsdWdpbi5nZXRQcmVmZXJlbmNlU3RvcmUuIEtleTogIiArIHByZWZLZXksIGV4cGVjdGVkLCBkZWZhdWx0VmFsdWUpOwotCX0KLQotCS8qKgotCSAqIFRlc3RzIHNldHRpbmcgcHJlZmVyZW5jZSB2YWx1ZXMgYnkgc2V0dGluZyBwcmVmZXJlbmNlIHZhbHVlIHRvIGJlIGEKLQkgKiBjZXJ0YWluIHZhbHVlLCB0aGVuIGdldHRpbmcgdGhlIHByZWZlcmVuY2UgdmFsdWUgdG8gdmVyaWZ5IGl0IHdhcyBzZXQuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFBsdWdpblNldFByZWZlcmVuY2VzKCkgewotCQlJUHJlZmVyZW5jZVN0b3JlIHN0b3JlID0gSlNQVUlQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpOwotCi0JCXBsdWdpblNldFByZWZlcmVuY2VCb29sZWFuKHN0b3JlLCBKU1BVSVByZWZlcmVuY2VOYW1lcy5BVVRPX1BST1BPU0UpOwotCQlwbHVnaW5TZXRQcmVmZXJlbmNlU3RyaW5nKHN0b3JlLCBKU1BVSVByZWZlcmVuY2VOYW1lcy5BVVRPX1BST1BPU0VfQ09ERSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHBsdWdpblNldFByZWZlcmVuY2VCb29sZWFuKElQcmVmZXJlbmNlU3RvcmUgc3RvcmUsIFN0cmluZyBwcmVmS2V5KSB7Ci0JCWJvb2xlYW4gb3JpZ2luYWxWYWx1ZSA9IHN0b3JlLmdldEJvb2xlYW4ocHJlZktleSk7Ci0JCWJvb2xlYW4gZXhwZWN0ZWRWYWx1ZSA9ICFvcmlnaW5hbFZhbHVlOwotCQlzdG9yZS5zZXRWYWx1ZShwcmVmS2V5LCBleHBlY3RlZFZhbHVlKTsKLQkJYm9vbGVhbiBmb3VuZFZhbHVlID0gc3RvcmUuZ2V0Qm9vbGVhbihwcmVmS2V5KTsKLQkJYXNzZXJ0RXF1YWxzKCJTZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgdXNpbmcgcGx1Z2luLmdldFByZWZlcmVuY2VTdG9yZS4gS2V5OiAiICsgcHJlZktleSArICIgIGV4cGVjdGVkOiAiICsgZXhwZWN0ZWRWYWx1ZSArICIgZm91bmQ6ICIgKyBmb3VuZFZhbHVlLCBleHBlY3RlZFZhbHVlLCBmb3VuZFZhbHVlKTsKLQotCQkvLyBhdHRlbXB0IHRvIHJlc3RvcmUgb3JpZ2luYWwgcHJlZmVyZW5jZSB2YWx1ZQotCQlzdG9yZS5zZXRWYWx1ZShwcmVmS2V5LCBvcmlnaW5hbFZhbHVlKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgcGx1Z2luU2V0UHJlZmVyZW5jZVN0cmluZyhJUHJlZmVyZW5jZVN0b3JlIHN0b3JlLCBTdHJpbmcgcHJlZktleSkgewotCQlTdHJpbmcgb3JpZ2luYWxWYWx1ZSA9IHN0b3JlLmdldFN0cmluZyhwcmVmS2V5KTsKLQkJU3RyaW5nIGV4cGVjdGVkVmFsdWUgPSBMb25nLnRvU3RyaW5nKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpKTsgLy8gcmFuZG9tCi0JCQkJCQkJCQkJCQkJCQkJCQkJLy8gc3RyaW5nCi0JCXN0b3JlLnNldFZhbHVlKHByZWZLZXksIGV4cGVjdGVkVmFsdWUpOwotCQlTdHJpbmcgZm91bmRWYWx1ZSA9IHN0b3JlLmdldFN0cmluZyhwcmVmS2V5KTsKLQkJYXNzZXJ0RXF1YWxzKCJTZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgdXNpbmcgcGx1Z2luLmdldFByZWZlcmVuY2VTdG9yZS4gS2V5OiAiICsgcHJlZktleSArICIgIGV4cGVjdGVkOiAiICsgZXhwZWN0ZWRWYWx1ZSArICIgZm91bmQ6ICIgKyBmb3VuZFZhbHVlLCBleHBlY3RlZFZhbHVlLCBmb3VuZFZhbHVlKTsKLQotCQkvLyBhdHRlbXB0IHRvIHJlc3RvcmUgb3JpZ2luYWwgcHJlZmVyZW5jZSB2YWx1ZQotCQlzdG9yZS5zZXRWYWx1ZShwcmVmS2V5LCBvcmlnaW5hbFZhbHVlKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEphdmFTZXZlcml0eVBhZ2VJRHNNYXRjaCgpIHsKLQkJLy8gdXNlZCB3aGVuIGxpbmtpbmcgZnJvbSBvdXIgSlNQIHNldmVyaXR5IHByZWZlcmVuY2UgcGFnZSB0byB0aGUgSmF2YSBzZXZlcml0eSBwcmVmZXJlbmNlIHBhZ2UKLQkJYXNzZXJ0RXF1YWxzKG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS5wcmVmZXJlbmNlcy5Qcm9ibGVtU2V2ZXJpdGllc1ByZWZlcmVuY2VQYWdlLlBSRUZfSUQsb3JnLmVjbGlwc2UuanN0LmpzcC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy51aS5KU1BWYWxpZGF0aW9uUHJlZmVyZW5jZVBhZ2UuSkFWQV9TRVZFUklUWV9QUkVGRVJFTkNFX1BBR0UpOwotCQlhc3NlcnRFcXVhbHMob3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLnByZWZlcmVuY2VzLlByb2JsZW1TZXZlcml0aWVzUHJlZmVyZW5jZVBhZ2UuUFJPUF9JRCxvcmcuZWNsaXBzZS5qc3QuanNwLnVpLmludGVybmFsLnByZWZlcmVuY2VzLnVpLkpTUFZhbGlkYXRpb25QcmVmZXJlbmNlUGFnZS5KQVZBX1NFVkVSSVRZX1BST1BFUlRZX1BBR0UpOwotCQlhc3NlcnRFcXVhbHMob3JnLmVjbGlwc2UuamR0LmludGVybmFsLnVpLnByZWZlcmVuY2VzLlByb3BlcnR5QW5kUHJlZmVyZW5jZVBhZ2UuREFUQV9OT19MSU5LLCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLmludGVybmFsLnByZWZlcmVuY2VzLnVpLkpTUFZhbGlkYXRpb25QcmVmZXJlbmNlUGFnZS5EQVRBX05PX0xJTkspOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvSlNQVUlUZXN0SW1hZ2VzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL0pTUFVJVGVzdEltYWdlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NGUxZWIxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvSlNQVUlUZXN0SW1hZ2VzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZVJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luOwotCi1wdWJsaWMgZmluYWwgY2xhc3MgSlNQVUlUZXN0SW1hZ2VzIHsKLQlwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgSUNPTlNfUEFUSCA9ICJpY29ucy9mdWxsLyI7IC8vJE5PTi1OTFMtMSQKLQotCS8qIGRpc2FibGVkICovCi0JcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIERMQ0wgPSBJQ09OU19QQVRIICsgImRsY2wxNi8iOyAvLyAkTk9OLU5MUy0xJAotCS8qIGVuYWJsZWQgKi8KLQlwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgRUxDTCA9IElDT05TX1BBVEggKyAiZWxjbDE2LyI7IC8vJE5PTi1OTFMtMSQKLQotCS8vIEltYWdlcyBjb3VydGVzeSBvZiBvcmcuZWNsaXBzZS5kZWJ1Zy51aQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElNR19FTENMX1NVU1BFTkQgPSBFTENMICsgIlNVU1BFTkQiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU1HX0VMQ0xfUkVTVU1FID0gRUxDTCArICJSRVNVTUUiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU1HX0RMQ0xfU1VTUEVORCA9IERMQ0wgKyAiU1VTUEVORCI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJTUdfRExDTF9SRVNVTUUgPSBETENMICsgIlJFU1VNRSI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJTUdfRUxDTF9SRU1PVkVfQUxMID0gRUxDTCArICJDTEVBUiI7IC8vJE5PTi1OTFMtMSQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJTUdfRExDTF9SRU1PVkVfQUxMID0gRExDTCArICJDTEVBUiI7IC8vJE5PTi1OTFMtMSQKLQotCXN0YXRpYyB2b2lkIGluaXRpYWxpemVJbWFnZVJlZ2lzdHJ5KEltYWdlUmVnaXN0cnkgcmVnKSB7Ci0JCXJlZy5wdXQoSU1HX0VMQ0xfUkVTVU1FLCBBYnN0cmFjdFVJUGx1Z2luLmltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4oSlNQVUlUZXN0c1BsdWdpbi5JRCwgRUxDTCArICJyZXN1bWVfY28uZ2lmIikpOwotCQlyZWcucHV0KElNR19ETENMX1JFU1VNRSwgQWJzdHJhY3RVSVBsdWdpbi5pbWFnZURlc2NyaXB0b3JGcm9tUGx1Z2luKEpTUFVJVGVzdHNQbHVnaW4uSUQsIERMQ0wgKyAicmVzdW1lX2NvLmdpZiIpKTsKLQotCQlyZWcucHV0KElNR19FTENMX1NVU1BFTkQsIEFic3RyYWN0VUlQbHVnaW4uaW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbihKU1BVSVRlc3RzUGx1Z2luLklELCBFTENMICsgInN1c3BlbmRfY28uZ2lmIikpOwotCQlyZWcucHV0KElNR19ETENMX1NVU1BFTkQsIEFic3RyYWN0VUlQbHVnaW4uaW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbihKU1BVSVRlc3RzUGx1Z2luLklELCBETENMICsgInN1c3BlbmRfY28uZ2lmIikpOwotCi0JCXJlZy5wdXQoSU1HX0VMQ0xfUkVNT1ZFX0FMTCwgQWJzdHJhY3RVSVBsdWdpbi5pbWFnZURlc2NyaXB0b3JGcm9tUGx1Z2luKEpTUFVJVGVzdHNQbHVnaW4uSUQsIEVMQ0wgKyAicmVtX2FsbF9jby5naWYiKSk7Ci0JCXJlZy5wdXQoSU1HX0RMQ0xfUkVNT1ZFX0FMTCwgQWJzdHJhY3RVSVBsdWdpbi5pbWFnZURlc2NyaXB0b3JGcm9tUGx1Z2luKEpTUFVJVGVzdHNQbHVnaW4uSUQsIERMQ0wgKyAicmVtX2FsbF9jby5naWYiKSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9KU1BVSVRlc3RTdWl0ZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9KU1BVSVRlc3RTdWl0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNWJkODlhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvSlNQVUlUZXN0U3VpdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuY29udGVudGFzc2lzdC5CZWFuSW5mb1Byb3ZpZGVyVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLmNvbnRlbnRhc3Npc3QuSlNQSmF2YVRyYW5zbGF0b3JUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuY29udGVudGFzc2lzdC5KU1BUcmFuc2xhdGlvblRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5jb250ZW50ZGVzY3JpcHRpb24uVGVzdENvbnRlbnREZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLmRvY3VtZW50LkZpbGVCdWZmZXJEb2N1bWVudFRlc3RlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLm1vZGVsLlRlc3RNb2RlbHNGcm9tRmlsZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5tb2RlbHF1ZXJ5Lk1vZGVsUXVlcnlUZXN0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5vdGhlci5TY2FubmVyVW5pdFRlc3RzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMub3RoZXIuVW5pdFRlc3RzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMucGFnZWRpcmVjdGl2ZS5UZXN0UGFnZURpcmVjdGl2ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnBhcnRpdGlvbmluZy5UZXN0U3RydWN0dXJlZFBhcnRpdGlvbmVySlNQOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMucmVnaXN0cnkuQWRhcHRlckZhY3RvcnlSZWdpc3RyeVRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy52YWxpZGF0aW9uLkpTUEhUTUxWYWxpZGF0b3JUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMudmlld2VyLlRlc3RWaWV3ZXJDb25maWd1cmF0aW9uSlNQOwotCi0KLQotCi1wdWJsaWMgY2xhc3MgSlNQVUlUZXN0U3VpdGUgZXh0ZW5kcyBUZXN0U3VpdGUgewotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBKU1BVSVRlc3RTdWl0ZSgpOwotCX0KLQotCXB1YmxpYyBKU1BVSVRlc3RTdWl0ZSgpIHsKLQkJc3VwZXIoIkpTUCBVSSBUZXN0IFN1aXRlIik7Ci0JCQotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoU2Nhbm5lclVuaXRUZXN0cy5jbGFzcywgIlNjYW5uZXJVbml0VGVzdHMiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShVbml0VGVzdHMuY2xhc3MsICJVbml0VGVzdHMiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0U3RydWN0dXJlZFBhcnRpdGlvbmVySlNQLmNsYXNzLCAiVGVzdFN0cnVjdHVyZWRQYXJ0aW9uZXIiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShNb2RlbFF1ZXJ5VGVzdGVyLmNsYXNzLCAiTW9kZWxRdWVyeVRlc3RlciIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEpTUEphdmFUcmFuc2xhdG9yVGVzdC5jbGFzcywgIk1peGVkIEphdmFTY3JpcHQgVHJhbnNsYXRvciBUZXN0cyIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RFbWFpbE5vdGljZS5jbGFzcywgIlRlc3RFbWFpbE5vdGljZSIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEJlYW5JbmZvUHJvdmlkZXJUZXN0LmNsYXNzLCAiQmVhbkluZm8gUHJvdmlkZXIgVGVzdCIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEpTUFRyYW5zbGF0aW9uVGVzdC5jbGFzcywgIlRyYW5zbGF0b3IgVGVzdHMiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShBZGFwdGVyRmFjdG9yeVJlZ2lzdHJ5VGVzdC5jbGFzcywgIkFkYXB0ZXJGYWN0b3J5UmVnaXN0cnkgVGVzdHMiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShKU1BVSVByZWZlcmVuY2VzVGVzdC5jbGFzcywgIlByZWZlcmVuY2UgVGVzdHMiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0Vmlld2VyQ29uZmlndXJhdGlvbkpTUC5jbGFzcywgIlNvdXJjZSBWaWV3ZXIgQ29uZmlndXJhdGlvbiBUZXN0cyIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RFZGl0b3JDb25maWd1cmF0aW9uSlNQLmNsYXNzLCAiRWRpdG9yIENvbmZpZ3VyYXRpb24gVGVzdHMiKSk7Ci0JCQotCQkvLyBtb3ZlZCBmcm9tIGpzcCBjb3JlIHRlc3RzIGJlY2F1c2UgdGhleSByZXF1aXJlIFVJCi0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0UGFnZURpcmVjdGl2ZS5jbGFzcywgIlBhZ2UgRGlyZWN0aXZlIFRlc3RzIikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoRmlsZUJ1ZmZlckRvY3VtZW50VGVzdGVyLmNsYXNzLCAiRmlsZUJ1ZmZlciBEb2N1bWVudCBUZXN0cyIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RNb2RlbENsb25lLmNsYXNzLCAiTW9kZWwgQ2xvbmUgVGVzdHMiKSk7Ci0JCQotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdE1vZGVsc0Zyb21GaWxlcy5jbGFzcywgIlRlc3QgTW9kZWxzIEZyb20gRmlsZXMiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0TW9kZWxFbWJlZGRlZENvbnRlbnRUeXBlLmNsYXNzLCAiVGVzdCBNb2RlbCBFbWJlZGRlZCBDb250ZW50VHlwZSIpKTsKLQotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdENvbnRlbnREZXNjcmlwdGlvbi5jbGFzcywgIkNvbnRlbnQgRGVzY3JpcHRpb24gVGVzdHMiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShKU1BIVE1MVmFsaWRhdG9yVGVzdC5jbGFzcywgIkpTUCBIVE1MIFZhbGlkYXRvciBUZXN0IikpOwotCQkvLyBwYV9UT0RPIGZpeCB0aGlzIHRlc3QKLQkJLy9hZGRUZXN0KG5ldyBUZXN0U3VpdGUoSlNQU2VhcmNoVGVzdHMuY2xhc3MpKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL0pTUFVJVGVzdHNQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvSlNQVUlUZXN0c1BsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjFkOTQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvSlNQVUlUZXN0c1BsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZVJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luOwotCi0vKioKLSAqIFRoZSBtYWluIHBsdWdpbiBjbGFzcyB0byBiZSB1c2VkIGluIHRoZSBkZXNrdG9wLgotICovCi1wdWJsaWMgY2xhc3MgSlNQVUlUZXN0c1BsdWdpbiBleHRlbmRzIEFic3RyYWN0VUlQbHVnaW4gewotCS8vVGhlIHNoYXJlZCBpbnN0YW5jZS4KLQlwcml2YXRlIHN0YXRpYyBKU1BVSVRlc3RzUGx1Z2luIHBsdWdpbjsKLQkvL1Jlc291cmNlIGJ1bmRsZS4KLQlwcml2YXRlIFJlc291cmNlQnVuZGxlIHJlc291cmNlQnVuZGxlOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEID0gIm9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMiOwotCi0gICAgLyoqCi0JICogVGhlIGNvbnN0cnVjdG9yLgotCSAqLwotCXB1YmxpYyBKU1BVSVRlc3RzUGx1Z2luKCkgewotCQlzdXBlcigpOwotCQlwbHVnaW4gPSB0aGlzOwotCQl0cnkgewotCQkJcmVzb3VyY2VCdW5kbGUgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoIm9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuU1NFRm9ySlNQVGVzdHNQbHVnaW5SZXNvdXJjZXMiKTsKLQkJfQotCQljYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIHgpIHsKLQkJCXJlc291cmNlQnVuZGxlID0gbnVsbDsKLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIEpTUFVJVGVzdHNQbHVnaW4gZ2V0RGVmYXVsdCgpIHsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzdHJpbmcgZnJvbSB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLAotCSAqIG9yICdrZXknIGlmIG5vdCBmb3VuZC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRSZXNvdXJjZVN0cmluZyhTdHJpbmcga2V5KSB7Ci0JCVJlc291cmNlQnVuZGxlIGJ1bmRsZSA9IEpTUFVJVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFJlc291cmNlQnVuZGxlKCk7Ci0JCXRyeSB7Ci0JCQlyZXR1cm4gKGJ1bmRsZSAhPSBudWxsKSA/IGJ1bmRsZS5nZXRTdHJpbmcoa2V5KSA6IGtleTsKLQkJfQotCQljYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKLQkJCXJldHVybiBrZXk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBwbHVnaW4ncyByZXNvdXJjZSBidW5kbGUsCi0JICovCi0JcHVibGljIFJlc291cmNlQnVuZGxlIGdldFJlc291cmNlQnVuZGxlKCkgewotCQlyZXR1cm4gcmVzb3VyY2VCdW5kbGU7Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgVVJMIGdldEluc3RhbGxMb2NhdGlvbigpIHsKLQkJVVJMIGluc3RhbGxMb2NhdGlvbiA9IFBsYXRmb3JtLmdldEJ1bmRsZSgib3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cyIpLmdldEVudHJ5KCIvIik7Ci0JCVVSTCByZXNvbHZlZExvY2F0aW9uID0gbnVsbDsKLQkJdHJ5IHsKLQkJCXJlc29sdmVkTG9jYXRpb24gPSBGaWxlTG9jYXRvci5yZXNvbHZlKGluc3RhbGxMb2NhdGlvbik7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCS8vIGltcG9zc2libGUKLQkJCXRocm93IG5ldyBFcnJvcihlKTsKLQkJfQotCQlyZXR1cm4gcmVzb2x2ZWRMb2NhdGlvbjsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBGaWxlIGdldFRlc3RGaWxlKFN0cmluZyBmaWxlcGF0aCkgewotCQlVUkwgaW5zdGFsbFVSTCA9IGdldEluc3RhbGxMb2NhdGlvbigpOwotCQkvL1N0cmluZyBzY2hlbWUgPSBpbnN0YWxsVVJMLmdldFByb3RvY29sKCk7Ci0JCVN0cmluZyBwYXRoID0gaW5zdGFsbFVSTC5nZXRQYXRoKCk7Ci0JCVN0cmluZyBsb2NhdGlvbiA9IHBhdGggKyBmaWxlcGF0aDsKLQkJRmlsZSByZXN1bHQgPSBuZXcgRmlsZShsb2NhdGlvbik7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCQotCXByb3RlY3RlZCB2b2lkIGluaXRpYWxpemVJbWFnZVJlZ2lzdHJ5KEltYWdlUmVnaXN0cnkgcmVnKSB7Ci0JCXN1cGVyLmluaXRpYWxpemVJbWFnZVJlZ2lzdHJ5KHJlZyk7Ci0JCUpTUFVJVGVzdEltYWdlcy5pbml0aWFsaXplSW1hZ2VSZWdpc3RyeShyZWcpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvTG9nZ2VyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL0xvZ2dlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMmIxMDcyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvTG9nZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHM7Ci0KLWltcG9ydCBjb20uaWJtLmljdS51dGlsLlN0cmluZ1Rva2VuaXplcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci0KLS8qKgotICogU21hbGwgY29udmVuaWVuY2UgY2xhc3MgdG8gbG9nIG1lc3NhZ2VzIHRvIHBsdWdpbidzIGxvZyBmaWxlIGFuZCBhbHNvLCBpZiBkZXNpcmVkLAotICogdGhlIGNvbnNvbGUuIFRoaXMgY2xhc3Mgc2hvdWxkIG9ubHkgYmUgdXNlZCBieSBjbGFzc2VzIGluIHRoaXMgcGx1Z2luLiBPdGhlcgotICogcGx1Z2lucyBzaG91bGQgbWFrZSB0aGVpciBvd24gY29weSwgd2l0aCBhcHByb3ByaWF0ZSBJRC4KLSAqLwotcHVibGljIGNsYXNzIExvZ2dlciB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzIjsgLy8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRSQUNFRklMVEVSX0xPQ0FUSU9OID0gIi9kZWJ1Zy90cmFjZWZpbHRlciI7IC8vJE5PTi1OTFMtMSQKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9LID0gSVN0YXR1cy5PSzsgLy8gMAotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElORk8gPSBJU3RhdHVzLklORk87IC8vIDEKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXQVJOSU5HID0gSVN0YXR1cy5XQVJOSU5HOyAvLyAyCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVJST1IgPSBJU3RhdHVzLkVSUk9SOyAvLyA0Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPS19ERUJVRyA9IDIwMCArIE9LOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElORk9fREVCVUcgPSAyMDAgKyBJTkZPOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdBUk5JTkdfREVCVUcgPSAyMDAgKyBXQVJOSU5HOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SX0RFQlVHID0gMjAwICsgRVJST1I7Ci0KLQkvKioKLQkgKiBBZGRzIG1lc3NhZ2UgdG8gbG9nLgotCSAqIEBwYXJhbSBsZXZlbCBzZXZlcml0eSBsZXZlbCBvZiB0aGUgbWVzc2FnZSAoT0ssIElORk8sIFdBUk5JTkcsIEVSUk9SLCBPS19ERUJVRywgSU5GT19ERUJVRywgV0FSTklOR19ERUJVRywgRVJST1JfREVCVUcpCi0JICogQHBhcmFtIG1lc3NhZ2UgdGV4dCB0byBhZGQgdG8gdGhlIGxvZwotCSAqIEBwYXJhbSBleGNlcHRpb24gZXhjZXB0aW9uIHRocm93bgotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgdm9pZCBfbG9nKGludCBsZXZlbCwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJaWYgKGxldmVsID09IE9LX0RFQlVHIHx8IGxldmVsID09IElORk9fREVCVUcgfHwgbGV2ZWwgPT0gV0FSTklOR19ERUJVRyB8fCBsZXZlbCA9PSBFUlJPUl9ERUJVRykgewotCQkJaWYgKCFpc0RlYnVnZ2luZygpKQotCQkJCXJldHVybjsKLQkJfQotCi0JCWludCBzZXZlcml0eSA9IElTdGF0dXMuT0s7Ci0JCXN3aXRjaCAobGV2ZWwpIHsKLQkJCWNhc2UgSU5GT19ERUJVRyA6Ci0JCQljYXNlIElORk8gOgotCQkJCXNldmVyaXR5ID0gSVN0YXR1cy5JTkZPOwotCQkJCWJyZWFrOwotCQkJY2FzZSBXQVJOSU5HX0RFQlVHIDoKLQkJCWNhc2UgV0FSTklORyA6Ci0JCQkJc2V2ZXJpdHkgPSBJU3RhdHVzLldBUk5JTkc7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEVSUk9SX0RFQlVHIDoKLQkJCWNhc2UgRVJST1IgOgotCQkJCXNldmVyaXR5ID0gSVN0YXR1cy5FUlJPUjsKLQkJfQotCQltZXNzYWdlID0gKG1lc3NhZ2UgIT0gbnVsbCkgPyBtZXNzYWdlIDogIm51bGwiOyAvLyROT04tTkxTLTEkCi0JCVN0YXR1cyBzdGF0dXNPYmogPSBuZXcgU3RhdHVzKHNldmVyaXR5LCBQTFVHSU5fSUQsIHNldmVyaXR5LCBtZXNzYWdlLCBleGNlcHRpb24pOwotCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKFBMVUdJTl9JRCk7Ci0JCWlmIChidW5kbGUgIT0gbnVsbCkgCi0JCQlQbGF0Zm9ybS5nZXRMb2coYnVuZGxlKS5sb2coc3RhdHVzT2JqKTsKLQl9Ci0KLQkvKioKLQkgKiBQcmludHMgbWVzc2FnZSB0byBsb2cgaWYgY2F0ZWdvcnkgbWF0Y2hlcyAvZGVidWcvdHJhY2VmaWx0ZXIgb3B0aW9uLgotCSAqIEBwYXJhbSBtZXNzYWdlIHRleHQgdG8gcHJpbnQKLQkgKiBAcGFyYW0gY2F0ZWdvcnkgY2F0ZWdvcnkgb2YgdGhlIG1lc3NhZ2UsIHRvIGJlIGNvbXBhcmVkIHdpdGggL2RlYnVnL3RyYWNlZmlsdGVyCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyB2b2lkIF90cmFjZShTdHJpbmcgY2F0ZWdvcnksIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCWlmIChpc1RyYWNpbmcoY2F0ZWdvcnkpKSB7Ci0JCQltZXNzYWdlID0gKG1lc3NhZ2UgIT0gbnVsbCkgPyBtZXNzYWdlIDogIm51bGwiOyAvLyROT04tTkxTLTEkCi0JCQlTdGF0dXMgc3RhdHVzT2JqID0gbmV3IFN0YXR1cyhJU3RhdHVzLk9LLCBQTFVHSU5fSUQsIElTdGF0dXMuT0ssIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKFBMVUdJTl9JRCk7Ci0JCQlpZiAoYnVuZGxlICE9IG51bGwpIAotCQkJCVBsYXRmb3JtLmdldExvZyhidW5kbGUpLmxvZyhzdGF0dXNPYmopOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQHJldHVybiB0cnVlIGlmIHRoZSBwbGF0Zm9ybSBpcyBkZWJ1Z2dpbmcKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNEZWJ1Z2dpbmcoKSB7Ci0JCXJldHVybiBQbGF0Zm9ybS5pbkRlYnVnTW9kZSgpOwotCX0KLQotCS8qKgotCSAqIERldGVybWluZXMgaWYgY3VycmVudGx5IHRyYWNpbmcgYSBjYXRlZ29yeQotCSAqIEBwYXJhbSBjYXRlZ29yeQotCSAqIEByZXR1cm4gdHJ1ZSBpZiB0cmFjaW5nIGNhdGVnb3J5LCBmYWxzZSBvdGhlcndpc2UKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNUcmFjaW5nKFN0cmluZyBjYXRlZ29yeSkgewotCQlpZiAoIWlzRGVidWdnaW5nKCkpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJU3RyaW5nIHRyYWNlRmlsdGVyID0gUGxhdGZvcm0uZ2V0RGVidWdPcHRpb24oUExVR0lOX0lEICsgVFJBQ0VGSUxURVJfTE9DQVRJT04pOwotCQlpZiAodHJhY2VGaWx0ZXIgIT0gbnVsbCkgewotCQkJU3RyaW5nVG9rZW5pemVyIHRva2VuaXplciA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodHJhY2VGaWx0ZXIsICIsIik7IC8vJE5PTi1OTFMtMSQKLQkJCXdoaWxlICh0b2tlbml6ZXIuaGFzTW9yZVRva2VucygpKSB7Ci0JCQkJU3RyaW5nIGNhdCA9IHRva2VuaXplci5uZXh0VG9rZW4oKS50cmltKCk7Ci0JCQkJaWYgKGNhdGVnb3J5LmVxdWFscyhjYXQpKSB7Ci0JCQkJCXJldHVybiB0cnVlOwotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZyhpbnQgbGV2ZWwsIFN0cmluZyBtZXNzYWdlKSB7Ci0JCV9sb2cobGV2ZWwsIG1lc3NhZ2UsIG51bGwpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2coaW50IGxldmVsLCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfbG9nKGxldmVsLCBtZXNzYWdlLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFeGNlcHRpb24oU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX2xvZyhFUlJPUiwgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nRXhjZXB0aW9uKFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX2xvZyhFUlJPUiwgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgdHJhY2VFeGNlcHRpb24oU3RyaW5nIGNhdGVnb3J5LCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfdHJhY2UoY2F0ZWdvcnksIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHRyYWNlRXhjZXB0aW9uKFN0cmluZyBjYXRlZ29yeSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfdHJhY2UoY2F0ZWdvcnksIGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCksIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHRyYWNlKFN0cmluZyBjYXRlZ29yeSwgU3RyaW5nIG1lc3NhZ2UpIHsKLQkJX3RyYWNlKGNhdGVnb3J5LCBtZXNzYWdlLCBudWxsKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL1Nob3dUcmFuc2xhdGlvbkhhbmRsZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvU2hvd1RyYW5zbGF0aW9uSGFuZGxlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNjIxMTY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvU2hvd1RyYW5zbGF0aW9uSGFuZGxlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkFic3RyYWN0SGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklNYXJrZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuam9icy5Kb2I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuSVByb2JsZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LnVpLkphdmFVSTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LlBvc2l0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuc291cmNlLkFubm90YXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5zb3VyY2UuSUFubm90YXRpb25Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuamF2YS5JSlNQUHJvYmxlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuamF2YS5JSlNQVHJhbnNsYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLmphdmEuSlNQVHJhbnNsYXRpb25BZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5qYXZhLkpTUFRyYW5zbGF0aW9uRXh0ZW5zaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVN0b3JhZ2VFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmhhbmRsZXJzLkhhbmRsZXJVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmlkZS5JREU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucHJvZ3Jlc3MuVUlKb2I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5Bbm5vdGF0aW9uVHlwZUxvb2t1cDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLklUZXh0RWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTm9kZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU5vZGU7Ci0KLQotLyoqCi0gKiBPcGVucyB0aGUgY3VycmVudCBKU1AgZWRpdG9yJ3MgY3VycmVudCB0cmFuc2xhdGVkIHNvdXJjZSBpbiBhIEphdmEgZWRpdG9yCi0gKiAKLSAqIEludm9rZSB3aXRoIE0xK00yKzkKLSAqIAotICogQGF1dGhvciBuaXRpbgotICovCi1wdWJsaWMgY2xhc3MgU2hvd1RyYW5zbGF0aW9uSGFuZGxlciBleHRlbmRzIEFic3RyYWN0SGFuZGxlciB7Ci0KLQkvKioKLQkgKiAKLQkgKi8KLQlwdWJsaWMgU2hvd1RyYW5zbGF0aW9uSGFuZGxlcigpIHsKLQl9Ci0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUKLQkgKiBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLklIYW5kbGVyI2V4ZWN1dGUob3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcwotCSAqIC5FeGVjdXRpb25FdmVudCkKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGV4ZWN1dGUoZmluYWwgRXhlY3V0aW9uRXZlbnQgZXZlbnQpIHRocm93cyBFeGVjdXRpb25FeGNlcHRpb24gewotCQkvLyBJREUub3BlbkVkaXRvcihldmVudC5nZXRBcHBsaWNhdGlvbkNvbnRleHQoKSwgY3JlYXRlRWRpdG9ySW5wdXQoKSwKLQkJLy8gSmF2YVVJLklEX0NVX0VESVRPUiwgdHJ1ZSk7Ci0JCUlTZWxlY3Rpb24gc2VsZWN0aW9uID0gSGFuZGxlclV0aWwuZ2V0Q3VycmVudFNlbGVjdGlvbihldmVudCk7Ci0JCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgewotCQkJTGlzdCBsaXN0ID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbikgc2VsZWN0aW9uKS50b0xpc3QoKTsKLQkJCWlmICghbGlzdC5pc0VtcHR5KCkpIHsKLQkJCQlpZiAobGlzdC5nZXQoMCkgaW5zdGFuY2VvZiBJRE9NTm9kZSkgewotCQkJCQlmaW5hbCBJRE9NTW9kZWwgbW9kZWwgPSAoKElET01Ob2RlKSBsaXN0LmdldCgwKSkuZ2V0TW9kZWwoKTsKLQkJCQkJSU5vZGVBZGFwdGVyIGFkYXB0ZXIgPSBtb2RlbC5nZXREb2N1bWVudCgpLmdldEFkYXB0ZXJGb3IoSUpTUFRyYW5zbGF0aW9uLmNsYXNzKTsKLQkJCQkJaWYgKGFkYXB0ZXIgIT0gbnVsbCkgewotCQkJCQkJSm9iIG9wZW5lciA9IG5ldyBVSUpvYigiT3BlbmluZyBKU1AgSmF2YSBUcmFuc2xhdGlvbiIpIHsKLQkJCQkJCQlwdWJsaWMgSVN0YXR1cyBydW5JblVJVGhyZWFkKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgewotCQkJCQkJCQlKU1BUcmFuc2xhdGlvbkFkYXB0ZXIgdHJhbnNsYXRpb25BZGFwdGVyID0gKEpTUFRyYW5zbGF0aW9uQWRhcHRlcikgbW9kZWwuZ2V0RG9jdW1lbnQoKS5nZXRBZGFwdGVyRm9yKElKU1BUcmFuc2xhdGlvbi5jbGFzcyk7Ci0JCQkJCQkJCWZpbmFsIEpTUFRyYW5zbGF0aW9uRXh0ZW5zaW9uIHRyYW5zbGF0aW9uID0gdHJhbnNsYXRpb25BZGFwdGVyLmdldEpTUFRyYW5zbGF0aW9uKCk7Ci0KLQkJCQkJCQkJLy8gY3JlYXRlIGFuIElFZGl0b3JJbnB1dCBmb3IgdGhlIEphdmEgZWRpdG9yCi0JCQkJCQkJCWZpbmFsIElTdG9yYWdlRWRpdG9ySW5wdXQgaW5wdXQgPSBuZXcgSlNQVHJhbnNsYXRpb25FZGl0b3JJbnB1dChtb2RlbCk7Ci0JCQkJCQkJCXRyeSB7Ci0JCQkJCQkJCQlJRWRpdG9yUGFydCBlZGl0b3IgPSBJREUub3BlbkVkaXRvcihQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKSwgaW5wdXQsIEphdmFVSS5JRF9DVV9FRElUT1IsIHRydWUpOwotCQkJCQkJCQkJLy8gTm93IGFkZCB0aGUgcHJvYmxlbXMgd2UgZm91bmQKLQkJCQkJCQkJCWlmIChlZGl0b3IgaW5zdGFuY2VvZiBJVGV4dEVkaXRvcikgewotCQkJCQkJCQkJCUlBbm5vdGF0aW9uTW9kZWwgYW5ub3RhdGlvbk1vZGVsID0gKChJVGV4dEVkaXRvcikgZWRpdG9yKS5nZXREb2N1bWVudFByb3ZpZGVyKCkuZ2V0QW5ub3RhdGlvbk1vZGVsKGlucHV0KTsKLQkJCQkJCQkJCQl0cmFuc2xhdGlvbi5yZWNvbmNpbGVDb21waWxhdGlvblVuaXQoKTsKLQkJCQkJCQkJCQlMaXN0IHByb2JsZW1zTGlzdCA9IHRyYW5zbGF0aW9uLmdldFByb2JsZW1zKCk7Ci0JCQkJCQkJCQkJSVByb2JsZW1bXSBwcm9ibGVtcyA9IChJUHJvYmxlbVtdKSBwcm9ibGVtc0xpc3QudG9BcnJheShuZXcgSVByb2JsZW1bcHJvYmxlbXNMaXN0LnNpemUoKV0pOwotCQkJCQkJCQkJCUFubm90YXRpb25UeXBlTG9va3VwIGxvb2t1cCA9IG5ldyBBbm5vdGF0aW9uVHlwZUxvb2t1cCgpOwotCQkJCQkJCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgcHJvYmxlbXMubGVuZ3RoOyBpKyspIHsKLQkJCQkJCQkJCQkJaWYgKHByb2JsZW1zW2ldIGluc3RhbmNlb2YgSUpTUFByb2JsZW0pCi0JCQkJCQkJCQkJCQljb250aW51ZTsKLQkJCQkJCQkJCQkJaW50IGxlbmd0aCA9IHByb2JsZW1zW2ldLmdldFNvdXJjZUVuZCgpIC0gcHJvYmxlbXNbaV0uZ2V0U291cmNlU3RhcnQoKSArIDE7Ci0JCQkJCQkJCQkJCVBvc2l0aW9uIHBvc2l0aW9uID0gbmV3IFBvc2l0aW9uKHByb2JsZW1zW2ldLmdldFNvdXJjZVN0YXJ0KCksIGxlbmd0aCk7Ci0JCQkJCQkJCQkJCUFubm90YXRpb24gYW5ub3RhdGlvbiA9IG51bGw7Ci0JCQkJCQkJCQkJCVN0cmluZyB0eXBlID0gbG9va3VwLmdldEFubm90YXRpb25UeXBlKElNYXJrZXIuUFJPQkxFTSwgSU1hcmtlci5TRVZFUklUWV9JTkZPKTsKLQkJCQkJCQkJCQkJaWYgKHByb2JsZW1zW2ldLmlzRXJyb3IoKSkgewotCQkJCQkJCQkJCQkJdHlwZSA9IGxvb2t1cC5nZXRBbm5vdGF0aW9uVHlwZShJTWFya2VyLlBST0JMRU0sIElNYXJrZXIuU0VWRVJJVFlfRVJST1IpOwotCQkJCQkJCQkJCQl9Ci0JCQkJCQkJCQkJCWVsc2UgaWYgKHByb2JsZW1zW2ldLmlzV2FybmluZygpKSB7Ci0JCQkJCQkJCQkJCQl0eXBlID0gbG9va3VwLmdldEFubm90YXRpb25UeXBlKElNYXJrZXIuUFJPQkxFTSwgSU1hcmtlci5TRVZFUklUWV9XQVJOSU5HKTsKLQkJCQkJCQkJCQkJfQotCQkJCQkJCQkJCQlhbm5vdGF0aW9uID0gbmV3IEFubm90YXRpb24odHlwZSwgZmFsc2UsIHByb2JsZW1zW2ldLmdldE1lc3NhZ2UoKSk7Ci0JCQkJCQkJCQkJCWlmIChhbm5vdGF0aW9uICE9IG51bGwpIHsKLQkJCQkJCQkJCQkJCWFubm90YXRpb25Nb2RlbC5hZGRBbm5vdGF0aW9uKGFubm90YXRpb24sIHBvc2l0aW9uKTsKLQkJCQkJCQkJCQkJfQotCQkJCQkJCQkJCX0KLQkJCQkJCQkJCX0KLQkJCQkJCQkJfQotCQkJCQkJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZSkgewotCQkJCQkJCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCQkJCQkJCURpc3BsYXkuZ2V0Q3VycmVudCgpLmJlZXAoKTsKLQkJCQkJCQkJfQotCQkJCQkJCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQkJCQkJCQl9Ci0JCQkJCQl9OwotCQkJCQkJb3BlbmVyLnNldFN5c3RlbShmYWxzZSk7Ci0JCQkJCQlvcGVuZXIuc2V0VXNlcih0cnVlKTsKLQkJCQkJCW9wZW5lci5zY2hlZHVsZSgpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvVGFnbGliSW5kZXhEZWx0YVRyYWNlVmlldy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9UYWdsaWJJbmRleERlbHRhVHJhY2VWaWV3LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2ZWEwNmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9UYWdsaWJJbmRleERlbHRhVHJhY2VWaWV3LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVRvb2xCYXJNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkFycmF5Q29udGVudFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuQ2VsbEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkNvbHVtbldlaWdodERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5Eb3VibGVDbGlja0V2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSURvdWJsZUNsaWNrTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlckxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVRhYmxlTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklUcmVlQ29udGVudFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UYWJsZUxheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRhYmxlVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVHJlZVZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGFnbGliLklUYWdsaWJJbmRleERlbHRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50YWdsaWIuSVRhZ2xpYkluZGV4TGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRhZ2xpYi5UYWdsaWJJbmRleDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGFnbGliLlRhZ2xpYkluZGV4RGVsdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5Gb3JtQXR0YWNobWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkZvcm1EYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuRm9ybUxheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTWVudTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TYXNoOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRhYmxlQ29sdW1uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSU1lbWVudG87Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVZpZXdTaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuVmlld1BhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnV0aWxzLlN0cmluZ1V0aWxzOwotCi1wdWJsaWMgY2xhc3MgVGFnbGliSW5kZXhEZWx0YVRyYWNlVmlldyBleHRlbmRzIFZpZXdQYXJ0IHsKLQotCXN0YXRpYyBmaW5hbCBTdHJpbmcgTUVNX0xJU1RFTklORyA9ICJJU19MSVNURU5JTkciOwotCWJvb2xlYW4gaXNMaXN0ZW5pbmcgPSBmYWxzZTsKLQotCS8qKgotCSAqIFJlc3VtZXMgbGlzdGVuaW5nIHRvIFRhZ2xpYkluZGV4RGVsdGFzCi0JICovCi0JcHJpdmF0ZSBjbGFzcyBSZXN1bWVBY3Rpb24gZXh0ZW5kcyBBY3Rpb24gewotCQlwdWJsaWMgUmVzdW1lQWN0aW9uKCkgewotCQkJc3VwZXIoKTsKLQkJCXNldFRleHQoIlJlc3VtZSIpOwotCQkJc2V0SW1hZ2VEZXNjcmlwdG9yKEpTUFVJVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEltYWdlUmVnaXN0cnkoKS5nZXREZXNjcmlwdG9yKEpTUFVJVGVzdEltYWdlcy5JTUdfRUxDTF9SRVNVTUUpKTsKLQkJCXNldERpc2FibGVkSW1hZ2VEZXNjcmlwdG9yKEpTUFVJVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEltYWdlUmVnaXN0cnkoKS5nZXREZXNjcmlwdG9yKEpTUFVJVGVzdEltYWdlcy5JTUdfRExDTF9SRVNVTUUpKTsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCXN1cGVyLnJ1bigpOwotCQkJVGFnbGliSW5kZXguYWRkVGFnbGliSW5kZXhMaXN0ZW5lcihmSW50ZXJuYWxMaXN0ZW5lcik7Ci0JCQlpc0xpc3RlbmluZyA9IHRydWU7Ci0JCQlmU3VzcGVuZEFjdGlvbi5zZXRFbmFibGVkKHRydWUpOwotCQkJc2V0RW5hYmxlZChmYWxzZSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBTdG9wcyBsaXN0ZW5pbmcgdG8gVGFnbGliSW5kZXhEZWx0YXMKLQkgKi8KLQlwcml2YXRlIGNsYXNzIFN1c3BlbmRBY3Rpb24gZXh0ZW5kcyBBY3Rpb24gewotCQlwdWJsaWMgU3VzcGVuZEFjdGlvbigpIHsKLQkJCXNldFRleHQoIlN1c3BlbmQiKTsKLQkJCXNldEltYWdlRGVzY3JpcHRvcihKU1BVSVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRJbWFnZVJlZ2lzdHJ5KCkuZ2V0RGVzY3JpcHRvcihKU1BVSVRlc3RJbWFnZXMuSU1HX0VMQ0xfU1VTUEVORCkpOwotCQkJc2V0RGlzYWJsZWRJbWFnZURlc2NyaXB0b3IoSlNQVUlUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0SW1hZ2VSZWdpc3RyeSgpLmdldERlc2NyaXB0b3IoSlNQVUlUZXN0SW1hZ2VzLklNR19ETENMX1NVU1BFTkQpKTsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCXN1cGVyLnJ1bigpOwotCQkJVGFnbGliSW5kZXgucmVtb3ZlVGFnbGliSW5kZXhMaXN0ZW5lcihmSW50ZXJuYWxMaXN0ZW5lcik7Ci0JCQlpc0xpc3RlbmluZyA9IGZhbHNlOwotCQkJc2V0RW5hYmxlZChmYWxzZSk7Ci0JCQlmUmVzdW1lQWN0aW9uLnNldEVuYWJsZWQodHJ1ZSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBFbXB0aWVzIGRlbHRhcyBmcm9tIHZpZXdlcgotCSAqLwotCXByaXZhdGUgY2xhc3MgQ2xlYXJBY3Rpb24gZXh0ZW5kcyBBY3Rpb24gewotCQlwdWJsaWMgQ2xlYXJBY3Rpb24oKSB7Ci0JCQlzZXRUZXh0KCJDbGVhciIpOwotCQkJc2V0SW1hZ2VEZXNjcmlwdG9yKEpTUFVJVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEltYWdlUmVnaXN0cnkoKS5nZXREZXNjcmlwdG9yKEpTUFVJVGVzdEltYWdlcy5JTUdfRUxDTF9SRU1PVkVfQUxMKSk7Ci0JCQlzZXREaXNhYmxlZEltYWdlRGVzY3JpcHRvcihKU1BVSVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRJbWFnZVJlZ2lzdHJ5KCkuZ2V0RGVzY3JpcHRvcihKU1BVSVRlc3RJbWFnZXMuSU1HX0RMQ0xfUkVNT1ZFX0FMTCkpOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJc3VwZXIucnVuKCk7Ci0JCQlmSW5wdXQuY2xlYXIoKTsKLQkJCWZWaWV3ZXIucmVmcmVzaCgpOwotCQkJc2V0RW5hYmxlZChmYWxzZSk7Ci0JCX0KLQl9Ci0KLQljbGFzcyBUYWdsaWJJbmRleExpc3RlbmVyIGltcGxlbWVudHMgSVRhZ2xpYkluZGV4TGlzdGVuZXIgewotCQlwdWJsaWMgdm9pZCBpbmRleENoYW5nZWQoZmluYWwgSVRhZ2xpYkluZGV4RGVsdGEgZGVsdGEpIHsKLQkJCWdldENvbnRyb2woKS5nZXREaXNwbGF5KCkuc3luY0V4ZWMobmV3IFJ1bm5hYmxlKCkgewotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJZklucHV0LmFkZChkZWx0YSk7Ci0JCQkJCWZWaWV3ZXIucmVmcmVzaCgpOwotCQkJCQlmVmlld2VyLnNldFNlbGVjdGlvbihuZXcgU3RydWN0dXJlZFNlbGVjdGlvbihkZWx0YSkpOwotCQkJCQlmQ2xlYXJBY3Rpb24uc2V0RW5hYmxlZCh0cnVlKTsKLQkJCQl9Ci0JCQl9KTsKLQkJfQotCX0KLQotCUlUYWdsaWJJbmRleExpc3RlbmVyIGZJbnRlcm5hbExpc3RlbmVyID0gbnVsbDsKLQotCUxpc3QgZklucHV0ID0gbmV3IEFycmF5TGlzdCgpOwotCVRhYmxlVmlld2VyIGZWaWV3ZXIgPSBudWxsOwotCVJlc3VtZUFjdGlvbiBmUmVzdW1lQWN0aW9uOwotCVN1c3BlbmRBY3Rpb24gZlN1c3BlbmRBY3Rpb247Ci0JSUFjdGlvbiBmQ2xlYXJBY3Rpb247Ci0KLQlwdWJsaWMgVGFnbGliSW5kZXhEZWx0YVRyYWNlVmlldygpIHsKLQkJc3VwZXIoKTsKLQkJZkludGVybmFsTGlzdGVuZXIgPSBuZXcgVGFnbGliSW5kZXhMaXN0ZW5lcigpOwotCX0KLQotCXZvaWQgc2hvd1NlbGVjdGlvbkRldGFpbChmaW5hbCBDb21wb3NpdGUgY29tcG9zaXRlKSB7Ci0JCUlTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbiA9IChJU3RydWN0dXJlZFNlbGVjdGlvbikgZlZpZXdlci5nZXRTZWxlY3Rpb24oKTsKLQkJaWYgKCFzZWxlY3Rpb24uaXNFbXB0eSgpKSB7Ci0JCQlmaW5hbCBUYWdsaWJJbmRleERlbHRhIHNlbGVjdGVkRGVsdGEgPSAoVGFnbGliSW5kZXhEZWx0YSkgc2VsZWN0aW9uLmdldEZpcnN0RWxlbWVudCgpOwotCQkJZmluYWwgSVRhYmxlTGFiZWxQcm92aWRlciB0YWJsZUxhYmVsUHJvdmlkZXIgPSAoKElUYWJsZUxhYmVsUHJvdmlkZXIpIGZWaWV3ZXIuZ2V0TGFiZWxQcm92aWRlcigpKTsKLQkJCVN0cmluZyBjb2x1bW5UZXh0ID0gdGFibGVMYWJlbFByb3ZpZGVyLmdldENvbHVtblRleHQoc2VsZWN0ZWREZWx0YSwgMSk7Ci0JCQljb2x1bW5UZXh0ID0gY29sdW1uVGV4dCArICI6IiArIHRhYmxlTGFiZWxQcm92aWRlci5nZXRDb2x1bW5UZXh0KHNlbGVjdGVkRGVsdGEsIDIpOwotCQkJbmV3IERpYWxvZyhjb21wb3NpdGUuZ2V0U2hlbGwoKSkgewotCQkJCXB1YmxpYyB2b2lkIGNyZWF0ZSgpIHsKLQkJCQkJc2V0U2hlbGxTdHlsZShnZXRTaGVsbFN0eWxlKCkgfCBTV1QuUkVTSVpFKTsKLQkJCQkJc3VwZXIuY3JlYXRlKCk7Ci0JCQkJfQotCi0JCQkJcHJvdGVjdGVkIENvbnRyb2wgY3JlYXRlRGlhbG9nQXJlYShmaW5hbCBDb21wb3NpdGUgcGFyZW50KSB7Ci0JCQkJCWZpbmFsIENvbXBvc2l0ZSBpbm5lciA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7Ci0JCQkJCWlubmVyLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKFNXVC5GSUxMLCBTV1QuRklMTCwgdHJ1ZSwgdHJ1ZSkpOwotCQkJCQlmaW5hbCBTYXNoIHNhc2ggPSBuZXcgU2FzaChpbm5lciwgU1dULkhPUklaT05UQUwpOwotCi0JCQkJCWZpbmFsIFRyZWVWaWV3ZXIgdHJlZVZpZXdlciA9IG5ldyBUcmVlVmlld2VyKGlubmVyKTsKLQkJCQkJdHJlZVZpZXdlci5zZXRDb250ZW50UHJvdmlkZXIobmV3IElUcmVlQ29udGVudFByb3ZpZGVyKCkgewotCQkJCQkJcHVibGljIHZvaWQgaW5wdXRDaGFuZ2VkKFZpZXdlciB2aWV3ZXIsIE9iamVjdCBvbGRJbnB1dCwgT2JqZWN0IG5ld0lucHV0KSB7Ci0JCQkJCQl9Ci0KLQkJCQkJCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7Ci0JCQkJCQl9Ci0KLQkJCQkJCXB1YmxpYyBPYmplY3RbXSBnZXRFbGVtZW50cyhPYmplY3QgaW5wdXRFbGVtZW50KSB7Ci0JCQkJCQkJcmV0dXJuIGdldENoaWxkcmVuKGlucHV0RWxlbWVudCk7Ci0JCQkJCQl9Ci0KLQkJCQkJCXB1YmxpYyBib29sZWFuIGhhc0NoaWxkcmVuKE9iamVjdCBlbGVtZW50KSB7Ci0JCQkJCQkJcmV0dXJuIGdldENoaWxkcmVuKGVsZW1lbnQpLmxlbmd0aCA+IDA7Ci0JCQkJCQl9Ci0KLQkJCQkJCXB1YmxpYyBPYmplY3QgZ2V0UGFyZW50KE9iamVjdCBlbGVtZW50KSB7Ci0JCQkJCQkJcmV0dXJuIHNlbGVjdGVkRGVsdGE7Ci0JCQkJCQl9Ci0KLQkJCQkJCXB1YmxpYyBPYmplY3RbXSBnZXRDaGlsZHJlbihPYmplY3QgcGFyZW50RWxlbWVudCkgewotCQkJCQkJCWlmIChwYXJlbnRFbGVtZW50IGluc3RhbmNlb2YgVGFnbGliSW5kZXhEZWx0YSkgewotCQkJCQkJCQlUYWdsaWJJbmRleERlbHRhIHRhZ2xpYkluZGV4RGVsdGEgPSAoKFRhZ2xpYkluZGV4RGVsdGEpIHBhcmVudEVsZW1lbnQpOwotCQkJCQkJCQlpZiAodGFnbGliSW5kZXhEZWx0YS5nZXRUcmlnZ2VyKCkgIT0gbnVsbCkgewotCQkJCQkJCQkJTGlzdCBjb21iaW5lZCA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCQkJCQkJCWNvbWJpbmVkLmFkZCh0YWdsaWJJbmRleERlbHRhLmdldFRyaWdnZXIoKSk7Ci0JCQkJCQkJCQljb21iaW5lZC5hZGRBbGwoQXJyYXlzLmFzTGlzdCh0YWdsaWJJbmRleERlbHRhLmdldEFmZmVjdGVkQ2hpbGRyZW4oKSkpOwotCQkJCQkJCQkJcmV0dXJuIGNvbWJpbmVkLnRvQXJyYXkoKTsKLQkJCQkJCQkJfQotCQkJCQkJCQlyZXR1cm4gdGFnbGliSW5kZXhEZWx0YS5nZXRBZmZlY3RlZENoaWxkcmVuKCk7Ci0JCQkJCQkJfQotCQkJCQkJCXJldHVybiBuZXcgT2JqZWN0WzBdOwotCQkJCQkJfQotCQkJCQl9KTsKLQkJCQkJdHJlZVZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBMYWJlbFByb3ZpZGVyKCkgewotCQkJCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KE9iamVjdCBlbGVtZW50KSB7Ci0JCQkJCQkJaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBJVGFnbGliSW5kZXhEZWx0YSkgewotCQkJCQkJCQlJVGFnbGliSW5kZXhEZWx0YSB0YWdsaWJJbmRleERlbHRhID0gKChJVGFnbGliSW5kZXhEZWx0YSkgZWxlbWVudCk7Ci0JCQkJCQkJCWlmICh0YWdsaWJJbmRleERlbHRhLmdldFRhZ2xpYlJlY29yZCgpICE9IG51bGwpCi0JCQkJCQkJCQlyZXR1cm4gdGFnbGliSW5kZXhEZWx0YS50b1N0cmluZygpOwotCQkJCQkJCQlTdHJpbmcgdGV4dCA9IHRhYmxlTGFiZWxQcm92aWRlci5nZXRDb2x1bW5UZXh0KHNlbGVjdGVkRGVsdGEsIDEpOwotCQkJCQkJCQl0ZXh0ID0gdGV4dCArICI6IiArIHRhYmxlTGFiZWxQcm92aWRlci5nZXRDb2x1bW5UZXh0KHNlbGVjdGVkRGVsdGEsIDIpOwotCQkJCQkJCQlyZXR1cm4gdGV4dDsKLQkJCQkJCQl9Ci0JCQkJCQkJcmV0dXJuIFN0cmluZ1V0aWxzLmZpcnN0TGluZU9mKHN1cGVyLmdldFRleHQoZWxlbWVudCkpOwotCQkJCQkJfQotCQkJCQl9KTsKLQkJCQkJdHJlZVZpZXdlci5zZXRJbnB1dChzZWxlY3RlZERlbHRhKTsKLQotCQkJCQlmaW5hbCBUZXh0IHRleHQgPSBuZXcgVGV4dChpbm5lciwgU1dULk1VTFRJKTsKLQotCQkJCQl0cmVlVmlld2VyLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihuZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpIHsKLQkJCQkJCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7Ci0JCQkJCQkJSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uMiA9IChJU3RydWN0dXJlZFNlbGVjdGlvbikgdHJlZVZpZXdlci5nZXRTZWxlY3Rpb24oKTsKLQkJCQkJCQlpZiAoIXNlbGVjdGlvbjIuaXNFbXB0eSgpKQotCQkJCQkJCQl0ZXh0LnNldFRleHQoIiIgKyAoc2VsZWN0aW9uMikuZ2V0Rmlyc3RFbGVtZW50KCkpOwotCQkJCQkJCWVsc2UKLQkJCQkJCQkJdGV4dC5zZXRUZXh0KCIiKTsKLQkJCQkJCX0KLQkJCQkJfSk7Ci0KLQkJCQkJZmluYWwgRm9ybUxheW91dCBmb3JtID0gbmV3IEZvcm1MYXlvdXQoKTsKLQkJCQkJaW5uZXIuc2V0TGF5b3V0KGZvcm0pOwotCi0JCQkJCUZvcm1EYXRhIGZpcnN0RGF0YSA9IG5ldyBGb3JtRGF0YSgpOwotCQkJCQlmaXJzdERhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KDAsIDApOwotCQkJCQlmaXJzdERhdGEuYm90dG9tID0gbmV3IEZvcm1BdHRhY2htZW50KHNhc2gsIDIpOwotCQkJCQlmaXJzdERhdGEubGVmdCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCAwKTsKLQkJCQkJZmlyc3REYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7Ci0JCQkJCXRyZWVWaWV3ZXIuZ2V0Q29udHJvbCgpLnNldExheW91dERhdGEoZmlyc3REYXRhKTsKLQotCQkJCQlGb3JtRGF0YSBzZWNvbmREYXRhID0gbmV3IEZvcm1EYXRhKCk7Ci0JCQkJCXNlY29uZERhdGEudG9wID0gbmV3IEZvcm1BdHRhY2htZW50KHNhc2gsIDIpOwotCQkJCQlzZWNvbmREYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7Ci0JCQkJCXNlY29uZERhdGEucmlnaHQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKLQkJCQkJc2Vjb25kRGF0YS5ib3R0b20gPSBuZXcgRm9ybUF0dGFjaG1lbnQoMTAwLCAwKTsKLQkJCQkJdGV4dC5zZXRMYXlvdXREYXRhKHNlY29uZERhdGEpOwotCi0JCQkJCWZpbmFsIEZvcm1EYXRhIHNhc2hEYXRhID0gbmV3IEZvcm1EYXRhKCk7Ci0JCQkJCXNhc2hEYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCg2MCwgMCk7Ci0JCQkJCXNhc2hEYXRhLmxlZnQgPSBuZXcgRm9ybUF0dGFjaG1lbnQoMCwgMCk7Ci0JCQkJCXNhc2hEYXRhLnJpZ2h0ID0gbmV3IEZvcm1BdHRhY2htZW50KDEwMCwgMCk7Ci0JCQkJCXNhc2guc2V0TGF5b3V0RGF0YShzYXNoRGF0YSk7Ci0JCQkJCXNhc2guYWRkTGlzdGVuZXIoU1dULlNlbGVjdGlvbiwgbmV3IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxpc3RlbmVyKCkgewotCQkJCQkJcHVibGljIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQgZSkgewotCQkJCQkJCXNhc2hEYXRhLnRvcCA9IG5ldyBGb3JtQXR0YWNobWVudCgwLCBlLnkpOwotCQkJCQkJCWlubmVyLmxheW91dCgpOwotCQkJCQkJfQotCQkJCQl9KTsKLQkJCQkJcmV0dXJuIHNhc2g7Ci0JCQkJfQotCQkJfS5vcGVuKCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCBjcmVhdGVQYXJ0Q29udHJvbChmaW5hbCBDb21wb3NpdGUgcGFyZW50KSB7Ci0JCWZWaWV3ZXIgPSBuZXcgVGFibGVWaWV3ZXIocGFyZW50LCBTV1QuU0lOR0xFIHwgU1dULkZVTExfU0VMRUNUSU9OKTsKLQkJZlZpZXdlci5hZGREb3VibGVDbGlja0xpc3RlbmVyKG5ldyBJRG91YmxlQ2xpY2tMaXN0ZW5lcigpIHsKLQkJCXB1YmxpYyB2b2lkIGRvdWJsZUNsaWNrKERvdWJsZUNsaWNrRXZlbnQgZXZlbnQpIHsKLQkJCQlzaG93U2VsZWN0aW9uRGV0YWlsKHBhcmVudCk7Ci0JCQl9Ci0KLQkJfSk7Ci0JCWZWaWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBBcnJheUNvbnRlbnRQcm92aWRlcigpKTsKLQkJZlZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBJVGFibGVMYWJlbFByb3ZpZGVyKCkgewotCQkJcHVibGljIHZvaWQgcmVtb3ZlTGlzdGVuZXIoSUxhYmVsUHJvdmlkZXJMaXN0ZW5lciBsaXN0ZW5lcikgewotCQkJfQotCi0JCQlwdWJsaWMgYm9vbGVhbiBpc0xhYmVsUHJvcGVydHkoT2JqZWN0IGVsZW1lbnQsIFN0cmluZyBwcm9wZXJ0eSkgewotCQkJCXJldHVybiBmYWxzZTsKLQkJCX0KLQotCQkJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLQkJCX0KLQotCQkJcHVibGljIHZvaWQgYWRkTGlzdGVuZXIoSUxhYmVsUHJvdmlkZXJMaXN0ZW5lciBsaXN0ZW5lcikgewotCQkJfQotCi0JCQlwdWJsaWMgU3RyaW5nIGdldENvbHVtblRleHQoT2JqZWN0IGVsZW1lbnQsIGludCBjb2x1bW5JbmRleCkgewotCQkJCXN3aXRjaCAoY29sdW1uSW5kZXgpIHsKLQkJCQkJY2FzZSAwIDogewotCQkJCQkJcmV0dXJuIExvbmcudG9TdHJpbmcoKChUYWdsaWJJbmRleERlbHRhKSBlbGVtZW50KS5nZXRUaW1lKCkpOwotCQkJCQl9Ci0JCQkJCWNhc2UgMSA6IHsKLQkJCQkJCVN0cmluZyBraW5kID0gbnVsbDsKLQkJCQkJCXN3aXRjaCAoKChJVGFnbGliSW5kZXhEZWx0YSkgZWxlbWVudCkuZ2V0S2luZCgpKSB7Ci0JCQkJCQkJY2FzZSBJVGFnbGliSW5kZXhEZWx0YS5BRERFRCA6Ci0JCQkJCQkJCWtpbmQgPSAiYWRkZWQiOwotCQkJCQkJCQlicmVhazsKLQkJCQkJCQljYXNlIElUYWdsaWJJbmRleERlbHRhLlJFTU9WRUQgOgotCQkJCQkJCQlraW5kID0gInJlbW92ZWQiOwotCQkJCQkJCQlicmVhazsKLQkJCQkJCQljYXNlIElUYWdsaWJJbmRleERlbHRhLkNIQU5HRUQgOgotCQkJCQkJCQlraW5kID0gImNoYW5nZWQiOwotCQkJCQkJCQlicmVhazsKLQkJCQkJCX0KLQkJCQkJCXJldHVybiBraW5kOwotCQkJCQl9Ci0JCQkJCWNhc2UgMiA6Ci0JCQkJCQlyZXR1cm4gKChJVGFnbGliSW5kZXhEZWx0YSkgZWxlbWVudCkuZ2V0UHJvamVjdCgpLmdldE5hbWUoKTsKLQkJCQkJY2FzZSAzIDoKLQkJCQkJCXJldHVybiAoKFRhZ2xpYkluZGV4RGVsdGEpIGVsZW1lbnQpLmdldFRyaWdnZXIoKS50b1N0cmluZygpOwotCQkJCX0KLQkJCQlyZXR1cm4gIiI7Ci0JCQl9Ci0KLQkJCXB1YmxpYyBJbWFnZSBnZXRDb2x1bW5JbWFnZShPYmplY3QgZWxlbWVudCwgaW50IGNvbHVtbkluZGV4KSB7Ci0JCQkJcmV0dXJuIG51bGw7Ci0JCQl9Ci0KLQkJfSk7Ci0KLQkJU3RyaW5nW10gY29sdW1uUHJvcGVydGllcyA9IG5ldyBTdHJpbmdbXXsidGltZSIsICJLaW5kIiwgIlByb2plY3QiLCAiVHJpZ2dlciJ9OwotCQlUYWJsZUxheW91dCB0bGF5b3V0ID0gbmV3IFRhYmxlTGF5b3V0KCk7Ci0JCUNlbGxFZGl0b3JbXSBjZWxsRWRpdG9ycyA9IG5ldyBDZWxsRWRpdG9yW2NvbHVtblByb3BlcnRpZXMubGVuZ3RoXTsKLQkJaW50IGNvbHVtbldpZHRoc1tdID0gbmV3IGludFtde0Rpc3BsYXkuZ2V0Q3VycmVudCgpLmdldEJvdW5kcygpLndpZHRoIC8gMTQsIERpc3BsYXkuZ2V0Q3VycmVudCgpLmdldEJvdW5kcygpLndpZHRoIC8gNywgRGlzcGxheS5nZXRDdXJyZW50KCkuZ2V0Qm91bmRzKCkud2lkdGggLyA3LCBEaXNwbGF5LmdldEN1cnJlbnQoKS5nZXRCb3VuZHMoKS53aWR0aCAvIDE0LCBEaXNwbGF5LmdldEN1cnJlbnQoKS5nZXRCb3VuZHMoKS53aWR0aCAvIDd9OwotCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbHVtblByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHsKLQkJCXRsYXlvdXQuYWRkQ29sdW1uRGF0YShuZXcgQ29sdW1uV2VpZ2h0RGF0YSgxKSk7Ci0JCQlUYWJsZUNvbHVtbiB0YyA9IG5ldyBUYWJsZUNvbHVtbihmVmlld2VyLmdldFRhYmxlKCksIFNXVC5OT05FKTsKLQkJCXRjLnNldFRleHQoY29sdW1uUHJvcGVydGllc1tpXSk7Ci0JCQl0Yy5zZXRSZXNpemFibGUodHJ1ZSk7Ci0JCQl0Yy5zZXRXaWR0aChjb2x1bW5XaWR0aHNbaV0pOwotCQl9Ci0JCWZWaWV3ZXIuc2V0Q2VsbEVkaXRvcnMoY2VsbEVkaXRvcnMpOwotCQlmVmlld2VyLnNldENvbHVtblByb3BlcnRpZXMoY29sdW1uUHJvcGVydGllcyk7Ci0KLQkJZlZpZXdlci5nZXRUYWJsZSgpLnNldEhlYWRlclZpc2libGUodHJ1ZSk7Ci0JCWZWaWV3ZXIuZ2V0VGFibGUoKS5zZXRMaW5lc1Zpc2libGUodHJ1ZSk7Ci0JCWZWaWV3ZXIuc2V0Q29sdW1uUHJvcGVydGllcyhjb2x1bW5Qcm9wZXJ0aWVzKTsKLQotCQlNZW51TWFuYWdlciBjb250ZXh0TWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoKTsKLQkJY29udGV4dE1lbnVNYW5hZ2VyLnNldFJlbW92ZUFsbFdoZW5TaG93bihmYWxzZSk7Ci0JCWNvbnRleHRNZW51TWFuYWdlci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQlzdXBlci5ydW4oKTsKLQkJCQlzaG93U2VsZWN0aW9uRGV0YWlsKHBhcmVudCk7Ci0JCQl9Ci0KLQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQlyZXR1cm4gIkRldGFpbHMuLi4iOwotCQkJfQotCi0JCQlwdWJsaWMgYm9vbGVhbiBpc0VuYWJsZWQoKSB7Ci0JCQkJcmV0dXJuICFmVmlld2VyLmdldFNlbGVjdGlvbigpLmlzRW1wdHkoKTsKLQkJCX0KLQkJfSk7Ci0KLQkJTWVudSBjb250ZXh0TWVudSA9IGNvbnRleHRNZW51TWFuYWdlci5jcmVhdGVDb250ZXh0TWVudShmVmlld2VyLmdldENvbnRyb2woKSk7Ci0JCWdldENvbnRyb2woKS5zZXRNZW51KGNvbnRleHRNZW51KTsKLQotCQlmVmlld2VyLnNldElucHV0KGZJbnB1dCk7Ci0JfQotCi0JcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLQkJc3VwZXIuZGlzcG9zZSgpOwotCQlUYWdsaWJJbmRleC5yZW1vdmVUYWdsaWJJbmRleExpc3RlbmVyKGZJbnRlcm5hbExpc3RlbmVyKTsKLQl9Ci0KLQlDb250cm9sIGdldENvbnRyb2woKSB7Ci0JCXJldHVybiBmVmlld2VyLmdldENvbnRyb2woKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBpbml0KElWaWV3U2l0ZSBzaXRlLCBJTWVtZW50byBtZW1lbnRvKSB0aHJvd3MgUGFydEluaXRFeGNlcHRpb24gewotCQlzdXBlci5pbml0KHNpdGUsIG1lbWVudG8pOwotCi0JCWJvb2xlYW4gc2hvdWxkTGlzdGVuID0gbWVtZW50byAhPSBudWxsICYmIEJvb2xlYW4udmFsdWVPZihtZW1lbnRvLmdldFN0cmluZyhNRU1fTElTVEVOSU5HKSkuYm9vbGVhblZhbHVlKCk7Ci0JCWlmIChzaG91bGRMaXN0ZW4pIHsKLQkJCVRhZ2xpYkluZGV4LmFkZFRhZ2xpYkluZGV4TGlzdGVuZXIoZkludGVybmFsTGlzdGVuZXIpOwotCQkJaXNMaXN0ZW5pbmcgPSB0cnVlOwotCQl9Ci0JCWZSZXN1bWVBY3Rpb24gPSBuZXcgUmVzdW1lQWN0aW9uKCk7Ci0JCWZTdXNwZW5kQWN0aW9uID0gbmV3IFN1c3BlbmRBY3Rpb24oKTsKLQkJZkNsZWFyQWN0aW9uID0gbmV3IENsZWFyQWN0aW9uKCk7Ci0JCWZTdXNwZW5kQWN0aW9uLnNldEVuYWJsZWQoaXNMaXN0ZW5pbmcpOwotCQlmUmVzdW1lQWN0aW9uLnNldEVuYWJsZWQoIWlzTGlzdGVuaW5nKTsKLQotCQlJVG9vbEJhck1hbmFnZXIgbWdyID0gc2l0ZS5nZXRBY3Rpb25CYXJzKCkuZ2V0VG9vbEJhck1hbmFnZXIoKTsKLQkJbWdyLmFkZChmUmVzdW1lQWN0aW9uKTsKLQkJbWdyLmFkZChmU3VzcGVuZEFjdGlvbik7Ci0JCW1nci5hZGQoZkNsZWFyQWN0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzYXZlU3RhdGUoSU1lbWVudG8gbWVtZW50bykgewotCQlzdXBlci5zYXZlU3RhdGUobWVtZW50byk7Ci0JCW1lbWVudG8ucHV0U3RyaW5nKE1FTV9MSVNURU5JTkcsIEJvb2xlYW4udG9TdHJpbmcoaXNMaXN0ZW5pbmcpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRGb2N1cygpIHsKLQkJZlZpZXdlci5nZXRDb250cm9sKCkuc2V0Rm9jdXMoKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL1Rlc3RFZGl0b3JDb25maWd1cmF0aW9uSlNQLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL1Rlc3RFZGl0b3JDb25maWd1cmF0aW9uSlNQLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwYWU1NjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9UZXN0RWRpdG9yQ29uZmlndXJhdGlvbkpTUC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgSmVucyBMdWtvd3NraS9Jbm5vb3ByYWN0IC0gaW5pdGlhbCByZW5hbWluZy9yZXN0cnVjdHVyaW5nCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9ySlNQOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXh0LklKU1BQYXJ0aXRpb25zOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkuU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uSlNQOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkuaW50ZXJuYWwudGFnaW5mby5KU1BKYXZhSmF2YWRvY0hvdmVyUHJvY2Vzc29yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudmlld3MuY29udGVudG91dGxpbmUuSlNQQ29udGVudE91dGxpbmVDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnZpZXdzLnByb3BlcnRpZXMuWE1MUHJvcGVydHlTaGVldENvbmZpZ3VyYXRpb247Ci0KLS8qKgotICogVGVzdHMgcmV0cmlldmluZyBlZGl0b3IgY29udHJpYnV0aW9ucyBmb3IganNwIGNvbnRlbnQgdHlwZQotICovCi1wdWJsaWMgY2xhc3MgVGVzdEVkaXRvckNvbmZpZ3VyYXRpb25KU1AgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHVibGljIHZvaWQgdGVzdEdldFNvdXJjZVZpZXdlckNvbmZpZ3VyYXRpb24oKSB7Ci0JCU9iamVjdCBvID0gRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlci5nZXRJbnN0YW5jZSgpLmdldENvbmZpZ3VyYXRpb24oRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlci5TT1VSQ0VWSUVXRVJDT05GSUdVUkFUSU9OLCBDb250ZW50VHlwZUlkRm9ySlNQLkNvbnRlbnRUeXBlSURfSlNQKTsKLQkJYXNzZXJ0Tm90TnVsbCgibm8gc291cmNlIHZpZXdlciBjb25maWd1cmF0aW9uIGZvciAiICsgQ29udGVudFR5cGVJZEZvckpTUC5Db250ZW50VHlwZUlEX0pTUCwgbyk7Ci0JCS8vIGNoZWNrIGZvciBvdmVyLXF1YWxpZmllZCBzdWJjbGFzc2VzCi0JCWFzc2VydEVxdWFscygidW5leHBlY3RlZCBzb3VyY2Ugdmlld2VyIGNvbmZpZ3VyYXRpb24gZm9yICIgKyBDb250ZW50VHlwZUlkRm9ySlNQLkNvbnRlbnRUeXBlSURfSlNQLCBvLmdldENsYXNzKCksIFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbkpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldENvbnRlbnRPdXRsaW5lVmlld2VyQ29uZmlndXJhdGlvbigpIHsKLQkJT2JqZWN0IG8gPSBFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLmdldEluc3RhbmNlKCkuZ2V0Q29uZmlndXJhdGlvbihFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLkNPTlRFTlRPVVRMSU5FQ09ORklHVVJBVElPTiwgQ29udGVudFR5cGVJZEZvckpTUC5Db250ZW50VHlwZUlEX0pTUCk7Ci0JCWFzc2VydE5vdE51bGwoIm5vIGNvbnRlbnQgb3V0bGluZSB2aWV3ZXIgY29uZmlndXJhdGlvbiBmb3IgIiArIENvbnRlbnRUeXBlSWRGb3JKU1AuQ29udGVudFR5cGVJRF9KU1AsIG8pOwotCQkvLyBjaGVjayBmb3Igb3Zlci1xdWFsaWZpZWQgc3ViY2xhc3NlcwotCQlhc3NlcnRFcXVhbHMoInVuZXhwZWN0ZWQgY29udGVudCBvdXRsaW5lIHZpZXdlciBjb25maWd1cmF0aW9uIGZvciAiICsgQ29udGVudFR5cGVJZEZvckpTUC5Db250ZW50VHlwZUlEX0pTUCwgby5nZXRDbGFzcygpLCBKU1BDb250ZW50T3V0bGluZUNvbmZpZ3VyYXRpb24uY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRQcm9wZXJ0eVNoZWV0Q29uZmlndXJhdGlvbigpIHsKLQkJT2JqZWN0IG8gPSBFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLmdldEluc3RhbmNlKCkuZ2V0Q29uZmlndXJhdGlvbihFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLlBST1BFUlRZU0hFRVRDT05GSUdVUkFUSU9OLCBDb250ZW50VHlwZUlkRm9ySlNQLkNvbnRlbnRUeXBlSURfSlNQKTsKLQkJYXNzZXJ0Tm90TnVsbCgibm8gcHJvcGVydHkgc2hlZXQgY29uZmlndXJhdGlvbiBmb3IgIiArIENvbnRlbnRUeXBlSWRGb3JKU1AuQ29udGVudFR5cGVJRF9KU1AsIG8pOwotCQkvLyBjaGVjayBmb3Igb3Zlci1xdWFsaWZpZWQgc3ViY2xhc3NlcwotCQlhc3NlcnRFcXVhbHMoInVuZXhwZWN0ZWQgcHJvcGVydHkgc2hlZXQgY29uZmlndXJhdGlvbiBmb3IgIiArIENvbnRlbnRUeXBlSWRGb3JKU1AuQ29udGVudFR5cGVJRF9KU1AsIG8uZ2V0Q2xhc3MoKSwgWE1MUHJvcGVydHlTaGVldENvbmZpZ3VyYXRpb24uY2xhc3MpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0RG9jdW1lbnRhdGlvblRleHRIb3ZlcigpIHsKLQkJT2JqZWN0IG8gPSBFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLmdldEluc3RhbmNlKCkuZ2V0Q29uZmlndXJhdGlvbihFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLkRPQ1VNRU5UQVRJT05URVhUSE9WRVIsIElKU1BQYXJ0aXRpb25zLkpTUF9DT05URU5UX0pBVkEpOwotCQlhc3NlcnROb3ROdWxsKCJubyBkb2N1bWVudGF0aW9uIHRleHQgaG92ZXIgcHJvY2Vzc29yIGZvciAiICsgSUpTUFBhcnRpdGlvbnMuSlNQX0NPTlRFTlRfSkFWQSwgbyk7Ci0JCS8vIGNoZWNrIGZvciBvdmVyLXF1YWxpZmllZCBzdWJjbGFzc2VzCi0JCWFzc2VydEVxdWFscygidW5leHBlY3RlZCBkb2N1bWVudGF0aW9uIHRleHQgaG92ZXIgcHJvY2Vzc29yIGZvciAiICsgSUpTUFBhcnRpdGlvbnMuSlNQX0NPTlRFTlRfSkFWQSwgby5nZXRDbGFzcygpLCBKU1BKYXZhSmF2YWRvY0hvdmVyUHJvY2Vzc29yLmNsYXNzKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL1Rlc3RFbWFpbE5vdGljZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9UZXN0RW1haWxOb3RpY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTU0MTU2ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL1Rlc3RFbWFpbE5vdGljZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1wdWJsaWMgY2xhc3MgVGVzdEVtYWlsTm90aWNlIGV4dGVuZHMgVGVzdENhc2UgewotCXByaXZhdGUgYm9vbGVhbiBzZW5kTm90aWZpY2F0aW9ucyA9IGZhbHNlOwotCi0JcHVibGljIFRlc3RFbWFpbE5vdGljZSgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgVGVzdEVtYWlsTm90aWNlKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RFbWFpbCgpIHsKLQkJYXNzZXJ0RmFsc2UoIlNpbXBsZSB0ZXN0IHRvIGJlIHN1cmUgZW1haWwgZ2V0cyBzZW50IG9uIGZhaWx1cmUiLCBzZW5kTm90aWZpY2F0aW9ucyk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvVGVzdE1vZGVsQ2xvbmUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvVGVzdE1vZGVsQ2xvbmUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjZiM2RkMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL1Rlc3RNb2RlbENsb25lLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHM7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuUGFnZURpcmVjdGl2ZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLm1vZGVscXVlcnkuSlNQTW9kZWxRdWVyeUFkYXB0ZXJJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5tb2RlbHF1ZXJ5LkpTUE1vZGVsUXVlcnlJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9ySlNQOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaW50ZXJuYWwubW9kZWxoYW5kbGVyLkVtYmVkZGVkSFRNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmludGVybmFsLm1vZGVscXVlcnkuSFRNTE1vZGVsUXVlcnlJbXBsOwotLy9pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUZhbWlseUZvckhUTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9ySFRNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwubHRrLm1vZGVsaGFuZGxlci5FbWJlZGRlZFR5cGVIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTm9kZU5vdGlmaWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwubW9kZWxxdWVyeS5Nb2RlbFF1ZXJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5tb2RlbGhhbmRsZXIuRW1iZWRkZWRYTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLm1vZGVscXVlcnkuWE1MTW9kZWxRdWVyeUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JYTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuc3NlbW9kZWxxdWVyeS5Nb2RlbFF1ZXJ5QWRhcHRlcjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0vKioKLSAqIAotICovCi1wdWJsaWMgY2xhc3MgVGVzdE1vZGVsQ2xvbmUgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwcml2YXRlIEhhc2hNYXAgZW1iZWRkZWRNb2RlbFF1ZXJpZXMgPSBuZXcgSGFzaE1hcCgpOwotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFRlc3RNb2RlbENsb25lLgotCSAqLwotCXB1YmxpYyBUZXN0TW9kZWxDbG9uZShTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFRlc3QgZ2V0VGVzdCgpIHsKLQkJcmV0dXJuIG5ldyBUZXN0TW9kZWxDbG9uZSgidGVzdENyZWF0ZVN0cnVjdHVyZWRNb2RlbEpTUCIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDbG9uZVN0cnVjdHVyZWRNb2RlbFhNTCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCS8vIEZpcnN0IG1ha2UgKGVtcHR5KSBzdHJ1Y3R1cmVkRG9jdW1lbnQKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbW9kZWxNYW5hZ2VyLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MKTsKLQkJYXNzZXJ0VHJ1ZSgibW9kZWwgY291bGQgbm90IGJlIGNyZWF0ZWQhIiwgbW9kZWwgIT0gbnVsbCk7Ci0KLQkJSVN0cnVjdHVyZWRNb2RlbCBjbG9uZWRNb2RlbCA9IG1vZGVsLm5ld0luc3RhbmNlKCk7Ci0JCWFzc2VydFRydWUoImNsb25lZCBtb2RlbCBjb3VsZCBub3QgYmUgY3JlYXRlZCEiLCBjbG9uZWRNb2RlbCAhPSBudWxsKTsKLQkJLy8gbWFrZSBzdXJlIHRoZSBjcml0aWNhbCB2YXJpYWJsZXMgYXJlIE5PVCBpZGVudGljYWwsIGJ1dCB0aGF0IG5ldyBpbnN0YW5jZXMgCi0JCS8vIGhhdmUgYmVlbiBtYWRlCi0JCWJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKLQkJLy8JCWlmIChjbG9uZWRNb2RlbC5nZXRFbmNvZGluZ01lbWVudG8oKSA9PSBtb2RlbC5nZXRFbmNvZGluZ01lbWVudG8oKSkgcGFzc2VkID0gZmFsc2U7Ci0JCS8vCQlpZiAoY2xvbmVkTW9kZWwuZ2V0UGFyc2VyKCkgPT0gbW9kZWwuZ2V0UGFyc2VyKCkpIHBhc3NlZCA9IGZhbHNlOwotCQkvLwkJaWYgKGNsb25lZE1vZGVsLmdldFJlUGFyc2VyKCkgPT0gbW9kZWwuZ2V0UmVQYXJzZXIoKSkgcGFzc2VkID0gZmFsc2U7Ci0JCWFzc2VydFRydWUoIm5ld0luc3RhbmNlIG9mIHN0cnVjdHVyZWQgbW9kZWwgaXMgbm90IGNvcnJlY3QiLCBwYXNzZWQpOwotCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdENsb25lU3RydWN0dXJlZE1vZGVsSFRNTCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCS8vIEZpcnN0IG1ha2UgKGVtcHR5KSBzdHJ1Y3R1cmVkRG9jdW1lbnQKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbW9kZWxNYW5hZ2VyLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9ySFRNTC5Db250ZW50VHlwZUlEX0hUTUwpOwotCQlhc3NlcnRUcnVlKCJtb2RlbCBjb3VsZCBub3QgYmUgY3JlYXRlZCEiLCBtb2RlbCAhPSBudWxsKTsKLQotCQlJU3RydWN0dXJlZE1vZGVsIGNsb25lZE1vZGVsID0gbW9kZWwubmV3SW5zdGFuY2UoKTsKLQkJYXNzZXJ0VHJ1ZSgiY2xvbmVkIG1vZGVsIGNvdWxkIG5vdCBiZSBjcmVhdGVkISIsIGNsb25lZE1vZGVsICE9IG51bGwpOwotCQkvLyBtYWtlIHN1cmUgdGhlIGNyaXRpY2FsIHZhcmlhYmxlcyBhcmUgTk9UIGlkZW50aWNhbCwgYnV0IHRoYXQgbmV3IGluc3RhbmNlcyAKLQkJLy8gaGF2ZSBiZWVuIG1hZGUKLQkJYm9vbGVhbiBwYXNzZWQgPSB0cnVlOwotCQkvLwkJaWYgKGNsb25lZE1vZGVsLmdldEVuY29kaW5nTWVtZW50bygpID09IG1vZGVsLmdldEVuY29kaW5nTWVtZW50bygpKSBwYXNzZWQgPSBmYWxzZTsKLQkJLy8JCWlmIChjbG9uZWRNb2RlbC5nZXRQYXJzZXIoKSA9PSBtb2RlbC5nZXRQYXJzZXIoKSkgcGFzc2VkID0gZmFsc2U7Ci0JCS8vCQlpZiAoY2xvbmVkTW9kZWwuZ2V0UmVQYXJzZXIoKSA9PSBtb2RlbC5nZXRSZVBhcnNlcigpKSBwYXNzZWQgPSBmYWxzZTsKLQkJYXNzZXJ0VHJ1ZSgibmV3SW5zdGFuY2Ugb2Ygc3RydWN0dXJlZCBtb2RlbCBpcyBub3QgY29ycmVjdCIsIHBhc3NlZCk7Ci0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q2xvbmVTdHJ1Y3R1cmVkTW9kZWxKU1AoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQkvLyBGaXJzdCBtYWtlIChlbXB0eSkgc3RydWN0dXJlZERvY3VtZW50Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG1vZGVsTWFuYWdlci5jcmVhdGVVbk1hbmFnZWRTdHJ1Y3R1cmVkTW9kZWxGb3IoQ29udGVudFR5cGVJZEZvckpTUC5Db250ZW50VHlwZUlEX0pTUCk7Ci0JCWFzc2VydFRydWUoIm1vZGVsIGNvdWxkIG5vdCBiZSBjcmVhdGVkISIsIG1vZGVsICE9IG51bGwpOwotCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgY2xvbmVkTW9kZWwgPSBtb2RlbC5uZXdJbnN0YW5jZSgpOwotCQlhc3NlcnRUcnVlKCJjbG9uZWQgbW9kZWwgY291bGQgbm90IGJlIGNyZWF0ZWQhIiwgY2xvbmVkTW9kZWwgIT0gbnVsbCk7Ci0JCS8vIG1ha2Ugc3VyZSB0aGUgZW1iZWRkZWQgdHlwZSBpcyBjb3JyZWN0Ci0JCWJvb2xlYW4gcGFzc2VkID0gdHJ1ZTsKLQkJRG9jdW1lbnQgZG9jID0gKChJRE9NTW9kZWwpIGNsb25lZE1vZGVsKS5nZXREb2N1bWVudCgpOwotCQlQYWdlRGlyZWN0aXZlQWRhcHRlciBwYWdlRGlyZWN0aXZlQWRhcHRlciA9IChQYWdlRGlyZWN0aXZlQWRhcHRlcikgKChJTm9kZU5vdGlmaWVyKSBkb2MpLmdldEV4aXN0aW5nQWRhcHRlcihQYWdlRGlyZWN0aXZlQWRhcHRlci5jbGFzcyk7Ci0JCWFzc2VydE5vdE51bGwoImNsb25lZCBtb2RlbCBkaWQgbm90IGhhdmUgZW1iZWRkZWQgYWRhcHRlciIsIHBhZ2VEaXJlY3RpdmVBZGFwdGVyKTsKLQotCQlFbWJlZGRlZFR5cGVIYW5kbGVyIGVtYmVkZGVkSGFuZGxlciA9IHBhZ2VEaXJlY3RpdmVBZGFwdGVyLmdldEVtYmVkZGVkVHlwZSgpOwotCQlhc3NlcnROb3ROdWxsKCJjbG9uZWQgbW9kZWwgZGlkIG5vdCBoYXZlIGVtYmVkZGVkIGhhbmRsZXIiLCBlbWJlZGRlZEhhbmRsZXIpOwotCi0JCS8vCQlpZiAoY2xvbmVkTW9kZWwuZ2V0RW5jb2RpbmdNZW1lbnRvKCkgPT0gbW9kZWwuZ2V0RW5jb2RpbmdNZW1lbnRvKCkpIHBhc3NlZCA9IGZhbHNlOwotCQkvLwkJaWYgKGNsb25lZE1vZGVsLmdldFBhcnNlcigpID09IG1vZGVsLmdldFBhcnNlcigpKSBwYXNzZWQgPSBmYWxzZTsKLQkJLy8JCWlmIChjbG9uZWRNb2RlbC5nZXRSZVBhcnNlcigpID09IG1vZGVsLmdldFJlUGFyc2VyKCkpIHBhc3NlZCA9IGZhbHNlOwotCQlhc3NlcnRUcnVlKCJuZXdJbnN0YW5jZSBvZiBzdHJ1Y3R1cmVkIG1vZGVsIGlzIG5vdCBjb3JyZWN0IiwgcGFzc2VkKTsKLQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDbG9uZVN0cnVjdHVyZWRNb2RlbEpTUFhNTCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCS8vIEZpcnN0IG1ha2UgKGVtcHR5KSBzdHJ1Y3R1cmVkRG9jdW1lbnQKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbW9kZWxNYW5hZ2VyLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9ySlNQLkNvbnRlbnRUeXBlSURfSlNQKTsKLQkJYXNzZXJ0VHJ1ZSgibW9kZWwgY291bGQgbm90IGJlIGNyZWF0ZWQhIiwgbW9kZWwgIT0gbnVsbCk7Ci0JCS8vIG5vdGUsIHdlIGluaXRpYWx5IGV4cGVjdCBIVE1MLCBzaW5jZSB0aGVyZSBpcyBub3QgY29udGVudAotCQljaGVja0VtYmVkZGVkVHlwZShtb2RlbCwgRW1iZWRkZWRIVE1MLmNsYXNzKTsKLQkKLQkJU3RyaW5nIHRlc3RDb250ZW50ID0gIjwlQCBwYWdlIGNvbnRlbnRUeXBlPVwidGV4dC94bWxcIiAlPiI7Ci0JCW1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnNldFRleHQodGhpcywgdGVzdENvbnRlbnQpOwotCQotCQkvLyBtb2RpZmllZCBmb3IgZGVzaWduIGNoYW5nZSwgd2hlcmUgcmUtaW5pdCBzaG91bGQgYmUgaGFuZGxlZCBiZWZvcmUgCi0JCS8vIHNldCByZXR1cm5zLgotCQlhc3NlcnRUcnVlKCJtb2RlbCBzaG91bGQgbm90IG5lZWQgcmVpbml0IiwgIW1vZGVsLmlzUmVpbml0aWFsaXphdGlvbk5lZWRlZCgpKTsKLQkKLQkJLy8JCWJ1dCBpZiBpdCBkaWQgbmVlZCByZS1pbml0LCBoZXJlJ3MgdGhlIHJpZ2h0IGNhbGxpbmcgc2VxdWVuY2UJCQotCQkvLwkJaWYgKG1vZGVsLmlzUmVpbml0aWFsaXphdGlvbk5lZWRlZCgpKSB7Ci0JCS8vCQkJbW9kZWwuYWJvdXRUb0NoYW5nZU1vZGVsKCk7Ci0JCS8vCQkJbW9kZWwgPSBtb2RlbC5yZWluaXQoKTsKLQkJLy8JCQltb2RlbC5jaGFuZ2VkTW9kZWwoKTsKLQkJLy8JCX0KLQkKLQkJY2hlY2tFbWJlZGRlZFR5cGUobW9kZWwsIEVtYmVkZGVkWE1MLmNsYXNzKTsKLQkKLQkJSVN0cnVjdHVyZWRNb2RlbCBjbG9uZWRNb2RlbCA9IG1vZGVsLm5ld0luc3RhbmNlKCk7Ci0JCWFzc2VydFRydWUoImNsb25lZCBtb2RlbCBjb3VsZCBub3QgYmUgY3JlYXRlZCEiLCBjbG9uZWRNb2RlbCAhPSBudWxsKTsKLQkJY2hlY2tFbWJlZGRlZFR5cGUoY2xvbmVkTW9kZWwsIEVtYmVkZGVkWE1MLmNsYXNzKTsKLQkKLQl9Ci0KLQlwcml2YXRlIHZvaWQgY2hlY2tFbWJlZGRlZFR5cGUoSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCwgQ2xhc3MgZXhwZWN0ZWRUeXBlKSB7Ci0JCURvY3VtZW50IGRvYyA9ICgoSURPTU1vZGVsKSBtb2RlbCkuZ2V0RG9jdW1lbnQoKTsKLQkJUGFnZURpcmVjdGl2ZUFkYXB0ZXIgcGFnZURpcmVjdGl2ZUFkYXB0ZXIgPSAoUGFnZURpcmVjdGl2ZUFkYXB0ZXIpICgoSU5vZGVOb3RpZmllcikgZG9jKS5nZXRFeGlzdGluZ0FkYXB0ZXIoUGFnZURpcmVjdGl2ZUFkYXB0ZXIuY2xhc3MpOwotCQlhc3NlcnROb3ROdWxsKCJtb2RlbCBkaWQgbm90IGhhdmUgcGFnZURpcmVjdGl2ZSIsIHBhZ2VEaXJlY3RpdmVBZGFwdGVyKTsKLQotCQlFbWJlZGRlZFR5cGVIYW5kbGVyIGVtYmVkZGVkSGFuZGxlciA9IHBhZ2VEaXJlY3RpdmVBZGFwdGVyLmdldEVtYmVkZGVkVHlwZSgpOwotCQlhc3NlcnROb3ROdWxsKCJtb2RlbCBkaWQgbm90IGhhdmUgZW1iZWRkZWQgaGFuZGxlciIsIGVtYmVkZGVkSGFuZGxlcik7Ci0KLQkJYXNzZXJ0RXF1YWxzKGV4cGVjdGVkVHlwZSwgZW1iZWRkZWRIYW5kbGVyLmdldENsYXNzKCkpOwotCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdENyZWF0ZVN0cnVjdHVyZWRNb2RlbEpTUCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCS8vIEZpcnN0IG1ha2UgKGVtcHR5KSBzdHJ1Y3R1cmVkRG9jdW1lbnQKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbW9kZWxNYW5hZ2VyLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9ySlNQLkNvbnRlbnRUeXBlSURfSlNQKTsKLQkJYXNzZXJ0VHJ1ZSgibW9kZWwgY291bGQgbm90IGJlIGNyZWF0ZWQhIiwgbW9kZWwgIT0gbnVsbCk7Ci0JCi0JCUFycmF5TGlzdCBmYWN0b3JpZXMgPSAoQXJyYXlMaXN0KSBtb2RlbC5nZXRGYWN0b3J5UmVnaXN0cnkoKS5nZXRGYWN0b3JpZXMoKTsKLQkJZmFjdG9yaWVzID0gKEFycmF5TGlzdCkgZmFjdG9yaWVzLmNsb25lKCk7Ci0JCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgY2xvbmVkTW9kZWwgPSBtb2RlbC5uZXdJbnN0YW5jZSgpOwotCQlpZiAobW9kZWwuZ2V0TW9kZWxIYW5kbGVyKCkgPT0gbnVsbCkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCQlhc3NlcnRUcnVlKGZhbHNlKTsKLQkJfQotCQlhc3NlcnRUcnVlKCJjbG9uZWQgbW9kZWwgY291bGQgbm90IGJlIGNyZWF0ZWQhIiwgY2xvbmVkTW9kZWwgIT0gbnVsbCk7Ci0JCS8vIG1ha2Ugc3VyZSB0aGUgY3JpdGljYWwgdmFyaWFibGVzIGFyZSBjb3JyZWN0LgotCQotCQlBcnJheUxpc3QgbmV3RmFjdG9yaWVzID0gKEFycmF5TGlzdCkgY2xvbmVkTW9kZWwuZ2V0RmFjdG9yeVJlZ2lzdHJ5KCkuZ2V0RmFjdG9yaWVzKCk7Ci0JCW5ld0ZhY3RvcmllcyA9IChBcnJheUxpc3QpIG5ld0ZhY3Rvcmllcy5jbG9uZSgpOwotCQotCQlib29sZWFuIHBhc3NlZCA9IGNoZWNrRmFjdG9yaWVzTGlzdEZvcklkZW50aXR5KGZhY3RvcmllcywgbmV3RmFjdG9yaWVzKTsKLQkJYXNzZXJ0VHJ1ZSgibmV3SW5zdGFuY2Ugb2Ygc3RydWN0dXJlZCBtb2RlbCBpcyBub3QgY29ycmVjdCIsIHBhc3NlZCk7Ci0JCi0JCXBhc3NlZCA9IGNoZWNrRm9yU2FtZUVtYmVkZGVkRmFjdG9yaWVzKG1vZGVsLCBjbG9uZWRNb2RlbCk7Ci0JCWFzc2VydFRydWUoIm5ld0luc3RhbmNlIG9mIHN0cnVjdHVyZWQgbW9kZWwgaXMgbm90IGNvcnJlY3QiLCBwYXNzZWQpOwotCQotCQkvLyBOb3csIGFzc2lnbmluZyBzb21lIGNvbnRlbnQgc2hvdWxkbid0IGNoYW5nZSB0aGUgZmFjdG9yaWVzCi0JCWNsb25lZE1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnJlcGxhY2VUZXh0KHRoaXMsIDAsIDAsICI8c2FtcGxlPiB0ZXh0Iik7Ci0JCUFycmF5TGlzdCB0d29GYWN0b3JpZXMgPSAoQXJyYXlMaXN0KSBjbG9uZWRNb2RlbC5nZXRGYWN0b3J5UmVnaXN0cnkoKS5nZXRGYWN0b3JpZXMoKTsKLQkJdHdvRmFjdG9yaWVzID0gKEFycmF5TGlzdCkgdHdvRmFjdG9yaWVzLmNsb25lKCk7Ci0JCi0JCXBhc3NlZCA9IGNoZWNrRmFjdG9yaWVzTGlzdEZvcklkZW50aXR5KGZhY3RvcmllcywgdHdvRmFjdG9yaWVzKTsKLQkJYXNzZXJ0VHJ1ZSgibmV3SW5zdGFuY2Ugb2Ygc3RydWN0dXJlZCBtb2RlbCBpcyBub3QgY29ycmVjdCIsIHBhc3NlZCk7Ci0JCi0JCXBhc3NlZCA9IGNoZWNrRm9yU2FtZUVtYmVkZGVkRmFjdG9yaWVzKG1vZGVsLCBjbG9uZWRNb2RlbCk7Ci0JCWFzc2VydFRydWUoIm5ld0luc3RhbmNlIG9mIHN0cnVjdHVyZWQgbW9kZWwgaXMgbm90IGNvcnJlY3QiLCBwYXNzZWQpOwotCQotCQotCQkvLyBOb3csIGFzc2lnbmluZyB1c2UgYSBwYWdlIGRpcmVjdGl2ZSwgYnV0IGxlYXZpbmcgZW1iZWRkZWQgdHlwZSB0aGUgc2FtZSBhcyBkZWZhdWx0Ci0JCWNsb25lZE1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnNldFRleHQodGhpcywgIjwlQCBwYWdlIGNvbnRlbnRUeXBlPVwidGV4dC9odG1sXCIiKTsKLQkJQXJyYXlMaXN0IHRocmVlRmFjdG9yaWVzID0gKEFycmF5TGlzdCkgY2xvbmVkTW9kZWwuZ2V0RmFjdG9yeVJlZ2lzdHJ5KCkuZ2V0RmFjdG9yaWVzKCk7Ci0JCXRocmVlRmFjdG9yaWVzID0gKEFycmF5TGlzdCkgdGhyZWVGYWN0b3JpZXMuY2xvbmUoKTsKLQkKLQkJcGFzc2VkID0gY2hlY2tGYWN0b3JpZXNMaXN0Rm9ySWRlbnRpdHkoZmFjdG9yaWVzLCB0aHJlZUZhY3Rvcmllcyk7Ci0JCWFzc2VydFRydWUoIm5ld0luc3RhbmNlIG9mIHN0cnVjdHVyZWQgbW9kZWwgaXMgbm90IGNvcnJlY3QiLCBwYXNzZWQpOwotCQotCQlwYXNzZWQgPSBjaGVja0ZvclNhbWVFbWJlZGRlZEZhY3Rvcmllcyhtb2RlbCwgY2xvbmVkTW9kZWwpOwotCQlhc3NlcnRUcnVlKCJuZXdJbnN0YW5jZSBvZiBzdHJ1Y3R1cmVkIG1vZGVsIGlzIG5vdCBjb3JyZWN0IiwgcGFzc2VkKTsKLQkKLQkKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlU3RydWN0dXJlZE1vZGVsSlNQWEhUTUwoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQkvLyBGaXJzdCBtYWtlIChlbXB0eSkgc3RydWN0dXJlZERvY3VtZW50Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG1vZGVsTWFuYWdlci5jcmVhdGVVbk1hbmFnZWRTdHJ1Y3R1cmVkTW9kZWxGb3IoQ29udGVudFR5cGVJZEZvckpTUC5Db250ZW50VHlwZUlEX0pTUCk7Ci0JCWFzc2VydFRydWUoIm1vZGVsIGNvdWxkIG5vdCBiZSBjcmVhdGVkISIsIG1vZGVsICE9IG51bGwpOwotCQotCQotCQotCQotCQkvLyBOb3csIGFzc2lnbmluZyB1c2UgYSBwYWdlIGRpcmVjdGl2ZSwgYnV0IGxlYXZpbmcgZW1iZWRkZWQgdHlwZSB0aGUgc2FtZSBhcyBkZWZhdWx0Ci0JCW1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnNldFRleHQodGhpcywgIjw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cIklTTy04ODU5LTFcIiA/PlxuIiArIAotCQkJCSI8IURPQ1RZUEUgaHRtbCBQVUJMSUMgXCItLy9XM0MvL0RURCBYSFRNTCAxLjEvL0VOXCJcbiIgKyAKLQkJCQkiXCJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDExL0RURC94aHRtbDExLmR0ZFwiPlxuIiArIAotCQkJCSI8JUBwYWdlIGxhbmd1YWdlPVwiamF2YVwiIGNvbnRlbnRUeXBlPVwidGV4dC94bWw7IGNoYXJzZXQ9SVNPLTg4NTktMVwiXG4iICsgCi0JCQkJIiAgICAgICAgcGFnZUVuY29kaW5nPVwiSVNPLTg4NTktMVwiJT5cbiIgKyAKLQkJCQkiPGh0bWwgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCI+XG4iICsgCi0JCQkJIjxoZWFkPlxuIiArIAotCQkJCSI8bWV0YSBodHRwLWVxdWl2PVwiQ29udGVudC1UeXBlXCIgY29udGVudD1cInRleHQveG1sOyBjaGFyc2V0PUlTTy04ODU5LTFcIiAvPlxuIiArIAotCQkJCSI8c3R5bGU+XG4iICsgCi0JCQkJIkEgeyBjb2xvcjogcmVkOyB9XG4iICsgCi0JCQkJIjwvc3R5bGU+XG4iICsgCi0JCQkJIjwvaGVhZD5cbiIgKyAKLQkJCQkiPC9odG1sPlxuIiArIAotCQkJCSIiKTsKLQkKLQkJCWNoZWNrRW1iZWRkZWRUeXBlKG1vZGVsLCBFbWJlZGRlZEhUTUwuY2xhc3MpOwotCQkJY2hlY2tNb2RlbFF1ZXJ5KG1vZGVsLCBKU1BNb2RlbFF1ZXJ5SW1wbC5jbGFzcyk7Ci0JCQljaGVja0VtYmVkZGVkTW9kZWxRdWVyeShtb2RlbCwgSlNQTW9kZWxRdWVyeUFkYXB0ZXJJbXBsLmNsYXNzLCBKU1BNb2RlbFF1ZXJ5SW1wbC5jbGFzcywgSFRNTE1vZGVsUXVlcnlJbXBsLmNsYXNzKTsKLQkJCQotCQkJCi0JCQkKLQkJCQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGVTdHJ1Y3R1cmVkTW9kZWxKU1BYSFRNbm9Eb2N0eXBlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJLy8gRmlyc3QgbWFrZSAoZW1wdHkpIHN0cnVjdHVyZWREb2N1bWVudAotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBtb2RlbE1hbmFnZXIuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JKU1AuQ29udGVudFR5cGVJRF9KU1ApOwotCQlhc3NlcnRUcnVlKCJtb2RlbCBjb3VsZCBub3QgYmUgY3JlYXRlZCEiLCBtb2RlbCAhPSBudWxsKTsKLQkKLQkKLQkKLQkKLQkJLy8gTm93LCBhc3NpZ25pbmcgdXNlIGEgcGFnZSBkaXJlY3RpdmUsIGJ1dCBsZWF2aW5nIGVtYmVkZGVkIHR5cGUgdGhlIHNhbWUgYXMgZGVmYXVsdAotCQltb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXRUZXh0KHRoaXMsICI8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJJU08tODg1OS0xXCIgPz5cbiIgKyAKLQkJCQkiPCVAcGFnZSBsYW5ndWFnZT1cImphdmFcIiBjb250ZW50VHlwZT1cInRleHQveG1sOyBjaGFyc2V0PUlTTy04ODU5LTFcIlxuIiArIAotCQkJCSIgICAgICAgIHBhZ2VFbmNvZGluZz1cIklTTy04ODU5LTFcIiU+XG4iICsgCi0JCQkJIjxodG1sIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiPlxuIiArIAotCQkJCSI8aGVhZD5cbiIgKyAKLQkJCQkiPG1ldGEgaHR0cC1lcXVpdj1cIkNvbnRlbnQtVHlwZVwiIGNvbnRlbnQ9XCJ0ZXh0L3htbDsgY2hhcnNldD1JU08tODg1OS0xXCIgLz5cbiIgKyAKLQkJCQkiPHN0eWxlPlxuIiArIAotCQkJCSJBIHsgY29sb3I6IHJlZDsgfVxuIiArIAotCQkJCSI8L3N0eWxlPlxuIiArIAotCQkJCSI8L2hlYWQ+XG4iICsgCi0JCQkJIjwvaHRtbD5cbiIgKyAKLQkJCQkiIik7Ci0JCi0JCQljaGVja0VtYmVkZGVkVHlwZShtb2RlbCwgRW1iZWRkZWRIVE1MLmNsYXNzKTsKLQkJCWNoZWNrTW9kZWxRdWVyeShtb2RlbCwgSlNQTW9kZWxRdWVyeUltcGwuY2xhc3MpOwotCQkJY2hlY2tFbWJlZGRlZE1vZGVsUXVlcnkobW9kZWwsIEpTUE1vZGVsUXVlcnlBZGFwdGVySW1wbC5jbGFzcywgSlNQTW9kZWxRdWVyeUltcGwuY2xhc3MsIEhUTUxNb2RlbFF1ZXJ5SW1wbC5jbGFzcyk7Ci0JCQkKLQkJCQotCQkJCi0JCQkKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlU3RydWN0dXJlZE1vZGVsSlNQWEhUTUwyKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJLy8gRmlyc3QgbWFrZSAoZW1wdHkpIHN0cnVjdHVyZWREb2N1bWVudAotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBtb2RlbE1hbmFnZXIuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JKU1AuQ29udGVudFR5cGVJRF9KU1ApOwotCQlhc3NlcnRUcnVlKCJtb2RlbCBjb3VsZCBub3QgYmUgY3JlYXRlZCEiLCBtb2RlbCAhPSBudWxsKTsKLQotCi0KLQotCQkvLyBOb3csIGFzc2lnbmluZyB1c2UgYSBwYWdlIGRpcmVjdGl2ZSwgYnV0IGxlYXZpbmcgZW1iZWRkZWQgdHlwZSB0aGUgc2FtZSBhcyBkZWZhdWx0Ci0JCW1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnNldFRleHQodGhpcywgIjw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cIklTTy04ODU5LTFcIiA/PlxuIiArIAotCQkJCQkiPCVAcGFnZSBsYW5ndWFnZT1cImphdmFcIiBjb250ZW50VHlwZT1cImFwcGxpY2F0aW9uL3htbDsgY2hhcnNldD1JU08tODg1OS0xXCJcbiIgKyAKLQkJCQkJIiAgICAgICAgcGFnZUVuY29kaW5nPVwiSVNPLTg4NTktMVwiJT5cbiIgKyAKLQkJCQkJIjwhRE9DVFlQRSBodG1sIFBVQkxJQyBcIi0vL1czQy8vRFREIFhIVE1MIDEuMS8vRU5cIlxuIiArIAotCQkJCSJcImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMTEvRFREL3hodG1sMTEuZHRkXCI+XG4iICsgCi0JCQkJIjxodG1sIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiPlxuIiArIAotCQkJCSI8aGVhZD5cbiIgKyAKLQkJCQkiPG1ldGEgaHR0cC1lcXVpdj1cIkNvbnRlbnQtVHlwZVwiIGNvbnRlbnQ9XCJhcHBsaWNhdGlvbi94bWw7IGNoYXJzZXQ9SVNPLTg4NTktMVwiIC8+XG4iICsgCi0JCQkJIjxzdHlsZT5cbiIgKyAKLQkJCQkiQSB7IGNvbG9yOiByZWQ7IH1cbiIgKyAKLQkJCQkiPC9zdHlsZT5cbiIgKyAKLQkJCQkiPC9oZWFkPlxuIiArIAotCQkJCSI8L2h0bWw+XG4iICsgCi0JCQkJIiIpOwotCi0JCQljaGVja0VtYmVkZGVkVHlwZShtb2RlbCwgRW1iZWRkZWRIVE1MLmNsYXNzKTsKLQkJCWNoZWNrTW9kZWxRdWVyeShtb2RlbCwgSlNQTW9kZWxRdWVyeUltcGwuY2xhc3MpOwotCQkJY2hlY2tFbWJlZGRlZE1vZGVsUXVlcnkobW9kZWwsIEpTUE1vZGVsUXVlcnlBZGFwdGVySW1wbC5jbGFzcywgSlNQTW9kZWxRdWVyeUltcGwuY2xhc3MsIEhUTUxNb2RlbFF1ZXJ5SW1wbC5jbGFzcyk7Ci0JCQkKLQkJCQotCQkJCi0JCQkKLQl9Ci0KLQlwcml2YXRlIHZvaWQgY2hlY2tNb2RlbFF1ZXJ5KElTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwsIENsYXNzIGNsYXNzMSkgewotCQlEb2N1bWVudCBkb2MgPSAoKElET01Nb2RlbCkgbW9kZWwpLmdldERvY3VtZW50KCk7Ci0JCU1vZGVsUXVlcnlBZGFwdGVyIG1vZGVsUXVlcnlBZGFwdGVyID0gKE1vZGVsUXVlcnlBZGFwdGVyKSAoKElOb2RlTm90aWZpZXIpIGRvYykuZ2V0RXhpc3RpbmdBZGFwdGVyKE1vZGVsUXVlcnlBZGFwdGVyLmNsYXNzKTsKLQkJYXNzZXJ0Tm90TnVsbCgibW9kZWwgZGlkIG5vdCBoYXZlIG1vZGVsUXVlcnlBZGFwdGVyIiwgbW9kZWxRdWVyeUFkYXB0ZXIpOwotCQkKLQkJYXNzZXJ0VHJ1ZSgibW9kZWxRdWVyeUFkYXB0ZXIgaXMgd3JvbmcgY2xhc3MiLCBjbGFzczEuZXF1YWxzKEpTUE1vZGVsUXVlcnlJbXBsLmNsYXNzKSk7Ci0JCQotCX0KLQotCXByaXZhdGUgdm9pZCBjaGVja0VtYmVkZGVkTW9kZWxRdWVyeShJU3RydWN0dXJlZE1vZGVsIG1vZGVsLCBDbGFzcyBvdXRlclF1ZXJ5QWRhcHRlciwgQ2xhc3Mgb3V0ZXJRdWVyeUNsYXNzLCBDbGFzcyBlbWJlZGRlZFF1ZXJ5Q2xhc3MpIHsKLQotCQlEb2N1bWVudCBkb2MgPSAoKElET01Nb2RlbCkgbW9kZWwpLmdldERvY3VtZW50KCk7Ci0JCU1vZGVsUXVlcnlBZGFwdGVyIG1vZGVsUXVlcnlBZGFwdGVyID0gKE1vZGVsUXVlcnlBZGFwdGVyKSAoKElOb2RlTm90aWZpZXIpIGRvYykuZ2V0RXhpc3RpbmdBZGFwdGVyKE1vZGVsUXVlcnlBZGFwdGVyLmNsYXNzKTsKLQkJYXNzZXJ0Tm90TnVsbCgibW9kZWwgZGlkIG5vdCBoYXZlIG1vZGVsUXVlcnlBZGFwdGVyIiwgbW9kZWxRdWVyeUFkYXB0ZXIpOwotCi0JCUNsYXNzIGV4cGVjdGVkID0gb3V0ZXJRdWVyeUFkYXB0ZXI7Ci0JCUNsYXNzIGFjdHVhbCA9IG1vZGVsUXVlcnlBZGFwdGVyLmdldENsYXNzKCk7Ci0JCWFzc2VydEVxdWFscygiZG9jdW1lbnQncyBtb2RlbCBxdWVyeSBpcyBub3QgYXMgZXhwZWN0ZWQiLCBleHBlY3RlZCwgYWN0dWFsKTsKLQkJCi0JCU1vZGVsUXVlcnkgbW9kZWxRdWVyeSA9IG1vZGVsUXVlcnlBZGFwdGVyLmdldE1vZGVsUXVlcnkoKTsKLQkJZXhwZWN0ZWQgPSBvdXRlclF1ZXJ5Q2xhc3M7Ci0JCWFjdHVhbCA9IG1vZGVsUXVlcnkuZ2V0Q2xhc3MoKTsKLQkJYXNzZXJ0RXF1YWxzKCJtb2RlbCBxdWVyeSBhZGFwdGVyJ3MgbW9kZWwgcXVlcnkgaXMgbm90IGFzIGV4cGVjdGVkIiwgZXhwZWN0ZWQsIGFjdHVhbCk7Ci0JCQotCQlNb2RlbFF1ZXJ5IG5vZGVRdWVyeSA9IGdldEVtYmVkZGVkTW9kZWxRdWVyeShkb2MpOwotCQlhc3NlcnROb3ROdWxsKCJub2RlIGRvZXMgbm90IGhhdmUgYSBtb2RlbFF1ZXJ5QWRhcHRlciIsIG5vZGVRdWVyeSk7Ci0JCQotCQlleHBlY3RlZCA9IGVtYmVkZGVkUXVlcnlDbGFzczsKLQkJYWN0dWFsID0gbm9kZVF1ZXJ5LmdldENsYXNzKCk7Ci0JCWFzc2VydEVxdWFscygiZG9jdW1lbnRzIG1vZGVsIHF1ZXJ5IGlzIG5vdCBhcyBleHBlY3RlZCIsIGV4cGVjdGVkLCBhY3R1YWwpOwotCi0KLQkJCi0JfQotCi0JLyoqCi0JICogTWV0aG9kIGNoZWNrRW1iZWRkZWRGYWN0b3JpZXMuCi0JICogQHBhcmFtIG1vZGVsCi0JICogQHBhcmFtIGNsb25lZE1vZGVsCi0JICogQHJldHVybiBib29sZWFuCi0JICovCi0JcHJpdmF0ZSBib29sZWFuIGNoZWNrRm9yU2FtZUVtYmVkZGVkRmFjdG9yaWVzKElTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwsIElTdHJ1Y3R1cmVkTW9kZWwgY2xvbmVkTW9kZWwpIHsKLQkJYm9vbGVhbiByZXN1bHQgPSB0cnVlOwotCi0KLQkJRW1iZWRkZWRUeXBlSGFuZGxlciBvbGRFbWJlZGRlZFR5cGUgPSBnZXRFbWJlZGRlZFR5cGUobW9kZWwpOwotCQlFbWJlZGRlZFR5cGVIYW5kbGVyIG5ld0VtYmVkZGVkVHlwZSA9IGdldEVtYmVkZGVkVHlwZShjbG9uZWRNb2RlbCk7Ci0JCS8vIGV4cGVjdCB0byBiZSB0aGUgc2FtZSB0eXBlCi0JCWlmICghb2xkRW1iZWRkZWRUeXBlLmdldENsYXNzKCkuZXF1YWxzKG5ld0VtYmVkZGVkVHlwZS5nZXRDbGFzcygpKSkgewotCQkJcmVzdWx0ID0gZmFsc2U7Ci0JCQlhc3NlcnRUcnVlKHJlc3VsdCk7Ci0JCX0KLQotCQlMaXN0IG9sZEZhY3RvcmllcyA9IG9sZEVtYmVkZGVkVHlwZS5nZXRBZGFwdGVyRmFjdG9yaWVzKCk7Ci0JCUxpc3QgbmV3RmFjdG9yaWVzID0gbmV3RW1iZWRkZWRUeXBlLmdldEFkYXB0ZXJGYWN0b3JpZXMoKTsKLQkJcmVzdWx0ID0gY2hlY2tGYWN0b3JpZXNMaXN0Rm9yRXF1aXZhbGVuY2Uob2xkRmFjdG9yaWVzLCBuZXdGYWN0b3JpZXMpOwotCi0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQlwcml2YXRlIEVtYmVkZGVkVHlwZUhhbmRsZXIgZ2V0RW1iZWRkZWRUeXBlKElTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwpIHsKLQkJRG9jdW1lbnQgZG9jID0gKChJRE9NTW9kZWwpIG1vZGVsKS5nZXREb2N1bWVudCgpOwotCQlQYWdlRGlyZWN0aXZlQWRhcHRlciBwYWdlRGlyZWN0aXZlQWRhcHRlciA9IChQYWdlRGlyZWN0aXZlQWRhcHRlcikgKChJTm9kZU5vdGlmaWVyKSBkb2MpLmdldEV4aXN0aW5nQWRhcHRlcihQYWdlRGlyZWN0aXZlQWRhcHRlci5jbGFzcyk7Ci0JCWFzc2VydE5vdE51bGwoIm1vZGVsIGRpZCBub3QgaGF2ZSBlbWJlZGRlZCBhZGFwdGVyIiwgcGFnZURpcmVjdGl2ZUFkYXB0ZXIpOwotCi0JCUVtYmVkZGVkVHlwZUhhbmRsZXIgZW1iZWRkZWRIYW5kbGVyID0gcGFnZURpcmVjdGl2ZUFkYXB0ZXIuZ2V0RW1iZWRkZWRUeXBlKCk7Ci0JCWFzc2VydE5vdE51bGwoIm1vZGVsIGRpZCBub3QgaGF2ZSBlbWJlZGRlZCBoYW5kbGVyIiwgZW1iZWRkZWRIYW5kbGVyKTsKLQotCQlyZXR1cm4gZW1iZWRkZWRIYW5kbGVyOwotCX0KLQotCi0JLyoqCi0JICogTWV0aG9kIGNoZWNrRmFjdG9yaWVzTGlzdC4KLQkgKiBAcGFyYW0gZmFjdG9yaWVzCi0JICogQHBhcmFtIG5ld0ZhY3RvcmllcwotCSAqIEByZXR1cm4gYm9vbGVhbgotCSAqLwotCXByaXZhdGUgYm9vbGVhbiBjaGVja0ZhY3Rvcmllc0xpc3RGb3JJZGVudGl0eShMaXN0IGZhY3RvcmllcywgTGlzdCBuZXdGYWN0b3JpZXMpIHsKLQkJYm9vbGVhbiByZXN1bHQgPSB0cnVlOwotCQlpZiAoZmFjdG9yaWVzLnNpemUoKSAhPSBuZXdGYWN0b3JpZXMuc2l6ZSgpKSB7Ci0JCQlyZXN1bHQgPSBmYWxzZTsKLQkJfQotCQllbHNlIHsKLQkJCS8vIG5uZWQgbm90IGJlIGlkZW50aWNhbCwgbm9yIHNhbWUgb3JkZXIKLQkJCS8vCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBmYWN0b3JpZXMuc2l6ZSgpOyBpKyspIHsKLQkJCS8vCQkJCWlmICghKGZhY3Rvcmllcy5nZXQoaSkgPT0gbmV3RmFjdG9yaWVzLmdldChpKSkpIHsKLQkJCS8vCQkJCQlyZXN1bHQgPSBmYWxzZTsKLQkJCS8vCQkJCQlicmVhazsKLQkJCS8vCQkJCX0KLQkJCS8vCQkJfQotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIGNoZWNrRmFjdG9yaWVzTGlzdEZvckVxdWl2YWxlbmNlKExpc3QgZmFjdG9yaWVzLCBMaXN0IG5ld0ZhY3RvcmllcykgewotCQlib29sZWFuIHJlc3VsdCA9IHRydWU7Ci0JCWlmIChmYWN0b3JpZXMuc2l6ZSgpICE9IG5ld0ZhY3Rvcmllcy5zaXplKCkpIHsKLQkJCXJlc3VsdCA9IGZhbHNlOwotCQl9Ci0JCWVsc2UgewotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBmYWN0b3JpZXMuc2l6ZSgpOyBpKyspIHsKLQkJCQlpZiAoIWZhY3Rvcmllcy5nZXQoaSkuZ2V0Q2xhc3MoKS5lcXVhbHMobmV3RmFjdG9yaWVzLmdldChpKS5nZXRDbGFzcygpKSkgewotCQkJCQlyZXN1bHQgPSBmYWxzZTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0KLQlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlU3RydWN0dXJlZE1vZGVsSFRNTCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCS8vIEZpcnN0IG1ha2UgKGVtcHR5KSBzdHJ1Y3R1cmVkRG9jdW1lbnQKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbW9kZWxNYW5hZ2VyLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9ySFRNTC5Db250ZW50VHlwZUlEX0hUTUwpOwotCQlhc3NlcnRUcnVlKCJtb2RlbCBjb3VsZCBub3QgYmUgY3JlYXRlZCEiLCBtb2RlbCAhPSBudWxsKTsKLQotCQlBcnJheUxpc3QgZmFjdG9yaWVzID0gKEFycmF5TGlzdCkgbW9kZWwuZ2V0RmFjdG9yeVJlZ2lzdHJ5KCkuZ2V0RmFjdG9yaWVzKCk7Ci0JCWZhY3RvcmllcyA9IChBcnJheUxpc3QpIGZhY3Rvcmllcy5jbG9uZSgpOwotCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgY2xvbmVkTW9kZWwgPSBtb2RlbC5uZXdJbnN0YW5jZSgpOwotCQlhc3NlcnRUcnVlKCJjbG9uZWQgbW9kZWwgY291bGQgbm90IGJlIGNyZWF0ZWQhIiwgY2xvbmVkTW9kZWwgIT0gbnVsbCk7Ci0JCS8vIG1ha2Ugc3VyZSB0aGUgY3JpdGljYWwgdmFyaWFibGVzIGFyZSBjb3JyZWN0LgotCi0JCUFycmF5TGlzdCBuZXdGYWN0b3JpZXMgPSAoQXJyYXlMaXN0KSBjbG9uZWRNb2RlbC5nZXRGYWN0b3J5UmVnaXN0cnkoKS5nZXRGYWN0b3JpZXMoKTsKLQkJbmV3RmFjdG9yaWVzID0gKEFycmF5TGlzdCkgbmV3RmFjdG9yaWVzLmNsb25lKCk7Ci0KLQkJYm9vbGVhbiBwYXNzZWQgPSBjaGVja0ZhY3Rvcmllc0xpc3RGb3JJZGVudGl0eShmYWN0b3JpZXMsIG5ld0ZhY3Rvcmllcyk7Ci0KLQkJYXNzZXJ0VHJ1ZSgibmV3SW5zdGFuY2Ugb2Ygc3RydWN0dXJlZCBtb2RlbCBpcyBub3QgY29ycmVjdCIsIHBhc3NlZCk7Ci0KLQkJLy8gTm93LCBhc3NpZ25pbmcgc29tZSBjb250ZW50IHNob3VsZG4ndCBjaGFuZ2UgdGhlIGZhY3RvcmllcwotCQljbG9uZWRNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXRUZXh0KHRoaXMsICI8c2FtcGxlPiB0ZXh0Iik7Ci0JCUFycmF5TGlzdCB0d29GYWN0b3JpZXMgPSAoQXJyYXlMaXN0KSBjbG9uZWRNb2RlbC5nZXRGYWN0b3J5UmVnaXN0cnkoKS5nZXRGYWN0b3JpZXMoKTsKLQkJdHdvRmFjdG9yaWVzID0gKEFycmF5TGlzdCkgdHdvRmFjdG9yaWVzLmNsb25lKCk7Ci0KLQkJcGFzc2VkID0gY2hlY2tGYWN0b3JpZXNMaXN0Rm9ySWRlbnRpdHkoZmFjdG9yaWVzLCBuZXdGYWN0b3JpZXMpOwotCQlhc3NlcnRUcnVlKCJuZXdJbnN0YW5jZSBvZiBzdHJ1Y3R1cmVkIG1vZGVsIGlzIG5vdCBjb3JyZWN0IiwgcGFzc2VkKTsKLQotCX0KLQotCXByaXZhdGUgTW9kZWxRdWVyeSBnZXRFbWJlZGRlZE1vZGVsUXVlcnkoTm9kZSBub2RlKSB7Ci0JCU1vZGVsUXVlcnkgZW1iZWRkZWRNb2RlbFF1ZXJ5ID0gbnVsbDsKLQotCQlpZiAobm9kZSBpbnN0YW5jZW9mIElOb2RlTm90aWZpZXIpIHsgCi0JCQlOb2RlIG93bmVyTm9kZSA9IG5vZGUuZ2V0T3duZXJEb2N1bWVudCgpOwotCQkJaWYgKG93bmVyTm9kZSA9PSBudWxsKSB7Ci0JCQkJLy8gdGhlbiBtdXN0IGJlIHRoZSBkb2N1bWVudCBpdHNlbGYKLQkJCQlvd25lck5vZGUgPSBub2RlOyAKLQkJCX0KLQkJCVBhZ2VEaXJlY3RpdmVBZGFwdGVyIHBhZ2VEaXJlY3RpdmVBZGFwdGVyID0gKFBhZ2VEaXJlY3RpdmVBZGFwdGVyKSAoKElOb2RlTm90aWZpZXIpIG93bmVyTm9kZSkuZ2V0QWRhcHRlckZvcihQYWdlRGlyZWN0aXZlQWRhcHRlci5jbGFzcyk7Ci0JCQlpZiAocGFnZURpcmVjdGl2ZUFkYXB0ZXIgIT0gbnVsbCkgewotCi0JCQkJU3RyaW5nIGVmZmVjdGl2ZUNvbnRlbnRUeXBlID0gbnVsbDsKLQkJCQlNb2RlbFF1ZXJ5IHBvdGVudGlhbE1vZGVsUXVlcnlPYmplY3QgPSBudWxsOwotCi0JCQkJU3RyaW5nIGZhbWlseUlkID0gcGFnZURpcmVjdGl2ZUFkYXB0ZXIuZ2V0RW1iZWRkZWRUeXBlKCkuZ2V0RmFtaWx5SWQoKTsKLQkJCQkvL2lmIChDb250ZW50VHlwZUZhbWlseUZvckhUTUwuSFRNTF9GQU1JTFkuZXF1YWxzKGZhbWlseUlkKSkgewotCQkJCWlmICgib3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5jb250ZW50ZmFtaWx5Lmh0bWwiLmVxdWFscyhmYW1pbHlJZCkpIHsKLQkJCQkJZWZmZWN0aXZlQ29udGVudFR5cGUgPSAidGV4dC9odG1sIjsKLQkJCQl9Ci0JCQkJZWxzZSB7Ci0JCQkJCWVmZmVjdGl2ZUNvbnRlbnRUeXBlID0gcGFnZURpcmVjdGl2ZUFkYXB0ZXIuZ2V0Q29udGVudFR5cGUoKTsKLQkJCQl9Ci0JCQkJCi0JCQkJcG90ZW50aWFsTW9kZWxRdWVyeU9iamVjdCA9IChNb2RlbFF1ZXJ5KSBlbWJlZGRlZE1vZGVsUXVlcmllcy5nZXQoZWZmZWN0aXZlQ29udGVudFR5cGUpOwotCQkJCQotCQkJCWlmIChwb3RlbnRpYWxNb2RlbFF1ZXJ5T2JqZWN0ID09IG51bGwpIHsKLQkJCQkJTW9kZWxRdWVyeUFkYXB0ZXIgZW1iZWRkZWRBZGFwdGVyID0gKE1vZGVsUXVlcnlBZGFwdGVyKSBwYWdlRGlyZWN0aXZlQWRhcHRlci5hZGFwdCgoSU5vZGVOb3RpZmllcikgbm9kZSwgTW9kZWxRdWVyeUFkYXB0ZXIuY2xhc3MpOwotCQkJCQlpZiAoZW1iZWRkZWRBZGFwdGVyICE9IG51bGwpIHsKLQkJCQkJCS8vIHdlIHdpbGwgY2FjaGUgb25lIG1vZGVsIHF1ZXJ5IHBlciBjb250ZW50IHR5cGUKLQkJCQkJCWVtYmVkZGVkTW9kZWxRdWVyeSA9IGVtYmVkZGVkQWRhcHRlci5nZXRNb2RlbFF1ZXJ5KCk7Ci0JCQkJCQllbWJlZGRlZE1vZGVsUXVlcmllcy5wdXQoZWZmZWN0aXZlQ29udGVudFR5cGUsIGVtYmVkZGVkTW9kZWxRdWVyeSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJZWxzZSB7Ci0JCQkJCWVtYmVkZGVkTW9kZWxRdWVyeSA9IHBvdGVudGlhbE1vZGVsUXVlcnlPYmplY3Q7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiBlbWJlZGRlZE1vZGVsUXVlcnk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENyZWF0ZVN0cnVjdHVyZWRNb2RlbEpTUFhNTCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCS8vIEZpcnN0IG1ha2UgKGVtcHR5KSBzdHJ1Y3R1cmVkRG9jdW1lbnQKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbW9kZWxNYW5hZ2VyLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9ySlNQLkNvbnRlbnRUeXBlSURfSlNQKTsKLQkJYXNzZXJ0VHJ1ZSgibW9kZWwgY291bGQgbm90IGJlIGNyZWF0ZWQhIiwgbW9kZWwgIT0gbnVsbCk7Ci0JCi0JCi0JCi0JCi0JCS8vIE5vdywgYXNzaWduaW5nIHVzZSBhIHBhZ2UgZGlyZWN0aXZlLCBidXQgbGVhdmluZyBlbWJlZGRlZCB0eXBlIHRoZSBzYW1lIGFzIGRlZmF1bHQKLQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0VGV4dCh0aGlzLCAiPCUtLSBrZWVwIEpTUCBwYWdlIGNvbXBpbGVyIGZyb20gZ2VuZXJhdGluZyBjb2RlIHRoYXQgYWNjZXNzZXMgdGhlIHNlc3Npb24gLS0lPlxuIiArIAotCQkJCSI8JUAgcGFnZSBzZXNzaW9uPVwiZmFsc2VcIiAgY29udGVudFR5cGU9XCJ0ZXh0L3htbDsgY2hhcnNldD1JU08tODg1OS0xXCIgJT5cbiIgKyAKLQkJCQkiXG4iICsgCi0JCQkJIjwhLS0gbG9hZCBXUFMgcG9ydGxldCB0YWcgbGlicmFyeSBhbmQgaW5pdGlhbGl6ZSBvYmplY3RzIC0tPlxuIiArIAotCQkJCSI8JUAgdGFnbGliIHVyaT1cIi9XRUItSU5GL3RsZC9wb3J0bGV0LnRsZFwiIHByZWZpeD1cInBvcnRsZXRBUElcIiAlPlxuIiArIAotCQkJCSI8cG9ydGxldEFQSTppbml0IC8+IFxuIiArIAotCQkJCSJcbiIgKyAKLQkJCQkiPCUtLSBSZXBsYWNlIHRoZSBuYW1lIG9mIHRoZSBsYXlvdXQgc3BlY2lmaWVkIGJ5IHRoZSBsYXlvdXROYW1lIGF0dHJpYnV0ZSBvZiB0aGUgY2FudmFzIGVsZW1lbnQgYmVsb3cgd2l0aCB0aGUgbGF5b3V0IG5hbWUgZm9yIHlvdXIgcG9ydGxldC4gLS0lPlxuIiArIAotCQkJCSI8Y2FudmFzIHhtbG5zID1cImh0dHA6Ly93d3cudm9sYW50aXMuY29tL3htbG5zL21hcmxpbi1jZG1cIiBcbiIgKyAKLQkJCQkiICAgICAgICB4bWxuczp4c2k9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZVwiIFxuIiArIAotCQkJCSIgICAgICAgIGxheW91dE5hbWU9XCIvc2FtcGxlX2xheW91dC5tbHl0XCIgXG4iICsgCi0JCQkJIiAgICAgICAgdHlwZT1cInBvcnRsZXRcIiA+XG4iICsgCi0JCQkJIlxuIiArIAotCQkJCSJcbiIgKyAKLQkJCQkiPCUtLSBTcGVjaWZ5IHRoZSBwYW5lIG5hbWUgZnJvbSB5b3VyIGxheW91dCBwb2xpY3kgYXMgdGhlIHZhbHVlIGZvciB0aGUgbmFtZSBhdHRyaWJ1dGUgb2YgdGhlIHBhbmUgZWxlbWVudCBiZWxvdyAgLS0lPlxuIiArIAotCQkJCSI8cGFuZSBuYW1lPVwic2FtcGxlX3BhbmVcIj5cbiIgKyAKLQkJCQkiICAgIDxwPkhlbGxvITwvcD5cbiIgKyAKLQkJCQkiICAgIDxwPlRoaXMgaXMgYW4gWERJTUUgPGI+dmlldyBtb2RlPC9iPiBwYWdlIC4gWW91IGhhdmUgdG8gZWRpdCB0aGlzIHBhZ2UgdG8gY3VzdG9taXplIGl0IGZvciB5b3VyIG93biB1c2UuPGJyLz48YnIvPlxuIiArIAotCQkJCSIgICAgVGhlIHNvdXJjZSBmaWxlIGZvciB0aGlzIHBhZ2UgaXMgXCIvV2ViIENvbnRlbnQvdGVzdHBvcnRsZXRfbGVnYWN5L2pzcC94ZGltZS9UZW1wbGF0ZUxlZ2FjeVBvcnRsZXRWaWV3LmpzcFwiLlxuIiArIAotCQkJCSI8L3A+XG4iICsgCi0JCQkJIlxuIiArIAotCQkJCSI8YnIvPlxuIiArIAotCQkJCSJUaGlzIGlzIGltYWdlIDEgICAgXG4iICsgCi0JCQkJIjxpbWcgc3JjPVwiL3Bhdy5taW1nXCIgYWx0PVwibm9pbWdcIiAvPlxuIiArIAotCQkJCSJcbiIgKyAKLQkJCQkiPGJyLz5cbiIgKyAKLQkJCQkiVGhpcyBpcyBpbWFnZSAyICAgIFxuIiArIAotCQkJCSI8aW1nIHNyYz1cInBhdy5taW1nXCIgYWx0PVwibm9pbWdcIiAvPlxuIiArIAotCQkJCSJcbiIgKyAKLQkJCQkiPC9wYW5lPlxuIiArIAotCQkJCSI8L2NhbnZhcz4iKTsKLQkKLQkJCWNoZWNrRW1iZWRkZWRUeXBlKG1vZGVsLCBFbWJlZGRlZFhNTC5jbGFzcyk7Ci0JCQljaGVja01vZGVsUXVlcnkobW9kZWwsIEpTUE1vZGVsUXVlcnlJbXBsLmNsYXNzKTsKLQkJCWNoZWNrRW1iZWRkZWRNb2RlbFF1ZXJ5KG1vZGVsLCBKU1BNb2RlbFF1ZXJ5QWRhcHRlckltcGwuY2xhc3MsIEpTUE1vZGVsUXVlcnlJbXBsLmNsYXNzLCBYTUxNb2RlbFF1ZXJ5SW1wbC5jbGFzcyk7Ci0JCQkKLQkJCQotCQkJCi0JCQkKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlU3RydWN0dXJlZE1vZGVsSlNQV01MKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJLy8gRmlyc3QgbWFrZSAoZW1wdHkpIHN0cnVjdHVyZWREb2N1bWVudAotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBtb2RlbE1hbmFnZXIuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JKU1AuQ29udGVudFR5cGVJRF9KU1ApOwotCQlhc3NlcnRUcnVlKCJtb2RlbCBjb3VsZCBub3QgYmUgY3JlYXRlZCEiLCBtb2RlbCAhPSBudWxsKTsKLQkKLQkKLQkKLQkKLQkJLy8gTm93LCBhc3NpZ25pbmcgdXNlIGEgcGFnZSBkaXJlY3RpdmUsIGJ1dCBsZWF2aW5nIGVtYmVkZGVkIHR5cGUgdGhlIHNhbWUgYXMgZGVmYXVsdAotCQltb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXRUZXh0KHRoaXMsICI8JUAgcGFnZSBjb250ZW50VHlwZT1cInRleHQvdm5kLndhcC53bWxcIiAlPlxuIiArIAotCQkJCSJcbiIgKyAKLQkJCQkiICA8anNwOnVzZUJlYW4gaWQ9XCJiZWFuSW5zdGFuY2VOYW1lXCIgc2NvcGU9XCJzZXNzaW9uXCIgY2xhc3M9XCJwYWNrYWdlLmNsYXNzXCIgLz5cbiIgKyAKLQkJCQkiICA8anNwOmdldFByb3BlcnR5IG5hbWU9XCJiZWFuSW5zdGFuY2VOYW1lXCIgcHJvcGVydHk9XCIqXCIgLz5cbiIgKyAKLQkJCQkiXG4iICsgCi0JCQkJIiAgPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwidXRmLThcIj8+XG4iICsgCi0JCQkJIiAgPCFET0NUWVBFIHdtbCBQVUJMSUMgXCItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjMvL0VOXCIgXCJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sMTMuZHRkXCI+XG4iICsgCi0JCQkJIiAgPHdtbD5cbiIgKyAKLQkJCQkiXG4iICsgCi0JCQkJIiAgICA8dGVtcGxhdGU+XG4iICsgCi0JCQkJIiAgICAgIDwhLS0gVGVtcGxhdGUgaW1wbGVtZW50YXRpb24gaGVyZS4gLS0+XG4iICsgCi0JCQkJIiAgICAgIDxkbyB0eXBlPVwicHJldlwiPjxwcmV2Lz48L2RvPlxuIiArIAotCQkJCSIgICAgPC90ZW1wbGF0ZT5cbiIgKyAKLQkJCQkiXG4iICsgCi0JCQkJIiAgPCVcbiIgKyAKLQkJCQkiICBpZiAoc2Vzc2lvbi5pc05ldygpIHx8IHNlc3Npb24uZ2V0QXR0cmlidXRlKFwidXNlcmlkXCIpPT1udWxsICkge1xuIiArIAotCQkJCSIgICU+XG4iICsgCi0JCQkJIiAgICA8Y2FyZCBpZD1cImNhcmQxXCIgdGl0bGU9XCJDYXJkICMxXCI+XG4iICsgCi0JCQkJIlxuIiArIAotCQkJCSIgICAgICA8ZG8gdHlwZT1cInVua25vd25cIiBsYWJlbD1cIk5leHRcIj5cbiIgKyAKLQkJCQkiICAgICAgICA8Z28gaHJlZj1cIiNjYXJkMlwiLz5cbiIgKyAKLQkJCQkiICAgICAgPC9kbz5cbiIgKyAKLQkJCQkiICAgICAgPHAgYWxpZ249XCJjZW50ZXJcIj5cbiIgKyAKLQkJCQkiICAgICAgICA8YmlnPjxiPkZpcnN0IENhcmQ8L2I+PC9iaWc+XG4iICsgCi0JCQkJIiAgICAgIDwvcD5cbiIgKyAKLQkJCQkiICAgIDwvY2FyZD5cbiIgKyAKLQkJCQkiXG4iICsgCi0JCQkJIiAgPCVcbiIgKyAKLQkJCQkiICB9IGVsc2Uge1xuIiArIAotCQkJCSIgICU+XG4iICsgCi0JCQkJIiAgICA8Y2FyZCBpZD1cImNhcmQyXCIgdGl0bGU9XCJDYXJkICMyXCI+XG4iICsgCi0JCQkJIlxuIiArIAotCQkJCSIgICAgICA8cCBhbGlnbj1cImNlbnRlclwiPlxuIiArIAotCQkJCSIgICAgICAgIDxiaWc+PGI+IDwlPSBiZWFuSW5zdGFuY2VOYW1lLmdldFVzZXJpZCgpICU+IDwvYj48L2JpZz5cbiIgKyAKLQkJCQkiICAgICAgPC9wPlxuIiArIAotCQkJCSIgICAgPC9jYXJkPlxuIiArIAotCQkJCSIgIDwlXG4iICsgCi0JCQkJIiAgfVxuIiArIAotCQkJCSIgICU+XG4iICsgCi0JCQkJIiAgPC93bWw+Iik7Ci0JCi0JCQljaGVja0VtYmVkZGVkVHlwZShtb2RlbCwgRW1iZWRkZWRIVE1MLmNsYXNzKTsKLQkJCWNoZWNrTW9kZWxRdWVyeShtb2RlbCwgSlNQTW9kZWxRdWVyeUltcGwuY2xhc3MpOwotCQkJY2hlY2tFbWJlZGRlZE1vZGVsUXVlcnkobW9kZWwsIEpTUE1vZGVsUXVlcnlBZGFwdGVySW1wbC5jbGFzcywgSlNQTW9kZWxRdWVyeUltcGwuY2xhc3MsIEhUTUxNb2RlbFF1ZXJ5SW1wbC5jbGFzcyk7Ci0JCQkKLQkJCQotCQkJCi0JCQkKLQl9Ci0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9UZXN0TW9kZWxFbWJlZGRlZENvbnRlbnRUeXBlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL1Rlc3RNb2RlbEVtYmVkZGVkQ29udGVudFR5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2FkZmFiNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL1Rlc3RNb2RlbEVtYmVkZGVkQ29udGVudFR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0czsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuUGFnZURpcmVjdGl2ZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JKU1A7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9ySFRNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwubHRrLm1vZGVsaGFuZGxlci5FbWJlZGRlZFR5cGVIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5tb2RlbGhhbmRsZXIuTW9kZWxIYW5kbGVyVXRpbGl0eTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU5vZGVOb3RpZmllcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvclhNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotCi0vKioKLSAqIEBhdXRob3IgZGF2aWR3Ci0gKiAKLSAqIFRvIGNoYW5nZSB0aGlzIGdlbmVyYXRlZCBjb21tZW50IGVkaXQgdGhlIHRlbXBsYXRlIHZhcmlhYmxlICJ0eXBlY29tbWVudCI6Ci0gKiBXaW5kb3c+UHJlZmVyZW5jZXM+SmF2YT5UZW1wbGF0ZXMuIFRvIGVuYWJsZSBhbmQgZGlzYWJsZSB0aGUgY3JlYXRpb24gb2YKLSAqIHR5cGUgY29tbWVudHMgZ28gdG8gV2luZG93PlByZWZlcmVuY2VzPkphdmE+Q29kZSBHZW5lcmF0aW9uLgotICovCi1wdWJsaWMgY2xhc3MgVGVzdE1vZGVsRW1iZWRkZWRDb250ZW50VHlwZSBleHRlbmRzIFRlc3RDYXNlIHsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBUZXN0TW9kZWxDbG9uZS4KLQkgKi8KLQlwdWJsaWMgVGVzdE1vZGVsRW1iZWRkZWRDb250ZW50VHlwZShTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBUZXN0IGdldFRlc3QoKSB7Ci0JCXJldHVybiBuZXcgVGVzdE1vZGVsRW1iZWRkZWRDb250ZW50VHlwZSgidGVzdFN0cnVjdHVyZWRNb2RlbEVtYmVkZGVkSlNQQ2hhbmdlIik7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgY2hlY2tFbWJlZGRlZFR5cGUoSVN0cnVjdHVyZWRNb2RlbCBjbG9uZWRNb2RlbCwgT2JqZWN0IGV4cGVjdGVkVHlwZSkgewotCQlEb2N1bWVudCBkb2MgPSAoKElET01Nb2RlbCkgY2xvbmVkTW9kZWwpLmdldERvY3VtZW50KCk7Ci0JCVBhZ2VEaXJlY3RpdmVBZGFwdGVyIGVtYmVkZGVkVHlwZUFkYXB0ZXIgPSAoUGFnZURpcmVjdGl2ZUFkYXB0ZXIpICgoSU5vZGVOb3RpZmllcikgZG9jKS5nZXRBZGFwdGVyRm9yKFBhZ2VEaXJlY3RpdmVBZGFwdGVyLmNsYXNzKTsKLQkJYXNzZXJ0Tm90TnVsbCgiY2xvbmVkIG1vZGVsIGRpZCBub3QgaGF2ZSBlbWJlZGRlZCBhZGFwdGVyIiwgZW1iZWRkZWRUeXBlQWRhcHRlcik7Ci0KLQkJRW1iZWRkZWRUeXBlSGFuZGxlciBlbWJlZGRlZEhhbmRsZXIgPSBlbWJlZGRlZFR5cGVBZGFwdGVyLmdldEVtYmVkZGVkVHlwZSgpOwotCQlhc3NlcnROb3ROdWxsKCJjbG9uZWQgbW9kZWwgZGlkIG5vdCBoYXZlIGVtYmVkZGVkIGhhbmRsZXIiLCBlbWJlZGRlZEhhbmRsZXIpOwotCi0JCWFzc2VydFRydWUoImNsb25lZCBtb2RlbCBlbWJlZGRlZEhhbmRsZXIgaXMgd3JvbmcgdHlwZSIsIGVtYmVkZGVkSGFuZGxlci5lcXVhbHMoZXhwZWN0ZWRUeXBlKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFN0cnVjdHVyZWRNb2RlbEVtYmVkZGVkWE1MKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJLy8gRmlyc3QgbWFrZSAoZW1wdHkpIHN0cnVjdHVyZWREb2N1bWVudAotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBtb2RlbE1hbmFnZXIuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwpOwotCQlhc3NlcnRUcnVlKCJtb2RlbCBjb3VsZCBub3QgYmUgY3JlYXRlZCEiLCBtb2RlbCAhPSBudWxsKTsKLQotCQkvLyBYTUwgc2hvdWxkIE5PVCBoYXZlIGFuIGVtYmVkZGVkIHR5cGUKLQkJRG9jdW1lbnQgZG9jID0gKChJRE9NTW9kZWwpIG1vZGVsKS5nZXREb2N1bWVudCgpOwotCQlFbWJlZGRlZFR5cGVIYW5kbGVyIGVtYmVkZGVkSGFuZGxlciA9IChFbWJlZGRlZFR5cGVIYW5kbGVyKSAoKElOb2RlTm90aWZpZXIpIGRvYykuZ2V0QWRhcHRlckZvcihFbWJlZGRlZFR5cGVIYW5kbGVyLmNsYXNzKTsKLQkJYXNzZXJ0VHJ1ZSgiZW1iZWRlZEhhbmxkZXIgc2hvdWxkIGJlIG51bGwgZm9yIFhNTCIsIGVtYmVkZGVkSGFuZGxlciA9PSBudWxsKTsKLQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTdHJ1Y3R1cmVkTW9kZWxFbWJlZGRlZEhUTUwoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQkvLyBGaXJzdCBtYWtlIChlbXB0eSkgc3RydWN0dXJlZERvY3VtZW50Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG1vZGVsTWFuYWdlci5jcmVhdGVVbk1hbmFnZWRTdHJ1Y3R1cmVkTW9kZWxGb3IoQ29udGVudFR5cGVJZEZvckhUTUwuQ29udGVudFR5cGVJRF9IVE1MKTsKLQkJYXNzZXJ0VHJ1ZSgibW9kZWwgY291bGQgbm90IGJlIGNyZWF0ZWQhIiwgbW9kZWwgIT0gbnVsbCk7Ci0KLQkJLy8gc2hvdWxkIE5PVCBoYXZlIGFuIGVtYmVkZGVkIHR5cGUKLQkJRG9jdW1lbnQgZG9jID0gKChJRE9NTW9kZWwpIG1vZGVsKS5nZXREb2N1bWVudCgpOwotCQlFbWJlZGRlZFR5cGVIYW5kbGVyIGVtYmVkZGVkSGFuZGxlciA9IChFbWJlZGRlZFR5cGVIYW5kbGVyKSAoKElOb2RlTm90aWZpZXIpIGRvYykuZ2V0QWRhcHRlckZvcihFbWJlZGRlZFR5cGVIYW5kbGVyLmNsYXNzKTsKLQkJYXNzZXJ0VHJ1ZSgiZW1iZWRlZEhhbmxkZXIgc2hvdWxkIGJlIG51bGwgZm9yIEhUTUwiLCBlbWJlZGRlZEhhbmRsZXIgPT0gbnVsbCk7Ci0KLQl9Ci0KLQlwcm90ZWN0ZWQgSVN0cnVjdHVyZWRNb2RlbCBkb1N0cnVjdHVyZWRNb2RlbEVtYmVkZGVkSlNQKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJLy8gRmlyc3QgbWFrZSAoZW1wdHkpIHN0cnVjdHVyZWREb2N1bWVudAotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBtb2RlbE1hbmFnZXIuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JKU1AuQ29udGVudFR5cGVJRF9KU1ApOwotCQlhc3NlcnRUcnVlKCJtb2RlbCBjb3VsZCBub3QgYmUgY3JlYXRlZCEiLCBtb2RlbCAhPSBudWxsKTsKLQotCQkvLyBzaG91bGQgaGF2ZSBhbiBlbWJlZGRlZCB0eXBlCi0JCURvY3VtZW50IGRvYyA9ICgoSURPTU1vZGVsKSBtb2RlbCkuZ2V0RG9jdW1lbnQoKTsKLQkJUGFnZURpcmVjdGl2ZUFkYXB0ZXIgZW1iZWRkZWRIYW5kbGVyID0gKFBhZ2VEaXJlY3RpdmVBZGFwdGVyKSAoKElOb2RlTm90aWZpZXIpIGRvYykuZ2V0QWRhcHRlckZvcihQYWdlRGlyZWN0aXZlQWRhcHRlci5jbGFzcyk7Ci0JCWFzc2VydFRydWUoImVtYmVkZWRIYW5sZGVyIHNob3VsZCBOT1QgYmUgbnVsbCBmb3IgSlNQIiwgZW1iZWRkZWRIYW5kbGVyICE9IG51bGwpOwotCi0JCS8vIGVtYmVkZGVkIHR5cGUgc2hvdWxkIGJlIEhUTUwgc2luY2Ugbm8gY29udGVudAotCQljaGVja0VtYmVkZGVkVHlwZShtb2RlbCwgTW9kZWxIYW5kbGVyVXRpbGl0eS5nZXREZWZhdWx0RW1iZWRkZWRUeXBlKCkpOwotCi0JCVN0cmluZyB0ZXN0Q29udGVudCA9ICI8JUAgcGFnZSBjb250ZW50VHlwZT1cInRleHQvaHRtbFwiICU+IjsKLQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkucmVwbGFjZVRleHQodGhpcywgMCwgMCwgdGVzdENvbnRlbnQpOwotCQlhc3NlcnRUcnVlKCJyZWluaXQgc2hvdWxkIE5PVCBiZSBuZWVkZWQgaW4gdGhpcyBjYXNlIiwgIW1vZGVsLmlzUmVpbml0aWFsaXphdGlvbk5lZWRlZCgpKTsKLQotCQkvLyBlbWJlZGRlZCB0eXBlIHNob3VsZCBTVElMTCBiZSBIVE1MIHNpbmNlIG5vIGNvbnRlbnRUeXBlIHdhcwotCQkvLyB0ZXh0L2h0bWwKLQkJY2hlY2tFbWJlZGRlZFR5cGUobW9kZWwsIE1vZGVsSGFuZGxlclV0aWxpdHkuZ2V0RGVmYXVsdEVtYmVkZGVkVHlwZSgpKTsKLQotCQlyZXR1cm4gbW9kZWw7Ci0JCS8vCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFN0cnVjdHVyZWRNb2RlbEVtYmVkZGVkSlNQKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJZG9TdHJ1Y3R1cmVkTW9kZWxFbWJlZGRlZEpTUCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTdHJ1Y3R1cmVkTW9kZWxFbWJlZGRlZEpTUENoYW5nZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0KLQkJLy8gc3RhcnQgd2l0aCB0aGUgZnVsbCB0ZXN0IGNhc2UKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGRvU3RydWN0dXJlZE1vZGVsRW1iZWRkZWRKU1AoKTsKLQkJLy8gY2hhbmdlICJodG1sIiB0byAieG1sIgotCQltb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5yZXBsYWNlVGV4dCh0aGlzLCAyNywgNCwgInhtbCIpOwotCQkvLyB3aXRoIHJlaW5pdCBpbiBYTUwgbW9kZWwgLi4uIGl0cyBhbHJlYWR5IGJlZW4gcmUtaW5pdGlhbGl6ZWQKLQkJLy8gYXNzZXJ0VHJ1ZSgicmVpbml0IFNIT1VMRCBiZSBuZWVkZWQgaW4gdGhpcyBjYXNlIiwKLQkJLy8gbW9kZWwuaXNSZWluaWl0aWFsaXphdGlvbk5lZWRlZCgpKTsKLQotCQlpZiAobW9kZWwuaXNSZWluaXRpYWxpemF0aW9uTmVlZGVkKCkpIHsKLQkJCW1vZGVsLnJlaW5pdCgpOwotCQl9Ci0KLQkJLy8gZW1iZWRkZWQgdHlwZSBzaG91bGQgbm93IGJlIFhNTAotCQljaGVja0VtYmVkZGVkVHlwZShtb2RlbCwgTW9kZWxIYW5kbGVyVXRpbGl0eS5nZXRFbWJlZGRlZENvbnRlbnRUeXBlRm9yKCJ0ZXh0L3htbCIpKTsKLQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvY29udGVudGFzc2lzdC9CZWFuSW5mb1Byb3ZpZGVyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9jb250ZW50YXNzaXN0L0JlYW5JbmZvUHJvdmlkZXJUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5MzYwOTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9jb250ZW50YXNzaXN0L0JlYW5JbmZvUHJvdmlkZXJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuY29udGVudGFzc2lzdDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUphdmFFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklKYXZhUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JT3BlbmFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSVBhY2thZ2VGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JUGFja2FnZUZyYWdtZW50Um9vdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JUGFyZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFNb2RlbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuQmVhbkluZm9Qcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuSUphdmFQcm9wZXJ0eURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy51dGlsLkZpbGVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMudXRpbC5Qcm9qZWN0VW56aXBVdGlsaXR5OwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kuc2VydmljZS5kYXRhbG9jYXRpb24uTG9jYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5JT3ZlcndyaXRlUXVlcnk7Ci0KLS8qKgotICogVGhpcyBjbGFzcyB0ZXN0cyB0aGUgQmVhbkluZm9Qcm92aWRlci4gQ3VycmVudGx5IHRlc3Qgd29ya3NwYWNlIE1VU1QgcG9pbnQKLSAqIHRvIHRoZSBzcGVjaWZpYyBvbmUgZm9yIHRoaXMgdGVzdC4KLSAqIAotICogQGF1dGhvciBwYXZlcnkKLSAqLwotcHVibGljIGNsYXNzIEJlYW5JbmZvUHJvdmlkZXJUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCWNsYXNzIE92ZXJ3cml0ZU5vbmUgaW1wbGVtZW50cyBJT3ZlcndyaXRlUXVlcnkgewotCQlwdWJsaWMgU3RyaW5nIHF1ZXJ5T3ZlcndyaXRlKFN0cmluZyBwYXRoU3RyaW5nKSB7Ci0JCQlyZXR1cm4gSU92ZXJ3cml0ZVF1ZXJ5LkFMTDsKLQkJfQotCX0KLQotCXByaXZhdGUgSVJlc291cmNlIGZSZXNvdXJjZTsKLQlwcml2YXRlIEJlYW5JbmZvUHJvdmlkZXIgZlByb3ZpZGVyOwotCXByaXZhdGUgSGFzaFNldCBmQWxyZWFkeU9wZW4gPSBuZXcgSGFzaFNldCgpOwotCXByaXZhdGUgUHJvamVjdFVuemlwVXRpbGl0eSBmUHJvalV0aWwgPSBudWxsOwotCXByaXZhdGUgYm9vbGVhbiBmSXNTZXR1cCA9IGZhbHNlOwotCi0JcHVibGljIEJlYW5JbmZvUHJvdmlkZXJUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnNldFVwKCk7Ci0JCWlmICghdGhpcy5mSXNTZXR1cCkgewotCQkJaW5pdGlhbGl6ZVJlc291cmNlKCk7Ci0JCQl0aGlzLmZJc1NldHVwID0gdHJ1ZTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBpbml0aWFsaXplUmVzb3VyY2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZlByb2pVdGlsID0gbmV3IFByb2plY3RVbnppcFV0aWxpdHkoKTsKLQkJLy8gcm9vdCBvZiB3b3Jrc3BhY2UgZGlyZWN0b3J5Ci0JCUxvY2F0aW9uIHBsYXRmb3JtTG9jYXRpb24gPSBQbGF0Zm9ybS5nZXRJbnN0YW5jZUxvY2F0aW9uKCk7Ci0JCS8vIHBsYXRmb3JtIGxvY2F0aW9uIG1heSBiZSBudWxsIC0tIGRlcGVuZHMgb24gIm1vZGUiIG9mIHBsYXRmb3JtCi0JCWlmIChwbGF0Zm9ybUxvY2F0aW9uICE9IG51bGwpIHsKLQkJCUZpbGUgemlwRmlsZSA9IEZpbGVVdGlsLm1ha2VGaWxlRm9yKFByb2plY3RVbnppcFV0aWxpdHkuUFJPSkVDVF9aSVBTX0ZPTERFUiwgImJlYW5pbmZvX3Rlc3RzLnppcCIsIFByb2plY3RVbnppcFV0aWxpdHkuUFJPSkVDVF9aSVBTX0ZPTERFUik7Ci0JCQlmUHJvalV0aWwudW56aXBBbmRJbXBvcnQoemlwRmlsZSwgcGxhdGZvcm1Mb2NhdGlvbi5nZXRVUkwoKS5nZXRQYXRoKCkpOwotCQkJZlByb2pVdGlsLmluaXRKYXZhUHJvamVjdCgiQkVBTklORk8iKTsKLQkJCUlXb3Jrc3BhY2VSb290IHJvb3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpOwotCQkJU3RyaW5nIHdvcmtzcGFjZVJlbGF0aXZlTG9jYXRpb24gPSAiL0JFQU5JTkZPL0JFQU5fVEVTVFMvYmVhbkluZm9fdGVzdC5qc3AiOwotCQkJZlJlc291cmNlID0gcm9vdC5nZXRGaWxlKG5ldyBQYXRoKHdvcmtzcGFjZVJlbGF0aXZlTG9jYXRpb24pKTsKLQkJCUlKYXZhUHJvamVjdCBqYXZhUHJvaiA9IEphdmFDb3JlLmNyZWF0ZShmUmVzb3VyY2UuZ2V0UHJvamVjdCgpKTsKLQkJCW9wZW5QYXRoKGphdmFQcm9qKTsKLQkJfQotCX0KLQotCXByb3RlY3RlZCBGaWxlIGdldFNvdXJjZURpcmVjdG9yeShTdHJpbmcgYWJzb2x1dGVTb3VyY2VEaXJlY3RvcnlQYXRoKSB7Ci0JCUZpbGUgc291cmNlRGlyZWN0b3J5ID0gbmV3IEZpbGUoYWJzb2x1dGVTb3VyY2VEaXJlY3RvcnlQYXRoKTsKLQkJaWYgKCFzb3VyY2VEaXJlY3RvcnkuZXhpc3RzKCkgfHwgIXNvdXJjZURpcmVjdG9yeS5pc0RpcmVjdG9yeSgpKSB7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCQlyZXR1cm4gc291cmNlRGlyZWN0b3J5OwotCX0KLQotCXByaXZhdGUgdm9pZCBvcGVuUGF0aChJSmF2YVByb2plY3QgamF2YVByb2opIHsKLQkJdHJ5IHsKLQkJCWlmIChqYXZhUHJvai5leGlzdHMoKSAmJiAhamF2YVByb2ouaXNPcGVuKCkpIHsKLQkJCQlqYXZhUHJvai5vcGVuKG51bGwpOwotCQkJfQotCQkJSVBhY2thZ2VGcmFnbWVudFJvb3Qgcm9vdCA9IGphdmFQcm9qLmdldFBhY2thZ2VGcmFnbWVudFJvb3QoZlJlc291cmNlLmdldFByb2plY3QoKSk7Ci0JCQlpZiAoIXJvb3QuaXNPcGVuKCkpCi0JCQkJcm9vdC5vcGVuKG51bGwpOwotCQkJSVBhY2thZ2VGcmFnbWVudCBmcmFnID0gZ2V0UGFja2FnZUZyYWdtZW50KHJvb3QsICJCRUFOX1RFU1RTIik7Ci0JCQlvcGVuQWxsKGZyYWcpOwotCQkJZnJhZyA9IGdldFBhY2thZ2VGcmFnbWVudChyb290LCAib3JnIik7Ci0JCQlpZiAoZnJhZyAhPSBudWxsICYmICFmcmFnLmlzT3BlbigpKQotCQkJCW9wZW5BbGwoZnJhZyk7Ci0JCQlmcmFnID0gZ2V0UGFja2FnZUZyYWdtZW50KHJvb3QsICJvcmcuZWNsaXBzZSIpOwotCQkJaWYgKGZyYWcgIT0gbnVsbCAmJiAhZnJhZy5pc09wZW4oKSkKLQkJCQlvcGVuQWxsKGZyYWcpOwotCQkJZnJhZyA9IGdldFBhY2thZ2VGcmFnbWVudChyb290LCAib3JnLmVjbGlwc2UuanN0Iik7Ci0JCQlpZiAoZnJhZyAhPSBudWxsICYmICFmcmFnLmlzT3BlbigpKQotCQkJCW9wZW5BbGwoZnJhZyk7Ci0JCQlmcmFnID0gZ2V0UGFja2FnZUZyYWdtZW50KHJvb3QsICJvcmcuZWNsaXBzZS5qc3QuanNwIik7Ci0JCQlpZiAoZnJhZyAhPSBudWxsICYmICFmcmFnLmlzT3BlbigpKQotCQkJCW9wZW5BbGwoZnJhZyk7Ci0JCQlmcmFnID0gZ2V0UGFja2FnZUZyYWdtZW50KHJvb3QsICJvcmcuZWNsaXBzZS5qc3QuanNwLnVpIik7Ci0JCQlpZiAoZnJhZyAhPSBudWxsICYmICFmcmFnLmlzT3BlbigpKQotCQkJCW9wZW5BbGwoZnJhZyk7Ci0JCQlmcmFnID0gZ2V0UGFja2FnZUZyYWdtZW50KHJvb3QsICJvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzIik7Ci0JCQlpZiAoZnJhZyAhPSBudWxsICYmICFmcmFnLmlzT3BlbigpKQotCQkJCW9wZW5BbGwoZnJhZyk7Ci0JCX0KLQkJY2F0Y2ggKEphdmFNb2RlbEV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBJUGFja2FnZUZyYWdtZW50IGdldFBhY2thZ2VGcmFnbWVudChJUGFja2FnZUZyYWdtZW50Um9vdCByb290LCBTdHJpbmcgZnJhZ21lbnROYW1lKSB0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uIHsKLQkJSVBhY2thZ2VGcmFnbWVudCBmcmFnID0gbnVsbDsKLQkJSUphdmFFbGVtZW50W10gY2hpbGRyZW4gPSByb290LmdldENoaWxkcmVuKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHsKLQkJCWlmIChjaGlsZHJlbltpXS5nZXRFbGVtZW50TmFtZSgpLmVxdWFscyhmcmFnbWVudE5hbWUpKSB7Ci0JCQkJZnJhZyA9IChJUGFja2FnZUZyYWdtZW50KSBjaGlsZHJlbltpXTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZnJhZzsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgb3BlbkFsbChJSmF2YUVsZW1lbnQgamF2YUVsZW0pIHRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24gewotCQlpZiAoamF2YUVsZW0gaW5zdGFuY2VvZiBJT3BlbmFibGUpIHsKLQkJCWlmICghKChJT3BlbmFibGUpIGphdmFFbGVtKS5pc09wZW4oKSkKLQkJCQkoKElPcGVuYWJsZSkgamF2YUVsZW0pLm9wZW4obnVsbCk7Ci0JCX0KLQkJaWYgKGphdmFFbGVtIGluc3RhbmNlb2YgSVBhcmVudCAmJiAoKElQYXJlbnQpIGphdmFFbGVtKS5oYXNDaGlsZHJlbigpKSB7Ci0JCQlJSmF2YUVsZW1lbnRbXSBjaGlsZHJlbiA9ICgoSVBhcmVudCkgamF2YUVsZW0pLmdldENoaWxkcmVuKCk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7Ci0JCQkJaWYgKCFmQWxyZWFkeU9wZW4uY29udGFpbnMoY2hpbGRyZW5baV0uZ2V0RWxlbWVudE5hbWUoKSkpIHsKLQkJCQkJZkFscmVhZHlPcGVuLmFkZChjaGlsZHJlbltpXS5nZXRFbGVtZW50TmFtZSgpKTsKLQkJCQkJb3BlbkFsbChjaGlsZHJlbltpXSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEFsbCgpIHsKLQkJYmVhbk9uQ2xhc3NwYXRoKCk7Ci0JCWJlYW5JblByb2plY3QoKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgYmVhbk9uQ2xhc3NwYXRoKCkgewotCQkvLyBwYV9UT0RPIGRvbid0IHVzZSBKQnV0dG9uLCBwcm9wZXJ0aWVzIGNoYW5nZQotCQkvLyB1c2Ugc29tZXRoaW5nIG1vcmUgc3RhdGljCi0JCUlKYXZhUHJvcGVydHlEZXNjcmlwdG9yW10gZGVzY3JpcHRvcnMgPSBnZXRQcm92aWRlcigpLmdldFJ1bnRpbWVQcm9wZXJ0aWVzKGZSZXNvdXJjZSwgImphdmF4LnN3aW5nLkpCdXR0b24iKTsKLQkJLy8JCWFzc2VydEVxdWFscygiTnVtYmVyIG9mIHByb3BlcnRpZXMgZm9yIEpCdXR0b246IiwgMTIyLCBkZXNjcmlwdG9ycy5sZW5ndGgpOwotCQlhc3NlcnROb3ROdWxsKCJkZXNjcmlwdG9ycyBzaG91bGRuJ3QgYmUgbnVsbCIsIGRlc2NyaXB0b3JzKTsKLQotCQkvLwkJTGlzdCBnZXRPbmx5ID0gbmV3IEFycmF5TGlzdCgpOwotCQkvLwkJTGlzdCBzZXRPbmx5ID0gbmV3IEFycmF5TGlzdCgpOwotCQkvLwkJTGlzdCBib3RoID0gbmV3IEFycmF5TGlzdCgpOwotCQkvLwkJSUphdmFQcm9wZXJ0eURlc2NyaXB0b3IganBkID0gbnVsbDsKLQkJLy8JCWZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvcnMubGVuZ3RoOyBpKyspIHsKLQkJLy8JCQlqcGQgPSBkZXNjcmlwdG9yc1tpXTsKLQkJLy8JCQlpZiAoanBkLmdldFJlYWRhYmxlKCkgJiYganBkLmdldFdyaXRlYWJsZSgpKQotCQkvLwkJCQlib3RoLmFkZChqcGQpOwotCQkvLwkJCWVsc2UgaWYgKGpwZC5nZXRSZWFkYWJsZSgpICYmICFqcGQuZ2V0V3JpdGVhYmxlKCkpCi0JCS8vCQkJCWdldE9ubHkuYWRkKGpwZCk7Ci0JCS8vCQkJZWxzZQotCQkvLwkJCQlzZXRPbmx5LmFkZChqcGQpOwotCQkvLwkJfQotCQkvLwkJYXNzZXJ0RXF1YWxzKCJOdW1iZXIgb2YgZ2V0T25seSBwcm9wZXJ0aWVzOiIsIDYyLCBnZXRPbmx5LnNpemUoKSk7Ci0JCS8vYXNzZXJ0RXF1YWxzKCJOdW1iZXIgb2Ygc2V0T25seSBwcm9wZXJ0aWVzOiIsIDAsIHNldE9ubHkuc2l6ZSgpKTsKLQkJLy9hc3NlcnRFcXVhbHMoIk51bWJlciBvZiBnZXQgJiBzZXQgcHJvcGVydGllcyB0aGF0OiIsIDU5LAotCQkvLyBib3RoLnNpemUoKSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGJlYW5JblByb2plY3QoKSB7Ci0JCUlKYXZhUHJvcGVydHlEZXNjcmlwdG9yW10gZGVzY3JpcHRvcnMgPSBnZXRQcm92aWRlcigpLmdldFJ1bnRpbWVQcm9wZXJ0aWVzKGZSZXNvdXJjZSwgIm9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuQmFzZUFsYnVtQ29sbGVjdGlvbkJlYW4iKTsKLQkJYXNzZXJ0RXF1YWxzKCJOdW1iZXIgb2YgcHJvcGVydGllcyBmb3IgQmFzZUFsYnVtQ29sbGVjdGlvbkJlYW46IiwgNCwgZGVzY3JpcHRvcnMubGVuZ3RoKTsKLQkJTGlzdCBnZXRPbmx5ID0gbmV3IEFycmF5TGlzdCgpOwotCQlMaXN0IHNldE9ubHkgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCUxpc3QgYm90aCA9IG5ldyBBcnJheUxpc3QoKTsKLQkJSUphdmFQcm9wZXJ0eURlc2NyaXB0b3IganBkID0gbnVsbDsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjcmlwdG9ycy5sZW5ndGg7IGkrKykgewotCQkJanBkID0gZGVzY3JpcHRvcnNbaV07Ci0JCQlpZiAoanBkLmdldFJlYWRhYmxlKCkgJiYganBkLmdldFdyaXRlYWJsZSgpKQotCQkJCWJvdGguYWRkKGpwZCk7Ci0JCQllbHNlIGlmIChqcGQuZ2V0UmVhZGFibGUoKSAmJiAhanBkLmdldFdyaXRlYWJsZSgpKQotCQkJCWdldE9ubHkuYWRkKGpwZCk7Ci0JCQllbHNlCi0JCQkJc2V0T25seS5hZGQoanBkKTsKLQkJfQotCQlhc3NlcnRFcXVhbHMoIk51bWJlciBvZiBnZXRPbmx5IHByb3BlcnRpZXM6IiwgMSwgZ2V0T25seS5zaXplKCkpOwotCQlhc3NlcnRFcXVhbHMoIk51bWJlciBvZiBzZXRPbmx5IHByb3BlcnRpZXM6IiwgMSwgc2V0T25seS5zaXplKCkpOwotCQlhc3NlcnRFcXVhbHMoIk51bWJlciBvZiBnZXQgJiBzZXQgcHJvcGVydGllcyB0aGF0OiIsIDIsIGJvdGguc2l6ZSgpKTsKLQkJLy8gZ2V0IG9ubHkKLQkJanBkID0gKElKYXZhUHJvcGVydHlEZXNjcmlwdG9yKSBnZXRPbmx5LmdldCgwKTsKLQkJYXNzZXJ0RXF1YWxzKCJnZXQgcmVhZGFibGUgZm9yIGdldCBvbmx5IHByb3BlcnR5OiAiLCB0cnVlLCBqcGQuZ2V0UmVhZGFibGUoKSk7Ci0JCWFzc2VydEVxdWFscygiZ2V0IHdyaXRhYmxlIGZvciBnZXQgb25seSBwcm9wZXJ0eToiLCBmYWxzZSwganBkLmdldFdyaXRlYWJsZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJuYW1lIGZvciBnZXQgb25seSBwcm9wZXJ0eSIsICJudW1DZHMiLCBqcGQuZ2V0RGlzcGxheU5hbWUoKSk7Ci0JCWFzc2VydEVxdWFscygidHlwZSBmb3IgZ2V0IG9ubHkgcHJvcGVydHkiLCAiaW50IiwganBkLmdldERlY2xhcmVkVHlwZSgpKTsKLQkJLy8gc2V0IG9ubHkKLQkJanBkID0gKElKYXZhUHJvcGVydHlEZXNjcmlwdG9yKSBzZXRPbmx5LmdldCgwKTsKLQkJYXNzZXJ0RXF1YWxzKCJnZXQgcmVhZGFibGUgZm9yIHNldCBvbmx5IHByb3BlcnR5OiAiLCBmYWxzZSwganBkLmdldFJlYWRhYmxlKCkpOwotCQlhc3NlcnRFcXVhbHMoImdldCB3cml0YWJsZSBmb3Igc2V0IG9ubHkgcHJvcGVydHk6IiwgdHJ1ZSwganBkLmdldFdyaXRlYWJsZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJuYW1lIGZvciBzZXQgb25seSBwcm9wZXJ0eSIsICJjZHMiLCBqcGQuZ2V0RGlzcGxheU5hbWUoKSk7Ci0JCWFzc2VydEVxdWFscygidHlwZSBmb3Igc2V0IG9ubHkgcHJvcGVydHkiLCAiU3RyaW5nW10iLCBqcGQuZ2V0RGVjbGFyZWRUeXBlKCkpOwotCQkvLyBib3RoCi0JCWpwZCA9IChJSmF2YVByb3BlcnR5RGVzY3JpcHRvcikgYm90aC5nZXQoMCk7Ci0JCWFzc2VydEVxdWFscygiZ2V0IHJlYWRhYmxlIGZvciBib3RoIHByb3BlcnR5OiAiLCB0cnVlLCBqcGQuZ2V0UmVhZGFibGUoKSk7Ci0JCWFzc2VydEVxdWFscygiZ2V0IHdyaXRhYmxlIGZvciBib3RoIHByb3BlcnR5OiIsIHRydWUsIGpwZC5nZXRXcml0ZWFibGUoKSk7Ci0JfQotCi0JcHJpdmF0ZSBCZWFuSW5mb1Byb3ZpZGVyIGdldFByb3ZpZGVyKCkgewotCQlpZiAoZlByb3ZpZGVyID09IG51bGwpCi0JCQlmUHJvdmlkZXIgPSBuZXcgQmVhbkluZm9Qcm92aWRlcigpOwotCQlyZXR1cm4gZlByb3ZpZGVyOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvY29udGVudGFzc2lzdC9KU1BKYXZhVHJhbnNsYXRvclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvY29udGVudGFzc2lzdC9KU1BKYXZhVHJhbnNsYXRvclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2U5OTQxNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL2NvbnRlbnRhc3Npc3QvSlNQSmF2YVRyYW5zbGF0b3JUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuY29udGVudGFzc2lzdDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5qYXZhLkpTUFRyYW5zbGF0aW9uVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuamF2YS5KU1BUcmFuc2xhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS51dGlscy5TdHJpbmdVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU5vZGU7Ci0KLS8qKgotICogVGhpcyBjbGFzcyB0ZXN0cyB0aGUgc2VkIEpTUEphdmFUcmFuc2xhdG9yIGNsYXNzCi0gKiAKLSAqIEBhdXRob3IgcGF2ZXJ5Ci0gKi8KLXB1YmxpYyBjbGFzcyBKU1BKYXZhVHJhbnNsYXRvclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwdWJsaWMgSlNQSmF2YVRyYW5zbGF0b3JUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RBbGxGaWxlcygpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCS8vIHRoaXMgdGVzdCBpcyBmb3IgUE1SOiA5MTkzMCBDTVZDOjIxODQ2OQotCQl0ZXN0SlNQSW5KYXZhc2NyaXB0KCJ0ZXN0ZmlsZXMvanNwSW5KYXZhc2NyaXB0LmpzcCIpOwotCX0KLQotCXZvaWQgdGVzdEpTUEluSmF2YXNjcmlwdChTdHJpbmcgZmlsZW5hbWUpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgc20gPSBnZXRTdHJ1Y3R1cmVkTW9kZWxGb3JSZWFkKGZpbGVuYW1lKTsKLQkJaWYgKHNtICE9IG51bGwpIHsKLQkJCUlET01Ob2RlIHhtbE5vZGUgPSAoSURPTU5vZGUpIHNtLmdldEluZGV4ZWRSZWdpb24oMCk7Ci0KLQkJCWlmICh4bWxOb2RlICE9IG51bGwpIHsKLQkJCQlKU1BUcmFuc2xhdG9yIGpzcHQgPSBuZXcgSlNQVHJhbnNsYXRvcigpOwotCQkJCWpzcHQucmVzZXQoeG1sTm9kZSwgbnVsbCk7Ci0JCQkJLy8gaW50IHNvdXJjZVRleHRQb3MgPSB0ZXh0LmluZGV4T2YoIjwlPSB0ZXN0SnNwU3RyaW5nIikgKyAxNzsKLQkJCQkvLyBqc3B0LnNldFNvdXJjZUN1cnNvcihzb3VyY2VUZXh0UG9zKTsgLy8gcmlnaHQgYWZ0ZXIgdGhlCi0JCQkJLy8gdGV4dAotCQkJCWpzcHQudHJhbnNsYXRlKCk7Ci0JCQkJU3RyaW5nIHRyYW5zbGF0aW9uID0ganNwdC5nZXRUcmFuc2xhdGlvbigpLnRvU3RyaW5nKCk7Ci0JCQkJLy8gb2Zmc2V0cyBhcmUgZm91bmQgdXNpbmcgSlNQVHJhbnNsYXRpb24gbm93Ci0JCQkJLy8gaW50IHRyYW5zbGF0ZWRDdXJzb3JQb3NpdGlvbiA9IGpzcHQuZ2V0Q3Vyc29yUG9zaXRpb24oKTsKLQkJCQkvLyBhc3NlcnRFcXVhbHMoImluY29ycmVjdCBjdXJzb3IgcG9zaXRpb24gPiIgKwotCQkJCS8vIHRyYW5zbGF0ZWRDdXJzb3JQb3NpdGlvbiwgNTE5LCB0cmFuc2xhdGVkQ3Vyc29yUG9zaXRpb24pOwotCQkJCS8vIGFzc2VydEVxdWFscygidHJhbnNsYXRpb24gd2FzIGluY29ycmVjdCIsICJ0ZXN0SnNwU3RyaW5nIiwKLQkJCQkvLyB0cmFuc2xhdGlvbi5zdWJzdHJpbmcoNTE5LCA1MzIpKTsKLQkJCQlpbnQgY3Vyc29yU3RhcnQgPSB0cmFuc2xhdGlvbi5pbmRleE9mKCJvdXQucHJpbnQoXCJcIitcbiB0ZXN0SnNwU3RyaW5nIikgKyAxNDsKLQkJCQlhc3NlcnRFcXVhbHMoImluY29ycmVjdCBjdXJzb3IgcG9zaXRpb24gPiIgKyBjdXJzb3JTdGFydCwgNjY3LCBjdXJzb3JTdGFydCk7Ci0JCQl9Ci0JCQlzbS5yZWxlYXNlRnJvbVJlYWQoKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNdWx0aXBsZUpTUFNlY3Rpb25zSW5KYXZhc2NyaXB0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9ICJ0ZXN0ZmlsZXMvanNwSW5KYXZhc2NyaXB0Mi5qc3AiOwotCQlJU3RydWN0dXJlZE1vZGVsIHNtID0gZ2V0U3RydWN0dXJlZE1vZGVsRm9yUmVhZChmaWxlbmFtZSk7Ci0JCWFzc2VydE5vdE51bGwoImNvdWxkbid0IGxvYWQgSlNQIGZvciB0ZXN0Iiwgc20pOwotCQlKU1BUcmFuc2xhdGlvblV0aWwgdHJhbnNsYXRpb25VdGlsID0gbmV3IEpTUFRyYW5zbGF0aW9uVXRpbChzbS5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKSk7Ci0KLQkJU3RyaW5nIGphdmFUZXh0ID0gU3RyaW5nVXRpbHMucmVwbGFjZSh0cmFuc2xhdGlvblV0aWwuZ2V0VHJhbnNsYXRpb24oKS5nZXRKYXZhVGV4dCgpLCAiXHJcbiIsICJcbiIpOwotCQlqYXZhVGV4dCA9IFN0cmluZ1V0aWxzLnJlcGxhY2UoamF2YVRleHQsICJcciIsICJcbiIpOwotCQlzbS5yZWxlYXNlRnJvbVJlYWQoKTsKLQotCQlTdHJpbmcgdHJhbnNsYXRlZFRleHQgPSBsb2FkQ29udGVudHMoInRlc3RmaWxlcy9qc3BJbkphdmFzY3JpcHQyLmphdmFzb3VyY2UiKTsKLQkJYXNzZXJ0RXF1YWxzKCJ0cmFuc2xhdGVkIGNvbnRlbnRzIGFyZSBub3QgYXMgZXhwZWN0ZWQiLCB0cmFuc2xhdGVkVGV4dCwgamF2YVRleHQpOwotCX0KLQotCS8qKgotCSAqIEByZXR1cm4KLQkgKi8KLQlwcml2YXRlIFN0cmluZyBsb2FkQ29udGVudHMoU3RyaW5nIGZpbGVuYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlSZWFkZXIgcmVhZGVyID0gbmV3IElucHV0U3RyZWFtUmVhZGVyKGdldENsYXNzKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbShmaWxlbmFtZSkpOwotCQljaGFyW10gcmVhZEJ1ZmZlciA9IG5ldyBjaGFyWzIwNDhdOwotCQlpbnQgbiA9IHJlYWRlci5yZWFkKHJlYWRCdWZmZXIpOwotCQlTdHJpbmdCdWZmZXIgcyA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJd2hpbGUgKG4gPiAwKSB7Ci0JCQlzLmFwcGVuZChyZWFkQnVmZmVyLCAwLCBuKTsKLQkJCW4gPSByZWFkZXIucmVhZChyZWFkQnVmZmVyKTsKLQkJfQotCi0JCVN0cmluZyBzb3VyY2UgPSBTdHJpbmdVdGlscy5yZXBsYWNlKHMudG9TdHJpbmcoKSwgIlxyXG4iLCAiXG4iKTsKLQkJc291cmNlID0gU3RyaW5nVXRpbHMucmVwbGFjZShzb3VyY2UsICJcciIsICJcbiIpOwotCQlyZXR1cm4gc291cmNlOwotCX0KLQotCS8qKgotCSAqIElNUE9SVEFOVCB3aG9ldmVyIGNhbGxzIHRoaXMgbXVzdCByZWxlYXNlRnJvbVJlYWQgYWZ0ZXIgdGhleSBhcmUgZG9uZQotCSAqIHVzaW5nIGl0LgotCSAqIAotCSAqIEBwYXJhbSBmaWxlbmFtZQotCSAqIEByZXR1cm4KLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCi0JICogQHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uCi0JICovCi0JcHJvdGVjdGVkIElTdHJ1Y3R1cmVkTW9kZWwgZ2V0U3RydWN0dXJlZE1vZGVsRm9yUmVhZChTdHJpbmcgZmlsZW5hbWUpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCS8vIGNyZWF0ZSBtb2RlbAotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlucHV0U3RyZWFtIGluU3RyZWFtID0gZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKGZpbGVuYW1lKTsKLQkJSVN0cnVjdHVyZWRNb2RlbCBzTW9kZWwgPSBtb2RlbE1hbmFnZXIuZ2V0TW9kZWxGb3JSZWFkKGZpbGVuYW1lLCBpblN0cmVhbSwgbnVsbCk7Ci0JCXJldHVybiBzTW9kZWw7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9jb250ZW50YXNzaXN0L0pTUFRyYW5zbGF0aW9uVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9jb250ZW50YXNzaXN0L0pTUFRyYW5zbGF0aW9uVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4N2FkNDAwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvY29udGVudGFzc2lzdC9KU1BUcmFuc2xhdGlvblRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQzOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5jb250ZW50YXNzaXN0OwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JQ29tcGlsYXRpb25Vbml0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklKYXZhRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JSmF2YVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSU1ldGhvZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhTW9kZWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuZG9tLkFTVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5kb20uQVNUTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5kb20uQVNUUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLmRvbS5BU1RWaXNpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLmRvbS5TaW1wbGVUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLmRvbS5WYXJpYWJsZURlY2xhcmF0aW9uRnJhZ21lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuZG9tLlZhcmlhYmxlRGVjbGFyYXRpb25TdGF0ZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5Qb3NpdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuZG9tZG9jdW1lbnQuRE9NTW9kZWxGb3JKU1A7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLmphdmEuSUpTUFRyYW5zbGF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5qYXZhLkpTUFRyYW5zbGF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5qYXZhLkpTUFRyYW5zbGF0aW9uQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwubW9kZWxoYW5kbGVyLk1vZGVsSGFuZGxlckZvckpTUDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSlNQMTFOYW1lc3BhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5vdGhlci5TY2FubmVyVW5pdFRlc3RzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMudXRpbC5GaWxlVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnV0aWwuUHJvamVjdFVuemlwVXRpbGl0eTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnV0aWwuUHJvamVjdFV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS5zZXJ2aWNlLmRhdGFsb2NhdGlvbi5Mb2NhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgdW5pdCB0ZXN0cyB0aGUgc2VkIEpTUFRyYW5zbGF0aW9uIG1lY2hhbmlzbS4KLSAqIFRoYXQgaW5jbHVkZXMgSlNQVHJhbnNsYXRpb25BZGFwdGVyRmFjdG9yeSwgSlNQVHJhbnNsYXRpb25BZGFwdGVyLCBhbmQgSlNQVHJhbnNsYXRpb24uCi0gKiBJdCB1c2VzIHRoZSBqc3BfaW5jbHVkZV90ZXN0LmpzcCwgYmVjYXVzZSBvZiB0aGUgbW9yZSBjb21wbGljYXRlZCB0cmFuc2xhdGlvbiBhbmQgb2Zmc2V0cy4KLSAqIAotICogQGF1dGhvciBwYXZlcnkKLSAqLwotcHVibGljIGNsYXNzIEpTUFRyYW5zbGF0aW9uVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXByaXZhdGUgUHJvamVjdFVuemlwVXRpbGl0eSBmUHJvalV0aWwgPSBudWxsOwotCXByaXZhdGUgYm9vbGVhbiBpc1NldHVwID0gZmFsc2U7Ci0JCi0JcHJpdmF0ZSBIYXNoTWFwIGZYTUxKU1BQb3NpdGlvbnM7Ci0KLQlwdWJsaWMgSlNQVHJhbnNsYXRpb25UZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQlwdWJsaWMgSlNQVHJhbnNsYXRpb25UZXN0KCkgewotCQlzdXBlcigiSlNQVHJhbnNsYXRpb25UZXN0Iik7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc2V0VXAoKTsKLQkJaWYgKCF0aGlzLmlzU2V0dXApIHsKLQkJCWRvU2V0dXAoKTsKLQkJCXRoaXMuaXNTZXR1cCA9IHRydWU7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgZG9TZXR1cCgpIHRocm93cyBFeGNlcHRpb24gewotCQlmUHJvalV0aWwgPSBuZXcgUHJvamVjdFVuemlwVXRpbGl0eSgpOwotCi0JCS8vIHJvb3Qgb2Ygd29ya3NwYWNlIGRpcmVjdG9yeQotCQlMb2NhdGlvbiBwbGF0Zm9ybUxvY2F0aW9uID0gUGxhdGZvcm0uZ2V0SW5zdGFuY2VMb2NhdGlvbigpOwotCi0JCUZpbGUgemlwRmlsZSA9IEZpbGVVdGlsLm1ha2VGaWxlRm9yKFByb2plY3RVbnppcFV0aWxpdHkuUFJPSkVDVF9aSVBTX0ZPTERFUiwgImluY2x1ZGVzX3Rlc3RzLnppcCIsIFByb2plY3RVbnppcFV0aWxpdHkuUFJPSkVDVF9aSVBTX0ZPTERFUik7Ci0JCWZQcm9qVXRpbC51bnppcEFuZEltcG9ydCh6aXBGaWxlLCBwbGF0Zm9ybUxvY2F0aW9uLmdldFVSTCgpLmdldFBhdGgoKSk7Ci0JCWZQcm9qVXRpbC5pbml0SmF2YVByb2plY3QoIklOQ0xVREVTX1RFU1RTIik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RQYWdlRGlyZWN0aXZlU2Vzc2lvblZhcmlhYmxlSW5GaWxlKCkgdGhyb3dzIEphdmFNb2RlbEV4Y2VwdGlvbiB7Ci0JCVN0cmluZyBqc3BUZXN0RmlsZVBhdGhTdHJpbmcgPSAiSU5DTFVERVNfVEVTVFMvdGVzdDE4OTkyNC5qc3AiOwotCQlQcm9qZWN0VXRpbC5jb3B5QnVuZGxlRW50cnlJbnRvV29ya3NwYWNlKCIvdGVzdGZpbGVzLzE4OTkyNC90ZXN0MTg5OTI0LmpzcCIsIGpzcFRlc3RGaWxlUGF0aFN0cmluZyk7Ci0JCUlQYXRoIGpzcFRlc3RGaWxlUGF0aCA9IG5ldyBQYXRoKGpzcFRlc3RGaWxlUGF0aFN0cmluZyk7Ci0JCUlGaWxlIGZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUoanNwVGVzdEZpbGVQYXRoKTsKLQotCQl2ZXJpZnlUcmFuc2xhdGlvbkhhc05vU2Vzc2lvblZhcmlhYmxlcyhmaWxlKTsKLQl9Ci0JcHJpdmF0ZSB2b2lkIHZlcmlmeVRyYW5zbGF0aW9uSGFzTm9TZXNzaW9uVmFyaWFibGVzKElGaWxlIGZpbGUpIHRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24gewotCQlJRE9NTW9kZWwgbW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJbW9kZWwgPSAoSURPTU1vZGVsKSBnZXRTdHJ1Y3R1cmVkTW9kZWxGb3JSZWFkKGZpbGUpOwotCQkJc2V0dXBBZGFwdGVyRmFjdG9yeShtb2RlbCk7Ci0KLQkJCUpTUFRyYW5zbGF0aW9uQWRhcHRlciBhZGFwdGVyID0gKEpTUFRyYW5zbGF0aW9uQWRhcHRlcikgbW9kZWwuZ2V0RG9jdW1lbnQoKS5nZXRBZGFwdGVyRm9yKElKU1BUcmFuc2xhdGlvbi5jbGFzcyk7Ci0JCQlJQ29tcGlsYXRpb25Vbml0IGN1ID0gYWRhcHRlci5nZXRKU1BUcmFuc2xhdGlvbigpLmdldENvbXBpbGF0aW9uVW5pdCgpOwotCQkJY3UubWFrZUNvbnNpc3RlbnQobmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQlJVHlwZVtdIHR5cGVzID0gY3UuZ2V0QWxsVHlwZXMoKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgdHlwZXMubGVuZ3RoOyBpKyspIHsKLQkJCQlJSmF2YUVsZW1lbnRbXSBtZW1iZXJzID0gdHlwZXNbaV0uZ2V0Q2hpbGRyZW4oKTsKLQkJCQlmb3IgKGludCBrID0gMDsgayA8IG1lbWJlcnMubGVuZ3RoOyBrKyspIHsKLQkJCQkJLy8gY2hlY2sgZmllbGRzIGZvciBuYW1lICJzZXNzaW9uIgotCQkJCQlpZiAobWVtYmVyc1trXS5nZXRFbGVtZW50VHlwZSgpID09IElKYXZhRWxlbWVudC5GSUVMRCkgewotCQkJCQkJYXNzZXJ0RmFsc2UoImZpZWxkIG5hbWVkIFwic2Vzc2lvblwiIGV4aXN0cyIsIG1lbWJlcnNba10uZ2V0RWxlbWVudE5hbWUoKS5lcXVhbHMoSlNQMTFOYW1lc3BhY2UuQVRUUl9OQU1FX1NFU1NJT04pKTsKLQkJCQkJfQotCQkJCQkvKgotCQkJCQkgKiBjaGVjayAicHVibGljIHZvaWQKLQkJCQkJICogX2pzcFNlcnZpY2UoamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdAotCQkJCQkgKiByZXF1ZXN0LCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZQotCQkJCQkgKiByZXNwb25zZSkiIGZvciBsb2NhbCB2YXJpYWJsZXMgbmFtZWQgInNlc3Npb24iCi0JCQkJCSAqLwotCQkJCQllbHNlIGlmIChtZW1iZXJzW2tdLmdldEVsZW1lbnRUeXBlKCkgPT0gSUphdmFFbGVtZW50Lk1FVEhPRCAmJiBtZW1iZXJzW2tdLmdldEVsZW1lbnROYW1lKCkuc3RhcnRzV2l0aCgiX2pzcFNlcnZpY2UiKSkgewotCQkJCQkJSUNvbXBpbGF0aW9uVW5pdCBjb21waWxhdGlvblVuaXQgPSAoKElNZXRob2QpIG1lbWJlcnNba10pLmdldENvbXBpbGF0aW9uVW5pdCgpOwotCQkJCQkJY29tcGlsYXRpb25Vbml0Lm1ha2VDb25zaXN0ZW50KG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJCQkJQVNUUGFyc2VyIHBhcnNlciA9IEFTVFBhcnNlci5uZXdQYXJzZXIoQVNULkpMUzMpOwotCQkJCQkJcGFyc2VyLnNldFNvdXJjZShjdSk7Ci0JCQkJCQlBU1ROb2RlIG5vZGUgPSBwYXJzZXIuY3JlYXRlQVNUKG51bGwpOwotCQkJCQkJbm9kZS5hY2NlcHQobmV3IEFTVFZpc2l0b3IoKSB7Ci0JCQkJCQkJcHVibGljIGJvb2xlYW4gdmlzaXQoVmFyaWFibGVEZWNsYXJhdGlvblN0YXRlbWVudCBub2RlKSB7Ci0JCQkJCQkJCUl0ZXJhdG9yIGZyYWdtZW50cyA9IG5vZGUuZnJhZ21lbnRzKCkuaXRlcmF0b3IoKTsKLQkJCQkJCQkJd2hpbGUgKGZyYWdtZW50cy5oYXNOZXh0KCkpIHsKLQkJCQkJCQkJCVZhcmlhYmxlRGVjbGFyYXRpb25GcmFnbWVudCBmcmFnbWVudCA9IChWYXJpYWJsZURlY2xhcmF0aW9uRnJhZ21lbnQpIGZyYWdtZW50cy5uZXh0KCk7Ci0JCQkJCQkJCQlpZiAoZnJhZ21lbnQuZ2V0TmFtZSgpLmdldEZ1bGx5UXVhbGlmaWVkTmFtZSgpLmVxdWFscyhKU1AxMU5hbWVzcGFjZS5BVFRSX05BTUVfU0VTU0lPTikpIHsKLQkJCQkJCQkJCQlTdHJpbmcgdHlwZU5hbWUgPSAoKFNpbXBsZVR5cGUpIG5vZGUuZ2V0VHlwZSgpKS5nZXROYW1lKCkuZ2V0RnVsbHlRdWFsaWZpZWROYW1lKCk7Ci0JCQkJCQkJCQkJYXNzZXJ0RmFsc2UoImxvY2FsIHZhcmlhYmxlIG9mIHR5cGUgXCJqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlc3Npb25cIiBhbmQgbmFtZWQgXCJzZXNzaW9uXCIgZXhpc3RzIiwgdHlwZU5hbWUuZXF1YWxzKCJqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlc3Npb24iKSk7Ci0JCQkJCQkJCQl9Ci0JCQkJCQkJCX0KLQkJCQkJCQkJcmV0dXJuIHN1cGVyLnZpc2l0KG5vZGUpOwotCQkJCQkJCX0KLQkJCQkJCX0pOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpCi0JCQkJbW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JCX0KLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFBhZ2VEaXJlY3RpdmVTZXNzaW9uVmFyaWFibGVJblNlZ21lbnQoKSB0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGpzcFRlc3RGaWxlUGF0aFN0cmluZyA9ICJJTkNMVURFU19URVNUUy90ZXN0MTg5OTI0LmpzcCI7Ci0JCVByb2plY3RVdGlsLmNvcHlCdW5kbGVFbnRyeUludG9Xb3Jrc3BhY2UoIi90ZXN0ZmlsZXMvMTg5OTI0L3Rlc3QxODk5MjQuanNwIiwganNwVGVzdEZpbGVQYXRoU3RyaW5nKTsKLQkJanNwVGVzdEZpbGVQYXRoU3RyaW5nID0gIklOQ0xVREVTX1RFU1RTL2luY2x1ZGVyLmpzcCI7Ci0JCVByb2plY3RVdGlsLmNvcHlCdW5kbGVFbnRyeUludG9Xb3Jrc3BhY2UoIi90ZXN0ZmlsZXMvMTg5OTI0L2luY2x1ZGVyLmpzcCIsIGpzcFRlc3RGaWxlUGF0aFN0cmluZyk7Ci0JCUlQYXRoIGpzcFRlc3RGaWxlUGF0aCA9IG5ldyBQYXRoKGpzcFRlc3RGaWxlUGF0aFN0cmluZyk7Ci0JCUlGaWxlIGZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUoanNwVGVzdEZpbGVQYXRoKTsKLQotCQl2ZXJpZnlUcmFuc2xhdGlvbkhhc05vU2Vzc2lvblZhcmlhYmxlcyhmaWxlKTsJCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFRyYW5zbGF0ZVBvc2l0aW9ucygpIHsKLQotCQlJRE9NTW9kZWwgbW9kZWwgPSBnZXRJbmNsdWRlVGVzdE1vZGVsRm9yUmVhZCgpOwotCQlKU1BUcmFuc2xhdGlvbkFkYXB0ZXIgYWRhcHRlciA9IChKU1BUcmFuc2xhdGlvbkFkYXB0ZXIpIG1vZGVsLmdldERvY3VtZW50KCkuZ2V0QWRhcHRlckZvcihJSlNQVHJhbnNsYXRpb24uY2xhc3MpOwotCQlKU1BUcmFuc2xhdGlvbiB0cmFuc2xhdGlvbiA9IGFkYXB0ZXIuZ2V0SlNQVHJhbnNsYXRpb24oKTsKLQkJdHJ5IHsKLQkJCUhhc2hNYXAgamF2YTJqc3AgPSB0cmFuc2xhdGlvbi5nZXRKYXZhMkpzcE1hcCgpOwotCQkJYXNzZXJ0RXF1YWxzKCJqYXZhMmpzcCBtYXAgc2l6ZToiLCAxMSwgamF2YTJqc3Auc2l6ZSgpKTsKLQotCQkJSGFzaE1hcCBqc3AyamF2YSA9IHRyYW5zbGF0aW9uLmdldEpzcDJKYXZhTWFwKCk7Ci0JCQlhc3NlcnRFcXVhbHMoImpzcDJqYXZhIG1hcCBzaXplOiIsIDMsIGpzcDJqYXZhLnNpemUoKSk7Ci0KLQkJCS8vIHNvbWUgdGVzdCBwb3NpdGlvbnMgKG91dC5wcmludCgiIiArIHwgKTspCi0JCQkKLQkJCS8vIHdlIG5lZWQgdG8gaWdub3JlIHRoZSBjbGFzc25hbWUgbGVuZ3RoIGluIG91ciBjb21wYXJpc29ucwotCQkJLy8gd2l0aCBqYXZhIG9mZnNldHMgdGhhdCB3ZSBnZXQgZnJvbSB0aGUgdHJhbnNsYXRpb24KLQkJCS8vIHNpbmNlIGl0IGNhbiB2YXJ5IGRlcGVuZGluZyBvbiB3b3Jrc3BhY2UgbG9jYXRpb24KLQkJCWludCBjbGFzc25hbWVMZW5ndGggPSB0cmFuc2xhdGlvbi5nZXRDbGFzc25hbWUoKS5sZW5ndGgoKTsKLQkJCQotCQkJaW50IGpzcFRlc3RQb3NpdGlvbiA9IHRyYW5zbGF0aW9uLmdldEpzcFRleHQoKS5pbmRleE9mKCI8JT0gIikgKyA0OwotCQkJaW50IGphdmFPZmZzZXQgPSB0cmFuc2xhdGlvbi5nZXRKYXZhT2Zmc2V0KGpzcFRlc3RQb3NpdGlvbikgLSBjbGFzc25hbWVMZW5ndGg7Ci0JCQlhc3NlcnRFcXVhbHMoIkpTUFRyYW5zbGF0aW9uIGphdmEgb2Zmc2V0OiIsIDEwMDksIGphdmFPZmZzZXQpOwotCQkJCi0JCQkvLyAoPCU9IHwgJT4pCi0JCQlpbnQgamF2YVRlc3RQb3N0aXRpb24gPSB0cmFuc2xhdGlvbi5nZXRKYXZhVGV4dCgpLmluZGV4T2YoIm91dC5wcmludChcIlwiK1xuICAgXG4pOyIpICsgMTQ7Ci0JCQkvLyBkb250JyBuZWVkIHRvIHdvcnJ5IGFib3V0IGNsYXNzbmFtZSBsZW5ndGggaGVyZSBiZWNhdXNlIHdlIGFyZSBjb21wYXJpbmcKLQkJCS8vIHdpdGggYSBwb3NpdGlvbiBpbiB0aGUgSlNQIGRvY3VtZW50ICh3aGljaCBkb2Vzbid0IGNvbnRhaW4gY2xhc3NuYW1lKQotCQkJaW50IGpzcE9mZnNldCA9IHRyYW5zbGF0aW9uLmdldEpzcE9mZnNldChqYXZhVGVzdFBvc3RpdGlvbik7Ci0JCQlhc3NlcnRFcXVhbHMoIkpTUFRyYW5zbGF0aW9uIGpzcCBvZmZzZXQ6IiwgNTY0LCBqc3BPZmZzZXQpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpCi0JCQkJbW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JCX0KLQl9Ci0KLQotCXB1YmxpYyB2b2lkIHRlc3RKU1BUcmFuc2xhdGlvblRleHQoKSB7Ci0KLQkJSURPTU1vZGVsIG1vZGVsID0gZ2V0SW5jbHVkZVRlc3RNb2RlbEZvclJlYWQoKTsKLQkJU2Nhbm5lclVuaXRUZXN0cy52ZXJpZnlMZW5ndGhzKG1vZGVsLCBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5nZXQoKSk7Ci0JCUpTUFRyYW5zbGF0aW9uQWRhcHRlciBhZGFwdGVyID0gKEpTUFRyYW5zbGF0aW9uQWRhcHRlcikgbW9kZWwuZ2V0RG9jdW1lbnQoKS5nZXRBZGFwdGVyRm9yKElKU1BUcmFuc2xhdGlvbi5jbGFzcyk7Ci0JCUpTUFRyYW5zbGF0aW9uIHRyYW5zbGF0aW9uID0gYWRhcHRlci5nZXRKU1BUcmFuc2xhdGlvbigpOwotCQkvLyBuYW1lZCBhcyAuYmluIHNvIG5vIGxpbmUgY29udmVyc2lvbiBvY2N1cnMgKFxuIGlzIGluIHVzZSkKLQkJSW5wdXRTdHJlYW0gaW4gPSBnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0oInRyYW5zbGF0ZWRfdGV4dC5iaW4iKTsKLQkJU3RyaW5nIGtub3duVHJhbnNsYXRpb25UZXh0ID0gbG9hZENoYXJzKGluKTsKLQkJdHJ5IHsKLQkJCS8vIGltcHJvdmVtZW50czogbWF5IG5lZWQgZmluZXIgdHVuZWQgdGV4dCBjb21wYXJlcyBsYXRlcgotCQkJLy8gZm9yIGRpZmZlcmVudCB0eXBlcyBvZiB0cmFuc2xhdGlvbnMgKGluY2x1ZGVzLCB4bWwtanNwIGluIHNjcmlwdCwgYXR0cmlidXRlcywgZXRjLi4uKQotCQkJU3RyaW5nIHRleHQgPSB0cmFuc2xhdGlvbi5nZXRKYXZhVGV4dCgpOwotCQkJCi0JCQlhc3NlcnROb3ROdWxsKCJKU1AgdHJhbnNsYXRpb24gdGV4dDoiLCB0ZXh0KTsKLQkJCWFzc2VydEVxdWFscygiSlNQIHRyYW5zbGF0aW9uIHRleHQgZG9lcyBub3QgbWF0Y2ggZXhwZWN0ZWQiLCBrbm93blRyYW5zbGF0aW9uVGV4dCwgdGV4dCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RKU1BUcmFuc2xhdGlvbkFkYXB0ZXIoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGdldEluY2x1ZGVUZXN0TW9kZWxGb3JSZWFkKCk7Ci0JCUpTUFRyYW5zbGF0aW9uQWRhcHRlciBhZGFwdGVyID0gKEpTUFRyYW5zbGF0aW9uQWRhcHRlcikgbW9kZWwuZ2V0RG9jdW1lbnQoKS5nZXRBZGFwdGVyRm9yKElKU1BUcmFuc2xhdGlvbi5jbGFzcyk7Ci0JCUpTUFRyYW5zbGF0aW9uIHRyYW5zbGF0aW9uID0gYWRhcHRlci5nZXRKU1BUcmFuc2xhdGlvbigpOwotCi0JCXRyeSB7Ci0JCQlJSmF2YVByb2plY3QgcHJvaiA9IGFkYXB0ZXIuZ2V0SmF2YVByb2plY3QoKTsKLQkJCWFzc2VydE5vdE51bGwoImNvdWxkbid0IGdldCBqYXZhIHByb2plY3Q6IiArIHByb2opOwotCi0JCQl0cmFuc2xhdGlvbiA9IGFkYXB0ZXIuZ2V0SlNQVHJhbnNsYXRpb24oKTsKLQkJCWFzc2VydE5vdE51bGwoImNvdWxkbid0IGdldCB0cmFuc2xhdGlvbjoiLCB0cmFuc2xhdGlvbik7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIE1ha2VzIHN1cmUgYm90aCBiZWFucyBhcmUgdHJhbnNsYXRlZCBldmVuIHRob3VnaCB0aGV5IGFyZQotCSAqIHJpZ2h0IG5leHQgdG8gZWFjaCBvdGhlciB3aXRoIG5vIHNwYWNlLgotCSAqIAotCSAqIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0xMDMwMDQKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0VXNlQmVhbk5vU3BhY2UoKSB7Ci0JCUlGaWxlIGYgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgoIklOQ0xVREVTX1RFU1RTL3VzZUJlYW5fdGVzdGVyLmpzcCIpKTsKLQkJRE9NTW9kZWxGb3JKU1Agc01vZGVsID0gKERPTU1vZGVsRm9ySlNQKWdldFN0cnVjdHVyZWRNb2RlbEZvclJlYWQoZik7Ci0JCXRyeSB7Ci0JCQlzZXR1cEFkYXB0ZXJGYWN0b3J5KHNNb2RlbCk7Ci0JCQlKU1BUcmFuc2xhdGlvbkFkYXB0ZXIgYWRhcHRlciA9IChKU1BUcmFuc2xhdGlvbkFkYXB0ZXIpIHNNb2RlbC5nZXREb2N1bWVudCgpLmdldEFkYXB0ZXJGb3IoSUpTUFRyYW5zbGF0aW9uLmNsYXNzKTsKLQkJCUpTUFRyYW5zbGF0aW9uIHRyYW5zbGF0aW9uID0gYWRhcHRlci5nZXRKU1BUcmFuc2xhdGlvbigpOwotCQkJU3RyaW5nIGphdmFUZXh0ID0gdHJhbnNsYXRpb24uZ2V0SmF2YVRleHQoKTsKLQkJCWJvb2xlYW4gYmVhbjEgPSBqYXZhVGV4dC5pbmRleE9mKCJqYXZheC5zd2luZy5KQnV0dG9uIHggPSBudWxsOyIpICE9IC0xOwotCQkJYm9vbGVhbiBiZWFuMiA9IGphdmFUZXh0LmluZGV4T2YoImphdmF4LnN3aW5nLkpCdXR0b24geSA9IG51bGw7IikgIT0gLTE7Ci0JCQlhc3NlcnRUcnVlKGJlYW4xKTsKLQkJCWFzc2VydFRydWUoYmVhbjIpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYoc01vZGVsICE9IG51bGwpCi0JCQkJc01vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotCQl9Ci0JfQotCQotCS8qKgotCSAqIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD04NjM4MgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RYTUxKU1BUcmFuc2xhdGlvblRleHQoKSB7Ci0JCUlGaWxlIGYgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgoIklOQ0xVREVTX1RFU1RTL3htbC1qc3AvbW9zdC10YWdzLXhtbC1qc3AuanNwIikpOwotCQlET01Nb2RlbEZvckpTUCBzTW9kZWwgPSAoRE9NTW9kZWxGb3JKU1ApZ2V0U3RydWN0dXJlZE1vZGVsRm9yUmVhZChmKTsKLQkJdHJ5IHsKLQkJCXNldHVwQWRhcHRlckZhY3Rvcnkoc01vZGVsKTsKLQkJCUpTUFRyYW5zbGF0aW9uQWRhcHRlciBhZGFwdGVyID0gKEpTUFRyYW5zbGF0aW9uQWRhcHRlcikgc01vZGVsLmdldERvY3VtZW50KCkuZ2V0QWRhcHRlckZvcihJSlNQVHJhbnNsYXRpb24uY2xhc3MpOwotCQkJSlNQVHJhbnNsYXRpb24gdHJhbnNsYXRpb24gPSBhZGFwdGVyLmdldEpTUFRyYW5zbGF0aW9uKCk7Ci0JCQkKLQkJCVN0cmluZyBqYXZhVGV4dCA9IHRyYW5zbGF0aW9uLmdldEphdmFUZXh0KCk7Ci0JCQkKLQkJCS8vIG5hbWVkIGFzIC5iaW4gc28gbm8gbGluZSBjb252ZXJzaW9uIG9jY3VycyAoXG4gaXMgaW4gdXNlKQotCQkJSW5wdXRTdHJlYW0gaW4gPSBnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0oInRyYW5zbGF0ZWRfeG1sX2pzcC5iaW4iKTsKLQkJCVN0cmluZyBrbm93blRyYW5zbGF0aW9uVGV4dCA9IGxvYWRDaGFycyhpbik7Ci0JCQkKLQkJCWFzc2VydEVxdWFscyhrbm93blRyYW5zbGF0aW9uVGV4dCwgamF2YVRleHQpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYoc01vZGVsICE9IG51bGwpCi0JCQkJc01vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotCQl9Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RYTUxKU1BNYXBwaW5nKCkgewotCQlJRmlsZSBmID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKCJJTkNMVURFU19URVNUUy94bWwtanNwL21vc3QtdGFncy14bWwtanNwLmpzcCIpKTsKLQkJRE9NTW9kZWxGb3JKU1Agc01vZGVsID0gKERPTU1vZGVsRm9ySlNQKWdldFN0cnVjdHVyZWRNb2RlbEZvclJlYWQoZik7Ci0JCXRyeSB7Ci0JCQlzZXR1cEFkYXB0ZXJGYWN0b3J5KHNNb2RlbCk7Ci0JCQlKU1BUcmFuc2xhdGlvbkFkYXB0ZXIgYWRhcHRlciA9IChKU1BUcmFuc2xhdGlvbkFkYXB0ZXIpIHNNb2RlbC5nZXREb2N1bWVudCgpLmdldEFkYXB0ZXJGb3IoSUpTUFRyYW5zbGF0aW9uLmNsYXNzKTsKLQkJCUpTUFRyYW5zbGF0aW9uIHRyYW5zbGF0aW9uID0gYWRhcHRlci5nZXRKU1BUcmFuc2xhdGlvbigpOwotCQkJCi0JCQlIYXNoTWFwIGpzcDJqYXZhID0gdHJhbnNsYXRpb24uZ2V0SnNwMkphdmFNYXAoKTsKLQkJCU9iamVjdFtdIGpzcFJhbmdlcyA9IGpzcDJqYXZhLmtleVNldCgpLnRvQXJyYXkoKTsKLQkJCVBvc2l0aW9uIGpzcFBvcyA9IG51bGw7Ci0JCQlQb3NpdGlvbiBqYXZhUG9zID0gbnVsbDsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwganNwUmFuZ2VzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJanNwUG9zID0gKFBvc2l0aW9uKWpzcFJhbmdlc1tpXTsKLQkJCQlqYXZhUG9zID0gKFBvc2l0aW9uKWpzcDJqYXZhLmdldChqc3BQb3MpOwotCQkJCS8vU3lzdGVtLm91dC5wcmludGxuKCJqc3A6IiArIHByaW50UG9zKGpzcFBvcykgKyAiID4+IGphdmE6IiArIHByaW50UG9zKGphdmFQb3MpKTsKLQkJCQljaGVja1Bvc2l0aW9uKGpzcFBvcywgamF2YVBvcyk7Ci0JCQl9Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZihzTW9kZWwgIT0gbnVsbCkKLQkJCQlzTW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JCX0KLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFhNTEpTUENEQVRBVGV4dCgpIHsKLQkJSUZpbGUgZiA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShuZXcgUGF0aCgiSU5DTFVERVNfVEVTVFMvY2RhdGEvY2RhdGEuanNwIikpOwotCQlET01Nb2RlbEZvckpTUCBzTW9kZWwgPSAoRE9NTW9kZWxGb3JKU1ApZ2V0U3RydWN0dXJlZE1vZGVsRm9yUmVhZChmKTsKLQkJdHJ5IHsKLQkJCXNldHVwQWRhcHRlckZhY3Rvcnkoc01vZGVsKTsKLQkJCUpTUFRyYW5zbGF0aW9uQWRhcHRlciBhZGFwdGVyID0gKEpTUFRyYW5zbGF0aW9uQWRhcHRlcikgc01vZGVsLmdldERvY3VtZW50KCkuZ2V0QWRhcHRlckZvcihJSlNQVHJhbnNsYXRpb24uY2xhc3MpOwotCQkJSlNQVHJhbnNsYXRpb24gdHJhbnNsYXRpb24gPSBhZGFwdGVyLmdldEpTUFRyYW5zbGF0aW9uKCk7Ci0JCQkKLQkJCVN0cmluZyB0cmFuc1RleHQgPSB0cmFuc2xhdGlvbi5nZXRKYXZhVGV4dCgpOwotCQkJCi0vLwkJCSBuYW1lZCBhcyAuYmluIHNvIG5vIGxpbmUgY29udmVyc2lvbiBvY2N1cnMgKFxuIGlzIGluIHVzZSkKLQkJCUlucHV0U3RyZWFtIGluID0gZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKCJ0cmFuc2xhdGVkX3htbF9qc3BfY2RhdGEuYmluIik7Ci0JCQlTdHJpbmcga25vd25UZXh0ID0gbG9hZENoYXJzKGluKTsKLQkJCQotCQkJYXNzZXJ0RXF1YWxzKGtub3duVGV4dCwgdHJhbnNUZXh0KTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmKHNNb2RlbCAhPSBudWxsKQotCQkJCXNNb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQkJfQotCX0KLQkKLQlwcml2YXRlIHZvaWQgY2hlY2tQb3NpdGlvbihQb3NpdGlvbiBqc3BQb3MsIFBvc2l0aW9uIGphdmFQb3MpIHsKLQkJCi0JCUhhc2hNYXAgZXhwZWN0ZWQgPSBnZXRYTUxKU1BQb3NpdGlvbnMoKTsKLQkJT2JqZWN0W10ga2V5cyA9ZXhwZWN0ZWQua2V5U2V0KCkudG9BcnJheSgpOwotCQlQb3NpdGlvbiBleHBlY3RlZEpzcFBvcz0gbnVsbDsKLQkJUG9zaXRpb24gZXhwZWN0ZWRKYXZhUG9zID0gbnVsbDsKLQkJYm9vbGVhbiBmb3VuZCA9IGZhbHNlOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHsKLQkJCWV4cGVjdGVkSnNwUG9zID0gKFBvc2l0aW9uKWtleXNbaV07Ci0JCQlpZihqc3BQb3MuZXF1YWxzKGV4cGVjdGVkSnNwUG9zKSkgewotCQkJCWV4cGVjdGVkSmF2YVBvcyA9IChQb3NpdGlvbilleHBlY3RlZC5nZXQoZXhwZWN0ZWRKc3BQb3MpOwotCQkJCWZvdW5kID0gdHJ1ZTsKLQkJCX0KLQkJfQotCQlhc3NlcnRUcnVlKCJleHBlY3RlZCBKU1AgcG9zaXRpb24gbWlzc2luZzogIiArIGpzcFBvcywgZm91bmQpOwotCQlhc3NlcnROb3ROdWxsKCJubyBleHBlY3RlZCBqYXZhIHBvc2l0aW9uIGZvciBqc3BQb3M6ICIgKyBwcmludFBvcyhqc3BQb3MpLCBleHBlY3RlZEphdmFQb3MpOwotCQlhc3NlcnRFcXVhbHMoInVuZXhwZWN0ZWQgamF2YSBwb3NpdGlvbiBmb3IganNwIHBvc2l0aW9uICIrcHJpbnRQb3MoanNwUG9zKSsiIHdhczoiICsgcHJpbnRQb3MoamF2YVBvcykgKyAiIGJ1dCBleHBlY3RlZDoiICsgcHJpbnRQb3MoZXhwZWN0ZWRKYXZhUG9zKSwgamF2YVBvcywgZXhwZWN0ZWRKYXZhUG9zKTsKLQl9Ci0JcHJpdmF0ZSBTdHJpbmcgcHJpbnRQb3MoUG9zaXRpb24gcG9zKSB7Ci0JCXJldHVybiBwb3MgIT0gbnVsbCA/ICJbIiArIHBvcy5vZmZzZXQgKyI6IisgcG9zLmxlbmd0aCArICJdIiA6ICJudWxsIjsKLQl9Ci0JcHJpdmF0ZSBIYXNoTWFwIGdldFhNTEpTUFBvc2l0aW9ucygpIHsKLQkJaWYoZlhNTEpTUFBvc2l0aW9ucyA9PSBudWxsKSB7Ci0JCQlmWE1MSlNQUG9zaXRpb25zID0gbmV3IEhhc2hNYXAoKTsKLQkJCWZYTUxKU1BQb3NpdGlvbnMucHV0KG5ldyBQb3NpdGlvbig4ODIsNTIpLCBuZXcgUG9zaXRpb24oOTIwLDMxKSk7Ci0JCQlmWE1MSlNQUG9zaXRpb25zLnB1dChuZXcgUG9zaXRpb24oOTYxLDcpLCBuZXcgUG9zaXRpb24oOTUyLDcpKTsKLQkJCWZYTUxKU1BQb3NpdGlvbnMucHV0KG5ldyBQb3NpdGlvbigxMDE4LDE0KSwgbmV3IFBvc2l0aW9uKDg5LDE0KSk7Ci0JCQlmWE1MSlNQUG9zaXRpb25zLnB1dChuZXcgUG9zaXRpb24oNjQwLDIpLCBuZXcgUG9zaXRpb24oODg4LDIpKTsKLQkJCWZYTUxKU1BQb3NpdGlvbnMucHV0KG5ldyBQb3NpdGlvbig0MDYsMjQpLCBuZXcgUG9zaXRpb24oNzU5LDI0KSk7Ci0JCQlmWE1MSlNQUG9zaXRpb25zLnB1dChuZXcgUG9zaXRpb24oNjg1LDE5KSwgbmV3IFBvc2l0aW9uKDg5NywxOSkpOwotCQkJZlhNTEpTUFBvc2l0aW9ucy5wdXQobmV3IFBvc2l0aW9uKDY1MCwyNiksIG5ldyBQb3NpdGlvbig4NjEsMjYpKTsKLQkJCWZYTUxKU1BQb3NpdGlvbnMucHV0KG5ldyBQb3NpdGlvbig1NjMsOSksIG5ldyBQb3NpdGlvbig4NDgsOSkpOwotCQkJZlhNTEpTUFBvc2l0aW9ucy5wdXQobmV3IFBvc2l0aW9uKDQ2MSwyMyksIG5ldyBQb3NpdGlvbig3ODQsMjMpKTsKLQkJCWZYTUxKU1BQb3NpdGlvbnMucHV0KG5ldyBQb3NpdGlvbig1MjIsOCksIG5ldyBQb3NpdGlvbig4MjIsOCkpOwotCQkJZlhNTEpTUFBvc2l0aW9ucy5wdXQobmV3IFBvc2l0aW9uKDMyMyw0NCksIG5ldyBQb3NpdGlvbigyNzQsNDUpKTsKLQkJCWZYTUxKU1BQb3NpdGlvbnMucHV0KG5ldyBQb3NpdGlvbigyNDUsNDMpLCBuZXcgUG9zaXRpb24oMjI5LDQ0KSk7Ci0JCX0KLQkJcmV0dXJuIGZYTUxKU1BQb3NpdGlvbnM7Ci0JfQotCQotCXByaXZhdGUgc3RhdGljIFN0cmluZyBsb2FkQ2hhcnMoSW5wdXRTdHJlYW0gaW5wdXQpIHsKLQotCQlTdHJpbmdCdWZmZXIgcyA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJdHJ5IHsKLQkJCWludCBjID0gLTE7Ci0JCQl3aGlsZSAoKGMgPSBpbnB1dC5yZWFkKCkpID49IDApIHsKLQkJCQlpZiAoYyA+IDI1NSkKLQkJCQkJYnJlYWs7Ci0JCQkJcy5hcHBlbmQoKGNoYXIpIGMpOwotCQkJfQotCQkJaW5wdXQuY2xvc2UoKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJBbiBJL08gZXJyb3Igb2NjdXJlZCB3aGlsZSBsb2FkaW5nIDoiKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihlKTsKLQkJfQotCQlyZXR1cm4gcy50b1N0cmluZygpOwotCX0KLQkKLQkvKioKLQkgKiBhZGQgdGhlIGZhY3RvcnkgZm9yIEpTUFRyYW5zbGF0aW9uQWRhcHRlciBoZXJlCi0JICogQHBhcmFtIHNtCi0JICovCi0JcHJpdmF0ZSB2b2lkIHNldHVwQWRhcHRlckZhY3RvcnkoSVN0cnVjdHVyZWRNb2RlbCBzbSkgewotCQlNb2RlbEhhbmRsZXJGb3JKU1AuZW5zdXJlVHJhbnNsYXRpb25BZGFwdGVyRmFjdG9yeShzbSk7Ci0JfQotCi0JLyoqCi0JICogSU1QT1JUQU5UIC0gcmVsZWFzZSBtb2RlbCAobW9kZWwucmVsZWFzZUZyb21SZWFkKCkpIGFmdGVyIHVzZQotCSAqIEBwYXJhbSBmaWxlCi0JICogQHJldHVybgotCSAqLwotCXByaXZhdGUgSVN0cnVjdHVyZWRNb2RlbCBnZXRTdHJ1Y3R1cmVkTW9kZWxGb3JSZWFkKElGaWxlIGZpbGUpIHsKLQkJdHJ5IHsKLQkJCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJCXJldHVybiBtb2RlbE1hbmFnZXIuZ2V0TW9kZWxGb3JSZWFkKGZpbGUpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBpb2V4KSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oImNvdWxkbid0IG9wZW4gZmlsZSA+ICIgKyBmaWxlKTsKLQkJfQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXByaXZhdGUgSURPTU1vZGVsIGdldEluY2x1ZGVUZXN0TW9kZWxGb3JSZWFkKCkgewotCi0JCUlQYXRoIGpzcFRlc3RGaWxlUGF0aCA9IG5ldyBQYXRoKCJJTkNMVURFU19URVNUUy9qc3BfaW5jbHVkZV90ZXN0LmpzcCIpOwotCQlJRmlsZSBmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKGpzcFRlc3RGaWxlUGF0aCk7Ci0JCUlET01Nb2RlbCB4bWxNb2RlbCA9IChJRE9NTW9kZWwpIGdldFN0cnVjdHVyZWRNb2RlbEZvclJlYWQoZmlsZSk7Ci0JCXNldHVwQWRhcHRlckZhY3RvcnkoeG1sTW9kZWwpOwotCQlyZXR1cm4geG1sTW9kZWw7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9jb250ZW50YXNzaXN0L3Rlc3RmaWxlcy9qc3BJbkphdmFzY3JpcHQuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9jb250ZW50YXNzaXN0L3Rlc3RmaWxlcy9qc3BJbkphdmFzY3JpcHQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOGM3YzAyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvY29udGVudGFzc2lzdC90ZXN0ZmlsZXMvanNwSW5KYXZhc2NyaXB0LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPg0KLTxIVE1MPg0KLTxIRUFEPg0KLTwlQCBwYWdlIA0KLWxhbmd1YWdlPSJqYXZhIg0KLWNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSINCi1wYWdlRW5jb2Rpbmc9IklTTy04ODU5LTEiDQotJT4NCi08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4NCi08TUVUQSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9IklCTSBXZWJTcGhlcmUgU3R1ZGlvIj4NCi08VElUTEU+cG1yLmpzcDwvVElUTEU+DQotDQotPCUhU3RyaW5nIHRlc3RKc3BTdHJpbmcgPSAidGVzdEpzcFN0cmluZyI7ICU+DQotPHNjcmlwdD4gDQotDQotdmFyIHRlc3QgPSA8JT0gdGVzdEpzcFN0cmluZyAlPjsNCi0NCi08L3NjcmlwdD4NCi0NCi0NCi0NCi08L0hFQUQ+DQotPEJPRFk+DQotPCUgICU+DQotPFA+UGxhY2UganNwSW5KYXZhc2NyaXB0LmpzcCdzIGNvbnRlbnQgaGVyZS48L1A+DQotPC9CT0RZPg0KLTwvSFRNTD4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL2NvbnRlbnRhc3Npc3QvdGVzdGZpbGVzL2pzcEluSmF2YXNjcmlwdDIuamF2YXNvdXJjZSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvY29udGVudGFzc2lzdC90ZXN0ZmlsZXMvanNwSW5KYXZhc2NyaXB0Mi5qYXZhc291cmNlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZTY1NDM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvY29udGVudGFzc2lzdC90ZXN0ZmlsZXMvanNwSW5KYXZhc2NyaXB0Mi5qYXZhc291cmNlCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotaW1wb3J0IGphdmF4LnNlcnZsZXQuKjsNCi1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLio7DQotaW1wb3J0IGphdmF4LnNlcnZsZXQuanNwLio7DQotDQotcHVibGljIGNsYXNzIF90ZXN0ZmlsZXNfMkZfanNwSW5KYXZhc2NyaXB0Ml8yRV9qc3AgZXh0ZW5kcyBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXR7DQotU3RyaW5nIHRlc3RKc3BTdHJpbmcgPSAidGVzdEpzcFN0cmluZyI7IA0KLQ0KLXB1YmxpYyB2b2lkIF9qc3BTZXJ2aWNlKGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpDQotCQl0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiwgamF2YXguc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsNCi1qYXZheC5zZXJ2bGV0LmpzcC5QYWdlQ29udGV4dCBwYWdlQ29udGV4dCA9IG51bGw7DQotamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dCBhcHBsaWNhdGlvbiA9IG51bGw7DQotamF2YXguc2VydmxldC5TZXJ2bGV0Q29uZmlnIGNvbmZpZyA9IG51bGw7DQotamF2YXguc2VydmxldC5qc3AuSnNwV3JpdGVyIG91dCA9IG51bGw7DQotT2JqZWN0IHBhZ2UgPSBudWxsOw0KLWphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2Vzc2lvbiBzZXNzaW9uID0gbnVsbDsNCi0NCi10cnkgew0KLW91dC5wcmludCgiIisNCi0gdGVzdEpzcFN0cmluZyANCi0pOw0KLSAgDQotDQotICAgICAgICBpZiggcmVxdWVzdC5nZXRBdHRyaWJ1dGUoIlNvYXBVUkwiKSAhPSBudWxsICkNCi0gICAgICAgIHsNCi0gICAgICAgIA0KLW91dC5wcmludCgiIisNCi0gKFN0cmluZylyZXF1ZXN0LmdldEF0dHJpYnV0ZSgiU29hcFVSTCIpDQotKTsNCi0NCi0gICAgICAgIH0NCi0gICAgICAgIGVsc2UNCi0gICAgICAgIHsgDQotICAgICAgICANCi0gfSANCi0gfSBjYXRjaCAoamF2YS5sYW5nLkV4Y2VwdGlvbiBlKSB7fSANCi19fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvY29udGVudGFzc2lzdC90ZXN0ZmlsZXMvanNwSW5KYXZhc2NyaXB0Mi5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL2NvbnRlbnRhc3Npc3QvdGVzdGZpbGVzL2pzcEluSmF2YXNjcmlwdDIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjM4NDNjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvY29udGVudGFzc2lzdC90ZXN0ZmlsZXMvanNwSW5KYXZhc2NyaXB0Mi5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxIVE1MPgotPEhFQUQ+Ci08JUAgcGFnZSAKLWxhbmd1YWdlPSJqYXZhIgotY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIgotcGFnZUVuY29kaW5nPSJJU08tODg1OS0xIgotJT4KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPE1FVEEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJJQk0gV2ViU3BoZXJlIFN0dWRpbyI+Ci08VElUTEU+cG1yLmpzcDwvVElUTEU+Ci0KLTwlIVN0cmluZyB0ZXN0SnNwU3RyaW5nID0gInRlc3RKc3BTdHJpbmciOyAlPgotPHNjcmlwdD4gCi0KLXZhciB0ZXN0ID0gPCU9IHRlc3RKc3BTdHJpbmcgJT47Ci0KLTwvc2NyaXB0PgotCi0KLQotPC9IRUFEPgotPEJPRFk+Ci08JSAgJT4KLTxQPlBsYWNlIGpzcEluSmF2YXNjcmlwdDIuanNwJ3MgY29udGVudCBoZXJlLjwvUD4KLSAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4gICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgIDwlCi0gICAgICAgIGlmKCByZXF1ZXN0LmdldEF0dHJpYnV0ZSgiU29hcFVSTCIpICE9IG51bGwgKQotICAgICAgICB7Ci0gICAgICAgICU+Ci0gICAgICAgIHZhciBzb2FwVVJMID0gIjwlPSAoU3RyaW5nKXJlcXVlc3QuZ2V0QXR0cmlidXRlKCJTb2FwVVJMIiklPiI7Ci0gICAgICAgIDwlCi0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7IAotICAgICAgICAlPgotICAgICAgICB2YXIgc29hcFVSTCA9IGRvY3VtZW50LmxvY2F0aW9uLmhyZWY7Ci0gICA8L3NjcmlwdD4KLTwlIH0gJT4KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvY29udGVudGFzc2lzdC90cmFuc2xhdGVkX3RleHQuYmluIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9jb250ZW50YXNzaXN0L3RyYW5zbGF0ZWRfdGV4dC5iaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwZWIzNjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9jb250ZW50YXNzaXN0L3RyYW5zbGF0ZWRfdGV4dC5iaW4KKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi1pbXBvcnQgamF2YXguc2VydmxldC4qOwotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC4qOwotaW1wb3J0IGphdmF4LnNlcnZsZXQuanNwLio7Ci0KLXB1YmxpYyBjbGFzcyBfXzJGX0lOQ0xVREVTX1RFU1RTXzJGX2pzcF9pbmNsdWRlX3Rlc3RfMkVfanNwIGV4dGVuZHMgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0ewotIFN0cmluZyBhcmdoID0gImFyZ2giOyAKLQotIHB1YmxpYyBTdHJpbmcgZ2xvYmFsSW5jbHVkZWRTdHJpbmcgPSAiaW5jbHVkZWQiOwotCi0gcHJvdGVjdGVkIFN0cmluZyB3aXRoX3NwYWNlID0gIndpdGhzcGFjZSI7Ci0KLXB1YmxpYyB2b2lkIF9qc3BTZXJ2aWNlKGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpCi0JCXRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uLCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewotamF2YXguc2VydmxldC5qc3AuUGFnZUNvbnRleHQgcGFnZUNvbnRleHQgPSBudWxsOwotamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dCBhcHBsaWNhdGlvbiA9IG51bGw7Ci1qYXZheC5zZXJ2bGV0LlNlcnZsZXRDb25maWcgY29uZmlnID0gbnVsbDsKLWphdmF4LnNlcnZsZXQuanNwLkpzcFdyaXRlciBvdXQgPSBudWxsOwotT2JqZWN0IHBhZ2UgPSBudWxsOwotamF2YXguc2VydmxldC5odHRwLkh0dHBTZXNzaW9uIHNlc3Npb24gPSBudWxsOwotCi10cnkgewotIFN0cmluZyBsb2NhbEluY2x1ZGVkU3RyaW5nID0gZ2xvYmFsSW5jbHVkZWRTdHJpbmc7Ci1mb3IoaW50IGk9MDsgaTw1OyBpKyspIHsKLW91dC5wcmludCgiIisKLWkKLSk7Ci19Ci1qYXZheC5zd2luZy5KQnV0dG9uIEJFQU5faW5jbHVkZWRCZWFuID0gbmV3IGphdmF4LnN3aW5nLkpCdXR0b24oKTsKLSBpbnQgaW5jbHVkZV9pbmNsdWRlX2ludCA9IDU7IAotamF2YXguc3dpbmcuSkJ1dHRvbiBpbmNsdWRlc1VzZUJlYW4gPSBuZXcgamF2YXguc3dpbmcuSkJ1dHRvbigpOwoteyAvLyA8Z2lmdHM6Z2lmdD4KLX0gLy8gPC9naWZ0czpnaWZ0Pgotb3V0LnByaW50KCIiKwotICAgCi0pOwotIH0gY2F0Y2ggKGphdmEubGFuZy5FeGNlcHRpb24gZSkge30gCi19fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvY29udGVudGFzc2lzdC90cmFuc2xhdGVkX3htbF9qc3AuYmluIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9jb250ZW50YXNzaXN0L3RyYW5zbGF0ZWRfeG1sX2pzcC5iaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxNGFjMDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9jb250ZW50YXNzaXN0L3RyYW5zbGF0ZWRfeG1sX2pzcC5iaW4KKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi1pbXBvcnQgamF2YXguc2VydmxldC4qOwotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC4qOwotaW1wb3J0IGphdmF4LnNlcnZsZXQuanNwLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLXB1YmxpYyBjbGFzcyBfXzJGX0lOQ0xVREVTX1RFU1RTXzJGX3htbF8yRF9qc3BfMkZfbW9zdF8yRF90YWdzXzJEX3htbF8yRF9qc3BfMkVfanNwIGV4dGVuZHMgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0ewotcHVibGljIFN0cmluZyBteUZ1bmMoKSB7IHJldHVybiAibXlmdW5jIjsgfQotCi1wdWJsaWMgU3RyaW5nIG15RnVuYzIoKSB7IHJldHVybiAibXlmdW5jIjsgfQotCi1wdWJsaWMgdm9pZCBfanNwU2VydmljZShqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKQotCQl0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiwgamF2YXguc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKLWphdmF4LnNlcnZsZXQuanNwLlBhZ2VDb250ZXh0IHBhZ2VDb250ZXh0ID0gbnVsbDsKLWphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQgYXBwbGljYXRpb24gPSBudWxsOwotamF2YXguc2VydmxldC5TZXJ2bGV0Q29uZmlnIGNvbmZpZyA9IG51bGw7Ci1qYXZheC5zZXJ2bGV0LmpzcC5Kc3BXcml0ZXIgb3V0ID0gbnVsbDsKLU9iamVjdCBwYWdlID0gbnVsbDsKLWphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2Vzc2lvbiBzZXNzaW9uID0gbnVsbDsKLQotdHJ5IHsKLVN0cmluZyBjb25zZWMxID0gInRlc3QiOwotU3RyaW5nIGNvbnNlYzIgPSAidHdvIjsKLW91dC5wcmludCgiIisKLW15RnVuYygpCi0pOwotb3V0LnByaW50KCIiKwotbXlGdW5jMigpCi0pOwotamF2YXguc3dpbmcuQWJzdHJhY3RCdXR0b24gamIgPSBuZXcgamF2YXguc3dpbmcuSkJ1dHRvbigpOwotU3RyaW5nIGluY2x1ZGVkU3RyaW5nID0gImluY2QiOwotICAgamIuIAoteyAvLyA8bG9naWM6aXRlcmF0ZT4KLX0gLy8gPC9sb2dpYzppdGVyYXRlPgotIH0gY2F0Y2ggKGphdmEubGFuZy5FeGNlcHRpb24gZSkge30gCi19fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvY29udGVudGFzc2lzdC90cmFuc2xhdGVkX3htbF9qc3BfY2RhdGEuYmluIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9jb250ZW50YXNzaXN0L3RyYW5zbGF0ZWRfeG1sX2pzcF9jZGF0YS5iaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2NTdmNTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9jb250ZW50YXNzaXN0L3RyYW5zbGF0ZWRfeG1sX2pzcF9jZGF0YS5iaW4KKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi1pbXBvcnQgamF2YXguc2VydmxldC4qOwotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC4qOwotaW1wb3J0IGphdmF4LnNlcnZsZXQuanNwLio7Ci0KLXB1YmxpYyBjbGFzcyBfXzJGX0lOQ0xVREVTX1RFU1RTXzJGX2NkYXRhXzJGX2NkYXRhXzJFX2pzcCBleHRlbmRzIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldHsKLXB1YmxpYyB2b2lkIF9qc3BTZXJ2aWNlKGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpCi0JCXRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uLCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb24gewotamF2YXguc2VydmxldC5qc3AuUGFnZUNvbnRleHQgcGFnZUNvbnRleHQgPSBudWxsOwotamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dCBhcHBsaWNhdGlvbiA9IG51bGw7Ci1qYXZheC5zZXJ2bGV0LlNlcnZsZXRDb25maWcgY29uZmlnID0gbnVsbDsKLWphdmF4LnNlcnZsZXQuanNwLkpzcFdyaXRlciBvdXQgPSBudWxsOwotT2JqZWN0IHBhZ2UgPSBudWxsOwotamF2YXguc2VydmxldC5odHRwLkh0dHBTZXNzaW9uIHNlc3Npb24gPSBudWxsOwotCi10cnkgewotCi1pbnQgYSA9IDE7Ci1pZiAoYSAKLTwKLSAyKSB7Ci0gb3V0LnByaW50bG4oIngiKTsKLX0gCi0gICAKLVN0cmluZyB0ZXN0ID0gIiI7Ci0KLQotICAgCi1pbnQgYSA9IDE7Ci1pZiAoYSA8IDIpIHsgICAKLSBvdXQucHJpbnRsbigieCIpOwotfQotCi0KLSAKLSB0ZXN0LnRvVXBwZXJDYXNlKCk7Ci0gfSBjYXRjaCAoamF2YS5sYW5nLkV4Y2VwdGlvbiBlKSB7fSAKLX19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9jb250ZW50ZGVzY3JpcHRpb24vVGVzdENvbnRlbnREZXNjcmlwdGlvbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9jb250ZW50ZGVzY3JpcHRpb24vVGVzdENvbnRlbnREZXNjcmlwdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNWYzNTQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvY29udGVudGRlc2NyaXB0aW9uL1Rlc3RDb250ZW50RGVzY3JpcHRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5jb250ZW50ZGVzY3JpcHRpb247Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5maWxlYnVmZmVycy5GaWxlQnVmZmVyczsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlF1YWxpZmllZE5hbWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmNvbnRlbnQuSUNvbnRlbnREZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuY29udGVudC5JQ29udGVudFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLkxvZ2dlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvckpTUDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuSUNvbnRlbnREZXNjcmlwdGlvbkZvckpTUDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLmRvY3VtZW50LlVuemlwcGVkUHJvamVjdFRlc3RlcjsKLQotLyoqCi0gKiBUZXN0cyB0aGF0IG91ciBDb250ZW50RGVzY3JpYmVyRm9ySlNQIGlzIHdvcmtpbmcgYXMgZXhwZWN0ZWQsCi0gKiBXZSBjaGVjayB0aGF0IHRoZSBjb250ZW50IGRlc2NyaXB0aW9uIGZvciBhIGdpdmVuIGlucHV0IHN0cmVhbSBoYXMgYWxsCi0gKiBvZiB0aGUgYXBwcm9wcmlhdGUgcHJvcGVydGllcy4KLSAqICh0aHJvdWdoIHRoZSBQbGF0Zm9ybSBjb250ZW50IHR5cGUgZnJhbWV3b3JrKQotICovCi1wdWJsaWMgY2xhc3MgVGVzdENvbnRlbnREZXNjcmlwdGlvbiBleHRlbmRzIFVuemlwcGVkUHJvamVjdFRlc3RlciB7Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9YTUxQSVdpdGhKU1BTeW50YXgoKSB7Ci0JCUhhc2hNYXAgZXhwZWN0ZWRQcm9wZXJ0aWVzID0gbmV3IEhhc2hNYXAoKTsKLQkJZXhwZWN0ZWRQcm9wZXJ0aWVzLnB1dChJQ29udGVudERlc2NyaXB0aW9uRm9ySlNQLkNPTlRFTlRfVFlQRV9BVFRSSUJVVEUsICJ0ZXh0L3htbCIpOwotCQlleHBlY3RlZFByb3BlcnRpZXMucHV0KElDb250ZW50RGVzY3JpcHRpb24uQ0hBUlNFVCwgIlVURi04Iik7Ci0JCWRvVGVzdENvbnRlbnREZXNjcmlwdGlvbigiL2NvbnRlbnQtZGVzY3JpcHRpb24vUHVyY2hhc2VPcmRlci1uby1YTUxQSS1qc3Atc3ludGF4LmpzcCIsIGV4cGVjdGVkUHJvcGVydGllcyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RXaXRoWE1MUElXaXRoSlNQU3ludGF4KCkgewotCQlIYXNoTWFwIGV4cGVjdGVkUHJvcGVydGllcyA9IG5ldyBIYXNoTWFwKCk7Ci0JCWV4cGVjdGVkUHJvcGVydGllcy5wdXQoSUNvbnRlbnREZXNjcmlwdGlvbkZvckpTUC5DT05URU5UX1RZUEVfQVRUUklCVVRFLCAidGV4dC94bWwiKTsKLQkJZXhwZWN0ZWRQcm9wZXJ0aWVzLnB1dChJQ29udGVudERlc2NyaXB0aW9uLkNIQVJTRVQsICJVVEYtOCIpOwotCQlkb1Rlc3RDb250ZW50RGVzY3JpcHRpb24oIi9jb250ZW50LWRlc2NyaXB0aW9uL1B1cmNoYXNlT3JkZXItd2l0aC1YTUxQSS1qc3Atc3ludGF4LmpzcCIsIGV4cGVjdGVkUHJvcGVydGllcyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RXaXRoWE1MUElXaXRoWE1MU3ludGF4KCkgewotCQlIYXNoTWFwIGV4cGVjdGVkUHJvcGVydGllcyA9IG5ldyBIYXNoTWFwKCk7Ci0JCWV4cGVjdGVkUHJvcGVydGllcy5wdXQoSUNvbnRlbnREZXNjcmlwdGlvbkZvckpTUC5DT05URU5UX1RZUEVfQVRUUklCVVRFLCAidGV4dC94bWwiKTsKLQkJZXhwZWN0ZWRQcm9wZXJ0aWVzLnB1dChJQ29udGVudERlc2NyaXB0aW9uLkNIQVJTRVQsICJVVEYtOCIpOwotCQlkb1Rlc3RDb250ZW50RGVzY3JpcHRpb24oIi9jb250ZW50LWRlc2NyaXB0aW9uL1B1cmNoYXNlT3JkZXItd2l0aC1YTUxQSS14bWwtc3ludGF4LmpzcCIsIGV4cGVjdGVkUHJvcGVydGllcyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RKU1BXaXRoSFRNTE91dHB1dCgpIHsKLQkJSGFzaE1hcCBleHBlY3RlZFByb3BlcnRpZXMgPSBuZXcgSGFzaE1hcCgpOwotCQlleHBlY3RlZFByb3BlcnRpZXMucHV0KElDb250ZW50RGVzY3JpcHRpb25Gb3JKU1AuQ09OVEVOVF9UWVBFX0FUVFJJQlVURSwgInRleHQvaHRtbCIpOwotCQlkb1Rlc3RDb250ZW50RGVzY3JpcHRpb24oIi9jb250ZW50LWRlc2NyaXB0aW9uL2h0bWwuanNwIiwgZXhwZWN0ZWRQcm9wZXJ0aWVzKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEpTUFdpdGhYSFRNTE91dHB1dCgpIHsKLQkJSGFzaE1hcCBleHBlY3RlZFByb3BlcnRpZXMgPSBuZXcgSGFzaE1hcCgpOwotCQlleHBlY3RlZFByb3BlcnRpZXMucHV0KElDb250ZW50RGVzY3JpcHRpb25Gb3JKU1AuQ09OVEVOVF9UWVBFX0FUVFJJQlVURSwgInRleHQveGh0bWwiKTsKLQkJZG9UZXN0Q29udGVudERlc2NyaXB0aW9uKCIvY29udGVudC1kZXNjcmlwdGlvbi94aHRtbC5qc3AiLCBleHBlY3RlZFByb3BlcnRpZXMpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0SlNQV2l0aFhNTE91dHB1dCgpIHsKLQkJSGFzaE1hcCBleHBlY3RlZFByb3BlcnRpZXMgPSBuZXcgSGFzaE1hcCgpOwotCQlleHBlY3RlZFByb3BlcnRpZXMucHV0KElDb250ZW50RGVzY3JpcHRpb25Gb3JKU1AuQ09OVEVOVF9UWVBFX0FUVFJJQlVURSwgInRleHQveG1sIik7Ci0JCWRvVGVzdENvbnRlbnREZXNjcmlwdGlvbigiL2NvbnRlbnQtZGVzY3JpcHRpb24veG1sLmpzcCIsIGV4cGVjdGVkUHJvcGVydGllcyk7Ci0JfQotCQotCXByaXZhdGUgdm9pZCBkb1Rlc3RDb250ZW50RGVzY3JpcHRpb24oU3RyaW5nIGZpbGVQYXRoLCBIYXNoTWFwIGV4cGVjdGVkUHJvcGVydGllcykgewotCQlJQ29udGVudERlc2NyaXB0aW9uIGRlc2MgPSBnZXRDb250ZW50RGVzY3JpcHRpb24oZmlsZVBhdGgpOwotCQlhc3NlcnROb3ROdWxsKCJjb3VsZG4ndCBnZXQgSUNvbnRlbnREZXNjcmlwdGlvbiBmb3IgZmlsZTpbIiArIGZpbGVQYXRoICsgIl0iLCBkZXNjKTsKLQkJT2JqZWN0W10ga2V5cyA9IGV4cGVjdGVkUHJvcGVydGllcy5rZXlTZXQoKS50b0FycmF5KCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykgewotCQkJCi0JCQlPYmplY3QgZXhwZWN0ZWQgPSBleHBlY3RlZFByb3BlcnRpZXMuZ2V0KGtleXNbaV0pOwotCQkJT2JqZWN0IGRldGVjdGVkID0gZGVzYy5nZXRQcm9wZXJ0eSggKFF1YWxpZmllZE5hbWUpa2V5c1tpXSApOwotCQkJYXNzZXJ0RXF1YWxzKCJ1bmV4cGVjdGVkIHByb3BlcnR5IHZhbHVlIiwgZXhwZWN0ZWQsIGRldGVjdGVkKTsKLQkJfQotCX0KLQkKLQlwcml2YXRlIElDb250ZW50RGVzY3JpcHRpb24gZ2V0Q29udGVudERlc2NyaXB0aW9uKFN0cmluZyBmaWxlUGF0aCkgewotCQlpZihmaWxlUGF0aCA9PSBudWxsKQotCQkJcmV0dXJuIG51bGw7Ci0JCi0JCUlucHV0U3RyZWFtIGluID0gbnVsbDsKLQkJdHJ5IHsKLQkJCS8vIHdvcmtzcGFjZSBmaWxlCi0JCQlJRmlsZSB3c0ZpbGUgPSBGaWxlQnVmZmVycy5nZXRXb3Jrc3BhY2VGaWxlQXRMb2NhdGlvbihuZXcgUGF0aChmaWxlUGF0aCkpOwotCQkJaWYod3NGaWxlICE9IG51bGwgJiYgd3NGaWxlLmV4aXN0cygpKSB7Ci0JCQkJaW4gPSB3c0ZpbGUuZ2V0Q29udGVudHMoKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCS8vIGV4dGVybmFsIGZpbGUKLQkJCQlGaWxlIHNGaWxlID0gRmlsZUJ1ZmZlcnMuZ2V0U3lzdGVtRmlsZUF0TG9jYXRpb24obmV3IFBhdGgoZmlsZVBhdGgpKTsKLQkJCQlpZihzRmlsZSAhPW51bGwgJiYgc0ZpbGUuZXhpc3RzKCkpCi0JCQkJCWluID0gbmV3IEZpbGVJbnB1dFN0cmVhbShzRmlsZSk7Ci0JCQl9Ci0JCX0KLQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJTG9nZ2VyLmxvZ0V4Y2VwdGlvbihlKTsKLQkJfQotCQljYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKLQkJCUxvZ2dlci5sb2dFeGNlcHRpb24oZSk7Ci0JCX0KLQkJCi0JCWFzc2VydE5vdE51bGwoaW4pOwotCQkKLQkJcmV0dXJuIGdldENvbnRlbnREZXNjcmlwdGlvbihpbik7Ci0JfQotCQotCS8qKgotCSAqIFJldHVybnMgY29udGVudCBkZXNjcmlwdGlvbiBmb3IgYW4gaW5wdXQgc3RyZWFtCi0JICogQXNzdW1lcyBpdCdzIEpTUCBjb250ZW50LgotCSAqIENsb3NlcyB0aGUgaW5wdXQgc3RyZWFtIHdoZW4gZmluaXNoZWQuCi0JICogCi0JICogQHBhcmFtIGluCi0JICogQHJldHVybiB0aGUgSUNvbnRlbnREZXNjcmlwdGlvbiBmb3IgaW4KLQkgKi8KLQlwcml2YXRlIElDb250ZW50RGVzY3JpcHRpb24gZ2V0Q29udGVudERlc2NyaXB0aW9uKElucHV0U3RyZWFtIGluKSB7Ci0JCQotCQlpZihpbiA9PSBudWxsKQotCQkJcmV0dXJuIG51bGw7Ci0JCQotCQlJQ29udGVudERlc2NyaXB0aW9uIGRlc2MgPSBudWxsOwotCQl0cnkgewotCQkJCi0JCQlJQ29udGVudFR5cGUgY29udGVudFR5cGVKU1AgPSBQbGF0Zm9ybS5nZXRDb250ZW50VHlwZU1hbmFnZXIoKS5nZXRDb250ZW50VHlwZShDb250ZW50VHlwZUlkRm9ySlNQLkNvbnRlbnRUeXBlSURfSlNQKTsKLQkJCWRlc2MgPSBjb250ZW50VHlwZUpTUC5nZXREZXNjcmlwdGlvbkZvcihpbiwgSUNvbnRlbnREZXNjcmlwdGlvbi5BTEwpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQlMb2dnZXIubG9nRXhjZXB0aW9uKGUpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYoaW4gIT0gbnVsbCkgewotCQkJCXRyeSB7Ci0JCQkJCWluLmNsb3NlKCk7Ci0JCQkJfQotCQkJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkJCUxvZ2dlci5sb2dFeGNlcHRpb24oZSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiBkZXNjOwotCX0KLQkKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvZG9jdW1lbnQvRmlsZUJ1ZmZlckRvY3VtZW50VGVzdGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL2RvY3VtZW50L0ZpbGVCdWZmZXJEb2N1bWVudFRlc3Rlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMDEzNjY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvZG9jdW1lbnQvRmlsZUJ1ZmZlckRvY3VtZW50VGVzdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuZG9jdW1lbnQ7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5maWxlYnVmZmVycy5GaWxlQnVmZmVyczsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmZpbGVidWZmZXJzLklUZXh0RmlsZUJ1ZmZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmZpbGVidWZmZXJzLklUZXh0RmlsZUJ1ZmZlck1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50RXh0ZW5zaW9uMzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudFBhcnRpdGlvbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC50ZXh0LlN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1A7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWRQYXJ0aXRpb25pbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnRleHQuQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnV0aWwuVXRpbGl0aWVzOwotCi0KLXB1YmxpYyBjbGFzcyBGaWxlQnVmZmVyRG9jdW1lbnRUZXN0ZXIgZXh0ZW5kcyBVbnppcHBlZFByb2plY3RUZXN0ZXIgewotCi0JcHJpdmF0ZSB2b2lkIGRvVGVzdENyZWF0ZShTdHJpbmcgZmlsZVBhdGgsIENsYXNzIGV4cGVjdGVkRG9jdW1lbnRDbGFzcywgQ2xhc3MgZXhwZWN0ZWRQYXJ0aW9uZXIpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCUlGaWxlIGZpbGUgPSAoSUZpbGUpIGZUZXN0UHJvamVjdC5maW5kTWVtYmVyKGZpbGVQYXRoKTsKLQkJYXNzZXJ0Tm90TnVsbCgiVGVzdCBDYXNlIGluIGVycm9yLiBDb3VsZCBub3QgZmluZCBmaWxlICIgKyBmaWxlUGF0aCwgZmlsZSk7Ci0JCUlQYXRoIGxvY2F0aW9uUGF0aCA9IGZpbGUuZ2V0TG9jYXRpb24oKTsKLQkJSVRleHRGaWxlQnVmZmVyTWFuYWdlciBidWZmZXJNYW5hZ2VyID0gRmlsZUJ1ZmZlcnMuZ2V0VGV4dEZpbGVCdWZmZXJNYW5hZ2VyKCk7Ci0JCWJ1ZmZlck1hbmFnZXIuY29ubmVjdChsb2NhdGlvblBhdGgsIG51bGwpOwotCQlJVGV4dEZpbGVCdWZmZXIgYnVmZmVyID0gYnVmZmVyTWFuYWdlci5nZXRUZXh0RmlsZUJ1ZmZlcihsb2NhdGlvblBhdGgpOwotCQlJRG9jdW1lbnQgZG9jdW1lbnQgPSBidWZmZXIuZ2V0RG9jdW1lbnQoKTsKLQkJYXNzZXJ0Tm90TnVsbChkb2N1bWVudCk7Ci0JCWFzc2VydFRydWUoIndyb25nIGNsYXNzIG9mIGRvY3VtZW50IiwgZXhwZWN0ZWREb2N1bWVudENsYXNzLmlzSW5zdGFuY2UoZG9jdW1lbnQpKTsKLQkJSURvY3VtZW50UGFydGl0aW9uZXIgc2V0dXBQYXJ0aXRpb25lciA9IG51bGw7Ci0JCWlmIChVdGlsaXRpZXMuY29udGFpbnMoZXhwZWN0ZWREb2N1bWVudENsYXNzLmdldEludGVyZmFjZXMoKSwgSURvY3VtZW50RXh0ZW5zaW9uMy5jbGFzcykpIHsKLQkJCXNldHVwUGFydGl0aW9uZXIgPSAoKElEb2N1bWVudEV4dGVuc2lvbjMpIGRvY3VtZW50KS5nZXREb2N1bWVudFBhcnRpdGlvbmVyKElTdHJ1Y3R1cmVkUGFydGl0aW9uaW5nLkRFRkFVTFRfU1RSVUNUVVJFRF9QQVJUSVRJT05JTkcpOwotCQl9Ci0JCWVsc2UgewotCQkJc2V0dXBQYXJ0aXRpb25lciA9IGRvY3VtZW50LmdldERvY3VtZW50UGFydGl0aW9uZXIoKTsKLQkJfQotCQlhc3NlcnRUcnVlKCJ3cm9uZyBwYXJ0aXRpb25lciBpbiBkb2N1bWVudC4iLCBleHBlY3RlZFBhcnRpb25lci5pc0luc3RhbmNlKHNldHVwUGFydGl0aW9uZXIpKTsKLQkJYnVmZmVyTWFuYWdlci5kaXNjb25uZWN0KGxvY2F0aW9uUGF0aCwgbnVsbCk7Ci0KLS8vCQlkb1Rlc3RDcmVhdGVXaXRoRmFjYWRlKGZpbGUsIGV4cGVjdGVkRG9jdW1lbnRDbGFzcywgZXhwZWN0ZWRQYXJ0aW9uZXIpOwotCQkgCi0JfQotCi0KLQotLyoKLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL0VtcHR5RmlsZS54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvZXVjanAueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL0lsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL01hbGZvcm1lZE5vRW5jb2RpbmcueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL01hbGZvcm1lZE5vRW5jb2RpbmcueHNsIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL05vRW5jb2RpbmcueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL05vcm1hbE5vbkRlZmF1bHQueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTEwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3NoaWZ0amlzLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC90ZXN0RXh0cmFKdW5rLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC90ZXN0RXh0cmFWYWxpZFN0dWZmLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC90ZXN0SWxsRm9ybWVkLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC90ZXN0SWxsRm9ybWVkMi54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZDMueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3Rlc3RJbGxGb3JtZWQ0LnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC90ZXN0TXVsdGlMaW5lLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC90ZXN0Tm9FbmNvZGluZ1ZhbHVlLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC90ZXN0Tm9ybWFsQ2FzZS54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdGVzdE5vWE1MRGVjbC54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdGVzdE5vWE1MRGVjbEF0Rmlyc3QueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb1hNTERlY2xJbkxhcmdlRmlsZS54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdGVzdFVURjE2LnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC9VVEYxNkxFQXRTdGFydE9mTGFyZ2VGaWxlLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyMi54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlckJFLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC91dGYxNldpdGhKYXBhbmVzZUNoYXJzLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC9VVEY4V2l0aDNCeXRlQk9NLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9uRXhpc3RlbnRYTUwoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZUNyZWF0ZUVtcHR5KCJ0ZXN0ZmlsZXMveG1sL3Rlc3Rub25leGlzdGVudC54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNpbXBsZUNhc2UoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdGVzdE5vcm1hbENhc2UueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2Nzcy9lbXB0eUZpbGUuY3NzIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JDU1MuY2xhc3MpOwotCX0KLQotKi8KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvTWFsZm9ybWVkTm9FbmNvZGluZ1hTTC5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC90ZXN0QnJva2VuTGluZS5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4MigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC90ZXN0RGVmYXVsdEVuY29kaW5nLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL3Rlc3REZWZhdWx0RW5jb2RpbmdXaXRoSnVuay5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC90ZXN0RXh0cmFKdW5rLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL3Rlc3RFeHRyYVZhbGlkU3R1ZmYuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdGVzdElsbEZvcm1lZC5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC90ZXN0SWxsRm9ybWVkMi5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC90ZXN0Tm9FbmNvZGluZ1ZhbHVlLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmUuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdGVzdE5vUGFnZURpcmVjdGl2ZUF0Rmlyc3QuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdGVzdE5vUGFnZURpcmVjdGl2ZUluTGFyZ2VGaWxlLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL3Rlc3ROb3JtYWxDYXNlLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL3Rlc3RVVEYxNi5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5NCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyMi5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5NSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyQkUuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdXRmMTZXaXRoSmFwYW5lc2VDaGFycy5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC9VVEY4V2l0aDNCeXRlQk9NLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL1dlbGxGb3JtZWROb3JtYWxOb25EZWZhdWx0LmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjMzNjUvU2VsQ29sQmVhblJvdzEyUmVzdWx0c0Zvcm0uanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjMzNjUvU2VsQ29sQmVhblJvdzEyUmVzdWx0c0Zvcm1CLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3JlZ3Jlc3Npb25UZXN0RmlsZXMvZGVmZWN0MjI0MjkzL3Rlc3RzaGlmdGppc1htbFN5bnRheC5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9yZWdyZXNzaW9uVGVzdEZpbGVzL2RlZmVjdDIyOTY2Ny9hdWRpLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3Avbm9FbmNvZGluZy5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC9Ob0VuY29kaW5naW5YTUxEZWNsLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTczKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZS5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3NCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VOb0VuY29kaW5nLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZVVzaW5nQ2hhcnNldC5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VVc2luZ1hNTFN5bnRheC5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC9Ob3JtYWxOb25EZWZhdWx0LmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL05vcm1hbE5vbkRlZmF1bHRXaXRoWE1MRGVjbC5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC9Ob3JtYWxQYWdlQ2FzZU5vbkRlZmF1bHQuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvU2VsQ29sQmVhblJvdzEyUmVzdWx0c0Zvcm0uanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9kb2N1bWVudC9VbnppcHBlZFByb2plY3RUZXN0ZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvZG9jdW1lbnQvVW56aXBwZWRQcm9qZWN0VGVzdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4ZjFmZGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9kb2N1bWVudC9VbnppcHBlZFByb2plY3RUZXN0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyNCArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuZG9jdW1lbnQ7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuSlNQVUlUZXN0c1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnV0aWwuUHJvamVjdFVuemlwVXRpbGl0eTsKLQotLyoqCi0gKiBAYXV0aG9yIHBhdmVyeQotICovCi1wdWJsaWMgY2xhc3MgVW56aXBwZWRQcm9qZWN0VGVzdGVyIGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHJvdGVjdGVkIHN0YXRpYyBJUHJvamVjdCBmVGVzdFByb2plY3Q7Ci0JcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBmVGVzdFByb2plY3RJbml0aWFsaXplZDsKLQlwcml2YXRlIHN0YXRpYyBpbnQgblNldHVwcyA9IDA7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfUFJPSkVDVF9OQU1FID0gIm9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5uZXd0ZXN0cyI7Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zZXRVcCgpOwotCQluU2V0dXBzKys7Ci0JCWlmICghZlRlc3RQcm9qZWN0SW5pdGlhbGl6ZWQpIHsKLQkJCWdldEFuZENyZWF0ZVByb2plY3QoKTsKLQkJCS8vIHVuemlwIGZpbGVzIHRvIHRoZSByb290IG9mIHdvcmtzcGFjZSBkaXJlY3RvcnkKLQkJCVN0cmluZyBkZXN0aW5hdGlvblByb2plY3RTdHJpbmcgPSBmVGVzdFByb2plY3QuZ2V0TG9jYXRpb24oKS50b09TU3RyaW5nKCk7Ci0JCQlTdHJpbmcgZGVzdGluYXRpb25Gb2xkZXIgPSBkZXN0aW5hdGlvblByb2plY3RTdHJpbmcgKyAiLyI7Ci0JCQkvLyB0aGlzIHppcCBmaWxlIGlzIHNpdHRpbmcgaW4gdGhlICJyb290IiBvZiB0ZXN0IHBsdWdpbgotCQkJRmlsZSB6aXBGaWxlID0gSlNQVUlUZXN0c1BsdWdpbi5nZXRUZXN0RmlsZSgidGVzdGZpbGVzLnppcCIpOwotCQkJUHJvamVjdFVuemlwVXRpbGl0eSBwcm9qVXRpbCA9IG5ldyBQcm9qZWN0VW56aXBVdGlsaXR5KCk7Ci0JCQlwcm9qVXRpbC51bnppcEFuZEltcG9ydCh6aXBGaWxlLCBkZXN0aW5hdGlvbkZvbGRlcik7Ci0JCQlwcm9qVXRpbC5pbml0SmF2YVByb2plY3QoVEVTVF9QUk9KRUNUX05BTUUpOwotCQkJZlRlc3RQcm9qZWN0LnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQkJZlRlc3RQcm9qZWN0SW5pdGlhbGl6ZWQgPSB0cnVlOwotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIudGVhckRvd24oKTsKLQkJblNldHVwcy0tOwotCQlpZiAoblNldHVwcyA9PSAwKSB7Ci0JCQlpZiAoIURFQlVHKSB7Ci0JCQkJLy8JCQkJRGlzcGxheSBkaXNwbGF5ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXREaXNwbGF5KCk7Ci0JCQkJLy8JCQkJZGlzcGxheS5hc3luY0V4ZWMobmV3IFJ1bm5hYmxlKCkgewotCQkJCS8vCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJLy8JCQkJCQlQcm9qZWN0VW56aXBVdGlsaXR5IHByb2pVdGlsID0gbmV3IFByb2plY3RVbnppcFV0aWxpdHkoKTsKLQkJCQkvLwkJCQkJCUlQcm9qZWN0IHByb2ogPSBmVGVzdFByb2plY3Q7Ci0JCQkJLy8JCQkJCQlmVGVzdFByb2plY3QgPSBudWxsOwotCQkJCS8vCQkJCQkJdHJ5IHsKLQkJCQkvLwkJCQkJCQlwcm9qVXRpbC5kZWxldGVQcm9qZWN0KHByb2opOwotCQkJCS8vCQkJCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCQkvLwkJCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJCS8vCQkJCQkJfQotCQkJCS8vCQkJCQl9Ci0JCQkJLy8JCQkJfSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0KLQlwcml2YXRlIHN0YXRpYyB2b2lkIGdldEFuZENyZWF0ZVByb2plY3QoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCS8vVGVzdHNQbHVnaW4gdGVzdHNQbHVnaW4gPSAoVGVzdHNQbHVnaW4pCi0JCS8vIFBsYXRmb3JtLmdldFBsdWdpbigib3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLnRlc3RzIik7Ci0JCUlXb3Jrc3BhY2Ugd29ya3NwYWNlID0gZ2V0V29ya3NwYWNlKCk7Ci0JCUlXb3Jrc3BhY2VSb290IHJvb3QgPSB3b3Jrc3BhY2UuZ2V0Um9vdCgpOwotCQlmVGVzdFByb2plY3QgPSByb290LmdldFByb2plY3QoVEVTVF9QUk9KRUNUX05BTUUpOwotCQkvLyB0aGlzIGZvcm0gY3JlYXRlcyBwcm9qZWN0IGFzICJsaW5rZWQiIGJhY2sgdG8gJ2ZpbGVSb290JwotCQkvL2NyZWF0ZVByb2plY3QodGVzdFByb2plY3QsIG5ldyBQYXRoKGZpbGVSb290KSwgbnVsbCk7Ci0JCWNyZWF0ZVByb2plY3QoZlRlc3RQcm9qZWN0LCBudWxsLCBudWxsKTsKLQkJZlRlc3RQcm9qZWN0LnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQlhc3NlcnRUcnVlKGZUZXN0UHJvamVjdC5leGlzdHMoKSk7Ci0JCS8vCQlJQ29udGFpbmVyIGRvdGVzdEZpbGVzID0gdGVzdFByb2plY3QuZ2V0Rm9sZGVyKCJkb3Rlc3RGaWxlcyIpOwotCQkvLwkJYXNzZXJ0VHJ1ZShkb3Rlc3RGaWxlcy5leGlzdHMoKSk7Ci0JCS8vCQlJUmVzb3VyY2VbXSBhbGxGb2xkZXJzID0gZG90ZXN0RmlsZXMubWVtYmVycygpOwotCQkvLwkJYXNzZXJ0Tm90TnVsbChhbGxGb2xkZXJzKTsKLQl9Ci0gCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBjcmVhdGVQcm9qZWN0KElQcm9qZWN0IHByb2plY3QsIElQYXRoIGxvY2F0aW9uUGF0aCwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCWlmIChtb25pdG9yID09IG51bGwpIHsKLQkJCW1vbml0b3IgPSBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpOwotCQl9Ci0JCW1vbml0b3IuYmVnaW5UYXNrKCJjcmVhdGluZyB0ZXN0IHByb2plY3QiLCAxMCk7Ci0JCS8vIGNyZWF0ZSB0aGUgcHJvamVjdAotCQl0cnkgewotCQkJaWYgKCFwcm9qZWN0LmV4aXN0cygpKSB7Ci0JCQkJSVByb2plY3REZXNjcmlwdGlvbiBkZXNjID0gcHJvamVjdC5nZXRXb3Jrc3BhY2UoKS5uZXdQcm9qZWN0RGVzY3JpcHRpb24ocHJvamVjdC5nZXROYW1lKCkpOwotCQkJCWlmIChQbGF0Zm9ybS5nZXRMb2NhdGlvbigpLmVxdWFscyhsb2NhdGlvblBhdGgpKSB7Ci0JCQkJCWxvY2F0aW9uUGF0aCA9IG51bGw7Ci0JCQkJfQotCQkJCWRlc2Muc2V0TG9jYXRpb24obG9jYXRpb25QYXRoKTsKLQkJCQlwcm9qZWN0LmNyZWF0ZShkZXNjLCBtb25pdG9yKTsKLQkJCQltb25pdG9yID0gbnVsbDsKLQkJCX0KLQkJCWlmICghcHJvamVjdC5pc09wZW4oKSkgewotCQkJCXByb2plY3Qub3Blbihtb25pdG9yKTsKLQkJCQltb25pdG9yID0gbnVsbDsKLQkJCX0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb25pdG9yICE9IG51bGwpIHsKLQkJCQltb25pdG9yLmRvbmUoKTsKLQkJCX0KLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHdvcmtzcGFjZSBpbnN0YW5jZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElXb3Jrc3BhY2UgZ2V0V29ya3NwYWNlKCkgewotCQlyZXR1cm4gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvZXhhbXBsZXMvQ3JlYXRpbmdKU1BFeHByZXNzaW9uLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL2V4YW1wbGVzL0NyZWF0aW5nSlNQRXhwcmVzc2lvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZWIyMThmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvZXhhbXBsZXMvQ3JlYXRpbmdKU1BFeHByZXNzaW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5leGFtcGxlczsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvckpTUDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZm9ybWF0Lk5vZGVGb3JtYXR0ZXI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotCi1wdWJsaWMgY2xhc3MgQ3JlYXRpbmdKU1BFeHByZXNzaW9uIGV4dGVuZHMgVGVzdENhc2UgewotCi0JLyoqCi0JICogCi0JICovCi0JcHVibGljIENyZWF0aW5nSlNQRXhwcmVzc2lvbigpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBDcmVhdGluZ0pTUEV4cHJlc3Npb24oU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENyZWF0ZUpTUEV4cHJlc3Npb24oKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQkvLyBGaXJzdCBtYWtlIChlbXB0eSkgc3RydWN0dXJlZERvY3VtZW50Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG1vZGVsTWFuYWdlci5jcmVhdGVVbk1hbmFnZWRTdHJ1Y3R1cmVkTW9kZWxGb3IoQ29udGVudFR5cGVJZEZvckpTUC5Db250ZW50VHlwZUlEX0pTUCk7Ci0JCWFzc2VydFRydWUoIm1vZGVsIGNvdWxkIG5vdCBiZSBjcmVhdGVkISIsIG1vZGVsICE9IG51bGwpOwotCi0JCS8vIE5vdywgYXNzaWduaW5nIHVzZSBhIHBhZ2UgZGlyZWN0aXZlLCBidXQgbGVhdmluZyBlbWJlZGRlZCB0eXBlIHRoZSBzYW1lIGFzIGRlZmF1bHQKLQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0VGV4dCh0aGlzLCAiPCVAIHBhZ2UgY29udGVudFR5cGU9XCJ0ZXh0L2h0bWxcIiBsYW5ndWFnZT1cImphdmFcIiAlPiIpOwotCi0JCURvY3VtZW50IGRvYyA9ICgoSURPTU1vZGVsKSBtb2RlbCkuZ2V0RG9jdW1lbnQoKTsKLQotCQlFbGVtZW50IGpzcGV4cHJlc3Npb24gPSBkb2MuY3JlYXRlRWxlbWVudCgianNwOmV4cHJlc3Npb24iKTsKLQkJKChJRE9NRWxlbWVudCkganNwZXhwcmVzc2lvbikuc2V0SlNQVGFnKHRydWUpOwotCQlkb2MuYXBwZW5kQ2hpbGQoanNwZXhwcmVzc2lvbik7Ci0JCVRleHQgamF2YWNvZGUgPSBkb2MuY3JlYXRlVGV4dE5vZGUoIiAvLyBzb21lIGphdmEgY29kZSBoZXJlOyBpZiAoeCA8MCkgcmV0dXJuIG5ldyBTdHJpbmcoXCIwXCIpIGVsc2UgcmV0dXJuIG5ldyBTdHJpbmcgKFwiMVwiKTsgIik7Ci0JCWpzcGV4cHJlc3Npb24uYXBwZW5kQ2hpbGQoamF2YWNvZGUpOwotCi0KLQkJVGV4dCBjZGF0YXNlY3Rpb24gPSBkb2MuY3JlYXRlQ0RBVEFTZWN0aW9uKCIgLy8gc29tZSBjZGF0YSBqYXZhIGNvZGUgaGVyZTsgaWYgKHggPDApIHJldHVybiBuZXcgU3RyaW5nKFwiMFwiKSBlbHNlIHJldHVybiBuZXcgU3RyaW5nIChcIjFcIik7ICIpOwotCQlkb2MuYXBwZW5kQ2hpbGQoY2RhdGFzZWN0aW9uKTsKLQotCQkvLyBmb3JtYXQncyBub3QgbmVlZGVkLCBqdXN0IHByZXR0aWVyIC4uLiBub3Qgc3VyZSB3aHkgCi0JCS8vIGl0IHdvbid0IHdvcmsgcmlnaHQgb24gd2hvbGUgZG9jdW1lbnQuCi0JCW5ldyBOb2RlRm9ybWF0dGVyKCkuZm9ybWF0KGpzcGV4cHJlc3Npb24pOwotCQluZXcgTm9kZUZvcm1hdHRlcigpLmZvcm1hdChjZGF0YXNlY3Rpb24pOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oImRvY3VtZW50IHRleHQ6ICIpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4obW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuZ2V0KCkpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9mb3JtYXQvVGVzdENvbnRlbnRGb3JtYXR0ZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvZm9ybWF0L1Rlc3RDb250ZW50Rm9ybWF0dGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4ODBiMTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9mb3JtYXQvVGVzdENvbnRlbnRGb3JtYXR0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuZm9ybWF0OwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuUmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuZm9ybWF0dGVyLkZvcm1hdHRpbmdDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuZm9ybWF0dGVyLkZvcm1hdHRpbmdDb250ZXh0UHJvcGVydGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmZvcm1hdHRlci5JQ29udGVudEZvcm1hdHRlckV4dGVuc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmZvcm1hdHRlci5JRm9ybWF0dGluZ0NvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5zb3VyY2UuU291cmNlVmlld2VyQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLlN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbkpTUDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnV0aWwuUHJvamVjdFV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy51dGlsLlN0cmluZ0NvbXBhcmVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaW50ZXJuYWwuSFRNTENvcmVQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5IVE1MQ29yZVByZWZlcmVuY2VOYW1lczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLQotcHVibGljIGNsYXNzIFRlc3RDb250ZW50Rm9ybWF0dGVyIGV4dGVuZHMgVGVzdENhc2UgewotCVN0cmluZyB3dHBfYXV0b3Rlc3Rfbm9uaW50ZXJhY3RpdmUgPSBudWxsOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9KRUNUX05BTUUgPSAianNwZm9ybWF0dGluZyI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFVURl84ID0gIlVURi04IjsKLQotCXByaXZhdGUgU3RyaW5nQ29tcGFyZVV0aWwgZlN0cmluZ0NvbXBhcmVVdGlsOwotCXByaXZhdGUgSUZvcm1hdHRpbmdDb250ZXh0IGZDb250ZXh0OwotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc2V0VXAoKTsKLQotCQlTdHJpbmcgbm9uaW50ZXJhY3RpdmUgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoInd0cC5hdXRvdGVzdC5ub25pbnRlcmFjdGl2ZSIpOwotCQlpZiAobm9uaW50ZXJhY3RpdmUgIT0gbnVsbCkKLQkJCXd0cF9hdXRvdGVzdF9ub25pbnRlcmFjdGl2ZSA9IG5vbmludGVyYWN0aXZlOwotCQlTeXN0ZW0uc2V0UHJvcGVydHkoInd0cC5hdXRvdGVzdC5ub25pbnRlcmFjdGl2ZSIsICJ0cnVlIik7Ci0KLQkJaWYgKCFSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QoUFJPSkVDVF9OQU1FKS5leGlzdHMoKSkgewotCQkJUHJvamVjdFV0aWwuY3JlYXRlUHJvamVjdChQUk9KRUNUX05BTUUsIG51bGwsIG5ldyBTdHJpbmdbXXtKYXZhQ29yZS5OQVRVUkVfSUR9KTsKLQkJCVByb2plY3RVdGlsLmNvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZSgiL3Rlc3RmaWxlcy8iICsgUFJPSkVDVF9OQU1FLCAiLyIgKyBQUk9KRUNUX05BTUUpOwotCQl9Ci0JCWFzc2VydFRydWUoInByb2plY3QgY291bGQgbm90IGJlIGNyZWF0ZWQiLCBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QoUFJPSkVDVF9OQU1FKS5leGlzdHMoKSk7Ci0KLQkJZkNvbnRleHQgPSBuZXcgRm9ybWF0dGluZ0NvbnRleHQoKTsKLQkJZkNvbnRleHQuc2V0UHJvcGVydHkoRm9ybWF0dGluZ0NvbnRleHRQcm9wZXJ0aWVzLkNPTlRFWFRfRE9DVU1FTlQsIEJvb2xlYW4udmFsdWVPZih0cnVlKSk7Ci0KLQkJZlN0cmluZ0NvbXBhcmVVdGlsID0gbmV3IFN0cmluZ0NvbXBhcmVVdGlsKCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGZvcm1hdEFuZEFzc2VydEVxdWFscyhTdHJpbmcgYmVmb3JlUGF0aCwgU3RyaW5nIGFmdGVyUGF0aCwgYm9vbGVhbiByZXNldFByZWZlcmVuY2VzKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIGJlZm9yZU1vZGVsID0gbnVsbCwgYWZ0ZXJNb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQliZWZvcmVNb2RlbCA9IGdldE1vZGVsRm9yRWRpdChiZWZvcmVQYXRoKTsKLQkJCWFzc2VydE5vdE51bGwoImNvdWxkIG5vdCByZXRyaWV2ZSBzdHJ1Y3R1cmVkIG1vZGVsIGZvciA6ICIgKyBiZWZvcmVQYXRoLCBiZWZvcmVNb2RlbCk7Ci0KLQkJCWFmdGVyTW9kZWwgPSBnZXRNb2RlbEZvckVkaXQoYWZ0ZXJQYXRoKTsKLQkJCWFzc2VydE5vdE51bGwoImNvdWxkIG5vdCByZXRyaWV2ZSBzdHJ1Y3R1cmVkIG1vZGVsIGZvciA6ICIgKyBhZnRlclBhdGgsIGFmdGVyTW9kZWwpOwotCi0JCQlpZiAocmVzZXRQcmVmZXJlbmNlcykgewotCQkJCXJlc2V0UHJlZmVyZW5jZXNUb0RlZmF1bHQoKTsKLQkJCX0KLQotCQkJU291cmNlVmlld2VyQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gbmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbkpTUCgpOwotCQkJSUNvbnRlbnRGb3JtYXR0ZXJFeHRlbnNpb24gZm9ybWF0dGVyID0gKElDb250ZW50Rm9ybWF0dGVyRXh0ZW5zaW9uKSBjb25maWd1cmF0aW9uLmdldENvbnRlbnRGb3JtYXR0ZXIobnVsbCk7Ci0KLQkJCUlEb2N1bWVudCBkb2N1bWVudCA9IGJlZm9yZU1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJUmVnaW9uIHJlZ2lvbiA9IG5ldyBSZWdpb24oMCwgZG9jdW1lbnQuZ2V0TGVuZ3RoKCkpOwotCQkJZkNvbnRleHQuc2V0UHJvcGVydHkoRm9ybWF0dGluZ0NvbnRleHRQcm9wZXJ0aWVzLkNPTlRFWFRfUkVHSU9OLCByZWdpb24pOwotCQkJZm9ybWF0dGVyLmZvcm1hdChkb2N1bWVudCwgZkNvbnRleHQpOwotCi0JCQlCeXRlQXJyYXlPdXRwdXRTdHJlYW0gZm9ybWF0dGVkQnl0ZXMgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7Ci0JCQliZWZvcmVNb2RlbC5zYXZlKGZvcm1hdHRlZEJ5dGVzKTsgLy8gImJlZm9yZU1vZGVsIiBzaG91bGQgbm93IGJlCi0JCQkvLyBhZnRlciB0aGUgZm9ybWF0dGVyCi0KLQkJCUJ5dGVBcnJheU91dHB1dFN0cmVhbSBhZnRlckJ5dGVzID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOwotCQkJYWZ0ZXJNb2RlbC5zYXZlKGFmdGVyQnl0ZXMpOwotCi0JCQlTdHJpbmcgZXhwZWN0ZWRDb250ZW50cyA9IG5ldyBTdHJpbmcoYWZ0ZXJCeXRlcy50b0J5dGVBcnJheSgpLCBVVEZfOCk7Ci0JCQlTdHJpbmcgYWN0dWFsQ29udGVudHMgPSBuZXcgU3RyaW5nKGZvcm1hdHRlZEJ5dGVzLnRvQnl0ZUFycmF5KCksIFVURl84KTsKLQkJCWFzc2VydFRydWUoIkZvcm1hdHRlZCBkb2N1bWVudCBkaWZmZXJzIGZyb20gdGhlIGV4cGVjdGVkLlxuRXhwZWN0ZWQgQ29udGVudHM6XG4iICsgZXhwZWN0ZWRDb250ZW50cyArICJcbkFjdHVhbCBDb250ZW50czpcbiIgKyBhY3R1YWxDb250ZW50cywgZlN0cmluZ0NvbXBhcmVVdGlsLmVxdWFsc0lnbm9yZUxpbmVTZXBlcmF0b3IoZXhwZWN0ZWRDb250ZW50cywgYWN0dWFsQ29udGVudHMpKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChiZWZvcmVNb2RlbCAhPSBudWxsKQotCQkJCWJlZm9yZU1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJaWYgKGFmdGVyTW9kZWwgIT0gbnVsbCkKLQkJCQlhZnRlck1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogbXVzdCByZWxlYXNlIG1vZGVsIChmcm9tIGVkaXQpIGFmdGVyCi0JICogCi0JICogQHBhcmFtIGZpbGVuYW1lCi0JICogICAgICAgICAgICByZWxhdGl2ZSB0byB0aGlzIGNsYXNzIChUZXN0Rm9ybWF0UHJvY2Vzc29yQ1NTKQotCSAqLwotCXByaXZhdGUgSVN0cnVjdHVyZWRNb2RlbCBnZXRNb2RlbEZvckVkaXQoZmluYWwgU3RyaW5nIGZpbGVuYW1lKSB7Ci0JCUlGaWxlIGZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgoZmlsZW5hbWUpKTsKLQkJYXNzZXJ0VHJ1ZSgidW5hYmxlIHRvIGZpbmQgZmlsZTogIiArIGZpbGVuYW1lLCBmaWxlLmV4aXN0cygpKTsKLQotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJCW1vZGVsID0gbW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yRWRpdChmaWxlKTsKLQkJfQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZSkgewotCQkJY2UucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGlvKSB7Ci0JCQlpby5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQlyZXR1cm4gbW9kZWw7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHJlc2V0UHJlZmVyZW5jZXNUb0RlZmF1bHQoKSB7Ci0JCVByZWZlcmVuY2VzIHByZWZlcmVuY2VzID0gSFRNTENvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFBsdWdpblByZWZlcmVuY2VzKCk7Ci0JCXByZWZlcmVuY2VzLnNldFRvRGVmYXVsdChIVE1MQ29yZVByZWZlcmVuY2VOYW1lcy5TUExJVF9NVUxUSV9BVFRSUyk7Ci0JCXByZWZlcmVuY2VzLnNldFRvRGVmYXVsdChIVE1MQ29yZVByZWZlcmVuY2VOYW1lcy5MSU5FX1dJRFRIKTsKLQkJcHJlZmVyZW5jZXMuc2V0VG9EZWZhdWx0KEhUTUxDb3JlUHJlZmVyZW5jZU5hbWVzLklOREVOVEFUSU9OX0NIQVIpOwotCQlwcmVmZXJlbmNlcy5zZXRUb0RlZmF1bHQoSFRNTENvcmVQcmVmZXJlbmNlTmFtZXMuSU5ERU5UQVRJT05fU0laRSk7Ci0JCXByZWZlcmVuY2VzLnNldFRvRGVmYXVsdChIVE1MQ29yZVByZWZlcmVuY2VOYW1lcy5DTEVBUl9BTExfQkxBTktfTElORVMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGb3JtYXRCdWcxMDI0OTUoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlTdHJpbmcgYmVmb3JlUGF0aCA9ICIvIiArIFBST0pFQ1RfTkFNRSArICIvV2ViQ29udGVudC9mb3JtYXRidWcxMDI0OTUuanNwIjsKLQkJU3RyaW5nIGFmdGVyUGF0aCA9ICIvIiArIFBST0pFQ1RfTkFNRSArICIvV2ViQ29udGVudC9mb3JtYXRidWcxMDI0OTUtZm10LmpzcCI7Ci0JCWZvcm1hdEFuZEFzc2VydEVxdWFscyhiZWZvcmVQYXRoLCBhZnRlclBhdGgsIHRydWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGb3JtYXRCdWcxMDI0OTVfMSgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCVN0cmluZyBiZWZvcmVQYXRoID0gIi8iICsgUFJPSkVDVF9OQU1FICsgIi9XZWJDb250ZW50L2Zvcm1hdGJ1ZzEwMjQ5NV8xLmpzcCI7Ci0JCVN0cmluZyBhZnRlclBhdGggPSAiLyIgKyBQUk9KRUNUX05BTUUgKyAiL1dlYkNvbnRlbnQvZm9ybWF0YnVnMTAyNDk1XzEtZm10LmpzcCI7Ci0JCWZvcm1hdEFuZEFzc2VydEVxdWFscyhiZWZvcmVQYXRoLCBhZnRlclBhdGgsIHRydWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGb3JtYXRCdWcxMDI0OTVfMigpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCVN0cmluZyBiZWZvcmVQYXRoID0gIi8iICsgUFJPSkVDVF9OQU1FICsgIi9XZWJDb250ZW50L2Zvcm1hdGJ1ZzEwMjQ5NV8yLmpzcCI7Ci0JCVN0cmluZyBhZnRlclBhdGggPSAiLyIgKyBQUk9KRUNUX05BTUUgKyAiL1dlYkNvbnRlbnQvZm9ybWF0YnVnMTAyNDk1XzItZm10LmpzcCI7Ci0JCWZvcm1hdEFuZEFzc2VydEVxdWFscyhiZWZvcmVQYXRoLCBhZnRlclBhdGgsIHRydWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGb3JtYXRCdWcxMDI0OTVfMygpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCVN0cmluZyBiZWZvcmVQYXRoID0gIi8iICsgUFJPSkVDVF9OQU1FICsgIi9XZWJDb250ZW50L2Zvcm1hdGJ1ZzEwMjQ5NV8zLmpzcCI7Ci0JCVN0cmluZyBhZnRlclBhdGggPSAiLyIgKyBQUk9KRUNUX05BTUUgKyAiL1dlYkNvbnRlbnQvZm9ybWF0YnVnMTAyNDk1XzMtZm10LmpzcCI7Ci0JCWZvcm1hdEFuZEFzc2VydEVxdWFscyhiZWZvcmVQYXRoLCBhZnRlclBhdGgsIHRydWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGb3JtYXRCdWcxMDI0OTVfNCgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCVN0cmluZyBiZWZvcmVQYXRoID0gIi8iICsgUFJPSkVDVF9OQU1FICsgIi9XZWJDb250ZW50L2Zvcm1hdGJ1ZzEwMjQ5NV80LmpzcCI7Ci0JCVN0cmluZyBhZnRlclBhdGggPSAiLyIgKyBQUk9KRUNUX05BTUUgKyAiL1dlYkNvbnRlbnQvZm9ybWF0YnVnMTAyNDk1XzQtZm10LmpzcCI7Ci0JCWZvcm1hdEFuZEFzc2VydEVxdWFscyhiZWZvcmVQYXRoLCBhZnRlclBhdGgsIHRydWUpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvbW9kZWwvVGVzdE1vZGVsc0Zyb21GaWxlcy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9tb2RlbC9UZXN0TW9kZWxzRnJvbUZpbGVzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyNDg5OTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9tb2RlbC9UZXN0TW9kZWxzRnJvbUZpbGVzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMubW9kZWw7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudEV4dGVuc2lvbjM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnRQYXJ0aXRpb25lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwudGV4dC5TdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuZG9jdW1lbnQuVW56aXBwZWRQcm9qZWN0VGVzdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaW50ZXJuYWwudGV4dC5TdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySFRNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU5vZGVOb3RpZmllcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXhjZXB0aW9ucy5SZXNvdXJjZUFscmVhZHlFeGlzdHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV4Y2VwdGlvbnMuUmVzb3VyY2VJblVzZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkUGFydGl0aW9uaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC50ZXh0LkJhc2ljU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC51dGlsLlV0aWxpdGllczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnNzZW1vZGVscXVlcnkuTW9kZWxRdWVyeUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnRleHQucnVsZXMuU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTDsKLQotCi1wdWJsaWMgY2xhc3MgVGVzdE1vZGVsc0Zyb21GaWxlcyBleHRlbmRzIFVuemlwcGVkUHJvamVjdFRlc3RlciB7Ci0JcHVibGljIHZvaWQgdGVzdE5vbkV4aXN0ZW50WE1MKCkgdGhyb3dzIFJlc291cmNlQWxyZWFkeUV4aXN0cywgUmVzb3VyY2VJblVzZSwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdGVzdG5vbmV4aXN0ZW50LnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9uRXhpc3RlbnRYTUxEb2N1bWVudCgpIHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMsIFJlc291cmNlSW5Vc2UsIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJZG9UZXN0Tm9uRXhpc3RlbnREb2N1bWVudCgidGVzdGZpbGVzL3htbC90ZXN0bm9uZXhpc3RlbnQueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3ROb25FeGlzdGVudFhNTE1vZGVsKCkgdGhyb3dzIFJlc291cmNlQWxyZWFkeUV4aXN0cywgUmVzb3VyY2VJblVzZSwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGVNb2RlbFdpdGhOb25FeGlzdElGaWxlKCJ0ZXN0ZmlsZXMveG1sL3Rlc3Rub25leGlzdGVudC54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5vbkV4aXN0ZW50SlNQKCkgdGhyb3dzIFJlc291cmNlQWxyZWFkeUV4aXN0cywgUmVzb3VyY2VJblVzZSwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdGVzdG5vbmV4aXN0ZW50LmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9uRXhpc3RlbnRKU1BEb2N1bWVudCgpIHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMsIFJlc291cmNlSW5Vc2UsIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJZG9UZXN0Tm9uRXhpc3RlbnREb2N1bWVudCgidGVzdGZpbGVzL2pzcC90ZXN0bm9uZXhpc3RlbnQuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3ROb25FeGlzdGVudEpTUE1vZGVsKCkgdGhyb3dzIFJlc291cmNlQWxyZWFkeUV4aXN0cywgUmVzb3VyY2VJblVzZSwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGVNb2RlbFdpdGhOb25FeGlzdElGaWxlKCJ0ZXN0ZmlsZXMvanNwL3Rlc3Rub25leGlzdGVudC5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNpbXBsZUNhc2UoKSB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzLCBSZXNvdXJjZUluVXNlLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCWRvVGVzdE5vdEVtcHR5KCJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb3JtYWxDYXNlLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2ltcGxlRG9jdW1lbnRDYXNlWE1MKCkgdGhyb3dzIFJlc291cmNlQWxyZWFkeUV4aXN0cywgUmVzb3VyY2VJblVzZSwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlkb1Rlc3ROb3RFbXB0eURvY3VtZW50KCJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb3JtYWxDYXNlLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2ltcGxlRG9jdW1lbnRDYXNlSlNQKCkgdGhyb3dzIFJlc291cmNlQWxyZWFkeUV4aXN0cywgUmVzb3VyY2VJblVzZSwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlkb1Rlc3ROb3RFbXB0eURvY3VtZW50KCJ0ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjMzNjUvU2VsQ29sQmVhblJvdzEyUmVzdWx0c0Zvcm0uanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDb21wbGV4Q2FzZSgpIHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMsIFJlc291cmNlSW5Vc2UsIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJZG9UZXN0Tm90RW1wdHkoInRlc3RmaWxlcy9yZWdyZXNzaW9uVGVzdEZpbGVzL2RlZmVjdDIyMzM2NS9TZWxDb2xCZWFuUm93MTJSZXN1bHRzRm9ybS5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFJlbG9hZCgpIHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMsIFJlc291cmNlSW5Vc2UsIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJZG9UZXN0UmVsb2FkKCJ0ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjMzNjUvU2VsQ29sQmVhblJvdzEyUmVzdWx0c0Zvcm0uanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RKU1BXaXRoWE1MT3V0cHV0KCkgdGhyb3dzIFJlc291cmNlQWxyZWFkeUV4aXN0cywgUmVzb3VyY2VJblVzZSwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlkb1Rlc3RSZWxvYWQoInRlc3RmaWxlcy9qc3AvanNwLXhtbC1vdXRwdXQuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RYSFRNTFRyYW5zaXRpb25hbDEoKSB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzLCBSZXNvdXJjZUluVXNlLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3hodG1sL3Rlc3R4Lmh0bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckhUTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RYSFRNTFRyYW5zaXRpb25hbDIoKSB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzLCBSZXNvdXJjZUluVXNlLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3hodG1sL3Rlc3R4LmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0WEhUTUxUcmFuc2l0aW9uYWwzKCkgdGhyb3dzIFJlc291cmNlQWxyZWFkeUV4aXN0cywgUmVzb3VyY2VJblVzZSwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94aHRtbC90ZXN0eC54aHRtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySFRNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEhUTUxUcmFuc2l0aW9uYWwxKCkgdGhyb3dzIFJlc291cmNlQWxyZWFkeUV4aXN0cywgUmVzb3VyY2VJblVzZSwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9odG1sL3Rlc3RoLmh0bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckhUTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RIVE1MVHJhbnNpdGlvbmFsMigpIHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMsIFJlc291cmNlSW5Vc2UsIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvaHRtbC90ZXN0aC5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JLyoKLQkgKiBUT0RPOiB0aGVzZSB0ZXN0IGZpbGVzIGFyZSBtaXNzaW5nLCBmb3Igc29tZSByZWFzb24gd2hlbiBydW5uaW5nIG9uCi0JICogYnVpbGQgbWFjaGluZSAuLi4gbmVlZCB0byByZS1jb25zdHJ1Y3QgcHVibGljIHZvaWQgdGVzdE5lYXJFbXB0eUpTUCgpCi0JICogdGhyb3dzIFJlc291cmNlQWxyZWFkeUV4aXN0cywgUmVzb3VyY2VJblVzZSwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCSAqIGRvVGVzdE5vdEVtcHR5KCJ0ZXN0ZmlsZXMvanNwL25lYXJFbXB0eS5qc3AiLAotCSAqIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsgfQotCSAqIAotCSAqIHB1YmxpYyB2b2lkIHRlc3ROZWFyRW1wdHlYTUwoKSB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzLAotCSAqIFJlc291cmNlSW5Vc2UsIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkgKiBkb1Rlc3ROb3RFbXB0eSgidGVzdGZpbGVzL3htbC9uZWFyRW1wdHkueG1sIiwKLQkgKiBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7IH0KLQkgKiAKLQkgKiBwdWJsaWMgdm9pZCB0ZXN0TmVhckVtcHR5SFRNTCgpIHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMsCi0JICogUmVzb3VyY2VJblVzZSwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCSAqIGRvVGVzdE5vdEVtcHR5KCJ0ZXN0ZmlsZXMvaHRtbC9uZWFyRW1wdHkuaHRtbCIsCi0JICogQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JIVE1MLmNsYXNzKTsgfQotCSAqLwotCXByaXZhdGUgdm9pZCBkb1Rlc3ROb3RFbXB0eShTdHJpbmcgZmlsZVBhdGgsIENsYXNzIGV4cGVjdGVkRG9jdW1lbnRDbGFzcywgQ2xhc3MgZXhwZWN0ZWRQYXJ0aW9uZXIpIHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMsIFJlc291cmNlSW5Vc2UsIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNvbnRlbnRzID0gZG9UZXN0Q3JlYXRlKGZpbGVQYXRoLCBleHBlY3RlZERvY3VtZW50Q2xhc3MsIGV4cGVjdGVkUGFydGlvbmVyKTsKLQkJYXNzZXJ0Tm90TnVsbCgiY29udGVudHMgd2VyZSBudWxsIiwgY29udGVudHMpOwotCQlhc3NlcnRUcnVlKCJjb250ZW50cyB3ZXJlIGVtcHR5IiwgY29udGVudHMubGVuZ3RoKCkgPiAwKTsKLQotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBzdHJpbmcKLQkgKiBAcGFyYW0gY2xhc3MxCi0JICogQHBhcmFtIGNsYXNzMgotCSAqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KLQkgKiBAdGhyb3dzIFJlc291cmNlSW5Vc2UKLQkgKiBAdGhyb3dzIFJlc291cmNlQWxyZWFkeUV4aXN0cwotCSAqLwotCXByaXZhdGUgdm9pZCBkb1Rlc3ROb3RFbXB0eURvY3VtZW50KFN0cmluZyBmaWxlUGF0aCwgQ2xhc3MgZXhwZWN0ZWREb2N1bWVudENsYXNzLCBDbGFzcyBleHBlY3RlZFBhcnRpb25lcikgdGhyb3dzIFJlc291cmNlQWxyZWFkeUV4aXN0cywgUmVzb3VyY2VJblVzZSwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlTdHJpbmcgY29udGVudHMgPSBudWxsOwotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlGaWxlIGZpbGUgPSAoSUZpbGUpIGZUZXN0UHJvamVjdC5maW5kTWVtYmVyKGZpbGVQYXRoKTsKLQkJaWYgKGZpbGUgPT0gbnVsbCkgewotCQkJZmlsZSA9IGZUZXN0UHJvamVjdC5nZXRGaWxlKGZpbGVQYXRoKTsKLQkJfQotCQlJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50ID0gbW9kZWxNYW5hZ2VyLmNyZWF0ZVN0cnVjdHVyZWREb2N1bWVudEZvcihmaWxlKTsKLQkJYXNzZXJ0Tm90TnVsbChkb2N1bWVudCk7Ci0JCWFzc2VydFRydWUoIndyb25nIGNsYXNzIG9mIGRvY3VtZW50IiwgZXhwZWN0ZWREb2N1bWVudENsYXNzLmlzSW5zdGFuY2UoZG9jdW1lbnQpKTsKLQkJSURvY3VtZW50UGFydGl0aW9uZXIgc2V0dXBQYXJ0aXRpb25lciA9IG51bGw7Ci0JCWlmIChVdGlsaXRpZXMuY29udGFpbnMoZXhwZWN0ZWREb2N1bWVudENsYXNzLmdldEludGVyZmFjZXMoKSwgSURvY3VtZW50RXh0ZW5zaW9uMy5jbGFzcykpIHsKLQkJCXNldHVwUGFydGl0aW9uZXIgPSAoKElEb2N1bWVudEV4dGVuc2lvbjMpIGRvY3VtZW50KS5nZXREb2N1bWVudFBhcnRpdGlvbmVyKElTdHJ1Y3R1cmVkUGFydGl0aW9uaW5nLkRFRkFVTFRfU1RSVUNUVVJFRF9QQVJUSVRJT05JTkcpOwotCQl9Ci0JCWVsc2UgewotCQkJc2V0dXBQYXJ0aXRpb25lciA9IGRvY3VtZW50LmdldERvY3VtZW50UGFydGl0aW9uZXIoKTsKLQkJfQotCQlhc3NlcnRUcnVlKCJ3cm9uZyBwYXJ0aXRpb25lciBpbiBkb2N1bWVudC4iLCBleHBlY3RlZFBhcnRpb25lci5pc0luc3RhbmNlKHNldHVwUGFydGl0aW9uZXIpKTsKLQkJY29udGVudHMgPSBkb2N1bWVudC5nZXQoKTsKLQkJYXNzZXJ0Tm90TnVsbCgiY29udGVudHMgd2VyZSBudWxsIiwgY29udGVudHMpOwotCQlhc3NlcnRUcnVlKCJjb250ZW50cyB3ZXJlIGVtcHR5IiwgY29udGVudHMubGVuZ3RoKCkgPiAwKTsKLQotCX0KLQotCXByaXZhdGUgdm9pZCBkb1Rlc3ROb25FeGlzdGVudERvY3VtZW50KFN0cmluZyBmaWxlUGF0aCwgQ2xhc3MgZXhwZWN0ZWREb2N1bWVudENsYXNzLCBDbGFzcyBleHBlY3RlZFBhcnRpb25lcikgdGhyb3dzIFJlc291cmNlQWxyZWFkeUV4aXN0cywgUmVzb3VyY2VJblVzZSwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlTdHJpbmcgY29udGVudHMgPSBudWxsOwotCQlib29sZWFuIGV4cGVjdGVkRXhjZXB0aW9uQ2F1Z2h0ID0gZmFsc2U7Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSUZpbGUgZmlsZSA9IChJRmlsZSkgZlRlc3RQcm9qZWN0LmZpbmRNZW1iZXIoZmlsZVBhdGgpOwotCQlpZiAoZmlsZSA9PSBudWxsKSB7Ci0JCQlmaWxlID0gZlRlc3RQcm9qZWN0LmdldEZpbGUoZmlsZVBhdGgpOwotCQl9Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQgPSBudWxsOwotCQl0cnkgewotCQkJZG9jdW1lbnQgPSBtb2RlbE1hbmFnZXIuY3JlYXRlU3RydWN0dXJlZERvY3VtZW50Rm9yKGZpbGUpOwotCQl9Ci0JCWNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgewotCQkJZXhwZWN0ZWRFeGNlcHRpb25DYXVnaHQgPSB0cnVlOwotCQl9Ci0KLQkJaWYgKGV4cGVjdGVkRXhjZXB0aW9uQ2F1Z2h0KSB7Ci0JCQlkb2N1bWVudCA9IG1vZGVsTWFuYWdlci5jcmVhdGVOZXdTdHJ1Y3R1cmVkRG9jdW1lbnRGb3IoZmlsZSk7Ci0JCQlhc3NlcnROb3ROdWxsKGRvY3VtZW50KTsKLQkJCWFzc2VydFRydWUoIndyb25nIGNsYXNzIG9mIGRvY3VtZW50IiwgZXhwZWN0ZWREb2N1bWVudENsYXNzLmlzSW5zdGFuY2UoZG9jdW1lbnQpKTsKLQkJCUlEb2N1bWVudFBhcnRpdGlvbmVyIHNldHVwUGFydGl0aW9uZXIgPSBudWxsOwotCQkJaWYgKFV0aWxpdGllcy5jb250YWlucyhleHBlY3RlZERvY3VtZW50Q2xhc3MuZ2V0SW50ZXJmYWNlcygpLCBJRG9jdW1lbnRFeHRlbnNpb24zLmNsYXNzKSkgewotCQkJCXNldHVwUGFydGl0aW9uZXIgPSAoKElEb2N1bWVudEV4dGVuc2lvbjMpIGRvY3VtZW50KS5nZXREb2N1bWVudFBhcnRpdGlvbmVyKElTdHJ1Y3R1cmVkUGFydGl0aW9uaW5nLkRFRkFVTFRfU1RSVUNUVVJFRF9QQVJUSVRJT05JTkcpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJc2V0dXBQYXJ0aXRpb25lciA9IGRvY3VtZW50LmdldERvY3VtZW50UGFydGl0aW9uZXIoKTsKLQkJCX0KLQkJCWFzc2VydFRydWUoIndyb25nIHBhcnRpdGlvbmVyIGluIGRvY3VtZW50LiIsIGV4cGVjdGVkUGFydGlvbmVyLmlzSW5zdGFuY2Uoc2V0dXBQYXJ0aXRpb25lcikpOwotCQkJY29udGVudHMgPSBkb2N1bWVudC5nZXQoKTsKLQkJCWFzc2VydE5vdE51bGwoImNvbnRlbnRzIHdlcmUgbnVsbCIsIGNvbnRlbnRzKTsKLQkJCWFzc2VydFRydWUoImNvbnRlbnRzIHdlcmUgKm5vdCogZW1wdHkgYXMgZXhwZWN0ZWQiLCBjb250ZW50cy5sZW5ndGgoKSA9PSAwKTsKLQkJfQotCQllbHNlIHsKLQkJCWFzc2VydFRydWUoIkZpbGVOb3RGb3VuZCBleGNlcHRpb24gd2FzICpub3QqIHRocm93biBhcyBleHBlY3RlZCIsIGZhbHNlKTsKLQkJfQotCi0JfQotCi0JLyoqCi0JICogQHBhcmFtIHN0cmluZwotCSAqIEBwYXJhbSBjbGFzczEKLQkgKiBAcGFyYW0gY2xhc3MyCi0JICogQHRocm93cyBDb3JlRXhjZXB0aW9uCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqIEB0aHJvd3MgUmVzb3VyY2VJblVzZQotCSAqIEB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzCi0JICovCi0JcHJpdmF0ZSB2b2lkIGRvVGVzdFJlbG9hZChTdHJpbmcgZmlsZVBhdGgsIENsYXNzIGV4cGVjdGVkRG9jdW1lbnRDbGFzcywgQ2xhc3MgZXhwZWN0ZWRQYXJ0aW9uZXIpIHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMsIFJlc291cmNlSW5Vc2UsIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJRmlsZSBmaWxlID0gKElGaWxlKSBmVGVzdFByb2plY3QuZmluZE1lbWJlcihmaWxlUGF0aCk7Ci0JCWlmIChmaWxlID09IG51bGwpIHsKLQkJCWZpbGUgPSBmVGVzdFByb2plY3QuZ2V0RmlsZShmaWxlUGF0aCk7Ci0JCX0KLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG1vZGVsTWFuYWdlci5nZXROZXdNb2RlbEZvckVkaXQoZmlsZSwgdHJ1ZSk7Ci0JCXRyeSB7Ci0JCQlhc3NlcnROb3ROdWxsKG1vZGVsKTsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCWFzc2VydE5vdE51bGwoZG9jdW1lbnQpOwotCQkJYXNzZXJ0VHJ1ZSgid3JvbmcgY2xhc3Mgb2YgZG9jdW1lbnQiLCBleHBlY3RlZERvY3VtZW50Q2xhc3MuaXNJbnN0YW5jZShkb2N1bWVudCkpOwotCQkJSURvY3VtZW50UGFydGl0aW9uZXIgc2V0dXBQYXJ0aXRpb25lciA9IG51bGw7Ci0JCQlpZiAoVXRpbGl0aWVzLmNvbnRhaW5zKGV4cGVjdGVkRG9jdW1lbnRDbGFzcy5nZXRJbnRlcmZhY2VzKCksIElEb2N1bWVudEV4dGVuc2lvbjMuY2xhc3MpKSB7Ci0JCQkJc2V0dXBQYXJ0aXRpb25lciA9ICgoSURvY3VtZW50RXh0ZW5zaW9uMykgZG9jdW1lbnQpLmdldERvY3VtZW50UGFydGl0aW9uZXIoSVN0cnVjdHVyZWRQYXJ0aXRpb25pbmcuREVGQVVMVF9TVFJVQ1RVUkVEX1BBUlRJVElPTklORyk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlzZXR1cFBhcnRpdGlvbmVyID0gZG9jdW1lbnQuZ2V0RG9jdW1lbnRQYXJ0aXRpb25lcigpOwotCQkJfQotCQkJYXNzZXJ0VHJ1ZSgid3JvbmcgcGFydGl0aW9uZXIgaW4gZG9jdW1lbnQuIiwgZXhwZWN0ZWRQYXJ0aW9uZXIuaXNJbnN0YW5jZShzZXR1cFBhcnRpdGlvbmVyKSk7Ci0KLQkJCUlucHV0U3RyZWFtIGluU3RyZWFtID0gbnVsbDsKLQkJCXRyeSB7Ci0JCQkJaW5TdHJlYW0gPSBmaWxlLmdldENvbnRlbnRzKCk7Ci0JCQkJbW9kZWwucmVsb2FkKGluU3RyZWFtKTsKLQkJCQlhc3NlcnROb3ROdWxsKG1vZGVsKTsKLQkJCQlJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50UmVsb2FkZWQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCQkvLyBub3RlOiBOT1Qgc2FtZSBpbnN0YW5jZSBvZiBkb2N1bWVudAotCQkJCS8vIEZJWE1FOiB0aGlzIHRlc3QgaGFzIHRvIGJlIGNoYW5nZWQgYmFjaywgb25jZSB0aGUgcmVsb2FkCi0JCQkJLy8gQVBJIGlzCi0JCQkJLy8gZml4ZWQgdG8gd29yayB3aXRoIGRpZmZlcmVudCBkb2N1bWVudC4KLQkJCQkvLyBhc3NlcnRGYWxzZShkb2N1bWVudCA9PSBkb2N1bWVudFJlbG9hZGVkKTsKLQkJCQlhc3NlcnRUcnVlKGRvY3VtZW50ID09IGRvY3VtZW50UmVsb2FkZWQpOwotCQkJfQotCQkJZmluYWxseSB7Ci0JCQkJaWYgKGluU3RyZWFtICE9IG51bGwpIHsKLQkJCQkJaW5TdHJlYW0uY2xvc2UoKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBzdHJpbmcKLQkgKiBAcGFyYW0gY2xhc3MxCi0JICogQHBhcmFtIGNsYXNzMgotCSAqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KLQkgKiBAdGhyb3dzIFJlc291cmNlSW5Vc2UKLQkgKiBAdGhyb3dzIFJlc291cmNlQWxyZWFkeUV4aXN0cwotCSAqLwotCXByaXZhdGUgU3RyaW5nIGRvVGVzdENyZWF0ZShTdHJpbmcgZmlsZVBhdGgsIENsYXNzIGV4cGVjdGVkRG9jdW1lbnRDbGFzcywgQ2xhc3MgZXhwZWN0ZWRQYXJ0aW9uZXIpIHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMsIFJlc291cmNlSW5Vc2UsIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNvbnRlbnRzID0gbnVsbDsKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJRmlsZSBmaWxlID0gKElGaWxlKSBmVGVzdFByb2plY3QuZmluZE1lbWJlcihmaWxlUGF0aCk7Ci0JCS8vIGZpbGUgd2lsbCBiZSBudWxsIGlmIHRoZSByZXNvdXJjZSBkb2VzIG5vdCBleGlzdAotCQlpZiAoZmlsZSA9PSBudWxsKSB7Ci0JCQlmaWxlID0gZlRlc3RQcm9qZWN0LmdldEZpbGUoZmlsZVBhdGgpOwotCQl9Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBtb2RlbE1hbmFnZXIuZ2V0TmV3TW9kZWxGb3JFZGl0KGZpbGUsIHRydWUpOwotCQl0cnkgewotCQkJYXNzZXJ0Tm90TnVsbChtb2RlbCk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlhc3NlcnROb3ROdWxsKGRvY3VtZW50KTsKLQkJCWNvbnRlbnRzID0gZG9jdW1lbnQuZ2V0KCk7Ci0JCQlhc3NlcnRUcnVlKCJ3cm9uZyBjbGFzcyBvZiBkb2N1bWVudCIsIGV4cGVjdGVkRG9jdW1lbnRDbGFzcy5pc0luc3RhbmNlKGRvY3VtZW50KSk7Ci0JCQlJRG9jdW1lbnRQYXJ0aXRpb25lciBzZXR1cFBhcnRpdGlvbmVyID0gbnVsbDsKLQkJCWlmIChVdGlsaXRpZXMuY29udGFpbnMoZXhwZWN0ZWREb2N1bWVudENsYXNzLmdldEludGVyZmFjZXMoKSwgSURvY3VtZW50RXh0ZW5zaW9uMy5jbGFzcykpIHsKLQkJCQlzZXR1cFBhcnRpdGlvbmVyID0gKChJRG9jdW1lbnRFeHRlbnNpb24zKSBkb2N1bWVudCkuZ2V0RG9jdW1lbnRQYXJ0aXRpb25lcihJU3RydWN0dXJlZFBhcnRpdGlvbmluZy5ERUZBVUxUX1NUUlVDVFVSRURfUEFSVElUSU9OSU5HKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCXNldHVwUGFydGl0aW9uZXIgPSBkb2N1bWVudC5nZXREb2N1bWVudFBhcnRpdGlvbmVyKCk7Ci0JCQl9Ci0JCQlhc3NlcnRUcnVlKCJ3cm9uZyBwYXJ0aXRpb25lciBpbiBkb2N1bWVudC4iLCBleHBlY3RlZFBhcnRpb25lci5pc0luc3RhbmNlKHNldHVwUGFydGl0aW9uZXIpKTsKLQotCQkJdGVzdENsb25lKG1vZGVsKTsKLQotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpCi0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQkJcmV0dXJuIGNvbnRlbnRzOwotCX0KLQotCXByaXZhdGUgdm9pZCB0ZXN0Q2xvbmUoSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUlET01Eb2N1bWVudCBkb2N1bWVudCA9ICgoSURPTU1vZGVsKSBzdHJ1Y3R1cmVkTW9kZWwpLmdldERvY3VtZW50KCk7Ci0JCUlOb2RlTm90aWZpZXIgbm90aWZpZXIgPSBkb2N1bWVudDsKLQkJTW9kZWxRdWVyeUFkYXB0ZXIgbW9kZWxRdWVyeUFkYXB0ZXIgPSAoTW9kZWxRdWVyeUFkYXB0ZXIpIG5vdGlmaWVyLmdldEFkYXB0ZXJGb3IoTW9kZWxRdWVyeUFkYXB0ZXIuY2xhc3MpOwotCQlhc3NlcnROb3ROdWxsKCJpbml0aWFsIG1vZGVsUXVlcnlBZGFwdGVyIHNob3VsZCBub3QgYmUgbnVsbCIsIG1vZGVsUXVlcnlBZGFwdGVyKTsKLQkJCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgbmV3TW9kZWwgPSBzdHJ1Y3R1cmVkTW9kZWwubmV3SW5zdGFuY2UoKTsKLQkJSURPTURvY3VtZW50IG5ld0RvY3VtZW50ID0gKChJRE9NTW9kZWwpIG5ld01vZGVsKS5nZXREb2N1bWVudCgpOwotCQlJTm9kZU5vdGlmaWVyIG5ld05vdGlmaWVyID0gbmV3RG9jdW1lbnQ7Ci0JCU1vZGVsUXVlcnlBZGFwdGVyIHJlc3VsdCA9IChNb2RlbFF1ZXJ5QWRhcHRlcikgbmV3Tm90aWZpZXIuZ2V0QWRhcHRlckZvcihNb2RlbFF1ZXJ5QWRhcHRlci5jbGFzcyk7Ci0JCWFzc2VydE5vdE51bGwoIm5ld0luc3RhbmNlIG1vZGVsUXVlcnlBZGFwdGVyIHNob3VsZCBub3QgYmUgbnVsbCIsIHJlc3VsdCk7Ci0KLQotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBzdHJpbmcKLQkgKiBAcGFyYW0gY2xhc3MxCi0JICogQHBhcmFtIGNsYXNzMgotCSAqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KLQkgKiBAdGhyb3dzIFJlc291cmNlSW5Vc2UKLQkgKiBAdGhyb3dzIFJlc291cmNlQWxyZWFkeUV4aXN0cwotCSAqLwotCXByaXZhdGUgU3RyaW5nIGRvVGVzdENyZWF0ZU1vZGVsV2l0aE5vbkV4aXN0SUZpbGUoU3RyaW5nIGZpbGVQYXRoLCBDbGFzcyBleHBlY3RlZERvY3VtZW50Q2xhc3MsIENsYXNzIGV4cGVjdGVkUGFydGlvbmVyKSB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzLCBSZXNvdXJjZUluVXNlLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjb250ZW50cyA9IG51bGw7Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSUZpbGUgZmlsZSA9IChJRmlsZSkgZlRlc3RQcm9qZWN0LmZpbmRNZW1iZXIoZmlsZVBhdGgpOwotCQkvLyBmaWxlIHdpbGwgYmUgbnVsbCBpZiB0aGUgcmVzb3VyY2UgZG9lcyBub3QgZXhpc3QKLQkJaWYgKGZpbGUgPT0gbnVsbCkgewotCQkJZmlsZSA9IGZUZXN0UHJvamVjdC5nZXRGaWxlKGZpbGVQYXRoKTsKLQkJfQotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbW9kZWxNYW5hZ2VyLmdldE5ld01vZGVsRm9yRWRpdChmaWxlLCBmYWxzZSk7Ci0JCXRyeSB7Ci0JCQlhc3NlcnROb3ROdWxsKG1vZGVsKTsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCWFzc2VydE5vdE51bGwoZG9jdW1lbnQpOwotCQkJY29udGVudHMgPSBkb2N1bWVudC5nZXQoKTsKLQkJCWFzc2VydFRydWUoIndyb25nIGNsYXNzIG9mIGRvY3VtZW50IiwgZXhwZWN0ZWREb2N1bWVudENsYXNzLmlzSW5zdGFuY2UoZG9jdW1lbnQpKTsKLQkJCUlEb2N1bWVudFBhcnRpdGlvbmVyIHNldHVwUGFydGl0aW9uZXIgPSBudWxsOwotCQkJaWYgKFV0aWxpdGllcy5jb250YWlucyhleHBlY3RlZERvY3VtZW50Q2xhc3MuZ2V0SW50ZXJmYWNlcygpLCBJRG9jdW1lbnRFeHRlbnNpb24zLmNsYXNzKSkgewotCQkJCXNldHVwUGFydGl0aW9uZXIgPSAoKElEb2N1bWVudEV4dGVuc2lvbjMpIGRvY3VtZW50KS5nZXREb2N1bWVudFBhcnRpdGlvbmVyKElTdHJ1Y3R1cmVkUGFydGl0aW9uaW5nLkRFRkFVTFRfU1RSVUNUVVJFRF9QQVJUSVRJT05JTkcpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJc2V0dXBQYXJ0aXRpb25lciA9IGRvY3VtZW50LmdldERvY3VtZW50UGFydGl0aW9uZXIoKTsKLQkJCX0KLQkJCWFzc2VydFRydWUoIndyb25nIHBhcnRpdGlvbmVyIGluIGRvY3VtZW50LiIsIGV4cGVjdGVkUGFydGlvbmVyLmlzSW5zdGFuY2Uoc2V0dXBQYXJ0aXRpb25lcikpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpCi0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQkJcmV0dXJuIGNvbnRlbnRzOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9tb2RlbHF1ZXJ5L01vZGVsUXVlcnlUZXN0ZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvbW9kZWxxdWVyeS9Nb2RlbFF1ZXJ5VGVzdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3ZjhhYTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9tb2RlbHF1ZXJ5L01vZGVsUXVlcnlUZXN0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5tb2RlbHF1ZXJ5OwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLWltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS5pbnRlcm5hbC5KU1BVSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLkpTUFVJVGVzdHNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5Mb2dnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5IVE1MNDBOYW1lc3BhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9ySFRNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnByb3Zpc2lvbmFsLnJlZ2lzdHJ5LkFkYXB0ZXJGYWN0b3J5UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5wcm92aXNpb25hbC5yZWdpc3RyeS5BZGFwdGVyRmFjdG9yeVJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01BdHRyaWJ1dGVEZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNQ29udGVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNRGF0YVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTUVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNR3JvdXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTU5hbWVkTm9kZU1hcDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNTm9kZUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5tb2RlbHF1ZXJ5LkNNRG9jdW1lbnRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwubW9kZWxxdWVyeS5Nb2RlbFF1ZXJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5tb2RlbHF1ZXJ5Lk1vZGVsUXVlcnlVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9yWE1MOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLS8qKgotICogQGF1dGhvciBwYXZlcnkKLSAqLwotcHVibGljIGNsYXNzIE1vZGVsUXVlcnlUZXN0ZXIgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwcml2YXRlIGZpbmFsIGJvb2xlYW4gdGVzdFNoaXBwZWREVERMb29rdXAgPSBmYWxzZTsKLQotCS8vIE91ciBTdHJ1Y3R1cmVkIE1vZGVsLCB3aGljaCBzaG91bGQgYWx3YXlzIGJlIGFuIFhNTE1vZGVsIChvciBzdWJjbGFzcykKLQlwcm90ZWN0ZWQgSURPTU1vZGVsIGZNb2RlbCA9IG51bGw7Ci0KLQlwcm90ZWN0ZWQgTW9kZWxRdWVyeSBmTW9kZWxRdWVyeSA9IG51bGw7Ci0KLQlwdWJsaWMgTW9kZWxRdWVyeVRlc3RlcihTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgVGVzdFN1aXRlKE1vZGVsUXVlcnlUZXN0ZXIuY2xhc3MpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCWlmIChhcmdzID09IG51bGwgfHwgYXJncy5sZW5ndGggPT0gMCkgewotCQkJcnVuQWxsKCk7Ci0JCX0KLQkJZWxzZSBpZiAoYXJncy5sZW5ndGggPT0gMSkgewotCQkJU3RyaW5nIG1ldGhvZFRvUnVuID0gYXJnc1swXS50cmltKCk7Ci0JCQlydW5PbmUobWV0aG9kVG9SdW4pOwotCQl9Ci0KLQl9Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIHZvaWQgcnVuQWxsKCkgewotCQlUZXN0UnVubmVyLnJ1bihzdWl0ZSgpKTsKLQotCX0KLQotCXByb3RlY3RlZCBzdGF0aWMgdm9pZCBydW5PbmUoU3RyaW5nIG1ldGhvZE5hbWUpIHsKLQkJVGVzdFN1aXRlIHRlc3RTdWl0ZSA9IG5ldyBUZXN0U3VpdGUoKTsKLQkJVGVzdENhc2UgdGVzdCA9IG5ldyBNb2RlbFF1ZXJ5VGVzdGVyKG1ldGhvZE5hbWUpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdCh0ZXN0KTsKLQkJanVuaXQudGV4dHVpLlRlc3RSdW5uZXIucnVuKHRlc3RTdWl0ZSk7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlIGFuIGVtcHR5IEhUTUwgbW9kZWwKLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcEhUTUwoKSB7Ci0JCWZNb2RlbCA9IChJRE9NTW9kZWwpIGNyZWF0ZU1vZGVsKENvbnRlbnRUeXBlSWRGb3JIVE1MLkNvbnRlbnRUeXBlSURfSFRNTCk7Ci0JCWluaXRWYXJzKCk7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlIGFuIGVtcHR5IFhNTCBtb2RlbAotCSAqLwotCXByb3RlY3RlZCB2b2lkIHNldFVwWE1MKCkgewotCQlmTW9kZWwgPSAoSURPTU1vZGVsKSBjcmVhdGVNb2RlbChDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MKTsKLQkJaW5pdFZhcnMoKTsKLQl9Ci0KLQotCS8qKgotCSAqIEluaXRpYWxpemUgbG9jYWwgZmllbGRzIGZvciB0aGlzIHRlc3QKLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCBpbml0VmFycygpIHsKLQkJZk1vZGVsUXVlcnkgPSBNb2RlbFF1ZXJ5VXRpbC5nZXRNb2RlbFF1ZXJ5KGZNb2RlbC5nZXREb2N1bWVudCgpKTsKLQotCi0JfQotCi0JLyoqCi0JICogVGVzdCB0aGUgSFRNTCBCT0RZIEVsZW1lbnQgZm9yIHRoZSAiYmdjb2xvciIgYXR0cmlidXRlIGRlY2xhcmF0aW9uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEJvZHlFbGVtZW50KCkgewotCQlzZXRVcEhUTUwoKTsKLQkJZk1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnNldCgiPGh0bWw+PGJvZHkgYmdjb2xvcj1cIiNmZmZmZmZcIj48Zm9ybSBtZXRob2Q9XCJwb3N0XCI+PC9mb3JtPjwvYm9keT48L2h0bWw+Iik7IC8vIHNldAotCQkvLyB0ZXh0Ci0KLQkJLy8gVEVTVCBnZXR0aW5nIGEgQ01FbGVtZW50RGVjbGFyYXRpb24KLQkJRWxlbWVudCBib2R5RWxlbWVudCA9IChFbGVtZW50KSBmTW9kZWwuZ2V0SW5kZXhlZFJlZ2lvbig3KTsgLy8gbm9kZSBhdAotCQkvLyBvZmZzZXQ3LS1zaG91bGQKLQkJLy8gYmUKLQkJLy8gPGJvZHk+Ci0JCUNNRWxlbWVudERlY2xhcmF0aW9uIGJvZHlEZWNsID0gZk1vZGVsUXVlcnkuZ2V0Q01FbGVtZW50RGVjbGFyYXRpb24oYm9keUVsZW1lbnQpOwotCi0JCWludCBjb250ZW50VHlwZSA9IGJvZHlEZWNsLmdldENvbnRlbnRUeXBlKCk7Ci0JCWFzc2VydFRydWUoIkNNRWxlbWVudERlY2xhcmF0aW9uIENPTlRFTlQgVFlQRSBJTkNPUlJFQ1QgRk9SIEJPRFkiLCAoY29udGVudFR5cGUgPT0gQ01FbGVtZW50RGVjbGFyYXRpb24uTUlYRUQpKTsKLQotCQkvLyBnZXQgcGVybWlzc2libGUgYXR0cnMKLQkJQ01OYW1lZE5vZGVNYXAgbWFwID0gYm9keURlY2wuZ2V0QXR0cmlidXRlcygpOwotCQlhc3NlcnRUcnVlKCJBVFRSSUJVVEVTIEZST00gRUxFTUVOVCBERUNMQVJBVElPTiA9PSBOVUxMIiwgKG1hcCAhPSBudWxsKSk7Ci0JCVZlY3RvciBhbGxvd2VkID0gbmV3IFZlY3RvcigpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IG1hcC5nZXRMZW5ndGgoKTsgaSsrKSB7Ci0JCQlDTUF0dHJpYnV0ZURlY2xhcmF0aW9uIG5vZGUgPSAoQ01BdHRyaWJ1dGVEZWNsYXJhdGlvbikgbWFwLml0ZW0oaSk7Ci0JCQlTdHJpbmcgbmFtZSA9IG5vZGUuZ2V0Tm9kZU5hbWUoKTsKLQkJCWFsbG93ZWQuYWRkKG5hbWUpOwotCQkJaWYgKG5hbWUuZXF1YWxzSWdub3JlQ2FzZSgiYmdjb2xvciIpKSB7Ci0JCQkJYXNzZXJ0VHJ1ZSgiR09UIElOQ09SUkVDVCBBVFRSSUJVVEUgTk9ERSBUWVBFIiwgKG5vZGUuZ2V0Tm9kZVR5cGUoKSA9PSBDTU5vZGUuQVRUUklCVVRFX0RFQ0xBUkFUSU9OKSk7Ci0KLQkJCQlDTURhdGFUeXBlIGF0dHJUeXBlID0gbm9kZS5nZXRBdHRyVHlwZSgpOwotCQkJCS8vIFN5c3RlbS5vdXQucHJpbnRsbigiYXR0cmlidXRlIHR5cGUgPiAiICsgYXR0clR5cGUpOwotCQkJCWFzc2VydFRydWUoIkNPVUxEIE5PVCBHRVQgQVRUUklCVVRFIFRZUEUiLCAoYXR0clR5cGUgIT0gbnVsbCkpOwotCQkJCWFzc2VydFRydWUoIkNPVUxETidUIEdFVCBJTVBMSUVEIFZBTFVFIEtJTkQiLCAoYXR0clR5cGUuZ2V0SW1wbGllZFZhbHVlS2luZCgpID09IENNRGF0YVR5cGUuSU1QTElFRF9WQUxVRV9OT05FKSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBUZXN0IHRoZSBIVE1MIEhUTUwgRWxlbWVudCBmb3IgaXRzIGRlY2xhcmVkIGNoaWxkcmVuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEh0bWxDaGlsZHJlbigpIHsKLQkJc2V0VXBIVE1MKCk7Ci0JCWZNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXQoIjxodG1sPjwvaHRtbD4iKTsgLy8gc2V0IHRleHQKLQkJRWxlbWVudCBodG1sRWxlbWVudCA9IGZNb2RlbC5nZXREb2N1bWVudCgpLmdldERvY3VtZW50RWxlbWVudCgpOwotCQlDTUVsZW1lbnREZWNsYXJhdGlvbiBodG1sRGVjbCA9IGZNb2RlbFF1ZXJ5LmdldENNRWxlbWVudERlY2xhcmF0aW9uKGh0bWxFbGVtZW50KTsKLQotCQkvLyBIVE1MJ3MgY2hpbGRyZW4gYXJlIHdpdGhpbiBhIGdyb3VwCi0JCUNNQ29udGVudCBjb250ZW50cyA9IGh0bWxEZWNsLmdldENvbnRlbnQoKTsKLQotCQlhc3NlcnRUcnVlKCJjb250ZW50IHR5cGUgaXMgbm90IGEgZ3JvdXAiLCBjb250ZW50cy5nZXROb2RlVHlwZSgpID09IENNTm9kZS5HUk9VUCk7Ci0KLQkJQ01Hcm91cCBncm91cCA9IChDTUdyb3VwKSBjb250ZW50czsKLQkJaW50IG9wZXJhdG9yID0gZ3JvdXAuZ2V0T3BlcmF0b3IoKTsKLQkJQ01Ob2RlTGlzdCBjaGlsZExpc3QgPSBncm91cC5nZXRDaGlsZE5vZGVzKCk7Ci0JCWludCBtYXggPSBjb250ZW50cy5nZXRNYXhPY2N1cigpOwotCQlpbnQgbWluID0gY29udGVudHMuZ2V0TWluT2NjdXIoKTsKLQotCQkvLyB0aGUgZ3JvdXAgc2hvdWxkIGJlIGFsbG93ZWQgb25jZSwgd2l0aCBhIHNlcXVlbmNlIHdob3NlIGZpcnN0IGVudHJ5Ci0JCS8vIGlzIHRoZSBkZWNsYXJhdGlvbiBmb3IgSEVBRAotCQlhc3NlcnRUcnVlKCJvY2N1cnJhbmNlIG9mIGdyb3VwIiwgbWluID09IDEgJiYgbWF4ID09IDEpOwotCQlhc3NlcnRUcnVlKCJyZWxhdGlvbnNoaXAgaW4gZ3JvdXAiLCBvcGVyYXRvciA9PSBDTUdyb3VwLlNFUVVFTkNFKTsKLQkJYXNzZXJ0VHJ1ZSgiY29udGVudCBkZXNjcmlwdG9yIHR5cGUsIHBvc2l0aW9uIDAiLCBjb250ZW50cy5nZXROb2RlVHlwZSgpID09IENNTm9kZS5HUk9VUCk7Ci0JCWFzc2VydFRydWUoImNoaWxkIG9yZGVyIChIRUFEIGZpcnN0KSIsIGNoaWxkTGlzdC5pdGVtKDApLmdldE5vZGVOYW1lKCkuZXF1YWxzSWdub3JlQ2FzZShIVE1MNDBOYW1lc3BhY2UuRWxlbWVudE5hbWUuSEVBRCkpOwotCi0JCWFzc2VydFRydWUoImNvbnRlbnQgZGVzY3JpcHRvciB0eXBlLCBwb3NpdGlvbiAxIiwgY2hpbGRMaXN0Lml0ZW0oMSkuZ2V0Tm9kZVR5cGUoKSA9PSBDTU5vZGUuR1JPVVApOwotCQkvLyBUaGUgc2Vjb25kIGNoaWxkIHNob3VsZCBiZSBhIGdyb3VwIGFzIHdlbGwsIGNvbnRhaW5pbmcgQk9EWSBhbmQKLQkJLy8gRlJBTUVTRVQgd2l0aCBhbgotCQkvLyBvcGVyYXRvciBvZiBDTUdyb3VwLkNIT0lDRQotCQlhc3NlcnRUcnVlKCJjb250ZW50IGRlc2NyaXB0b3IgdHlwZSwgcG9zaXRpb24gMSAtIHJlbGF0aW9uc2hpcCBvZiBncm91cCIsICgoQ01Hcm91cCkgY2hpbGRMaXN0Lml0ZW0oMSkpLmdldE9wZXJhdG9yKCkgPT0gQ01Hcm91cC5DSE9JQ0UpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGb3JtTWV0aG9kQXR0cigpIHsKLQkJc2V0VXBIVE1MKCk7Ci0JCWZNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXQoIjxodG1sPjxib2R5IGJnY29sb3I9XCIjZmZmZmZmXCI+PGZvcm0gbWV0aG9kPVwicG9zdFwiPjwvZm9ybT48L2JvZHk+PC9odG1sPiIpOyAvLyBzZXQKLQkJLy8gdGV4dAotCi0JCS8vIFRFU1QgR0VUVElORyBBIENNQXR0cmlidXRlRGVjbGFyYXRvaW4KLQkJRWxlbWVudCBmb3JtRWxlbWVudCA9IChFbGVtZW50KSBmTW9kZWwuZ2V0SW5kZXhlZFJlZ2lvbigzMSk7IC8vIDxmb3JtPgotCQlBdHRyIGF0dHJOb2RlID0gZm9ybUVsZW1lbnQuZ2V0QXR0cmlidXRlTm9kZShIVE1MNDBOYW1lc3BhY2UuQVRUUl9OQU1FX01FVEhPRCk7Ci0JCUNNQXR0cmlidXRlRGVjbGFyYXRpb24gbWV0aG9kQXR0ckRlY2wgPSBmTW9kZWxRdWVyeS5nZXRDTUF0dHJpYnV0ZURlY2xhcmF0aW9uKGF0dHJOb2RlKTsKLQkJYXNzZXJ0VHJ1ZSgiQ29udGVudCBNb2RlbCBtaXNzaW5nIHRoZSBhdHRyaWJ1dGUgZGVjbGFyYXRpb24gZm9yIFwibWV0aG9kXCIiLCBtZXRob2RBdHRyRGVjbCAhPSBudWxsKTsKLQotCQlMaXN0IHZhbHVlcyA9IGdldFZhbGlkU3RyaW5ncyhmb3JtRWxlbWVudCwgbWV0aG9kQXR0ckRlY2wpOwotCQlhc3NlcnRUcnVlKCJ3cm9uZyBudW1iZXIgb2YgdmFsdWVzIGZvciBhdHRyaWJ1dGUgXCJtZXRob2RcIiIsICh2YWx1ZXMuc2l6ZSgpID09IDIpKTsKLQkJYXNzZXJ0VHJ1ZSgiZGVmYXVsdCB2YWx1ZSBmb3IgYXR0cmlidXRlIFwibWV0aG9kXCIgaXMgd3JvbmciLCAobWV0aG9kQXR0ckRlY2wuZ2V0QXR0clR5cGUoKS5nZXRJbXBsaWVkVmFsdWUoKS5lcXVhbHNJZ25vcmVDYXNlKCJnZXQiKSkpOwotCX0KLQotCS8qKgotCSAqIEEgc2hvcnQgdGVzdCB0byBlbnN1cmUgdGhhdCBhIERURCBjYW4gYmUgbG9hZGVkIGZyb20gYSBzeXN0ZW0KLQkgKiByZWZlcmVuY2UuCi0JICogCi0JICogTm90ZTogTWF5IHJlcXVpcmUgYSBmdW5jdGlvbmluZyBuZXR3b3JrIGNvbm5lY3Rpb24gZm9yIHRoZSByZWZlcmVuY2VzCi0JICogdG8gYmUgcmVzb2x2ZWQgcHJvcGVybHkuCi0JICogCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3REVERMb2FkRnJvbVN5c3RlbUlEXzEoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlpZiAodGVzdFNoaXBwZWREVERMb29rdXApIHsKLQkJCXNldFVwWE1MKCk7Ci0JCQlVUkwgaW5zdGFsbGF0aW9uUGF0aCA9IFBsYXRmb3JtLmdldEJ1bmRsZShKU1BVSVRlc3RzUGx1Z2luLklEKS5nZXRFbnRyeSgiLyIpOwotCQkJU3RyaW5nIGRpc2tMb2NhdGlvbiA9IG51bGw7Ci0JCQlkaXNrTG9jYXRpb24gPSBGaWxlTG9jYXRvci5yZXNvbHZlKGluc3RhbGxhdGlvblBhdGgpLnRvRXh0ZXJuYWxGb3JtKCk7Ci0KLQkJCWFzc2VydFRydWUoImZhaWxlZCB0byByZXNvbHZlIHBsdWdpbiBpbnN0YWxsIHBhdGgiLCBkaXNrTG9jYXRpb24gIT0gbnVsbCk7Ci0JCQlTdHJpbmcgY29udGVudCA9ICI8P3htbCB2ZXJzaW9uPVwiMS4wXCI/PjwhRE9DVFlQRSBodG1sIFNZU1RFTSAiICsgZGlza0xvY2F0aW9uICsgIlRlc3RGaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC93bWwyMC5kdGRcIiIgKyAiPjxodG1sIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiIHhtbG5zOndtbD1cImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnLzIwMDEvd21sXCI+PC9odG1sPiI7Ci0JCQlmTW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0KGNvbnRlbnQpOwotCQkJQ01Eb2N1bWVudE1hbmFnZXIgZG9jdW1lbnRNYW5hZ2FlciA9IGZNb2RlbFF1ZXJ5LmdldENNRG9jdW1lbnRNYW5hZ2VyKCk7Ci0JCQlkb2N1bWVudE1hbmFnYWVyLnNldFByb3BlcnR5RW5hYmxlZChDTURvY3VtZW50TWFuYWdlci5QUk9QRVJUWV9BU1lOQ19MT0FELCBmYWxzZSk7Ci0JCQlkb2N1bWVudE1hbmFnYWVyLnNldFByb3BlcnR5RW5hYmxlZChDTURvY3VtZW50TWFuYWdlci5QUk9QRVJUWV9BVVRPX0xPQUQsIHRydWUpOwotCi0JCQlOb2RlIGRvbU5vZGUgPSAoTm9kZSkgZk1vZGVsLmdldEluZGV4ZWRSZWdpb24oY29udGVudC5sZW5ndGgoKSAtIDIpOwotCQkJQ01Ob2RlIG5vZGUgPSBmTW9kZWxRdWVyeS5nZXRDTU5vZGUoZG9tTm9kZSk7Ci0JCQlhc3NlcnRUcnVlKCJ3bWwyMC5kdGQgZmFpbGVkIHRvIGxvYWQiLCBub2RlICE9IG51bGwgJiYgbm9kZS5nZXROb2RlTmFtZSgpLmVxdWFsc0lnbm9yZUNhc2UoImh0bWwiKSk7Ci0JCX0KLQl9Ci0KLQotCS8qKgotCSAqIEEgc2hvcnQgdGVzdCB0byBlbnN1cmUgdGhhdCBhIERURCwgdGhlIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwgb25lLCBjYW4KLQkgKiBiZSBsb2FkZWQgZnJvbSBhIHN5c3RlbSByZWZlcmVuY2UuCi0JICogCi0JICogTm90ZTogTWF5IHJlcXVpcmUgYSBmdW5jdGlvbmluZyBuZXR3b3JrIGNvbm5lY3Rpb24gZm9yIHRoZSByZWZlcmVuY2VzCi0JICogdG8gYmUgcmVzb2x2ZWQgcHJvcGVybHkuCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbiAKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0RFRETG9hZEZyb21TeXN0ZW1JRF8yKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJaWYgKHRlc3RTaGlwcGVkRFRETG9va3VwKSB7Ci0JCQlVUkwgaW5zdGFsbGF0aW9uUGF0aCA9IFBsYXRmb3JtLmdldEJ1bmRsZShKU1BVSVRlc3RzUGx1Z2luLklEKS5nZXRFbnRyeSgiLyIpOwotCQkJU3RyaW5nIGRpc2tMb2NhdGlvbiA9IG51bGw7Ci0KLQkJCWRpc2tMb2NhdGlvbiA9IEZpbGVMb2NhdG9yLnJlc29sdmUoaW5zdGFsbGF0aW9uUGF0aCkudG9FeHRlcm5hbEZvcm0oKTsKLQotCQkJYXNzZXJ0VHJ1ZSgiZmFpbGVkIHRvIHJlc29sdmUgcGx1Z2luIGluc3RhbGwgcGF0aCIsIGRpc2tMb2NhdGlvbiAhPSBudWxsKTsKLQkJCXNldFVwWE1MKCk7Ci0JCQlTdHJpbmcgY29udGVudCA9ICI8P3htbCB2ZXJzaW9uPVwiMS4wXCI/PjwhRE9DVFlQRSBodG1sIFNZU1RFTSAiICsgZGlza0xvY2F0aW9uICsgInRlc3RmaWxlcy9YSFRNTC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZFwiIiArICI+PGh0bWw+PC9odG1sPiI7Ci0JCQlmTW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0KGNvbnRlbnQpOwotCi0JCQlDTURvY3VtZW50TWFuYWdlciBkb2N1bWVudE1hbmFnYWVyID0gZk1vZGVsUXVlcnkuZ2V0Q01Eb2N1bWVudE1hbmFnZXIoKTsKLQkJCWRvY3VtZW50TWFuYWdhZXIuc2V0UHJvcGVydHlFbmFibGVkKENNRG9jdW1lbnRNYW5hZ2VyLlBST1BFUlRZX0FTWU5DX0xPQUQsIGZhbHNlKTsKLQkJCWRvY3VtZW50TWFuYWdhZXIuc2V0UHJvcGVydHlFbmFibGVkKENNRG9jdW1lbnRNYW5hZ2VyLlBST1BFUlRZX0FVVE9fTE9BRCwgdHJ1ZSk7Ci0KLQkJCS8vIHNlZSBkZWZlY3QgMjgyNDI5Ci0JCQlDTUVsZW1lbnREZWNsYXJhdGlvbiBodG1sRGVjbCA9IChDTUVsZW1lbnREZWNsYXJhdGlvbikgZk1vZGVsUXVlcnkuZ2V0Q01Ob2RlKChOb2RlKSBmTW9kZWwuZ2V0SW5kZXhlZFJlZ2lvbihjb250ZW50Lmxlbmd0aCgpIC0gMikpOwotCQkJYXNzZXJ0VHJ1ZSgieGh0bWwxLXRyYW5zaXRpb25hbC5kdGQgbm90IGxvYWRlZCIsIGh0bWxEZWNsICE9IG51bGwpOwotCi0JCQkvLyBIVE1MJ3MgY2hpbGRyZW4gYXJlIHdpdGhpbiBhIGdyb3VwCi0JCQlDTUNvbnRlbnQgY29udGVudHMgPSBodG1sRGVjbC5nZXRDb250ZW50KCk7Ci0KLQkJCWFzc2VydFRydWUoImNvbnRlbnQgdHlwZSBpcyBub3QgYSBncm91cCIsIGNvbnRlbnRzLmdldE5vZGVUeXBlKCkgPT0gQ01Ob2RlLkdST1VQKTsKLQotCQkJQ01Hcm91cCBncm91cCA9IChDTUdyb3VwKSBjb250ZW50czsKLQkJCWludCBvcGVyYXRvciA9IGdyb3VwLmdldE9wZXJhdG9yKCk7Ci0JCQlDTU5vZGVMaXN0IGNoaWxkTGlzdCA9IGdyb3VwLmdldENoaWxkTm9kZXMoKTsKLQkJCWludCBtYXggPSBjb250ZW50cy5nZXRNYXhPY2N1cigpOwotCQkJaW50IG1pbiA9IGNvbnRlbnRzLmdldE1pbk9jY3VyKCk7Ci0KLQkJCS8vIHRoZSBncm91cCBzaG91bGQgYmUgYWxsb3dlZCBvbmNlLCB3aXRoIGEgc2VxdWVuY2Ugd2hvc2UgZmlyc3QKLQkJCS8vIGVudHJ5Ci0JCQkvLyBpcyB0aGUgZGVjbGFyYXRpb24gZm9yIEhFQUQKLQkJCWFzc2VydFRydWUoIm9jY3VycmFuY2Ugb2YgZ3JvdXAiLCBtaW4gPT0gMSAmJiBtYXggPT0gMSk7Ci0JCQlhc3NlcnRUcnVlKCJyZWxhdGlvbnNoaXAgaW4gZ3JvdXAiLCBvcGVyYXRvciA9PSBDTUdyb3VwLlNFUVVFTkNFKTsKLQkJCWFzc2VydFRydWUoImNvbnRlbnQgZGVzY3JpcHRvciB0eXBlLCBwb3NpdGlvbiAwIiwgY29udGVudHMuZ2V0Tm9kZVR5cGUoKSA9PSBDTU5vZGUuR1JPVVApOwotCQkJYXNzZXJ0VHJ1ZSgiY2hpbGQgb3JkZXIgKEhFQUQgZmlyc3QpIiwgY2hpbGRMaXN0Lml0ZW0oMCkuZ2V0Tm9kZU5hbWUoKS5lcXVhbHMoSFRNTDQwTmFtZXNwYWNlLkVsZW1lbnROYW1lLkhFQUQudG9Mb3dlckNhc2UoKSkpOwotCQkJYXNzZXJ0VHJ1ZSgiY2hpbGQgb3JkZXIgKEJPRFkgc2Vjb25kKSIsIGNoaWxkTGlzdC5pdGVtKDEpLmdldE5vZGVOYW1lKCkuZXF1YWxzKEhUTUw0ME5hbWVzcGFjZS5FbGVtZW50TmFtZS5CT0RZLnRvTG93ZXJDYXNlKCkpKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEEgc2hvcnQgdGVzdCB0byBlbnN1cmUgdGhhdCB0aGUgRFREIGZvciBKU1AgMS4yIHRhZyBsaWJyYXJpZXMgY2FuIGJlCi0JICogbG9hZGVkIGZyb20gYSBwdWJsaWMgcmVmZXJlbmNlIHJlZ2lzdGVyZWQgaW4gdGhlIFhNTCBjYXRhbG9nCi0JICovCi0JcHVibGljIHZvaWQgdGVzdERURExvYWRGcm9tUHVibGljSUQoKSB7Ci0JCS8vIE5vIGxvbmdlciBwcm92aWRlZCBpbiBXVFAKLQkJLy8gVE9ETzogcHJvdmlkZSBEVEQ/Ci0JCS8vIGlmICh0ZXN0U2hpcHBlZERURExvb2t1cCkgewotCQkvLyBzZXRVcFhNTCgpOwotCQkvLyBTdHJpbmcgY29udGVudHMgPSAiPCFET0NUWVBFIHRhZ2xpYiBQVUJMSUMgXCItLy9TdW4gTWljcm9zeXN0ZW1zLAotCQkvLyBJbmMuLy9EVEQgSlNQIFRhZyBMaWJyYXJ5IDEuMi8vRU5cIj4KLQkJLy8gPHRhZ2xpYj48dGFnPmZvbzwvdGFnPjwvdGFnbGliPiI7Ci0JCS8vIGZNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXQoY29udGVudHMpOwotCQkvLwotCQkvLyBDTURvY3VtZW50TWFuYWdlciBkb2N1bWVudE1hbmFnYWVyID0KLQkJLy8gZk1vZGVsUXVlcnkuZ2V0Q01Eb2N1bWVudE1hbmFnZXIoKTsKLQkJLy8gZG9jdW1lbnRNYW5hZ2Flci5zZXRQcm9wZXJ0eUVuYWJsZWQoQ01Eb2N1bWVudE1hbmFnZXIuUFJPUEVSVFlfQVNZTkNfTE9BRCwKLQkJLy8gZmFsc2UpOwotCQkvLyBkb2N1bWVudE1hbmFnYWVyLnNldFByb3BlcnR5RW5hYmxlZChDTURvY3VtZW50TWFuYWdlci5QUk9QRVJUWV9BVVRPX0xPQUQsCi0JCS8vIHRydWUpOwotCQkvLwotCQkvLwotCQkvLyAvLyB0YWdsaWIKLQkJLy8gQ01Ob2RlIG5vZGUgPSBmTW9kZWxRdWVyeS5nZXRDTU5vZGUoKE5vZGUpCi0JCS8vIGZNb2RlbC5nZXRJbmRleGVkUmVnaW9uKGNvbnRlbnRzLmxlbmd0aCgpIC0gMikpOwotCQkvLyBhc3NlcnRUcnVlKCJ3ZWItanNwdGFnbGlicmFyeV8xXzIuZHRkIGZhaWxlZCB0byBsb2FkIHRocm91Z2gKLQkJLy8gY2F0YWxvZyIsIG5vZGUgIT0gbnVsbCAmJiBub2RlLmdldE5vZGVUeXBlKCkgPT0KLQkJLy8gQ01Ob2RlLkVMRU1FTlRfREVDTEFSQVRJT04gJiYKLQkJLy8gbm9kZS5nZXROb2RlTmFtZSgpLmVxdWFsc0lnbm9yZUNhc2UoInRhZ2xpYiIpKTsKLQkJLy8KLQkJLy8gLy8gdGFnCi0JCS8vIG5vZGUgPSBmTW9kZWxRdWVyeS5nZXRDTU5vZGUoKE5vZGUpCi0JCS8vIGZNb2RlbC5nZXRJbmRleGVkUmVnaW9uKGNvbnRlbnRzLmxlbmd0aCgpIC0gMTIpKTsKLQkJLy8gYXNzZXJ0VHJ1ZSgiQ01FbGVtZW50RGVjbGFyYXRpb24gZm9yIFwidGFnXCIgZnJvbQotCQkvLyB3ZWItanNwdGFnbGlicmFyeV8xXzIuZHRkIGlzIG1pc3NpbmciLCBub2RlICE9IG51bGwgJiYKLQkJLy8gbm9kZS5nZXROb2RlVHlwZSgpID09IENNTm9kZS5FTEVNRU5UX0RFQ0xBUkFUSU9OICYmCi0JCS8vIG5vZGUuZ2V0Tm9kZU5hbWUoKS5lcXVhbHNJZ25vcmVDYXNlKCJ0YWciKSk7Ci0JCS8vIENNQ29udGVudCBjb250ZW50ID0gKChDTUVsZW1lbnREZWNsYXJhdGlvbikgbm9kZSkuZ2V0Q29udGVudCgpOwotCQkvLyBhc3NlcnRUcnVlKCJvbmx5IG9uZSBvY2N1cnJlbmNlIG9mIGNoaWxkIGdyb3VwIGFsbG93ZWQiLAotCQkvLyBjb250ZW50LmdldE5vZGVUeXBlKCkgPT0gQ01Ob2RlLkdST1VQICYmIGNvbnRlbnQuZ2V0TWF4T2NjdXIoKSA9PQotCQkvLyAxKTsKLQkJLy8gfQotCX0KLQotCi0KLQlwdWJsaWMgc3RhdGljIElTdHJ1Y3R1cmVkTW9kZWwgY3JlYXRlTW9kZWwoU3RyaW5nIGNvbnRlbnRUeXBlSUQpIHsKLQkJLy8gY3JlYXRlIGFuIGVtcHR5IG1vZGVsIHdpdGggaXRzIGRlZmF1bHQgZmFjdG9yaWVzCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihjb250ZW50VHlwZUlEKTsKLQotCQkvLyBhZGQgZWRpdG9yIGFkYXB0ZXIgZmFjdG9yaWVzCi0JCUFkYXB0ZXJGYWN0b3J5UmVnaXN0cnkgYWRhcHRlclJlZ2lzdHJ5ID0gSlNQVUlQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEFkYXB0ZXJGYWN0b3J5UmVnaXN0cnkoKTsKLQkJSXRlcmF0b3IgYWRhcHRlckxpc3QgPSBhZGFwdGVyUmVnaXN0cnkuZ2V0QWRhcHRlckZhY3RvcmllcygpOwotCQkvLyBBbmQgYWxsIHRob3NlIGFwcHJvcHJpYXRlIGZvciB0aGlzIHBhcnRpY3VsYXIgdHlwZSBvZiBjb250ZW50Ci0JCXdoaWxlIChhZGFwdGVyTGlzdC5oYXNOZXh0KCkpIHsKLQkJCXRyeSB7Ci0JCQkJQWRhcHRlckZhY3RvcnlQcm92aWRlciBwcm92aWRlciA9IChBZGFwdGVyRmFjdG9yeVByb3ZpZGVyKSBhZGFwdGVyTGlzdC5uZXh0KCk7Ci0JCQkJaWYgKHByb3ZpZGVyLmlzRm9yKG1vZGVsLmdldE1vZGVsSGFuZGxlcigpKSkgewotCQkJCQlwcm92aWRlci5hZGRBZGFwdGVyRmFjdG9yaWVzKG1vZGVsKTsKLQkJCQl9Ci0JCQl9Ci0JCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCQlMb2dnZXIubG9nRXhjZXB0aW9uKGUpOwotCQkJfQotCQl9Ci0JCXJldHVybiBtb2RlbDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm4gdGhlIHZhbGlkIHZhbHVlcyBmb3IgYW4gYXR0cmlidXRlIHdpdGggdGhlIGdpdmVuIGRlY2xhcmF0aW9uIG9uCi0JICogdGhlIGdpdmVuIGVsZW1lbnQuIERlcml2ZWQgZnJvbSBYTUxQcm9wZXJ0eVNvdXJjZQotCSAqLwotCXByaXZhdGUgTGlzdCBnZXRWYWxpZFN0cmluZ3MoRWxlbWVudCBlbGVtZW50LCBDTUF0dHJpYnV0ZURlY2xhcmF0aW9uIGF0dHJEZWNsKSB7Ci0JCUNNRGF0YVR5cGUgdmFsdWVzSGVscGVyID0gYXR0ckRlY2wuZ2V0QXR0clR5cGUoKTsKLQkJVmVjdG9yIHZhbHVlcyA9IG5ldyBWZWN0b3IoKTsKLQotCQlpZiAodmFsdWVzSGVscGVyLmdldEltcGxpZWRWYWx1ZUtpbmQoKSA9PSBDTURhdGFUeXBlLklNUExJRURfVkFMVUVfRklYRUQgJiYgdmFsdWVzSGVscGVyLmdldEltcGxpZWRWYWx1ZSgpICE9IG51bGwpIHsKLQkJCS8vIEZJWEVEIHZhbHVlCi0JCQl2YWx1ZXMuYWRkKHZhbHVlc0hlbHBlci5nZXRJbXBsaWVkVmFsdWUoKSk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQkvLyBFTlVNRVJBVEVEIHZhbHVlcwotCQkJU3RyaW5nW10gdmFsdWVTdHJpbmdzID0gbnVsbDsKLQkJCS8vIG5ldyB3YXkKLQkJCXZhbHVlU3RyaW5ncyA9IGZNb2RlbFF1ZXJ5LmdldFBvc3NpYmxlRGF0YVR5cGVWYWx1ZXMoZWxlbWVudCwgYXR0ckRlY2wpOwotCQkJaWYgKHZhbHVlU3RyaW5ncyA9PSBudWxsKQotCQkJCS8vIG9sZGVyIHdheQotCQkJCXZhbHVlU3RyaW5ncyA9IGF0dHJEZWNsLmdldEF0dHJUeXBlKCkuZ2V0RW51bWVyYXRlZFZhbHVlcygpOwotCQkJaWYgKHZhbHVlU3RyaW5ncyAhPSBudWxsKSB7Ci0JCQkJZm9yIChpbnQgaSA9IDA7IGkgPCB2YWx1ZVN0cmluZ3MubGVuZ3RoOyBpKyspIHsKLQkJCQkJdmFsdWVzLmFkZCh2YWx1ZVN0cmluZ3NbaV0pOwotCQkJCX0KLQkJCX0KLQkJfQotCQlpZiAodmFsdWVzSGVscGVyLmdldEltcGxpZWRWYWx1ZUtpbmQoKSAhPSBDTURhdGFUeXBlLklNUExJRURfVkFMVUVfTk9ORSAmJiB2YWx1ZXNIZWxwZXIuZ2V0SW1wbGllZFZhbHVlKCkgIT0gbnVsbCkgewotCQkJaWYgKCF2YWx1ZXMuY29udGFpbnModmFsdWVzSGVscGVyLmdldEltcGxpZWRWYWx1ZSgpKSkKLQkJCQl2YWx1ZXMuYWRkKHZhbHVlc0hlbHBlci5nZXRJbXBsaWVkVmFsdWUoKSk7Ci0JCX0KLQotCQlyZXR1cm4gdmFsdWVzOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9vdGhlci9Db2xvclJlZ2lvbnMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvb3RoZXIvQ29sb3JSZWdpb25zLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyZWNjZGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9vdGhlci9Db2xvclJlZ2lvbnMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5vdGhlcjsKLQotLyoqCi0gKiBJbnNlcnQgdGhlIHR5cGUncyBkZXNjcmlwdGlvbiBoZXJlLgotICogQ3JlYXRpb24gZGF0ZTogKDcvMjEvMDAgNDoxNDo0MCBQTSkKLSAqIEBhdXRob3I6IERhdmlkIFdpbGxpYW1zCi0gKi8KLXB1YmxpYyBjbGFzcyBDb2xvclJlZ2lvbnMgZXh0ZW5kcyBqYXZhLnV0aWwuVmVjdG9yIHsKLQkvKioKLQkgKiBEZWZhdWx0IDxjb2RlPnNlcmlhbFZlcnNpb25VSUQ8L2NvZGU+Ci0JICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7Ci0KLQkvKioKLQkgKiBDb2xvclJlZ2lvbnMgY29uc3RydWN0b3IgY29tbWVudC4KLQkgKi8KLQlwdWJsaWMgQ29sb3JSZWdpb25zKCkgewotCQlzdXBlcigpOwotCX0KLQotCS8qKgotCSAqIENvbG9yUmVnaW9ucyBjb25zdHJ1Y3RvciBjb21tZW50LgotCSAqIEBwYXJhbSBpbml0aWFsQ2FwYWNpdHkgaW50Ci0JICovCi0JcHVibGljIENvbG9yUmVnaW9ucyhpbnQgaW5pdGlhbENhcGFjaXR5KSB7Ci0JCXN1cGVyKGluaXRpYWxDYXBhY2l0eSk7Ci0JfQotCi0JLyoqCi0JICogQ29sb3JSZWdpb25zIGNvbnN0cnVjdG9yIGNvbW1lbnQuCi0JICogQHBhcmFtIGluaXRpYWxDYXBhY2l0eSBpbnQKLQkgKiBAcGFyYW0gY2FwYWNpdHlJbmNyZW1lbnQgaW50Ci0JICovCi0JcHVibGljIENvbG9yUmVnaW9ucyhpbnQgaW5pdGlhbENhcGFjaXR5LCBpbnQgY2FwYWNpdHlJbmNyZW1lbnQpIHsKLQkJc3VwZXIoaW5pdGlhbENhcGFjaXR5LCBjYXBhY2l0eUluY3JlbWVudCk7Ci0JfQotCi0JcHVibGljIGludFtdIGFzSW50QXJyYXkoKSB7Ci0JCXRyaW1Ub1NpemUoKTsKLQkJaW50IGFycmF5U2l6ZSA9IGVsZW1lbnREYXRhLmxlbmd0aDsKLQkJaW50W10gcmVzdWx0cyA9IG5ldyBpbnRbYXJyYXlTaXplXTsKLQkJLy8KLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBhcnJheVNpemU7IGkrKykgewotCQkJcmVzdWx0c1tpXSA9ICgoSW50ZWdlcikgZWxlbWVudERhdGFbaV0pLmludFZhbHVlKCk7Ci0JCX0KLQkJLy8KLQkJcmV0dXJuIHJlc3VsdHM7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvb3RoZXIvRGVidWdEb2N1bWVudC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9vdGhlci9EZWJ1Z0RvY3VtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyZmZlZWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9vdGhlci9EZWJ1Z0RvY3VtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIEplbnMgTHVrb3dza2kvSW5ub29wcmFjdCAtIGluaXRpYWwgcmVuYW1pbmcvcmVzdHJ1Y3R1cmluZwotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMub3RoZXI7Ci0KLWltcG9ydCBqYXZhLmlvLlByaW50U3RyZWFtOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotCi1wdWJsaWMgY2xhc3MgRGVidWdEb2N1bWVudCB7Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgZHVtcChEb2N1bWVudCBkb2N1bWVudCkgewotCQlpZiAoZG9jdW1lbnQgPT0gbnVsbCkKLQkJCXJldHVybjsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJEdW1wIG9mIERPTSIpOyAvLyROT04tTkxTLTEkCi0KLQkJZHVtcChkb2N1bWVudCwgU3lzdGVtLm91dCk7Ci0KLQkJLy8KLQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiPSA9ID0gPSA9ID0iKTsgLy8kTk9OLU5MUy0xJAotCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBkdW1wKERvY3VtZW50IGRvY3VtZW50LCBQcmludFN0cmVhbSBvdXQpIHsKLQkJTm9kZSBub2RlID0gZG9jdW1lbnQuZ2V0Rmlyc3RDaGlsZCgpOwotCQl3aGlsZSAobm9kZSAhPSBudWxsKSB7Ci0JCQlkdW1wKG5vZGUsIG91dCk7Ci0JCQlub2RlID0gbm9kZS5nZXROZXh0U2libGluZygpOwotCQl9Ci0KLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgZHVtcChOb2RlIHRvcE5vZGUpIHsKLQkJZHVtcCh0b3BOb2RlLCBTeXN0ZW0ub3V0KTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgZHVtcChOb2RlIHRvcE5vZGUsIFByaW50U3RyZWFtIG91dCkgewotCQlpZiAodG9wTm9kZSA9PSBudWxsKQotCQkJcmV0dXJuOwotCQkvLyBwcmludCBvdXQgdGhpcyBub2RlCi0JCS8vCi0JCXByaW50Tm9kZSh0b3BOb2RlLCBvdXQpOwotCi0JCS8vIG5vdyBwcmludCBvdXQgaXRzIGNoaWxkcmVuCi0JCS8vTm9kZUxpc3Qgbm9kZXMgPSB0b3BOb2RlLmdldENoaWxkTm9kZXMoKTsKLQkJLy9pbnQgbGVuID0gbm9kZXMuZ2V0TGVuZ3RoKCk7Ci0JCS8vZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47IGkrKykgewotCi0JCS8vTm9kZSBub2RlID0gbm9kZXMuaXRlbShpKTsKLQkJLy9kdW1wKG5vZGUsIG91dCk7Ci0JCS8vfQotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBwcmludE5vZGUoTm9kZSB0b3BOb2RlKSB7Ci0JCXByaW50Tm9kZSh0b3BOb2RlLCBTeXN0ZW0ub3V0KTsKLQotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBwcmludE5vZGUoTm9kZSB0b3BOb2RlLCBQcmludFN0cmVhbSBvdXQpIHsKLQkJLy8gcHJpbnQgb3V0IHRoaXMgbm9kZQotCQkvLwotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGZpcnN0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uID0gKChJRE9NTm9kZSkgdG9wTm9kZSkuZ2V0Rmlyc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBsYXN0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uID0gKChJRE9NTm9kZSkgdG9wTm9kZSkuZ2V0TGFzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbigpOwotCQlpZiAoKGZpcnN0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uID09IG51bGwpIHx8IChsYXN0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uID09IG51bGwpKSB7Ci0JCQkvLyBubyB0ZXh0IHRvIG91dHB1dAotCQl9IGVsc2UgewotCQkJaW50IHN0YXJ0ID0gZmlyc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24uZ2V0U3RhcnQoKTsKLQkJCWludCBlbmQgPSBsYXN0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uLmdldEVuZCgpOwotCi0JCQlTdHJpbmcgb3V0U3RyaW5nID0gdG9wTm9kZS50b1N0cmluZygpOwotCQkJb3V0U3RyaW5nID0gb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnV0aWxzLlN0cmluZ1V0aWxzLmVzY2FwZShvdXRTdHJpbmcpOwotCQkJb3V0LnByaW50bG4oIlsiICsgc3RhcnQgKyAiLCAiICsgZW5kICsgIl0iICsgb3V0U3RyaW5nKTsgLy8kTk9OLU5MUy0zJC8vJE5PTi1OTFMtMiQvLyROT04tTkxTLTEkCi0JCX0KLQkJLy8gbm93IGRvIGl0cyBjaGlsZHJlbgotCQlOb2RlTGlzdCBub2RlcyA9IHRvcE5vZGUuZ2V0Q2hpbGROb2RlcygpOwotCQlpbnQgbGVuID0gbm9kZXMuZ2V0TGVuZ3RoKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLQkJCU5vZGUgY2hpbGROb2RlID0gbm9kZXMuaXRlbShpKTsKLQkJCXByaW50Tm9kZShjaGlsZE5vZGUsIG91dCk7Ci0JCX0KLQotCX0KLQotCXB1YmxpYyBEZWJ1Z0RvY3VtZW50KCkgewotCQlzdXBlcigpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9vdGhlci9TY2FubmVyVW5pdFRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL290aGVyL1NjYW5uZXJVbml0VGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzJkY2FiYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL290aGVyL1NjYW5uZXJVbml0VGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMub3RoZXI7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwubW9kZWxoYW5kbGVyLk1vZGVsSGFuZGxlckZvckpTUDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwucmVnaW9ucy5ET01KU1BSZWdpb25Db250ZXh0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwubHRrLm1vZGVsaGFuZGxlci5JTW9kZWxIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5sdGsucGFyc2VyLkJsb2NrTWFya2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5sdGsucGFyc2VyLkJsb2NrVGFnUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JVGV4dFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JVGV4dFJlZ2lvbkNvbGxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVRleHRSZWdpb25Db250YWluZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVRleHRSZWdpb25MaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC50ZXh0LkNvcmVOb2RlTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwubW9kZWxoYW5kbGVyLk1vZGVsSGFuZGxlckZvclhNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucmVnaW9ucy5ET01SZWdpb25Db250ZXh0OwotCi0vKioKLSAqIEBhdXRob3IgTml0aW4gRGFoeWFiaGFpIDxuaXRpbmRAdXMuaWJtLmNvbT4KLSAqLwotcHVibGljIGNsYXNzIFNjYW5uZXJVbml0VGVzdHMgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gY2hlY2tDb21wbGV4UmVnaW9uVHlwZXMoSVRleHRSZWdpb25MaXN0IHJlZ2lvbnMsIFN0cmluZ1tdIGNvbnRleHRzLCBTdHJpbmdbXVtdIGVtYmVkZGVkQ29udGV4dHMpIHsKLQotCQlpbnQgZW1iZWRDb3VudCA9IDA7Ci0JCUl0ZXJhdG9yIGl0ZXJhdG9yID0gcmVnaW9ucy5pdGVyYXRvcigpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbnRleHRzLmxlbmd0aDsgaSsrKSB7Ci0JCQlpZiAoIWl0ZXJhdG9yLmhhc05leHQoKSkKLQkJCQlyZXR1cm4gZmFsc2U7Ci0JCQlJVGV4dFJlZ2lvbiByZWdpb24gPSAoSVRleHRSZWdpb24pIGl0ZXJhdG9yLm5leHQoKTsKLQkJCWFzc2VydEVxdWFscygiY29udGV4dCAiICsgaSArICIgaW5jb3JyZWN0IiwgY29udGV4dHNbaV0sIHJlZ2lvbi5nZXRUeXBlKCkpOwotCQkJaWYgKHJlZ2lvbiBpbnN0YW5jZW9mIElUZXh0UmVnaW9uQ29udGFpbmVyKSB7Ci0JCQkJSVRleHRSZWdpb25Db250YWluZXIgY29udGFpbmVyID0gKElUZXh0UmVnaW9uQ29udGFpbmVyKSByZWdpb247Ci0JCQkJYm9vbGVhbiBlbWJlZGRlZFJlc3VsdCA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnQoY29udGFpbmVyLCBlbWJlZGRlZENvbnRleHRzW2VtYmVkQ291bnRdLmxlbmd0aCkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhjb250YWluZXIuZ2V0UmVnaW9ucygpLCBlbWJlZGRlZENvbnRleHRzW2VtYmVkQ291bnRdKTsKLQkJCQllbWJlZENvdW50Kys7Ci0JCQkJYXNzZXJ0VHJ1ZShlbWJlZGRlZFJlc3VsdCk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGNoZWNrTW9kZWxMZW5ndGgoSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCwgaW50IGxlbmd0aCkgewotCQlyZXR1cm4gY2hlY2tNb2RlbExlbmd0aChkb2N1bWVudC5nZXRMYXN0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCksIGxlbmd0aCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGNoZWNrTW9kZWxMZW5ndGgoSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiByZWdpb24sIGludCBsZW5ndGgpIHsKLQkJcmV0dXJuIHJlZ2lvbi5nZXRFbmRPZmZzZXQoKSA9PSBsZW5ndGg7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGNoZWNrU2ltcGxlUmVnaW9uQ291bnQoSVRleHRSZWdpb25Db250YWluZXIgcmVnaW9uQ29udGFpbmVyLCBpbnQgc2l6ZSkgewotCQkvLyB5ZXMsIHRoaXMgbG9va3Mgc2lsbHksIGJ1dCBpdCBtYWtlcyBpdCBlYXNpZXIgdG8gZmluZCB0aGUgZXhhY3QKLQkJLy8gZmFpbHVyZSBwb2ludAotCQlhc3NlcnRFcXVhbHMoInJlZ2lvbiBjb3VudCIsIHNpemUsIHJlZ2lvbkNvbnRhaW5lci5nZXROdW1iZXJPZlJlZ2lvbnMoKSk7Ci0JCXJldHVybiB0cnVlOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCByZWdpb25Db250YWluZXJzLCBpbnRbXSBzaXplcykgewotCQlpbnQgY29udGFpbmVycyA9IHJlZ2lvbkNvbnRhaW5lcnMuZ2V0TGVuZ3RoKCk7Ci0JCWFzc2VydEVxdWFscygiZGlmZmVyZW50IG51bWJlciBvZiBjb250YWluZXJzIiwgc2l6ZXMubGVuZ3RoLCBjb250YWluZXJzKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplcy5sZW5ndGg7IGkrKykgewotCQkJYXNzZXJ0RXF1YWxzKCJjb250YWluZXIgIiArIGkgKyAiIGlzIGRpZmZlcmVudCIsIHNpemVzW2ldLCByZWdpb25Db250YWluZXJzLml0ZW0oaSkuZ2V0TnVtYmVyT2ZSZWdpb25zKCkpOwotCQkJY29udGludWU7Ci0JCX0KLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMoSVRleHRSZWdpb25MaXN0IHJlZ2lvbnMsIFN0cmluZ1tdIGNvbnRleHRzKSB7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY29udGV4dHMubGVuZ3RoOyBpKyspIHsKLQkJCUlUZXh0UmVnaW9uIHJlZ2lvbiA9IHJlZ2lvbnMuZ2V0KGkpOwotCQkJYXNzZXJ0RXF1YWxzKCJyZWdpb24gdHlwZSAiICsgaSwgY29udGV4dHNbaV0sIHJlZ2lvbi5nZXRUeXBlKCkpOwotCQl9Ci0JCXJldHVybiB0cnVlOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGxvYWRDaGFycyhJbnB1dFN0cmVhbSBpbnB1dCkgewotCi0JCVN0cmluZ0J1ZmZlciBzID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQl0cnkgewotCQkJaW50IGMgPSAtMTsKLQkJCXdoaWxlICgoYyA9IGlucHV0LnJlYWQoKSkgPj0gMCkgewotCQkJCWlmIChjID4gMjU1KQotCQkJCQlicmVhazsKLQkJCQlzLmFwcGVuZCgoY2hhcikgYyk7Ci0JCQl9Ci0JCQlpbnB1dC5jbG9zZSgpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkFuIEkvTyBlcnJvciBvY2N1cmVkIHdoaWxlIHNjYW5uaW5nIDoiKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihlKTsKLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJcmV0dXJuIHMudG9TdHJpbmcoKTsKLQl9Ci0KLQkvKioKLQkgKiBTdGFydHMgdGhlIGFwcGxpY2F0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBhbiBhcnJheSBvZiBjb21tYW5kLWxpbmUgYXJndW1lbnRzCi0JICovCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQotCQlpZiAoYXJncyA9PSBudWxsIHx8IGFyZ3MubGVuZ3RoID09IDApIHsKLQkJCXJ1bkFsbCgpOwotCQl9Ci0JCWVsc2UgaWYgKGFyZ3MubGVuZ3RoID09IDEpIHsKLQkJCVN0cmluZyBtZXRob2RUb1J1biA9IGFyZ3NbMF0udHJpbSgpOwotCQkJcnVuT25lKG1ldGhvZFRvUnVuKTsKLQkJfQotCX0KLQotCXByb3RlY3RlZCBzdGF0aWMgdm9pZCBydW5BbGwoKSB7Ci0KLQkJanVuaXQudGV4dHVpLlRlc3RSdW5uZXIucnVuKHN1aXRlKCkpOwotCX0KLQotCXByb3RlY3RlZCBzdGF0aWMgdm9pZCBydW5PbmUoU3RyaW5nIG1ldGhvZE5hbWUpIHsKLQotCQlUZXN0U3VpdGUgdGVzdFN1aXRlID0gbmV3IFRlc3RTdWl0ZSgpOwotCQlUZXN0Q2FzZSB0ZXN0ID0gbmV3IFNjYW5uZXJVbml0VGVzdHMobWV0aG9kTmFtZSk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0KHRlc3QpOwotCQlqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lci5ydW4odGVzdFN1aXRlKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0KLQkJcmV0dXJuIG5ldyBUZXN0U3VpdGUoU2Nhbm5lclVuaXRUZXN0cy5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHZlcmlmeUxlbmd0aHMoaW50IHN0YXJ0T2Zmc2V0LCBJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGZpcnN0RG9jdW1lbnRSZWdpb24sIFN0cmluZyB0ZXh0KSB7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gaG9sZFJlZ2lvbiA9IGZpcnN0RG9jdW1lbnRSZWdpb247Ci0JCWFzc2VydFRydWUoImRvY3VtZW50IGRvZXMgbm90IHN0YXJ0IGF0IGV4cGVjdGVkIG9mZnNldCIsIGhvbGRSZWdpb24uZ2V0U3RhcnRPZmZzZXQoKSA9PSBzdGFydE9mZnNldCk7Ci0JCWludCBsYXN0RW5kID0gMDsKLQkJd2hpbGUgKGhvbGRSZWdpb24gIT0gbnVsbCAmJiBob2xkUmVnaW9uLmdldEVuZE9mZnNldCgpID4gMCkgewotCQkJYXNzZXJ0VHJ1ZSgiemVyby1sZW5ndGggU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGZvdW5kIiwgaG9sZFJlZ2lvbi5nZXRTdGFydE9mZnNldCgpID09IGxhc3RFbmQpOwotCQkJYXNzZXJ0VHJ1ZSgiVGV4dFJlZ2lvbmxlc3MgU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGZvdW5kIiwgaG9sZFJlZ2lvbi5nZXROdW1iZXJPZlJlZ2lvbnMoKSA+IDApOwotCQkJSVRleHRSZWdpb25MaXN0IGxpc3QgPSBob2xkUmVnaW9uLmdldFJlZ2lvbnMoKTsKLQkJCWludCBpbmRleCA9IDA7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGxpc3Quc2l6ZSgpOyBpKyspIHsKLQkJCQlJVGV4dFJlZ2lvbiByZWdpb24gPSBsaXN0LmdldChpKTsKLQkJCQlhc3NlcnRUcnVlKCJ0ZXh0IHJlZ2lvbiBzZWFtcyBkb24ndCBtYXRjaCIsIHJlZ2lvbi5nZXRTdGFydCgpID09IGluZGV4KTsKLQkJCQlpbmRleCArPSByZWdpb24uZ2V0TGVuZ3RoKCk7Ci0JCQl9Ci0JCQlsYXN0RW5kID0gaG9sZFJlZ2lvbi5nZXRFbmRPZmZzZXQoKTsKLQkJCWhvbGRSZWdpb24gPSBob2xkUmVnaW9uLmdldE5leHQoKTsKLQkJfQotCi0JCWhvbGRSZWdpb24gPSBmaXJzdERvY3VtZW50UmVnaW9uOwotCQl3aGlsZSAoaG9sZFJlZ2lvbiAhPSBudWxsICYmIGhvbGRSZWdpb24uZ2V0TmV4dCgpICE9IG51bGwpIHsKLQkJCWhvbGRSZWdpb24gPSBob2xkUmVnaW9uLmdldE5leHQoKTsKLQkJfQotCQljaGVja01vZGVsTGVuZ3RoKGhvbGRSZWdpb24sIHRleHQubGVuZ3RoKCkpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCB2ZXJpZnlMZW5ndGhzKGludCBzdGFydE9mZnNldCwgSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3QgbGlzdCwgU3RyaW5nIHRleHQpIHsKLQkJdmVyaWZ5TGVuZ3RocyhzdGFydE9mZnNldCwgbGlzdC5pdGVtKDApLCB0ZXh0KTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgdmVyaWZ5TGVuZ3RocyhJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50LCBTdHJpbmcgdGV4dCkgewotCQl2ZXJpZnlMZW5ndGhzKDAsIGRvY3VtZW50LmdldEZpcnN0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCksIHRleHQpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCB2ZXJpZnlMZW5ndGhzKElTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwsIFN0cmluZyB0ZXh0KSB7Ci0JCXZlcmlmeUxlbmd0aHMobW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCksIHRleHQpOwotCX0KLQotCXByb3RlY3RlZCBJU3RydWN0dXJlZERvY3VtZW50IGZNb2RlbDsKLQlwcm90ZWN0ZWQgU3RyaW5nIGlucHV0OwotCXByaXZhdGUgQmxvY2tUYWdQYXJzZXIgcGFyc2VyOwotCXByb3RlY3RlZCBPYmplY3QgdHlwZTsKLQotCXB1YmxpYyBTY2FubmVyVW5pdFRlc3RzKFN0cmluZyBuYW1lKSB7Ci0KLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgYXBwZW5kVGFnQmxvY2soU3RyaW5nQnVmZmVyIGJ1ZmZlciwgU3RyaW5nIHRhZ25hbWUsIGludCBsZW5ndGgpIHsKLQotCQlidWZmZXIuYXBwZW5kKCc8Jyk7Ci0JCWJ1ZmZlci5hcHBlbmQodGFnbmFtZSk7Ci0JCWJ1ZmZlci5hcHBlbmQoJz4nKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKLQkJCWJ1ZmZlci5hcHBlbmQoJ18nKTsKLQkJYnVmZmVyLmFwcGVuZCgiPC8iKTsKLQkJYnVmZmVyLmFwcGVuZCh0YWduYW1lKTsKLQkJYnVmZmVyLmFwcGVuZCgnPicpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgewotCi0JCXNldFVwWE1MKG51bGwpOwotCX0KLQotCXByb3RlY3RlZCBJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBzZXRVcEpTUChTdHJpbmcgdGV4dCkgewotCi0JCXNldHVwTW9kZWwobmV3IE1vZGVsSGFuZGxlckZvckpTUCgpKTsKLQkJcGFyc2VyLmFkZEJsb2NrTWFya2VyKG5ldyBCbG9ja01hcmtlcigic2NyaXB0IiwgbnVsbCwgRE9NUmVnaW9uQ29udGV4dC5CTE9DS19URVhULCBmYWxzZSkpOwotCQlwYXJzZXIuYWRkQmxvY2tNYXJrZXIobmV3IEJsb2NrTWFya2VyKCJzdHlsZSIsIG51bGwsIERPTVJlZ2lvbkNvbnRleHQuQkxPQ0tfVEVYVCwgZmFsc2UpKTsKLQkJcGFyc2VyLmFkZEJsb2NrTWFya2VyKG5ldyBCbG9ja01hcmtlcigiZGlzYWxsb3dKU1AiLCBudWxsLCBET01SZWdpb25Db250ZXh0LkJMT0NLX1RFWFQsIHRydWUsIGZhbHNlKSk7Ci0KLQkJLyoKLQkJICogSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCgiY29udGVudCA8c2NyaXB0PgotCQkgKiA8JT0gZXhwcmVzc2lvbiAlPiA8L3NjcmlwdD4gPGE+IDwvYT4gPGZvbzpkaXNhbGxvd0pTUD4gPCU9ICU+Ci0JCSAqIDwvZm9vOmRpc2FsbG93SlNQPiA+Iik7IHBhcnNlci5hZGRCbG9ja01hcmtlcihuZXcKLQkJICogQmxvY2tNYXJrZXIoImpzcDpkZWNsYXJhdGlvbiIsIG51bGwsCi0JCSAqIFhNTEpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DT05URU5ULCB0cnVlKSk7IHBhcnNlci5hZGRCbG9ja01hcmtlcihuZXcKLQkJICogQmxvY2tNYXJrZXIoImpzcDpleHByZXNzaW9uIiwgbnVsbCwKLQkJICogWE1MSlNQUmVnaW9uQ29udGV4dHMuSlNQX0NPTlRFTlQsIHRydWUpKTsgcGFyc2VyLmFkZEJsb2NrTWFya2VyKG5ldwotCQkgKiBCbG9ja01hcmtlcigianNwOnNjcmlwdGxldCIsIG51bGwsCi0JCSAqIFhNTEpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DT05URU5ULCB0cnVlKSk7Ci0JCSAqLwotCQlpbnB1dCA9IHRleHQ7Ci0JCWZNb2RlbC5zZXQoaW5wdXQpOwotCQlyZXR1cm4gZk1vZGVsLmdldFJlZ2lvbkxpc3QoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXR1cE1vZGVsKElNb2RlbEhhbmRsZXIgY29udGVudFR5cGUpIHsKLQotCQlmTW9kZWwgPSAoSVN0cnVjdHVyZWREb2N1bWVudCkgY29udGVudFR5cGUuZ2V0RG9jdW1lbnRMb2FkZXIoKS5jcmVhdGVOZXdTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJdGhpcy5wYXJzZXIgPSAoQmxvY2tUYWdQYXJzZXIpIGZNb2RlbC5nZXRQYXJzZXIoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgc2V0VXBYTUwoU3RyaW5nIHRleHQpIHsKLQotCQlzZXR1cE1vZGVsKG5ldyBNb2RlbEhhbmRsZXJGb3JYTUwoKSk7Ci0JCXBhcnNlci5hZGRCbG9ja01hcmtlcihuZXcgQmxvY2tNYXJrZXIoInNjcmlwdCIsIG51bGwsIERPTVJlZ2lvbkNvbnRleHQuQkxPQ0tfVEVYVCwgZmFsc2UpKTsKLQkJcGFyc2VyLmFkZEJsb2NrTWFya2VyKG5ldyBCbG9ja01hcmtlcigic3R5bGUiLCBudWxsLCBET01SZWdpb25Db250ZXh0LkJMT0NLX1RFWFQsIGZhbHNlKSk7Ci0JCXBhcnNlci5hZGRCbG9ja01hcmtlcihuZXcgQmxvY2tNYXJrZXIoImRpc2FsbG93SlNQIiwgbnVsbCwgRE9NUmVnaW9uQ29udGV4dC5CTE9DS19URVhULCB0cnVlLCBmYWxzZSkpOwotCQlpbnB1dCA9IHRleHQ7Ci0JCWZNb2RlbC5zZXQoaW5wdXQpOwotCQlyZXR1cm4gZk1vZGVsLmdldFJlZ2lvbkxpc3QoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB0ZXN0QmxvY2tTY2FuQnVmZmVyQm91bmRhcmllcyhTdHJpbmcgY29udGVudFR5cGVJRCkgewotCQlJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50ID0gbnVsbDsKLQkJLy8gdGhlIGludGVyZXN0aW5nIG9mZnNldHMgYXJlIGFyb3VuZCAxNmsgKDE2Mzg0KQotCQkvLyBmb3IgKGludCBpID0gMTY1MDA7IGkgPiAxNjEwMDsgaS0tKSB7Ci0JCS8vIGZvciAoaW50IGkgPSAxNzAwMDsgaSA+IDE1MDAwOyBpLS0pIHsKLQkJZm9yIChpbnQgaSA9IDE2Mzg0ICsgMjU7IGkgPiAxNjM2NCAtIDI1OyBpLS0pIHsKLQkJCVN0cmluZ0J1ZmZlciB0ZXh0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQkJZG9jdW1lbnQgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmNyZWF0ZVN0cnVjdHVyZWREb2N1bWVudEZvcihjb250ZW50VHlwZUlEKTsKLQkJCWFwcGVuZFRhZ0Jsb2NrKHRleHQsICJzY3JpcHQiLCBpKTsKLQkJCVN0cmluZyBzdHJpbmcgPSB0ZXh0LnRvU3RyaW5nKCk7Ci0JCQl0cnkgewotCQkJCWRvY3VtZW50LnNldFRleHQodGhpcywgc3RyaW5nKTsKLQkJCQl2ZXJpZnlMZW5ndGhzKGRvY3VtZW50LCBzdHJpbmcpOwotCQkJCWFzc2VydFRydWUoInRvbyBmZXcgZG9jdW1lbnQgcmVnaW9ucyBbcnVuIHZhbHVlICIgKyBpICsgIl0gIiwgbmV3IENvcmVOb2RlTGlzdChkb2N1bWVudC5nZXRGaXJzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbigpKS5nZXRMZW5ndGgoKSA9PSAzKTsKLQkJCQl2ZXJpZnlMZW5ndGhzKGRvY3VtZW50LCBzdHJpbmcpOwotCQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gc3RhcnRUYWcgPSBkb2N1bWVudC5nZXRGaXJzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbigpOwotCQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gbWlkZGxlQmxvY2sgPSBzdGFydFRhZy5nZXROZXh0KCk7Ci0JCQkJLy8gSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBlbmRUYWcgPSBtaWRkbGVCbG9jay5nZXROZXh0KCk7Ci0JCQkJYXNzZXJ0VHJ1ZSgibm90IGJsb2NrIHRleHQgaW4gbWlkZGxlIiwgbWlkZGxlQmxvY2suZ2V0Rmlyc3RSZWdpb24oKS5nZXRUeXBlKCkgPT0gRE9NUmVnaW9uQ29udGV4dC5CTE9DS19URVhUKTsKLQkJCX0KLQkJCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJCWFzc2VydE51bGwoImV4Y2VwdGlvbiBjYXVnaHQiICsgZSwgZSk7Ci0JCQl9Ci0JCQkvLyBTeXN0ZW0uZ2MoKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RCbG9ja1NjYW5CdWZmZXJCb3VuZGFyaWVzRm9ySFRNTCgpIHsKLQkJdGVzdEJsb2NrU2NhbkJ1ZmZlckJvdW5kYXJpZXMoIm9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaHRtbHNvdXJjZSIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RCbG9ja1NjYW5CdWZmZXJCb3VuZGFyaWVzRm9ySlNQKCkgewotCQl0ZXN0QmxvY2tTY2FuQnVmZmVyQm91bmRhcmllcygib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIpOwotCX0KLQotCXByaXZhdGUgdm9pZCB0ZXN0QmxvY2tUYWcoSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMpIHsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezEsIDYsIDEsIDMsIDF9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDEpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDIpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuQkxPQ0tfVEVYVH0pICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgzKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9FTkRfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0V9KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oNCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TW9kZWxMZW5ndGgoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QmxvY2tUYWdfSlNQKCkgewotCQl0ZXN0QmxvY2tUYWcoc2V0VXBKU1AoImJlZ2luIDxzY3JJUHQgdHlwZT1cInBsMlwiPiA8L3NjcmlwIHQ+PC9zY3JpcHRzPjwvc2NyaXB0cyA8Ly8vPCEtIC0tLT48L3NDcklQdD4gZW5kIikpOwotCX0KLQotCS8qKgotCSAqIENoZWNrIGJsb2NrIHRhZyBzY2FubmluZyBiZXR3ZWVuIFhNTCBjb250ZW50Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEJsb2NrVGFnX1hNTCgpIHsKLQotCQl0ZXN0QmxvY2tUYWcoc2V0VXBYTUwoImJlZ2luIDxzY3JJUHQgdHlwZT1cInBsMlwiPiA8L3NjcmlwIHQ+PC9zY3JpcHRzPjwvc2NyaXB0cyA8Ly8vPCEtIC0tLT48L3NDcklQdD4gZW5kIikpOwotCX0KLQotCS8qKgotCSAqIENoZWNrIGJsb2NrIHRhZyBzY2FubmluZyBiZXR3ZWVuIFhNTCBjb250ZW50Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEJsb2NrVGFnV2l0aEpTUEV4cHJlc3Npb25zKCkgewotCi0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBKU1AoImJlZ2luIDxzY3JpcHQgdHlwZT1cInBsMlwiPiA8JT0gXCJleHByZXNzaW9uXCIlPiA8L3NjcklQdD4gPGE+PC9hPiA8ZGlzYWxsb3dKU1A+IDwlPSBcImV4cHJlc3Npb25cIiAlPiA8L2Rpc2FsbG93SlNQPiBlbmQiKTsKLQotCQkvLyBPTEQKLQkJLy8gYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezEsIDYsCi0JCS8vIDMsIDMsIDEsIDMsIDMsIDEsIDMsIDMsIDMsIDF9KTsKLQkJLy8gTkVXCi0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXsxLCA2LCAzLCAzLCAxLCAzLCAzLCAxLCAzLCAxLCAzLCAxfSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJaW50IGkgPSAwOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbShpKyspLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oaSsrKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9FUVVBTFMsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19DTE9TRX0pICYmIGNoZWNrQ29tcGxleFJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oaSsrKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LkJMT0NLX1RFWFQsIERPTVJlZ2lvbkNvbnRleHQuQkxPQ0tfVEVYVCwgRE9NUmVnaW9uQ29udGV4dC5CTE9DS19URVhUfSwgbmV3IFN0cmluZ1tdW117e0RPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9FWFBSRVNTSU9OX09QRU4sIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DT05URU5ULCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfQ0xPU0V9fSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKGkrKykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfRU5EX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKGkrKykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pCi0JCQkJCSYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbShpKyspLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKGkrKykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfRU5EX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKGkrKykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbShpKyspLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSkKLQkJCQkJLy8gQ09SUkVDVCBCRUhBVklPUgotCQkJCQkmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oaSsrKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LkJMT0NLX1RFWFR9KQotCQkJCQkvLyBPTEQsIEJST0tFTiBCRUhBVklPUgotCQkJCQkvLyAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oaSsrKS5nZXRSZWdpb25zKCksCi0JCQkJCS8vIG5ldwotCQkJCQkvLyBTdHJpbmdbXXsKLQkJCQkJLy8gWE1MUmVnaW9uQ29udGV4dC5CTE9DS19URVhULAotCQkJCQkvLyBYTUxSZWdpb25Db250ZXh0LkJMT0NLX1RFWFQsCi0JCQkJCS8vIFhNTFJlZ2lvbkNvbnRleHQuQkxPQ0tfVEVYVH0pCi0JCQkJCSYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbShpKyspLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0VORF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19DTE9TRX0pICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbShpKyspLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeU1vZGVsTGVuZ3RoKCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHRlc3RCdWZmZXJVbmRlclJ1bl8xKElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzKSB7Ci0KLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezEsIDYsIDJ9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiByZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDEpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfRU1QVFlfVEFHX0NMT1NFfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDIpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTU1FTlRfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfQ09NTUVOVF9URVhUfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlNb2RlbExlbmd0aCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RCdWZmZXJVbmRlclJ1bl8xX0pTUCgpIHsKLQkJdGVzdEJ1ZmZlclVuZGVyUnVuXzEoc2V0VXBKU1AoImNvbnRlbnQgPHRhZyBhPWIvPjwhLS1jIikpOwotCX0KLQotCS8qKgotCSAqIENoZWNrIGZvciBidWZmZXIgdW5kZXItcnVucyBvbiBibG9jayBzY2FubmluZwotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RCdWZmZXJVbmRlclJ1bl8xX1hNTCgpIHsKLQkJdGVzdEJ1ZmZlclVuZGVyUnVuXzEoc2V0VXBYTUwoImNvbnRlbnQgPHRhZyBhPWIvPjwhLS1jIikpOwotCX0KLQotCXByaXZhdGUgdm9pZCB0ZXN0QnVmZmVyVW5kZXJSdW5fMihJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcykgewotCi0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXsxLCA2LCAxfSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gcmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJYm9vbGVhbiB0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgxKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9FUVVBTFMsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX0VNUFRZX1RBR19DTE9TRX0pICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgyKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT01NRU5UX09QRU59KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeU1vZGVsTGVuZ3RoKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEJ1ZmZlclVuZGVyUnVuXzJfSlNQKCkgewotCi0JCXRlc3RCdWZmZXJVbmRlclJ1bl8yKHNldFVwSlNQKCJjb250ZW50IDx0YWcgYT1iLz48IS0tIikpOwotCX0KLQotCS8qKgotCSAqIENoZWNrIGZvciBidWZmZXIgdW5kZXItcnVucyBvbiBibG9jayBzY2FubmluZwotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RCdWZmZXJVbmRlclJ1bl8yX1hNTCgpIHsKLQotCQl0ZXN0QnVmZmVyVW5kZXJSdW5fMihzZXRVcFhNTCgiY29udGVudCA8dGFnIGE9Yi8+PCEtLSIpKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgdGVzdENEQVRBKElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzKSB7Ci0KLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezEsIDMsIDF9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDEpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NEQVRBX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX0NEQVRBX1RFWFQsIERPTVJlZ2lvbkNvbnRleHQuWE1MX0NEQVRBX0NMT1NFfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDIpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeU1vZGVsTGVuZ3RoKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENEQVRBX0pTUCgpIHsKLQotCQl0ZXN0Q0RBVEEoc2V0VXBKU1AoImEgPCFbQ0RBVEFbPD4hITwhIT48LyYmJi0tPCEtLV1dPiBiIikpOwotCX0KLQotCS8qKgotCSAqIENoZWNrIENEQVRBIHNlY3Rpb24gc2Nhbm5pbmcgYmV0d2VlbiBjb250ZW50Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdENEQVRBX1hNTCgpIHsKLQotCQl0ZXN0Q0RBVEEoc2V0VXBYTUwoImEgPCFbQ0RBVEFbPD4hITwhIT48LyYmJi0tPCEtLV1dPiBiIikpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDREFUQWluQmxvY2tKU1AxKCkgewotCQlzZXRVcEpTUCgiPHNjcmlwdD48IVtDREFUQVsgY29udGVudHNdXT48L3NjcmlwdD4iKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q0RBVEFpbkJsb2NrSlNQMigpIHsKLQkJc2V0VXBKU1AoIjxzY3JpcHQ+PCFbQ0RBVEFbPC9zY3JpcHQ+XV0+PC9zY3JpcHQ+Iik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENEQVRBaW5CbG9ja0pTUDJhKCkgewotCQlzZXRVcEpTUCgiPHNjcmlwdD48IVtDREFUQVtjb250ZW50czwvc2NyaXB0Pl1dPjwvc2NyaXB0PiIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDREFUQWluQmxvY2tKU1AyYigpIHsKLQkJc2V0VXBKU1AoIjxzY3JpcHQ+PCFbQ0RBVEFbPC9zY3JpcHQ+Y29udGVudHNdXT48L3NjcmlwdD4iKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q0RBVEFpbkJsb2NrSlNQMygpIHsKLQkJc2V0VXBKU1AoIjxzY3JpcHQ+PCFbQ0RBVEFbXV0+PC9zY3JpcHQ+Iik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENEQVRBaW5CbG9ja0pTUDQoKSB7Ci0JCXNldFVwSlNQKCI8c2NyaXB0PjwhW0NEQVRBWyBdXT4iKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q0RBVEFpbkJsb2NrSlNQNSgpIHsKLQkJc2V0VXBKU1AoIjxzY3JpcHQ+PCFbQ0RBVEFbIF1dXT4iKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q0RBVEFpbkJsb2NrSlNQNigpIHsKLQkJc2V0VXBKU1AoIjxzY3JpcHQ+PCFbQ0RBVEFbIF1dIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENEQVRBaW5CbG9ja0pTUDcoKSB7Ci0JCXNldFVwSlNQKCI8c2NyaXB0PjwhW0NEQVRBWyAiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q0RBVEFpbkJsb2NrSlNQOCgpIHsKLQkJc2V0VXBKU1AoIjxzY3JpcHQ+PCFbQ0RBVEFbIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENEQVRBaW5CbG9ja1hNTDEoKSB7Ci0JCXNldFVwWE1MKCI8c2NyaXB0PjwhW0NEQVRBWyBdXT48L3NjcmlwdD4iKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q0RBVEFpbkJsb2NrWE1MMigpIHsKLQkJc2V0VXBYTUwoIjxzY3JpcHQ+PCFbQ0RBVEFbPC9zY3JpcHQ+XV0+PC9zY3JpcHQ+Iik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENEQVRBaW5CbG9ja1hNTDMoKSB7Ci0JCXNldFVwWE1MKCI8c2NyaXB0PjwhW0NEQVRBW11dPjwvc2NyaXB0PiIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDREFUQWluQmxvY2tYTUw0KCkgewotCQlzZXRVcFhNTCgiPHNjcmlwdD48IVtDREFUQVsgXV0+Iik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENEQVRBaW5CbG9ja1hNTDUoKSB7Ci0JCXNldFVwWE1MKCI8c2NyaXB0PjwhW0NEQVRBWyBdXV0+Iik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENEQVRBaW5CbG9ja1hNTDYoKSB7Ci0JCXNldFVwWE1MKCI8c2NyaXB0PjwhW0NEQVRBWyBdXSIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDREFUQWluQmxvY2tYTUw3KCkgewotCQlzZXRVcFhNTCgiPHNjcmlwdD48IVtDREFUQVsgIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENEQVRBaW5CbG9ja1hNTDgoKSB7Ci0JCXNldFVwWE1MKCI8c2NyaXB0PjwhW0NEQVRBWyIpOwotCX0KLQotCS8qKgotCSAqIENoZWNrIGNvbW1lbnRzIGJldHdlZW4gWE1MIGNvbnRlbnQKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Q29tbWVudHNfSlNQKCkgewotCQlTdHJpbmcgdGV4dCA9ICJhIDwhLS0gLS0+PCEtLS0tPjwlLS0gLS0lPiBiIjsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCh0ZXh0KTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezEsIDMsIDIsIDMsIDF9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDEpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTU1FTlRfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfQ09NTUVOVF9URVhULCBET01SZWdpb25Db250ZXh0LlhNTF9DT01NRU5UX0NMT1NFfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDIpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTU1FTlRfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfQ09NTUVOVF9DTE9TRX0pICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgzKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01KU1BSZWdpb25Db250ZXh0cy5KU1BfQ09NTUVOVF9PUEVOLCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfQ09NTUVOVF9URVhULCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfQ09NTUVOVF9DTE9TRX0pICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSg0KS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlMZW5ndGhzKDAsIG5vZGVzLml0ZW0oMCksIHRleHQpOwotCX0KLQotCS8qKgotCSAqIENoZWNrIGNvbW1lbnRzIGJldHdlZW4gSlNQIGNvbnRlbnQKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Q29tbWVudHNfWE1MKCkgewotCQlTdHJpbmcgdGV4dCA9ICJhIDwhLS0gLS0+PDwhLS0tLT5iIjsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcFhNTCh0ZXh0KTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezEsIDMsIDEsIDIsIDF9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDEpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTU1FTlRfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfQ09NTUVOVF9URVhULCBET01SZWdpb25Db250ZXh0LlhNTF9DT01NRU5UX0NMT1NFfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDIpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDMpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTU1FTlRfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfQ09NTUVOVF9DTE9TRX0pICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSg0KS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlMZW5ndGhzKDAsIG5vZGVzLml0ZW0oMCksIHRleHQpOwotCX0KLQotCXByaXZhdGUgdm9pZCB0ZXN0Q29udGVudChJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcykgewotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117MX0pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeU1vZGVsTGVuZ3RoKCk7Ci0JfQotCi0JLyoqCi0JICogQ2hlY2sgc2ltcGxlIGNvbnRlbnQgc2Nhbm5pbmcKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Q29udGVudEpTUCgpIHsKLQotCQl0ZXN0Q29udGVudChzZXRVcEpTUCgiaGVsbG8gd29ybGQiKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENvbnRlbnRYTUwoKSB7Ci0KLQkJdGVzdENvbnRlbnQoc2V0VXBYTUwoImhlbGxvIHdvcmxkIikpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0RGlyZWN0aXZlSW5UYWdCb2R5KCkgewotCQlTdHJpbmcgdGV4dCA9ICI8Qk9EWSA8JUAgaW5jbHVkZSBmaWxlPVwiY29tbW9uRXZlbnRIYW5kbGVycy5qc3BmXCIgJT4gZGlyPVwibHRyXCI+ICI7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IGRvY3VtZW50UmVnaW9uTGlzdCA9IHNldFVwSlNQKHRleHQpOwotCQl2ZXJpZnlMZW5ndGhzKDAsIGRvY3VtZW50UmVnaW9uTGlzdCwgdGV4dCk7Ci0KLQkJY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhkb2N1bWVudFJlZ2lvbkxpc3QuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSk7Ci0JCUlUZXh0UmVnaW9uQ29sbGVjdGlvbiBjb2xsID0gKElUZXh0UmVnaW9uQ29sbGVjdGlvbikgZG9jdW1lbnRSZWdpb25MaXN0Lml0ZW0oMCkuZ2V0UmVnaW9ucygpLmdldCgyKTsKLQkJY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhjb2xsLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9ESVJFQ1RJVkVfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5XSElURV9TUEFDRSwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0RJUkVDVElWRV9OQU1FLCBET01SZWdpb25Db250ZXh0LldISVRFX1NQQUNFLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfRVFVQUxTLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01SZWdpb25Db250ZXh0LldISVRFX1NQQUNFLCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfRElSRUNUSVZFX0NMT1NFfSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdERvbGxhcnNpZ25fTGVhZGluZygpIHsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCgiPGEgdHlwZT1cIiQgXCIvPiIpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117Nn0pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfRU1QVFlfVEFHX0NMT1NFfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlNb2RlbExlbmd0aCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3REb2xsYXJzaWduX1NpbmdsZSgpIHsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCgiPGEgdHlwZT1cIiRcIi8+Iik7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXs2fSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJYm9vbGVhbiB0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfRVFVQUxTLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01SZWdpb25Db250ZXh0LlhNTF9FTVBUWV9UQUdfQ0xPU0V9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeU1vZGVsTGVuZ3RoKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdERvbGxhcnNpZ25fU2luZ2xlV2l0aFNwYWNlcygpIHsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCgiPGEgdHlwZT1cIiAkIFwiLz4iKTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezZ9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9FUVVBTFMsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX0VNUFRZX1RBR19DTE9TRX0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TW9kZWxMZW5ndGgoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RUxpbkNvbnRlbnQoKSB7Ci0JCVN0cmluZyB0ZXh0ID0gIiR7b3V0LmZvb30iOwotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcyA9IHNldFVwSlNQKHRleHQpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117MX0pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCXNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnQoKChJVGV4dFJlZ2lvbkNvbnRhaW5lcikgbm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCkuZ2V0KDApKSwgMyk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJYm9vbGVhbiB0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcygoKElUZXh0UmVnaW9uQ29udGFpbmVyKSBub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKS5nZXQoMCkpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9FTF9PUEVOLCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfRUxfQ09OVEVOVCwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0VMX0NMT1NFfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlMZW5ndGhzKDAsIG5vZGVzLml0ZW0oMCksIHRleHQpOwotCX0KLQotCi0JcHVibGljIHZvaWQgdGVzdEVMdG9sZXJhbmNlX3RyYW5zcGFyZW5jeV9EcXVvdGUoKSB7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBKU1AoIjxhIHR5cGU9XCIke291dC5mb299XCIvPiIpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117Nn0pOwotCQlzaXplQ2hlY2sgJj0gY2hlY2tTaW1wbGVSZWdpb25Db3VudCgoKElUZXh0UmVnaW9uQ29udGFpbmVyKSBub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKS5nZXQoNCkpLCA1KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9FUVVBTFMsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX0VNUFRZX1RBR19DTE9TRX0pOwotCQl0eXBlQ2hlY2sgJj0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcygoKElUZXh0UmVnaW9uQ29udGFpbmVyKSBub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKS5nZXQoNCkpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTUpTUFJlZ2lvbkNvbnRleHRzLlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFX0RRVU9URSwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0VMX09QRU4sIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9FTF9DT05URU5ULCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfRUxfQ0xPU0UsIERPTUpTUFJlZ2lvbkNvbnRleHRzLlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFX0RRVU9URX0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TW9kZWxMZW5ndGgoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RUx0b2xlcmFuY2VfdHJhbnNwYXJlbmN5X0RxdW90ZVdpdGhTcGFjZXMoKSB7Ci0JCS8vIG5vdGU6IHdoaXRlc3BhY2Ugb24gZWl0aGVyIHNpZGUgcmV0dXJucyBhIFdISVRFX1NQQUNFIGNvbnRleHQKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCgiPGEgdHlwZT1cIl8ke291dC5mb299X1wiLz4iKTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezZ9KTsKLQkJc2l6ZUNoZWNrICY9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnQoKChJVGV4dFJlZ2lvbkNvbnRhaW5lcikgbm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCkuZ2V0KDQpKSwgNyk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJYm9vbGVhbiB0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfRVFVQUxTLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01SZWdpb25Db250ZXh0LlhNTF9FTVBUWV9UQUdfQ0xPU0V9KTsKLQkJdHlwZUNoZWNrICY9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMoKChJVGV4dFJlZ2lvbkNvbnRhaW5lcikgbm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCkuZ2V0KDQpKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01KU1BSZWdpb25Db250ZXh0cy5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRV9EUVVPVEUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUsIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9FTF9PUEVOLCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfRUxfQ09OVEVOVCwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0VMX0NMT1NFLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01KU1BSZWdpb25Db250ZXh0cy5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRV9EUVVPVEV9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeU1vZGVsTGVuZ3RoKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEVMdG9sZXJhbmNlX3RyYW5zcGFyZW5jeV9TcXVvdGUoKSB7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBKU1AoIjxhIHR5cGU9JyR7b3V0LmZvb30nLz4iKTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezZ9KTsKLQkJc2l6ZUNoZWNrICY9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnQoKChJVGV4dFJlZ2lvbkNvbnRhaW5lcikgbm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCkuZ2V0KDQpKSwgNSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJYm9vbGVhbiB0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfRVFVQUxTLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01SZWdpb25Db250ZXh0LlhNTF9FTVBUWV9UQUdfQ0xPU0V9KTsKLQkJdHlwZUNoZWNrICY9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMoKChJVGV4dFJlZ2lvbkNvbnRhaW5lcikgbm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCkuZ2V0KDQpKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01KU1BSZWdpb25Db250ZXh0cy5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRV9TUVVPVEUsIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9FTF9PUEVOLCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfRUxfQ09OVEVOVCwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0VMX0NMT1NFLCBET01KU1BSZWdpb25Db250ZXh0cy5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRV9TUVVPVEV9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeU1vZGVsTGVuZ3RoKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEVtYmVkZGVkSlNQRGVjbGFyYXRpb24oKSB7Ci0KLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCgiY29udGVudCA8Zm9vIGJhcj1cIjwlISBpbnQgZm9vOyAlPlwiIGJhej1cImlsXCI+Iik7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXsxLCA5fSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJYm9vbGVhbiB0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pICYmIGNoZWNrQ29tcGxleFJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfRVFVQUxTLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfRVFVQUxTLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0UsfSwgbmV3IFN0cmluZ1tdW117e0RPTUpTUFJlZ2lvbkNvbnRleHRzLlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFX0RRVU9URSwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0RFQ0xBUkFUSU9OX09QRU4sIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DT05URU5ULCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfQ0xPU0UsIERPTUpTUFJlZ2lvbkNvbnRleHRzLlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFX0RRVU9URSwgRE9NUmVnaW9uQ29udGV4dC5XSElURV9TUEFDRX19KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeU1vZGVsTGVuZ3RoKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEVtYmVkZGVkSlNQRGVjbGFyYXRpb25JbkNEQVRBKCkgewotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcyA9IHNldFVwSlNQKCI8IVtDREFUQVs8JSElPl1dPiIpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117M30pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tDb21wbGV4UmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DREFUQV9PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9DREFUQV9URVhULCBET01SZWdpb25Db250ZXh0LlhNTF9DREFUQV9DTE9TRSx9LCBuZXcgU3RyaW5nW11bXXt7RE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0RFQ0xBUkFUSU9OX09QRU4sIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DTE9TRX19KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeU1vZGVsTGVuZ3RoKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEVtYmVkZGVkSlNQRXhwcmVzc2lvbigpIHsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCgiY29udGVudCA8Zm9vIGJhcj1cIjwlPSBcIkhlbGxvLCBXb3JsZFwiJT5cIiBiYXo9XCJpbFwiPiIpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117MSwgOX0pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KSAmJiBjaGVja0NvbXBsZXhSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDEpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFLH0sIG5ldyBTdHJpbmdbXVtde3tET01KU1BSZWdpb25Db250ZXh0cy5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRV9EUVVPVEUsIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9FWFBSRVNTSU9OX09QRU4sIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DT05URU5ULCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfQ0xPU0UsIERPTUpTUFJlZ2lvbkNvbnRleHRzLlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFX0RRVU9URSwgRE9NUmVnaW9uQ29udGV4dC5XSElURV9TUEFDRX19KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeU1vZGVsTGVuZ3RoKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEVtYmVkZGVkSlNQRXhwcmVzc2lvbkluQ0RBVEEoKSB7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBKU1AoIjwhW0NEQVRBWzwlPSU+XV0+Iik7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXszfSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJYm9vbGVhbiB0eXBlQ2hlY2sgPSBjaGVja0NvbXBsZXhSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NEQVRBX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX0NEQVRBX1RFWFQsIERPTVJlZ2lvbkNvbnRleHQuWE1MX0NEQVRBX0NMT1NFLH0sIG5ldyBTdHJpbmdbXVtde3tET01KU1BSZWdpb25Db250ZXh0cy5KU1BfRVhQUkVTU0lPTl9PUEVOLCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfQ0xPU0V9fSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlNb2RlbExlbmd0aCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RFbWJlZGRlZEpTUFNjcmlwdGxldCgpIHsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCgiY29udGVudCA8Zm9vIGJhcj1cIjwlICAlPlwiIGJhej1cImlsXCI+Iik7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXsxLCA5fSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJYm9vbGVhbiB0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pICYmIGNoZWNrQ29tcGxleFJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfRVFVQUxTLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfRVFVQUxTLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0UsfSwgbmV3IFN0cmluZ1tdW117e0RPTUpTUFJlZ2lvbkNvbnRleHRzLlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFX0RRVU9URSwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX1NDUklQVExFVF9PUEVOLCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfQ09OVEVOVCwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0NMT1NFLCBET01KU1BSZWdpb25Db250ZXh0cy5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRV9EUVVPVEUsIERPTVJlZ2lvbkNvbnRleHQuV0hJVEVfU1BBQ0V9fSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlNb2RlbExlbmd0aCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RFbWJlZGRlZEpTUFNjcmlwdGxldEluQ0RBVEEoKSB7Ci0KLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCgiPCFbQ0RBVEFbPCUlPl1dPiIpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117M30pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tDb21wbGV4UmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DREFUQV9PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9DREFUQV9URVhULCBET01SZWdpb25Db250ZXh0LlhNTF9DREFUQV9DTE9TRSx9LCBuZXcgU3RyaW5nW11bXXt7RE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX1NDUklQVExFVF9PUEVOLCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfQ0xPU0V9fSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlNb2RlbExlbmd0aCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RFbWJlZGRlZFRhZ0luQXR0cigpIHsKLQotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcyA9IHNldFVwSlNQKCI8YSBocmVmPVwiPGpzcDpnZXRQcm9wZXJ0eS8+XCI+Iik7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXs2fSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJYm9vbGVhbiB0eXBlQ2hlY2sgPSBjaGVja0NvbXBsZXhSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSwgbmV3IFN0cmluZ1tdW117e0RPTUpTUFJlZ2lvbkNvbnRleHRzLlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFX0RRVU9URSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9FTVBUWV9UQUdfQ0xPU0UsIERPTUpTUFJlZ2lvbkNvbnRleHRzLlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFX0RRVU9URX19KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeU1vZGVsTGVuZ3RoKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEpTUF9ESFRNTGltcG9ydCgpIHsKLQkJU3RyaW5nIHRleHQgPSAiPGE+IDw/aW1wb3J0IHR5cGU9XCJmb29cIj4iOwotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcyA9IHNldFVwSlNQKHRleHQpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117MywgMSwgNn0pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDIpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1BJX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfRVFVQUxTLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01SZWdpb25Db250ZXh0LlhNTF9QSV9DTE9TRX0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TGVuZ3RocygwLCBub2RlcywgdGV4dCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEpTUF9QSSgpIHsKLQkJU3RyaW5nIHRleHQgPSAiYmVnaW4gPD9waHAgYXNkYTtsc2dqYWxnO2xhc2psYWpnbGFqc2xrYWpsZ2Fqc2xqZ2FsamdsYWo/PmVuZCI7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBKU1AodGV4dCk7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXsxLCA0LCAxfSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDEpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1BJX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9QSV9DT05URU5ULCBET01SZWdpb25Db250ZXh0LlhNTF9QSV9DTE9TRX0pICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgyKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlMZW5ndGhzKDAsIG5vZGVzLml0ZW0oMCksIHRleHQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RKU1BBbXBlcnNhbmRJblRhZ05hbWVJbkF0dFZhbHVlKCkgewotCQlTdHJpbmcgdGV4dCA9ICI8YSBocmVmPVwiPGEmYj5cIi8+IjsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCh0ZXh0KTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezcsIDF9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQgKHRhZykiLCBzaXplQ2hlY2spOwotCQlzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50KCgoSVRleHRSZWdpb25Db250YWluZXIpIG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLmdldCg0KSksIDQpOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCAoYnJva2VuIGVtYmVkZGVkIHRhZykiLCBzaXplQ2hlY2spOwotCi0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0V9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayAodGFnKSIsIHR5cGVDaGVjayk7Ci0JCXR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMoKChJVGV4dFJlZ2lvbkNvbnRhaW5lcikgbm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCkuZ2V0KDQpKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01KU1BSZWdpb25Db250ZXh0cy5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRV9EUVVPVEUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5VTkRFRklORUR9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayAoYnJva2VuIGVtYmVkZGVkIHRhZykiLCB0eXBlQ2hlY2spOwotCQl0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIChjb250ZW50KSIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeUxlbmd0aHMoMCwgbm9kZXMsIHRleHQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RKU1BDb21tZW50SW5YTUxDb21tZW50KCkgewotCQlTdHJpbmcgdGV4dCA9ICJzPCEtLVxuPCUtLWMtLSU+XG4tLT5cbjxodG1sPlxuPGJvZHk+PHNjcmlwdD4gPCUtLWMtLSU+IDwvc2NyaXB0PlxuIjsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCh0ZXh0KTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezEsIDUsIDEsIDMsIDEsIDMsIDMsIDMsIDMsIDF9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlpbnQgaXRlbSA9IDA7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKGl0ZW0rKykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pCi0JCQkJCSYmIGNoZWNrQ29tcGxleFJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oaXRlbSsrKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT01NRU5UX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTU1FTlRfVEVYVCwgRE9NUmVnaW9uQ29udGV4dC5YTUxfQ09NTUVOVF9URVhULCBET01SZWdpb25Db250ZXh0LlhNTF9DT01NRU5UX1RFWFQsCi0JCQkJCQkJCURPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTU1FTlRfQ0xPU0V9LCBuZXcgU3RyaW5nW11bXXt7RE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0NPTU1FTlRfT1BFTiwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0NPTU1FTlRfVEVYVCwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0NPTU1FTlRfQ0xPU0V9fSkKLQkJCQkJJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKGl0ZW0rKykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pCi0JCQkJCSYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbShpdGVtKyspLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSkKLQkJCQkJJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKGl0ZW0rKykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pCi0JCQkJCSYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbShpdGVtKyspLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSkKLQkJCQkJJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKGl0ZW0rKykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0V9KQotCQkJCQkmJiBjaGVja0NvbXBsZXhSZWdpb25UeXBlcyhub2Rlcy5pdGVtKGl0ZW0rKykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5CTE9DS19URVhULCBET01SZWdpb25Db250ZXh0LkJMT0NLX1RFWFQsIERPTVJlZ2lvbkNvbnRleHQuQkxPQ0tfVEVYVH0sIG5ldyBTdHJpbmdbXVtde3tET01KU1BSZWdpb25Db250ZXh0cy5KU1BfQ09NTUVOVF9PUEVOLAotCQkJCQkJCQlET01KU1BSZWdpb25Db250ZXh0cy5KU1BfQ09NTUVOVF9URVhULCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfQ09NTUVOVF9DTE9TRX19KQotCQkJCQkmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oaXRlbSsrKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9FTkRfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0V9KQotCQkJCQkmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oOSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TGVuZ3RocygwLCBub2Rlcy5pdGVtKDApLCB0ZXh0KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SlNQQ29tbWVudEF0U3RhcnRPZlhNTENvbW1lbnRBbmRCbG9ja1RhZygpIHsKLQkJU3RyaW5nIHRleHQgPSAiczwhLS08JS0tYy0tJT5cbi0tPlxuPGh0bWw+XG48Ym9keT48c2NyaXB0PjwlLS1jLS0lPiA8L3NjcmlwdD5cbiI7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBKU1AodGV4dCk7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXsxLCA0LCAxLCAzLCAxLCAzLCAzLCAyLCAzLCAxfSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJaW50IGl0ZW0gPSAwOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbShpdGVtKyspLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KTsKLQkJdHlwZUNoZWNrID0gdHlwZUNoZWNrICYmIGNoZWNrQ29tcGxleFJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oaXRlbSsrKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT01NRU5UX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTU1FTlRfVEVYVCwgRE9NUmVnaW9uQ29udGV4dC5YTUxfQ09NTUVOVF9URVhULCBET01SZWdpb25Db250ZXh0LlhNTF9DT01NRU5UX0NMT1NFfSwgbmV3IFN0cmluZ1tdW117e0RPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DT01NRU5UX09QRU4sIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DT01NRU5UX1RFWFQsIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DT01NRU5UX0NMT1NFfX0pOwotCQl0eXBlQ2hlY2sgPSB0eXBlQ2hlY2sgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKGl0ZW0rKykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pOwotCQl0eXBlQ2hlY2sgPSB0eXBlQ2hlY2sgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKGl0ZW0rKykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0V9KTsKLQkJdHlwZUNoZWNrID0gdHlwZUNoZWNrICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbShpdGVtKyspLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KTsKLQkJdHlwZUNoZWNrID0gdHlwZUNoZWNrICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbShpdGVtKyspLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSk7Ci0JCXR5cGVDaGVjayA9IHR5cGVDaGVjayAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oaXRlbSsrKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19DTE9TRX0pOwotCQl0eXBlQ2hlY2sgPSB0eXBlQ2hlY2sgJiYgY2hlY2tDb21wbGV4UmVnaW9uVHlwZXMobm9kZXMuaXRlbShpdGVtKyspLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuQkxPQ0tfVEVYVCwgRE9NUmVnaW9uQ29udGV4dC5CTE9DS19URVhUfSwgbmV3IFN0cmluZ1tdW117e0RPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DT01NRU5UX09QRU4sIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DT01NRU5UX1RFWFQsIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DT01NRU5UX0NMT1NFfX0pOwotCQl0eXBlQ2hlY2sgPSB0eXBlQ2hlY2sgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKGl0ZW0rKykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfRU5EX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSk7Ci0JCXR5cGVDaGVjayA9IHR5cGVDaGVjayAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oaXRlbSsrKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlMZW5ndGhzKDAsIG5vZGVzLml0ZW0oMCksIHRleHQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RKU1BDb21tZW50aW5YTUxUYWcoKSB7Ci0JCVN0cmluZyB0ZXh0ID0gInM8YSA8JS0tYy0tJT4gYj1jLz5cbiI7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBKU1AodGV4dCk7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXsxLCA3LCAxfSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJaW50IGl0ZW0gPSAwOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbShpdGVtKyspLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KTsKLQkJdHlwZUNoZWNrID0gdHlwZUNoZWNrICYmIGNoZWNrQ29tcGxleFJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oaXRlbSsrKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DT01NRU5UX1RFWFQsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9FUVVBTFMsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX0VNUFRZX1RBR19DTE9TRX0sbmV3IFN0cmluZ1tdW117e0RPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DT01NRU5UX09QRU4sIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DT01NRU5UX1RFWFQsIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DT01NRU5UX0NMT1NFLCBET01SZWdpb25Db250ZXh0LldISVRFX1NQQUNFfX0pOwotCQl0eXBlQ2hlY2sgPSB0eXBlQ2hlY2sgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKGl0ZW0rKykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TGVuZ3RocygwLCBub2Rlcy5pdGVtKDApLCB0ZXh0KTsKLQl9Ci0KLQkvKioKLQkgKiBDaGVjayB0aGF0IGpzcDpkaXJlY3RpdmUuKGluY2x1ZGV8cGFnZXx0YWdsaWIpIGFyZSByZWNvZ25pemVkIGFuZAotCSAqIHRyZWF0ZWQgcHJvcGVybHkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0SlNQRGlyZWN0aXZlVGFncygpIHsKLQkJU3RyaW5nIHRleHQgPSAiYmVnaW4gPGpzcDpkaXJlY3RpdmUudGFnbGliPiA8anNwOmRpcmVjdGl2ZS5wYWdlIGE+IDxqc3A6ZGlyZWN0aXZlLmluY2x1ZGUgYT0+IDxqc3A6ZGlyZWN0aXZlLnBhZ2VzIGE9Yj4gZW5kIjsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCh0ZXh0KTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezEsIDMsIDEsIDQsIDEsIDUsIDEsIDYsIDF9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDEpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfRElSRUNUSVZFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19DTE9TRX0pICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgyKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDMpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfRElSRUNUSVZFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDQpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oNSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9ESVJFQ1RJVkVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSkKLQkJCQkJJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDYpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oNykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfRVFVQUxTLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0V9KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oOCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TGVuZ3RocygwLCBub2Rlcy5pdGVtKDApLCB0ZXh0KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SlNQRG9sbGFyc2lnbl9UcmFpbGluZygpIHsKLQkJU3RyaW5nIHRleHQgPSAiPGEgdHlwZT1cIiAkXCIvPiI7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBKU1AodGV4dCk7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXs2fSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJYm9vbGVhbiB0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfRVFVQUxTLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01SZWdpb25Db250ZXh0LlhNTF9FTVBUWV9UQUdfQ0xPU0V9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeUxlbmd0aHMoMCwgbm9kZXMuaXRlbSgwKSwgdGV4dCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEpTUERvbGxhcnNpZ25fVHJhaWxpbmdJbkNvbnRlbnQoKSB7Ci0JCVN0cmluZyB0ZXh0ID0gIm5ubiQ8YSB0eXBlPVwiICRcIi8+IjsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCh0ZXh0KTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezEsIDEsIDZ9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2sgKGNvbnRlbnQpIiwgdHlwZUNoZWNrKTsKLQkJdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDEpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayAoY29udGVudCkiLCB0eXBlQ2hlY2spOwotCQl0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMikuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfRVFVQUxTLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01SZWdpb25Db250ZXh0LlhNTF9FTVBUWV9UQUdfQ0xPU0V9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayAodGFnKSIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeUxlbmd0aHMoMCwgbm9kZXMuaXRlbSgwKSwgdGV4dCk7Ci0JfQotCi0JLyoqCi0JICogQ2hlY2sgSlNQIGNvZGUgc2VjdGlvbnMgYmV0d2VlbiBIVE1MIGNvbnRlbnQKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0SlNQRXhwcmVzc2lvbigpIHsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCgiYmVnaW4gPCU9IFwiSGVsbG8sV29ybGRcIiAlPiBlbmQiKTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezEsIDEsIDEsIDEsIDF9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDEpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9FWFBSRVNTSU9OX09QRU59KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMikuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0NPTlRFTlR9KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0NMT1NFfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDQpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeU1vZGVsTGVuZ3RoKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEpTUEdyZWF0ZXJUaGFuSW5BdHRWYWx1ZSgpIHsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCgiPGEgdHlwZT1cIj5uZXh0XCIvPiIpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117Nn0pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBpcyBub3Qgc29tcGxlIiwgIShub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKS5nZXQoNCkgaW5zdGFuY2VvZiBJVGV4dFJlZ2lvbkNvbnRhaW5lcikpOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9FUVVBTFMsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX0VNUFRZX1RBR19DTE9TRX0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TW9kZWxMZW5ndGgoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SlNQSW52YWxpZFRhZ05hbWVJbkF0dFZhbHVlKCkgewotCQlTdHJpbmcgdGV4dCA9ICJTPGEgdHlwZT1cImE8NFwiLz4iOwotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcyA9IHNldFVwSlNQKHRleHQpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117MSwgNn0pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KTsKLQotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCAodGFnKSIsIHNpemVDaGVjayk7Ci0JCXNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnQoKChJVGV4dFJlZ2lvbkNvbnRhaW5lcikgbm9kZXMuaXRlbSgxKS5nZXRSZWdpb25zKCkuZ2V0KDQpKSwgNSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50IChhdHQgdmFsdWUpIiwgc2l6ZUNoZWNrKTsKLQkJdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDEpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfRU1QVFlfVEFHX0NMT1NFfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2sgKHRhZykiLCB0eXBlQ2hlY2spOwotCQl0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKCgoSVRleHRSZWdpb25Db250YWluZXIpIG5vZGVzLml0ZW0oMSkuZ2V0UmVnaW9ucygpLmdldCg0KSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NSlNQUmVnaW9uQ29udGV4dHMuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUVfRFFVT1RFLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NSlNQUmVnaW9uQ29udGV4dHMuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUVfRFFVT1RFfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2sgKGF0dCB2YWx1ZSkiLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlMZW5ndGhzKDAsIG5vZGVzLml0ZW0oMCksIHRleHQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RKU1BMZXNzVGhhbkluQXR0VmFsdWUoKSB7Ci0JCS8vIGJhaWxzIG91dCBvZiB0aGUgYXR0cmlidXRlIHZhbHVlIHdpdGggYW4gVU5ERUZJTkVEIHJlZ2lvbiBmb3IgdGhlCi0JCS8vIGVuZCBxdW90ZQotCQlTdHJpbmcgdGV4dCA9ICI8YnV0dG9uIGxhYmVsPVwiPHByZXZpb3VzXCIvPiI7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBKU1AodGV4dCk7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXs2fSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudCgoKElUZXh0UmVnaW9uQ29udGFpbmVyKSBub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKS5nZXQoNCkpLCA0KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQgKGF0dCB2YWx1ZSkiLCBzaXplQ2hlY2spOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9FUVVBTFMsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX0VNUFRZX1RBR19DTE9TRX0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcygoKElUZXh0UmVnaW9uQ29udGFpbmVyKSBub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKS5nZXQoNCkpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTUpTUFJlZ2lvbkNvbnRleHRzLlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFX0RRVU9URSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlVOREVGSU5FRH0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIChhdHQgdmFsdWUpIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TGVuZ3RocygwLCBub2Rlcy5pdGVtKDApLCB0ZXh0KTsKLQl9Ci0KLQkvKioKLQkgKiBDaGVjayBKU1AgY29kZSBzZWN0aW9ucywgYXMgYSB0YWcsIHNjYW5uaW5nIGJldHdlZW4gSFRNTCBjb250ZW50Ci0JICovCi0JLy8gcHVibGljIHZvaWQgdGVzdEpTUFNjcmlwdGxldFRhZygpIHsKLQkvLyBJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcyA9IHNldFVwSlNQKCJiZWdpbiA8anNwOnNjcmlwdGxldD4KLQkvLyBpbnQgZm9vID0gYmFyOyAvLzxqc3A6U2NyaXB0bGV0Pi8vPC9qc3A6c2NyaXB0bGV0czwvanNwOnNjcmlwdGxldD4KLQkvLyBlbmQiKTsKLQkvLwkKLQkvLyBib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117MSwgMywgMSwKLQkvLyAzLAotCS8vIDF9KTsKLQkvLyBhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsCi0JLy8gc2l6ZUNoZWNrKTsKLQkvLwotCS8vIGJvb2xlYW4gdHlwZUNoZWNrID0KLQkvLyBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117Ci0JLy8gWE1MUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pCi0JLy8gJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDEpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tdewotCS8vIFhNTFJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLAotCS8vIFhNTFJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLAotCS8vIFhNTFJlZ2lvbkNvbnRleHQuWE1MX1RBR19DTE9TRX0pCi0JLy8gJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDIpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tdewotCS8vIFhNTEpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DT05URU5UfSkKLQkvLyAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117Ci0JLy8gWE1MUmVnaW9uQ29udGV4dC5YTUxfRU5EX1RBR19PUEVOLAotCS8vIFhNTFJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLAotCS8vIFhNTFJlZ2lvbkNvbnRleHQuWE1MX1RBR19DTE9TRX0pCi0JLy8gJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDQpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tdewotCS8vIFhNTEpTUFJlZ2lvbkNvbnRleHRzLlhNTF9DT05URU5UfSk7Ci0JLy8gYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JLy8JCQotCS8vIHZlcmlmeU1vZGVsTGVuZ3RoKCk7Ci0JLy8gfQotCS8qKgotCSAqIENoZWNrIEpTUCBjb2RlIHNlY3Rpb25zLCBhcyBhIHRhZywgc2Nhbm5pbmcgYmV0d2VlbiBIVE1MIGNvbnRlbnQKLQkgKi8KLQkvLyBwdWJsaWMgdm9pZCB0ZXN0SlNQVGV4dFRhZygpIHsKLQkvLyBJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcyA9IHNldFVwSlNQKCJiZWdpbiA8anNwOnRleHQ+IGludAotCS8vIGZvbwotCS8vID0gYmFyOyAvLzxqc3A6VEVYVD4vLzwvanNwOlRleHRzPC9qc3A6dGV4dD4gPGE+IDwvYT4gZW5kIik7Ci0JLy8JCi0JLy8gYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezEsIDMsIDEsCi0JLy8gMywKLQkvLyAxLCAzLCAxLCAzLCAxfSk7Ci0JLy8gYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLAotCS8vIHNpemVDaGVjayk7Ci0JLy8KLQkvLyBib29sZWFuIHR5cGVDaGVjayA9Ci0JLy8gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tdewotCS8vIFhNTEpTUFJlZ2lvbkNvbnRleHRzLlhNTF9DT05URU5UfSkKLQkvLyAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117Ci0JLy8gWE1MSlNQUmVnaW9uQ29udGV4dHMuWE1MX1RBR19PUEVOLAotCS8vIFhNTEpTUFJlZ2lvbkNvbnRleHRzLlhNTF9UQUdfTkFNRSwKLQkvLyBYTUxKU1BSZWdpb25Db250ZXh0cy5YTUxfVEFHX0NMT1NFfSkKLQkvLyAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMikuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117Ci0JLy8gWE1MSlNQUmVnaW9uQ29udGV4dHMuWE1MX0NEQVRBX1RFWFR9KQotCS8vICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgzKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXsKLQkvLyBYTUxKU1BSZWdpb25Db250ZXh0cy5YTUxfRU5EX1RBR19PUEVOLAotCS8vIFhNTEpTUFJlZ2lvbkNvbnRleHRzLlhNTF9UQUdfTkFNRSwKLQkvLyBYTUxKU1BSZWdpb25Db250ZXh0cy5YTUxfVEFHX0NMT1NFfSkKLQkvLyAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oNCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117Ci0JLy8gWE1MSlNQUmVnaW9uQ29udGV4dHMuWE1MX0NPTlRFTlR9KQotCS8vICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSg1KS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXsKLQkvLyBYTUxKU1BSZWdpb25Db250ZXh0cy5YTUxfVEFHX09QRU4sCi0JLy8gWE1MSlNQUmVnaW9uQ29udGV4dHMuWE1MX1RBR19OQU1FLAotCS8vIFhNTEpTUFJlZ2lvbkNvbnRleHRzLlhNTF9UQUdfQ0xPU0V9KQotCS8vICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSg2KS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXsKLQkvLyBYTUxKU1BSZWdpb25Db250ZXh0cy5YTUxfQ09OVEVOVH0pCi0JLy8gJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDcpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tdewotCS8vIFhNTEpTUFJlZ2lvbkNvbnRleHRzLlhNTF9FTkRfVEFHX09QRU4sCi0JLy8gWE1MSlNQUmVnaW9uQ29udGV4dHMuWE1MX1RBR19OQU1FLAotCS8vIFhNTEpTUFJlZ2lvbkNvbnRleHRzLlhNTF9UQUdfQ0xPU0V9KQotCS8vICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSg4KS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXsKLQkvLyBYTUxKU1BSZWdpb25Db250ZXh0cy5YTUxfQ09OVEVOVH0pOwotCS8vIGFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCS8vCQkKLQkvLyB2ZXJpZnlNb2RlbExlbmd0aCgpOwotCS8vIH0KLQkvKioKLQkgKiBDaGVjayB0aGF0IGpzcDpyb290IGlzIHJlY29nbml6ZWQgYW5kIHRyZWF0ZWQgcHJvcGVybHkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0SlNQUm9vdFRhZygpIHsKLQotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcyA9IHNldFVwSlNQKCJiZWdpbiA8anNwOnJvb3Q+IDxqc3A6cm9vdHMgYT4gPGpzcDpyb28gYT0+IDwvanNwOnJvb3QgYT1iPjxhPmVuZCIpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117MSwgMywgMSwgNCwgMSwgNSwgMSwgNiwgMywgMX0pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9ST09UX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0V9KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMikuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgzKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDQpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oNSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfRVFVQUxTLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0V9KQotCQkJCQkmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oNikuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSg3KS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9FTkRfVEFHX09QRU4sIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9ST09UX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfRVFVQUxTLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0V9KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oOCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0V9KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oOSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TW9kZWxMZW5ndGgoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SlNQVGFnSW5BdHRWYWx1ZSgpIHsKLQkJU3RyaW5nIHRleHQgPSAiPGEgdHlwZT1cIjxhLz5cIi8+IjsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCh0ZXh0KTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezZ9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50KCgoSVRleHRSZWdpb25Db250YWluZXIpIG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLmdldCg0KSksIDUpOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfRU1QVFlfVEFHX0NMT1NFfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2sgKHRhZykiLCB0eXBlQ2hlY2spOwotCQl0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKCgoSVRleHRSZWdpb25Db250YWluZXIpIG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLmdldCg0KSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NSlNQUmVnaW9uQ29udGV4dHMuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUVfRFFVT1RFLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX0VNUFRZX1RBR19DTE9TRSwgRE9NSlNQUmVnaW9uQ29udGV4dHMuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUVfRFFVT1RFfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2sgKGF0dCB2YWx1ZSkiLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlMZW5ndGhzKDAsIG5vZGVzLCB0ZXh0KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Tm90aGluZ2luQmxvY2tKU1A5KCkgewotCQlTdHJpbmcgdGV4dCA9ICI8c2NyaXB0PiI7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBKU1AodGV4dCk7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXszfSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJYm9vbGVhbiB0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0V9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeUxlbmd0aHMoMCwgbm9kZXMuaXRlbSgwKSwgdGV4dCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5vdGhpbmdpbkJsb2NrWE1MOSgpIHsKLQkJU3RyaW5nIHRleHQgPSAiPHNjcmlwdD4iOwotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcyA9IHNldFVwWE1MKHRleHQpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117M30pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlMZW5ndGhzKDAsIG5vZGVzLml0ZW0oMCksIHRleHQpOwotCX0KLQotCXByaXZhdGUgdm9pZCB0ZXN0U2ltcGxlVGFnKElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzKSB7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXsxLCAxMCwgMX0pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9FUVVBTFMsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9FUVVBTFMsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19DTE9TRX0pICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgyKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlNb2RlbExlbmd0aCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTaW1wbGVUYWdfSlNQKCkgewotCQl0ZXN0U2ltcGxlVGFnKHNldFVwSlNQKCIwIDx0YWduYW1lIGF0dHIxIGF0dHIyPXZhbHVlMiBhdHRyMz1cInZhbHVlM1wiPiAxIikpOwotCX0KLQotCS8qKgotCSAqIENoZWNrIHNpbXBsZSB0YWcgc2Nhbm5pbmcgYmV0d2VlbiBYTUwgY29udGVudAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RTaW1wbGVUYWdfWE1MKCkgewotCQl0ZXN0U2ltcGxlVGFnKHNldFVwWE1MKCIwIDx0YWduYW1lIGF0dHIxIGF0dHIyPXZhbHVlMiBhdHRyMz1cInZhbHVlM1wiPiAxIikpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RWQkxpbkNvbnRlbnQoKSB7Ci0JCVN0cmluZyB0ZXh0ID0gIiN7b3V0LmZvb30iOwotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcyA9IHNldFVwSlNQKHRleHQpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117MX0pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCXNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnQoKChJVGV4dFJlZ2lvbkNvbnRhaW5lcikgbm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCkuZ2V0KDApKSwgMyk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJYm9vbGVhbiB0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcygoKElUZXh0UmVnaW9uQ29udGFpbmVyKSBub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKS5nZXQoMCkpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9WQkxfT1BFTiwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX1ZCTF9DT05URU5ULCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfVkJMX0NMT1NFfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlMZW5ndGhzKDAsIG5vZGVzLml0ZW0oMCksIHRleHQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RWQkx0b2xlcmFuY2VfdHJhbnNwYXJlbmN5X0RxdW90ZSgpIHsKLQkJU3RyaW5nIHRleHQgPSAiPGEgdHlwZT1cIiN7b3V0LmZvb31cIi8+IjsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCh0ZXh0KTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezZ9KTsKLQkJc2l6ZUNoZWNrICY9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnQoKChJVGV4dFJlZ2lvbkNvbnRhaW5lcikgbm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCkuZ2V0KDQpKSwgNSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJYm9vbGVhbiB0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfRVFVQUxTLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01SZWdpb25Db250ZXh0LlhNTF9FTVBUWV9UQUdfQ0xPU0V9KTsKLQkJdHlwZUNoZWNrICY9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMoKChJVGV4dFJlZ2lvbkNvbnRhaW5lcikgbm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCkuZ2V0KDQpKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01KU1BSZWdpb25Db250ZXh0cy5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRV9EUVVPVEUsIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9WQkxfT1BFTiwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX1ZCTF9DT05URU5ULCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfVkJMX0NMT1NFLCBET01KU1BSZWdpb25Db250ZXh0cy5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRV9EUVVPVEV9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeUxlbmd0aHMoMCwgbm9kZXMuaXRlbSgwKSwgdGV4dCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFZCTHRvbGVyYW5jZV90cmFuc3BhcmVuY3lfRHF1b3RlV2l0aFNwYWNlcygpIHsKLQkJLy8gbm90ZTogd2hpdGVzcGFjZSBvbiBlaXRoZXIgc2lkZSByZXR1cm5zIGEgV0hJVEVfU1BBQ0UgY29udGV4dAotCQlTdHJpbmcgdGV4dCA9ICI8YSB0eXBlPVwiXyN7b3V0LmZvb31fXCIvPiI7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBKU1AodGV4dCk7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXs2fSk7Ci0JCXNpemVDaGVjayAmPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50KCgoSVRleHRSZWdpb25Db250YWluZXIpIG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLmdldCg0KSksIDcpOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfRU1QVFlfVEFHX0NMT1NFfSk7Ci0JCXR5cGVDaGVjayAmPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKCgoSVRleHRSZWdpb25Db250YWluZXIpIG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLmdldCg0KSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NSlNQUmVnaW9uQ29udGV4dHMuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUVfRFFVT1RFLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfVkJMX09QRU4sIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9WQkxfQ09OVEVOVCwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX1ZCTF9DTE9TRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NSlNQUmVnaW9uQ29udGV4dHMuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUVfRFFVT1RFfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlMZW5ndGhzKDAsIG5vZGVzLml0ZW0oMCksIHRleHQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RWQkx0b2xlcmFuY2VfdHJhbnNwYXJlbmN5X1NxdW90ZSgpIHsKLQkJU3RyaW5nIHRleHQgPSAiPGEgdHlwZT0nI3tvdXQuZm9vfScvPiI7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBKU1AodGV4dCk7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXs2fSk7Ci0JCXNpemVDaGVjayAmPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50KCgoSVRleHRSZWdpb25Db250YWluZXIpIG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLmdldCg0KSksIDUpOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfRU1QVFlfVEFHX0NMT1NFfSk7Ci0JCXR5cGVDaGVjayAmPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKCgoSVRleHRSZWdpb25Db250YWluZXIpIG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLmdldCg0KSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NSlNQUmVnaW9uQ29udGV4dHMuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUVfU1FVT1RFLCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfVkJMX09QRU4sIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9WQkxfQ09OVEVOVCwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX1ZCTF9DTE9TRSwgRE9NSlNQUmVnaW9uQ29udGV4dHMuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUVfU1FVT1RFfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlMZW5ndGhzKDAsIG5vZGVzLCB0ZXh0KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0WE1MX0RIVE1MaW1wb3J0KCkgewotCQlTdHJpbmcgdGV4dCA9ICI8YT4gPD9pbXBvcnQgdHlwZT1cImZvb1wiPiI7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBYTUwodGV4dCk7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXszLCAxLCA2fSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJYm9vbGVhbiB0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0V9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgxKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMikuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfUElfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9FUVVBTFMsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1BJX0NMT1NFfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlMZW5ndGhzKDAsIG5vZGVzLCB0ZXh0KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0WE1MX1BJKCkgewotCQlTdHJpbmcgdGV4dCA9ICJiZWdpbiA8P3BocCBhc2RhO2xzZ2phbGc7bGFzamxhamdsYWpzbGthamxnYWpzbGpnYWxqZ2xhaj8+ZW5kIjsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcFhNTCh0ZXh0KTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezEsIDQsIDF9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCi0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfUElfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1BJX0NPTlRFTlQsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1BJX0NMT1NFfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDIpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeUxlbmd0aHMoMCwgbm9kZXMuaXRlbSgwKSwgdGV4dCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFhNTERvbGxhcnNpZ25fVHJhaWxpbmcoKSB7Ci0JCVN0cmluZyB0ZXh0ID0gIjxhIHR5cGU9XCIgJFwiLz4iOwotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcyA9IHNldFVwWE1MKHRleHQpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117Nn0pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfRU1QVFlfVEFHX0NMT1NFfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlMZW5ndGhzKDAsIG5vZGVzLml0ZW0oMCksIHRleHQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RVbmRlZmluZWRSZWdpb25Db250YWluZXIoKSB7Ci0JCS8vIHNlZSBSQVRMQyBSQVRMQzAwMjg0Nzc2Ci0JCVN0cmluZyB0ZXh0ID0gIjxvcHRpb24gPGVsbXM6aW5wdXRWYWx1ZSB2YWx1ZT1cIjwlPXVvbXZveC51b21JRCU+XCIvPjwlPXVvbXZveC51b21JRC5lcXVhbHModW9tSUQpID8gXCIgc2VsZWN0ZWRcIiA6IFwiXCIlPj4iOwotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcyA9IHNldFVwSlNQKHRleHQpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117NX0pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBvdmVyYWxsIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJLy8gY2hlY2tDb21wbGV4UmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldwotCQkvLyBTdHJpbmdbXXtYTUxSZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwKLQkJLy8gWE1MUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsCi0JCS8vIFhNTFJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwKLQkJLy8gWE1MUmVnaW9uQ29udGV4dC5VTkRFRklORUQsIFhNTFJlZ2lvbkNvbnRleHQuWE1MX1RBR19DTE9TRX0sIG5ldwotCQkvLyBTdHJpbmdbXVtdIHt7fX0pOwotCQl2ZXJpZnlFbWJlZGRlZENvbnRhaW5lclBhcmVudGFnZShub2Rlcyk7Ci0JCXZlcmlmeUxlbmd0aHMoMCwgbm9kZXMuaXRlbSgwKSwgdGV4dCk7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIG5vZGVzCi0JICovCi0JcHJpdmF0ZSB2b2lkIHZlcmlmeUVtYmVkZGVkQ29udGFpbmVyUGFyZW50YWdlKElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzKSB7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgbm9kZXMuZ2V0TGVuZ3RoKCk7IGkrKykgewotCQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiByID0gbm9kZXMuaXRlbShpKTsKLQkJCUlUZXh0UmVnaW9uTGlzdCBsaXN0ID0gci5nZXRSZWdpb25zKCk7Ci0JCQlmb3IgKGludCBqID0gMDsgaiA8IGxpc3Quc2l6ZSgpOyBqKyspIHsKLQkJCQlJVGV4dFJlZ2lvbiByZWdpb24gPSBsaXN0LmdldChqKTsKLQkJCQlpZiAocmVnaW9uIGluc3RhbmNlb2YgSVRleHRSZWdpb25Db250YWluZXIpIHsKLQkJCQkJYXNzZXJ0Tm90TnVsbCgicGFyZW50IGlzIG51bGwgZm9yICIgKyByZWdpb24sICgoSVRleHRSZWdpb25Db250YWluZXIpIHJlZ2lvbikuZ2V0UGFyZW50KCkpOwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQotCXByb3RlY3RlZCBib29sZWFuIHZlcmlmeU1vZGVsTGVuZ3RoKCkgewotCQlyZXR1cm4gY2hlY2tNb2RlbExlbmd0aChmTW9kZWwsIGlucHV0Lmxlbmd0aCgpKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL290aGVyL1NjYW5uaW5nVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvb3RoZXIvU2Nhbm5pbmdUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNzNkOTVmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvb3RoZXIvU2Nhbm5pbmdUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjg2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLm90aGVyOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nUmVhZGVyOwotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5wYXJzZXIuSlNQU291cmNlUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5kb2N1bWVudC5TdHJ1Y3R1cmVkRG9jdW1lbnRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5sdGsucGFyc2VyLkJsb2NrTWFya2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5sdGsucGFyc2VyLlJlZ2lvblBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVRleHRSZWdpb25Db250YWluZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVRleHRSZWdpb25MaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC50ZXh0LlN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkl0ZXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC51dGlsLkRlYnVnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS51dGlscy5TdHJpbmdVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucGFyc2VyLlhNTFNvdXJjZVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucmVnaW9ucy5ET01SZWdpb25Db250ZXh0OwotCi0vKioKLSAqIHRlc3QgY2xhc3MgZm9yIGJhc2ljIHBhcnNpbmcgYW5kIHNjYW5uaW5nCi0gKi8KLQotcHVibGljIGNsYXNzIFNjYW5uaW5nVGVzdHMgewotCXByaXZhdGUgc3RhdGljIElTdHJ1Y3R1cmVkRG9jdW1lbnQgdGV4dFN0b3JlID0gbnVsbDsKLQlwcml2YXRlIHN0YXRpYyBsb25nIHN0YXJ0VGltZSA9IDA7Ci0JcHJpdmF0ZSBzdGF0aWMgbG9uZyBzdG9wVGltZSA9IDA7Ci0KLQkvKioKLQkgKiBTY2FubmluZ1Rlc3RzIGNvbnN0cnVjdG9yIGNvbW1lbnQuCi0JICovCi0JcHVibGljIFNjYW5uaW5nVGVzdHMoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGNoZWNrTm9kZVNlYW1zKFN0cmluZyBmaWxlTmFtZSkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNIRUNLSU5HIE5PREUgQk9VTkRBUklFUyBBTkQgQ09OVEVOVFMgRk9SICIgKyBmaWxlTmFtZSk7Ci0JCUVudW1lcmF0aW9uIGUgPSBwYXJzZUZpbGUoZmlsZU5hbWUpLmVsZW1lbnRzKCk7Ci0JCWludCBsYXN0RW5kID0gMDsKLQkJd2hpbGUgKGUuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gciA9IChJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uKSBlLm5leHRFbGVtZW50KCk7Ci0JCQlpZiAoci5nZXRTdGFydE9mZnNldCgpICE9IGxhc3RFbmQpCi0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJFUlJPUjogZHJvcHBlZCBpbiAiICsgcik7Ci0JCQlpZiAoci5nZXROdW1iZXJPZlJlZ2lvbnMoKSA8IDEpCi0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJFUlJPUjogZW1wdHkgSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiAiICsgcik7Ci0JCQlsYXN0RW5kID0gci5nZXRFbmRPZmZzZXQoKTsKLQkJfQotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkRPTkUiKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgY2hlY2tQYXJzZShTdHJpbmcgZmlsZU5hbWUpIHsKLQkJY2hlY2tUb2tlblNlYW1zKGZpbGVOYW1lKTsKLQkJY2hlY2tOb2RlU2VhbXMoZmlsZU5hbWUpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBjaGVja1Rva2VuU2VhbXMoU3RyaW5nIGZpbGVOYW1lKSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiQ0hFQ0tJTkcgVE9LRU5JWkVSIFJFR0lPTiBCT1VOREFSSUVTIEZPUiAiICsgZmlsZU5hbWUpOwotCQlJdGVyYXRvciBlID0gdG9rZW5pemVGaWxlKGZpbGVOYW1lKS5pdGVyYXRvcigpOwotCQlpbnQgbGFzdEVuZCA9IDA7Ci0JCXdoaWxlIChlLmhhc05leHQoKSkgewotCQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiByID0gKElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24pIGUubmV4dCgpOwotCQkJaWYgKHIuZ2V0U3RhcnRPZmZzZXQoKSAhPSBsYXN0RW5kKQotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiRVJST1I6IGRyb3BwZWQgaW4gIiArIHIpOwotCQkJbGFzdEVuZCA9IHIuZ2V0RW5kT2Zmc2V0KCk7Ci0JCX0KLQkJU3lzdGVtLm91dC5wcmludGxuKCJET05FIik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBjaGFyW10gbG9hZENoYXJzKFN0cmluZyBmaWxlTmFtZSkgewotCQljaGFyW10gY2hhcnMgPSBudWxsOwotCQlpbnQgYyA9IDA7Ci0JCWludCBsZW5ndGggPSAwOwotCQlpbnQgY291bnQgPSAwOwotCQlGaWxlIGZpbGUgPSBudWxsOwotCQlGaWxlSW5wdXRTdHJlYW0gZmlzID0gbnVsbDsKLQkJdHJ5IHsKLQkJCWZpbGUgPSBuZXcgRmlsZShmaWxlTmFtZSk7Ci0JCQlsZW5ndGggPSAoaW50KSBmaWxlLmxlbmd0aCgpOwotCQkJY2hhcnMgPSBuZXcgY2hhcltsZW5ndGhdOwotCQkJZmlzID0gbmV3IEZpbGVJbnB1dFN0cmVhbShmaWxlKTsKLQkJCXdoaWxlICgoKGMgPSBmaXMucmVhZCgpKSA+PSAwKSAmJiAoY291bnQgPCBsZW5ndGgpKSB7Ci0JCQkJY2hhcnNbY291bnQrK10gPSAoY2hhcikgYzsKLQkJCX0KLQkJfQotCQljYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiRmlsZSBub3QgZm91bmQgOiBcIiIgKyBmaWxlTmFtZSArICJcIiIpOwotCQkJU3lzdGVtLmV4aXQoMSk7Ci0JCX0KLQkJY2F0Y2ggKEFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBlKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlVzYWdlIDogamF2YSBKU1BMZXhlcjMgPGlucHV0ZmlsZT4iKTsKLQkJCVN5c3RlbS5leGl0KDEpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkFuIEkvTyBlcnJvciBvY2N1cmVkIHdoaWxlIHNjYW5uaW5nIDoiKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihlKTsKLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJcmV0dXJuIGNoYXJzOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgUmVnaW9uUGFyc2VyIG5ld1BhcnNlcigpIHsKLQkJSlNQU291cmNlUGFyc2VyIHBhcnNlciA9IG5ldyBKU1BTb3VyY2VQYXJzZXIoKTsKLQkJcGFyc2VyLmFkZEJsb2NrTWFya2VyKG5ldyBCbG9ja01hcmtlcigiZm9vIiwgbnVsbCwgRE9NUmVnaW9uQ29udGV4dC5CTE9DS19URVhULCB0cnVlKSk7Ci0JCXBhcnNlci5hZGRCbG9ja01hcmtlcihuZXcgQmxvY2tNYXJrZXIoImdsb2JhbEZvbyIsIG51bGwsIERPTVJlZ2lvbkNvbnRleHQuQkxPQ0tfVEVYVCwgdHJ1ZSkpOwotCQkvLwkJcGFyc2VyLmFkZEJsb2NrTWFya2VyKG5ldyBCbG9ja01hcmtlcigianNwOmV4cHJlc3Npb24iLCBudWxsLCBYTUxKU1BSZWdpb25Db250ZXh0cy5KU1BfQ09OVEVOVCwgdHJ1ZSkpOwotCQkvLwkJcGFyc2VyLmFkZEJsb2NrTWFya2VyKG5ldyBCbG9ja01hcmtlcigianNwOnNjcmlwdGxldCIsIG51bGwsIFhNTEpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DT05URU5ULCB0cnVlKSk7Ci0JCS8vCQlwYXJzZXIuYWRkQmxvY2tNYXJrZXIobmV3IEJsb2NrTWFya2VyKCJqc3A6ZGVjbGFyYXRpb24iLCBudWxsLCBYTUxKU1BSZWdpb25Db250ZXh0cy5KU1BfQ09OVEVOVCwgdHJ1ZSkpOwotCQkvLwkJcGFyc2VyLmFkZEJsb2NrTWFya2VyKG5ldyBCbG9ja01hcmtlcigianNwOnRleHQiLCBudWxsLCBYTUxSZWdpb25Db250ZXh0LlhNTF9DREFUQV9URVhULCB0cnVlKSk7Ci0JCXJldHVybiBwYXJzZXI7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBSZWdpb25QYXJzZXIgbmV3WE1MUGFyc2VyKCkgewotCQlYTUxTb3VyY2VQYXJzZXIgcGFyc2VyID0gbmV3IFhNTFNvdXJjZVBhcnNlcigpOwotCQlwYXJzZXIuYWRkQmxvY2tNYXJrZXIobmV3IEJsb2NrTWFya2VyKCJTY3JpcHQiLCBET01SZWdpb25Db250ZXh0LkJMT0NLX1RFWFQsIGZhbHNlKSk7Ci0JCXBhcnNlci5hZGRCbG9ja01hcmtlcihuZXcgQmxvY2tNYXJrZXIoInN0eWxFIiwgRE9NUmVnaW9uQ29udGV4dC5CTE9DS19URVhULCBmYWxzZSkpOwotCQlyZXR1cm4gcGFyc2VyOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgVmVjdG9yIHBhcnNlKFN0cmluZyBzdHJpbmdkYXRhKSB7Ci0JCXJldHVybiBwYXJzZShzdHJpbmdkYXRhLCBmYWxzZSk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBWZWN0b3IgcGFyc2UoU3RyaW5nIHN0cmluZ2RhdGEsIGJvb2xlYW4gdXNlWE1MKSB7Ci0JCWlmIChEZWJ1Zy5wZXJmVGVzdCkgewotCQkJc3RhcnRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCX0KLQkJUmVnaW9uUGFyc2VyIHBhcnNlciA9IG51bGw7Ci0JCWlmICh1c2VYTUwpCi0JCQlwYXJzZXIgPSBuZXdYTUxQYXJzZXIoKTsKLQkJZWxzZQotCQkJcGFyc2VyID0gbmV3UGFyc2VyKCk7Ci0JCWlmIChEZWJ1Zy5wZXJmVGVzdCkgewotCQkJc3RvcFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiU2Nhbm5pbmdUZXN0cyBzcGVudCAiICsgKHN0b3BUaW1lIC0gc3RhcnRUaW1lKSArICIgKG1zZWNzKSBjcmVhdGluZyBhICIgKyBwYXJzZXIuZ2V0Q2xhc3MoKS5nZXROYW1lKCkpOwotCQl9Ci0JCS8vIENhdXRpb246IGNhc3QKLQkJcGFyc2VyLnJlc2V0KG5ldyBTdHJpbmdSZWFkZXIoc3RyaW5nZGF0YSkpOwotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFOb2RlID0gc2V0Tm9kZURvY3VtZW50KHBhcnNlci5nZXREb2N1bWVudFJlZ2lvbnMoKSk7Ci0JCWlmIChEZWJ1Zy5wZXJmVGVzdCkgewotCQkJc3RhcnRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCX0KLQkJdGV4dFN0b3JlID0gU3RydWN0dXJlZERvY3VtZW50RmFjdG9yeS5nZXROZXdTdHJ1Y3R1cmVkRG9jdW1lbnRJbnN0YW5jZShwYXJzZXIpOwotCQl0ZXh0U3RvcmUuc2V0VGV4dChudWxsLCBzdHJpbmdkYXRhKTsKLQkJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uSXRlcmF0b3Iuc2V0UGFyZW50RG9jdW1lbnQoYU5vZGUsIHRleHRTdG9yZSk7Ci0JCVZlY3RvciB2ID0gbmV3IFZlY3RvcigpOwotCQl3aGlsZSAoYU5vZGUgIT0gbnVsbCkgewotCQkJdi5hZGRFbGVtZW50KGFOb2RlKTsKLQkJCWFOb2RlID0gYU5vZGUuZ2V0TmV4dCgpOwotCQl9Ci0JCWlmIChEZWJ1Zy5wZXJmVGVzdCkgewotCQkJc3RvcFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiU2Nhbm5pbmdUZXN0cyBzcGVudCAiICsgKHN0b3BUaW1lIC0gc3RhcnRUaW1lKSArICIgKG1zZWNzKSBzZXR0aW5nIHRleHQgYW5kIHN0b3Jpbmcgbm9kZXMiKTsKLQkJfQotCQlyZXR1cm4gdjsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFZlY3RvciBwYXJzZUZpbGUoU3RyaW5nIGZpbGVOYW1lKSB7Ci0JCWlmIChEZWJ1Zy5wZXJmVGVzdCkgewotCQkJc3RhcnRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCX0KLQkJaWYgKERlYnVnLnBlcmZUZXN0KSB7Ci0JCQlzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJfQotCQljaGFyW10gaW5wdXQgPSBsb2FkQ2hhcnMoZmlsZU5hbWUpOwotCQlpZiAoRGVidWcucGVyZlRlc3QpIHsKLQkJCXN0b3BUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlNjYW5uaW5nVGVzdHMgc3BlbnQgIiArIChzdG9wVGltZSAtIHN0YXJ0VGltZSkgKyAiIChtc2VjcykgbG9hZGluZyAiICsgZmlsZU5hbWUpOwotCQl9Ci0JCXJldHVybiBwYXJzZShuZXcgU3RyaW5nKGlucHV0KSk7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBzZXROb2RlRG9jdW1lbnQoSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBzdGFydE5vZGUpIHsKLQkJLy8gQ2F1dGlvbjogY2FzdAotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFOb2RlID0gc3RhcnROb2RlOwotCQl3aGlsZSAoYU5vZGUgIT0gbnVsbCkgewotCQkJYU5vZGUuc2V0UGFyZW50RG9jdW1lbnQodGV4dFN0b3JlKTsKLQkJCWFOb2RlID0gYU5vZGUuZ2V0TmV4dCgpOwotCQl9Ci0JCXJldHVybiBzdGFydE5vZGU7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBMaXN0IHRva2VuaXplRmlsZShTdHJpbmcgZmlsZU5hbWUpIHsKLQkJTGlzdCB2ID0gbnVsbDsKLQkJU3RyaW5nQnVmZmVyIGJ1ZmYgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCXRyeSB7Ci0JCQkvL2NoYXJbXSBpbnB1dCA9IGxvYWRDaGFycyhmaWxlTmFtZSk7Ci0JCQlSZWFkZXIgaW5wdXQgPSBuZXcgRmlsZVJlYWRlcihmaWxlTmFtZSk7Ci0JCQlSZWdpb25QYXJzZXIgcGFyc2VyID0gbmV3UGFyc2VyKCk7Ci0JCQkvLyBwYXJzZXIgbXVzdCBiZSBnaXZlbiBpbnB1dCwgYmVmb3JlIHRva2VuaXplciBpcyB2YWxpZAotCQkJcGFyc2VyLnJlc2V0KGlucHV0KTsKLQkJCWludCBjID0gMDsKLQkJCXBhcnNlci5nZXREb2N1bWVudFJlZ2lvbnMoKTsKLQkJCXYgPSBwYXJzZXIuZ2V0UmVnaW9ucygpOwotCQkJaW5wdXQucmVzZXQoKTsKLQkJCXdoaWxlICgoYyA9IGlucHV0LnJlYWQoKSkgPj0gMCkgewotCQkJCWJ1ZmYuYXBwZW5kKChjaGFyKSBjKTsKLQkJCX0KLQkJCXRleHRTdG9yZSA9IFN0cnVjdHVyZWREb2N1bWVudEZhY3RvcnkuZ2V0TmV3U3RydWN0dXJlZERvY3VtZW50SW5zdGFuY2UocGFyc2VyKTsKLQkJCXRleHRTdG9yZS5zZXRUZXh0KG51bGwsIGJ1ZmYudG9TdHJpbmcoKSk7Ci0JCX0KLQkJY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkZpbGUgbm90IGZvdW5kIDogXCIiICsgZmlsZU5hbWUgKyAiXCIiKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQl9Ci0JCWNhdGNoIChBcnJheUluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gZSkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJVc2FnZSA6IGphdmEgSlNQTGV4ZXIzIDxpbnB1dGZpbGU+Iik7Ci0JCX0KLQkJcmV0dXJuIHY7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgdmlld2FibGVUb2tlbml6ZVdpdGhTZXBhcmF0b3IoU3RyaW5nIGRhdGEpIHsKLQkJU3RyaW5nQnVmZmVyIHMgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCXMuYXBwZW5kKCJcIiIpOwotCQlzLmFwcGVuZChkYXRhKTsKLQkJcy5hcHBlbmQoIlwiXG4iKTsKLQkJcy5hcHBlbmQodmlld2FibGVUb2tlbml6ZShkYXRhKSk7Ci0JCXMuYXBwZW5kKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7Ci0JCXJldHVybiBzLnRvU3RyaW5nKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgdmlld2FibGVUb2tlbml6ZShTdHJpbmcgc3RyaW5nZGF0YSkgewotCQlyZXR1cm4gdmlld2FibGVUb2tlbml6ZShzdHJpbmdkYXRhLCBmYWxzZSk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgdmlld2FibGVUb2tlbml6ZShTdHJpbmcgc3RyaW5nZGF0YSwgYm9vbGVhbiB1c2VYTUwpIHsKLQkJamF2YS51dGlsLkxpc3QgbCA9IHBhcnNlKHN0cmluZ2RhdGEsIHVzZVhNTCk7Ci0JCVN0cmluZyBzID0gIiI7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgbC5zaXplKCk7IGkrKykgewotCQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBub2RlID0gKElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24pIGwuZ2V0KGkpOwotCQkJdHJ5IHsKLQkJCQlzICs9IFN0cmluZ1V0aWxzLmVzY2FwZShub2RlLnRvU3RyaW5nKCkpICsgIlxuIjsKLQkJCX0KLQkJCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJCXMgKz0gIlsiICsgbm9kZS5nZXRTdGFydCgpICsgIiwgIiArIG5vZGUuZ2V0RW5kKCkgKyAiXSAoVU5QUklOVEFCTEUgIiArIGUgKyAiKSI7Ci0JCQl9Ci0JCQlJVGV4dFJlZ2lvbkxpc3QgbSA9IG5vZGUuZ2V0UmVnaW9ucygpOwotCQkJZm9yIChpbnQgaiA9IDA7IGogPCBtLnNpemUoKTsgaisrKQotCQkJCWlmIChtLmdldChqKSBpbnN0YW5jZW9mIElUZXh0UmVnaW9uQ29udGFpbmVyKSB7Ci0JCQkJCXMgPSBzICsgIlx0IiArIFN0cmluZ1V0aWxzLmVzY2FwZShtLmdldChqKS50b1N0cmluZygpKSArICJcbiI7Ci0JCQkJCUlUZXh0UmVnaW9uTGlzdCBuID0gKChJVGV4dFJlZ2lvbkNvbnRhaW5lcikgbS5nZXQoaikpLmdldFJlZ2lvbnMoKTsKLQkJCQkJZm9yIChpbnQgayA9IDA7IGsgPCBuLnNpemUoKTsgaysrKQotCQkJCQkJcyA9IHMgKyAiXHRcdCIgKyBTdHJpbmdVdGlscy5lc2NhcGUobi5nZXQoaykudG9TdHJpbmcoKSkgKyAiXG4iOwotCQkJCX0KLQkJCQllbHNlCi0JCQkJCXMgPSBzICsgIlx0IiArIFN0cmluZ1V0aWxzLmVzY2FwZShtLmdldChqKS50b1N0cmluZygpKSArICJcbiI7Ci0JCX0KLQkJcmV0dXJuIHM7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgdmlld2FibGVUb2tlbml6ZUZpbGUoU3RyaW5nIGZpbGVOYW1lKSB7Ci0JCWlmIChEZWJ1Zy5wZXJmVGVzdCkgewotCQkJc3RhcnRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCX0KLQkJaWYgKERlYnVnLnBlcmZUZXN0KSB7Ci0JCQlzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJfQotCQljaGFyW10gaW5wdXQgPSBsb2FkQ2hhcnMoZmlsZU5hbWUpOwotCQlpZiAoRGVidWcucGVyZlRlc3QpIHsKLQkJCXN0b3BUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlNjYW5uaW5nVGVzdHMgc3BlbnQgIiArIChzdG9wVGltZSAtIHN0YXJ0VGltZSkgKyAiIChtc2VjcykgbG9hZGluZyAiICsgZmlsZU5hbWUpOwotCQl9Ci0JCXJldHVybiB2aWV3YWJsZVRva2VuaXplKG5ldyBTdHJpbmcoaW5wdXQpKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL290aGVyL1N0cnVjdHVyZWREb2N1bWVudFRvRE9NVW5pdFRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL290aGVyL1N0cnVjdHVyZWREb2N1bWVudFRvRE9NVW5pdFRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2ZDU5Y2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9vdGhlci9TdHJ1Y3R1cmVkRG9jdW1lbnRUb0RPTVVuaXRUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzYwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLm90aGVyOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5Mb2dnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV2ZW50cy5JU3RydWN0dXJlZERvY3VtZW50TGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV2ZW50cy5OZXdEb2N1bWVudEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5ldmVudHMuTm9DaGFuZ2VFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLlJlZ2lvbkNoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLlJlZ2lvbnNSZXBsYWNlZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5ldmVudHMuU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwudXRpbC5EZWJ1ZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudXRpbHMuU3RyaW5nVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmRvY3VtZW50LkRPTU1vZGVsSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLXB1YmxpYyBjbGFzcyBTdHJ1Y3R1cmVkRG9jdW1lbnRUb0RPTVVuaXRUZXN0cyBpbXBsZW1lbnRzIElTdHJ1Y3R1cmVkRG9jdW1lbnRMaXN0ZW5lciB7Ci0JcHVibGljIFN0cnVjdHVyZWREb2N1bWVudFRvRE9NVW5pdFRlc3RzKCkgewotCQlzdXBlcigpOwotCX0KLQotCVN0cmluZyBnZXRUZXN0U3RyaW5nMSgpIHsKLQkJcmV0dXJuICI8YT5hPGIgLz5iPC9hPiI7IC8vIC0+IDxhPmFiPC9hPjsKLQl9Ci0KLQlTdHJpbmcgZ2V0VGVzdFN0cmluZzIoKSB7Ci0JCXJldHVybiAiPG1lbnU+XG48cm5hbWU+XG5MaWFtJ3MgQ2hvd2RlciBIb3VzZSBhbmQgR3JpbGxcbjwvcm5hbWU+XG48L21lbnU+IjsKLQl9Ci0KLQlTdHJpbmcgZ2V0VGVzdFN0cmluZzMoKSB7Ci0JCS8vIHJldHVybiAiIDw/eG1sIHZlcnNpb249XCIxLjBcIiA/PlxuCi0JCS8vIDx0ZXN0VG9wU2libGluZz48cD50ZXh0PC9wPjwvdGVzdFRvcFNpYmxpbmc+IjsKLQkJcmV0dXJuICI8dGVzdC8+XG5cbiA8aHRtbD5cbjwvaHRtbD4iOwotCX0KLQotCVN0cmluZyBnZXRUZXN0U3RyaW5nNCgpIHsKLQkJcmV0dXJuICI8P3htbCB2ZXJzaW9uPVwiMS4wXCIgPz4iOwotCX0KLQotCS8qKgotCSAqIAotCSAqIEBwYXJhbSBhcmdzCi0JICogICAgICAgICAgICBqYXZhLmxhbmcuU3RyaW5nW10KLQkgKi8KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0KLQkJdHJ5IHsKLQkJCVN0cnVjdHVyZWREb2N1bWVudFRvRE9NVW5pdFRlc3RzIGluc3RhbmNlID0gbmV3IFN0cnVjdHVyZWREb2N1bWVudFRvRE9NVW5pdFRlc3RzKCk7Ci0JCQlpbnN0YW5jZS50ZXN0Tm9kZURlbGV0aW9uNCgpOwotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gdCkgewotCQkJdC5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCX0KLQotCXZvaWQgbWFrZUNoYW5nZTEoSURPTU1vZGVsIHRyZWUpIHsKLQotCQkvLwkKLQkJLy8gcGljayBhIHBhcmVudCBhbmQgb25lcyBvZiBpdHMgY2hpbGRyZW4gdG8gZGVsZXRlCi0JCS8vIChub3RlOiB2YWxpZGl0eSBvZiB0aGlzIGNvZGUgaXMgaGlnaGx5IGRlcGVuZGVudCBvbiBpbnB1dCBzdHJpbmcpCi0JCW9yZy53M2MuZG9tLkRvY3VtZW50IGRvbSA9IHRyZWUuZ2V0RG9jdW1lbnQoKTsKLQkJTm9kZUxpc3Qgbm9kZXMgPSBkb20uZ2V0Q2hpbGROb2RlcygpOwotCQkvLwotCQkvKgotCQkgKiBmb3IgImZpcnN0IiB0ZXN0IGNhc2UgTm9kZSB0ZXN0UGFyZW50Tm9kZSA9IG5vZGVzLml0ZW0oMCk7IE5vZGUKLQkJICogdGVzdENoaWxkTm9kZSA9IHRlc3RQYXJlbnROb2RlLmdldEZpcnN0Q2hpbGQoKTsKLQkJICovCi0JCS8vIGZvciAic2Vjb25kIiB0ZXN0IGNhc2UKLQkJTm9kZSB0ZXN0UGFyZW50Tm9kZSA9IG5vZGVzLml0ZW0oMCk7Ci0JCU5vZGUgdGVzdENoaWxkTm9kZSA9IHRlc3RQYXJlbnROb2RlLmdldEZpcnN0Q2hpbGQoKTsKLQkJdGVzdENoaWxkTm9kZSA9IHRlc3RDaGlsZE5vZGUuZ2V0TmV4dFNpYmxpbmcoKTsKLQotCQl0ZXN0UGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0ZXN0Q2hpbGROb2RlKTsKLQotCX0KLQotCXZvaWQgbWFrZUNoYW5nZTIoSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQpIHsKLQotCQkvLyBkZWxldGUgdGhlIGFwb3N0cm9wZSBpbiB0ZXN0IHN0cmluZyAvLyA0LCA0PwotCQlzdHJ1Y3R1cmVkRG9jdW1lbnQucmVwbGFjZVRleHQodGhpcywgMTksIDEsIG51bGwpOwotCX0KLQotCXZvaWQgbWFrZUNoYW5nZTMoSURPTU1vZGVsIHRyZWUpIHsKLQotCQkvLwkKLQkJLy8gcGljayBhIHBhcmVudCBhbmQgb25lcyBvZiBpdHMgY2hpbGRyZW4gdG8gZGVsZXRlCi0JCS8vIChub3RlOiB2YWxpZGl0eSBvZiB0aGlzIGNvZGUgaXMgaGlnaGx5IGRlcGVuZGVudCBvbiBpbnB1dCBzdHJpbmcpCi0JCW9yZy53M2MuZG9tLkRvY3VtZW50IGRvbSA9IHRyZWUuZ2V0RG9jdW1lbnQoKTsKLQkJLy8gTm9kZUxpc3Qgbm9kZXMgPSBkb20uZ2V0Q2hpbGROb2RlcygpOwotCQkvLwotCQlOb2RlIHRlc3RDaGlsZE5vZGUgPSBkb20uZ2V0TGFzdENoaWxkKCk7Ci0KLQkJZG9tLnJlbW92ZUNoaWxkKHRlc3RDaGlsZE5vZGUpOwotCi0JfQotCi0JLyoqCi0JICogbmV3TW9kZWwgbWV0aG9kIGNvbW1lbnQuCi0JICovCi0JcHVibGljIHZvaWQgbmV3TW9kZWwoTmV3RG9jdW1lbnRFdmVudCBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIm5ld01vZGVsOiIpOwotCX0KLQotCS8qKgotCSAqIG5vQ2hhbmdlIG1ldGhvZCBjb21tZW50LgotCSAqLwotCXB1YmxpYyB2b2lkIG5vQ2hhbmdlKE5vQ2hhbmdlRXZlbnQgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpIHsKLQkJLy8gbG9nIGZvciBub3csIHVubGVzcyB3ZSBmaW5kIHJlYXNvbiBub3QgdG8KLQkJTG9nZ2VyLmxvZyhMb2dnZXIuSU5GTywgIlN0cnVjdHVyZWREb2N1bWVudFRvRE9NVW5pdFRlc3RzOjpub0NoYW5nZSBuZWVkcyB0byBiZSBpbXBsZW1lbnRlZCIpOwotCX0KLQotCS8qKgotCSAqIG5vZGVzUmVwbGFjZWQgbWV0aG9kIGNvbW1lbnQuCi0JICovCi0JcHVibGljIHZvaWQgbm9kZXNSZXBsYWNlZChTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIm5vZGVzUmVwbGFjZWQ6Iik7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiXHROZXdGbGF0Tm9kZXM6Iik7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IGZsYXROb2RlTGlzdCA9IHN0cnVjdHVyZWREb2N1bWVudEV2ZW50LmdldE5ld1N0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoKTsKLQkJaW50IGxlbiA9IGZsYXROb2RlTGlzdC5nZXRMZW5ndGgoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47IGkrKykgewotCQkJU3RyaW5nIG91dFN0cmluZyA9IGZsYXROb2RlTGlzdC5pdGVtKGkpLnRvU3RyaW5nKCk7Ci0JCQlvdXRTdHJpbmcgPSBTdHJpbmdVdGlscy5lc2NhcGUob3V0U3RyaW5nKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiXHRcdCIgKyBvdXRTdHJpbmcpOwotCQl9Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiXHRPbGRGbGF0Tm9kZXM6Iik7Ci0JCWZsYXROb2RlTGlzdCA9IHN0cnVjdHVyZWREb2N1bWVudEV2ZW50LmdldE9sZFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoKTsKLQkJbGVuID0gZmxhdE5vZGVMaXN0LmdldExlbmd0aCgpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0JCQlTdHJpbmcgb3V0U3RyaW5nID0gZmxhdE5vZGVMaXN0Lml0ZW0oaSkudG9TdHJpbmcoKTsKLQkJCW91dFN0cmluZyA9IFN0cmluZ1V0aWxzLmVzY2FwZShvdXRTdHJpbmcpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCJcdFx0IiArIG91dFN0cmluZyk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiByZWdpb25DaGFuZ2VkIG1ldGhvZCBjb21tZW50LgotCSAqLwotCXB1YmxpYyB2b2lkIHJlZ2lvbkNoYW5nZWQoUmVnaW9uQ2hhbmdlZEV2ZW50IHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigicmVnaW9uQ2hhbmdlZDoiKTsKLQl9Ci0KLQkvKioKLQkgKiByZWdpb25zUmVwbGFjZWQgbWV0aG9kIGNvbW1lbnQuCi0JICovCi0JcHVibGljIHZvaWQgcmVnaW9uc1JlcGxhY2VkKFJlZ2lvbnNSZXBsYWNlZEV2ZW50IHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigicmVnaW9uc1JlcGxhY2VkOiIpOwotCX0KLQotCS8qKgotCSAqIFVuaXQgdGVzdCAtLSB0ZXN0cyBiYXNpYyBwYXJzaW5nIHJlc3VsdHMgb2YgaW5zZXJ0aW5nIGEgdGVzdCBzdHJpbmcKLQkgKiBpbnRvIGFuIGluaXRpYWwgc3RyaW5nLgotCSAqLwotCXZvaWQgdGVzdE5vZGVEZWxldGlvbigpIHsKLQkJLy8gU3RyaW5nIGluaXRpYWxTdHJpbmcgPQotCQkvLyAiPHBhcj48eD5cbnRleHR4XG48L3g+XG48eT5cbnRleHR5XG48L3k+PC9wYXI+IjsKLQkJLy8gU3RyaW5nIGluaXRpYWxTdHJpbmcgPSAiPHBhcj48eD50ZXh0eDwveD48eT50ZXh0eTwveT48L3Bhcj4iOwotCQkvLyB0ZXN0IGNhc2VzIGZvciB0d28gdGV4dCBub2RlcyBsZWZ0IHRvZ2V0aGVyIChyZW1vdmUgPGIvPik6Ci0JCS8vIGZpcnN0IGNhc2Ugd29ya3MsIHNlY29uZCBkb2Vzbid0Ci0JCS8vIFN0cmluZyBpbml0aWFsU3RyaW5nID0gIjxhPmE8YiAvPjwvYT4iOyAvLyAtPiA8YT5hPC9hPgotCQkvLyBTdHJpbmcgaW5pdGlhbFN0cmluZyA9ICI8YT5hPGIgLz5iPC9hPiI7IC8vIC0+IDxhPmFiPC9hPgotCQkvLyBTdHJpbmcgaW5pdGlhbFN0cmluZyA9IGdldFRlc3RTdHJpbmcxKCk7Ci0JCVN0cmluZyBpbml0aWFsU3RyaW5nID0gZ2V0VGVzdFN0cmluZzIoKTsKLQotCQkvLyBwcmludCBvdXQgd2hhdCB3ZSBhbHdheXMgY2FuCi0JCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0iKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJUZXN0IE5vZGUgRGVsZXRpb24iKTsKLQkJU3RyaW5nIG91dFN0cmluZyA9IFN0cmluZ1V0aWxzLmVzY2FwZShpbml0aWFsU3RyaW5nKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJJbml0aWFsIFN0cmluZzogIiArIG91dFN0cmluZyk7Ci0JCS8vIGFsd2F5cyBzdGFydCB3aXRoIGZyZXNoIG1vZGVsCi0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZiA9IG51bGw7Ci0KLQkJSU1vZGVsTWFuYWdlciBtbSA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCXRyeSB7Ci0JCQlmID0gbW0uY3JlYXRlU3RydWN0dXJlZERvY3VtZW50Rm9yKCJkdW1teS54bWwiLCAoSW5wdXRTdHJlYW0pIG51bGwsIG51bGwpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBkbyBub3RoaW5nLCBzaW5jZSBkdW1teQotCQl9Ci0KLQotCQkvLwotCQkvLyB3ZSdsbCBsaXN0ZW4gdG8gc3RydWN0dXJlZERvY3VtZW50IGV2ZW50cyB0byBwcmludCBvdXQgZGlhZ25vc3RpY3MKLQkJZi5hZGREb2N1bWVudENoYW5nZWRMaXN0ZW5lcih0aGlzKTsKLQkJLy8KLQotCQlJRE9NTW9kZWwgdHJlZSA9IG5ldyBET01Nb2RlbEltcGwoKTsKLQkJZi5hZGREb2N1bWVudENoYW5naW5nTGlzdGVuZXIoKElTdHJ1Y3R1cmVkRG9jdW1lbnRMaXN0ZW5lcikgdHJlZSk7Ci0KLQkJLy8gc2V0IHRleHQgdG8gc3RydWN0dXJlZERvY3VtZW50ICh3aGljaCB1cGRhdGVzIHRyZWUpCi0JCWYuc2V0VGV4dChudWxsLCBpbml0aWFsU3RyaW5nKTsKLQotCQkvLyBkdW1wIGluaXRpYWwgc3RydWN0dXJlZERvY3VtZW50Ci0JCURlYnVnLmR1bXAoZik7Ci0JCS8vIGR1bXAgaW5pdGlhbCBkb20KLQkJRGVidWdEb2N1bWVudC5kdW1wKHRyZWUuZ2V0RG9jdW1lbnQoKSk7Ci0JCS8vCi0JCS8vCi0JCS8vIG1ha2VDaGFuZ2UxKHRyZWUpOwotCQltYWtlQ2hhbmdlMihmKTsKLQotCQkvLyBkaXNwbGF5IHJlc3VsdGluZyB0ZXh0Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigicmVzdWx0U3RyaW5nIChmcm9tIHN0cnVjdHVyZWREb2N1bWVudCk6ICIpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oU3RyaW5nVXRpbHMuZXNjYXBlKGYuZ2V0VGV4dCgpKSk7Ci0JCS8vCi0JCS8vCi0JCS8vIGR1bXAgcG9zdCBjaGFuZ2Ugc3RydWN0dXJlZERvY3VtZW50Ci0JCURlYnVnLmR1bXAoZik7Ci0JCS8vIGR1bXAgcG9zdCBjaGFuZ2UgRE9NCi0JCURlYnVnRG9jdW1lbnQuZHVtcCh0cmVlLmdldERvY3VtZW50KCkpOwotCi0JCS8vCi0KLQl9Ci0KLQkvKioKLQkgKiBVbml0IHRlc3QgLS0gdGVzdHMgYmFzaWMgcGFyc2luZyByZXN1bHRzIG9mIGluc2VydGluZyBhIHRlc3Qgc3RyaW5nCi0JICogaW50byBhbiBpbml0aWFsIHN0cmluZy4KLQkgKi8KLQl2b2lkIHRlc3ROb2RlRGVsZXRpb24zKCkgewotCQlTdHJpbmcgaW5pdGlhbFN0cmluZyA9IGdldFRlc3RTdHJpbmczKCk7Ci0KLQkJLy8gcHJpbnQgb3V0IHdoYXQgd2UgYWx3YXlzIGNhbgotCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tIik7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiVGVzdCBOb2RlIERlbGV0aW9uIik7Ci0JCVN0cmluZyBvdXRTdHJpbmcgPSBTdHJpbmdVdGlscy5lc2NhcGUoaW5pdGlhbFN0cmluZyk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiSW5pdGlhbCBTdHJpbmc6ICIgKyBvdXRTdHJpbmcpOwotCQkvLyBhbHdheXMgc3RhcnQgd2l0aCBmcmVzaCBtb2RlbAotCQlJU3RydWN0dXJlZERvY3VtZW50IGYgPSBudWxsOwotCi0JCUlNb2RlbE1hbmFnZXIgbW0gPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQl0cnkgewotCQkJZiA9IG1tLmNyZWF0ZVN0cnVjdHVyZWREb2N1bWVudEZvcigiZHVtbXkueG1sIiwgKElucHV0U3RyZWFtKSBudWxsLCBudWxsKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJLy8gZG8gbm90aGluZywgc2luY2UgZHVtbXkKLQkJfQotCQkvLwotCQkvLyB3ZSdsbCBsaXN0ZW4gdG8gc3RydWN0dXJlZERvY3VtZW50IGV2ZW50cyB0byBwcmludCBvdXQgZGlhZ25vc3RpY3MKLQkJZi5hZGREb2N1bWVudENoYW5nZWRMaXN0ZW5lcih0aGlzKTsKLQkJLy8KLQotCQlJRE9NTW9kZWwgdHJlZSA9IG5ldyBET01Nb2RlbEltcGwoKTsKLQkJZi5hZGREb2N1bWVudENoYW5naW5nTGlzdGVuZXIoKElTdHJ1Y3R1cmVkRG9jdW1lbnRMaXN0ZW5lcikgdHJlZSk7Ci0KLQkJLy8gc2V0IHRleHQgdG8gc3RydWN0dXJlZERvY3VtZW50ICh3aGljaCB1cGRhdGVzIHRyZWUpCi0JCWYuc2V0VGV4dChudWxsLCBpbml0aWFsU3RyaW5nKTsKLQotCQkvLyBkdW1wIGluaXRpYWwgc3RydWN0dXJlZERvY3VtZW50Ci0JCURlYnVnLmR1bXAoZik7Ci0JCS8vIGR1bXAgaW5pdGlhbCBkb20KLQkJRGVidWdEb2N1bWVudC5kdW1wKHRyZWUuZ2V0RG9jdW1lbnQoKSk7Ci0JCS8vCi0JCS8vCi0JCS8vIG1ha2VDaGFuZ2UxKHRyZWUpOwotCQltYWtlQ2hhbmdlMyh0cmVlKTsKLQotCQkvLyBkaXNwbGF5IHJlc3VsdGluZyB0ZXh0Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigicmVzdWx0U3RyaW5nIChmcm9tIHN0cnVjdHVyZWREb2N1bWVudCk6ICIpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oU3RyaW5nVXRpbHMuZXNjYXBlKGYuZ2V0VGV4dCgpKSk7Ci0JCS8vCi0JCS8vCi0JCS8vIGR1bXAgcG9zdCBjaGFuZ2Ugc3RydWN0dXJlZERvY3VtZW50Ci0JCURlYnVnLmR1bXAoZik7Ci0JCS8vIGR1bXAgcG9zdCBjaGFuZ2UgRE9NCi0JCURlYnVnRG9jdW1lbnQuZHVtcCh0cmVlLmdldERvY3VtZW50KCkpOwotCi0JCS8vCi0KLQl9Ci0KLQkvKioKLQkgKiBVbml0IHRlc3QgLS0gdGVzdCBpbnNlcnQgZm9sbG93ZWQgYnkgZGVsZXRlIGF0IGJlZ2lubmluZyBvZiBzdHJpbmcuCi0JICovCi0Jdm9pZCB0ZXN0Tm9kZURlbGV0aW9uNCgpIHsKLQkJU3RyaW5nIGluaXRpYWxTdHJpbmcgPSBnZXRUZXN0U3RyaW5nNCgpOwotCi0JCS8vIHByaW50IG91dCB3aGF0IHdlIGFsd2F5cyBjYW4KLQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLSIpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3QgTm9kZSBJbnNlcnQgYW5kIERlbGV0ZSIpOwotCQlTdHJpbmcgb3V0U3RyaW5nID0gU3RyaW5nVXRpbHMuZXNjYXBlKGluaXRpYWxTdHJpbmcpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkluaXRpYWwgU3RyaW5nOiAiICsgb3V0U3RyaW5nKTsKLQkJLy8gYWx3YXlzIHN0YXJ0IHdpdGggZnJlc2ggbW9kZWwKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBmID0gbnVsbDsKLQotCQlJTW9kZWxNYW5hZ2VyIG1tID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJdHJ5IHsKLQkJCWYgPSBtbS5jcmVhdGVTdHJ1Y3R1cmVkRG9jdW1lbnRGb3IoImR1bW15LnhtbCIsIChJbnB1dFN0cmVhbSkgbnVsbCwgbnVsbCk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCS8vIGRvIG5vdGhpbmcsIHNpbmNlIGR1bW15Ci0JCX0KLQkJLy8KLQkJLy8gd2UnbGwgbGlzdGVuIHRvIHN0cnVjdHVyZWREb2N1bWVudCBldmVudHMgdG8gcHJpbnQgb3V0IGRpYWdub3N0aWNzCi0JCWYuYWRkRG9jdW1lbnRDaGFuZ2VkTGlzdGVuZXIodGhpcyk7Ci0JCS8vCi0KLQkJSURPTU1vZGVsIHRyZWUgPSBuZXcgRE9NTW9kZWxJbXBsKCk7Ci0JCWYuYWRkRG9jdW1lbnRDaGFuZ2luZ0xpc3RlbmVyKChJU3RydWN0dXJlZERvY3VtZW50TGlzdGVuZXIpIHRyZWUpOwotCi0JCS8vIHNldCB0ZXh0IHRvIHN0cnVjdHVyZWREb2N1bWVudCAod2hpY2ggdXBkYXRlcyB0cmVlKQotCQlmLnNldFRleHQobnVsbCwgaW5pdGlhbFN0cmluZyk7Ci0KLQkJLy8gZHVtcCBpbml0aWFsIHN0cnVjdHVyZWREb2N1bWVudAotCQlEZWJ1Zy5kdW1wKGYpOwotCQkvLyBkdW1wIGluaXRpYWwgZG9tCi0JCURlYnVnRG9jdW1lbnQuZHVtcCh0cmVlLmdldERvY3VtZW50KCkpOwotCQkvLwotCQkvLwotCQlmLnJlcGxhY2VUZXh0KG51bGwsIDAsIDAsICJhIik7Ci0KLQkJU3lzdGVtLm91dC5wcmludGxuKCIgPT09PSBSZXN1bHRzIGFmdGVyIGluc2VydCIpOwotCQkvLyBkaXNwbGF5IHJlc3VsdGluZyB0ZXh0Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigicmVzdWx0U3RyaW5nIChmcm9tIHN0cnVjdHVyZWREb2N1bWVudCk6ICIpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oU3RyaW5nVXRpbHMuZXNjYXBlKGYuZ2V0VGV4dCgpKSk7Ci0JCS8vCi0JCS8vCi0JCS8vIGR1bXAgcG9zdCBjaGFuZ2Ugc3RydWN0dXJlZERvY3VtZW50Ci0JCURlYnVnLmR1bXAoZik7Ci0JCS8vIGR1bXAgcG9zdCBjaGFuZ2UgRE9NCi0JCURlYnVnRG9jdW1lbnQuZHVtcCh0cmVlLmdldERvY3VtZW50KCkpOwotCi0JCS8vCi0KLQkJZi5yZXBsYWNlVGV4dChudWxsLCAwLCAxLCAiIik7Ci0KLQkJU3lzdGVtLm91dC5wcmludGxuKCIgPT09PSBSZXN1bHRzIGFmdGVyIGRlbGV0ZSIpOwotCQkvLyBkaXNwbGF5IHJlc3VsdGluZyB0ZXh0Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigicmVzdWx0U3RyaW5nIChmcm9tIHN0cnVjdHVyZWREb2N1bWVudCk6ICIpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oU3RyaW5nVXRpbHMuZXNjYXBlKGYuZ2V0VGV4dCgpKSk7Ci0JCS8vCi0JCS8vCi0JCS8vIGR1bXAgcG9zdCBjaGFuZ2Ugc3RydWN0dXJlZERvY3VtZW50Ci0JCURlYnVnLmR1bXAoZik7Ci0JCS8vIGR1bXAgcG9zdCBjaGFuZ2UgRE9NCi0JCURlYnVnRG9jdW1lbnQuZHVtcCh0cmVlLmdldERvY3VtZW50KCkpOwotCi0JCS8vCi0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL290aGVyL1N0eWxlZFRleHRDb250ZW50U3BlYy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9vdGhlci9TdHlsZWRUZXh0Q29udGVudFNwZWMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2FlZDIxNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL290aGVyL1N0eWxlZFRleHRDb250ZW50U3BlYy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTUxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLm90aGVyOwotCi0vKioKLSAqIFVzZSB0aGlzIHRlc3QgY2xhc3MgdG8gdmFsaWRhdGUgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIFN0eWxlZFRleHRDb250ZW50Ci0gKiBpbnRlcmZhY2UuIFRvIHBlcmZvcm0gdGhlIHZhbGlkYXRpb24sIGNvcHkgdGhpcyBjbGFzcyB0byB0aGUgcGFja2FnZSB3aGVyZQotICogeW91ciBTdHlsZWRUZXh0Q29udGVudCBpbXBsZW1lbnRhdGlvbiBsaXZlcy4gVGhlbiBzcGVjaWZ5IHRoZSBmdWxseQotICogcXVhbGlmaWVkIG5hbWUgb2YgeW91ciBTdHlsZWRUZXh0Q29udGVudCBjbGFzcyBhcyBhbiBhcmd1bWVudCB0byB0aGUgbWFpbgotICogbWV0aG9kIG9mIHRoaXMgY2xhc3MuCi0gKiAKLSAqIE5PVEU6IFRoaXMgdGVzdCBjbGFzcyBhc3N1bWVzIHRoYXQgeW91ciBTdHlsZWRUZXh0Q29udGVudCBpbXBsZW1lbnRhdGlvbgotICogaGFuZGxlcyB0aGUgZm9sbG93aW5nIGRlbGltaXRlcnM6Ci0gKiAgL3IgL24gL3IvbgotICogIAotICovCi0vLyBUaGlzIGNsYXNzIGNvbWVzIGNvdXJ0ZXN5IG9mIEx5bm5lIEt1ZXMuIE91ciBTdHlsZWRUZXh0Q29udGVudCBmYWlscyB0ZXN0Ci0vLyBjYXNlcyA2eCBvZgotLy8gIlNwZWNpYWwgY2FzZXMiIHNpbmNlIHdlIChub3IgSkZhY2UpIGhhbmRsZSBpbnNlcnRpb24gYmV0d2VlbiBDUiBhbmQgTEYuIEEKLS8vIG1pbm9yIG1vZGlmaWNhdGlvbgotLy8gd2FzIG5lZWRlZCB0byBnZXRDb250ZW50SW5zdGFuY2UgZm9yIG91dCB2ZXJzaW9uIG9mIFN0eWxlVGV4dENvbnRlbnQKLS8vIChTdHJ1Y3R1cmVkRG9jdW1lbnRUb1RleHRBZGFwdGVyKS4KLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5JbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5TdHlsZWRUZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uU3R5bGVkVGV4dENvbnRlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5UZXh0Q2hhbmdlTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5UZXh0Q2hhbmdlZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uVGV4dENoYW5naW5nRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5NZXNzYWdlQm94OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5TdHJ1Y3R1cmVkRG9jdW1lbnRUb1RleHRBZGFwdGVyOwotCi1wdWJsaWMgY2xhc3MgU3R5bGVkVGV4dENvbnRlbnRTcGVjIGltcGxlbWVudHMgVGV4dENoYW5nZUxpc3RlbmVyIHsKLQlzdGF0aWMgU3RyaW5nIGNvbnRlbnRDbGFzc05hbWU7Ci0Jc3RhdGljIGludCBmYWlsQ291bnQgPSAwOwotCXN0YXRpYyBpbnQgZXJyb3JDb3VudCA9IDA7Ci0JQ2xhc3MgY29udGVudENsYXNzID0gbnVsbDsKLQlTdHlsZWRUZXh0Q29udGVudCBjb250ZW50SW5zdGFuY2UgPSBudWxsOwotCWludCB2ZXJpZnkgPSAwOwotCU1ldGhvZCBjdXJyZW50TWV0aG9kID0gbnVsbDsKLQlib29sZWFuIGZhaWxlZCA9IGZhbHNlOwotCVN0eWxlZFRleHQgd2lkZ2V0ID0gbnVsbDsKLQlTaGVsbCBzaGVsbCA9IG51bGw7Ci0KLQlwdWJsaWMgU3R5bGVkVGV4dENvbnRlbnRTcGVjKCkgewotCX0KLQotCXB1YmxpYyB2b2lkIGFzc2VydFdpdGhNZXNzYWdlKFN0cmluZyBtZXNzYWdlLCBib29sZWFuIGNvbmRpdGlvbikgewotCQlTeXN0ZW0ub3V0LnByaW50KCJcdCIgKyBjdXJyZW50TWV0aG9kLmdldE5hbWUoKSArICIgIiArIG1lc3NhZ2UpOwotCQlpZiAoIWNvbmRpdGlvbikKLQkJCWZhaWwobWVzc2FnZSk7Ci0JCWVsc2UKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiIHBhc3NlZCIpOwotCX0KLQotCXB1YmxpYyB2b2lkIGZhaWwoU3RyaW5nIG1lc3NhZ2UpIHsKLQkJZmFpbGVkID0gdHJ1ZTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCIgRkFJTEVEIik7Ci0JCWZhaWxDb3VudCsrOwotCX0KLQotCXB1YmxpYyBTdHlsZWRUZXh0Q29udGVudCBnZXRDb250ZW50SW5zdGFuY2UoKSB7Ci0JCWNvbnRlbnRJbnN0YW5jZS5zZXRUZXh0KCIiKTsKLQkJd2lkZ2V0LnNldENvbnRlbnQoY29udGVudEluc3RhbmNlKTsKLQkJLy8gZHcuIEhhZCB0byBhZGQgZm9yIG91ciBzcGVjaWFsIHZlcnNpb24gb2YgU3R5bGVkVGV4dENvbnRlbnQKLQkJLy8gTmVlZHMgdG8gYmUgcmVtb3ZlZCBmb3IgdGVzdGluZyBqZmFjZSdzIERvY3VtZW50QWRhcHRlcgotCQkoKFN0cnVjdHVyZWREb2N1bWVudFRvVGV4dEFkYXB0ZXIpIGNvbnRlbnRJbnN0YW5jZSkuc2V0V2lkZ2V0KHdpZGdldCk7Ci0JCXJldHVybiBjb250ZW50SW5zdGFuY2U7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0VGVzdFRleHQoKSB7Ci0JCXJldHVybiAiVGhpcyBpcyB0aGUgZmlyc3QgbGluZS5cclxuIiArICJUaGlzIGlzIHRoZSBzZWNvbmQgbGluZS5cclxuIiArICJUaGlzIGlzIHRoZSB0aGlyZCBsaW5lLlxyXG4iICsgIlRoaXMgaXMgdGhlIGZvdXJ0aCBsaW5lLlxyXG4iICsgIlRoaXMgaXMgdGhlIGZpZnRoIGxpbmUuXHJcbiIgKyAiXHJcbiIgKyAiVGhpcyBpcyB0aGUgZmlyc3QgbGluZSBhZ2Fpbi5cclxuIiArICJUaGlzIGlzIHRoZSBzZWNvbmQgbGluZSBhZ2Fpbi5cclxuIiArICJUaGlzIGlzIHRoZSB0aGlyZCBsaW5lIGFnYWluLlxyXG4iICsgIlRoaXMgaXMgdGhlIGZvdXJ0aCBsaW5lIGFnYWluLlxyXG4iICsgIlRoaXMgaXMgdGhlIGZpZnRoIGxpbmUgYWdhaW4uXHJcbiIgKyAiXHJcbiIgKyAiVGhpcyBpcyB0aGUgZmlyc3QgbGluZSBvbmNlIGFnYWluLlxyXG4iICsgIlRoaXMgaXMgdGhlIHNlY29uZCBsaW5lIG9uY2UgYWdhaW4uXHJcbiIgKyAiVGhpcyBpcyB0aGUgdGhpcmQgbGluZSBvbmNlIGFnYWluLlxyXG4iICsgIlRoaXMgaXMgdGhlIGZvdXJ0aCBsaW5lIG9uY2UgYWdhaW4uXHJcbiIgKyAiVGhpcyBpcyB0aGUgZmlmdGggbGluZSBvbmNlIGFnYWluLiI7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCQlTdHlsZWRUZXh0Q29udGVudFNwZWMgc3BlYyA9IG5ldyBTdHlsZWRUZXh0Q29udGVudFNwZWMoKTsKLQkJaWYgKGFyZ3MubGVuZ3RoID4gMCkgewotCQkJY29udGVudENsYXNzTmFtZSA9IGFyZ3NbMF07Ci0JCQkvL1N0cmluZyBwYXRoID0gU3lzdGVtLmdldFByb3BlcnR5KCJqYXZhLmxpYnJhcnkucGF0aCIpOwotCQkJLy9TeXN0ZW0ub3V0LnByaW50bG4oIkphdmEgTGlicmFyeSBQYXRoOiAiICsgcGF0aCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlNZXNzYWdlQm94IGJveCA9IG5ldyBNZXNzYWdlQm94KGdldERpc3BsYXkoKS5nZXRBY3RpdmVTaGVsbCgpLCBTV1QuSUNPTl9FUlJPUik7Ci0JCQlib3guc2V0TWVzc2FnZSgiQ29udGVudCBjbGFzcyBtdXN0IGJlIHNwZWNpZmllZCBhcyBhbiBleGVjdXRpb24gYXJndW1lbnQuIik7IC8vJE5PTi1OTFMtMSQKLQkJCWJveC5vcGVuKCk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJc3BlYy5ydW4oKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbihmYWlsQ291bnQgKyAiIFRFU1QgRkFJTFVSRVMuIik7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbihlcnJvckNvdW50ICsgIiBVTkVYUEVDVEVEIEVSUk9SUy4iKTsKLQl9Ci0KLQlzdGF0aWMgcHJpdmF0ZSBEaXNwbGF5IGdldERpc3BsYXkoKSB7Ci0JCXJldHVybiBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldERpc3BsYXkoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCWlmIChjb250ZW50Q2xhc3NOYW1lLmVxdWFscygiIikpIHsKLQkJCU1lc3NhZ2VCb3ggYm94ID0gbmV3IE1lc3NhZ2VCb3goZ2V0RGlzcGxheSgpLmdldEFjdGl2ZVNoZWxsKCksIFNXVC5JQ09OX0VSUk9SKTsKLQkJCWJveC5zZXRNZXNzYWdlKCJDb250ZW50IGNsYXNzIG11c3QgYmUgc3BlY2lmaWVkIGFzIGFuIGV4ZWN1dGlvbiBhcmd1bWVudC4iKTsgLy8kTk9OLU5MUy0xJAotCQkJYm94Lm9wZW4oKTsKLQkJCXJldHVybjsKLQkJfQotCQlpZiAoY29udGVudENsYXNzID09IG51bGwpIHsKLQkJCXRyeSB7Ci0JCQkJY29udGVudENsYXNzID0gQ2xhc3MuZm9yTmFtZShjb250ZW50Q2xhc3NOYW1lKTsKLQkJCX0KLQkJCWNhdGNoIChDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGUpIHsKLQkJCQlNZXNzYWdlQm94IGJveCA9IG5ldyBNZXNzYWdlQm94KGdldERpc3BsYXkoKS5nZXRBY3RpdmVTaGVsbCgpLCBTV1QuSUNPTl9FUlJPUik7Ci0JCQkJYm94LnNldE1lc3NhZ2UoIkNvbnRlbnQgY2xhc3M6XG4iICsgY29udGVudENsYXNzTmFtZSArICJcbm5vdCBmb3VuZCIpOyAvLyROT04tTkxTLTEkCi0JCQkJYm94Lm9wZW4oKTsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0KLQkJdHJ5IHsKLQkJCWNvbnRlbnRJbnN0YW5jZSA9IChTdHlsZWRUZXh0Q29udGVudCkgY29udGVudENsYXNzLm5ld0luc3RhbmNlKCk7Ci0JCX0KLQkJY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZSkgewotCQkJTWVzc2FnZUJveCBib3ggPSBuZXcgTWVzc2FnZUJveChnZXREaXNwbGF5KCkuZ2V0QWN0aXZlU2hlbGwoKSwgU1dULklDT05fRVJST1IpOwotCQkJYm94LnNldE1lc3NhZ2UoIlVuYWJsZSB0byBhY2Nlc3MgY29udGVudCBjbGFzczpcbiIgKyBjb250ZW50Q2xhc3NOYW1lKTsgLy8kTk9OLU5MUy0xJAotCQkJYm94Lm9wZW4oKTsKLQkJCXJldHVybjsKLQkJfQotCQljYXRjaCAoSW5zdGFudGlhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQlNZXNzYWdlQm94IGJveCA9IG5ldyBNZXNzYWdlQm94KGdldERpc3BsYXkoKS5nZXRBY3RpdmVTaGVsbCgpLCBTV1QuSUNPTl9FUlJPUik7Ci0JCQlib3guc2V0TWVzc2FnZSgiVW5hYmxlIHRvIGluc3RhbnRpYXRlIGNvbnRlbnQgY2xhc3M6XG4iICsgY29udGVudENsYXNzTmFtZSk7IC8vJE5PTi1OTFMtMSQKLQkJCWJveC5vcGVuKCk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJQ2xhc3MgY2xheno7Ci0JCWNsYXp6ID0gdGhpcy5nZXRDbGFzcygpOwotCQlNZXRob2RbXSBtZXRob2RzID0gY2xhenouZ2V0RGVjbGFyZWRNZXRob2RzKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgbWV0aG9kcy5sZW5ndGg7IGkrKykgewotCQkJc2V0VXAoKTsKLQkJCWN1cnJlbnRNZXRob2QgPSBtZXRob2RzW2ldOwotCQkJZmFpbGVkID0gZmFsc2U7Ci0JCQl0cnkgewotCQkJCWlmIChjdXJyZW50TWV0aG9kLmdldE5hbWUoKS5zdGFydHNXaXRoKCJ0ZXN0XyIpKSB7Ci0JCQkJCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oY3VycmVudE1ldGhvZC5nZXROYW1lKCkgKyAiLi4uIik7Ci0JCQkJCWN1cnJlbnRNZXRob2QuaW52b2tlKHRoaXMsIG5ldyBPYmplY3RbMF0pOwotCQkJCQlpZiAoIWZhaWxlZCkgewotCQkJCQkJU3lzdGVtLm91dC5wcmludGxuKCJQQVNTRUQuIik7Ci0JCQkJCX0KLQkJCQkJZWxzZSB7Ci0JCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkZBSUxFRCIpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQkJY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gZXgpIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlx0IiArIGN1cnJlbnRNZXRob2QuZ2V0TmFtZSgpICsgIiBFUlJPUiA9PT4gIiArIGV4LmdldFRhcmdldEV4Y2VwdGlvbigpLnRvU3RyaW5nKCkpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiRkFJTEVEIik7Ci0JCQkJZXJyb3JDb3VudCsrOwotCQkJfQotCQkJY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiXHQiICsgY3VycmVudE1ldGhvZC5nZXROYW1lKCkgKyAiIEVSUk9SID09PiAiICsgZXgudG9TdHJpbmcoKSk7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJGQUlMRUQiKTsKLQkJCQllcnJvckNvdW50Kys7Ci0JCQl9Ci0JCQlpZiAodmVyaWZ5ICE9IDApIHsKLQkJCQl2ZXJpZnkgPSAwOwotCQkJCWNvbnRlbnRJbnN0YW5jZS5yZW1vdmVUZXh0Q2hhbmdlTGlzdGVuZXIodGhpcyk7Ci0JCQl9Ci0JCQl0ZWFyRG93bigpOwotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB7Ci0JCS8vIGNyZWF0ZSBzaGVsbAotCQlzaGVsbCA9IG5ldyBTaGVsbCgpOwotCQlHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0JCWxheW91dC5udW1Db2x1bW5zID0gMTsKLQkJc2hlbGwuc2V0U2l6ZSg1MDAsIDMwMCk7Ci0JCXNoZWxsLnNldExheW91dChsYXlvdXQpOwotCQkvLyBjcmVhdGUgd2lkZ2V0Ci0JCXdpZGdldCA9IG5ldyBTdHlsZWRUZXh0KHNoZWxsLCBTV1QuQk9SREVSIHwgU1dULk1VTFRJIHwgU1dULlZfU0NST0xMIHwgU1dULkhfU0NST0xMKTsKLQkJR3JpZERhdGEgc3BlYyA9IG5ldyBHcmlkRGF0YSgpOwotCQlzcGVjLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotCQlzcGVjLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOwotCQlzcGVjLnZlcnRpY2FsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLQkJc3BlYy5ncmFiRXhjZXNzVmVydGljYWxTcGFjZSA9IHRydWU7Ci0JCXdpZGdldC5zZXRMYXlvdXREYXRhKHNwZWMpOwotCQlzaGVsbC5vcGVuKCk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB7Ci0JCWlmIChzaGVsbCAhPSBudWxsICYmICFzaGVsbC5pc0Rpc3Bvc2VkKCkpCi0JCQlzaGVsbC5kaXNwb3NlKCk7Ci0JCXNoZWxsID0gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0X0RlbGV0ZSgpIHsKLQkJU3R5bGVkVGV4dENvbnRlbnQgY29udGVudCA9IGdldENvbnRlbnRJbnN0YW5jZSgpOwotCQlTdHJpbmcgbmV3VGV4dDsKLQkJY29udGVudC5zZXRUZXh0KCJUaGlzXG5pcyBhIHRlc3RcciIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoNiwgMiwgIiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWE6IiwgbmV3VGV4dC5lcXVhbHMoIlRoaXNcbmlhIHRlc3RcciIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxYjoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCJUaGlzIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjFjOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoImlhIHRlc3QiKSk7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiVGhpc1xuaXMgYSB0ZXN0XHIiKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDUsIDksICIiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjJhOiIsIG5ld1RleHQuZXF1YWxzKCJUaGlzXG5cciIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoyYjoiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDMpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjJjOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoIlRoaXMiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MmQ6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjJlOiIsIGNvbnRlbnQuZ2V0TGluZSgyKS5lcXVhbHMoIiIpKTsKLQkJY29udGVudC5zZXRUZXh0KCJUaGlzXG5pcyBhIHRlc3RcbmxpbmUgM1xubGluZSA0Iik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgyMSwgNywgIiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2E6IiwgbmV3VGV4dC5lcXVhbHMoIlRoaXNcbmlzIGEgdGVzdFxubGluZSAzIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjNiOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gMyk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2M6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiVGhpcyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozZDoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCJpcyBhIHRlc3QiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2U6IiwgY29udGVudC5nZXRMaW5lKDIpLmVxdWFscygibGluZSAzIikpOwotCQljb250ZW50LnNldFRleHQoIlRoaXNcbmlzIGEgdGVzdFxubGluZSAzXG5saW5lIDQiKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDAsIDUsICIiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRhOiIsIG5ld1RleHQuZXF1YWxzKCJpcyBhIHRlc3RcbmxpbmUgM1xubGluZSA0IikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRiOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gMyk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGM6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiaXMgYSB0ZXN0IikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRkOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoImxpbmUgMyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0ZToiLCBjb250ZW50LmdldExpbmUoMikuZXF1YWxzKCJsaW5lIDQiKSk7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgxNiwgNywgIiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGY6IiwgbmV3VGV4dC5lcXVhbHMoImlzIGEgdGVzdFxubGluZSAzIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRnOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoImlzIGEgdGVzdCIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0aDoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCJsaW5lIDMiKSk7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSg5LCA3LCAiIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0aToiLCBuZXdUZXh0LmVxdWFscygiaXMgYSB0ZXN0IikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRqOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoImlzIGEgdGVzdCIpKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDEsIDgsICIiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRrOiIsIG5ld1RleHQuZXF1YWxzKCJpIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRsOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoImkiKSk7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgwLCAxLCAiIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0bToiLCBuZXdUZXh0LmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRuOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoIiIpKTsKLQkJY29udGVudC5zZXRUZXh0KCJUaGlzXG5pcyBhIHRlc3RcciIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoNSwgOSwgIiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWE6IiwgbmV3VGV4dC5lcXVhbHMoIlRoaXNcblxyIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjViOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gMyk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWM6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiVGhpcyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1ZDoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWU6IiwgY29udGVudC5nZXRMaW5lKDIpLmVxdWFscygiIikpOwotCQljb250ZW50LnNldFRleHQoIkwxXHJcbkwyXHJcbkwzXHJcbkw0XHJcbiIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoNCwgOCwgIiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NmE6IiwgbmV3VGV4dC5lcXVhbHMoIkwxXHJcbkw0XHJcbiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2YjoiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDMpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjZjOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoIkwxIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjZkOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoIkw0IikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjZlOiIsIGNvbnRlbnQuZ2V0TGluZSgyKS5lcXVhbHMoIiIpKTsKLQkJY29udGVudC5zZXRUZXh0KCJcbkwxXHJcbkwyIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgwLCAxLCAiIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo3YToiLCBuZXdUZXh0LmVxdWFscygiTDFcclxuTDIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6N2I6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAyKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo3YzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCJMMSIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo3ZDoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCJMMiIpKTsKLQkJY29udGVudC5zZXRUZXh0KCJcbkwxXHJcbkwyXHJcbiIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoNywgMiwgIiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OGE6IiwgbmV3VGV4dC5lcXVhbHMoIlxuTDFcclxuTDIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OGI6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAzKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo4YzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OGQ6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiTDEiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OGU6IiwgY29udGVudC5nZXRMaW5lKDIpLmVxdWFscygiTDIiKSk7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiXG5MaW5lIDFcbkxpbmUgMlxuIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgwLCA3LCAiIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo5YToiLCBuZXdUZXh0LmVxdWFscygiXG5MaW5lIDJcbiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo5YjoiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDMpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjljOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo5ZDoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCJMaW5lIDIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OWU6IiwgY29udGVudC5nZXRMaW5lKDIpLmVxdWFscygiIikpOwotCQljb250ZW50LnNldFRleHQoIkxpbmUgMVxuTGluZSAyXG4iKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDYsIDgsICIiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjEwYToiLCBuZXdUZXh0LmVxdWFscygiTGluZSAxIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjEwYjoiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDEpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjEwYzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCJMaW5lIDEiKSk7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiTGluZSBvbmUgaXMgc2hvcnRcclxuTGluZSAyIGlzIGEgbG9uZ2VyIGxpbmVcclxuTGluZSAzXG4iKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDEyLCAxNywgIiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MTFhOiIsIG5ld1RleHQuZXF1YWxzKCJMaW5lIG9uZSBpcyBhIGxvbmdlciBsaW5lXHJcbkxpbmUgM1xuIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjExYjoiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDMpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjExYzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCJMaW5lIG9uZSBpcyBhIGxvbmdlciBsaW5lIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjExZDoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCJMaW5lIDMiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MTFlOiIsIGNvbnRlbnQuZ2V0TGluZSgyKS5lcXVhbHMoIiIpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0X0VtcHR5KCkgewotCQlTdHlsZWRUZXh0Q29udGVudCBjb250ZW50ID0gZ2V0Q29udGVudEluc3RhbmNlKCk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWE6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAxKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxYjoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWNvbnRlbnQuc2V0VGV4dCgidGVzdCIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMCwgNCwgIiIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjJhOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gMSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MmI6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiIikpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RfSW5zZXJ0KCkgewotCQlTdHlsZWRUZXh0Q29udGVudCBjb250ZW50ID0gZ2V0Q29udGVudEluc3RhbmNlKCk7Ci0JCVN0cmluZyBuZXdUZXh0OwotCQljb250ZW50LnNldFRleHQoIlRoaXNcbmlzIGEgdGVzdFxyIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgwLCAwLCAidGVzdFxuICIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWE6IiwgbmV3VGV4dC5lcXVhbHMoInRlc3RcbiBUaGlzXG5pcyBhIHRlc3RcciIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxYjoiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDQpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjFjOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoInRlc3QiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWQ6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiIFRoaXMiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWU6IiwgY29udGVudC5nZXRMaW5lKDIpLmVxdWFscygiaXMgYSB0ZXN0IikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjFmOiIsIGNvbnRlbnQuZ2V0TGluZSgzKS5lcXVhbHMoIiIpKTsKLQkJY29udGVudC5zZXRUZXh0KCJUaGlzXG5pcyBhIHRlc3RcciIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoNSwgMCwgIioqKiAiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjJhOiIsIG5ld1RleHQuZXF1YWxzKCJUaGlzXG4qKiogaXMgYSB0ZXN0XHIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MmI6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAzKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoyYzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCJUaGlzIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjJkOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoIioqKiBpcyBhIHRlc3QiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MmU6IiwgY29udGVudC5nZXRMaW5lKDIpLmVxdWFscygiIikpOwotCQljb250ZW50LnNldFRleHQoIkxpbmUgMVxyXG5MaW5lIDIiKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDAsIDAsICJcciIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2E6IiwgbmV3VGV4dC5lcXVhbHMoIlxyTGluZSAxXHJcbkxpbmUgMiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozYjoiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDMpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjNjOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozZDoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCJMaW5lIDEiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2U6IiwgY29udGVudC5nZXRMaW5lKDIpLmVxdWFscygiTGluZSAyIikpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoOSwgMCwgIlxyIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozZjoiLCBuZXdUZXh0LmVxdWFscygiXHJMaW5lIDFcclxuXHJMaW5lIDIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2c6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSA0KTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozaDoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2k6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiTGluZSAxIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjNqOiIsIGNvbnRlbnQuZ2V0TGluZSgyKS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozazoiLCBjb250ZW50LmdldExpbmUoMykuZXF1YWxzKCJMaW5lIDIiKSk7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiVGhpc1xuaXMgYSB0ZXN0XHIiKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDAsIDAsICJcbiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGE6IiwgbmV3VGV4dC5lcXVhbHMoIlxuVGhpc1xuaXMgYSB0ZXN0XHIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGI6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSA0KTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0YzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGQ6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiVGhpcyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0ZToiLCBjb250ZW50LmdldExpbmUoMikuZXF1YWxzKCJpcyBhIHRlc3QiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGY6IiwgY29udGVudC5nZXRMaW5lKDMpLmVxdWFscygiIikpOwotCQljb250ZW50LnNldFRleHQoIlRoaXNcbmlzIGEgdGVzdFxyIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSg3LCAwLCAiXHJcbm5ld0xpbmUiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVhOiIsIG5ld1RleHQuZXF1YWxzKCJUaGlzXG5pc1xyXG5uZXdMaW5lIGEgdGVzdFxyIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjViOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gNCk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWM6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiVGhpcyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1ZDoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCJpcyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1ZToiLCBjb250ZW50LmdldExpbmUoMikuZXF1YWxzKCJuZXdMaW5lIGEgdGVzdCIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1ZjoiLCBjb250ZW50LmdldExpbmUoMykuZXF1YWxzKCIiKSk7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgwLCAwLCAiVGhpc1xuaXNcclxubmV3TGluZSBhIHRlc3RcciIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NmE6IiwgbmV3VGV4dC5lcXVhbHMoIlRoaXNcbmlzXHJcbm5ld0xpbmUgYSB0ZXN0XHIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NmI6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSA0KTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2YzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCJUaGlzIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjZkOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoImlzIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjZlOiIsIGNvbnRlbnQuZ2V0TGluZSgyKS5lcXVhbHMoIm5ld0xpbmUgYSB0ZXN0IikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjZmOiIsIGNvbnRlbnQuZ2V0TGluZSgzKS5lcXVhbHMoIiIpKTsKLQkJLy8gaW5zZXJ0IGF0IGVuZAotCQljb250ZW50LnNldFRleHQoIlRoaXMiKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDQsIDAsICJcbiAiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjdhOiIsIG5ld1RleHQuZXF1YWxzKCJUaGlzXG4gIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjdiOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gMik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6N2M6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiVGhpcyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo3ZDoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCIgIikpOwotCQljb250ZW50LnNldFRleHQoIlRoaXNcbiIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoNSwgMCwgIlxuIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo3ZToiLCBuZXdUZXh0LmVxdWFscygiVGhpc1xuXG4iKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6N2Y6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAzKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo3ZzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCJUaGlzIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjdoOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo3aToiLCBjb250ZW50LmdldExpbmUoMikuZXF1YWxzKCIiKSk7Ci0JCS8vIGluc2VydCBhdCBiZWdpbm5pbmcKLQkJY29udGVudC5zZXRUZXh0KCJUaGlzIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgwLCAwLCAiXG4iKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjhhOiIsIG5ld1RleHQuZXF1YWxzKCJcblRoaXMiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OGI6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAyKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo4YzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OGQ6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiVGhpcyIpKTsKLQkJLy8gaW5zZXJ0IHRleHQKLQkJY29udGVudC5zZXRUZXh0KCJUaGlzXG5pcyBhIHRlc3RcciIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoNSwgMCwgIioqKiAiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjlhOiIsIG5ld1RleHQuZXF1YWxzKCJUaGlzXG4qKiogaXMgYSB0ZXN0XHIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OWI6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAzKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo5YzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCJUaGlzIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjlkOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoIioqKiBpcyBhIHRlc3QiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OWU6IiwgY29udGVudC5nZXRMaW5lKDIpLmVxdWFscygiIikpOwotCQljb250ZW50LnNldFRleHQoIlRoaXNcbiIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoNSwgMCwgImxpbmUiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjEwYToiLCBuZXdUZXh0LmVxdWFscygiVGhpc1xubGluZSIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxMGI6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAyKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxMGM6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiVGhpcyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxMGQ6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygibGluZSIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxMGU6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoOCkgPT0gMSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MTBmOiIsIGNvbnRlbnQuZ2V0TGluZUF0T2Zmc2V0KDkpID09IDEpOwotCQkvLyBpbnNlcnQgYXQgYmVnaW5uaW5nCi0JCWNvbnRlbnQuc2V0VGV4dCgiVGhpc1xuIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgwLCAwLCAibGluZVxuIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxMWE6IiwgbmV3VGV4dC5lcXVhbHMoImxpbmVcblRoaXNcbiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxMWI6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAzKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxMWM6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygibGluZSIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxMWQ6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiVGhpcyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxMWU6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoNSkgPT0gMSk7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiTGluZSAxXHJcbkxpbmUgMlxyXG5MaW5lIDMiKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDAsIDAsICJcciIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MTJhOiIsIG5ld1RleHQuZXF1YWxzKCJcckxpbmUgMVxyXG5MaW5lIDJcclxuTGluZSAzIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjEyYjoiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDQpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjEyYzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MTJkOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoIkxpbmUgMSIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxMmU6IiwgY29udGVudC5nZXRMaW5lKDIpLmVxdWFscygiTGluZSAyIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjEyZjoiLCBjb250ZW50LmdldExpbmUoMykuZXF1YWxzKCJMaW5lIDMiKSk7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiTGluZSAxXG5MaW5lIDJcbkxpbmUgMyIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoNywgMCwgIkxpbmUxYVxuTGluZTFiXG4iKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjEzYToiLCBuZXdUZXh0LmVxdWFscygiTGluZSAxXG5MaW5lMWFcbkxpbmUxYlxuTGluZSAyXG5MaW5lIDMiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MTNiOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gNSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MTNjOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoIkxpbmUgMSIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxM2Q6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiTGluZTFhIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjEzZToiLCBjb250ZW50LmdldExpbmUoMikuZXF1YWxzKCJMaW5lMWIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MTNmOiIsIGNvbnRlbnQuZ2V0TGluZSgzKS5lcXVhbHMoIkxpbmUgMiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxM2c6IiwgY29udGVudC5nZXRMaW5lKDQpLmVxdWFscygiTGluZSAzIikpOwotCQljb250ZW50LnNldFRleHQoIkxpbmUgMVxuTGluZSAyXG5MaW5lIDMiKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDExLCAwLCAibDFhIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxNGE6IiwgbmV3VGV4dC5lcXVhbHMoIkxpbmUgMVxuTGluZWwxYSAyXG5MaW5lIDMiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MTRiOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gMyk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MTRjOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoIkxpbmUgMSIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxNGQ6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiTGluZWwxYSAyIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjE0ZToiLCBjb250ZW50LmdldExpbmUoMikuZXF1YWxzKCJMaW5lIDMiKSk7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiTGluZSAxXG5MaW5lIDIgaXMgYSB2ZXJ5IGxvbmcgbGluZSB0aGF0IHNwYW5zIG1hbnkgd29yZHNcbkxpbmUgMyIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMTksIDAsICJ2ZXJ5LCB2ZXJ5LCAiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjE1YToiLCBuZXdUZXh0LmVxdWFscygiTGluZSAxXG5MaW5lIDIgaXMgYSB2ZXJ5LCB2ZXJ5LCB2ZXJ5IGxvbmcgbGluZSB0aGF0IHNwYW5zIG1hbnkgd29yZHNcbkxpbmUgMyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxNWI6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAzKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxNWM6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiTGluZSAxIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjE1ZDoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCJMaW5lIDIgaXMgYSB2ZXJ5LCB2ZXJ5LCB2ZXJ5IGxvbmcgbGluZSB0aGF0IHNwYW5zIG1hbnkgd29yZHMiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MTVlOiIsIGNvbnRlbnQuZ2V0TGluZSgyKS5lcXVhbHMoIkxpbmUgMyIpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0X0xpbmVfQ29udmVyc2lvbigpIHsKLQkJU3R5bGVkVGV4dENvbnRlbnQgY29udGVudCA9IGdldENvbnRlbnRJbnN0YW5jZSgpOwotCQljb250ZW50LnNldFRleHQoIlRoaXNcbmlzIGEgdGVzdFxycmVwZWF0XG5lbmRcciIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjFhOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gNSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWI6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiVGhpcyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxYzoiLCBjb250ZW50LmdldE9mZnNldEF0TGluZSgwKSA9PSAwKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxZDoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCJpcyBhIHRlc3QiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWU6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoNCkgPT0gMCk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWY6IiwgY29udGVudC5nZXRPZmZzZXRBdExpbmUoMSkgPT0gNSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWc6IiwgY29udGVudC5nZXRMaW5lKDIpLmVxdWFscygicmVwZWF0IikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjFoOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDIpID09IDE1KTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxaToiLCBjb250ZW50LmdldExpbmUoMykuZXF1YWxzKCJlbmQiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWo6IiwgY29udGVudC5nZXRPZmZzZXRBdExpbmUoMykgPT0gMjIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjFrOiIsIGNvbnRlbnQuZ2V0TGluZSg0KS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxbDoiLCBjb250ZW50LmdldE9mZnNldEF0TGluZSg0KSA9PSAyNik7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiVGhpc1xyXG5pcyBhIHRlc3QiKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoyYToiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjJiOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoImlzIGEgdGVzdCIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoyYzoiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCg0KSA9PSAwKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoyZDoiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCg1KSA9PSAwKTsKLQkJY29udGVudC5zZXRUZXh0KCJUaGlzXHJcbmlzIGEgdGVzdFxyIik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2E6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAzKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozYjoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCJpcyBhIHRlc3QiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2M6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoMTUpID09IDEpOwotCQljb250ZW50LnNldFRleHQoIlxyXG4iKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0YToiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRiOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0YzoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGQ6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoMCkgPT0gMCk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGU6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoMSkgPT0gMCk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGY6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoMikgPT0gMSk7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiXHJcblxuXHJcclxuIik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWE6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSA1KTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1YjoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWM6IiwgY29udGVudC5nZXRPZmZzZXRBdExpbmUoMCkgPT0gMCk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWQ6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVlOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDEpID09IDIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVmOiIsIGNvbnRlbnQuZ2V0TGluZSgyKS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1ZzoiLCBjb250ZW50LmdldE9mZnNldEF0TGluZSgyKSA9PSAzKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1aDoiLCBjb250ZW50LmdldExpbmUoMykuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWk6IiwgY29udGVudC5nZXRPZmZzZXRBdExpbmUoMykgPT0gNCk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWo6IiwgY29udGVudC5nZXRMaW5lKDQpLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVrOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDQpID09IDYpOwotCQljb250ZW50LnNldFRleHQoInRlc3RcclxydGVzdDJcclxyIik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NmE6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSA1KTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2YjoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCJ0ZXN0IikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjZjOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDApID09IDApOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjZkOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2ZToiLCBjb250ZW50LmdldE9mZnNldEF0TGluZSgxKSA9PSA1KTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2ZjoiLCBjb250ZW50LmdldExpbmUoMikuZXF1YWxzKCJ0ZXN0MiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2ZzoiLCBjb250ZW50LmdldE9mZnNldEF0TGluZSgyKSA9PSA2KTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2aDoiLCBjb250ZW50LmdldExpbmUoMykuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6Nmk6IiwgY29udGVudC5nZXRPZmZzZXRBdExpbmUoMykgPT0gMTIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjZqOiIsIGNvbnRlbnQuZ2V0TGluZSg0KS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2azoiLCBjb250ZW50LmdldE9mZnNldEF0TGluZSg0KSA9PSAxMyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdF9MaW5lX1RvX09mZnNldCgpIHsKLQkJU3R5bGVkVGV4dENvbnRlbnQgY29udGVudCA9IGdldENvbnRlbnRJbnN0YW5jZSgpOwotCQljb250ZW50LnNldFRleHQoIlRoaXNcbmlzIGEgdGVzdFxycmVwZWF0XG5lbmRcciIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjFhOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDApID09IDApOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjFiOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDEpID09IDUpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjFjOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDIpID09IDE1KTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxZDoiLCBjb250ZW50LmdldE9mZnNldEF0TGluZSgzKSA9PSAyMik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWU6IiwgY29udGVudC5nZXRPZmZzZXRBdExpbmUoNCkgPT0gMjYpOwotCQljb250ZW50LnNldFRleHQoIlRoaXNcclxuaXMgYSB0ZXN0Iik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MmE6IiwgY29udGVudC5nZXRPZmZzZXRBdExpbmUoMCkgPT0gMCk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MmI6IiwgY29udGVudC5nZXRPZmZzZXRBdExpbmUoMSkgPT0gNik7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiXHJcbiIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjNhOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDApID09IDApOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjNiOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDEpID09IDIpOwotCQljb250ZW50LnNldFRleHQoIlxyXG5cblxyXHJcbiIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRhOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDApID09IDApOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRiOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDEpID09IDIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRjOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDIpID09IDMpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRkOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDMpID09IDQpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRlOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDQpID09IDYpOwotCQljb250ZW50LnNldFRleHQoIlxyXG50ZXN0XHJcbiIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVhOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDApID09IDApOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjViOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDEpID09IDIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVjOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDIpID09IDgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RfT2Zmc2V0X1RvX0xpbmUoKSB7Ci0JCVN0eWxlZFRleHRDb250ZW50IGNvbnRlbnQgPSBnZXRDb250ZW50SW5zdGFuY2UoKTsKLQkJY29udGVudC5zZXRUZXh0KCJUaGlzXG5pcyBhIHRlc3RccnJlcGVhdFxuZW5kXHIiKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxYToiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCgwKSA9PSAwKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxYjoiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCgzKSA9PSAwKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxYzoiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCg0KSA9PSAwKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxZDoiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCgyNSkgPT0gMyk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWU6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoMjYpID09IDQpOwotCQljb250ZW50LnNldFRleHQoIlRoaXNcclxuaXMgYSB0ZXN0Iik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MmE6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoNSkgPT0gMCk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MmI6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoNikgPT0gMSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MmM6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoMTApID09IDEpOwotCQljb250ZW50LnNldFRleHQoIlxyXG4iKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozYToiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCgwKSA9PSAwKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozYjoiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCgxKSA9PSAwKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozYzoiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCgyKSA9PSAxKTsKLQkJY29udGVudC5zZXRUZXh0KCJcclxuXG5cclxyXG4iKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0YToiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCgwKSA9PSAwKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0YjoiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCgxKSA9PSAwKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0YzoiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCgyKSA9PSAxKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0ZDoiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCgzKSA9PSAyKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0ZToiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCg0KSA9PSAzKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0ZjoiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCg1KSA9PSAzKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0ZzoiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCg2KSA9PSA0KTsKLQkJY29udGVudC5zZXRUZXh0KCJcclxuXHJcbiIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVhOiIsIGNvbnRlbnQuZ2V0TGluZUF0T2Zmc2V0KDApID09IDApOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjViOiIsIGNvbnRlbnQuZ2V0TGluZUF0T2Zmc2V0KDEpID09IDApOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVjOiIsIGNvbnRlbnQuZ2V0TGluZUF0T2Zmc2V0KDIpID09IDEpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVkOiIsIGNvbnRlbnQuZ2V0TGluZUF0T2Zmc2V0KDMpID09IDEpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVlOiIsIGNvbnRlbnQuZ2V0TGluZUF0T2Zmc2V0KDQpID09IDIpOwotCQljb250ZW50LnNldFRleHQoIlxyXHJcclxuXHJcbiIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjZhOiIsIGNvbnRlbnQuZ2V0TGluZUF0T2Zmc2V0KDApID09IDApOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjZiOiIsIGNvbnRlbnQuZ2V0TGluZUF0T2Zmc2V0KDEpID09IDEpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjZjOiIsIGNvbnRlbnQuZ2V0TGluZUF0T2Zmc2V0KDIpID09IDIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjZkOiIsIGNvbnRlbnQuZ2V0TGluZUF0T2Zmc2V0KDQpID09IDMpOwotCQljb250ZW50LnNldFRleHQoIiIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjdhOiIsIGNvbnRlbnQuZ2V0TGluZUF0T2Zmc2V0KDApID09IDApOwotCQljb250ZW50ID0gZ2V0Q29udGVudEluc3RhbmNlKCk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OGE6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoMCkgPT0gMCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdF9SZXBsYWNlKCkgewotCQlTdHlsZWRUZXh0Q29udGVudCBjb250ZW50ID0gZ2V0Q29udGVudEluc3RhbmNlKCk7Ci0JCVN0cmluZyBuZXdUZXh0OwotCQljb250ZW50LnNldFRleHQoIlRoaXNcbmlzIGEgdGVzdFxyIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSg1LCA0LCAiYSIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWE6IiwgbmV3VGV4dC5lcXVhbHMoIlRoaXNcbmEgdGVzdFxyIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjFiOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gMyk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWM6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiVGhpcyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxZDoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCJhIHRlc3QiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWU6IiwgY29udGVudC5nZXRMaW5lKDIpLmVxdWFscygiIikpOwotCQljb250ZW50LnNldFRleHQoIlRoaXNcbmlzIGEgdGVzdFxyIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSg1LCAyLCAid2FzIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoyYToiLCBuZXdUZXh0LmVxdWFscygiVGhpc1xud2FzIGEgdGVzdFxyIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjJiOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gMyk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MmM6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiVGhpcyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoyZDoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCJ3YXMgYSB0ZXN0IikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjJlOiIsIGNvbnRlbnQuZ2V0TGluZSgyKS5lcXVhbHMoIiIpKTsKLQkJY29udGVudC5zZXRUZXh0KCJUaGlzIGlzIGEgdGVzdFxyIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSg1LCAyLCAid2FzIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozYToiLCBuZXdUZXh0LmVxdWFscygiVGhpcyB3YXMgYSB0ZXN0XHIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2I6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAyKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozYzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCJUaGlzIHdhcyBhIHRlc3QiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2Q6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoMTUpID09IDApOwotCQljb250ZW50LnNldFRleHQoIkxpbmUgMVxuTGluZSAyXG5MaW5lIDMiKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDAsIDcsICJMYVxuTGJcbiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGE6IiwgbmV3VGV4dC5lcXVhbHMoIkxhXG5MYlxuTGluZSAyXG5MaW5lIDMiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGI6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiTGEiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGM6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiTGIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGQ6IiwgY29udGVudC5nZXRMaW5lKDIpLmVxdWFscygiTGluZSAyIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRlOiIsIGNvbnRlbnQuZ2V0TGluZSgzKS5lcXVhbHMoIkxpbmUgMyIpKTsKLQkJY29udGVudC5zZXRUZXh0KGdldFRlc3RUZXh0KCkpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWludCBzdGFydCA9IGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDYpOwotCQlpbnQgZW5kID0gY29udGVudC5nZXRPZmZzZXRBdExpbmUoMTEpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2Uoc3RhcnQsIGVuZCAtIHN0YXJ0LCAiIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1YToiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDEyKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1YToiLCBjb250ZW50LmdldExpbmUoNSkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWE6IiwgY29udGVudC5nZXRMaW5lKDYpLmVxdWFscygiIikpOwotCQlzdGFydCA9IGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDcpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2Uoc3RhcnQsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkgLSBzdGFydCwgIiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWE6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSA4KTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1YToiLCBjb250ZW50LmdldExpbmUoNSkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWE6IiwgY29udGVudC5nZXRMaW5lKDYpLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVhOiIsIGNvbnRlbnQuZ2V0TGluZSg3KS5lcXVhbHMoIiIpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0X1NwZWNpYWxfQ2FzZXMoKSB7Ci0JCVN0cmluZyBuZXdUZXh0OwotCQlTdHlsZWRUZXh0Q29udGVudCBjb250ZW50ID0gZ2V0Q29udGVudEluc3RhbmNlKCk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MGE6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAxKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjowYjoiLCBjb250ZW50LmdldE9mZnNldEF0TGluZSgwKSA9PSAwKTsKLQkJY29udGVudC5zZXRUZXh0KCJUaGlzIGlzIHRoZSBpbnB1dC9vdXRwdXQgdGV4dCBjb21wb25lbnQuIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgwLCAwLCAiXG4iKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxYToiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgxLCAwLCAiXG4iKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxYjoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgyLCAwLCAiXG4iKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxYzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgzLCAwLCAiXG4iKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxZDoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSg0LCAwLCAiXG4iKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxZToiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSg1LCAwLCAiXG4iKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxZjoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSg2LCAwLCAiXG4iKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxZzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSg3LCAwLCAiXG4iKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxaDoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiVGhpcyBpcyB0aGUgaW5wdXQvb3V0cHV0IHRleHQgY29tcG9uZW50LiIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMCwgMCwgIlxuIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoyYToiLCBuZXdUZXh0LmVxdWFscygiXG5UaGlzIGlzIHRoZSBpbnB1dC9vdXRwdXQgdGV4dCBjb21wb25lbnQuIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjJiOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoyYzoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCJUaGlzIGlzIHRoZSBpbnB1dC9vdXRwdXQgdGV4dCBjb21wb25lbnQuIikpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMSwgMCwgIlxuIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoyZDoiLCBuZXdUZXh0LmVxdWFscygiXG5cblRoaXMgaXMgdGhlIGlucHV0L291dHB1dCB0ZXh0IGNvbXBvbmVudC4iKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MmU6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjJmOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoyZzoiLCBjb250ZW50LmdldExpbmUoMikuZXF1YWxzKCJUaGlzIGlzIHRoZSBpbnB1dC9vdXRwdXQgdGV4dCBjb21wb25lbnQuIikpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMiwgMCwgIlxuIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozYToiLCBuZXdUZXh0LmVxdWFscygiXG5cblxuVGhpcyBpcyB0aGUgaW5wdXQvb3V0cHV0IHRleHQgY29tcG9uZW50LiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozYjoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2M6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjNkOiIsIGNvbnRlbnQuZ2V0TGluZSgyKS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozZToiLCBjb250ZW50LmdldExpbmUoMykuZXF1YWxzKCJUaGlzIGlzIHRoZSBpbnB1dC9vdXRwdXQgdGV4dCBjb21wb25lbnQuIikpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMywgMCwgIlxuIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozZjoiLCBuZXdUZXh0LmVxdWFscygiXG5cblxuXG5UaGlzIGlzIHRoZSBpbnB1dC9vdXRwdXQgdGV4dCBjb21wb25lbnQuIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjNnOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozaDoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2k6IiwgY29udGVudC5nZXRMaW5lKDIpLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjNqOiIsIGNvbnRlbnQuZ2V0TGluZSgzKS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozazoiLCBjb250ZW50LmdldExpbmUoNCkuZXF1YWxzKCJUaGlzIGlzIHRoZSBpbnB1dC9vdXRwdXQgdGV4dCBjb21wb25lbnQuIikpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMywgMSwgIiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGE6IiwgbmV3VGV4dC5lcXVhbHMoIlxuXG5cblRoaXMgaXMgdGhlIGlucHV0L291dHB1dCB0ZXh0IGNvbXBvbmVudC4iKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGI6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRjOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0ZDoiLCBjb250ZW50LmdldExpbmUoMikuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGU6IiwgY29udGVudC5nZXRMaW5lKDMpLmVxdWFscygiVGhpcyBpcyB0aGUgaW5wdXQvb3V0cHV0IHRleHQgY29tcG9uZW50LiIpKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDIsIDEsICIiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRmOiIsIG5ld1RleHQuZXF1YWxzKCJcblxuVGhpcyBpcyB0aGUgaW5wdXQvb3V0cHV0IHRleHQgY29tcG9uZW50LiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0ZzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGg6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRpOiIsIGNvbnRlbnQuZ2V0TGluZSgyKS5lcXVhbHMoIlRoaXMgaXMgdGhlIGlucHV0L291dHB1dCB0ZXh0IGNvbXBvbmVudC4iKSk7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgyLCAwLCAiYSIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWE6IiwgbmV3VGV4dC5lcXVhbHMoIlxuXG5hVGhpcyBpcyB0aGUgaW5wdXQvb3V0cHV0IHRleHQgY29tcG9uZW50LiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1YjoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWM6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVkOiIsIGNvbnRlbnQuZ2V0TGluZSgyKS5lcXVhbHMoImFUaGlzIGlzIHRoZSBpbnB1dC9vdXRwdXQgdGV4dCBjb21wb25lbnQuIikpOwotCQkvLyBkZWxldGUgb25seSBwYXJ0IG9mIGEgZGVsaW1pdGVyCi0JCWNvbnRlbnQuc2V0VGV4dCgiTDFcclxuTDJcclxuTDNcclxuTDRcclxuIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgwLCAzLCAiIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1ZToiLCBuZXdUZXh0LmVxdWFscygiXG5MMlxyXG5MM1xyXG5MNFxyXG4iKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWY6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSA1KTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1ZzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWg6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiTDIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWk6IiwgY29udGVudC5nZXRMaW5lKDIpLmVxdWFscygiTDMiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWo6IiwgY29udGVudC5nZXRMaW5lKDMpLmVxdWFscygiTDQiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWs6IiwgY29udGVudC5nZXRMaW5lKDQpLmVxdWFscygiIikpOwotCQkvLyByZXBsYWNlIHBhcnQgb2YgYSBkZWxpbWl0ZXIKLQkJY29udGVudC5zZXRUZXh0KCJMMVxyXG5MMlxyXG5MM1xyXG5MNFxyXG4iKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDMsIDEsICJ0ZXN0XG4iKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjZhOiIsIG5ld1RleHQuZXF1YWxzKCJMMVxydGVzdFxuTDJcclxuTDNcclxuTDRcclxuIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjZiOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gNik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NmM6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiTDEiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NmQ6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygidGVzdCIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2ZToiLCBjb250ZW50LmdldExpbmUoMikuZXF1YWxzKCJMMiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2ZjoiLCBjb250ZW50LmdldExpbmUoMykuZXF1YWxzKCJMMyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2ZzoiLCBjb250ZW50LmdldExpbmUoNCkuZXF1YWxzKCJMNCIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2aDoiLCBjb250ZW50LmdldExpbmUoNSkuZXF1YWxzKCIiKSk7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiYWJjXHJcbmRlZiIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMSwgMSwgIiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6N2E6IiwgbmV3VGV4dC5lcXVhbHMoImFjXHJcbmRlZiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo3YjoiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjdjOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoImFjIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjdkOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoImRlZiIpKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDEsIDEsICIiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjdlOiIsIG5ld1RleHQuZXF1YWxzKCJhXHJcbmRlZiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo3ZjoiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjdnOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoImEiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6N2g6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiZGVmIikpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMSwgMiwgIiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6N2k6IiwgbmV3VGV4dC5lcXVhbHMoImFkZWYiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6N2o6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAxKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo3azoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCJhZGVmIikpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMSwgMSwgIiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6N2w6IiwgbmV3VGV4dC5lcXVhbHMoImFlZiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo3bToiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDEpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjduOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoImFlZiIpKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDEsIDEsICIiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjdvOiIsIG5ld1RleHQuZXF1YWxzKCJhZiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo3cDoiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDEpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjdxOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoImFmIikpOwotCQljb250ZW50LnNldFRleHQoImFiYyIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMCwgMSwgIjEiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjhhOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gMSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OGI6IiwgbmV3VGV4dC5lcXVhbHMoIjFiYyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo4YzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIxYmMiKSk7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgwLCAwLCAiXG4iKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjhkOiIsIG5ld1RleHQuZXF1YWxzKCJcbjFiYyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo4ZToiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjhmOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo4ZzoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCIxYmMiKSk7Ci0JCWNvbnRlbnQgPSBnZXRDb250ZW50SW5zdGFuY2UoKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDAsIDAsICJhIik7Ci0JCWNvbnRlbnQuc2V0VGV4dCgicGFja2FnZSB0ZXN0O1xuLyogTGluZSAxXG4gKiBMaW5lIDJcbiAqL1xucHVibGljIGNsYXNzIFNpbXBsZUNsYXNzIHtcbn0iKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDE0LCAyMywgIlx0LypMaW5lIDFcblx0ICogTGluZSAyXG5cdCAqLyIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OWE6IiwgbmV3VGV4dC5lcXVhbHMoInBhY2thZ2UgdGVzdDtcblx0LypMaW5lIDFcblx0ICogTGluZSAyXG5cdCAqL1xucHVibGljIGNsYXNzIFNpbXBsZUNsYXNzIHtcbn0iKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OWI6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSA2KTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo5YzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCJwYWNrYWdlIHRlc3Q7IikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjlkOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoIlx0LypMaW5lIDEiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OWU6IiwgY29udGVudC5nZXRMaW5lKDIpLmVxdWFscygiXHQgKiBMaW5lIDIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OWY6IiwgY29udGVudC5nZXRMaW5lKDMpLmVxdWFscygiXHQgKi8iKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OWc6IiwgY29udGVudC5nZXRMaW5lKDQpLmVxdWFscygicHVibGljIGNsYXNzIFNpbXBsZUNsYXNzIHsiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OWg6IiwgY29udGVudC5nZXRMaW5lKDUpLmVxdWFscygifSIpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0X1RleHRfQ2hhbmdlZF9FdmVudCgpIHsKLQkJU3R5bGVkVGV4dENvbnRlbnQgY29udGVudCA9IGdldENvbnRlbnRJbnN0YW5jZSgpOwotCQljb250ZW50LmFkZFRleHRDaGFuZ2VMaXN0ZW5lcih0aGlzKTsKLQkJdmVyaWZ5ID0gMTsKLQkJY29udGVudC5zZXRUZXh0KCJ0ZXN0aW5nIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgwLCAwLCAiXG4iKTsKLQkJdmVyaWZ5ID0gMjsKLQkJY29udGVudC5zZXRUZXh0KCJcblxuIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgwLCAyLCAiYSIpOwotCQl2ZXJpZnkgPSAzOwotCQljb250ZW50LnNldFRleHQoImEiKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDAsIDEsICJcblxuIik7Ci0JCXZlcmlmeSA9IDU7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiTGluZSAxXHJcbkxpbmUgMiIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMCwgMCwgIlxyIik7Ci0JCXZlcmlmeSA9IDY7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiVGhpc1xuaXMgYSB0ZXN0XG5saW5lIDNcbmxpbmUgNCIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMjEsIDcsICIiKTsKLQkJdmVyaWZ5ID0gNzsKLQkJY29udGVudC5zZXRUZXh0KCJUaGlzXG5pcyBhIHRlc3RcciIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoNSwgOSwgIiIpOwotCQl2ZXJpZnkgPSA4OwotCQljb250ZW50LnNldFRleHQoIlxuTDFcclxuTDJcclxuIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSg3LCAyLCAiIik7Ci0JCXZlcmlmeSA9IDk7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiTDFcclxuIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgyLCAyLCAidGVzdCIpOwotCQl2ZXJpZnkgPSAwOwotCQljb250ZW50LnJlbW92ZVRleHRDaGFuZ2VMaXN0ZW5lcih0aGlzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXh0Q2hhbmdlZChUZXh0Q2hhbmdlZEV2ZW50IGV2ZW50KSB7Ci0JfQotCi0JcHVibGljIHZvaWQgdGV4dENoYW5naW5nKFRleHRDaGFuZ2luZ0V2ZW50IGV2ZW50KSB7Ci0JCXN3aXRjaCAodmVyaWZ5KSB7Ci0JCQljYXNlIDEgOgotCQkJCXsKLQkJCQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxYToiLCBldmVudC5yZXBsYWNlTGluZUNvdW50ID09IDApOwotCQkJCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjFiOiIsIGV2ZW50Lm5ld0xpbmVDb3VudCA9PSAxKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAyIDoKLQkJCQl7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6MmE6IiwgZXZlbnQucmVwbGFjZUxpbmVDb3VudCA9PSAyKTsKLQkJCQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoyYjoiLCBldmVudC5uZXdMaW5lQ291bnQgPT0gMCk7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMyA6Ci0JCQkJewotCQkJCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjNhOiIsIGV2ZW50LnJlcGxhY2VMaW5lQ291bnQgPT0gMCk7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6M2I6IiwgZXZlbnQubmV3TGluZUNvdW50ID09IDIpOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDQgOgotCQkJCXsKLQkJCQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0YToiLCBldmVudC5yZXBsYWNlTGluZUNvdW50ID09IDApOwotCQkJCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRiOiIsIGV2ZW50Lm5ld0xpbmVDb3VudCA9PSAxKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSA1IDoKLQkJCQl7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6NWE6IiwgZXZlbnQucmVwbGFjZUxpbmVDb3VudCA9PSAwKTsKLQkJCQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1YjoiLCBldmVudC5uZXdMaW5lQ291bnQgPT0gMSk7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgNiA6Ci0JCQkJewotCQkJCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjZhOiIsIGV2ZW50LnJlcGxhY2VMaW5lQ291bnQgPT0gMSk7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6NmI6IiwgZXZlbnQubmV3TGluZUNvdW50ID09IDApOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDggOgotCQkJCXsKLQkJCQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo4YToiLCBldmVudC5yZXBsYWNlTGluZUNvdW50ID09IDEpOwotCQkJCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjhiOiIsIGV2ZW50Lm5ld0xpbmVDb3VudCA9PSAwKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSA5IDoKLQkJCQl7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6OWE6IiwgZXZlbnQucmVwbGFjZUxpbmVDb3VudCA9PSAxKTsKLQkJCQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo5YjoiLCBldmVudC5uZXdMaW5lQ291bnQgPT0gMCk7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMTAgOgotCQkJCXsKLQkJCQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxMGE6IiwgZXZlbnQucmVwbGFjZUxpbmVDb3VudCA9PSAwKTsKLQkJCQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxMGI6IiwgZXZlbnQubmV3TGluZUNvdW50ID09IDApOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDExIDoKLQkJCQl7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6MTFhOiIsIGV2ZW50LnJlcGxhY2VMaW5lQ291bnQgPT0gMCk7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6MTFiOiIsIGV2ZW50Lm5ld0xpbmVDb3VudCA9PSAwKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAxMiA6Ci0JCQkJewotCQkJCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjEyYToiLCBldmVudC5yZXBsYWNlTGluZUNvdW50ID09IDApOwotCQkJCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjEyYjoiLCBldmVudC5uZXdMaW5lQ291bnQgPT0gMCk7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMTMgOgotCQkJCXsKLQkJCQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxM2E6IiwgZXZlbnQucmVwbGFjZUxpbmVDb3VudCA9PSAwKTsKLQkJCQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxM2I6IiwgZXZlbnQubmV3TGluZUNvdW50ID09IDApOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDE0IDoKLQkJCQl7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6MTRhOiIsIGV2ZW50LnJlcGxhY2VMaW5lQ291bnQgPT0gMCk7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6MTRiOiIsIGV2ZW50Lm5ld0xpbmVDb3VudCA9PSAxKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAxNSA6Ci0JCQkJewotCQkJCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjE1YToiLCBldmVudC5yZXBsYWNlTGluZUNvdW50ID09IDEpOwotCQkJCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjE1YjoiLCBldmVudC5uZXdMaW5lQ291bnQgPT0gMik7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMTYgOgotCQkJCXsKLQkJCQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxNmE6IiwgZXZlbnQucmVwbGFjZUxpbmVDb3VudCA9PSAwKTsKLQkJCQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxNmI6IiwgZXZlbnQubmV3TGluZUNvdW50ID09IDEpOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDE3IDoKLQkJCQl7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6MTdhOiIsIGV2ZW50LnJlcGxhY2VMaW5lQ291bnQgPT0gMCk7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6MTdiOiIsIGV2ZW50Lm5ld0xpbmVDb3VudCA9PSAyKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAxOCA6Ci0JCQkJewotCQkJCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjE4YToiLCBldmVudC5yZXBsYWNlTGluZUNvdW50ID09IDApOwotCQkJCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjE4YjoiLCBldmVudC5uZXdMaW5lQ291bnQgPT0gMSk7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMTkgOgotCQkJCXsKLQkJCQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxOWE6IiwgZXZlbnQucmVwbGFjZUxpbmVDb3VudCA9PSAwKTsKLQkJCQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxOWI6IiwgZXZlbnQubmV3TGluZUNvdW50ID09IDQpOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDIwIDoKLQkJCQl7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6MjBhOiIsIGV2ZW50LnJlcGxhY2VMaW5lQ291bnQgPT0gMCk7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6MjBiOiIsIGV2ZW50Lm5ld0xpbmVDb3VudCA9PSAyKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGV4dFNldChUZXh0Q2hhbmdlZEV2ZW50IGV2ZW50KSB7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9vdGhlci9TdHlsZWRUZXh0VGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9vdGhlci9TdHlsZWRUZXh0VGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODc2ZjQ4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvb3RoZXIvU3R5bGVkVGV4dFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5vdGhlcjsKLQotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5TdHlsZWRUZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkJ1dHRvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotCi0vKioKLSAqIEluc2VydCB0aGUgdHlwZSdzIGRlc2NyaXB0aW9uIGhlcmUuCi0gKiBDcmVhdGlvbiBkYXRlOiAoMy8yMC8yMDAxIDY6MTk6NTggUE0pCi0gKiBAYXV0aG9yOiBEYXZpZCBXaWxsaWFtcwotICovCi1wdWJsaWMgY2xhc3MgU3R5bGVkVGV4dFRlc3QgewotCS8qKgotCSAqIFN0eWxlZFRleHRUZXN0IGNvbnN0cnVjdG9yIGNvbW1lbnQuCi0JICovCi0JcHVibGljIFN0eWxlZFRleHRUZXN0KCkgewotCQlzdXBlcigpOwotCX0KLQotCS8qKgotCSAqIERvbid0IGZvcmdldCwgdGhlICpzd3QqLmRsbCB3aWxsIGhhdmUgdG8gYmUgY29waWVkIHRvIHByb2dyYW0gZGlyZWN0b3J5IGZvciB0aGlzIHRvIHdvcmsuCi0JICovCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCi0JCXRyeSB7Ci0JCQlTaGVsbCBzaGVsbCA9IG5ldyBTaGVsbCgpOwotCQkJR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgpOwotCQkJc2hlbGwuc2V0TGF5b3V0KGxheW91dCk7Ci0KLQkJCUJ1dHRvbiBidXR0b24gPSBuZXcgQnV0dG9uKHNoZWxsLCBTV1QuUFVTSCk7Ci0JCQlidXR0b24uc2V0VGV4dCgiQWN0aW9uIik7Ci0JCQlidXR0b24uYWRkTGlzdGVuZXIoU1dULlNlbGVjdGlvbiwgbmV3IExpc3RlbmVyKCkgewotCQkJCXB1YmxpYyB2b2lkIGhhbmRsZUV2ZW50KEV2ZW50IGUpIHsKLQkJCQkJU3lzdGVtLm91dC5wcmludGxuKCJidXR0b24gcHVzaGVkIik7Ci0JCQkJfQotCQkJfSk7Ci0KLQkJCVN0eWxlZFRleHQgdGV4dCA9IG5ldyBTdHlsZWRUZXh0KHNoZWxsLCBTV1QuQk9SREVSICsgU1dULkhfU0NST0xMICsgU1dULlZfU0NST0xMKTsKLQkJCUdyaWREYXRhIGRhdGEgPSBuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKTsKLQkJCXRleHQuc2V0TGF5b3V0RGF0YShkYXRhKTsKLQotCQkJLy8KLQkJCS8vCQlTdHJpbmcgZmlsZU5hbWUgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoInVzZXIuZGlyIikgKyAiXFwiICsgImphcGFuZXNlX3V0Zi0xNi50eHQiOwotCQkJLy8JCVN0cmluZyBlbmNvZGluZyA9ICJVbmljb2RlQmlnIjsKLQotCQkJU3RyaW5nIGZpbGVOYW1lID0gU3lzdGVtLmdldFByb3BlcnR5KCJ1c2VyLmRpciIpICsgIlxcIiArICJqYXBhbmVzZV9jcDEyNTIudHh0IjsKLQkJCVN0cmluZyBlbmNvZGluZyA9ICJDcDEyNTIiOwotCQkJLy9zdW4uaW8uQnl0ZVRvQ2hhckNvbnZlcnRlci5nZXREZWZhdWx0KCkudG9TdHJpbmcoKTsKLQotCQkJU3lzdGVtLm91dC5wcmludGxuKCJUZXN0IGZpbGU6ICIgKyBmaWxlTmFtZSk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIiAgIEVuY29kaW5nOiAiICsgZW5jb2RpbmcpOwotCi0JCQlJbnB1dFN0cmVhbSBpbiA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oZmlsZU5hbWUpOwotCQkJSW5wdXRTdHJlYW1SZWFkZXIgaW5TdHJlYW0gPSBuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaW4sIGVuY29kaW5nKTsKLQkJCS8vUmVhZGVyIGluU3RyZWFtID0gbmV3IEZpbGVSZWFkZXIoZmlsZU5hbWUpOwotCQkJU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQkJd2hpbGUgKGluU3RyZWFtLnJlYWR5KCkpIHsKLQkJCQlzYi5hcHBlbmQoKGNoYXIpIGluU3RyZWFtLnJlYWQoKSk7Ci0JCQl9Ci0JCQlTdHJpbmcgaW5wdXRTdHJpbmcgPSBzYi50b1N0cmluZygpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCJMZW5ndGggb2YgaW5wdXQ6ICIgKyBpbnB1dFN0cmluZy5sZW5ndGgoKSk7Ci0JCQkvLwotCQkJdGV4dC5zZXRUZXh0KGlucHV0U3RyaW5nKTsKLQotCQkJc2hlbGwuc2V0U2l6ZSg0MDAsIDIwMCk7Ci0JCQlzaGVsbC5vcGVuKCk7Ci0KLQkJCURpc3BsYXkgZGlzcGxheSA9IHNoZWxsLmdldERpc3BsYXkoKTsKLQkJCXdoaWxlIChzaGVsbCAhPSBudWxsICYmICFzaGVsbC5pc0Rpc3Bvc2VkKCkpIHsKLQkJCQlpZiAoIWRpc3BsYXkucmVhZEFuZERpc3BhdGNoKCkpCi0JCQkJCWRpc3BsYXkuc2xlZXAoKTsKLQkJCX0KLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIHQpIHsKLQkJCXQucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9vdGhlci9Vbml0VGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvb3RoZXIvVW5pdFRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5ZjBjZmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9vdGhlci9Vbml0VGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3OTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMub3RoZXI7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5wYXJzZXIuSlNQU291cmNlUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5kb2N1bWVudC5TdHJ1Y3R1cmVkRG9jdW1lbnRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5sdGsucGFyc2VyLkJsb2NrTWFya2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5ldmVudHMuSVN0cnVjdHVyZWREb2N1bWVudExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5ldmVudHMuTmV3RG9jdW1lbnRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLk5vQ2hhbmdlRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV2ZW50cy5SZWdpb25DaGFuZ2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV2ZW50cy5SZWdpb25zUmVwbGFjZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLlN0cnVjdHVyZWREb2N1bWVudEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5ldmVudHMuU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50UmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklUZXh0UmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklUZXh0UmVnaW9uQ29udGFpbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklUZXh0UmVnaW9uTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwudXRpbC5EZWJ1ZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuRE9NTW9kZWxJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wYXJzZXIuWE1MU291cmNlUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnJlZ2lvbnMuRE9NUmVnaW9uQ29udGV4dDsKLQotcHVibGljIGNsYXNzIFVuaXRUZXN0cyBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXByb3RlY3RlZCBJU3RydWN0dXJlZERvY3VtZW50IGZNb2RlbDsKLQlwcm90ZWN0ZWQgSURPTU1vZGVsIHRyZWU7Ci0JcHJvdGVjdGVkIGludCBldmVudENhc2UgPSAxOwotCXByb3RlY3RlZCBib29sZWFuIGV2ZW50UmVzdWx0OwotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0VORVJJQ19OT0RFU19SRVBMQUNFRF9FVkVOVF9DQVNFID0gMTAwMTsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHRU5FUklDX1JFR0lPTlNfUkVQTEFDRURfRVZFTlRfQ0FTRSA9IDEwMDI7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0VORVJJQ19SRUdJT05fQ0hBTkdFRF9FVkVOVF9DQVNFID0gMTAwMzsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHRU5FUklDX05FV19NT0RFTF9FVkVOVF9DQVNFID0gMTAwNDsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHRU5FUklDX05PX0NIQU5HRV9FVkVOVF9DQVNFID0gMTAwNTsKLQotCXByb3RlY3RlZCBjbGFzcyBTdHJ1Y3R1cmVkRG9jdW1lbnRMaXN0ZW5lclByb3h5IGltcGxlbWVudHMgSVN0cnVjdHVyZWREb2N1bWVudExpc3RlbmVyIHsKLQkJcHVibGljIHZvaWQgbmV3TW9kZWwoTmV3RG9jdW1lbnRFdmVudCBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkgewotCQkJaGFuZGxlRXZlbnQoc3RydWN0dXJlZERvY3VtZW50RXZlbnQpOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgbm9DaGFuZ2UoTm9DaGFuZ2VFdmVudCBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkgewotCQkJaGFuZGxlRXZlbnQoc3RydWN0dXJlZERvY3VtZW50RXZlbnQpOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgbm9kZXNSZXBsYWNlZChTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkgewotCQkJaGFuZGxlRXZlbnQoc3RydWN0dXJlZERvY3VtZW50RXZlbnQpOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgcmVnaW9uQ2hhbmdlZChSZWdpb25DaGFuZ2VkRXZlbnQgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpIHsKLQkJCWhhbmRsZUV2ZW50KHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KTsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHJlZ2lvbnNSZXBsYWNlZChSZWdpb25zUmVwbGFjZWRFdmVudCBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkgewotCQkJaGFuZGxlRXZlbnQoc3RydWN0dXJlZERvY3VtZW50RXZlbnQpOwotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIFN0cnVjdHVyZWREb2N1bWVudExpc3RlbmVyUHJveHkgcHJveHkgPSBuZXcgU3RydWN0dXJlZERvY3VtZW50TGlzdGVuZXJQcm94eSgpOwotCi0JLyoqCi0JICogTWluaW1pemF0aW9uVGVzdCBjb25zdHJ1Y3RvciBjb21tZW50LgotCSAqLwotCXB1YmxpYyBVbml0VGVzdHMoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgaGFuZGxlRXZlbnQoU3RydWN0dXJlZERvY3VtZW50RXZlbnQgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpIHsKLQkJZXZlbnRSZXN1bHQgPSBmYWxzZTsKLQkJc3dpdGNoIChldmVudENhc2UpIHsKLQkJCWNhc2UgMSA6Ci0JCQkJewotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBOb0NoYW5nZUV2ZW50KSB7Ci0JCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAyIDoKLQkJCQl7Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIE5vQ2hhbmdlRXZlbnQpIHsKLQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDMgOgotCQkJCXsKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHsKLQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDQgOgotCQkJCXsKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHsKLQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDUgOgotCQkJCXsKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHsKLQkJCQkJCWlmICgzID09ICgoU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KS5nZXRPbGRTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKCkuZ2V0TGVuZ3RoKCkpCi0JCQkJCQkJaWYgKDMgPT0gKChTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpLmdldE5ld1N0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoKS5nZXRMZW5ndGgoKSkKLQkJCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgNiA6Ci0JCQkJewotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgewotCQkJCQkJaWYgKDAgPT0gKChTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpLmdldE9sZFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoKS5nZXRMZW5ndGgoKSkKLQkJCQkJCQlpZiAoMiA9PSAoKFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkuZ2V0TmV3U3RydWN0dXJlZERvY3VtZW50UmVnaW9ucygpLmdldExlbmd0aCgpKQotCQkJCQkJCQlpZiAoIjxCPiIuZXF1YWxzKCgoU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KS5nZXROZXdTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKCkuaXRlbSgwKS5nZXRUZXh0KCkpKQotCQkJCQkJCQkJaWYgKCI8L0I+Ii5lcXVhbHMoKChTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpLmdldE5ld1N0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoKS5pdGVtKDEpLmdldFRleHQoKSkpIHsKLQkJCQkJCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCQkJCQl9Ci0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSA3IDoKLQkJCQl7Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSB7Ci0JCQkJCQlpZiAoMCA9PSAoKFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkuZ2V0T2xkU3RydWN0dXJlZERvY3VtZW50UmVnaW9ucygpLmdldExlbmd0aCgpKQotCQkJCQkJCWlmICgxID09ICgoU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KS5nZXROZXdTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKCkuZ2V0TGVuZ3RoKCkpCi0JCQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJfQotCi0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgOCA6Ci0JCQkJewotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgewotCQkJCQkJaWYgKDAgPT0gKChTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpLmdldE9sZFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoKS5nZXRMZW5ndGgoKSkKLQkJCQkJCQlpZiAoMiA9PSAoKFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkuZ2V0TmV3U3RydWN0dXJlZERvY3VtZW50UmVnaW9ucygpLmdldExlbmd0aCgpKQotCQkJCQkJCQkvL2lmICgiPEI+Ii5lcXVhbHMoKChTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpLmdldE5ld1N0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoKS5pdGVtKDApLmdldFRleHQoKSkpCi0JCQkJCQkJCS8vaWYgKCI8L0I+Ii5lcXVhbHMoKChTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpLmdldE5ld1N0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoKS5pdGVtKDEpLmdldFRleHQoKSkpIHsKLQkJCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgOSA6Ci0JCQljYXNlIDEwIDoKLQkJCQl7Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSB7Ci0JCQkJCQlpZiAoMiA9PSAoKFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkuZ2V0T2xkU3RydWN0dXJlZERvY3VtZW50UmVnaW9ucygpLmdldExlbmd0aCgpKQotCQkJCQkJCWlmICgwID09ICgoU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KS5nZXROZXdTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKCkuZ2V0TGVuZ3RoKCkpCi0JCQkJCQkJCWlmICgiPFREPiIuZXF1YWxzKCgoU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KS5nZXRPbGRTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKCkuaXRlbSgwKS5nZXRUZXh0KCkpKQotCQkJCQkJCQkJaWYgKCI8L1REPiIuZXF1YWxzKCgoU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KS5nZXRPbGRTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKCkuaXRlbSgxKS5nZXRUZXh0KCkpKQotCQkJCQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDExIDoKLQkJCWNhc2UgMTIgOgotCQkJCXsKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHsKLQkJCQkJCWlmICgyID09ICgoU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KS5nZXRPbGRTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKCkuZ2V0TGVuZ3RoKCkpCi0JCQkJCQkJaWYgKDAgPT0gKChTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpLmdldE5ld1N0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoKS5nZXRMZW5ndGgoKSkKLQkJCQkJCQkJaWYgKCI8VEQ+Ii5lcXVhbHMoKChTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpLmdldE9sZFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoKS5pdGVtKDApLmdldFRleHQoKSkpCi0JCQkJCQkJCQlpZiAoIjwvVEQ+Ii5lcXVhbHMoKChTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpLmdldE9sZFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoKS5pdGVtKDEpLmdldFRleHQoKSkpCi0JCQkJCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMTMgOgotCQkJCXsKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgUmVnaW9uc1JlcGxhY2VkRXZlbnQpIHsKLQkJCQkJCWlmICgzID09ICgoUmVnaW9uc1JlcGxhY2VkRXZlbnQpIHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KS5nZXROZXdSZWdpb25zKCkuc2l6ZSgpKQotCQkJCQkJCWlmICgzID09ICgoUmVnaW9uc1JlcGxhY2VkRXZlbnQpIHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KS5nZXRPbGRSZWdpb25zKCkuc2l6ZSgpKQotCQkJCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAxNCA6Ci0JCQkJewotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgewotCQkJCQkJaWYgKDMgPT0gKChTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpLmdldE9sZFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoKS5nZXRMZW5ndGgoKSkKLQkJCQkJCQlpZiAoMSA9PSAoKFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkuZ2V0TmV3U3RydWN0dXJlZERvY3VtZW50UmVnaW9ucygpLmdldExlbmd0aCgpKQotCQkJCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAxNSA6Ci0JCQkJewotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBSZWdpb25DaGFuZ2VkRXZlbnQpIHsKLQkJCQkJCVJlZ2lvbkNoYW5nZWRFdmVudCByZWdpb25DaGFuZ2VkRXZlbnQgPSAoUmVnaW9uQ2hhbmdlZEV2ZW50KSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudDsKLQkJCQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gZG9jdW1lbnRSZWdpb24gPSAoKFJlZ2lvbkNoYW5nZWRFdmVudCkgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpLmdldFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbigpOwotCQkJCQkJaWYgKCJiICIuZXF1YWxzKGRvY3VtZW50UmVnaW9uLmdldEZ1bGxUZXh0KHJlZ2lvbkNoYW5nZWRFdmVudC5nZXRSZWdpb24oKSkpKSB7Ci0JCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQkJfQotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMTYgOgotCQkJCXsKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgUmVnaW9uc1JlcGxhY2VkRXZlbnQpIHsKLQkJCQkJCWlmICgwID09ICgoUmVnaW9uc1JlcGxhY2VkRXZlbnQpIHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KS5nZXRPbGRSZWdpb25zKCkuc2l6ZSgpKSB7Ci0JCQkJCQkJaWYgKDEgPT0gKChSZWdpb25zUmVwbGFjZWRFdmVudCkgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpLmdldE5ld1JlZ2lvbnMoKS5zaXplKCkpIHsKLQkJCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQkJCX0KLQkJCQkJCX0KLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDE3IDoKLQkJCQl7Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSB7Ci0JCQkJCQlpZiAoMSA9PSAoKFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkuZ2V0T2xkUmVnaW9ucygpLnNpemUoKSkgewotCQkJCQkJCWlmICgzID09ICgoUmVnaW9uc1JlcGxhY2VkRXZlbnQpIHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KS5nZXROZXdSZWdpb25zKCkuc2l6ZSgpKSB7Ci0JCQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJCQl9Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAxOCA6Ci0JCQkJewotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBSZWdpb25zUmVwbGFjZWRFdmVudCkgewotCQkJCQkJaWYgKDIgPT0gKChSZWdpb25zUmVwbGFjZWRFdmVudCkgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpLmdldE9sZFJlZ2lvbnMoKS5zaXplKCkpIHsKLQkJCQkJCQlpZiAoMiA9PSAoKFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkuZ2V0TmV3UmVnaW9ucygpLnNpemUoKSkgewotCQkJCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCQkJfQotCQkJCQkJfQotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMTkgOgotCQkJCXsKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgUmVnaW9uQ2hhbmdlZEV2ZW50KSB7Ci0JCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAyMCA6Ci0JCQljYXNlIDIxIDoKLQkJCQl7Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFJlZ2lvbkNoYW5nZWRFdmVudCkgewotCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMjIgOgotCQkJCXsKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgUmVnaW9uQ2hhbmdlZEV2ZW50KSB7Ci0JCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAyMyA6Ci0JCQkJewotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgewotCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMjQgOgotCQkJCXsKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHsKLQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDI1IDoKLQkJCQl7Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSB7Ci0JCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAyNiA6Ci0JCQkJewotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgewotCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCS8vIEpTUDUKLQkJCWNhc2UgMjcgOgotCQkJCXsKLQkJCQkJLy8gY2hhbmdlZCAyMDAyLCA5LzEyIHRvIGZpdAotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBSZWdpb25zUmVwbGFjZWRFdmVudCkgewotCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMjggOgotCQkJCXsKLQkJCQkJLy8gY2hhbmdlZCAyMDAyLCA5LzEyIHRvIGZpdAotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgewotCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMjkgOgotCQkJCXsKLQkJCQkJLy8gY2hhbmdlZCAyMDAyLCA5LzEyIHRvIGZpdAotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgewotCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMzAgOgotCQkJCXsKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHsKLQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQkvLyBKU1A2Ci0JCQljYXNlIDMxIDoKLQkJCQl7Ci0JCQkJCS8vIGNoYW5nZWQgMjAwMiwgOS8xMiB0byBmaXQKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgUmVnaW9uc1JlcGxhY2VkRXZlbnQpIHsKLQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDMyIDoKLQkJCQl7Ci0JCQkJCS8vIGNoYW5nZWQgMjAwMiwgOS8xMiB0byBmaXQgLS0gdGhpcyBpcyBkZWZpbml0ZWx5IGEgY2hhbmdlCi0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSB7Ci0JCQkJCQlSZWdpb25zUmVwbGFjZWRFdmVudCByZWdpb25zUmVwbGFjZWRFdmVudCA9IChSZWdpb25zUmVwbGFjZWRFdmVudCkgc3RydWN0dXJlZERvY3VtZW50RXZlbnQ7Ci0JCQkJCQlpZiAoMSA9PSByZWdpb25zUmVwbGFjZWRFdmVudC5nZXRPbGRSZWdpb25zKCkuc2l6ZSgpKSB7Ci0JCQkJCQkJSVRleHRSZWdpb24gcmVnaW9uID0gcmVnaW9uc1JlcGxhY2VkRXZlbnQuZ2V0T2xkUmVnaW9ucygpLmdldCgwKTsKLQkJCQkJCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGRvY3VtZW50UmVnaW9uID0gcmVnaW9uc1JlcGxhY2VkRXZlbnQuZ2V0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCk7Ci0JCQkJCQkJU3RyaW5nIHRleHQgPSBkb2N1bWVudFJlZ2lvbi5nZXRUZXh0KHJlZ2lvbik7Ci0JCQkJCQkJaWYgKCI8JSBhYWEgJT4iLmVxdWFscyh0ZXh0KSkgewotCQkJCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCQkJfQotCi0JCQkJCQl9Ci0JCQkJCX0KLQkJCQkJZWxzZSBpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgewotCQkJCQkJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQgbm9kZXNSZXBsYWNlZEV2ZW50ID0gKFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudDsKLQkJCQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IHJlZ2lvbnMgPSBub2Rlc1JlcGxhY2VkRXZlbnQuZ2V0TmV3U3RydWN0dXJlZERvY3VtZW50UmVnaW9ucygpOwotCi0JCQkJCQlpZiAoMSA9PSByZWdpb25zLmdldExlbmd0aCgpKSB7Ci0JCQkJCQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiByZWdpb24gPSByZWdpb25zLml0ZW0oMCk7Ci0JCQkJCQkJU3RyaW5nIHRleHQgPSByZWdpb24uZ2V0VGV4dCgpOwotCQkJCQkJCS8vU3lzdGVtLm91dC5wcmludGxuKHRleHQpOwotCQkJCQkJCWlmICgiPGM8JSBhYWEgIi5lcXVhbHModGV4dCkpIHsKLQkJCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOwotCQkJCQkJCX0KLQkJCQkJCX0KLQotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMzMgOgotCQkJCXsKLQkJCQkJLy8gY2hhbmdlZCAyMDAyLCA5LzEyIHRvIGZpdAotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgewotCQkJCQkJLy8JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFJlZ2lvbkNoYW5nZWRFdmVudCkgewotCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMzQgOgotCQkJCXsKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHsKLQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0KLQkJCWNhc2UgMzUgOgotCQkJCXsKLQkJCQkJLy8gY2hhbmNlZCB0byBSZWdpb25zUmVwbGFjZWQgMjAwMiwgOS8xMSAoYXR0cmlidXRlIHZhbHVlIHRvIHJlZ2lvbiBjb250YWluZXIpCi0JCQkJCS8vCQkJCQlTdHJpbmcgc3RhcnRTdHJpbmcgPSAiPHA+PGltZyBzcmM9XCJmaWxlLmdpZlwiPjxwPiI7Ci0JCQkJCS8vCQkJCQlTdHJpbmcgY2hhbmdlcyA9ICI8IjsKLQkJCQkJLy8JCQkJCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8cD48aW1nIHNyYz1cImZpbGU8LmdpZlwiPjxwPiI7Ci0KLQkJCQkJLy8JCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHsKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgUmVnaW9uc1JlcGxhY2VkRXZlbnQpIHsKLQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDM2IDoKLQkJCQl7Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSB7Ci0JCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAzNyA6Ci0JCQkJewotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgewotCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMzggOgotCQkJCXsKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgUmVnaW9uQ2hhbmdlZEV2ZW50KSB7Ci0JCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAzOSA6Ci0JCQkJewotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBSZWdpb25DaGFuZ2VkRXZlbnQpIHsKLQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDQwIDoKLQkJCQl7Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSB7Ci0JCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCi0JCQljYXNlIEdFTkVSSUNfTk9ERVNfUkVQTEFDRURfRVZFTlRfQ0FTRSA6Ci0JCQkJewotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgewotCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgR0VORVJJQ19SRUdJT05TX1JFUExBQ0VEX0VWRU5UX0NBU0UgOgotCQkJCXsKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgUmVnaW9uc1JlcGxhY2VkRXZlbnQpIHsKLQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIEdFTkVSSUNfUkVHSU9OX0NIQU5HRURfRVZFTlRfQ0FTRSA6Ci0JCQkJewotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBSZWdpb25DaGFuZ2VkRXZlbnQpIHsKLQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIEdFTkVSSUNfTkVXX01PREVMX0VWRU5UX0NBU0UgOgotCQkJCXsKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgTmV3RG9jdW1lbnRFdmVudCkgewotCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgR0VORVJJQ19OT19DSEFOR0VfRVZFTlRfQ0FTRSA6Ci0JCQkJewotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBOb0NoYW5nZUV2ZW50KSB7Ci0JCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCi0JCQlkZWZhdWx0IDoKLQkJCQl7Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIE5ld0RvY3VtZW50RXZlbnQpIHsKLQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJfQotCQkJCX0KLQkJfQotCX0KLQotCS8qKgotCSAqIFN0YXJ0cyB0aGUgYXBwbGljYXRpb24uCi0JICogQHBhcmFtIGFyZ3MgYW4gYXJyYXkgb2YgY29tbWFuZC1saW5lIGFyZ3VtZW50cwotCSAqLwotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCWlmIChhcmdzLmxlbmd0aCA9PSAwKSB7Ci0JCQlydW5BbGwoKTsKLQkJfQotCQllbHNlIGlmIChhcmdzLmxlbmd0aCA9PSAxKSB7Ci0JCQlTdHJpbmcgbWV0aG9kVG9SdW4gPSBhcmdzWzBdLnRyaW0oKTsKLQkJCXJ1bk9uZShtZXRob2RUb1J1bik7Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIHZvaWQgcnVuQWxsKCkgewotCQlqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7Ci0KLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgcnVuT25lKFN0cmluZyBtZXRob2ROYW1lKSB7Ci0JCVRlc3RTdWl0ZSB0ZXN0U3VpdGUgPSBuZXcgVGVzdFN1aXRlKCk7Ci0JCVRlc3RDYXNlIHRlc3QgPSBuZXcgVW5pdFRlc3RzKG1ldGhvZE5hbWUpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdCh0ZXN0KTsKLQkJanVuaXQudGV4dHVpLlRlc3RSdW5uZXIucnVuKHRlc3RTdWl0ZSk7Ci0KLQl9Ci0KLQkvKioKLQkgKiBTZXQgdXAgYW4gWE1MIG1vZGVsCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXBYTUwoKSB7Ci0KLQkJSU1vZGVsTWFuYWdlciBtbSA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCXRyeSB7Ci0JCQlmTW9kZWwgPSBtbS5jcmVhdGVTdHJ1Y3R1cmVkRG9jdW1lbnRGb3IoImR1bW15LnhtbCIsIChJbnB1dFN0cmVhbSkgbnVsbCwgbnVsbCk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCS8vIGRvIG5vdGhpbmcsIHNpbmNlIGR1bW15Ci0JCX0KLQkJZk1vZGVsLmFkZERvY3VtZW50Q2hhbmdlZExpc3RlbmVyKHByb3h5KTsKLQotCQl0cmVlID0gbmV3IERPTU1vZGVsSW1wbCgpOwotCi0JCWlmICh0cmVlICE9IG51bGwpIHsKLQkJCWZNb2RlbC5hZGREb2N1bWVudENoYW5naW5nTGlzdGVuZXIoKElTdHJ1Y3R1cmVkRG9jdW1lbnRMaXN0ZW5lcikgdHJlZSk7Ci0JCQl0cmVlLnNldFN0cnVjdHVyZWREb2N1bWVudChmTW9kZWwpOwotCQl9Ci0KLQl9Ci0KLQkvKioKLQkgKiBTZXQgdXAgYSBKU1AgbW9kZWwKLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcEpTUCgpIHsKLQotCQlJTW9kZWxNYW5hZ2VyIG1tID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJdHJ5IHsKLQkJCWZNb2RlbCA9IG1tLmNyZWF0ZVN0cnVjdHVyZWREb2N1bWVudEZvcigiZHVtbXkuanNwIiwgKElucHV0U3RyZWFtKSBudWxsLCBudWxsKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJLy8gZG8gbm90aGluZywgc2luY2UgZHVtbXkKLQkJfQotCQlmTW9kZWwgPSBTdHJ1Y3R1cmVkRG9jdW1lbnRGYWN0b3J5LmdldE5ld1N0cnVjdHVyZWREb2N1bWVudEluc3RhbmNlKG5ldyBKU1BTb3VyY2VQYXJzZXIoKSk7Ci0KLQkJZk1vZGVsLmFkZERvY3VtZW50Q2hhbmdlZExpc3RlbmVyKHByb3h5KTsKLQotCQl0cmVlID0gbmV3IERPTU1vZGVsSW1wbCgpOwotCi0JCWlmICh0cmVlICE9IG51bGwpIHsKLQkJCWZNb2RlbC5hZGREb2N1bWVudENoYW5naW5nTGlzdGVuZXIoKElTdHJ1Y3R1cmVkRG9jdW1lbnRMaXN0ZW5lcikgdHJlZSk7Ci0JCQl0cmVlLnNldFN0cnVjdHVyZWREb2N1bWVudChmTW9kZWwpOwotCQl9Ci0KLQl9Ci0KLQkvKioKLQkgKi8KLQlwdWJsaWMgdm9pZCBzaW1wbGVUZXN0KCkgIHsKLQotCQlzZXRVcEpTUCgpOwotCQlldmVudENhc2UgPSA5OTsKLQkJU3RyaW5nIHN0YXJ0U3RyaW5nID0gIiI7Ci0JCVN0cmluZyBjaGFuZ2VzID0gIjxhPjwvYT4iOwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPGE+PC9hPiI7Ci0JCWludCBzdGFydE9mQ2hhbmdlcyA9IDA7Ci0JCWludCBsZW5ndGhUb1JlcGxhY2UgPSAwOwotCi0JCS8vCi0JCWZNb2RlbC5zZXRUZXh0KG51bGwsIHN0YXJ0U3RyaW5nKTsKLQotCQkvLwotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgc3RhcnRPZkNoYW5nZXMsIGxlbmd0aFRvUmVwbGFjZSwgY2hhbmdlcyk7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWJvb2xlYW4gcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKLQotCQlhc3NlcnRUcnVlKCJ0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7Ci0JCWFzc2VydFRydWUoImV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0KLQl9Ci0KLQkvKioKLQkgKi8KLQlwdWJsaWMgdm9pZCBzaW1wbGVUZXN0MigpICB7Ci0KLQkJc2V0VXBYTUwoKTsKLQkJZXZlbnRDYXNlID0gOTk7Ci0JCVN0cmluZyBzdGFydFN0cmluZyA9ICIiOwotCQlTdHJpbmcgY2hhbmdlcyA9ICI8YT48L2E+IjsKLQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gIjxhPjwvYT4iOwotCQlpbnQgc3RhcnRPZkNoYW5nZXMgPSAwOwotCQlpbnQgbGVuZ3RoVG9SZXBsYWNlID0gMDsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCBzdGFydFN0cmluZyk7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIHN0YXJ0T2ZDaGFuZ2VzLCBsZW5ndGhUb1JlcGxhY2UsIGNoYW5nZXMpOwotCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlib29sZWFuIHJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7Ci0KLQkJYXNzZXJ0VHJ1ZSgidGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCi0JfQotCi0JLyoqCi0JICovCi0JcHVibGljIHZvaWQgc2ltcGxlVGVzdDMoKSAgewotCi0JCXNldFVwWE1MKCk7Ci0JCWV2ZW50Q2FzZSA9IDk5OwotCQlTdHJpbmcgc3RhcnRTdHJpbmcgPSAiPGE+PC9hPiI7Ci0JCVN0cmluZyBjaGFuZ2VzID0gIiI7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8YT48L2E+IjsKLQkJaW50IHN0YXJ0T2ZDaGFuZ2VzID0gMDsKLQkJaW50IGxlbmd0aFRvUmVwbGFjZSA9IDA7Ci0KLQkJZk1vZGVsLnNldFRleHQobnVsbCwgc3RhcnRTdHJpbmcpOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCBzdGFydE9mQ2hhbmdlcywgbGVuZ3RoVG9SZXBsYWNlLCBjaGFuZ2VzKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYm9vbGVhbiByZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCi0JCWFzc2VydFRydWUoInRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQotCX0KLQotCS8qKgotCSAqIEluc2VydCB0aGUgbWV0aG9kJ3MgZGVzY3JpcHRpb24gaGVyZS4KLQkgKiBDcmVhdGlvbiBkYXRlOiAoOC8xLzIwMDEgNjoxNjowMiBQTSkKLQkgKiBAcmV0dXJuIGp1bml0LmZyYW1ld29yay5UZXN0Ci0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IFRlc3RTdWl0ZShVbml0VGVzdHMuY2xhc3MpOwotCX0KLQotCS8qKgotCSAqIEluc2VydCB0aGUgbWV0aG9kJ3MgZGVzY3JpcHRpb24gaGVyZS4KLQkgKiBDcmVhdGlvbiBkYXRlOiAoOC8xLzIwMDEgNjoyODo1OSBQTSkKLQkgKiBAZXhjZXB0aW9uIFNvdXJjZUVkaXRpbmdFeGNlcHRpb24gVGhlIGV4Y2VwdGlvbiBkZXNjcmlwdGlvbi4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0RGVsZXRlQmVnaW5uaW5nKCkgIHsKLQotCQlzZXRVcFhNTCgpOwotCQlldmVudENhc2UgPSA0OwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPEdIST4iOwotCi0JCWZNb2RlbC5zZXRUZXh0KG51bGwsICI8QUJDPjxERUY+PEdIST4iKTsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgMCwgMTAsICIiKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYm9vbGVhbiByZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCi0JCWFzc2VydFRydWUoInRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQl9Ci0KLQkvKioKLQkgKiBJbnNlcnQgdGhlIG1ldGhvZCdzIGRlc2NyaXB0aW9uIGhlcmUuCi0JICogQ3JlYXRpb24gZGF0ZTogKDgvMS8yMDAxIDY6Mjc6MzEgUE0pCi0JICogQGV4Y2VwdGlvbiBTb3VyY2VFZGl0aW5nRXhjZXB0aW9uIFRoZSBleGNlcHRpb24gZGVzY3JpcHRpb24uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdERlbGV0ZUVuZCgpICB7Ci0KLQkJc2V0VXBYTUwoKTsKLQkJZXZlbnRDYXNlID0gMzsKLQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gIjxBQkM+PERFRj4iOwotCi0JCWZNb2RlbC5zZXRUZXh0KG51bGwsICI8QUJDPjxERUY+PEdIST4iKTsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgMTAsIDUsICIiKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYm9vbGVhbiByZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCi0JCWFzc2VydFRydWUoInRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQl9Ci0KLQkvKioKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0RW1iZWRkZWQoKSAgewotCi0JCXNldFVwSlNQKCk7Ci0JCWV2ZW50Q2FzZSA9IEdFTkVSSUNfTkVXX01PREVMX0VWRU5UX0NBU0U7Ci0JCVN0cmluZyBzdGFydFN0cmluZyA9ICI8cD48aW1nIHNyYz1cImZpbGUuZ2lmXCI+PHA+IjsKLQkJU3RyaW5nIGNoYW5nZXMgPSAiPCI7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8cD48aW1nIHNyYz1cImZpbGU8LmdpZlwiPjxwPiI7Ci0JCWludCBzdGFydE9mQ2hhbmdlcyA9IDE3OwotCQlpbnQgbGVuZ3RoVG9SZXBsYWNlID0gMDsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCBzdGFydFN0cmluZyk7Ci0KLQkJZXZlbnRDYXNlID0gMzU7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIHN0YXJ0T2ZDaGFuZ2VzLCBsZW5ndGhUb1JlcGxhY2UsIGNoYW5nZXMpOwotCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlib29sZWFuIHJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7Ci0KLQkJYXNzZXJ0VHJ1ZSgicGFydCAxOiB0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7Ci0JCWFzc2VydFRydWUoInBhcnQgMTogZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQotCQlldmVudENhc2UgPSAzNjsKLQkJc3RhcnRTdHJpbmcgPSBleHBlY3RlZFN0cmluZzsKLQkJY2hhbmdlcyA9ICIlIjsKLQkJZXhwZWN0ZWRTdHJpbmcgPSAiPHA+PGltZyBzcmM9XCJmaWxlPCUuZ2lmXCI+PHA+IjsKLQkJc3RhcnRPZkNoYW5nZXMgPSAxODsKLQkJbGVuZ3RoVG9SZXBsYWNlID0gMDsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgc3RhcnRPZkNoYW5nZXMsIGxlbmd0aFRvUmVwbGFjZSwgY2hhbmdlcyk7Ci0JCXJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKLQotCQlhc3NlcnRUcnVlKCJwYXJ0IDI6IHRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgicGFydCAyOiBldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCi0JCWV2ZW50Q2FzZSA9IDM3OwotCQlzdGFydFN0cmluZyA9IGV4cGVjdGVkU3RyaW5nOwotCQljaGFuZ2VzID0gIiAiOwotCQlleHBlY3RlZFN0cmluZyA9ICI8cD48aW1nIHNyYz1cImZpbGU8JSAuZ2lmXCI+PHA+IjsKLQkJc3RhcnRPZkNoYW5nZXMgPSAxOTsKLQkJbGVuZ3RoVG9SZXBsYWNlID0gMDsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgc3RhcnRPZkNoYW5nZXMsIGxlbmd0aFRvUmVwbGFjZSwgY2hhbmdlcyk7Ci0JCXJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKLQotCQlhc3NlcnRUcnVlKCJwYXJ0IDM6IHRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgicGFydCAzOiBldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCi0JCWV2ZW50Q2FzZSA9IDM4OwotCQlzdGFydFN0cmluZyA9IGV4cGVjdGVkU3RyaW5nOwotCQljaGFuZ2VzID0gImFiICI7Ci0JCWV4cGVjdGVkU3RyaW5nID0gIjxwPjxpbWcgc3JjPVwiZmlsZTwlIGFiIC5naWZcIj48cD4iOwotCQlzdGFydE9mQ2hhbmdlcyA9IDIwOwotCQlsZW5ndGhUb1JlcGxhY2UgPSAwOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCBzdGFydE9mQ2hhbmdlcywgbGVuZ3RoVG9SZXBsYWNlLCBjaGFuZ2VzKTsKLQkJcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlyZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCi0JCWFzc2VydFRydWUoInBhcnQgNDogdGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJwYXJ0IDQ6IGV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0KLQkJZXZlbnRDYXNlID0gMzk7Ci0JCXN0YXJ0U3RyaW5nID0gZXhwZWN0ZWRTdHJpbmc7Ci0JCWNoYW5nZXMgPSAiJSI7Ci0JCWV4cGVjdGVkU3RyaW5nID0gIjxwPjxpbWcgc3JjPVwiZmlsZTwlIGFiICUuZ2lmXCI+PHA+IjsKLQkJc3RhcnRPZkNoYW5nZXMgPSAyMzsKLQkJbGVuZ3RoVG9SZXBsYWNlID0gMDsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgc3RhcnRPZkNoYW5nZXMsIGxlbmd0aFRvUmVwbGFjZSwgY2hhbmdlcyk7Ci0JCXJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKLQotCQlhc3NlcnRUcnVlKCJwYXJ0IDU6IHRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgicGFydCA1OiBldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCi0JCWV2ZW50Q2FzZSA9IDQwOwotCQlzdGFydFN0cmluZyA9IGV4cGVjdGVkU3RyaW5nOwotCQljaGFuZ2VzID0gIj4iOwotCQlleHBlY3RlZFN0cmluZyA9ICI8cD48aW1nIHNyYz1cImZpbGU8JSBhYiAlPi5naWZcIj48cD4iOwotCQlzdGFydE9mQ2hhbmdlcyA9IDI0OwotCQlsZW5ndGhUb1JlcGxhY2UgPSAwOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCBzdGFydE9mQ2hhbmdlcywgbGVuZ3RoVG9SZXBsYWNlLCBjaGFuZ2VzKTsKLQkJcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlyZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCi0JCWFzc2VydFRydWUoInBhcnQgNjogdGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJwYXJ0IDY6IGV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0KLQl9Ci0KLQkvKioKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0RW1iZWRkZWRKU1AyKCkgIHsKLQotCQlzZXRVcEpTUCgpOwotCQlldmVudENhc2UgPSBHRU5FUklDX1JFR0lPTlNfUkVQTEFDRURfRVZFTlRfQ0FTRTsKLQkJU3RyaW5nIHN0YXJ0U3RyaW5nID0gIjxhID5jPC9hPiI7Ci0JCVN0cmluZyBjaGFuZ2VzID0gIjwlPSBiICU+IjsKLQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gIjxhIDwlPSBiICU+PmM8L2E+IjsKLQkJaW50IHN0YXJ0T2ZDaGFuZ2VzID0gMzsKLQkJaW50IGxlbmd0aFRvUmVwbGFjZSA9IDA7Ci0KLQkJZk1vZGVsLnNldFRleHQobnVsbCwgc3RhcnRTdHJpbmcpOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCBzdGFydE9mQ2hhbmdlcywgbGVuZ3RoVG9SZXBsYWNlLCBjaGFuZ2VzKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYm9vbGVhbiByZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCi0JCWFzc2VydFRydWUoInRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3REZWVwRW1iZWRkZWRKU1AoKSAgewotCi0JCXNldFVwSlNQKCk7Ci0JCWV2ZW50Q2FzZSA9IEdFTkVSSUNfUkVHSU9OU19SRVBMQUNFRF9FVkVOVF9DQVNFOwotCQlTdHJpbmcgc3RhcnRTdHJpbmcgPSAiPHNjcmlwdD48YSAgID5jPC9hPjwvc2NyaXB0PiI7Ci0JCVN0cmluZyBjaGFuZ2VzID0gIjwlPSBiICU+IjsKLQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gIjxzY3JpcHQ+PGEgPCU9IGIgJT4gID5jPC9hPjwvc2NyaXB0PiI7Ci0JCWludCBzdGFydE9mQ2hhbmdlcyA9IDExOwotCQlpbnQgbGVuZ3RoVG9SZXBsYWNlID0gMDsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCBzdGFydFN0cmluZyk7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIHN0YXJ0T2ZDaGFuZ2VzLCBsZW5ndGhUb1JlcGxhY2UsIGNoYW5nZXMpOwotCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlib29sZWFuIHJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7Ci0KLQkJYXNzZXJ0VHJ1ZSgidGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCi0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gdGVzdFIgPSBmTW9kZWwuZ2V0UmVnaW9uQXRDaGFyYWN0ZXJPZmZzZXQoMTEpOwotCQlTdHJpbmcgdGVzdFRleHQgPSB0ZXN0Ui5nZXRUZXh0KCk7Ci0JCWFzc2VydFRydWUoInRleHQgcmV0cmlldmUiLCB0ZXN0VGV4dC5lcXVhbHMoIjxhIDwlPSBiICU+ICA+IikpOwotCQl0ZXN0VGV4dCA9IHRlc3RSLmdldEZ1bGxUZXh0KCk7Ci0JCWFzc2VydFRydWUoInRleHQgcmV0cmlldmUiLCB0ZXN0VGV4dC5lcXVhbHMoIjxhIDwlPSBiICU+ICA+IikpOwotCi0JCUlUZXh0UmVnaW9uTGlzdCByZWdpb25MaXN0ID0gdGVzdFIuZ2V0UmVnaW9ucygpOwotCi0JCUlUZXh0UmVnaW9uIHJlZ2lvbiA9IHJlZ2lvbkxpc3QuZ2V0KDApOwotCQl0ZXN0VGV4dCA9IHRlc3RSLmdldFRleHQocmVnaW9uKTsKLQkJYXNzZXJ0VHJ1ZSgidGV4dCByZXRyaWV2ZSIsIHRlc3RUZXh0LmVxdWFscygiPCIpKTsKLQotCQlyZWdpb24gPSByZWdpb25MaXN0LmdldCgxKTsKLQkJdGVzdFRleHQgPSB0ZXN0Ui5nZXRUZXh0KHJlZ2lvbik7Ci0JCWFzc2VydFRydWUoInRleHQgcmV0cmlldmUiLCB0ZXN0VGV4dC5lcXVhbHMoImEiKSk7Ci0JCXRlc3RUZXh0ID0gdGVzdFIuZ2V0RnVsbFRleHQocmVnaW9uKTsKLQkJYXNzZXJ0VHJ1ZSgidGV4dCByZXRyaWV2ZSIsIHRlc3RUZXh0LmVxdWFscygiYSAiKSk7Ci0KLQkJcmVnaW9uID0gcmVnaW9uTGlzdC5nZXQoMik7Ci0JCXRlc3RUZXh0ID0gdGVzdFIuZ2V0VGV4dChyZWdpb24pOwotCQlhc3NlcnRUcnVlKCJ0ZXh0IHJldHJpZXZlIiwgdGVzdFRleHQuZXF1YWxzKCI8JT0gYiAlPiIpKTsKLQkJdGVzdFRleHQgPSB0ZXN0Ui5nZXRGdWxsVGV4dChyZWdpb24pOwotCQlhc3NlcnRUcnVlKCJ0ZXh0IHJldHJpZXZlIiwgdGVzdFRleHQuZXF1YWxzKCI8JT0gYiAlPiAgIikpOwotCi0JCS8vID09PQkKLQotCQlJVGV4dFJlZ2lvbkNvbnRhaW5lciBjUmVnaW9uID0gKElUZXh0UmVnaW9uQ29udGFpbmVyKSByZWdpb247Ci0KLQkJSVRleHRSZWdpb25MaXN0IGVSZWdpb25zID0gY1JlZ2lvbi5nZXRSZWdpb25zKCk7Ci0JCUlUZXh0UmVnaW9uIGVSZWdpb24gPSBlUmVnaW9ucy5nZXQoMCk7Ci0JCXRlc3RUZXh0ID0gY1JlZ2lvbi5nZXRUZXh0KGVSZWdpb24pOwotCQlhc3NlcnRUcnVlKCJ0ZXh0IHJldHJpZXZlIiwgdGVzdFRleHQuZXF1YWxzKCI8JT0iKSk7Ci0JCXRlc3RUZXh0ID0gY1JlZ2lvbi5nZXRGdWxsVGV4dChlUmVnaW9uKTsKLQkJYXNzZXJ0VHJ1ZSgidGV4dCByZXRyaWV2ZSIsIHRlc3RUZXh0LmVxdWFscygiPCU9IikpOwotCi0JCWVSZWdpb24gPSBlUmVnaW9ucy5nZXQoMSk7Ci0JCXRlc3RUZXh0ID0gY1JlZ2lvbi5nZXRUZXh0KGVSZWdpb24pOwotCQlhc3NlcnRUcnVlKCJ0ZXh0IHJldHJpZXZlIiwgdGVzdFRleHQuZXF1YWxzKCIgYiAiKSk7Ci0JCXRlc3RUZXh0ID0gY1JlZ2lvbi5nZXRGdWxsVGV4dChlUmVnaW9uKTsKLQkJYXNzZXJ0VHJ1ZSgidGV4dCByZXRyaWV2ZSIsIHRlc3RUZXh0LmVxdWFscygiIGIgIikpOwotCi0JCWVSZWdpb24gPSBlUmVnaW9ucy5nZXQoMik7Ci0JCXRlc3RUZXh0ID0gY1JlZ2lvbi5nZXRUZXh0KGVSZWdpb24pOwotCQlhc3NlcnRUcnVlKCJ0ZXh0IHJldHJpZXZlIiwgdGVzdFRleHQuZXF1YWxzKCIlPiIpKTsKLQkJdGVzdFRleHQgPSBjUmVnaW9uLmdldEZ1bGxUZXh0KGVSZWdpb24pOwotCQlhc3NlcnRUcnVlKCJ0ZXh0IHJldHJpZXZlIiwgdGVzdFRleHQuZXF1YWxzKCIlPiIpKTsKLQotCQllUmVnaW9uID0gZVJlZ2lvbnMuZ2V0KDMpOwotCQl0ZXN0VGV4dCA9IGNSZWdpb24uZ2V0VGV4dChlUmVnaW9uKTsKLQkJYXNzZXJ0VHJ1ZSgidGV4dCByZXRyaWV2ZSIsIHRlc3RUZXh0LmVxdWFscygiIikpOwotCQl0ZXN0VGV4dCA9IGNSZWdpb24uZ2V0RnVsbFRleHQoZVJlZ2lvbik7Ci0JCWFzc2VydFRydWUoInRleHQgcmV0cmlldmUiLCB0ZXN0VGV4dC5lcXVhbHMoIiAgIikpOwotCi0JCS8vID09PT0KLQotCQlyZWdpb24gPSByZWdpb25MaXN0LmdldCgzKTsKLQkJdGVzdFRleHQgPSB0ZXN0Ui5nZXRUZXh0KHJlZ2lvbik7Ci0JCWFzc2VydFRydWUoInRleHQgcmV0cmlldmUiLCB0ZXN0VGV4dC5lcXVhbHMoIj4iKSk7Ci0JCXRlc3RUZXh0ID0gdGVzdFIuZ2V0RnVsbFRleHQocmVnaW9uKTsKLQkJYXNzZXJ0VHJ1ZSgidGV4dCByZXRyaWV2ZSIsIHRlc3RUZXh0LmVxdWFscygiPiIpKTsKLQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3REZWVwRW1iZWRkZWRKU1AyKCkgIHsKLQotCQlzZXRVcEpTUCgpOwotCQlldmVudENhc2UgPSBHRU5FUklDX1JFR0lPTlNfUkVQTEFDRURfRVZFTlRfQ0FTRTsKLQkJU3RyaW5nIHN0YXJ0U3RyaW5nID0gIjxzY3JpcHQ+PGEgICA+YzwvYT48L3NjcmlwdD4iOwotCQlTdHJpbmcgY2hhbmdlcyA9ICI8JT0gYiAlIjsKLQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gIjxzY3JpcHQ+PGEgPCU9IGIgJSAgPmM8L2E+PC9zY3JpcHQ+IjsKLQkJaW50IHN0YXJ0T2ZDaGFuZ2VzID0gMTE7Ci0JCWludCBsZW5ndGhUb1JlcGxhY2UgPSAwOwotCi0JCWZNb2RlbC5zZXRUZXh0KG51bGwsIHN0YXJ0U3RyaW5nKTsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgc3RhcnRPZkNoYW5nZXMsIGxlbmd0aFRvUmVwbGFjZSwgY2hhbmdlcyk7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWJvb2xlYW4gcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKLQotCQlhc3NlcnRUcnVlKCJ0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7Ci0JCWFzc2VydFRydWUoImV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0KLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiB0ZXN0UiA9IGZNb2RlbC5nZXRSZWdpb25BdENoYXJhY3Rlck9mZnNldCgxMSk7Ci0JCVN0cmluZyB0ZXN0VGV4dCA9IHRlc3RSLmdldFRleHQoKTsKLQkJYXNzZXJ0VHJ1ZSgidGV4dCByZXRyaWV2ZSIsIHRlc3RUZXh0LmVxdWFscygiPGEgPCU9IGIgJSAgPiIpKTsKLQkJdGVzdFRleHQgPSB0ZXN0Ui5nZXRGdWxsVGV4dCgpOwotCQlhc3NlcnRUcnVlKCJ0ZXh0IHJldHJpZXZlIiwgdGVzdFRleHQuZXF1YWxzKCI8YSA8JT0gYiAlICA+IikpOwotCi0JCUlUZXh0UmVnaW9uTGlzdCByZWdpb25MaXN0ID0gdGVzdFIuZ2V0UmVnaW9ucygpOwotCi0JCUlUZXh0UmVnaW9uIHJlZ2lvbiA9IHJlZ2lvbkxpc3QuZ2V0KDApOwotCQl0ZXN0VGV4dCA9IHRlc3RSLmdldFRleHQocmVnaW9uKTsKLQkJYXNzZXJ0VHJ1ZSgidGV4dCByZXRyaWV2ZSIsIHRlc3RUZXh0LmVxdWFscygiPCIpKTsKLQotCQlyZWdpb24gPSByZWdpb25MaXN0LmdldCgxKTsKLQkJdGVzdFRleHQgPSB0ZXN0Ui5nZXRUZXh0KHJlZ2lvbik7Ci0JCWFzc2VydFRydWUoInRleHQgcmV0cmlldmUiLCB0ZXN0VGV4dC5lcXVhbHMoImEiKSk7Ci0JCXRlc3RUZXh0ID0gdGVzdFIuZ2V0RnVsbFRleHQocmVnaW9uKTsKLQkJYXNzZXJ0VHJ1ZSgidGV4dCByZXRyaWV2ZSIsIHRlc3RUZXh0LmVxdWFscygiYSAiKSk7Ci0KLQkJcmVnaW9uID0gcmVnaW9uTGlzdC5nZXQoMik7Ci0JCXRlc3RUZXh0ID0gdGVzdFIuZ2V0VGV4dChyZWdpb24pOwotCQlhc3NlcnRUcnVlKCJ0ZXh0IHJldHJpZXZlIiwgdGVzdFRleHQuZXF1YWxzKCI8JT0gYiAlICA+IikpOwotCQl0ZXN0VGV4dCA9IHRlc3RSLmdldEZ1bGxUZXh0KHJlZ2lvbik7Ci0JCWFzc2VydFRydWUoInRleHQgcmV0cmlldmUiLCB0ZXN0VGV4dC5lcXVhbHMoIjwlPSBiICUgID4iKSk7Ci0KLQkJLy8gPT09CQotCi0JCUlUZXh0UmVnaW9uQ29udGFpbmVyIGNSZWdpb24gPSAoSVRleHRSZWdpb25Db250YWluZXIpIHJlZ2lvbjsKLQotCQlJVGV4dFJlZ2lvbkxpc3QgZVJlZ2lvbnMgPSBjUmVnaW9uLmdldFJlZ2lvbnMoKTsKLQkJSVRleHRSZWdpb24gZVJlZ2lvbiA9IGVSZWdpb25zLmdldCgwKTsKLQkJdGVzdFRleHQgPSBjUmVnaW9uLmdldFRleHQoZVJlZ2lvbik7Ci0JCWFzc2VydFRydWUoInRleHQgcmV0cmlldmUiLCB0ZXN0VGV4dC5lcXVhbHMoIjwlPSIpKTsKLQkJdGVzdFRleHQgPSBjUmVnaW9uLmdldEZ1bGxUZXh0KGVSZWdpb24pOwotCQlhc3NlcnRUcnVlKCJ0ZXh0IHJldHJpZXZlIiwgdGVzdFRleHQuZXF1YWxzKCI8JT0iKSk7Ci0KLQkJZVJlZ2lvbiA9IGVSZWdpb25zLmdldCgxKTsKLQkJdGVzdFRleHQgPSBjUmVnaW9uLmdldFRleHQoZVJlZ2lvbik7Ci0JCWFzc2VydFRydWUoInRleHQgcmV0cmlldmUiLCB0ZXN0VGV4dC5lcXVhbHMoIiBiICUgID4iKSk7Ci0JCXRlc3RUZXh0ID0gY1JlZ2lvbi5nZXRGdWxsVGV4dChlUmVnaW9uKTsKLQkJYXNzZXJ0VHJ1ZSgidGV4dCByZXRyaWV2ZSIsIHRlc3RUZXh0LmVxdWFscygiIGIgJSAgPiIpKTsKLQotCi0JCS8vID09PT0JCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdERlZXBFbWJlZGRlZEpTUDMoKSB7Ci0JCS8vIENNVkMgMjQ1NTg2Ci0JCS8vIHRoaXMgaXMgYSB0ZXN0IHRvIG1ha2Ugc3VyZSBDb250ZXh0UmVnaW9uQ29udGFpbmVyIHJldHVybnMgd2hhdCB3ZSBleHBlY3QKLQkJc2V0VXBKU1AoKTsKLQkJU3RyaW5nIHN0YXJ0U3RyaW5nID0gIjxodG1sPjxoZWFkPjxzY3JpcHQ+IDwlISBTdHJpbmcgdGVzdHZhciA9IFwidGVzdHZhclwiOyAlPiB2YXIgdGVzdCA9IDwlPSB0ZXN0dmFyICU+IDwvc2NyaXB0PjwvaGVhZD48L2h0bWw+IjsKLQkJU3RyaW5nIGV4cGVjdGVkVGV4dCA9ICI8JSEgU3RyaW5nIHRlc3R2YXIgPSBcInRlc3R2YXJcIjsgJT4iOwotCQkoKFhNTFNvdXJjZVBhcnNlcikgZk1vZGVsLmdldFBhcnNlcigpKS5hZGRCbG9ja01hcmtlcihuZXcgQmxvY2tNYXJrZXIoInNjcmlwdCIsIG51bGwsIERPTVJlZ2lvbkNvbnRleHQuQkxPQ0tfVEVYVCwgZmFsc2UpKTsgLy8kTk9OLU5MUy0xJAotCQlmTW9kZWwuc2V0VGV4dChudWxsLCBzdGFydFN0cmluZyk7Ci0KLQkJZk1vZGVsLmdldFJlZ2lvbkxpc3QoKTsKLQotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHNjcmlwdEJsb2NrUmVnaW9uID0gZk1vZGVsLmdldFJlZ2lvbkF0Q2hhcmFjdGVyT2Zmc2V0KDIxKTsKLQkJSVRleHRSZWdpb25MaXN0IGJsb2NrUmVnaW9ucyA9IHNjcmlwdEJsb2NrUmVnaW9uLmdldFJlZ2lvbnMoKTsKLQkJSVRleHRSZWdpb25Db250YWluZXIganNwRGVjbCA9IChJVGV4dFJlZ2lvbkNvbnRhaW5lcikgYmxvY2tSZWdpb25zLmdldCgxKTsKLQkJU3RyaW5nIGZ1bGxUZXh0ID0ganNwRGVjbC5nZXRGdWxsVGV4dCgpOwotCi0JCS8vYXNzZXJ0VHJ1ZSgiQ29udGV4dFJlZ2lvbkNvbnRhaW5lci5nZXRGdWxsVGV4dCgpIiwgZnVsbFRleHQuZXF1YWxzKGV4cGVjdGVkVGV4dCkpOwotCQlhc3NlcnRFcXVhbHMoIkNvbnRleHRSZWdpb25Db250YWluZXIuZ2V0RnVsbFRleHQoKSB2YWx1ZSBpbmNvcnJlY3Q6ICIsIGV4cGVjdGVkVGV4dCwgZnVsbFRleHQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RKU1AxKCkgIHsKLQotCQlzZXRVcEpTUCgpOwotCQlldmVudENhc2UgPSAyMzsKLQkJU3RyaW5nIHN0YXJ0U3RyaW5nID0gImFiY2Q8JT0gYWJjICU+ZWZnaCI7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICJhYmNkPCAlPSBhYmMgJT5lZmdoIjsKLQkJU3RyaW5nIGNoYW5nZXMgPSAiICI7Ci0JCWludCBzdGFydE9mQ2hhbmdlcyA9IDU7Ci0JCWludCBsZW5ndGhUb1JlcGxhY2UgPSAwOwotCi0JCWZNb2RlbC5zZXRUZXh0KG51bGwsIHN0YXJ0U3RyaW5nKTsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgc3RhcnRPZkNoYW5nZXMsIGxlbmd0aFRvUmVwbGFjZSwgY2hhbmdlcyk7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWJvb2xlYW4gcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKLQotCQlhc3NlcnRUcnVlKCJ0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7Ci0JCWFzc2VydFRydWUoImV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SlNQMigpICB7Ci0KLQkJc2V0VXBKU1AoKTsKLQkJZXZlbnRDYXNlID0gMjQ7Ci0JCVN0cmluZyBzdGFydFN0cmluZyA9ICJhYmNkPCUgYWJjICU+ZWZnaCI7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICJhYmNkPCAlIGFiYyAlPmVmZ2giOwotCQlTdHJpbmcgY2hhbmdlcyA9ICIgIjsKLQkJaW50IHN0YXJ0T2ZDaGFuZ2VzID0gNTsKLQkJaW50IGxlbmd0aFRvUmVwbGFjZSA9IDA7Ci0KLQkJZk1vZGVsLnNldFRleHQobnVsbCwgc3RhcnRTdHJpbmcpOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCBzdGFydE9mQ2hhbmdlcywgbGVuZ3RoVG9SZXBsYWNlLCBjaGFuZ2VzKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYm9vbGVhbiByZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCi0JCWFzc2VydFRydWUoInRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RKU1AzKCkgIHsKLQotCQlzZXRVcEpTUCgpOwotCQlldmVudENhc2UgPSAyNTsKLQkJU3RyaW5nIHN0YXJ0U3RyaW5nID0gIjwlPSBhYmMgJT4iOwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPCAlPSBhYmMgJT4iOwotCQlTdHJpbmcgY2hhbmdlcyA9ICIgIjsKLQkJaW50IHN0YXJ0T2ZDaGFuZ2VzID0gMTsKLQkJaW50IGxlbmd0aFRvUmVwbGFjZSA9IDA7Ci0KLQkJZk1vZGVsLnNldFRleHQobnVsbCwgc3RhcnRTdHJpbmcpOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCBzdGFydE9mQ2hhbmdlcywgbGVuZ3RoVG9SZXBsYWNlLCBjaGFuZ2VzKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYm9vbGVhbiByZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCi0JCWFzc2VydFRydWUoInRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SlNQNCgpICB7Ci0KLQkJc2V0VXBKU1AoKTsKLQkJZXZlbnRDYXNlID0gMjY7Ci0JCVN0cmluZyBzdGFydFN0cmluZyA9ICI8JSBhYmMgJT4iOwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPCAlIGFiYyAlPiI7Ci0JCVN0cmluZyBjaGFuZ2VzID0gIiAiOwotCQlpbnQgc3RhcnRPZkNoYW5nZXMgPSAxOwotCQlpbnQgbGVuZ3RoVG9SZXBsYWNlID0gMDsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCBzdGFydFN0cmluZyk7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIHN0YXJ0T2ZDaGFuZ2VzLCBsZW5ndGhUb1JlcGxhY2UsIGNoYW5nZXMpOwotCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlib29sZWFuIHJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7Ci0KLQkJYXNzZXJ0VHJ1ZSgidGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCX0KLQotCS8qKgotCSBHaXZlIGEgSlNQIHNjcmlwdGxldCA6Ci0JIDwlIGFhYSAlPgotCSBXaGVuIGFuIHVzZXIgdHlwZXMgIjxiYj4iIGp1c3QgYmVmb3JlCi0JIHRoZSBKU1Agc2NyaXB0bGV0IDoKLQkgKDEpIFdoZW4gJzwnIGlzIHR5cGVkLCByZWdpb25zUmVwbGFjZWQoKQotCSBpcyBjYWxsZWQgZm9yICI8JSIuCi0JICgyKSBXaGVuICdiJyBpcyB0eXBlZCwgbm9kZXNSZXBsYWNlZCgpCi0JIGlzIGNhbGxlZCBmb3IgIjw8JSIgYW5kICIgYWFhICIuCi0JICgzKSBXaGVuICdiJyBpcyB0eXBlZCBhZ2FpbiwgZmluYWxseSwKLQkgbm9kZXNSZXBsYWNlZCgpIGlzIGNhbGxlZCBmb3IKLQkgIjxiPCUgYWFhIiBhbmQgIiU+Ii4KLQkgVGhlIGVuZCBKU1AgSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBzaG91bGQgYmUKLQkgcmVwYXJzZWQgYXQgKDEpLCBidXQgbm90IHdhaXQgdW50aWwgKDMpLgotCSAKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0SlNQNSgpICB7Ci0KLQkJc2V0VXBKU1AoKTsKLQkJZXZlbnRDYXNlID0gR0VORVJJQ19ORVdfTU9ERUxfRVZFTlRfQ0FTRTsKLQkJU3RyaW5nIHN0YXJ0U3RyaW5nID0gIjwlIGFhYSAlPjxwPiI7Ci0JCVN0cmluZyBjaGFuZ2VzID0gIjwiOwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPDwlIGFhYSAlPjxwPiI7Ci0JCWludCBzdGFydE9mQ2hhbmdlcyA9IDA7Ci0JCWludCBsZW5ndGhUb1JlcGxhY2UgPSAwOwotCi0JCWZNb2RlbC5zZXRUZXh0KG51bGwsIHN0YXJ0U3RyaW5nKTsKLQotCQlldmVudENhc2UgPSAyNzsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgc3RhcnRPZkNoYW5nZXMsIGxlbmd0aFRvUmVwbGFjZSwgY2hhbmdlcyk7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWFzc2VydEVxdWFscygicGFydCAxOiB0ZXh0IHVwZGF0ZSIsIGV4cGVjdGVkU3RyaW5nLCByZXN1bHRTdHJpbmcpOwotCQlhc3NlcnRUcnVlKCJwYXJ0IDE6IGV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0KLQkJLy8gc3RlcCAyCi0JCS8vID8gZG9lcyBhc3NlcnRUcnVlIHByZXZlbnQgcmVzdCBmcm9tIGV4ZWN1dGluZyBpZiAnZmFsc2UnPwotCQkvLyBhbnM6IHllcwotCQlldmVudENhc2UgPSAyODsKLQkJc3RhcnRTdHJpbmcgPSBleHBlY3RlZFN0cmluZzsKLQkJY2hhbmdlcyA9ICJiIjsKLQkJZXhwZWN0ZWRTdHJpbmcgPSAiPGI8JSBhYWEgJT48cD4iOwotCQlzdGFydE9mQ2hhbmdlcyA9IDE7Ci0JCWxlbmd0aFRvUmVwbGFjZSA9IDA7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIHN0YXJ0T2ZDaGFuZ2VzLCBsZW5ndGhUb1JlcGxhY2UsIGNoYW5nZXMpOwotCQlyZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWFzc2VydEVxdWFscygicGFydCAyOiB0ZXh0IHVwZGF0ZSIsIGV4cGVjdGVkU3RyaW5nLCByZXN1bHRTdHJpbmcpOwotCQlhc3NlcnRUcnVlKCJwYXJ0IDI6IGV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0KLQkJZXZlbnRDYXNlID0gMjk7Ci0JCXN0YXJ0U3RyaW5nID0gZXhwZWN0ZWRTdHJpbmc7Ci0JCWNoYW5nZXMgPSAiYiI7Ci0JCWV4cGVjdGVkU3RyaW5nID0gIjxiYjwlIGFhYSAlPjxwPiI7Ci0JCXN0YXJ0T2ZDaGFuZ2VzID0gMjsKLQkJbGVuZ3RoVG9SZXBsYWNlID0gMDsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgc3RhcnRPZkNoYW5nZXMsIGxlbmd0aFRvUmVwbGFjZSwgY2hhbmdlcyk7Ci0JCXJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYXNzZXJ0RXF1YWxzKCJwYXJ0IDM6IHRleHQgdXBkYXRlIiwgZXhwZWN0ZWRTdHJpbmcsIHJlc3VsdFN0cmluZyk7Ci0JCWFzc2VydFRydWUoInBhcnQgMzogZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQotCQlldmVudENhc2UgPSAzMDsKLQkJc3RhcnRTdHJpbmcgPSBleHBlY3RlZFN0cmluZzsKLQkJY2hhbmdlcyA9ICI+IjsKLQkJZXhwZWN0ZWRTdHJpbmcgPSAiPGJiPjwlIGFhYSAlPjxwPiI7Ci0JCXN0YXJ0T2ZDaGFuZ2VzID0gMzsKLQkJbGVuZ3RoVG9SZXBsYWNlID0gMDsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgc3RhcnRPZkNoYW5nZXMsIGxlbmd0aFRvUmVwbGFjZSwgY2hhbmdlcyk7Ci0JCXJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYXNzZXJ0RXF1YWxzKCJwYXJ0IDQ6IHRleHQgdXBkYXRlIiwgZXhwZWN0ZWRTdHJpbmcsIHJlc3VsdFN0cmluZyk7Ci0JCWFzc2VydFRydWUoInBhcnQgNDogZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQl9Ci0KLQkvKioKLQkgRXhhbXBsZSA0KQotCSAKLQkgR2l2ZW4gdHdvIEpTUCBzY3JpcHRsZXRzIDoKLQkgPCUgYWFhICU+PCUgYmJiICU+Ci0JIFdoZW4gYW4gdXNlciB0eXBlcyAiPGNjY2M+IiBqdXN0IGJlZm9yZQotCSB0aGUgSlNQIHNjcmlwdGxldCwgd2F0Y2ggdGhlIElTdHJ1Y3R1cmVkRG9jdW1lbnQgZXZlbnRzCi0JIG9uIGVhY2ggY2hhcmFjdGVyIHR5cGluZy4KLQkgWW91IHdpbGwgc2VlIHRoZSBuZXh0IEpTUCBJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGlzIHJlcGFyc2VkCi0JICh0byBiZSBicm9rZW4gaW50byBvdGhlciB0eXBlIG9mIElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24pCi0JIG9uZSBieSBvbmUgb24gZWFjaCBldmVudC4KLQkgQnV0IGl0IHNob3VsZCBiZSBhdCBvbmNlIGF0IHRoZSBmaXJzdCBldmVudC4KLQkgT2xkIENvbXBvbmVudDogd3NhLndlYi5wYWdlZWRpdGluZwotCSBOZXcgQ29tcG9uZW50OiB3c2Eud2ViLnhtbGVkaXRvcgotCSAKLQkgCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEpTUDYoKSAgewotCQkvLyBjYXV0aW9uIC4uLiB3ZSdyZSByZS11c2luZyBldmVudCBjaGVja3MgZnJvbSBKU1A1Ci0KLQkJc2V0VXBKU1AoKTsKLQotCQlldmVudENhc2UgPSBHRU5FUklDX05FV19NT0RFTF9FVkVOVF9DQVNFOwotCQlTdHJpbmcgc3RhcnRTdHJpbmcgPSAiPCUgYWFhICU+PCUgYmJiICU+IjsKLQkJU3RyaW5nIGNoYW5nZXMgPSAiPCI7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8PCUgYWFhICU+PCUgYmJiICU+IjsKLQkJaW50IHN0YXJ0T2ZDaGFuZ2VzID0gMDsKLQkJaW50IGxlbmd0aFRvUmVwbGFjZSA9IDA7Ci0KLQkJZk1vZGVsLnNldFRleHQobnVsbCwgc3RhcnRTdHJpbmcpOwotCQlldmVudENhc2UgPSAzMTsKLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIHN0YXJ0T2ZDaGFuZ2VzLCBsZW5ndGhUb1JlcGxhY2UsIGNoYW5nZXMpOwotCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlib29sZWFuIHJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7Ci0JCWFzc2VydFRydWUoInBhcnQgMTogdGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJwYXJ0IDE6IGV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0KLQkJZXZlbnRDYXNlID0gMzI7Ci0JCXN0YXJ0U3RyaW5nID0gZXhwZWN0ZWRTdHJpbmc7Ci0JCWNoYW5nZXMgPSAiYyI7Ci0JCWV4cGVjdGVkU3RyaW5nID0gIjxjPCUgYWFhICU+PCUgYmJiICU+IjsKLQkJc3RhcnRPZkNoYW5nZXMgPSAxOwotCQlsZW5ndGhUb1JlcGxhY2UgPSAwOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCBzdGFydE9mQ2hhbmdlcywgbGVuZ3RoVG9SZXBsYWNlLCBjaGFuZ2VzKTsKLQkJcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlyZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCQlhc3NlcnRUcnVlKCJwYXJ0IDI6IHRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgicGFydCAyOiBldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCi0JCWV2ZW50Q2FzZSA9IDMzOwotCQlzdGFydFN0cmluZyA9IGV4cGVjdGVkU3RyaW5nOwotCQljaGFuZ2VzID0gImMiOwotCQlleHBlY3RlZFN0cmluZyA9ICI8Y2M8JSBhYWEgJT48JSBiYmIgJT4iOwotCQlzdGFydE9mQ2hhbmdlcyA9IDI7Ci0JCWxlbmd0aFRvUmVwbGFjZSA9IDA7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIHN0YXJ0T2ZDaGFuZ2VzLCBsZW5ndGhUb1JlcGxhY2UsIGNoYW5nZXMpOwotCQlyZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCXJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7Ci0JCWFzc2VydFRydWUoInBhcnQgMzogdGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJwYXJ0IDM6IGV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0KLQkJZXZlbnRDYXNlID0gMzQ7Ci0JCXN0YXJ0U3RyaW5nID0gZXhwZWN0ZWRTdHJpbmc7Ci0JCWNoYW5nZXMgPSAiPiI7Ci0JCWV4cGVjdGVkU3RyaW5nID0gIjxjYz48JSBhYWEgJT48JSBiYmIgJT4iOwotCQlzdGFydE9mQ2hhbmdlcyA9IDM7Ci0JCWxlbmd0aFRvUmVwbGFjZSA9IDA7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIHN0YXJ0T2ZDaGFuZ2VzLCBsZW5ndGhUb1JlcGxhY2UsIGNoYW5nZXMpOwotCQlyZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCXJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7Ci0JCWFzc2VydFRydWUoInBhcnQgNDogdGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJwYXJ0IDQ6IGV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0KLQl9Ci0KLQkvKioKLQkgKiB0aGlzIHRlc3QgZWFzaWx5IHJldHVybnMgIm9rIiBldmVuIHdpdGggdGhlIG5vLXNwYWNlIGJ1Zy4gSXRzIG1vc3RseSB0bwotCSAqICJoYW5kIGV4YW1pbmUiIHRoZSBzdHJ1Y3R1cmVkRG9jdW1lbnQgY3JlYXRlZCBmcm9tIHRoZSBpbml0aWFsIHNldFRleHQuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEpTUERpcmVjdGl2ZSgpICB7Ci0KLQkJc2V0VXBKU1AoKTsKLQkJZXZlbnRDYXNlID0gR0VORVJJQ19OT0RFU19SRVBMQUNFRF9FVkVOVF9DQVNFOwotCQlTdHJpbmcgc3RhcnRTdHJpbmcgPSAiPCVAaW5jbHVkZSU+IjsKLQkJU3RyaW5nIGNoYW5nZXMgPSAiVCI7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8JUBpbmNsdWRlJT5UIjsKLQkJaW50IHN0YXJ0T2ZDaGFuZ2VzID0gMTI7Ci0JCWludCBsZW5ndGhUb1JlcGxhY2UgPSAwOwotCi0JCWZNb2RlbC5zZXRUZXh0KG51bGwsIHN0YXJ0U3RyaW5nKTsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgc3RhcnRPZkNoYW5nZXMsIGxlbmd0aFRvUmVwbGFjZSwgY2hhbmdlcyk7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWJvb2xlYW4gcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKLQotCQkvLyAgPwotCQkvLwlhc3NlcnRUcnVlKHJlc3VsdCk7IC8vICYmIGV2ZW50UmVzdWx0KTsKLQotCQlhc3NlcnRUcnVlKCJ0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7Ci0JCWFzc2VydFRydWUoImV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0KLQl9Ci0KLQkvKioKLQkgKiBJbnNlcnQgdGhlIG1ldGhvZCdzIGRlc2NyaXB0aW9uIGhlcmUuCi0JICogQ3JlYXRpb24gZGF0ZTogKDgvMS8yMDAxIDY6NTM6MDggUE0pCi0JICogQGV4Y2VwdGlvbiBTb3VyY2VFZGl0aW5nRXhjZXB0aW9uIFRoZSBleGNlcHRpb24gZGVzY3JpcHRpb24uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE1ldGhvZDEwKCkgIHsKLQotCQlzZXRVcFhNTCgpOwotCQlldmVudENhc2UgPSAxMDsKLQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gIjxURD48L1REPiI7Ci0KLQkJZk1vZGVsLnNldFRleHQobnVsbCwgIjxURD48L1REPjxURD48L1REPiIpOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCA5LCA5LCAiIik7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWFzc2VydEVxdWFscyhleHBlY3RlZFN0cmluZywgcmVzdWx0U3RyaW5nKTsKLQkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQl9Ci0KLQkvKioKLQkgKiBJbnNlcnQgdGhlIG1ldGhvZCdzIGRlc2NyaXB0aW9uIGhlcmUuCi0JICogQ3JlYXRpb24gZGF0ZTogKDgvMi8yMDAxIDEwOjU2OjA0IEFNKQotCSAqIEBleGNlcHRpb24gU291cmNlRWRpdGluZ0V4Y2VwdGlvbiBUaGUgZXhjZXB0aW9uIGRlc2NyaXB0aW9uLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RNZXRob2QxMSgpICB7Ci0KLQkJc2V0VXBYTUwoKTsKLQkJZXZlbnRDYXNlID0gMTE7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8WFhYPjxURD48L1REPjxYWFg+IjsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCAiPFhYWD48VEQ+PC9URD48VEQ+PC9URD48WFhYPiIpOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCA1LCA5LCAiIik7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWFzc2VydEVxdWFscyhleHBlY3RlZFN0cmluZywgcmVzdWx0U3RyaW5nKTsKLQkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQl9Ci0KLQkvKioKLQkgKiBJbnNlcnQgdGhlIG1ldGhvZCdzIGRlc2NyaXB0aW9uIGhlcmUuCi0JICogQ3JlYXRpb24gZGF0ZTogKDgvMi8yMDAxIDEwOjU5OjM5IEFNKQotCSAqIEBleGNlcHRpb24gU291cmNlRWRpdGluZ0V4Y2VwdGlvbiBUaGUgZXhjZXB0aW9uIGRlc2NyaXB0aW9uLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RNZXRob2QxMigpICB7Ci0KLQkJc2V0VXBYTUwoKTsKLQkJZXZlbnRDYXNlID0gMTI7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8WFhYPjxURD48L1REPjxYWFg+IjsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCAiPFhYWD48VEQ+PC9URD48VEQ+PC9URD48WFhYPiIpOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCAxNCwgOSwgIiIpOwotCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlhc3NlcnRFcXVhbHMoZXhwZWN0ZWRTdHJpbmcsIHJlc3VsdFN0cmluZyk7Ci0JCWFzc2VydFRydWUoImV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0JfQotCi0JLyoqCi0JICogSW5zZXJ0IHRoZSBtZXRob2QncyBkZXNjcmlwdGlvbiBoZXJlLgotCSAqIENyZWF0aW9uIGRhdGU6ICg4LzIvMjAwMSAxMTowMDo1OSBBTSkKLQkgKiBAZXhjZXB0aW9uIFNvdXJjZUVkaXRpbmdFeGNlcHRpb24gVGhlIGV4Y2VwdGlvbiBkZXNjcmlwdGlvbi4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0TWV0aG9kMTMoKSAgewotCi0JCXNldFVwWE1MKCk7Ci0JCWV2ZW50Q2FzZSA9IDEzOwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPEFCQz48SktMPjxHSEk+IjsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCAiPEFCQz48REVGPjxHSEk+Iik7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIDUsIDUsICI8SktMPiIpOwotCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlhc3NlcnRFcXVhbHMoZXhwZWN0ZWRTdHJpbmcsIHJlc3VsdFN0cmluZyk7Ci0JCWFzc2VydFRydWUoImV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0JfQotCi0JLyoqCi0JICogSW5zZXJ0IHRoZSBtZXRob2QncyBkZXNjcmlwdGlvbiBoZXJlLgotCSAqIENyZWF0aW9uIGRhdGU6ICg4LzIvMjAwMSAxMTowMjoxOSBBTSkKLQkgKiBAZXhjZXB0aW9uIFNvdXJjZUVkaXRpbmdFeGNlcHRpb24gVGhlIGV4Y2VwdGlvbiBkZXNjcmlwdGlvbi4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0TWV0aG9kMTQoKSAgewotCi0JCXNldFVwWE1MKCk7Ci0JCWV2ZW50Q2FzZSA9IDE0OwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPGE+XHJcciAgPC9hPiI7Ci0KLQkJZk1vZGVsLnNldFRleHQobnVsbCwgIjxhPlxyPGI+XHIgIDwvYT4iKTsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgNCwgMywgIiIpOwotCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlhc3NlcnRFcXVhbHMoZXhwZWN0ZWRTdHJpbmcsIHJlc3VsdFN0cmluZyk7Ci0JCWFzc2VydFRydWUoImV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0JfQotCi0JLyoqCi0JICogSW5zZXJ0IHRoZSBtZXRob2QncyBkZXNjcmlwdGlvbiBoZXJlLgotCSAqIENyZWF0aW9uIGRhdGU6ICg4LzIvMjAwMSAxMTowMzo1MyBBTSkKLQkgKiBAZXhjZXB0aW9uIFNvdXJjZUVkaXRpbmdFeGNlcHRpb24gVGhlIGV4Y2VwdGlvbiBkZXNjcmlwdGlvbi4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0TWV0aG9kMTUoKSAgewotCi0JCXNldFVwWE1MKCk7Ci0JCWV2ZW50Q2FzZSA9IDE1OwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPGE+PGIgPjwvYj48L2E+IjsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCAiPGE+PGI+PC9iPjwvYT4iKTsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgNSwgMCwgIiAiKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYXNzZXJ0RXF1YWxzKGV4cGVjdGVkU3RyaW5nLCByZXN1bHRTdHJpbmcpOwotCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCX0KLQotCS8qKgotCSAqIEluc2VydCB0aGUgbWV0aG9kJ3MgZGVzY3JpcHRpb24gaGVyZS4KLQkgKiBDcmVhdGlvbiBkYXRlOiAoOC8yLzIwMDEgMTE6MDU6MjcgQU0pCi0JICogQGV4Y2VwdGlvbiBTb3VyY2VFZGl0aW5nRXhjZXB0aW9uIFRoZSBleGNlcHRpb24gZGVzY3JpcHRpb24uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE1ldGhvZDE2KCkgIHsKLQotCQlzZXRVcFhNTCgpOwotCQlldmVudENhc2UgPSAxNjsKLQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gIjxhPjxiIHo+PC9iPjwvYT4iOwotCi0JCWZNb2RlbC5zZXRUZXh0KG51bGwsICI8YT48YiA+PC9iPjwvYT4iKTsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgNiwgMCwgInoiKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYXNzZXJ0RXF1YWxzKGV4cGVjdGVkU3RyaW5nLCByZXN1bHRTdHJpbmcpOwotCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCX0KLQotCS8qKgotCSAqIEluc2VydCB0aGUgbWV0aG9kJ3MgZGVzY3JpcHRpb24gaGVyZS4KLQkgKiBDcmVhdGlvbiBkYXRlOiAoOC8yLzIwMDEgMTE6MDY6MzMgQU0pCi0JICogQGV4Y2VwdGlvbiBTb3VyY2VFZGl0aW5nRXhjZXB0aW9uIFRoZSBleGNlcHRpb24gZGVzY3JpcHRpb24uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE1ldGhvZDE3KCkgIHsKLQotCQlzZXRVcFhNTCgpOwotCQlldmVudENhc2UgPSAxNzsKLQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gIjxhPjxiIHo9XCJ0XCI+PC9iPjwvYT4iOwotCi0JCWZNb2RlbC5zZXRUZXh0KG51bGwsICI8YT48YiB6PjwvYj48L2E+Iik7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIDYsIDEsICJ6PVwidFwiIik7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWFzc2VydEVxdWFscyhleHBlY3RlZFN0cmluZywgcmVzdWx0U3RyaW5nKTsKLQkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQl9Ci0KLQkvKioKLQkgKiBJbnNlcnQgdGhlIG1ldGhvZCdzIGRlc2NyaXB0aW9uIGhlcmUuCi0JICogQ3JlYXRpb24gZGF0ZTogKDgvMi8yMDAxIDExOjA5OjE3IEFNKQotCSAqIEBleGNlcHRpb24gU291cmNlRWRpdGluZ0V4Y2VwdGlvbiBUaGUgZXhjZXB0aW9uIGRlc2NyaXB0aW9uLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RNZXRob2QxOCgpICB7Ci0KLQkJc2V0VXBYTUwoKTsKLQkJZXZlbnRDYXNlID0gMTg7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8YT48YyB6PjwvYj48L2E+IjsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCAiPGE+PGIgej48L2I+PC9hPiIpOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCA0LCAzLCAiYyB6Iik7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWFzc2VydEVxdWFscyhleHBlY3RlZFN0cmluZywgcmVzdWx0U3RyaW5nKTsKLQkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQl9Ci0KLQkvKioKLQkgKiBJbnNlcnQgdGhlIG1ldGhvZCdzIGRlc2NyaXB0aW9uIGhlcmUuCi0JICogQ3JlYXRpb24gZGF0ZTogKDgvMi8yMDAxIDExOjEwOjMwIEFNKQotCSAqIEBleGNlcHRpb24gU291cmNlRWRpdGluZ0V4Y2VwdGlvbiBUaGUgZXhjZXB0aW9uIGRlc2NyaXB0aW9uLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RNZXRob2QxOSgpICB7Ci0KLQkJZXZlbnRDYXNlID0gMTk7Ci0JCXNldFVwSlNQKCk7Ci0JCWZNb2RlbC5zZXRUZXh0KG51bGwsICI8Qk9EWT5ccjxJTUcgc3JjPVwiPCU9XHI8L0JPRFk+XHIiKTsKLQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gIjxCT0RZPlxyPElNRyBzcmM9XCI8JT1RXHI8L0JPRFk+XHIiOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCAyMCwgMCwgIlEiKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYXNzZXJ0RXF1YWxzKGV4cGVjdGVkU3RyaW5nLCByZXN1bHRTdHJpbmcpOwotCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCi0JfQotCi0JLyoqCi0JICogSW5zZXJ0IHRoZSBtZXRob2QncyBkZXNjcmlwdGlvbiBoZXJlLgotCSAqIENyZWF0aW9uIGRhdGU6ICg4LzIvMjAwMSAxMToxMjowNSBBTSkKLQkgKiBAZXhjZXB0aW9uIFNvdXJjZUVkaXRpbmdFeGNlcHRpb24gVGhlIGV4Y2VwdGlvbiBkZXNjcmlwdGlvbi4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0TWV0aG9kMjAoKSAgewotCi0JCXNldFVwSlNQKCk7Ci0KLQkJZXZlbnRDYXNlID0gMjA7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8U1RZTEUgVFlQRT1cInRleHQvY3NzXCI+XHI8IS0tXHJCT0RZIHtcclxyfS0tPlxyPC9TVFlMRT5cciI7Ci0KLQkJZk1vZGVsLnNldFRleHQobnVsbCwgIjxTVFlMRSBUWVBFPVwidGV4dC9jc3NcIj5ccjwhLS1cci0tPlxyPC9TVFlMRT5cciIpOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCAyOCwgMSwgIlxyQk9EWSB7XHJccn0iKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYXNzZXJ0RXF1YWxzKGV4cGVjdGVkU3RyaW5nLCByZXN1bHRTdHJpbmcpOwotCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCX0KLQotCS8qKgotCSAqIEluc2VydCB0aGUgbWV0aG9kJ3MgZGVzY3JpcHRpb24gaGVyZS4KLQkgKiBDcmVhdGlvbiBkYXRlOiAoOC8yLzIwMDEgMTE6MzI6MjMgQU0pCi0JICogQGV4Y2VwdGlvbiBTb3VyY2VFZGl0aW5nRXhjZXB0aW9uIFRoZSBleGNlcHRpb24gZGVzY3JpcHRpb24uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE1ldGhvZDIxKCkgIHsKLQotCQlzZXRVcEpTUCgpOwotCi0JCWV2ZW50Q2FzZSA9IDIxOwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPCFET0NUWVBFIEhUTUwgUFVCTElDIFwiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU5cIiBcIlwiPlxyPEhUTUw+XHI8SEVBRD5cciAgICAgIDxNRVRBIGNvbnRlbnQ9XCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMVwiIGh0dHAtZXF1aXY9XCJDb250ZW50LVR5cGVcIj5ccjxNRVRBIG5hbWU9XCJHRU5FUkFUT1JcIiBjb250ZW50PVwiSUJNIFdlYlNwaGVyZSBQYWdlIERlc2lnbmVyIFY0LjEuMCBmb3IgV2luZG93c1wiPlxyPE1FVEEgY29udGVudD1cInRleHQvY3NzXCIgaHR0cC1lcXVpdj1cIkNvbnRlbnQtU3R5bGUtVHlwZVwiPlxyPFRJVExFPjwvVElUTEU+XHI8U1RZTEUgVFlQRT1cInRleHQvY3NzXCI+XHI8IS0tXHJCT0RZIHtcclxyfS0tPlxyPC9TVFlMRT5cciI7Ci0KLQkJZk1vZGVsLnNldFRleHQobnVsbCwgIjwhRE9DVFlQRSBIVE1MIFBVQkxJQyBcIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOXCIgXCJcIj5ccjxIVE1MPlxyPEhFQUQ+XHIgICAgICA8TUVUQSBjb250ZW50PVwidGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTFcIiBodHRwLWVxdWl2PVwiQ29udGVudC1UeXBlXCI+XHI8TUVUQSBuYW1lPVwiR0VORVJBVE9SXCIgY29udGVudD1cIklCTSBXZWJTcGhlcmUgUGFnZSBEZXNpZ25lciBWNC4xLjAgZm9yIFdpbmRvd3NcIj5ccjxNRVRBIGNvbnRlbnQ9XCJ0ZXh0L2Nzc1wiIGh0dHAtZXF1aXY9XCJDb250ZW50LVN0eWxlLVR5cGVcIj5ccjxUSVRMRT48L1RJVExFPlxyPFNUWUxFIFRZUEU9XCJ0ZXh0L2Nzc1wiPlxyPCEtLVxyLS0+XHI8L1NUWUxFPlxyIik7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIDM0MywgMSwgIlxyQk9EWSB7XHJccn0iKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYXNzZXJ0RXF1YWxzKGV4cGVjdGVkU3RyaW5nLCByZXN1bHRTdHJpbmcpOwotCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCX0KLQotCS8qKgotCSAqIEluc2VydCB0aGUgbWV0aG9kJ3MgZGVzY3JpcHRpb24gaGVyZS4KLQkgKiBDcmVhdGlvbiBkYXRlOiAoOC8xLzIwMDEgNjo0NToyOSBQTSkKLQkgKiBAZXhjZXB0aW9uIFNvdXJjZUVkaXRpbmdFeGNlcHRpb24gVGhlIGV4Y2VwdGlvbiBkZXNjcmlwdGlvbi4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0TWV0aG9kOSgpICB7Ci0KLQkJc2V0VXBYTUwoKTsKLQkJZXZlbnRDYXNlID0gOTsKLQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gIjxURD48L1REPiI7Ci0KLQkJZk1vZGVsLnNldFRleHQobnVsbCwgIjxURD48L1REPjxURD48L1REPiIpOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCAwLCA5LCAiIik7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWFzc2VydEVxdWFscyhleHBlY3RlZFN0cmluZywgcmVzdWx0U3RyaW5nKTsKLQkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQl9Ci0KLQkvKioKLQkgKiBJbnNlcnQgdGhlIG1ldGhvZCdzIGRlc2NyaXB0aW9uIGhlcmUuCi0JICogQ3JlYXRpb24gZGF0ZTogKDgvMS8yMDAxIDY6NDU6MjkgUE0pCi0JICogQGV4Y2VwdGlvbiBTb3VyY2VFZGl0aW5nRXhjZXB0aW9uIFRoZSBleGNlcHRpb24gZGVzY3JpcHRpb24uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE1ldGhvZEF0dHJpYnV0ZU5hbWVSZXBsYWNlMSgpICB7Ci0KLQkJLy90ZXN0RXZlbnQgPSAyMjsKLQkJLy90YWdzID0gIjx0YWdOYW1lIGFiYz1cImJzZlwiPiI7Ci0JCS8vdGVzdFN0cnVjdHVyZWREb2N1bWVudFJlcGxhY2VtZW50KHRlc3RFdmVudCwgdGFncywgImFiY2RlIiwiPHRhZ05hbWUgYWJjZGU9XCJic2ZcIj4iLCA5LCAzKTsKLQotCQlzZXRVcFhNTCgpOwotCQlldmVudENhc2UgPSAyMjsKLQkJU3RyaW5nIHN0YXJ0U3RyaW5nID0gIjx0YWdOYW1lIGFiYz1cImJzZlwiPiI7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8dGFnTmFtZSBhYmNkZT1cImJzZlwiPiI7Ci0JCVN0cmluZyBjaGFuZ2VzID0gImFiY2RlIjsKLQkJaW50IHN0YXJ0T2ZDaGFuZ2VzID0gOTsKLQkJaW50IGxlbmd0aFRvUmVwbGFjZSA9IDM7Ci0KLQkJZk1vZGVsLnNldFRleHQobnVsbCwgc3RhcnRTdHJpbmcpOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCBzdGFydE9mQ2hhbmdlcywgbGVuZ3RoVG9SZXBsYWNlLCBjaGFuZ2VzKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYXNzZXJ0RXF1YWxzKGV4cGVjdGVkU3RyaW5nLCByZXN1bHRTdHJpbmcpOwotCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCX0KLQotCS8qKgotCSAqIEluc2VydCB0aGUgbWV0aG9kJ3MgZGVzY3JpcHRpb24gaGVyZS4KLQkgKiBDcmVhdGlvbiBkYXRlOiAoOC8xLzIwMDEgNjozNTo0MSBQTSkKLQkgKiBAZXhjZXB0aW9uIFNvdXJjZUVkaXRpbmdFeGNlcHRpb24gVGhlIGV4Y2VwdGlvbiBkZXNjcmlwdGlvbi4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kaWZ5TWlkZGxlKCkgIHsKLQotCQlzZXRVcFhNTCgpOwotCQlldmVudENhc2UgPSA1OwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPEFCQz48SktMPjxHSEk+IjsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCAiPEFCQz48REVGPjxHSEk+Iik7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIDAsIDE1LCAiPEFCQz48SktMPjxHSEk+Iik7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWFzc2VydEVxdWFscyhleHBlY3RlZFN0cmluZywgcmVzdWx0U3RyaW5nKTsKLQkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQl9Ci0KLQkvKioKLQkgKiBJbnNlcnQgdGhlIG1ldGhvZCdzIGRlc2NyaXB0aW9uIGhlcmUuCi0JICogQ3JlYXRpb24gZGF0ZTogKDgvMS8yMDAxIDY6MDY6MzMgUE0pCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE5vQ2hhbmdlMSgpICB7Ci0KLQkJc2V0VXBYTUwoKTsKLQkJZXZlbnRDYXNlID0gMTsKLQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gIjxBQkM+PERFRj48R0hJPiI7Ci0KLQkJZk1vZGVsLnNldFRleHQobnVsbCwgIjxBQkM+PERFRj48R0hJPiIpOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCAxMCwgMCwgIiIpOwotCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlhc3NlcnRFcXVhbHMoZXhwZWN0ZWRTdHJpbmcsIHJlc3VsdFN0cmluZyk7Ci0JCWFzc2VydFRydWUoImV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0JfQotCi0JLyoqCi0JICogSW5zZXJ0IHRoZSBtZXRob2QncyBkZXNjcmlwdGlvbiBoZXJlLgotCSAqIENyZWF0aW9uIGRhdGU6ICg4LzEvMjAwMSA2OjI2OjA1IFBNKQotCSAqIEBleGNlcHRpb24gU291cmNlRWRpdGluZ0V4Y2VwdGlvbiBUaGUgZXhjZXB0aW9uIGRlc2NyaXB0aW9uLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3ROb0NoYW5nZTIoKSAgewotCi0JCXNldFVwWE1MKCk7Ci0JCWV2ZW50Q2FzZSA9IDI7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8QUJDPjxERUY+PEdIST4iOwotCi0JCWZNb2RlbC5zZXRUZXh0KG51bGwsICI8QUJDPjxERUY+PEdIST4iKTsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgMCwgMTUsICI8QUJDPjxERUY+PEdIST4iKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYXNzZXJ0RXF1YWxzKGV4cGVjdGVkU3RyaW5nLCByZXN1bHRTdHJpbmcpOwotCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCX0KLQotCS8qKgotCSAqIEluc2VydCB0aGUgbWV0aG9kJ3MgZGVzY3JpcHRpb24gaGVyZS4KLQkgKiBDcmVhdGlvbiBkYXRlOiAoOC8xLzIwMDEgNjozODoyNSBQTSkKLQkgKiBAZXhjZXB0aW9uIFNvdXJjZUVkaXRpbmdFeGNlcHRpb24gVGhlIGV4Y2VwdGlvbiBkZXNjcmlwdGlvbi4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0U2ltaWxhclN0YXJ0KCkgIHsKLQotCQlzZXRVcFhNTCgpOwotCQlldmVudENhc2UgPSA2OwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPFA+PEI+PC9CPjxCPjwvQj48L1A+IjsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCAiPFA+PEI+PC9CPjwvUD4iKTsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgMywgMCwgIjxCPjwvQj4iKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYXNzZXJ0RXF1YWxzKGV4cGVjdGVkU3RyaW5nLCByZXN1bHRTdHJpbmcpOwotCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCX0KLQotCS8qKgotCSAqIEluc2VydCB0aGUgbWV0aG9kJ3MgZGVzY3JpcHRpb24gaGVyZS4KLQkgKiBDcmVhdGlvbiBkYXRlOiAoOC8xLzIwMDEgNjo0MzoyOSBQTSkKLQkgKiBAZXhjZXB0aW9uIFNvdXJjZUVkaXRpbmdFeGNlcHRpb24gVGhlIGV4Y2VwdGlvbiBkZXNjcmlwdGlvbi4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0U2ltaWxhclN0YXJ0RW5kKCkgIHsKLQotCQlzZXRVcFhNTCgpOwotCQlldmVudENhc2UgPSA4OwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPFA+PEI+PEI+PC9CPjwvQj48L1A+IjsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCAiPFA+PEI+PC9CPjwvUD4iKTsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgNiwgMCwgIjxCPjwvQj4iKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYXNzZXJ0RXF1YWxzKGV4cGVjdGVkU3RyaW5nLCByZXN1bHRTdHJpbmcpOwotCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCX0KLQotCS8qKgotCSAqIEluc2VydCB0aGUgbWV0aG9kJ3MgZGVzY3JpcHRpb24gaGVyZS4KLQkgKiBDcmVhdGlvbiBkYXRlOiAoOC8xLzIwMDEgNjo0MTo0NiBQTSkKLQkgKiBAZXhjZXB0aW9uIFNvdXJjZUVkaXRpbmdFeGNlcHRpb24gVGhlIGV4Y2VwdGlvbiBkZXNjcmlwdGlvbi4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0U2ltaWxpYXJFbmQoKSAgewotCi0JCXNldFVwWE1MKCk7Ci0JCWV2ZW50Q2FzZSA9IDc7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8UD48Qj48L0I+PFA+PFA+IjsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCAiPFA+PEI+PC9CPjxQPiIpOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCAxMCwgMCwgIjxQPiIpOwotCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlhc3NlcnRFcXVhbHMoZXhwZWN0ZWRTdHJpbmcsIHJlc3VsdFN0cmluZyk7Ci0JCWFzc2VydFRydWUoImV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0JfQotCi0JLyoqCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFRhZ1JlRGV0ZWN0aW9uKCkgIHsKLQotCQlzZXRVcEpTUCgpOwotCQkvLyAobnNkKSAyMDAzLjEyLjEwIC0gY2hhbmdlZCBmcm9tIE5vZGVzUmVwbGFjZWQgdG8gUmVnaW9uc1JlcGxhY2VkIHNpbmNlIHRoZSBzdGFydCBjb25kaXRpb24gd2FzIGNoYW5nZWQKLQkJLy8gZnJvbSBiZWluZyAzIGRvY3VtZW50IHJlZ2lvbnMgdG8gNCBzaW5jZSAic2NyaXB0IiBpcyBub3QgJ25lc3RhYmxlJwotCQkvL2V2ZW50Q2FzZSA9IEdFTkVSSUNfUkVHSU9OU19SRVBMQUNFRF9FVkVOVF9DQVNFOwotCQkKLQkJLy8gcmV2ZXJ0ZWQgMjAwNC4wNC4wNQotCQlldmVudENhc2UgPSBHRU5FUklDX05PREVTX1JFUExBQ0VEX0VWRU5UX0NBU0U7Ci0vLwkJZXZlbnRDYXNlID0gR0VORVJJQ19SRUdJT05TX1JFUExBQ0VEX0VWRU5UX0NBU0U7Ci0JCVN0cmluZyBzdGFydFN0cmluZyA9ICI8cD50ZXN0PDxTQ1JJUFQ+IjsKLQkJU3RyaW5nIGNoYW5nZXMgPSAiUyI7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8cD50ZXN0PFM8U0NSSVBUPiI7Ci0JCWludCBzdGFydE9mQ2hhbmdlcyA9IDg7Ci0JCWludCBsZW5ndGhUb1JlcGxhY2UgPSAwOwotCi0JCWZNb2RlbC5zZXRUZXh0KG51bGwsIHN0YXJ0U3RyaW5nKTsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgc3RhcnRPZkNoYW5nZXMsIGxlbmd0aFRvUmVwbGFjZSwgY2hhbmdlcyk7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWFzc2VydEVxdWFscyhleHBlY3RlZFN0cmluZywgcmVzdWx0U3RyaW5nKTsKLQkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQotCX0KLQotCS8qKgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RUYWdSZURldGVjdGlvbjIoKSAgewotCi0JCXNldFVwSlNQKCk7Ci0JCWV2ZW50Q2FzZSA9IEdFTkVSSUNfUkVHSU9OX0NIQU5HRURfRVZFTlRfQ0FTRTsKLQkJU3RyaW5nIHN0YXJ0U3RyaW5nID0gIjxwPnRlc3Q8PFNDUklQVD4iOwotCQlTdHJpbmcgY2hhbmdlcyA9ICJTIjsKLQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gIjxwPnRlc3Q8PFNDUklQVFM+IjsKLQkJaW50IHN0YXJ0T2ZDaGFuZ2VzID0gMTU7Ci0JCWludCBsZW5ndGhUb1JlcGxhY2UgPSAwOwotCi0JCWZNb2RlbC5zZXRUZXh0KG51bGwsIHN0YXJ0U3RyaW5nKTsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgc3RhcnRPZkNoYW5nZXMsIGxlbmd0aFRvUmVwbGFjZSwgY2hhbmdlcyk7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWFzc2VydEVxdWFscyhleHBlY3RlZFN0cmluZywgcmVzdWx0U3RyaW5nKTsKLQkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQotCX0KLQotCS8qKgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RUYWdSZURldGVjdGlvbjMoKSAgewotCi0JCXNldFVwSlNQKCk7Ci0JCWV2ZW50Q2FzZSA9IEdFTkVSSUNfTk9ERVNfUkVQTEFDRURfRVZFTlRfQ0FTRTsKLQkJU3RyaW5nIHN0YXJ0U3RyaW5nID0gIjxwPnRlc3Q8dGVzdD4iOwotCQlTdHJpbmcgY2hhbmdlcyA9ICIlIjsKLQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gIjxwPnRlc3Q8JXRlc3Q+IjsKLQkJaW50IHN0YXJ0T2ZDaGFuZ2VzID0gODsKLQkJaW50IGxlbmd0aFRvUmVwbGFjZSA9IDA7Ci0KLQkJZk1vZGVsLnNldFRleHQobnVsbCwgc3RhcnRTdHJpbmcpOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCBzdGFydE9mQ2hhbmdlcywgbGVuZ3RoVG9SZXBsYWNlLCBjaGFuZ2VzKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYXNzZXJ0RXF1YWxzKGV4cGVjdGVkU3RyaW5nLCByZXN1bHRTdHJpbmcpOwotCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCi0JfQotCi0JLyoqCi0JICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQotCSAqLwotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnRlYXJEb3duKCk7Ci0JCWlmIChmTW9kZWwgIT0gbnVsbCkKLQkJCWZNb2RlbC5yZW1vdmVEb2N1bWVudENoYW5nZWRMaXN0ZW5lcihwcm94eSk7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQotCSAqLwotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnNldFVwKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFBhZ2VEaXJlY3RpdmUoKSAgewotCQlib29sZWFuIHZlcmJvc2UgPSBmYWxzZTsKLQkJc2V0VXBKU1AoKTsKLQkJZXZlbnRDYXNlID0gOTk5OyAvL0dFTkVSSUNfTk9ERVNfUkVQTEFDRURfRVZFTlRfQ0FTRTsKLQkJU3RyaW5nIHN0YXJ0U3RyaW5nID0gIjwlQHBhZ2UgbGFuZz1cImphdmFcIiA8U0NSSVBUPnZhciA8JSB0ZXN0ICU+IFN0cmluZzwvU0NSSVBUPiI7Ci0JCVN0cmluZyBjaGFuZ2VzID0gInMiOwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPCVAcGFnZSBsYW5nPVwiamF2YXNcIiA8U0NSSVBUPnZhciA8JSB0ZXN0ICU+IFN0cmluZzwvU0NSSVBUPiI7Ci0JCWludCBzdGFydE9mQ2hhbmdlcyA9IDE4OwotCQlpbnQgbGVuZ3RoVG9SZXBsYWNlID0gMDsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCBzdGFydFN0cmluZyk7Ci0KLQkJaWYgKHZlcmJvc2UpIHsKLQkJCURlYnVnLmR1bXAoZk1vZGVsLCB0cnVlKTsKLQkJfQotCi0JCVN0cnVjdHVyZWREb2N1bWVudEV2ZW50IHN0cnVjdHVyZWREb2N1bWVudEV2ZW50ID0gZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIHN0YXJ0T2ZDaGFuZ2VzLCBsZW5ndGhUb1JlcGxhY2UsIGNoYW5nZXMpOwotCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlib29sZWFuIHJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7Ci0KLQkJLy8JYXNzZXJ0VHJ1ZShyZXN1bHQpOyAvLyAmJiBldmVudFJlc3VsdCk7Ci0JCWFzc2VydFRydWUoInRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJLy9hc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCi0JCWlmICh2ZXJib3NlKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigic3RydWN0dXJlZCBkb2N1bWVudDoiKTsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQgPSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCURlYnVnLmR1bXAoZG9jdW1lbnQsIHRydWUpOwotCQl9Ci0KLQkJLy8gbm93IGRlbGV0ZSBxdW90ZQotCQljaGFuZ2VzID0gIiI7Ci0JCWV4cGVjdGVkU3RyaW5nID0gIjwlQHBhZ2UgbGFuZz1cImphdmFzXCIgPFNDUklQVD52YXIgPCUgdGVzdCAlPiBTdHJpbmc8L1NDUklQVD4iOwotCQlzdGFydE9mQ2hhbmdlcyA9IDE5OwotCQlsZW5ndGhUb1JlcGxhY2UgPSAxOwotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgc3RhcnRPZkNoYW5nZXMsIGxlbmd0aFRvUmVwbGFjZSwgY2hhbmdlcyk7Ci0JCXJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0JCWFzc2VydFRydWUoInRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQotCQlpZiAodmVyYm9zZSkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oInN0cnVjdHVyZWQgZG9jdW1lbnQ6Iik7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50ID0gc3RydWN0dXJlZERvY3VtZW50RXZlbnQuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlEZWJ1Zy5kdW1wKGRvY3VtZW50LCB0cnVlKTsKLQkJfQotCi0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3BhZ2VkaXJlY3RpdmUvVGVzdFBhZ2VEaXJlY3RpdmUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvcGFnZWRpcmVjdGl2ZS9UZXN0UGFnZURpcmVjdGl2ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNDE2Njk5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvcGFnZWRpcmVjdGl2ZS9UZXN0UGFnZURpcmVjdGl2ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjA0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnBhZ2VkaXJlY3RpdmU7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLmRvY3VtZW50LlBhZ2VEaXJlY3RpdmVBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9ySlNQOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5sdGsubW9kZWxoYW5kbGVyLkVtYmVkZGVkVHlwZUhhbmRsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklOb2RlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU5vZGVBZGFwdGVyRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU5vZGVOb3RpZmllcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwubW9kZWxoYW5kbGVyLkVtYmVkZGVkWE1MOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnNzZW1vZGVscXVlcnkuTW9kZWxRdWVyeUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotLyoqCi0gKiBAYXV0aG9yIGRhdmlkdwotICovCi1wdWJsaWMgY2xhc3MgVGVzdFBhZ2VEaXJlY3RpdmUgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQljbGFzcyBNeUVtYmVkZGVkRmFjdG9yeSBpbXBsZW1lbnRzIElOb2RlQWRhcHRlckZhY3RvcnkgewotCi0JCXB1YmxpYyBJTm9kZUFkYXB0ZXIgYWRhcHQoSU5vZGVOb3RpZmllciBvYmplY3QpIHsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0KLQkJcHVibGljIElOb2RlQWRhcHRlckZhY3RvcnkgY29weSgpIHsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0KLQkJcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShPYmplY3QgdHlwZSkgewotCQkJcmV0dXJuIHR5cGUgaW5zdGFuY2VvZiBNeUFkYXB0ZWRDbGFzczsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHJlbGVhc2UoKSB7Ci0JCQkvLyBub29wCi0JCX0KLQl9Ci0JCi0JY2xhc3MgTXlBZGFwdGVkQ2xhc3MgewotCQkvLyBkdW1teSBjbGFzcyBpcyBrZXkKLQl9Ci0JCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFRlc3RQYWdlRGlyZWN0aXZlLgotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFRlc3RQYWdlRGlyZWN0aXZlKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RCYXNpY1BEKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJLy8gRmlyc3QgbWFrZSAoZW1wdHkpIHN0cnVjdHVyZWREb2N1bWVudAotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBtb2RlbE1hbmFnZXIuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JKU1AuQ29udGVudFR5cGVJRF9KU1ApOwotCQlhc3NlcnRUcnVlKCJtb2RlbCBjb3VsZCBub3QgYmUgY3JlYXRlZCEiLCBtb2RlbCAhPSBudWxsKTsKLQotCQkvLyBOb3csIGFzc2lnbmluZyB1c2UgYSBwYWdlIGRpcmVjdGl2ZSwgYnV0IGxlYXZpbmcgZW1iZWRkZWQgdHlwZSB0aGUgc2FtZSBhcyBkZWZhdWx0Ci0JCW1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnNldFRleHQodGhpcywgIjwlQCBwYWdlIGNvbnRlbnRUeXBlPVwidGV4dC9odG1sXCIgbGFuZ3VhZ2U9XCJqYXZhXCIgJT4iKTsKLQkJUGFnZURpcmVjdGl2ZUFkYXB0ZXIgcGFnZURpcmVjdGl2ZUFkYXB0ZXIgPSAoUGFnZURpcmVjdGl2ZUFkYXB0ZXIpICgoSURPTU1vZGVsKSBtb2RlbCkuZ2V0RG9jdW1lbnQoKS5nZXRBZGFwdGVyRm9yKFBhZ2VEaXJlY3RpdmVBZGFwdGVyLmNsYXNzKTsKLQotCQlTdHJpbmcgY29udGVudFR5cGUgPSBwYWdlRGlyZWN0aXZlQWRhcHRlci5nZXRDb250ZW50VHlwZSgpOwotCQlTdHJpbmcgbGFuZ3VhZ2UgPSBwYWdlRGlyZWN0aXZlQWRhcHRlci5nZXRMYW5ndWFnZSgpOwotCi0JCWFzc2VydFRydWUoImNvbnRlbnRUeXBlIHNob3VsZCBiZSBodG1sIiwgInRleHQvaHRtbCIuZXF1YWxzKGNvbnRlbnRUeXBlKSk7Ci0JCWFzc2VydFRydWUoImxhbmd1YWdlIHNob3VsZCBiZSBqYXZhIiwgImphdmEiLmVxdWFscyhsYW5ndWFnZSkpOwotCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdEJhc2ljQ2hhbmdlZFBEKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJLy8gRmlyc3QgbWFrZSAoZW1wdHkpIHN0cnVjdHVyZWREb2N1bWVudAotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBtb2RlbE1hbmFnZXIuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JKU1AuQ29udGVudFR5cGVJRF9KU1ApOwotCQlhc3NlcnRUcnVlKCJtb2RlbCBjb3VsZCBub3QgYmUgY3JlYXRlZCEiLCBtb2RlbCAhPSBudWxsKTsKLQotCQkvLyBOb3csIGFzc2lnbmluZyB1c2UgYSBwYWdlIGRpcmVjdGl2ZSwgYnV0IGxlYXZpbmcgZW1iZWRkZWQgdHlwZSB0aGUgc2FtZSBhcyBkZWZhdWx0Ci0JCW1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnNldFRleHQodGhpcywgIjwlQCBwYWdlIGNvbnRlbnRUeXBlPVwidGV4dC9odG1sXCIgbGFuZ3VhZ2U9XCJqYXZhXCIgJT4iKTsKLQkJUGFnZURpcmVjdGl2ZUFkYXB0ZXIgcGFnZURpcmVjdGl2ZUFkYXB0ZXIgPSAoUGFnZURpcmVjdGl2ZUFkYXB0ZXIpICgoSURPTU1vZGVsKSBtb2RlbCkuZ2V0RG9jdW1lbnQoKS5nZXRBZGFwdGVyRm9yKFBhZ2VEaXJlY3RpdmVBZGFwdGVyLmNsYXNzKTsKLQotCQlTdHJpbmcgY29udGVudFR5cGUgPSBwYWdlRGlyZWN0aXZlQWRhcHRlci5nZXRDb250ZW50VHlwZSgpOwotCQlTdHJpbmcgbGFuZ3VhZ2UgPSBwYWdlRGlyZWN0aXZlQWRhcHRlci5nZXRMYW5ndWFnZSgpOwotCi0JCWFzc2VydFRydWUoImNvbnRlbnRUeXBlIHNob3VsZCBiZSBodG1sIiwgInRleHQvaHRtbCIuZXF1YWxzKGNvbnRlbnRUeXBlKSk7Ci0JCWFzc2VydFRydWUoImxhbmd1YWdlIHNob3VsZCBiZSBqYXZhIiwgImphdmEiLmVxdWFscyhsYW5ndWFnZSkpOwotCi0JCS8vIGNoYW5nZSB0byBqYXZhc2NyaXB0Ci0JCW1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnJlcGxhY2VUZXh0KHRoaXMsIDQzLCA0LCAiamF2YXNjcmlwdCIpOwotCi0JCWNvbnRlbnRUeXBlID0gcGFnZURpcmVjdGl2ZUFkYXB0ZXIuZ2V0Q29udGVudFR5cGUoKTsKLQkJbGFuZ3VhZ2UgPSBwYWdlRGlyZWN0aXZlQWRhcHRlci5nZXRMYW5ndWFnZSgpOwotCi0JCWFzc2VydFRydWUoImNvbnRlbnRUeXBlIHNob3VsZCBiZSBodG1sIiwgInRleHQvaHRtbCIuZXF1YWxzKGNvbnRlbnRUeXBlKSk7Ci0JCWFzc2VydFRydWUoImxhbmd1YWdlIHNob3VsZCBiZSBqYXZhc2NyaXB0IiwgImphdmFzY3JpcHQiLmVxdWFscyhsYW5ndWFnZSkpOwotCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdEJhc2ljQ2hhbmdlZFBEQmFjaygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCS8vIEZpcnN0IG1ha2UgKGVtcHR5KSBzdHJ1Y3R1cmVkRG9jdW1lbnQKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbW9kZWxNYW5hZ2VyLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9ySlNQLkNvbnRlbnRUeXBlSURfSlNQKTsKLQkJYXNzZXJ0VHJ1ZSgibW9kZWwgY291bGQgbm90IGJlIGNyZWF0ZWQhIiwgbW9kZWwgIT0gbnVsbCk7Ci0KLQkJLy8gTm93LCBhc3NpZ25pbmcgdXNlIGEgcGFnZSBkaXJlY3RpdmUsIGJ1dCBsZWF2aW5nIGVtYmVkZGVkIHR5cGUgdGhlIHNhbWUgYXMgZGVmYXVsdAotCQltb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXRUZXh0KHRoaXMsICI8JUAgcGFnZSBjb250ZW50VHlwZT1cInRleHQvaHRtbFwiIGxhbmd1YWdlPVwiamF2YVwiICU+Iik7Ci0JCVBhZ2VEaXJlY3RpdmVBZGFwdGVyIHBhZ2VEaXJlY3RpdmVBZGFwdGVyID0gKFBhZ2VEaXJlY3RpdmVBZGFwdGVyKSAoKElET01Nb2RlbCkgbW9kZWwpLmdldERvY3VtZW50KCkuZ2V0QWRhcHRlckZvcihQYWdlRGlyZWN0aXZlQWRhcHRlci5jbGFzcyk7Ci0KLQkJU3RyaW5nIGNvbnRlbnRUeXBlID0gcGFnZURpcmVjdGl2ZUFkYXB0ZXIuZ2V0Q29udGVudFR5cGUoKTsKLQkJU3RyaW5nIGxhbmd1YWdlID0gcGFnZURpcmVjdGl2ZUFkYXB0ZXIuZ2V0TGFuZ3VhZ2UoKTsKLQotCQlhc3NlcnRUcnVlKCJjb250ZW50VHlwZSBzaG91bGQgYmUgaHRtbCIsICJ0ZXh0L2h0bWwiLmVxdWFscyhjb250ZW50VHlwZSkpOwotCQlhc3NlcnRUcnVlKCJsYW5ndWFnZSBzaG91bGQgYmUgamF2YSIsICJqYXZhIi5lcXVhbHMobGFuZ3VhZ2UpKTsKLQotCQkvLyBjaGFuZ2UgdG8gamF2YXNjcmlwdAotCQltb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5yZXBsYWNlVGV4dCh0aGlzLCA0MywgNCwgImphdmFzY3JpcHQiKTsKLQotCQljb250ZW50VHlwZSA9IHBhZ2VEaXJlY3RpdmVBZGFwdGVyLmdldENvbnRlbnRUeXBlKCk7Ci0JCWxhbmd1YWdlID0gcGFnZURpcmVjdGl2ZUFkYXB0ZXIuZ2V0TGFuZ3VhZ2UoKTsKLQotCQlhc3NlcnRUcnVlKCJjb250ZW50VHlwZSBzaG91bGQgYmUgaHRtbCIsICJ0ZXh0L2h0bWwiLmVxdWFscyhjb250ZW50VHlwZSkpOwotCQlhc3NlcnRUcnVlKCJsYW5ndWFnZSBzaG91bGQgYmUgamF2YXNjcmlwdCIsICJqYXZhc2NyaXB0Ii5lcXVhbHMobGFuZ3VhZ2UpKTsKLQotCQkvLyBjaGFuZ2UgYmFjayB0byBqYXZhCi0JCW1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnJlcGxhY2VUZXh0KHRoaXMsIDQzLCAxMCwgImphdmEiKTsKLQotCQljb250ZW50VHlwZSA9IHBhZ2VEaXJlY3RpdmVBZGFwdGVyLmdldENvbnRlbnRUeXBlKCk7Ci0JCWxhbmd1YWdlID0gcGFnZURpcmVjdGl2ZUFkYXB0ZXIuZ2V0TGFuZ3VhZ2UoKTsKLQotCQlhc3NlcnRUcnVlKCJjb250ZW50VHlwZSBzaG91bGQgYmUgaHRtbCIsICJ0ZXh0L2h0bWwiLmVxdWFscyhjb250ZW50VHlwZSkpOwotCQlhc3NlcnRFcXVhbHMoImphdmEiLCBsYW5ndWFnZSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RTZXRFbWJlZGRlZFR5cGUoKXsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGNyZWF0ZVVubWFuYWdlZEhUTUxNb2RlbCgpOwotCQlQYWdlRGlyZWN0aXZlQWRhcHRlciBwYWdlRGlyZWN0aXZlQWRhcHRlciA9IChQYWdlRGlyZWN0aXZlQWRhcHRlcikgKChJRE9NTW9kZWwpIG1vZGVsKS5nZXREb2N1bWVudCgpLmdldEFkYXB0ZXJGb3IoUGFnZURpcmVjdGl2ZUFkYXB0ZXIuY2xhc3MpOwotCQlFbWJlZGRlZFR5cGVIYW5kbGVyIGVtYmVkZGVkWE1MSGFuZGxlciA9IG5ldyBFbWJlZGRlZFhNTCgpOwotCQlwYWdlRGlyZWN0aXZlQWRhcHRlci5zZXRFbWJlZGRlZFR5cGUoZW1iZWRkZWRYTUxIYW5kbGVyKTsKLQkJCi0JCUVtYmVkZGVkVHlwZUhhbmRsZXIgaGFuZGxlciA9IHBhZ2VEaXJlY3RpdmVBZGFwdGVyLmdldEVtYmVkZGVkVHlwZSgpOwotCQlhc3NlcnRUcnVlKCJpbmNvcnJlY3QgZW1iZWRkZWQgaGFuZGxlciIsIGhhbmRsZXIgPT0gZW1iZWRkZWRYTUxIYW5kbGVyKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEFkYXB0KCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVVbm1hbmFnZWRIVE1MTW9kZWwoKTsKLQkJUGFnZURpcmVjdGl2ZUFkYXB0ZXIgcGFnZURpcmVjdGl2ZUFkYXB0ZXIgPSAoUGFnZURpcmVjdGl2ZUFkYXB0ZXIpIG1vZGVsLmdldERvY3VtZW50KCkuZ2V0QWRhcHRlckZvcihQYWdlRGlyZWN0aXZlQWRhcHRlci5jbGFzcyk7Ci0JCU5vZGUgb3duZXJOb2RlID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJCi0JCU1vZGVsUXVlcnlBZGFwdGVyIGVtYmVkZGVkQWRhcHRlciA9IChNb2RlbFF1ZXJ5QWRhcHRlcikgcGFnZURpcmVjdGl2ZUFkYXB0ZXIuYWRhcHQoKElOb2RlTm90aWZpZXIpIG93bmVyTm9kZSwgTW9kZWxRdWVyeUFkYXB0ZXIuY2xhc3MpOwotCQlhc3NlcnROb3ROdWxsKCJjb3VsZCBub3QgYWRhcHQgZW1iZWRkZWQgYWRhcHRlciIsIGVtYmVkZGVkQWRhcHRlcik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RBZGRFbWJlZGRlZEZhY3RvcnkoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVVubWFuYWdlZEhUTUxNb2RlbCgpOwotCQlQYWdlRGlyZWN0aXZlQWRhcHRlciBwYWdlRGlyZWN0aXZlQWRhcHRlciA9IChQYWdlRGlyZWN0aXZlQWRhcHRlcikgbW9kZWwuZ2V0RG9jdW1lbnQoKS5nZXRBZGFwdGVyRm9yKFBhZ2VEaXJlY3RpdmVBZGFwdGVyLmNsYXNzKTsKLQkJcGFnZURpcmVjdGl2ZUFkYXB0ZXIuYWRkRW1iZWRkZWRGYWN0b3J5KG5ldyBNeUVtYmVkZGVkRmFjdG9yeSgpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFNldExhbmd1YWdlKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVVbm1hbmFnZWRIVE1MTW9kZWwoKTsKLQkJUGFnZURpcmVjdGl2ZUFkYXB0ZXIgcGFnZURpcmVjdGl2ZUFkYXB0ZXIgPSAoUGFnZURpcmVjdGl2ZUFkYXB0ZXIpIG1vZGVsLmdldERvY3VtZW50KCkuZ2V0QWRhcHRlckZvcihQYWdlRGlyZWN0aXZlQWRhcHRlci5jbGFzcyk7Ci0JCXBhZ2VEaXJlY3RpdmVBZGFwdGVyLnNldExhbmd1YWdlKCJ0ZXh0L3htbCIpOwotCQlhc3NlcnRUcnVlKCJzZXQgbGFuZ3VhZ2UgZmFpbGVkIiwgcGFnZURpcmVjdGl2ZUFkYXB0ZXIuZ2V0TGFuZ3VhZ2UoKS5lcXVhbHMoInRleHQveG1sIikpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0VGFyZ2V0KCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVVbm1hbmFnZWRIVE1MTW9kZWwoKTsKLQkJUGFnZURpcmVjdGl2ZUFkYXB0ZXIgcGFnZURpcmVjdGl2ZUFkYXB0ZXIgPSAoUGFnZURpcmVjdGl2ZUFkYXB0ZXIpIG1vZGVsLmdldERvY3VtZW50KCkuZ2V0QWRhcHRlckZvcihQYWdlRGlyZWN0aXZlQWRhcHRlci5jbGFzcyk7Ci0JCUlOb2RlTm90aWZpZXIgbm90aWZpZXIgPSBwYWdlRGlyZWN0aXZlQWRhcHRlci5nZXRUYXJnZXQoKTsKLQkJYXNzZXJ0Tm90TnVsbCgidGFyZ2V0IGlzIG51bGwiLCBub3RpZmllcik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RSZWxlYXNlKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVVbm1hbmFnZWRIVE1MTW9kZWwoKTsKLQkJUGFnZURpcmVjdGl2ZUFkYXB0ZXIgcGFnZURpcmVjdGl2ZUFkYXB0ZXIgPSAoUGFnZURpcmVjdGl2ZUFkYXB0ZXIpIG1vZGVsLmdldERvY3VtZW50KCkuZ2V0QWRhcHRlckZvcihQYWdlRGlyZWN0aXZlQWRhcHRlci5jbGFzcyk7Ci0JCXBhZ2VEaXJlY3RpdmVBZGFwdGVyLnJlbGVhc2UoKTsKLQkJLy8gY29uc2lkZXJlZCAic3VjY2VzcyIgaWYgZG9lc24ndCB0aHJvdWdoIGV4Y2VwdGlvbgotCQlhc3NlcnRUcnVlKHRydWUpOwotCX0KLQkKLQlwcml2YXRlIElET01Nb2RlbCBjcmVhdGVVbm1hbmFnZWRIVE1MTW9kZWwoKSB7Ci0JCS8vIEZpcnN0IG1ha2UgKGVtcHR5KSBzdHJ1Y3R1cmVkRG9jdW1lbnQKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbW9kZWxNYW5hZ2VyLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9ySlNQLkNvbnRlbnRUeXBlSURfSlNQKTsKLQkJYXNzZXJ0VHJ1ZSgibW9kZWwgY291bGQgbm90IGJlIGNyZWF0ZWQhIiwgbW9kZWwgIT0gbnVsbCk7Ci0KLQkJLy8gTm93LCBhc3NpZ25pbmcgdXNlIGEgcGFnZSBkaXJlY3RpdmUsIGJ1dCBsZWF2aW5nIGVtYmVkZGVkIHR5cGUgdGhlIHNhbWUgYXMgZGVmYXVsdAotCQltb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXRUZXh0KHRoaXMsICI8JUAgcGFnZSBjb250ZW50VHlwZT1cInRleHQvaHRtbFwiIGxhbmd1YWdlPVwiamF2YVwiICU+Iik7Ci0JCXJldHVybiAoSURPTU1vZGVsKW1vZGVsOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvcGFydGl0aW9uaW5nL1Rlc3RTdHJ1Y3R1cmVkUGFydGl0aW9uZXJKU1AuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvcGFydGl0aW9uaW5nL1Rlc3RTdHJ1Y3R1cmVkUGFydGl0aW9uZXJKU1AuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDNmZjA2Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3BhcnRpdGlvbmluZy9UZXN0U3RydWN0dXJlZFBhcnRpdGlvbmVySlNQLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMucGFydGl0aW9uaW5nOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nQnVmZmVySW5wdXRTdHJlYW07Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkJhZExvY2F0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVR5cGVkUmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXh0LklKU1BQYXJ0aXRpb25zOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXh0LklDU1NQYXJ0aXRpb25zOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGV4dC5JSFRNTFBhcnRpdGlvbnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudXRpbHMuU3RyaW5nVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRleHQuSVhNTFBhcnRpdGlvbnM7Ci0KLWltcG9ydCBjb20uaWJtLmljdS50ZXh0LkRlY2ltYWxGb3JtYXQ7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0U3RydWN0dXJlZFBhcnRpdGlvbmVySlNQIGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHJpdmF0ZSBib29sZWFuIERFQlVHX1BSSU5UX1JFU1VMVCA9IGZhbHNlOwotCXByb3RlY3RlZCBJVHlwZWRSZWdpb25bXSBwYXJ0aXRpb25zID0gbnVsbDsKLQotCXByaXZhdGUgYm9vbGVhbiB1c2VGb3JtYXR0ZXIgPSB0cnVlOwotCXByb3RlY3RlZCBEZWNpbWFsRm9ybWF0IGZvcm1hdHRlcjsKLQotCXB1YmxpYyBUZXN0U3RydWN0dXJlZFBhcnRpdGlvbmVySlNQKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCQlpZiAoREVCVUdfUFJJTlRfUkVTVUxUICYmIHVzZUZvcm1hdHRlcikKLQkJCWZvcm1hdHRlciA9IG5ldyBEZWNpbWFsRm9ybWF0KCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RKU1AxKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7IC8vIERXIDA1LzAxLzIwMDMgSSBtb2RpZmllZCB0aGlzIHRlc3QsIGFmdGVyIGNyZWF0aW5nIHRlc3Q2LCAKLQkJLy8gYW5kIGNoYW5naW5nIHBhcnRpb25lciB0byBwaWNrIHVwIGVuZCAqPiBhcyBwYXJ0IG9mIHBhZ2UgZGlyZWN0aXZlCi0JCS8vIHBhcnRpdGlvbiAoZm9yIGhpZ2hsaWdodGluZyB0byB3b3JrIHJpZ2h0KS4KLQkJaW50IGV4cGVjdGVkUGFydGl0aW9ucyA9IDEwOwotCQlpbnQgblBhcnRpdGlvbnMgPSBkb0NvbXB1dGVQYXJ0aXRpb25pbmdUZXN0KCJ0ZXN0ZmlsZXMvanNwL2V4YW1wbGUwMS5qc3AiKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3cm9uZyBudW1iZXIgb2YgcGFydGl0aW9ucyIsIGV4cGVjdGVkUGFydGl0aW9ucywgblBhcnRpdGlvbnMpOwotCQljaGVja1NlYW1zKCk7Ci0JCXZlcmlmeVBhcnRpdGlvblR5cGVzKHBhcnRpdGlvbnMsIG5ldyBTdHJpbmdbXXtJSlNQUGFydGl0aW9ucy5KU1BfRElSRUNUSVZFLCBJSFRNTFBhcnRpdGlvbnMuSFRNTF9ERUZBVUxULCBJSlNQUGFydGl0aW9ucy5KU1BfRElSRUNUSVZFLCBJSFRNTFBhcnRpdGlvbnMuSFRNTF9ERUZBVUxULCBJSlNQUGFydGl0aW9ucy5KU1BfREVGQVVMVCwgSUpTUFBhcnRpdGlvbnMuSlNQX0NPTlRFTlRfREVMSU1JVEVSLCBJSlNQUGFydGl0aW9ucy5KU1BfQ09OVEVOVF9KQVZBLCBJSlNQUGFydGl0aW9ucy5KU1BfQ09OVEVOVF9ERUxJTUlURVIsIElKU1BQYXJ0aXRpb25zLkpTUF9ERUZBVUxULCBJSFRNTFBhcnRpdGlvbnMuSFRNTF9ERUZBVUxUfSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEpTUDIoKSB0aHJvd3MgSU9FeGNlcHRpb24sIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJaW50IGV4cGVjdGVkUGFydGl0aW9ucyA9IDEzOwotCQlpbnQgblBhcnRpdGlvbnMgPSBkb0NvbXB1dGVQYXJ0aXRpb25pbmdUZXN0KCJ0ZXN0ZmlsZXMvanNwL2V4YW1wbGUwMi5qc3AiKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3cm9uZyBudW1iZXIgb2YgcGFydGl0aW9ucyIsIGV4cGVjdGVkUGFydGl0aW9ucywgblBhcnRpdGlvbnMpOwotCQljaGVja1NlYW1zKCk7Ci0JCXZlcmlmeVBhcnRpdGlvblR5cGVzKHBhcnRpdGlvbnMsIG5ldyBTdHJpbmdbXXtJSFRNTFBhcnRpdGlvbnMuSFRNTF9ERUZBVUxULCBJSlNQUGFydGl0aW9ucy5KU1BfQ09OVEVOVF9ERUxJTUlURVIsIElKU1BQYXJ0aXRpb25zLkpTUF9DT05URU5UX0pBVkEsIElKU1BQYXJ0aXRpb25zLkpTUF9DT05URU5UX0RFTElNSVRFUiwgSUhUTUxQYXJ0aXRpb25zLkhUTUxfREVGQVVMVCwgSUhUTUxQYXJ0aXRpb25zLkhUTUxfQ09NTUVOVCwgSUhUTUxQYXJ0aXRpb25zLkhUTUxfREVGQVVMVCwgSUpTUFBhcnRpdGlvbnMuSlNQX0RFRkFVTFQsIElKU1BQYXJ0aXRpb25zLkpTUF9DT05URU5UX0RFTElNSVRFUiwgSUpTUFBhcnRpdGlvbnMuSlNQX0NPTlRFTlRfSkFWQSwgSUpTUFBhcnRpdGlvbnMuSlNQX0NPTlRFTlRfREVMSU1JVEVSLCBJSlNQUGFydGl0aW9ucy5KU1BfREVGQVVMVCwgSUhUTUxQYXJ0aXRpb25zLkhUTUxfREVGQVVMVH0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RKU1AzKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCWludCBleHBlY3RlZFBhcnRpdGlvbnMgPSA1OwotCQlpbnQgblBhcnRpdGlvbnMgPSBkb0NvbXB1dGVQYXJ0aXRpb25pbmdUZXN0KCJ0ZXN0ZmlsZXMvanNwL2V4YW1wbGUwMy5qc3AiKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3cm9uZyBudW1iZXIgb2YgcGFydGl0aW9ucyIsIGV4cGVjdGVkUGFydGl0aW9ucywgblBhcnRpdGlvbnMpOwotCQljaGVja1NlYW1zKCk7Ci0JCXZlcmlmeVBhcnRpdGlvblR5cGVzKHBhcnRpdGlvbnMsIG5ldyBTdHJpbmdbXXtJSFRNTFBhcnRpdGlvbnMuSFRNTF9ERUZBVUxULCBJSFRNTFBhcnRpdGlvbnMuU0NSSVBULCBJSFRNTFBhcnRpdGlvbnMuSFRNTF9ERUZBVUxULCBJQ1NTUGFydGl0aW9ucy5TVFlMRSwgSUhUTUxQYXJ0aXRpb25zLkhUTUxfREVGQVVMVCx9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SlNQNCgpIHRocm93cyBJT0V4Y2VwdGlvbiwgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlpbnQgZXhwZWN0ZWRQYXJ0aXRpb25zID0gODsKLQkJaW50IG5QYXJ0aXRpb25zID0gZG9Db21wdXRlUGFydGl0aW9uaW5nVGVzdCgidGVzdGZpbGVzL2pzcC9leGFtcGxlMDQuanNwIik7Ci0JCWFzc2VydEVxdWFscygid3JvbmcgbnVtYmVyIG9mIHBhcnRpdGlvbnMiLCBleHBlY3RlZFBhcnRpdGlvbnMsIG5QYXJ0aXRpb25zKTsKLQkJY2hlY2tTZWFtcygpOwotCQl2ZXJpZnlQYXJ0aXRpb25UeXBlcyhwYXJ0aXRpb25zLCBuZXcgU3RyaW5nW117SUhUTUxQYXJ0aXRpb25zLkhUTUxfREVGQVVMVCwgSUpTUFBhcnRpdGlvbnMuSlNQX0NPTlRFTlRfREVMSU1JVEVSLCBJSlNQUGFydGl0aW9ucy5KU1BfQ09OVEVOVF9KQVZBLCBJSlNQUGFydGl0aW9ucy5KU1BfQ09OVEVOVF9ERUxJTUlURVIsICJvcmcuZWNsaXBzZS53c3QuaHRtbC5TQ1JJUFQubGFuZ3VhZ2UuTVlMQU5HVUFHRSIsIElIVE1MUGFydGl0aW9ucy5IVE1MX0RFRkFVTFQsIElKU1BQYXJ0aXRpb25zLkpTUF9DT01NRU5ULCBJSFRNTFBhcnRpdGlvbnMuSFRNTF9ERUZBVUxUfSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEpTUDUoKSB0aHJvd3MgSU9FeGNlcHRpb24sIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJaW50IGV4cGVjdGVkUGFydGl0aW9ucyA9IDE3OwotCQlpbnQgblBhcnRpdGlvbnMgPSBkb0NvbXB1dGVQYXJ0aXRpb25pbmdUZXN0KCJ0ZXN0ZmlsZXMvanNwL2V4YW1wbGUwNS5qc3AiKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3cm9uZyBudW1iZXIgb2YgcGFydGl0aW9ucyIsIGV4cGVjdGVkUGFydGl0aW9ucywgblBhcnRpdGlvbnMpOwotCQljaGVja1NlYW1zKCk7Ci0JCXZlcmlmeVBhcnRpdGlvblR5cGVzKHBhcnRpdGlvbnMsIG5ldyBTdHJpbmdbXXtJSFRNTFBhcnRpdGlvbnMuSFRNTF9ERUZBVUxULCBJSFRNTFBhcnRpdGlvbnMuU0NSSVBULCBJSFRNTFBhcnRpdGlvbnMuSFRNTF9ERUZBVUxULCBJSlNQUGFydGl0aW9ucy5KU1BfQ09OVEVOVF9ERUxJTUlURVIsIElKU1BQYXJ0aXRpb25zLkpTUF9DT05URU5UX0pBVkEsIElKU1BQYXJ0aXRpb25zLkpTUF9DT05URU5UX0RFTElNSVRFUiwgSUhUTUxQYXJ0aXRpb25zLkhUTUxfREVGQVVMVCwgSUpTUFBhcnRpdGlvbnMuSlNQX0NPTU1FTlQsIElIVE1MUGFydGl0aW9ucy5IVE1MX0RFRkFVTFQsIElKU1BQYXJ0aXRpb25zLkpTUF9DT05URU5UX0RFTElNSVRFUiwgSUpTUFBhcnRpdGlvbnMuSlNQX0NPTlRFTlRfSkFWQSwgSUpTUFBhcnRpdGlvbnMuSlNQX0NPTlRFTlRfREVMSU1JVEVSLCBJSFRNTFBhcnRpdGlvbnMuSFRNTF9ERUZBVUxULCBJSlNQUGFydGl0aW9ucy5KU1BfQ09OVEVOVF9ERUxJTUlURVIsIElKU1BQYXJ0aXRpb25zLkpTUF9DT05URU5UX0pBVkEsIElKU1BQYXJ0aXRpb25zLkpTUF9DT05URU5UX0RFTElNSVRFUiwgSUhUTUxQYXJ0aXRpb25zLkhUTUxfREVGQVVMVH0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RKU1A2KCkgdGhyb3dzIElPRXhjZXB0aW9uLCBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCWludCBleHBlY3RlZFBhcnRpdGlvbnMgPSAxOwotCQlpbnQgblBhcnRpdGlvbnMgPSBkb0NvbXB1dGVQYXJ0aXRpb25pbmdUZXN0KCJ0ZXN0ZmlsZXMvanNwL2V4YW1wbGUwNi5qc3AiKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3cm9uZyBudW1iZXIgb2YgcGFydGl0aW9ucyIsIGV4cGVjdGVkUGFydGl0aW9ucywgblBhcnRpdGlvbnMpOwotCQljaGVja1NlYW1zKCk7Ci0JCXZlcmlmeVBhcnRpdGlvblR5cGVzKHBhcnRpdGlvbnMsIG5ldyBTdHJpbmdbXXtJSlNQUGFydGl0aW9ucy5KU1BfRElSRUNUSVZFfSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEJ1ZzEzMTQ2MygpIHRocm93cyBJT0V4Y2VwdGlvbiwgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlpbnQgZXhwZWN0ZWRQYXJ0aXRpb25zID0gMTM7Ci0JCWludCBuUGFydGl0aW9ucyA9IGRvQ29tcHV0ZVBhcnRpdGlvbmluZ1Rlc3QoInRlc3RmaWxlcy9qc3AvYnVnMTMxNDYzLmpzcCIpOwotCQlhc3NlcnRFcXVhbHMoIndyb25nIG51bWJlciBvZiBwYXJ0aXRpb25zIiwgZXhwZWN0ZWRQYXJ0aXRpb25zLCBuUGFydGl0aW9ucyk7Ci0JCWNoZWNrU2VhbXMoKTsKLQkJdmVyaWZ5UGFydGl0aW9uVHlwZXMocGFydGl0aW9ucywgbmV3IFN0cmluZ1tde0lKU1BQYXJ0aXRpb25zLkpTUF9ESVJFQ1RJVkUsIElIVE1MUGFydGl0aW9ucy5IVE1MX0RFRkFVTFQsIElYTUxQYXJ0aXRpb25zLlhNTF9DREFUQSwgSUhUTUxQYXJ0aXRpb25zLkhUTUxfREVGQVVMVCwgSUpTUFBhcnRpdGlvbnMuSlNQX0RJUkVDVElWRSwgSUhUTUxQYXJ0aXRpb25zLkhUTUxfREVGQVVMVCwgSUpTUFBhcnRpdGlvbnMuSlNQX0RJUkVDVElWRSwgSUpTUFBhcnRpdGlvbnMuSlNQX0NPTlRFTlRfSkFWQSwgSUhUTUxQYXJ0aXRpb25zLkhUTUxfREVGQVVMVCwgSUpTUFBhcnRpdGlvbnMuSlNQX0NPTlRFTlRfSkFWQSwgSUhUTUxQYXJ0aXRpb25zLkhUTUxfREVGQVVMVCwgSUpTUFBhcnRpdGlvbnMuSlNQX0NPTlRFTlRfSkFWQSwgSUpTUFBhcnRpdGlvbnMuSlNQX0RJUkVDVElWRX0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RQZXJmSlNQKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCS8vaW50IGV4cGVjdGVkUGFydGl0aW9ucyA9IDY7Ci0JCS8vWFhYIEZJWE1FISAKLQkJLy9udCBuUGFydGl0aW9ucyA9IAotCQkJZG9UaW1lZENvbXB1dGVQYXJ0aXRpb25pbmdUZXN0KCJ0ZXN0ZmlsZXMvanNwL2NvbXBhbnkzMDBrLmpzcCIpOwotCQkvL2Fzc2VydFRydWUoIndyb25nIG51bWJlciBvZiBwYXJ0aXRpb25zIiwgblBhcnRpdGlvbnMgPT0gZXhwZWN0ZWRQYXJ0aXRpb25zKTsKLQkJLy9jaGVja1NlYW1zKCk7Ci0JCS8vdmVyaWZ5UGFydGl0aW9uVHlwZXMocGFydGl0aW9ucywgbmV3IFN0cmluZ1tde0lYTUxQYXJ0aXRpb25zLlNUX1hNTF9QSSwgSVhNTFBhcnRpdGlvbnMuU1RfREVGQVVMVF9YTUwsIElYTUxQYXJ0aXRpb25zLlNUX1hNTF9ERUNMQVJBVElPTiwgSVhNTFBhcnRpdGlvbnMuU1RfREVGQVVMVF9YTUwsIElYTUxQYXJ0aXRpb25zLlNUX1hNTF9DT01NRU5ULCBJWE1MUGFydGl0aW9ucy5TVF9ERUZBVUxUX1hNTH0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RFbXB0eSgpIHRocm93cyBJT0V4Y2VwdGlvbiwgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlpbnQgZXhwZWN0ZWRQYXJ0aXRpb25zID0gMTsKLQkJaW50IG5QYXJ0aXRpb25zID0gZG9Db21wdXRlUGFydGl0aW9uaW5nVGVzdCgidGVzdGZpbGVzL3htbC9lbXB0eS54bWwiKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3cm9uZyBudW1iZXIgb2YgcGFydGl0aW9ucyIsIGV4cGVjdGVkUGFydGl0aW9ucywgblBhcnRpdGlvbnMpOwotCQljaGVja1NlYW1zKCk7Ci0JCXZlcmlmeVBhcnRpdGlvblR5cGVzKHBhcnRpdGlvbnMsIG5ldyBTdHJpbmdbXXtJWE1MUGFydGl0aW9ucy5YTUxfREVGQVVMVH0pOwotCX0KLQotCS8qKgotCSAqIEVuc3VyZSB0aGF0IHRoZSBjdXJyZW50IGxpc3Qgb2YgcGFydGl0aW9ucyBhcmUgYWxsIGFkamFjZW50IHRvIG9uZQotCSAqIGFub3RoZXIKLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCBjaGVja1NlYW1zKCkgewotCQlpZiAocGFydGl0aW9ucyA9PSBudWxsKQotCQkJcmV0dXJuOwotCQlpbnQgb2Zmc2V0ID0gMDsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwYXJ0aXRpb25zLmxlbmd0aDsgaSsrKSB7Ci0JCQlhc3NlcnRFcXVhbHMoInBhcnRpdGlvbnMgYXJlIG5vdCBjb250aWd1b3VzISIsIHBhcnRpdGlvbnNbaV0uZ2V0T2Zmc2V0KCksIG9mZnNldCk7Ci0JCQlvZmZzZXQgPSBwYXJ0aXRpb25zW2ldLmdldE9mZnNldCgpICsgcGFydGl0aW9uc1tpXS5nZXRMZW5ndGgoKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIENvbXB1dGUgdGhlIHBhcnRpdGlvbnMgZm9yIHRoZSBnaXZlbiBmaWxlbmFtZSB1c2luZyB0aGUgZGVmYXVsdAotCSAqIHBhcnRpdGlvbmVyIGZvciB0aGF0IGZpbGUgdHlwZS4KLQkgKiAKLQkgKiBAcGFyYW0gZmlsZW5hbWUKLQkgKiBAcmV0dXJuIGludAotCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KLQkgKiBAdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uCi0JICovCi0JcHJvdGVjdGVkIGludCBkb0NvbXB1dGVQYXJ0aXRpb25pbmdUZXN0KFN0cmluZyBmaWxlbmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uLCBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0KLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJbnB1dFN0cmVhbSBpblN0cmVhbSA9IGdldENsYXNzKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbShmaWxlbmFtZSk7Ci0JCWlmIChpblN0cmVhbSA9PSBudWxsKQotCQkJaW5TdHJlYW0gPSBuZXcgU3RyaW5nQnVmZmVySW5wdXRTdHJlYW0oIiIpOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yRWRpdChmaWxlbmFtZSwgaW5TdHJlYW0sIG51bGwpOwotCi0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCWlmIChERUJVR19QUklOVF9SRVNVTFQgJiYgdXNlRm9ybWF0dGVyKSB7Ci0JCQlkb3VibGUgYmFzZVRlbiA9IE1hdGgubG9nKDEwKTsKLQkJCWZvcm1hdHRlci5zZXRNaW5pbXVtSW50ZWdlckRpZ2l0cygoaW50KSAoTWF0aC5sb2coc3RydWN0dXJlZERvY3VtZW50LmdldExlbmd0aCgpKSAvIGJhc2VUZW4pICsgMSk7Ci0JCQlmb3JtYXR0ZXIuc2V0R3JvdXBpbmdVc2VkKGZhbHNlKTsKLQkJfQotCi0JCXBhcnRpdGlvbnMgPSBzdHJ1Y3R1cmVkRG9jdW1lbnQuY29tcHV0ZVBhcnRpdGlvbmluZygwLCBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0TGVuZ3RoKCkpOwotCQlpZiAoREVCVUdfUFJJTlRfUkVTVUxUKSB7Ci0JCQlTdHJpbmcgY29udGVudHMgPSBudWxsOwotCi0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlxuZmlsZW5hbWU6ICIgKyBmaWxlbmFtZSk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IHBhcnRpdGlvbnMubGVuZ3RoOyBpKyspIHsKLQkJCQl0cnkgewotCQkJCQljb250ZW50cyA9IHN0cnVjdHVyZWREb2N1bWVudC5nZXQocGFydGl0aW9uc1tpXS5nZXRPZmZzZXQoKSwgcGFydGl0aW9uc1tpXS5nZXRMZW5ndGgoKSk7Ci0JCQkJfQotCQkJCWNhdGNoIChCYWRMb2NhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQkJCWNvbnRlbnRzID0gIiplcnJvcioiOwotCQkJCX0KLQkJCQlpZiAodXNlRm9ybWF0dGVyKQotCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oZm9ybWF0dGVyLmZvcm1hdChwYXJ0aXRpb25zW2ldLmdldE9mZnNldCgpKSArICI6IiArIGZvcm1hdHRlci5mb3JtYXQocGFydGl0aW9uc1tpXS5nZXRMZW5ndGgoKSkgKyAiIC0gIiArIHBhcnRpdGlvbnNbaV0uZ2V0VHlwZSgpICsgIiBbIiArIFN0cmluZ1V0aWxzLmVzY2FwZShjb250ZW50cykgKyAiXSIpOwotCQkJCWVsc2UKLQkJCQkJU3lzdGVtLm91dC5wcmludGxuKHBhcnRpdGlvbnNbaV0gKyAiIFsiICsgU3RyaW5nVXRpbHMuZXNjYXBlKGNvbnRlbnRzKSArICJdIik7Ci0JCQl9Ci0JCX0KLQkJY2hlY2tTZWFtcygpOwotCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJaW5TdHJlYW0uY2xvc2UoKTsKLQotCQlpZiAocGFydGl0aW9ucyA9PSBudWxsKQotCQkJcmV0dXJuIC0xOwotCQlyZXR1cm4gcGFydGl0aW9ucy5sZW5ndGg7Ci0JfQotCi0JLyoqCi0JICogQ29tcHV0ZSB0aGUgcGFydGl0aW9ucyBmb3IgdGhlIGdpdmVuIGZpbGVuYW1lIHVzaW5nIHRoZSBkZWZhdWx0Ci0JICogcGFydGl0aW9uZXIgZm9yIHRoYXQgZmlsZSB0eXBlLgotCSAqIAotCSAqIEBwYXJhbSBmaWxlbmFtZQotCSAqIEByZXR1cm4gaW50Ci0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqIEB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24KLQkgKi8KLQlwcm90ZWN0ZWQgaW50IGRvVGltZWRDb21wdXRlUGFydGl0aW9uaW5nVGVzdChTdHJpbmcgZmlsZW5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiwgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCi0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSW5wdXRTdHJlYW0gaW5TdHJlYW0gPSBnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0oZmlsZW5hbWUpOwotCQlpZiAoaW5TdHJlYW0gPT0gbnVsbCkKLQkJCWluU3RyZWFtID0gbmV3IFN0cmluZ0J1ZmZlcklucHV0U3RyZWFtKCIiKTsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvckVkaXQoZmlsZW5hbWUsIGluU3RyZWFtLCBudWxsKTsKLQotCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQlpZiAoREVCVUdfUFJJTlRfUkVTVUxUICYmIHVzZUZvcm1hdHRlcikgewotCQkJZG91YmxlIGJhc2VUZW4gPSBNYXRoLmxvZygxMCk7Ci0JCQlmb3JtYXR0ZXIuc2V0TWluaW11bUludGVnZXJEaWdpdHMoKGludCkgKE1hdGgubG9nKHN0cnVjdHVyZWREb2N1bWVudC5nZXRMZW5ndGgoKSkgLyBiYXNlVGVuKSArIDEpOwotCQkJZm9ybWF0dGVyLnNldEdyb3VwaW5nVXNlZChmYWxzZSk7Ci0JCX0KLQkJbG9uZyBzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJcGFydGl0aW9ucyA9IHN0cnVjdHVyZWREb2N1bWVudC5jb21wdXRlUGFydGl0aW9uaW5nKDAsIHN0cnVjdHVyZWREb2N1bWVudC5nZXRMZW5ndGgoKSk7Ci0JCWxvbmcgZW5kVGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQlpZiAoREVCVUdfUFJJTlRfUkVTVUxUKSB7Ci0KLQkJCVN0cmluZyBjb250ZW50cyA9IG51bGw7Ci0KLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiXG5maWxlbmFtZTogIiArIGZpbGVuYW1lKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiVGltZSB0byBjb21wdXRlICIgKyBwYXJ0aXRpb25zLmxlbmd0aCArICI6ICIgKyAoZW5kVGltZSAtIHN0YXJ0VGltZSkgKyAiIChtc2VjcykiKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgcGFydGl0aW9ucy5sZW5ndGg7IGkrKykgewotCQkJCXRyeSB7Ci0JCQkJCWNvbnRlbnRzID0gc3RydWN0dXJlZERvY3VtZW50LmdldChwYXJ0aXRpb25zW2ldLmdldE9mZnNldCgpLCBwYXJ0aXRpb25zW2ldLmdldExlbmd0aCgpKTsKLQkJCQl9Ci0JCQkJY2F0Y2ggKEJhZExvY2F0aW9uRXhjZXB0aW9uIGUpIHsKLQkJCQkJY29udGVudHMgPSAiKmVycm9yKiI7Ci0JCQkJfQotCQkJCWlmICh1c2VGb3JtYXR0ZXIpCi0JCQkJCVN5c3RlbS5vdXQucHJpbnRsbihmb3JtYXR0ZXIuZm9ybWF0KHBhcnRpdGlvbnNbaV0uZ2V0T2Zmc2V0KCkpICsgIjoiICsgZm9ybWF0dGVyLmZvcm1hdChwYXJ0aXRpb25zW2ldLmdldExlbmd0aCgpKSArICIgLSAiICsgcGFydGl0aW9uc1tpXS5nZXRUeXBlKCkgKyAiIFsiICsgU3RyaW5nVXRpbHMuZXNjYXBlKGNvbnRlbnRzKSArICJdIik7Ci0JCQkJZWxzZQotCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4ocGFydGl0aW9uc1tpXSArICIgWyIgKyBTdHJpbmdVdGlscy5lc2NhcGUoY29udGVudHMpICsgIl0iKTsKLQkJCX0KLQkJfQotCQljaGVja1NlYW1zKCk7Ci0JCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQlpblN0cmVhbS5jbG9zZSgpOwotCi0JCWlmIChwYXJ0aXRpb25zID09IG51bGwpCi0JCQlyZXR1cm4gLTE7Ci0JCXJldHVybiBwYXJ0aXRpb25zLmxlbmd0aDsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIHNpbmdsZSBwYXJ0aXRpb24gYXQgdGhlIGdpdmVuIG9mZnNldCBmb3IgdGhlIGdpdmVuIGZpbGUsCi0JICogdXNpbmcgdGhlIGRlZmF1bHQgcGFydGl0aW9uZXIgZm9yIHRoYXQgZmlsZSB0eXBlLiBUaGlzIHRlc3QgYWxsb3dzIGZvcgotCSAqIHZlcmlmeWluZyB0aGUgemVyby1sZW5ndGggcGFydGl0aW9uaW5nIGJlaGF2aW9yLgotCSAqIAotCSAqIEBwYXJhbSBmaWxlbmFtZQotCSAqIEBwYXJhbSBvZmZzZXQKLQkgKiBAcmV0dXJuIElUeXBlZFJlZ2lvbgotCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KLQkgKiBAdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uCi0JICovCi0JcHJvdGVjdGVkIElUeXBlZFJlZ2lvbiBnZXRQYXJ0aXRpb25UZXN0KFN0cmluZyBmaWxlbmFtZSwgaW50IG9mZnNldCkgdGhyb3dzIElPRXhjZXB0aW9uLCBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSW5wdXRTdHJlYW0gaW5TdHJlYW0gPSBnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0oZmlsZW5hbWUpOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yRWRpdChmaWxlbmFtZSwgaW5TdHJlYW0sIG51bGwpOwotCi0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0KLQkJcGFydGl0aW9ucyA9IG51bGw7Ci0JCUlUeXBlZFJlZ2lvbiBwYXJ0aXRpb24gPSBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0UGFydGl0aW9uKG9mZnNldCk7Ci0JCWlmIChERUJVR19QUklOVF9SRVNVTFQpIHsKLQkJCVN0cmluZyBjb250ZW50cyA9IG51bGw7Ci0KLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiXG5maWxlbmFtZTogIiArIGZpbGVuYW1lKTsKLQkJCXRyeSB7Ci0JCQkJY29udGVudHMgPSBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0KHBhcnRpdGlvbi5nZXRPZmZzZXQoKSwgcGFydGl0aW9uLmdldExlbmd0aCgpKTsKLQkJCX0KLQkJCWNhdGNoIChCYWRMb2NhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQkJY29udGVudHMgPSAiKmVycm9yKiI7Ci0JCQl9Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4ocGFydGl0aW9uICsgIiBbIiArIFN0cmluZ1V0aWxzLmVzY2FwZShjb250ZW50cykgKyAiXSIpOwotCQl9Ci0JCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQlpblN0cmVhbS5jbG9zZSgpOwotCi0JCXJldHVybiBwYXJ0aXRpb247Ci0JfQotCi0JLyoqCi0JICogVmVyaWZpZXMgdGhhdCB0aGUgZ2l2ZW4gcGFydGl0aW9ucyBhcmUgb2YgdGhlIGdpdmVuIHBhcnRpdGlvbiB0eXBlcwotCSAqIAotCSAqIEBwYXJhbSB0eXBlZFJlZ2lvbnMKLQkgKiBAcGFyYW0gdHlwZXMKLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCB2ZXJpZnlQYXJ0aXRpb25UeXBlcyhJVHlwZWRSZWdpb24gYWN0dWFsVHlwZWRSZWdpb25zW10sIFN0cmluZyBleHBlY3RlZFR5cGVzW10pIHsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBleHBlY3RlZFR5cGVzLmxlbmd0aDsgaSsrKQotCQkJYXNzZXJ0RXF1YWxzKCJwYXJ0aXRpb24gdHlwZSBtaXNtYXRjaGVkIiwgZXhwZWN0ZWRUeXBlc1tpXSwgYWN0dWFsVHlwZWRSZWdpb25zW2ldLmdldFR5cGUoKSk7Ci0JfQotCi0JLyoqCi0JICogVmVyaWZpZXMgdGhhdCB0aGUgZ2l2ZW4gcGFydGl0aW9ucyBiZWdpbiBhdCB0aGUgZ2l2ZW4gb2Zmc2V0cwotCSAqIAotCSAqIEBwYXJhbSB0eXBlZFJlZ2lvbnMKLQkgKiBAcGFyYW0gdHlwZXMKLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCB2ZXJpZnlQYXJ0aXRpb25SZWdpb25zKElUeXBlZFJlZ2lvbiB0eXBlZFJlZ2lvbnNbXSwgaW50IG9mZnNldHNbXSkgewotCQlmb3IgKGludCBpID0gMDsgaSA8IG9mZnNldHMubGVuZ3RoOyBpKyspIHsKLQkJCWFzc2VydEVxdWFscygib2Zmc2V0IG1pc21hdGNoZWQiLCB0eXBlZFJlZ2lvbnNbaV0uZ2V0T2Zmc2V0KCksIG9mZnNldHNbaV0pOwotCQkJaWYgKGkgPiAwKSB7Ci0JCQkJYXNzZXJ0RXF1YWxzKCJsZW5ndGhzIG1pc2FsaWduZWQiLCB0eXBlZFJlZ2lvbnNbaV0uZ2V0T2Zmc2V0KCksIHR5cGVkUmVnaW9uc1tpIC0gMV0uZ2V0T2Zmc2V0KCkgKyB0eXBlZFJlZ2lvbnNbaSAtIDFdLmdldExlbmd0aCgpKTsKLQkJCX0KLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvcGFydGl0aW9uaW5nL3Rlc3RmaWxlcy9qc3AvYnVnMTMxNDYzLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvcGFydGl0aW9uaW5nL3Rlc3RmaWxlcy9qc3AvYnVnMTMxNDYzLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzE3MjE5Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3BhcnRpdGlvbmluZy90ZXN0ZmlsZXMvanNwL2J1ZzEzMTQ2My5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTxqc3A6dGV4dD4NCi0JPCFbQ0RBVEFbIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTEiID8+IF1dPg0KLTwvanNwOnRleHQ+DQotPGpzcDpzY3JpcHRsZXQ+DQotCTwhW0NEQVRBWw0KLQkJU3RyaW5nIHRlc3QgPSAic29tZXRoaW5nIjsNCi0JXV0+DQotPC9qc3A6c2NyaXB0bGV0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvcGFydGl0aW9uaW5nL3Rlc3RmaWxlcy9qc3AvY29tcGFueTMwMGsuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9wYXJ0aXRpb25pbmcvdGVzdGZpbGVzL2pzcC9jb21wYW55MzAway5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhZGY1ZTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9wYXJ0aXRpb25pbmcvdGVzdGZpbGVzL2pzcC9jb21wYW55MzAway5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw4MDk5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/Pg0KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS1zdHJpY3QuZHRkIj4NCi08aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+DQotCTxoZWFkPg0KLQkJPHRpdGxlPlRoZSBVbHRpbWF0ZSBBIENvbXBhbnk8L3RpdGxlPg0KLQk8L2hlYWQ+DQotCTxib2R5Pg0KLQkJPHA+DQotCQkJPGltZyBzcmM9Ii4uL2Jhbm5lci5naWYiIGhlaWdodD0iNTEiIHdpZHRoPSI2NTkiIGFsdD0iIiAvPg0KLQkJPC9wPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTxwPg0KLQkJCTxpbWcgc3JjPSIuLi9mb290ZXIuZ2lmIiBoZWlnaHQ9IjI1IiB3aWR0aD0iNjU5IiBhbHQ9IiIgLz4NCi0JCTwvcD4NCi0JPC9ib2R5Pg0KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3BhcnRpdGlvbmluZy90ZXN0ZmlsZXMvanNwL2V4YW1wbGUwMS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3BhcnRpdGlvbmluZy90ZXN0ZmlsZXMvanNwL2V4YW1wbGUwMS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjN2M1NGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9wYXJ0aXRpb25pbmcvdGVzdGZpbGVzL2pzcC9leGFtcGxlMDEuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sIiAlPg0KLTxqc3A6ZGlyZWN0aXZlLnBhZ2UgY29udGVudFR5cGU9dGV4dC9odG1sIiAvPg0KLTxIVE1MIGlkPSI8JSBqYXZhIGNvZGUgInN0cmluZyIgc2VjdGlvbiAlPiI+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9wYXJ0aXRpb25pbmcvdGVzdGZpbGVzL2pzcC9leGFtcGxlMDIuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9wYXJ0aXRpb25pbmcvdGVzdGZpbGVzL2pzcC9leGFtcGxlMDIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNmQwZWM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvcGFydGl0aW9uaW5nL3Rlc3RmaWxlcy9qc3AvZXhhbXBsZTAyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotICAgICAgIDxwPg0KLSAgICAgICA8JSB0ZXN0aW5nICIxMjMiIHRlc3QgdGVzdDsNCi0gICAgICAgLy8gdGVzdA0KLSAgICAgICBvbmUgdHdvIHRocmVlDQotICAgICAgICU+DQotICAgICAgIDwhLS0gNzggLS0+DQotICAgICAgIDx0YWJsZSBpZCA9ICI8JSB0ZXN0ICU+IiBhdHRyaWI9anVuaz4NCi0gICAgICAgPC9CT0RZPg0KLSAgICAgICA8L0hUTUw+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9wYXJ0aXRpb25pbmcvdGVzdGZpbGVzL2pzcC9leGFtcGxlMDMuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9wYXJ0aXRpb25pbmcvdGVzdGZpbGVzL2pzcC9leGFtcGxlMDMuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZmZkMzEwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvcGFydGl0aW9uaW5nL3Rlc3RmaWxlcy9qc3AvZXhhbXBsZTAzLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPEhUTUw+DQotPFNDUklQVD4NCi1qYXZhIHNjcmlwdCBzZWN0aW9uDQotPC9TQ1JJUFQ+DQotPFNUWUxFPg0KLSAgIHN0eWxlIHNlY3Rpb24NCi0gICA8L1NUWUxFPg0KLTwvSFRNTD4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3BhcnRpdGlvbmluZy90ZXN0ZmlsZXMvanNwL2V4YW1wbGUwNC5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3BhcnRpdGlvbmluZy90ZXN0ZmlsZXMvanNwL2V4YW1wbGUwNC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4MDg3MDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9wYXJ0aXRpb25pbmcvdGVzdGZpbGVzL2pzcC9leGFtcGxlMDQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08c2NyaXB0IGxhbmd1YWdlPSJNeUxhbmd1YWdlIj48JT0gIkEiICU+ICAgICAgDQotIDwvU0NSSVBUPg0KLTwlLS0gLS0lPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvcGFydGl0aW9uaW5nL3Rlc3RmaWxlcy9qc3AvZXhhbXBsZTA1LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvcGFydGl0aW9uaW5nL3Rlc3RmaWxlcy9qc3AvZXhhbXBsZTA1LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTYxNTFkMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3BhcnRpdGlvbmluZy90ZXN0ZmlsZXMvanNwL2V4YW1wbGUwNS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi08Zm9ybWF0dGluZz4NCi08c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQotLy8JQ29weXJpZ2h0IDIwMDAsMjAwMSBieSB3d3cuZXhhbXBsZS5jb20NCi0gIGRvY3VtZW50LlVSTCA9ImEiOw0KLTwvc2NyaXB0Pg0KLQ0KLTwlIFN0cmluZyBhID0gImEiOyAlPg0KLTwlLS0gdGVzdCBjb21tZW50IC0tJT4NCi08JT0gDQotDQotIiAgIGFhYWFhICINCi0NCi0lPg0KLTwlISAlPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvcGFydGl0aW9uaW5nL3Rlc3RmaWxlcy9qc3AvZXhhbXBsZTA2LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvcGFydGl0aW9uaW5nL3Rlc3RmaWxlcy9qc3AvZXhhbXBsZTA2LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODUxNzNmNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3BhcnRpdGlvbmluZy90ZXN0ZmlsZXMvanNwL2V4YW1wbGUwNi5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi08JUBwYWdlIGxhbmd1YWdlPSJqYXZhc2NyaXB0IiAlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvcmVnaXN0cnkvQWRhcHRlckZhY3RvcnlSZWdpc3RyeVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvcmVnaXN0cnkvQWRhcHRlckZhY3RvcnlSZWdpc3RyeVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDI1NTM2Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3JlZ2lzdHJ5L0FkYXB0ZXJGYWN0b3J5UmVnaXN0cnlUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMucmVnaXN0cnk7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9ySlNQOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9yQ1NTOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvckhUTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5wcm92aXNpb25hbC5yZWdpc3RyeS5BZGFwdGVyRmFjdG9yeVJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwucHJvdmlzaW9uYWwucmVnaXN0cnkuQWRhcHRlckZhY3RvcnlSZWdpc3RyeUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JYTUw7Ci0KLS8qKgotICogQGF1dGhvciBwYXZlcnkKLSAqLwotcHVibGljIGNsYXNzIEFkYXB0ZXJGYWN0b3J5UmVnaXN0cnlUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgQ0xBU1NOQU1FX0hUTUxfRkFDVE9SWSA9ICJvcmcuZWNsaXBzZS53c3QuaHRtbC51aS5pbnRlcm5hbC5yZWdpc3RyeS5BZGFwdGVyRmFjdG9yeVByb3ZpZGVyRm9ySFRNTCI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgQ0xBU1NOQU1FX0RURF9GQUNUT1JZID0gIm9yZy5lY2xpcHNlLndzdC5kdGQudWkuaW50ZXJuYWwucmVnaXN0cnkuQWRhcHRlckZhY3RvcnlQcm92aWRlckZvckRURCI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgQ0xBU1NOQU1FX0pTUF9GQUNUT1JZID0gIm9yZy5lY2xpcHNlLmpzdC5qc3AudWkuaW50ZXJuYWwucmVnaXN0cnkuQWRhcHRlckZhY3RvcnlQcm92aWRlckZvckpTUCI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgQ0xBU1NOQU1FX0NTU19GQUNUT1JZID0gIm9yZy5lY2xpcHNlLndzdC5jc3MudWkuaW50ZXJuYWwucmVnaXN0cnkuQWRhcHRlckZhY3RvcnlQcm92aWRlckNTUyI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgQ0xBU1NOQU1FX1hNTF9GQUNUT1JZID0gIm9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwucmVnaXN0cnkuQWRhcHRlckZhY3RvcnlQcm92aWRlckZvclhNTCI7Ci0KLQotCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGUoKSB7Ci0JCUFkYXB0ZXJGYWN0b3J5UmVnaXN0cnkgaW5zdGFuY2UgPSBBZGFwdGVyRmFjdG9yeVJlZ2lzdHJ5SW1wbC5nZXRJbnN0YW5jZSgpOwotCQlhc3NlcnROb3ROdWxsKGluc3RhbmNlKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0QWxsRmFjdG9yaWVzKCkgewotCQlBZGFwdGVyRmFjdG9yeVJlZ2lzdHJ5IGluc3RhbmNlID0gQWRhcHRlckZhY3RvcnlSZWdpc3RyeUltcGwuZ2V0SW5zdGFuY2UoKTsKLQkJSXRlcmF0b3IgaXQgPSBpbnN0YW5jZS5nZXRBZGFwdGVyRmFjdG9yaWVzKCk7Ci0JCU9iamVjdCBwcm92aWRlciA9IG51bGw7Ci0KLQkJLy8gYWxsIHByb3ZpZGVycyBleHBlY3RlZCBjbGFzc25hbWVzIGFkZGVkIGhlcmUKLQkJTGlzdCBrbm93biA9IG5ldyBBcnJheUxpc3QoKTsKLQkJa25vd24uYWRkKENMQVNTTkFNRV9IVE1MX0ZBQ1RPUlkpOwotCQlrbm93bi5hZGQoQ0xBU1NOQU1FX0RURF9GQUNUT1JZKTsKLQkJa25vd24uYWRkKENMQVNTTkFNRV9KU1BfRkFDVE9SWSk7Ci0JCWtub3duLmFkZChDTEFTU05BTUVfQ1NTX0ZBQ1RPUlkpOwotCQlrbm93bi5hZGQoQ0xBU1NOQU1FX1hNTF9GQUNUT1JZKTsKLQotCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0JCQlwcm92aWRlciA9IGl0Lm5leHQoKTsKLQkJCWtub3duLnJlbW92ZShwcm92aWRlci5nZXRDbGFzcygpLmdldE5hbWUoKSk7Ci0JCQkvLyBTeXN0ZW0ub3V0LnByaW50bG4ocHJvdmlkZXIuZ2V0Q2xhc3MoKS5nZXROYW1lKCkpOwotCQl9Ci0KLQkJLy8gc2hvdWxkIGhhdmUgZW5jb3VudGVyZWQgYWxsIGV4cGVjdGVkIGFkYXB0ZXIgZmFjdG9yaWVzLgotCQlhc3NlcnRFcXVhbHMoInVua25vd24gKGV4dHJhKSBhZGFwdGVyIGZhY3RvcmllcyBmb3VuZCIsIDAsIGtub3duLnNpemUoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldEZhY3Rvcmllc1hNTCgpIHsKLQotCQlMaXN0IGtub3duID0gbmV3IEFycmF5TGlzdCgpOwotCQlrbm93bi5hZGQoQ0xBU1NOQU1FX1hNTF9GQUNUT1JZKTsKLQotCQlnZXRGYWN0b3JpZXNGb3JDb250ZW50VHlwZShrbm93biwgQ29udGVudFR5cGVJZEZvclhNTC5Db250ZW50VHlwZUlEX1hNTCwgQ0xBU1NOQU1FX0hUTUxfRkFDVE9SWSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldEZhY3Rvcmllc0hUTUwoKSB7Ci0KLQkJTGlzdCBrbm93biA9IG5ldyBBcnJheUxpc3QoKTsKLQkJa25vd24uYWRkKENMQVNTTkFNRV9KU1BfRkFDVE9SWSk7Ci0KLQkJZ2V0RmFjdG9yaWVzRm9yQ29udGVudFR5cGUoa25vd24sIENvbnRlbnRUeXBlSWRGb3JKU1AuQ29udGVudFR5cGVJRF9KU1AsIENMQVNTTkFNRV9YTUxfRkFDVE9SWSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldEZhY3Rvcmllc0pTUCgpIHsKLQotCQlMaXN0IGtub3duID0gbmV3IEFycmF5TGlzdCgpOwotCQlrbm93bi5hZGQoQ0xBU1NOQU1FX0hUTUxfRkFDVE9SWSk7Ci0KLQkJZ2V0RmFjdG9yaWVzRm9yQ29udGVudFR5cGUoa25vd24sIENvbnRlbnRUeXBlSWRGb3JIVE1MLkNvbnRlbnRUeXBlSURfSFRNTCwgQ0xBU1NOQU1FX0RURF9GQUNUT1JZKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0RmFjdG9yaWVzRFREKCkgewotCi0JCUxpc3Qga25vd24gPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCWtub3duLmFkZChDTEFTU05BTUVfRFREX0ZBQ1RPUlkpOwotCi0JCWdldEZhY3Rvcmllc0ZvckNvbnRlbnRUeXBlKGtub3duLCAib3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLmR0ZHNvdXJjZSIsIENMQVNTTkFNRV9IVE1MX0ZBQ1RPUlkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRGYWN0b3JpZXNDU1MoKSB7Ci0KLQkJTGlzdCBrbm93biA9IG5ldyBBcnJheUxpc3QoKTsKLQkJa25vd24uYWRkKENMQVNTTkFNRV9DU1NfRkFDVE9SWSk7Ci0KLQkJZ2V0RmFjdG9yaWVzRm9yQ29udGVudFR5cGUoa25vd24sIENvbnRlbnRUeXBlSWRGb3JDU1MuQ29udGVudFR5cGVJRF9DU1MsIENMQVNTTkFNRV9KU1BfRkFDVE9SWSk7Ci0JfQotCi0JLyoqCi0JICogQ29tcGFyZSB0byBhIGV4cGVjdGVkIGxpc3Qgb2YgQWRhcHRlckZhY3RvcnlQcm92aWRlcnMgKG1heSBiZSBzbWFsbGVyCi0JICogdGhhbiB0aGUgYWN0dWFsIGxpc3QpIGZvciBhIGdpdmVuIGNvbnRlbnRUeXBlSWQuIEF0IG1pbmltdW0gdGhlc2UKLQkgKiBleHBlY3RlZCBwcm92aWRlcnMgbXVzdCBiZSBmb3VuZCB0byBwYXNzLgotCSAqIAotCSAqIEBwYXJhbSBleHBlY3RlZAotCSAqIEBwYXJhbSBjb250ZW50VHlwZUlkCi0JICovCi0JcHJpdmF0ZSB2b2lkIGdldEZhY3Rvcmllc0ZvckNvbnRlbnRUeXBlKExpc3QgZXhwZWN0ZWQsIFN0cmluZyBjb250ZW50VHlwZUlkLCBTdHJpbmcgbm90RXhwZWN0ZWRDbGFzc25hbWUpIHsKLQotCQlBZGFwdGVyRmFjdG9yeVJlZ2lzdHJ5SW1wbCBpbnN0YW5jZSA9IChBZGFwdGVyRmFjdG9yeVJlZ2lzdHJ5SW1wbCkgQWRhcHRlckZhY3RvcnlSZWdpc3RyeUltcGwuZ2V0SW5zdGFuY2UoKTsKLQkJSXRlcmF0b3IgaXQgPSBpbnN0YW5jZS5nZXRBZGFwdGVyRmFjdG9yaWVzKGNvbnRlbnRUeXBlSWQpOwotCQlPYmplY3QgcHJvdmlkZXIgPSBudWxsOwotCQl3aGlsZSAoaXQuaGFzTmV4dCgpKSB7Ci0JCQlwcm92aWRlciA9IGl0Lm5leHQoKTsKLQkJCWV4cGVjdGVkLnJlbW92ZShwcm92aWRlci5nZXRDbGFzcygpLmdldE5hbWUoKSk7Ci0KLQkJCS8vIFN5c3RlbS5vdXQucHJpbnRsbigiZW5jb3VudGVyZWQgcHJvdmlkZXI6ICIgKwotCQkJLy8gcHJvdmlkZXIuZ2V0Q2xhc3MoKS5nZXROYW1lKCkpOwotCQkJYXNzZXJ0VHJ1ZSgiIXByb3ZpZGVyOiAiICsgbm90RXhwZWN0ZWRDbGFzc25hbWUgKyAiIHNob3VsZG4ndCBiZSBpbiB0aGUgbGlzdCEiLCAhbm90RXhwZWN0ZWRDbGFzc25hbWUuZXF1YWxzKHByb3ZpZGVyLmdldENsYXNzKCkuZ2V0TmFtZSgpKSk7Ci0JCX0KLQkJLy8gd2Ugc2hvdWxkIGhhdmUgYXQgbGVhc3QgZm91bmQgdGhlIGV4cGVjdGVkIGZhY3RvcnkgKG9yIGZhY3RvcmllcykKLQkJYXNzZXJ0VHJ1ZSgiZXh0cmEgcHJvdmlkZXJzIChleHBlY3RlZCBub25lKTogIiArIGV4cGVjdGVkLCBleHBlY3RlZC5pc0VtcHR5KCkpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvc2VhcmNoL0pTUFNlYXJjaFRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3NlYXJjaC9KU1BTZWFyY2hUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTQwODNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvc2VhcmNoL0pTUFNlYXJjaFRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuc2VhcmNoOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklKYXZhRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5zZWFyY2guSUphdmFTZWFyY2hDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuc2VhcmNoLlNlYXJjaERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLnNlYXJjaC5TZWFyY2hQYXR0ZXJuOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5qYXZhLklKU1BUcmFuc2xhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuamF2YS5KU1BUcmFuc2xhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuamF2YS5KU1BUcmFuc2xhdGlvbkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLmphdmEuSlNQVHJhbnNsYXRpb25BZGFwdGVyRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuamF2YS5zZWFyY2guSlNQU2VhcmNoU2NvcGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLmphdmEuc2VhcmNoLkpTUFNlYXJjaFN1cHBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS5pbnRlcm5hbC5qYXZhLnNlYXJjaC5CYXNpY0pTUFNlYXJjaFJlcXVlc3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnV0aWwuRmlsZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy51dGlsLlByb2plY3RVbnppcFV0aWxpdHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS5zZXJ2aWNlLmRhdGFsb2NhdGlvbi5Mb2NhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLQotCi0vKioKLSAqIFRlc3RzIGZvciBKU1BTZWFyY2hTdXBwb3J0Ci0gKiBAYXV0aG9yIHBhdmVyeQotICovCi1wdWJsaWMgY2xhc3MgSlNQU2VhcmNoVGVzdHMgZXh0ZW5kcyBUZXN0Q2FzZSBpbXBsZW1lbnRzIElKYXZhU2VhcmNoQ29uc3RhbnRzIHsKLQotCS8qKgotCSAqIHRvIGFjY2VwdCBzZWFyY2ggbWF0Y2hlcwotCSAqIGFkZENoZWNrTWF0Y2goLi4uKSBmb3IgbWF0Y2hlcyB5b3UgZXhwZWN0LCBydW4gc2VhcmNoIHN1cHBvcnQsIGNoZWNrVmFsaWQoKSB0byBzZWUgaWYgYWxsIGV4cGVjdGVkIGdvdCBoaXQKLQkgKi8KLQljbGFzcyBUZXN0SnNwU2VhcmNoUmVxdWVzdG9yIGV4dGVuZHMgQmFzaWNKU1BTZWFyY2hSZXF1ZXN0b3IgewotCi0JCXByaXZhdGUgTGlzdCBtYXRjaGVzID0gbnVsbDsKLQotCQlwdWJsaWMgVGVzdEpzcFNlYXJjaFJlcXVlc3RvcigpIHsKLQkJCXRoaXMubWF0Y2hlcyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJfQotCi0JCS8vIGNhbGxlZCBieSBzZWFyY2ggZnJhbWV3b3JrCi0JCXByb3RlY3RlZCB2b2lkIGFkZFNlYXJjaE1hdGNoKElTdHJ1Y3R1cmVkRG9jdW1lbnQganNwRG9jdW1lbnQsIElGaWxlIGpzcEZpbGUsIGludCBqc3BTdGFydCwgaW50IGpzcEVuZCwgU3RyaW5nIGpzcFRleHQpIHsKLQkJCXRoaXMubWF0Y2hlcy5yZW1vdmUobmV3IFRlc3RTZWFyY2hNYXRjaChqc3BGaWxlLmdldE5hbWUoKSwganNwU3RhcnQsIGpzcEVuZCkpOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgYmVnaW5SZXBvcnRpbmcoKSB7Ci0JCQkvLyBkbyBub3RoaW5nIHNpbmNlIHdlIGhhdmUgbm8gVUksIGRvbid0IGFjY2VzcyBJU2VhcmNoUmVzdWx0VmlldwotCQl9Ci0KLQkJcHVibGljIHZvaWQgZW5kUmVwb3J0aW5nKCkgewotCQkJLy8gZG8gbm90aGluZyBzaW5jZSB3ZSBoYXZlIG5vIFVJLCBkb24ndCBhY2Nlc3MgSVNlYXJjaFJlc3VsdFZpZXcKLQkJfQotCi0JCXB1YmxpYyB2b2lkIGFkZENoZWNrTWF0Y2goU3RyaW5nIGZpbGVuYW1lLCBpbnQganNwU3RhcnQsIGludCBqc3BFbmQpIHsKLQkJCXRoaXMubWF0Y2hlcy5hZGQobmV3IFRlc3RTZWFyY2hNYXRjaChmaWxlbmFtZSwganNwU3RhcnQsIGpzcEVuZCkpOwotCQl9Ci0KLQkJcHVibGljIGJvb2xlYW4gY2hlY2tWYWxpZCgpIHsKLQkJCXJldHVybiB0aGlzLm1hdGNoZXMuaXNFbXB0eSgpOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgY2xlYXIoKSB7Ci0JCQl0aGlzLm1hdGNoZXMuY2xlYXIoKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIHRvIHZhbGlkYXRlIHNlYXJjaCBtYXRjaGVzIChjaGVja01hdGNoIG1hdGNoZXMgYSBzZWFyY2ggaGl0KQotCSAqLwotCWNsYXNzIFRlc3RTZWFyY2hNYXRjaCB7Ci0KLQkJcHVibGljIFN0cmluZyBmaWxlbmFtZSA9IG51bGw7Ci0JCXB1YmxpYyBpbnQganNwU3RhcnQgPSAtMTsKLQkJcHVibGljIGludCBqc3BFbmQgPSAtMTsKLQotCQlwdWJsaWMgVGVzdFNlYXJjaE1hdGNoKFN0cmluZyBmaWxlbmFtZSwgaW50IGpzcFN0YXJ0LCBpbnQganNwRW5kKSB7Ci0JCQl0aGlzLmZpbGVuYW1lID0gZmlsZW5hbWU7Ci0JCQl0aGlzLmpzcFN0YXJ0ID0ganNwU3RhcnQ7Ci0JCQl0aGlzLmpzcEVuZCA9IGpzcEVuZDsKLQkJfQotCi0JCXB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgb2JqKSB7Ci0JCQlpZiAoIShvYmogaW5zdGFuY2VvZiBUZXN0U2VhcmNoTWF0Y2gpKQotCQkJCXJldHVybiBmYWxzZTsKLQotCQkJVGVzdFNlYXJjaE1hdGNoIHBvc3NpYmxlID0gKFRlc3RTZWFyY2hNYXRjaCkgb2JqOwotCQkJcmV0dXJuIHRoaXMuZmlsZW5hbWUuZXF1YWxzSWdub3JlQ2FzZShwb3NzaWJsZS5maWxlbmFtZSkgJiYgdGhpcy5qc3BTdGFydCA9PSBwb3NzaWJsZS5qc3BTdGFydCAmJiB0aGlzLmpzcEVuZCA9PSBwb3NzaWJsZS5qc3BFbmQ7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIFByb2plY3RVbnppcFV0aWxpdHkgcHJvalV0aWwgPSBudWxsOwotCXByaXZhdGUgYm9vbGVhbiBpc1NldHVwID0gZmFsc2U7Ci0KLQlwdWJsaWMgSlNQU2VhcmNoVGVzdHMoKSB7Ci0JCXN1cGVyKCJKU1AgU2VhcmNoIFRlc3RzIik7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc2V0VXAoKTsKLQkJaWYgKCF0aGlzLmlzU2V0dXApIHsKLQkJCWRvU2V0dXAoKTsKLQkJCXRoaXMuaXNTZXR1cCA9IHRydWU7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgZG9TZXR1cCgpIHRocm93cyBFeGNlcHRpb24gewotCi0JCXRoaXMucHJvalV0aWwgPSBuZXcgUHJvamVjdFVuemlwVXRpbGl0eSgpOwotCi0JCS8vIHJvb3Qgb2Ygd29ya3NwYWNlIGRpcmVjdG9yeQotCQlMb2NhdGlvbiBwbGF0Zm9ybUxvY2F0aW9uID0gUGxhdGZvcm0uZ2V0SW5zdGFuY2VMb2NhdGlvbigpOwotCi0JCUZpbGUgemlwRmlsZSA9IEZpbGVVdGlsLm1ha2VGaWxlRm9yKFByb2plY3RVbnppcFV0aWxpdHkuUFJPSkVDVF9aSVBTX0ZPTERFUiwgImpzcHNlYXJjaF90ZXN0cy56aXAiLCBQcm9qZWN0VW56aXBVdGlsaXR5LlBST0pFQ1RfWklQU19GT0xERVIpOwotCQl0aGlzLnByb2pVdGlsLnVuemlwQW5kSW1wb3J0KHppcEZpbGUsIHBsYXRmb3JtTG9jYXRpb24uZ2V0VVJMKCkuZ2V0RmlsZSgpKTsKLQkJdGhpcy5wcm9qVXRpbC5pbml0SmF2YVByb2plY3QoImp1ZG8iKTsKLQotCQkvL0pTUFNlYXJjaFN1cHBvcnQuZ2V0SW5zdGFuY2UoKS5pbmRleFdvcmtzcGFjZUFuZFdhaXQoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci50ZWFyRG93bigpOwotCQkvLyBkbyBub3RoaW5nCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdEluZGV4V29ya3NwYWNlKCkgewotCQlKU1BTZWFyY2hTdXBwb3J0IHN1cHBvcnQgPSBKU1BTZWFyY2hTdXBwb3J0LmdldEluc3RhbmNlKCk7Ci0JCVNlYXJjaERvY3VtZW50IGRvYyA9IEpTUFNlYXJjaFN1cHBvcnQuZ2V0SW5zdGFuY2UoKS5nZXRTZWFyY2hEb2N1bWVudCgiL2p1ZG8vc2VhcmNoVGVzdEpTUC5qYXZhIik7Ci0JCWFzc2VydE5vdE51bGwoImNvdWxkbid0IHJldHJpZXZlOicvanVkby9zZWFyY2hUZXN0SlNQLmphdmEnIiwgZG9jKTsKLQotCQlkb2MgPSBzdXBwb3J0LmdldFNlYXJjaERvY3VtZW50KCIvanVkby9zZWFyY2hUZXN0SlNQMi5qYXZhIik7Ci0JCWFzc2VydE5vdE51bGwoImNvdWxkbid0IHJldHJpZXZlOicvanVkby9zZWFyY2hUZXN0SlNQMi5qYXZhJyIsIGRvYyk7Ci0KLQkJZG9jID0gc3VwcG9ydC5nZXRTZWFyY2hEb2N1bWVudCgiL2p1ZG8vc2VhcmNoVGVzdEpTUDMuamF2YSIpOwotCQlhc3NlcnROb3ROdWxsKCJjb3VsZG4ndCByZXRyaWV2ZTonL2p1ZG8vc2VhcmNoVGVzdEpTUDMuamF2YSciLCBkb2MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWFyY2hGaWVsZCgpIHsKLQotCQlUZXN0SnNwU2VhcmNoUmVxdWVzdG9yIHJlcXVlc3RvciA9IG5ldyBUZXN0SnNwU2VhcmNoUmVxdWVzdG9yKCk7Ci0JCXJlcXVlc3Rvci5hZGRDaGVja01hdGNoKCJzZWFyY2hUZXN0SlNQLmpzcCIsIDkzLCAxMDYpOwotCQlKU1BTZWFyY2hTdXBwb3J0LmdldEluc3RhbmNlKCkuc2VhcmNoKCJzZWFyY2hGb3JUaGlzIiwgbmV3IEpTUFNlYXJjaFNjb3BlKCksIEZJRUxELCBBTExfT0NDVVJSRU5DRVMsIFNlYXJjaFBhdHRlcm4uUl9FWEFDVF9NQVRDSCwgdHJ1ZSwgcmVxdWVzdG9yKTsKLQkJYXNzZXJ0VHJ1ZSgiZGlkIG5vdCBmaW5kIGFsbCBleHBlY3RlZCBtYXRjaGVzOiBzZWFyY2hGb3JUaGlzIiwgcmVxdWVzdG9yLmNoZWNrVmFsaWQoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlYXJjaE1ldGhvZCgpIHsKLQotCQlUZXN0SnNwU2VhcmNoUmVxdWVzdG9yIHJlcXVlc3RvciA9IG5ldyBUZXN0SnNwU2VhcmNoUmVxdWVzdG9yKCk7Ci0JCXJlcXVlc3Rvci5hZGRDaGVja01hdGNoKCJzZWFyY2hUZXN0SlNQLmpzcCIsIDE0MywgMTU4KTsKLQkJcmVxdWVzdG9yLmFkZENoZWNrTWF0Y2goInNlYXJjaFRlc3RKU1AuanNwIiwgMjk4LCAzMTUpOwotCQlKU1BTZWFyY2hTdXBwb3J0LmdldEluc3RhbmNlKCkuc2VhcmNoKCJzZWFyY2hGb3JNZXRob2QiLCBuZXcgSlNQU2VhcmNoU2NvcGUoKSwgTUVUSE9ELCBBTExfT0NDVVJSRU5DRVMsIFNlYXJjaFBhdHRlcm4uUl9FWEFDVF9NQVRDSCwgdHJ1ZSwgcmVxdWVzdG9yKTsKLQkJYXNzZXJ0VHJ1ZSgiZGlkIG5vdCBmaW5kIGFsbCBleHBlY3RlZCBtYXRjaGVzOiBzZWFyY2hGb3JNZXRob2QiLCByZXF1ZXN0b3IuY2hlY2tWYWxpZCgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VhcmNoUGF0dGVybk1hdGNoKCkgewotCi0JCVRlc3RKc3BTZWFyY2hSZXF1ZXN0b3IgcmVxdWVzdG9yID0gbmV3IFRlc3RKc3BTZWFyY2hSZXF1ZXN0b3IoKTsKLQkJcmVxdWVzdG9yLmFkZENoZWNrTWF0Y2goInNlYXJjaFRlc3RKU1AuanNwIiwgOTMsIDEwNik7Ci0JCXJlcXVlc3Rvci5hZGRDaGVja01hdGNoKCJzZWFyY2hUZXN0SlNQMi5qc3AiLCAxMTYsIDEyOSk7Ci0JCXJlcXVlc3Rvci5hZGRDaGVja01hdGNoKCJzZWFyY2hUZXN0SlNQMi5qc3AiLCAxNTIsIDE2NSk7Ci0JCUpTUFNlYXJjaFN1cHBvcnQuZ2V0SW5zdGFuY2UoKS5zZWFyY2goInNlYXJjaCoiLCBuZXcgSlNQU2VhcmNoU2NvcGUoKSwgRklFTEQsIEFMTF9PQ0NVUlJFTkNFUywgU2VhcmNoUGF0dGVybi5SX1BBVFRFUk5fTUFUQ0gsIHRydWUsIHJlcXVlc3Rvcik7Ci0JCWFzc2VydFRydWUoImRpZCBub3QgZmluZCBhbGwgZXhwZWN0ZWQgbWF0Y2hlczogc2VhcmNoKiIsIHJlcXVlc3Rvci5jaGVja1ZhbGlkKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWFyY2hQcm9qZWN0Q2xhc3NlcygpIHsKLQotCQlUZXN0SnNwU2VhcmNoUmVxdWVzdG9yIHJlcXVlc3RvciA9IG5ldyBUZXN0SnNwU2VhcmNoUmVxdWVzdG9yKCk7Ci0JCXJlcXVlc3Rvci5hZGRDaGVja01hdGNoKCJzZWFyY2hUZXN0SlNQMy5qc3AiLCAxNDgsIDE1Nyk7Ci0JCXJlcXVlc3Rvci5hZGRDaGVja01hdGNoKCJzZWFyY2hUZXN0SlNQMy5qc3AiLCAxNzAsIDE3OSk7Ci0JCXJlcXVlc3Rvci5hZGRDaGVja01hdGNoKCJzZWFyY2hUZXN0SlNQMy5qc3AiLCAyNjMsIDI3Myk7Ci0JCXJlcXVlc3Rvci5hZGRDaGVja01hdGNoKCJzZWFyY2hUZXN0SlNQMy5qc3AiLCAyOTksIDMwOSk7Ci0JCXJlcXVlc3Rvci5hZGRDaGVja01hdGNoKCJzZWFyY2hUZXN0SlNQMy5qc3AiLCA0MDgsIDQxNyk7Ci0JCXJlcXVlc3Rvci5hZGRDaGVja01hdGNoKCJzZWFyY2hUZXN0SlNQMy5qc3AiLCA0MzAsIDQzOSk7Ci0JCUpTUFNlYXJjaFN1cHBvcnQuZ2V0SW5zdGFuY2UoKS5zZWFyY2goIkplbGx5YmVhbioiLCBuZXcgSlNQU2VhcmNoU2NvcGUoKSwgVFlQRSwgQUxMX09DQ1VSUkVOQ0VTLCBTZWFyY2hQYXR0ZXJuLlJfUEFUVEVSTl9NQVRDSCwgdHJ1ZSwgcmVxdWVzdG9yKTsKLQkJYXNzZXJ0VHJ1ZSgiZGlkIG5vdCBmaW5kIGFsbCBleHBlY3RlZCBtYXRjaGVzOiBzZWFyY2gqIiwgcmVxdWVzdG9yLmNoZWNrVmFsaWQoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlYXJjaExvY2FsVmFyaWFibGUoKSB7Ci0KLQkJSURPTU1vZGVsIHhtbE1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCUlQYXRoIGpzcFRlc3RGaWxlUGF0aCA9IG5ldyBQYXRoKCJqdWRvL1NFQVJDSC9zZWFyY2hUZXN0SlNQMy5qc3AiKTsKLQkJCUlGaWxlIGZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUoanNwVGVzdEZpbGVQYXRoKTsKLQkJCXhtbE1vZGVsID0gKElET01Nb2RlbCkgZ2V0U3RydWN0dXJlZE1vZGVsRm9yUmVhZChmaWxlKTsKLQkJCXNldHVwQWRhcHRlckZhY3RvcnkoeG1sTW9kZWwpOwotCi0JCQlJRE9NRG9jdW1lbnQgZG9jID0geG1sTW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJCUpTUFRyYW5zbGF0aW9uQWRhcHRlciBhZGFwdGVyID0gKEpTUFRyYW5zbGF0aW9uQWRhcHRlcikgZG9jLmdldEFkYXB0ZXJGb3IoSUpTUFRyYW5zbGF0aW9uLmNsYXNzKTsKLQkJCUpTUFRyYW5zbGF0aW9uIHRyYW5zbGF0aW9uID0gYWRhcHRlci5nZXRKU1BUcmFuc2xhdGlvbigpOwotCQkJSUphdmFFbGVtZW50IGVsZW1lbnQgPSB0cmFuc2xhdGlvbi5nZXRFbGVtZW50c0Zyb21Kc3BSYW5nZSgzNzcsIDM4NClbMF07Ci0KLQkJCVRlc3RKc3BTZWFyY2hSZXF1ZXN0b3IgcmVxdWVzdG9yID0gbmV3IFRlc3RKc3BTZWFyY2hSZXF1ZXN0b3IoKTsKLQkJCXJlcXVlc3Rvci5hZGRDaGVja01hdGNoKCJzZWFyY2hUZXN0SlNQMy5qc3AiLCAzNzcsIDM4NCk7Ci0JCQlKU1BTZWFyY2hTdXBwb3J0LmdldEluc3RhbmNlKCkuc2VhcmNoKGVsZW1lbnQsIG5ldyBKU1BTZWFyY2hTY29wZSgpLCByZXF1ZXN0b3IpOwotCQkJYXNzZXJ0VHJ1ZSgiZGlkIG5vdCBmaW5kIGFsbCBleHBlY3RlZCBtYXRjaGVzOiBzZWFyY2gqIiwgcmVxdWVzdG9yLmNoZWNrVmFsaWQoKSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAoeG1sTW9kZWwgIT0gbnVsbCkKLQkJCQl4bWxNb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQkJfQotCX0KLQotCXByaXZhdGUgSVN0cnVjdHVyZWRNb2RlbCBnZXRTdHJ1Y3R1cmVkTW9kZWxGb3JSZWFkKElGaWxlIGZpbGUpIHsKLQotCQl0cnkgewotCQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQkJcmV0dXJuIG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvclJlYWQoZmlsZSk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGlvZXgpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiY291bGRuJ3Qgb3BlbiBmaWxlOiIgKyBmaWxlKTsKLQkJfQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIGFkZCB0aGUgZmFjdG9yeSBmb3IgSlNQVHJhbnNsYXRpb25BZGFwdGVyIGhlcmUKLQkgKiBAcGFyYW0gc20KLQkgKi8KLQlwcml2YXRlIHZvaWQgc2V0dXBBZGFwdGVyRmFjdG9yeShJU3RydWN0dXJlZE1vZGVsIHNtKSB7Ci0KLQkJSlNQVHJhbnNsYXRpb25BZGFwdGVyRmFjdG9yeSBmYWN0b3J5ID0gbmV3IEpTUFRyYW5zbGF0aW9uQWRhcHRlckZhY3RvcnkoKTsKLQkJc20uZ2V0RmFjdG9yeVJlZ2lzdHJ5KCkuYWRkRmFjdG9yeShmYWN0b3J5KTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3RocmVhZGVkL1RocmVhZGVkTW9kZWxSZWFkRWRpdFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvdGhyZWFkZWQvVGhyZWFkZWRNb2RlbFJlYWRFZGl0VGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMmI2YjIwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvdGhyZWFkZWQvVGhyZWFkZWRNb2RlbFJlYWRFZGl0VGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzAzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnRocmVhZGVkOwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuZmlsZWJ1ZmZlcnMuRmlsZUJ1ZmZlcnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5maWxlYnVmZmVycy5JVGV4dEZpbGVCdWZmZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5maWxlYnVmZmVycy5JVGV4dEZpbGVCdWZmZXJNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuam9icy5Kb2I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5CYWRMb2NhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuamF2YS5KU1BUcmFuc2xhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMudXRpbC5Qcm9qZWN0VXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS50ZXh0LmVkaXRzLkluc2VydEVkaXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLkluZGV4ZWRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0vKioKLSAqIENyZWF0ZWQgZm9yOiBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MTE2NTIzCi0gKi8KLXB1YmxpYyBjbGFzcyBUaHJlYWRlZE1vZGVsUmVhZEVkaXRUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgUFJPSkVDVF9OQU1FID0gIlBST0pFQ1RfMTE2NTIzIjsKLQlwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzU2V0dXAgPSBmYWxzZTsKLQkKLQlwcml2YXRlIGNsYXNzIFRyYW5zbGF0ZUpvYiBleHRlbmRzIEpvYiB7Ci0JCVN0cmluZyBmRmlsZVBhdGggPSBudWxsOwotCQlwdWJsaWMgVHJhbnNsYXRlSm9iKFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIGpvYm5hbWUpIHsKLQkJCXN1cGVyKGpvYm5hbWUpOwotCQkJZkZpbGVQYXRoID0gZmlsZW5hbWU7Ci0JCX0KLQkJcHJvdGVjdGVkIElTdGF0dXMgcnVuKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgewotCQkJSUZpbGUgZiA9IGdldE9yQ3JlYXRlRmlsZShmRmlsZVBhdGgpOwotCQkJSlNQVHJhbnNsYXRvciB0cmFucyA9IG5ldyBKU1BUcmFuc2xhdG9yKCk7Ci0JCQlJU3RydWN0dXJlZE1vZGVsIHNNb2RlbCA9IG51bGw7Ci0JCQl0cnkgewotCQkJCXNNb2RlbCA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuZ2V0TW9kZWxGb3JSZWFkKGYpOwotCQkJCWlmKHNNb2RlbCAhPSBudWxsKSB7Ci0JCQkJCXRyYW5zLnJlc2V0KChJRE9NTm9kZSlzTW9kZWwuZ2V0SW5kZXhlZFJlZ2lvbigwKSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQkJCXRyYW5zLnRyYW5zbGF0ZSgpOwotCQkJCX0KLQkJCQkKLQkJCX0KLQkJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jawotCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQl9Ci0JCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jawotCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQl9Ci0JCQlmaW5hbGx5IHsKLQkJCQlpZihzTW9kZWwgIT0gbnVsbCkKLQkJCQkJc01vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotCQkJfQotCQkJCi0JCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQkJfQotCX0KLQkKLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zZXRVcCgpOwotCQlpZighaXNTZXR1cCkgewotCQkJZG9TZXR1cCgpOwotCQkJaXNTZXR1cCA9IHRydWU7Ci0JCX0KLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIGRvU2V0dXAoKSB7Ci0JCWNyZWF0ZVByb2plY3QoKTsKLQl9Ci0JLyoKLQkgKiBjcmVhdGUgMTAwIHRlc3QgZmlsZXMKLQkgKiByZXBlYXQgZG9UZXN0KCkgb24gdGhvc2UgMTAwIGZpbGVzIDV4Ci0JICovCi0vLwlwdWJsaWMgdm9pZCB0ZXN0XzExNjUyMygpIHsKLS8vCi0vLwkJLy8gdHJ5IGFuZCBkbyBzb21lIGNvbmN1cnJlbnQgZWRpdGluZy9pbmRleGluZwotLy8JCWZvcihpbnQgaj0wOyBqPDU7IGorKykgewotLy8JCQlmb3IoaW50IGk9MDsgaTwxMDA7IGkrKykgCi0vLwkJCQlkb1Rlc3QoInRlc3RfIiArIGkgKyAiLmpzcCIpOwotLy8JCX0KLS8vCX0KLS8vCS8qCi0vLwkgKiBkb1Rlc3QoKSBvbiBzYW1lIGZpbGUgMTAweAotLy8JICovCi0vLwlwdWJsaWMgdm9pZCB0ZXN0XzExNjUyM18yKCkgewotLy8KLS8vCQkvLyB0cnkgYW5kIGRvIHNvbWUgY29uY3VycmVudCBlZGl0aW5nL2luZGV4aW5nCi0vLwkJZm9yKGludCBpPTA7IGk8MTAwOyBpKyspIAotLy8JCQlkb1Rlc3QoInRlc3RfMS5qc3AiKTsKLS8vCX0KLQkKLQkvKgotCSAqIGRvVGVzdCgpIChpbnNlcnQgdGV4dCAmIGVkaXQgZG9tKQotCSAqIGFuZCBmb3JjZSBKU1BUcmFuc2xhdGlvbiBvbiBhbm90aGVyIHRocmVhZAotCSAqIAotCSAqIHJlcGVhdCBsb3RzIG9mIHRpbWVzCi0JICovCi0JcHVibGljIHZvaWQgdGVzdF8xMTY1MjNfMygpIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gInRfdGVzdF8xLmpzcCI7Ci0JCQotCQlnZXRPckNyZWF0ZUZpbGUoUFJPSkVDVF9OQU1FICsgIi8iICsgZmlsZW5hbWUpOwotCQkKLQkJZm9yKGludCBqPTA7IGo8MTAwOyBqKyspIHsKLQkJCVRyYW5zbGF0ZUpvYiB0cmFuc2xhdGVKb2IgPSBuZXcgVHJhbnNsYXRlSm9iKFBST0pFQ1RfTkFNRSArICIvIiArIGZpbGVuYW1lLCAiSlNQIFRyYW5zbGF0ZSBKb2IiKTsKLQkJCXRyYW5zbGF0ZUpvYi5zY2hlZHVsZSgpOwotCQkJcGVyZm9ybUVkaXRzKGZpbGVuYW1lKTsKLQkJfQotCX0KLQkKLQlwcml2YXRlIHZvaWQgcGVyZm9ybUVkaXRzKFN0cmluZyBmaWxlUGF0aCkgewotCQkKLQkJSUZpbGUgYmxhbmtKc3BGaWxlID0gZ2V0T3JDcmVhdGVGaWxlKFBST0pFQ1RfTkFNRSArICIvIiArIGZpbGVQYXRoKTsKLQkJCi0JCS8vIGRvY3VtZW50IGVkaXQKLQkJaURvY3VtZW50SW5zZXJ0KGJsYW5rSnNwRmlsZSwgICI8bG9naWM6aXRlcmF0ZSBpZD1cIml0ZXJhdGVJRFwiIHR5cGU9XCJqYXZhLnV0aWwuTGlzdFwiIGluZGV4SWQ9XCJpbmRleElEXCI+PC9sb2dpYzppdGVyYXRlPlxuIiwwKTsKLQkJCi0JCS8vIGRvbSBlZGl0Ci0JCUhhc2hNYXAgYXR0cnMgPSBuZXcgSGFzaE1hcCgpOwotCQlhdHRycy5wdXQoInVyaSIsICJzdHJ1dHMtbG9naWMudGxkIik7Ci0JCWF0dHJzLnB1dCgicHJlZml4IiwgImxvZ2ljIik7Ci0JCWRvbUluc2VydEVsZW1lbnQoYmxhbmtKc3BGaWxlLCAianNwOmRpcmVjdGl2ZS50YWdsaWIiLCBhdHRycywgMCk7Ci0JfQotCQotCXByb3RlY3RlZCBJRmlsZSBnZXRPckNyZWF0ZUZpbGUoU3RyaW5nIGZpbGVQYXRoKSB7Ci0JCUlGaWxlIGJsYW5rSnNwRmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShuZXcgUGF0aChmaWxlUGF0aCkpOwotCQlpZiAoYmxhbmtKc3BGaWxlICE9IG51bGwgJiYgIWJsYW5rSnNwRmlsZS5leGlzdHMoKSkgewotCQkJdHJ5IHsKLQkJCQlibGFua0pzcEZpbGUuY3JlYXRlKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShuZXcgYnl0ZVswXSksIHRydWUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJfQotCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGJsYW5rSnNwRmlsZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBkb21JbnNlcnRFbGVtZW50KElGaWxlIGZpbGUsIFN0cmluZyB0YWdOYW1lLCBIYXNoTWFwIGF0dHJpYnV0ZXMsIGludCBpbnNlcnRpb25Qb2ludCkgewotCQlJU3RydWN0dXJlZE1vZGVsIHNNb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlzTW9kZWwgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmdldE1vZGVsRm9yRWRpdChmaWxlKTsKLQkJCWlmKHNNb2RlbCAhPSBudWxsKSB7Ci0JCQkJRG9jdW1lbnQgZG9tRG9jID0gKERvY3VtZW50KXNNb2RlbC5nZXRBZGFwdGVyKERvY3VtZW50LmNsYXNzICk7Ci0JCQkJSW5kZXhlZFJlZ2lvbiByID0gc01vZGVsLmdldEluZGV4ZWRSZWdpb24oaW5zZXJ0aW9uUG9pbnQpOwotCQkJCWlmKHIgaW5zdGFuY2VvZiBOb2RlKSB7Ci0JCQkJCUVsZW1lbnQgZSA9IGRvbURvYy5jcmVhdGVFbGVtZW50KHRhZ05hbWUpOwotCQkJCQlJdGVyYXRvciBpdGVyID0gYXR0cmlidXRlcy5rZXlTZXQoKS5pdGVyYXRvcigpOwotCQkJCQkvLyBzZXQgYXR0cmlidXRlcwotCQkJCQl3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKLQkJCQkJCVN0cmluZyBhdHRyID0gKFN0cmluZykgaXRlci5uZXh0KCk7Ci0JCQkJCQlTdHJpbmcgdmFsID0gIChTdHJpbmcpYXR0cmlidXRlcy5nZXQoYXR0cik7Ci0JCQkJCQkKLQkJCQkJCUF0dHIgYXR0ck5vZGUgPSBkb21Eb2MuY3JlYXRlQXR0cmlidXRlKGF0dHIpOwotCQkJCQkJYXR0ck5vZGUuc2V0VmFsdWUodmFsKTsKLQkJCQkJCWUuc2V0QXR0cmlidXRlTm9kZShhdHRyTm9kZSk7Ci0JCQkJCX0KLQkJCQkJZG9tRG9jLmluc2VydEJlZm9yZShlLCAoTm9kZSlyKTsKLQkJCQkJZG9tRG9jLmluc2VydEJlZm9yZShkb21Eb2MuY3JlYXRlVGV4dE5vZGUoIlxuIiksIChOb2RlKXIpOwotCQkJCX0KLQkJCQlzTW9kZWwuc2F2ZSgpOwotCQkJfQotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZihzTW9kZWwgIT0gbnVsbCkKLQkJCQlzTW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0JCi0JCS8vIFN5c3RlbS5vdXQucHJpbnRsbigiaW5zZXJ0ZWQgZWxlbWVudCwgZG9tIHN0eWxlIik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIGlEb2N1bWVudEluc2VydChJRmlsZSBmaWxlLCBTdHJpbmcgdGV4dCwgaW50IGluc2VydGlvblBvaW50KSB7Ci0JCQotCQkvLyBnZXQgdGhlIGZpbGUncyB0ZXh0IGJ1ZmZlcgotCQlJVGV4dEZpbGVCdWZmZXJNYW5hZ2VyIGJ1ZmZlck1hbmFnZXIgPSBGaWxlQnVmZmVycy5nZXRUZXh0RmlsZUJ1ZmZlck1hbmFnZXIoKTsKLQkJSVBhdGggcGF0aCA9IGZpbGUuZ2V0RnVsbFBhdGgoKTsKLQkJdHJ5IHsKLQkJCWJ1ZmZlck1hbmFnZXIuY29ubmVjdChwYXRoLCBudWxsKTsKLQotCQkJSURvY3VtZW50IGRvYyA9IG51bGw7Ci0KLQkJCUlUZXh0RmlsZUJ1ZmZlciBidWZmID0gYnVmZmVyTWFuYWdlci5nZXRUZXh0RmlsZUJ1ZmZlcihmaWxlLmdldEZ1bGxQYXRoKCkpOwotCQkJZG9jID0gYnVmZi5nZXREb2N1bWVudCgpOwotCi0JCQlib29sZWFuIHNhdmVXaGVuRG9uZSA9ICFidWZmLmlzRGlydHkoKTsKLQotCQkJSW5zZXJ0RWRpdCBpbnNlcnRFZGl0ID0gbmV3IEluc2VydEVkaXQoaW5zZXJ0aW9uUG9pbnQsIHRleHQpOwotCQkJaW5zZXJ0RWRpdC5hcHBseShkb2MpOwotCi0JCQkvLyBpZiB0aGUgZG9jdW1lbnQgd2FzIG5vdCBwcmV2aW91c2x5IGRpcnR5LCBzYXZlIGl0Ci0JCQlpZiAoc2F2ZVdoZW5Eb25lKQotCQkJCWJ1ZmYuY29tbWl0KG51bGwsIGZhbHNlKTsKLQkJfQotCQljYXRjaCAoQmFkTG9jYXRpb25FeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQkJCi0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQl0cnkgewotCQkJCWJ1ZmZlck1hbmFnZXIuZGlzY29ubmVjdChwYXRoLCBudWxsKTsKLQkJCX0KLQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfQotCQl9Ci0JCS8vIFN5c3RlbS5vdXQucHJpbnRsbigiaW5zZXJ0ZWQgdGV4dCwgZmlsZSBidWZmZXIgc3R5bGUiKTsKLQl9Ci0KLS8vCXByaXZhdGUgdm9pZCBzdHJ1Y3R1cmVkRG9jSW5zZXJ0KFN0cmluZyBmaWxlUGF0aCkgewotLy8JCS8vIFBST0pFQ1RfTkFNRSArICIvYmxhbmsuanNwIgotLy8JCUlGaWxlIGJsYW5rSnNwRmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShuZXcgUGF0aChmaWxlUGF0aCkpOwotLy8JCWlmIChibGFua0pzcEZpbGUgIT0gbnVsbCkgewotLy8JCQl0cnkgewotLy8JCQkJYmxhbmtKc3BGaWxlLmNyZWF0ZShuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0obmV3IGJ5dGVbMF0pLCB0cnVlLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLS8vCQkJfQotLy8JCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0vLwkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotLy8JCQl9Ci0vLwkJfQotLy8KLS8vCQlJU3RydWN0dXJlZE1vZGVsIHNNb2RlbCA9IG51bGw7Ci0vLwkJdHJ5IHsKLS8vCQkJc01vZGVsID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5nZXRNb2RlbEZvckVkaXQoYmxhbmtKc3BGaWxlKTsKLS8vCQkJaWYgKHNNb2RlbCAhPSBudWxsKSB7Ci0vLwkJCQlJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBzTW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0vLwotLy8JCQkJU3RyaW5nIGluc2VydFRleHQxID0gIjxsb2dpYzppdGVyYXRlIGlkPVwiaXRlcmF0ZUlEXCIgdHlwZT1cImphdmEudXRpbC5MaXN0XCIgaW5kZXhJZD1cImluZGV4SURcIj48L2xvZ2ljOml0ZXJhdGU+XG4iOwotLy8JCQkJU3RyaW5nIGluc2VydFRleHQyID0gIjwlQHRhZ2xpYiB1cmk9XCJzdHJ1dHMtbG9naWMudGxkXCIgcHJlZml4PVwibG9naWNcIiAlPlxuIjsKLS8vCi0vLwkJCQlzRG9jLnJlcGxhY2UoMCwgMCwgaW5zZXJ0VGV4dDEpOwotLy8JCQkJc0RvYy5yZXBsYWNlKDAsIDAsIGluc2VydFRleHQyKTsKLS8vCi0vLwkJCQlKU1BTZWFyY2hTdXBwb3J0LmdldEluc3RhbmNlKCkuYWRkSnNwRmlsZShibGFua0pzcEZpbGUpOwotLy8JCQl9Ci0vLwkJfQotLy8JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0vLwkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0vLwkJfQotLy8JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLS8vCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLS8vCQl9Ci0vLwkJY2F0Y2ggKEJhZExvY2F0aW9uRXhjZXB0aW9uIGUpIHsKLS8vCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLS8vCQl9Ci0vLwkJZmluYWxseSB7Ci0vLwkJCWlmIChzTW9kZWwgIT0gbnVsbCkKLS8vCQkJCXNNb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLS8vCQl9Ci0vLwl9Ci0KLQlwcml2YXRlIHZvaWQgY3JlYXRlUHJvamVjdCgpIHsKLQotCQkvLyBjcmVhdGUgcHJvamVjdAotCQlTdHJpbmdbXSBuYXR1cmVJZHMgPSB7UHJvamVjdFV0aWwuSkFWQV9OQVRVUkVfSUR9OwotCQlJUHJvamVjdCBwcm9qID0gUHJvamVjdFV0aWwuY3JlYXRlUHJvamVjdChQUk9KRUNUX05BTUUsIG51bGwsIG5hdHVyZUlkcyk7Ci0KLQkJLy8gY29weSBmaWxlcyBpbnRvIHdvcmtzcGFjZQotCQlJRmlsZSBmID0gUHJvamVjdFV0aWwuY29weUJ1bmRsZUVudHJ5SW50b1dvcmtzcGFjZSgiL3Rlc3RmaWxlcy8xMTY1MjMvc3RydXRzLmphciIsIFBST0pFQ1RfTkFNRSArICIvc3RydXRzLmphciIpOwotCQlhc3NlcnRUcnVlKGYuZXhpc3RzKCkpOwotCQlmID0gUHJvamVjdFV0aWwuY29weUJ1bmRsZUVudHJ5SW50b1dvcmtzcGFjZSgiL3Rlc3RmaWxlcy8xMTY1MjMvc3RydXRzLWxvZ2ljLnRsZCIsIFBST0pFQ1RfTkFNRSArICIvc3RydXRzLWxvZ2ljLnRsZCIpOwotCQlhc3NlcnRUcnVlKGYuZXhpc3RzKCkpOwotCi0JCS8vIGFkZCBzdHJ1dHMgdG8gY2xhc3NwYXRoCi0JCVByb2plY3RVdGlsLmFkZExpYnJhcnlFbnRyeShwcm9qLCAic3RydXRzLmphciIpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvdXRpbC9Db21tb25YTUwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvdXRpbC9Db21tb25YTUwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGUyNzBmZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3V0aWwvQ29tbW9uWE1MLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMudXRpbDsKLQotCi0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwotCi1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyOwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlckZhY3Rvcnk7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLk91dHB1dEtleXM7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5Tb3VyY2U7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lcjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJGYWN0b3J5OwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJGYWN0b3J5Q29uZmlndXJhdGlvbkVycm9yOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uZG9tLkRPTVNvdXJjZTsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLnN0cmVhbS5TdHJlYW1SZXN1bHQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLkxvZ2dlcjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLQotLyoqCi0gKi8KLXB1YmxpYyBjbGFzcyBDb21tb25YTUwgewotCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgRG9jdW1lbnRCdWlsZGVyIGdldERvY3VtZW50QnVpbGRlcigpIHsKLQkJRG9jdW1lbnRCdWlsZGVyIHJlc3VsdCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlyZXN1bHQgPSBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCkubmV3RG9jdW1lbnRCdWlsZGVyKCk7Ci0JCX0KLQkJY2F0Y2ggKFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gZSkgewotCQkJTG9nZ2VyLmxvZ0V4Y2VwdGlvbihlKTsKLQkJfQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIERvY3VtZW50QnVpbGRlciBnZXREb2N1bWVudEJ1aWxkZXIoYm9vbGVhbiB2YWxpZGF0aW5nKSB7Ci0JCURvY3VtZW50QnVpbGRlciByZXN1bHQgPSBudWxsOwotCQl0cnkgewotCQkJRG9jdW1lbnRCdWlsZGVyRmFjdG9yeSBpbnN0YW5jZSA9IERvY3VtZW50QnVpbGRlckZhY3RvcnkubmV3SW5zdGFuY2UoKTsKLQkJCWluc3RhbmNlLnNldFZhbGlkYXRpbmcodmFsaWRhdGluZyk7Ci0JCQlyZXN1bHQgPSBpbnN0YW5jZS5uZXdEb2N1bWVudEJ1aWxkZXIoKTsKLQkJfQotCQljYXRjaCAoUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQlMb2dnZXIubG9nRXhjZXB0aW9uKGUpOwotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHNlcmlhbGl6ZShEb2N1bWVudCBkb2N1bWVudCwgT3V0cHV0U3RyZWFtIG9zdHJlYW0pIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVNvdXJjZSBkb21Tb3VyY2UgPSBuZXcgRE9NU291cmNlKGRvY3VtZW50KTsKLQkJdHJ5IHsKLQkJCVRyYW5zZm9ybWVyIHNlcmlhbGl6ZXIgPSBUcmFuc2Zvcm1lckZhY3RvcnkubmV3SW5zdGFuY2UoKS5uZXdUcmFuc2Zvcm1lcigpOwotCQkJdHJ5IHsKLQkJCQlzZXJpYWxpemVyLnNldE91dHB1dFByb3BlcnR5KE91dHB1dEtleXMuSU5ERU5ULCAieWVzIik7Ci0JCQkJc2VyaWFsaXplci5zZXRPdXRwdXRQcm9wZXJ0eSgie2h0dHA6Ly94bWwuYXBhY2hlLm9yZy94c2x0fWluZGVudC1hbW91bnQiLCAiNCIpOwotCQkJCXNlcmlhbGl6ZXIuc2V0T3V0cHV0UHJvcGVydHkoT3V0cHV0S2V5cy5FTkNPRElORywgIlVURi0xNiIpOwotCQkJfQotCQkJY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7Ci0JCQkJLy8gdW5zdXBwb3J0ZWQgcHJvcGVydGllcwotCQkJfQotCQkJc2VyaWFsaXplci50cmFuc2Zvcm0oZG9tU291cmNlLCBuZXcgU3RyZWFtUmVzdWx0KG9zdHJlYW0pKTsKLQkJfQotCQljYXRjaCAoVHJhbnNmb3JtZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIGUpIHsKLQkJCXRocm93IG5ldyBJT0V4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7Ci0JCX0KLQkJY2F0Y2ggKFRyYW5zZm9ybWVyRmFjdG9yeUNvbmZpZ3VyYXRpb25FcnJvciBlKSB7Ci0JCQl0aHJvdyBuZXcgSU9FeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwotCQl9Ci0JCWNhdGNoIChUcmFuc2Zvcm1lckV4Y2VwdGlvbiBlKSB7Ci0JCQl0aHJvdyBuZXcgSU9FeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwotCQl9Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvdXRpbC9EYXRlVXRpbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy91dGlsL0RhdGVVdGlsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiMjMyYjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy91dGlsL0RhdGVVdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy51dGlsOwotCi1pbXBvcnQgamF2YS51dGlsLkNhbGVuZGFyOwotaW1wb3J0IGphdmEudXRpbC5EYXRlOwotCi1pbXBvcnQgY29tLmlibS5pY3UudGV4dC5EYXRlRm9ybWF0OwotaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuU2ltcGxlRGF0ZUZvcm1hdDsKLQotLyoqCi0gKiBAYXV0aG9yIGRhdmlkdwotICoKLSAqIFRvIGNoYW5nZSB0aGlzIGdlbmVyYXRlZCBjb21tZW50IGVkaXQgdGhlIHRlbXBsYXRlIHZhcmlhYmxlICJ0eXBlY29tbWVudCI6Ci0gKiBXaW5kb3c+UHJlZmVyZW5jZXM+SmF2YT5UZW1wbGF0ZXMuCi0gKiBUbyBlbmFibGUgYW5kIGRpc2FibGUgdGhlIGNyZWF0aW9uIG9mIHR5cGUgY29tbWVudHMgZ28gdG8KLSAqIFdpbmRvdz5QcmVmZXJlbmNlcz5KYXZhPkNvZGUgR2VuZXJhdGlvbi4KLSAqLwotcHVibGljIGNsYXNzIERhdGVVdGlsIHsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBBbGxUZXN0cy4KLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXByaXZhdGUgc3RhdGljIFN0cmluZyBub3cgPSBudWxsOwotCi0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBub3coKSB7Ci0JCS8vIGp1c3QgY2FsY3VsYXRlIG9uY2UsIHNvIHdob2xlIHJ1biBhcyBzYW1lIHRpbWVzdGFtcAotCQlpZiAoRGF0ZVV0aWwubm93ID09IG51bGwpIHsKLQkJCURhdGVGb3JtYXQgZm9ybWF0ID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoInl5eXknLSdNTSctJ2RkJy0na2snLSdtbSctJ3NzIik7Ci0JCQlDYWxlbmRhciBjYWxlbmRhciA9IENhbGVuZGFyLmdldEluc3RhbmNlKCk7Ci0JCQlEYXRlIHRvZGF5ID0gY2FsZW5kYXIuZ2V0VGltZSgpOwotCQkJRGF0ZVV0aWwubm93ID0gZm9ybWF0LmZvcm1hdCh0b2RheSk7Ci0JCX0KLQkJcmV0dXJuIERhdGVVdGlsLm5vdzsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvdXRpbC9GaWxlVXRpbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy91dGlsL0ZpbGVVdGlsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkODJjNDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy91dGlsL0ZpbGVVdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMudXRpbDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVuYW1lRmlsdGVyOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotCi0vKioKLSAqIEBhdXRob3IgZGF2aWR3Ci0gKgotICovCi1wdWJsaWMgY2xhc3MgRmlsZVV0aWwgewotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGZMaW5lU2VwYXJhdG9yID0gU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGZQYXRoU2VwYXJhdG9yID0gU3lzdGVtLmdldFByb3BlcnR5KCJwYXRoLnNlcGFyYXRvciIpOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGZGaWxlU2VwYXJhdG9yID0gU3lzdGVtLmdldFByb3BlcnR5KCJmaWxlLnNlcGFyYXRvciIpOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEpTUF9FRElUT1JfVEVTVFNfUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMiOwotCi0Jc3RhdGljIEZpbGUgcHJldmlvdXNSZXN1bHRzRGlyZWN0b3J5ID0gbnVsbDsKLQlzdGF0aWMgcHJpdmF0ZSBTdHJpbmcgbG9nU3ViRGlyZWN0b3J5UGF0aDsKLQotCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gbm90VHJpZWRZZXQgPSB0cnVlOwotCi0JcHVibGljIHN0YXRpYyBjbGFzcyBEaXJGaWxlbmFtZUZpbHRlciBpbXBsZW1lbnRzIEZpbGVuYW1lRmlsdGVyIHsKLQkJU3RyaW5nIHN0YXJ0T2ZBY2NlcHRhYmxlTmFtZXM7Ci0KLQkJcHVibGljIERpckZpbGVuYW1lRmlsdGVyKFN0cmluZyBzdGFydE9mRGlyTmFtZSkgewotCQkJc3RhcnRPZkFjY2VwdGFibGVOYW1lcyA9IHN0YXJ0T2ZEaXJOYW1lOwotCQl9Ci0KLQkJLyoqCi0JCSAqIEBzZWUgamF2YS5pby5GaWxlRmlsdGVyI2FjY2VwdChGaWxlKQotCQkgKi8KLQkJcHVibGljIGJvb2xlYW4gYWNjZXB0KEZpbGUgcGF0aG5hbWUsIFN0cmluZyBmaWxlbmFtZSkgewotCQkJLy8gd2UnbGwganVzdCBhc3N1bWUgaWYgaXQgc3RhcnRzIHdpdGggcmlnaHQga2V5LCBpdCBpcyBhIGRpcmVjdG9yeSAuLi4gZm9yIG5vdwotCQkJcmV0dXJuIGZpbGVuYW1lLnN0YXJ0c1dpdGgoc3RhcnRPZkFjY2VwdGFibGVOYW1lcyk7Ci0JCX0KLQotCX0KLQotCXB1YmxpYyBzdGF0aWMgRmlsZSBnZXRQcmV2aW91c1Jlc3VsdHNEaXJlY3RvcnkoU3RyaW5nIGRpcmVjdG9yeVJvb3ROYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlpZiAocHJldmlvdXNSZXN1bHRzRGlyZWN0b3J5ID09IG51bGwgJiYgbm90VHJpZWRZZXQpIHsKLQkJCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoSlNQX0VESVRPUl9URVNUU19QTFVHSU5fSUQpOwotCQkJVVJMIHVybCA9IGJ1bmRsZS5nZXRFbnRyeSgiLyIpOwotCQkJLy9TdHJpbmcgaW5zdGFsbFBhdGggPSB1cmwuZ2V0UGF0aCgpOwotCQkJLy8gYWRkIGtub3duIGZpbGUgc28gVVJMIG1ldGhvZCBiZWxvdyBjYW4gYmUgdXNlZAotCQkJLy8gKGRvZXNuJ3Qgc2VlbSB0byB3b3JrIGZvciBkaXJlY3Rvcnk/KQotCQkJVVJMIHRvdGFsVVJMID0gbmV3IFVSTCh1cmwsICJwbHVnaW4ueG1sIik7Ci0JCQlVUkwgZmluYWx1cmwgPSBGaWxlTG9jYXRvci50b0ZpbGVVUkwodG90YWxVUkwpOwotCQkJU3RyaW5nIGZpbmFsRmlsZSA9IGZpbmFsdXJsLmdldEZpbGUoKTsKLQkJCUZpbGUgZmlsZSA9IG5ldyBGaWxlKGZpbmFsRmlsZSk7Ci0JCQlTdHJpbmcgZmluYWxQYXRoID0gZmlsZS5nZXRQYXJlbnQoKTsKLQkJCUZpbGUgcGx1Z2luSG9tZURpciA9IG5ldyBGaWxlKGZpbmFsUGF0aCk7Ci0JCQlGaWxlbmFtZUZpbHRlciBkaXJGaWx0ZXIgPSBuZXcgRGlyRmlsZW5hbWVGaWx0ZXIoZGlyZWN0b3J5Um9vdE5hbWUpOwotCQkJRmlsZVtdIGFsbERpcnMgPSBwbHVnaW5Ib21lRGlyLmxpc3RGaWxlcyhkaXJGaWx0ZXIpOwotCi0JCQkvLyBhc3N1bWUgZmlyc3QgaW4gbGlzdCBpcyBuZXdlc3QsIHRoZW4gc3RhcnQgbG9va2luZyB3aXRoIHRoZSAKLQkJCS8vIHNlY29uZCBpdGVtIC4uLiBqdXN0IHRvIGF2b2lkICJudWxsIiBjYXNlIGNoZWNraW5nCi0JCQlpZiAoYWxsRGlycy5sZW5ndGggPiAwKSB7Ci0JCQkJRmlsZSBjdXJyZW50TmV3ZXN0ID0gYWxsRGlyc1swXTsKLQkJCQlmb3IgKGludCBpID0gMTsgaSA8IGFsbERpcnMubGVuZ3RoOyBpKyspIHsKLQkJCQkJRmlsZSBjdXJyZW50ID0gYWxsRGlyc1tpXTsKLQkJCQkJLy8gTk9URTogd2UgZ28gYnkgbW9kaWZpZWQgZGF0ZSwgbm90IGJ5IHRoZSBhY3R1YWwgdGltZSBzdGFtcCBpbiBuYW1lLgotCQkJCQkvLyBUaGlzIHNob3VsZCB3b3JrIGZvciBhbGwgbm9ybWFsIGNhc2VzLCBidXQgbWF5IG5vdCBpZiBzb21lb25lIGRvZXMgc29tZQotCQkJCQkvLyAiZnVubnkiIGNvcHlpbmcsIG9yIHVwZGF0aW5nIGZyb20gcmVwb3NpdG9yeS4KLQkJCQkJaWYgKGN1cnJlbnQubGFzdE1vZGlmaWVkKCkgPiBjdXJyZW50TmV3ZXN0Lmxhc3RNb2RpZmllZCgpKSB7Ci0JCQkJCQljdXJyZW50TmV3ZXN0ID0gY3VycmVudDsKLQkJCQkJfQotCQkJCX0KLQkJCQlwcmV2aW91c1Jlc3VsdHNEaXJlY3RvcnkgPSBjdXJyZW50TmV3ZXN0OwotCQkJfQotCQkJbm90VHJpZWRZZXQgPSBmYWxzZTsKLQkJfQotCQlyZXR1cm4gcHJldmlvdXNSZXN1bHRzRGlyZWN0b3J5OwotCX0KLQotCXB1YmxpYyBzdGF0aWMgRmlsZSBtYWtlRmlsZUZvcihTdHJpbmcgZGlyZWN0b3J5LCBTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyB0ZXN0UmVzdWx0c0RpcmVjdG9yeVByZWZpeCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShKU1BfRURJVE9SX1RFU1RTX1BMVUdJTl9JRCk7Ci0JCVVSTCB1cmwgPSBidW5kbGUuZ2V0RW50cnkoIi8iKTsKLQkJVVJMIGxvY2FsVVJMID0gRmlsZUxvY2F0b3IudG9GaWxlVVJMKHVybCk7Ci0JCVN0cmluZyBpbnN0YWxsUGF0aCA9IGxvY2FsVVJMLmdldFBhdGgoKTsKLQkJU3RyaW5nIHRvdGFsRGlyZWN0b3J5ID0gaW5zdGFsbFBhdGggKyBkaXJlY3Rvcnk7Ci0JCVN0cmluZyB0b3RhbFBhdGggPSB0b3RhbERpcmVjdG9yeSArICIvIiArIGZpbGVuYW1lOwotCQlVUkwgdG90YWxVUkwgPSBuZXcgVVJMKHVybCwgdG90YWxQYXRoKTsKLQkJLy9VUkwgZmluYWx1cmwgPSBQbGF0Zm9ybS5hc0xvY2FsVVJMKHRvdGFsVVJMKTsKLQkJU3RyaW5nIGZpbmFsRmlsZSA9IHRvdGFsVVJMLmdldEZpbGUoKTsKLQkJRmlsZSBmaWxlID0gbmV3IEZpbGUoZmluYWxGaWxlKTsKLQkJU3RyaW5nIGZpbmFsUGF0aCA9IGZpbGUuZ2V0UGFyZW50KCk7Ci0JCUZpbGUgZGlyID0gbmV3IEZpbGUoZmluYWxQYXRoKTsKLQkJaWYgKCFkaXIuZXhpc3RzKCkpIHsKLQkJCS8vIGEgbGl0dGxlIHNhZmV0eSBuZXQsIGJlIHN1cmUgdGhlIHByZXZpb3VzIG5ld2VzdCBkaXJlY3RvcnkKLQkJCS8vIGlzIGluaXRpYWxpemVkLCBqdXN0IGluIGNhc2Ugbm8gb25lIGVsc2UgaGFzIGRvbmUgc28KLQkJCWlmICh0ZXN0UmVzdWx0c0RpcmVjdG9yeVByZWZpeCAhPSBudWxsICYmIHRlc3RSZXN1bHRzRGlyZWN0b3J5UHJlZml4Lmxlbmd0aCgpID4gMCkgewotCQkJCUZpbGVVdGlsLmdldFByZXZpb3VzUmVzdWx0c0RpcmVjdG9yeSh0ZXN0UmVzdWx0c0RpcmVjdG9yeVByZWZpeCk7Ci0JCQl9Ci0JCQkvLyBub3cgaXRzICJzYWZlIiB0byBtYWtlIHRoZSBuZXcgb25lCi0JCQlkaXIubWtkaXJzKCk7Ci0JCX0KLQkJcmV0dXJuIGZpbGU7Ci0JfQotCi0JLyoqCi0JICogSnVzdCBhIGdlbmVyYWwgdXRpbGl0eSBtZXRob2QKLQkgKiBAcGFyYW0gZmlsZW5hbWUKLQkgKiBAcmV0dXJuIFN0cmluZwotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEV4dGVuc2lvbihTdHJpbmcgZmlsZW5hbWUpIHsKLQkJU3RyaW5nIGV4dGVuc2lvbiA9IG51bGw7Ci0JCWludCBkb3RQb3N0aW9uID0gZmlsZW5hbWUubGFzdEluZGV4T2YoJy4nKTsKLQkJaWYgKGRvdFBvc3Rpb24gPiAtMSkgewotCQkJZXh0ZW5zaW9uID0gZmlsZW5hbWUuc3Vic3RyaW5nKGRvdFBvc3Rpb24gKyAxKTsKLQkJfQotCQllbHNlIHsKLQkJCWV4dGVuc2lvbiA9IG5ldyBTdHJpbmcoKTsKLQkJfQotCQlyZXR1cm4gZXh0ZW5zaW9uOwotCX0KLQotCS8qKgotCSAqIEdlbmVyYWwgcHVycG9zZSB1dGlsaXR5IG1ldGhvZCB0byBlbnN1cmUgdGhlIGxvZwotCSAqIGRpcmVjdG9yeSBleGlzdHMsIGFuZCByZXR1cm5zIHRoZSBuYW1lLiAKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRMb2dEaXJlY3RvcnkoKSB7Ci0JCWlmIChsb2dTdWJEaXJlY3RvcnlQYXRoID09IG51bGwpIHsKLQkJCVN0cmluZyBtYWluRGlyZWN0b3J5ID0gIi9sb2dzIjsKLQkJCUZpbGUgZGlyID0gbmV3IEZpbGUobWFpbkRpcmVjdG9yeSk7Ci0JCQllbnN1cmVFeGlzdHMoZGlyKTsKLQkJCVN0cmluZyBzdWJEaXJlY3RvcnkgPSBUaW1lc3RhbXBVdGlsLnRpbWVzdGFtcCgpOwotCQkJbG9nU3ViRGlyZWN0b3J5UGF0aCA9IG1haW5EaXJlY3RvcnkgKyAiLyIgKyBzdWJEaXJlY3Rvcnk7Ci0JCQlGaWxlIHN1YmRpciA9IG5ldyBGaWxlKGxvZ1N1YkRpcmVjdG9yeVBhdGgpOwotCQkJZW5zdXJlRXhpc3RzKHN1YmRpcik7Ci0JCX0KLQkJcmV0dXJuIGxvZ1N1YkRpcmVjdG9yeVBhdGg7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGVuc3VyZUV4aXN0cyhGaWxlIGRpcikgewotCQlpZiAoIWRpci5leGlzdHMoKSkgewotCQkJZGlyLm1rZGlycygpOwotCQl9Ci0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UGVyZm9ybWFuY2VPdXRwdXRMb2dOYW1lKCkgewotCQlTdHJpbmcgcmVzdWx0ID0gbnVsbDsKLQkJU3RyaW5nIGRpcmVjdG9yeU5hbWUgPSBGaWxlVXRpbC5nZXRMb2dEaXJlY3RvcnkoKTsKLQkJU3RyaW5nIGV4dGVuc2lvbiA9ICIub3V0IjsKLQkJU3RyaW5nIGJhc2VOYW1lID0gInNlZFRlc3RzIjsKLQkJbG9uZyBub3cgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJU3RyaW5nIG5vd1N0ciA9IFN0cmluZy52YWx1ZU9mKG5vdyk7Ci0JCXJlc3VsdCA9IGRpcmVjdG9yeU5hbWUgKyBGaWxlVXRpbC5mRmlsZVNlcGFyYXRvciArIGJhc2VOYW1lICsgbm93U3RyICsgZXh0ZW5zaW9uOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy91dGlsL1Byb2plY3RVbnppcFV0aWxpdHkuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvdXRpbC9Qcm9qZWN0VW56aXBVdGlsaXR5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhOGUzMWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy91dGlsL1Byb2plY3RVbnppcFV0aWxpdHkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM4NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy51dGlsOwotCi1pbXBvcnQgamF2YS5pby5CdWZmZXJlZElucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25UYXJnZXRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuemlwLlppcEVudHJ5OwotaW1wb3J0IGphdmEudXRpbC56aXAuWmlwRmlsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0RGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmFjdGlvbnMuV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuSU92ZXJ3cml0ZVF1ZXJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLndpemFyZHMuZGF0YXRyYW5zZmVyLkZpbGVTeXN0ZW1TdHJ1Y3R1cmVQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS53aXphcmRzLmRhdGF0cmFuc2Zlci5JSW1wb3J0U3RydWN0dXJlUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkud2l6YXJkcy5kYXRhdHJhbnNmZXIuSW1wb3J0T3BlcmF0aW9uOwotCi0vKioKLSAqIEltcG9ydHMgemlwcGVkIGZpbGVzIGludG8gdGhlIHRlc3Qgd29ya3NwYWNlLiBEZWxldGVzIGFsbCBwcm9qZWN0cyBpbgotICogd29ya3NwYWNlLgotICogCi0gKiBAYXV0aG9yIHBhdmVyeQotICovCi1wdWJsaWMgY2xhc3MgUHJvamVjdFVuemlwVXRpbGl0eSB7Ci0JY2xhc3MgV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yIGltcGxlbWVudHMgSVByb2dyZXNzTW9uaXRvciB7Ci0JCXByaXZhdGUgYm9vbGVhbiBmaW5pc2hlZCA9IGZhbHNlOwotCi0JCXB1YmxpYyB2b2lkIGJlZ2luVGFzayhTdHJpbmcgbmFtZSwgaW50IHRvdGFsV29yaykgewotCQkJLy8gbm9vcAotCQl9Ci0KLQkJcHVibGljIHZvaWQgZG9uZSgpIHsKLQkJCWZpbmlzaGVkID0gdHJ1ZTsKLQkJfQotCi0JCXB1YmxpYyBib29sZWFuIGlzRmluaXNoZWQoKSB7Ci0JCQlyZXR1cm4gZmluaXNoZWQ7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBpbnRlcm5hbFdvcmtlZChkb3VibGUgd29yaykgewotCQkJLy8gbm9vcAotCQl9Ci0KLQkJcHVibGljIGJvb2xlYW4gaXNDYW5jZWxlZCgpIHsKLQkJCXJldHVybiBmaW5pc2hlZDsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHNldENhbmNlbGVkKGJvb2xlYW4gdmFsdWUpIHsKLQkJCWlmICh2YWx1ZSA9PSB0cnVlKQotCQkJCWZpbmlzaGVkID0gdHJ1ZTsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHNldFRhc2tOYW1lKFN0cmluZyBuYW1lKSB7Ci0JCQkvLyBub29wCi0JCX0KLQotCQlwdWJsaWMgdm9pZCBzdWJUYXNrKFN0cmluZyBuYW1lKSB7Ci0JCQkvLyBub29wCi0JCX0KLQotCQlwdWJsaWMgdm9pZCB3b3JrZWQoaW50IHdvcmspIHsKLQkJCS8vIG5vb3AKLQkJfQotCX0KLQotCWNsYXNzIE15T3ZlcndyaXRlUXVlcnkgaW1wbGVtZW50cyBJT3ZlcndyaXRlUXVlcnkgewotCQlwdWJsaWMgU3RyaW5nIHF1ZXJ5T3ZlcndyaXRlKFN0cmluZyBwYXRoU3RyaW5nKSB7Ci0JCQlyZXR1cm4gQUxMOwotCQl9Ci0JfQotCi0JcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUFJPSkVDVF9aSVBTX0ZPTERFUiA9ICJwcm9qZWN0dGVzdGZpbGVzIjsKLQlwcml2YXRlIExpc3QgZkNyZWF0ZWRQcm9qZWN0cyA9IG51bGw7Ci0KLQlwdWJsaWMgUHJvamVjdFVuemlwVXRpbGl0eSgpIHsKLQkJLy8gZm9yIGRlbGV0aW9uIGxhdGVyCi0JCWZDcmVhdGVkUHJvamVjdHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGZpbGVUb0ltcG9ydAotCSAqICAgICAgICAgICAgdGhlIGZpbGUgeW91IHdpc2ggdG8gaW1wb3J0Ci0JICogQHBhcmFtIGZvbGRlclBhdGgKLQkgKiAgICAgICAgICAgIHRoZSBjb250YWluZXIgcGF0aCB3aXRoaW4gdGhlIHdvcmtzcGFjZQotCSAqLwotCXB1YmxpYyB2b2lkIGltcG9ydEZpbGUoRmlsZSBmaWxlVG9JbXBvcnQsIFN0cmluZyBmb2xkZXJQYXRoKSB7Ci0JCVdvcmtzcGFjZVByb2dyZXNzTW9uaXRvciBpbXBvcnRQcm9ncmVzcyA9IG5ldyBXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IoKTsKLQkJdHJ5IHsKLQkJCWlmIChmaWxlVG9JbXBvcnQuZXhpc3RzKCkpIHsKLQkJCQlJUGF0aCBjb250YWluZXJQYXRoID0gbmV3IFBhdGgoZm9sZGVyUGF0aCk7Ci0JCQkJSUltcG9ydFN0cnVjdHVyZVByb3ZpZGVyIHByb3ZpZGVyID0gRmlsZVN5c3RlbVN0cnVjdHVyZVByb3ZpZGVyLklOU1RBTkNFOwotCQkJCUlPdmVyd3JpdGVRdWVyeSBvdmVyd3JpdGVJbXBsZW1lbnRvciA9IG5ldyBNeU92ZXJ3cml0ZVF1ZXJ5KCk7Ci0JCQkJRmlsZVtdIGZpbGVzVG9JbXBvcnQgPSB7ZmlsZVRvSW1wb3J0fTsKLQkJCQlJbXBvcnRPcGVyYXRpb24gaW1wb3J0T3AgPSBuZXcgSW1wb3J0T3BlcmF0aW9uKGNvbnRhaW5lclBhdGgsIG51bGwsIHByb3ZpZGVyLCBvdmVyd3JpdGVJbXBsZW1lbnRvciwgQXJyYXlzLmFzTGlzdChmaWxlc1RvSW1wb3J0KSk7Ci0JCQkJaW1wb3J0T3Auc2V0Q3JlYXRlQ29udGFpbmVyU3RydWN0dXJlKGZhbHNlKTsKLQkJCQlpbXBvcnRPcC5zZXRPdmVyd3JpdGVSZXNvdXJjZXModHJ1ZSk7Ci0JCQkJaW1wb3J0T3AucnVuKGltcG9ydFByb2dyZXNzKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiaGFuZGxlIHNvdXJjZSBkb2Vzbid0IGV4aXN0Iik7Ci0JCQl9Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCQkJZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpbXBvcnRQcm9ncmVzcy5kb25lKCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiB0aGUgZm9sbG93aW5nIGlzIGxvZ2ljIGZyb20KLQkgKiBodHRwOi8vd3d3LmRldnNoZWQuY29tL2MvYS9KYXZhL1ppcC1NZWV0cy1KYXZhLzIvCi0JICovCi0JLy8gc3BlY2lmeSBidWZmZXIgc2l6ZSBmb3IgZXh0cmFjdGlvbgotCXN0YXRpYyBmaW5hbCBpbnQgQlVGRkVSID0gMjA0ODsKLQotCXB1YmxpYyB2b2lkIHVuemlwQW5kSW1wb3J0KEZpbGUgaW5GaWxlLCBTdHJpbmcgZGVzdGluYXRpb25EaXJlY3RvcnkpIHRocm93cyBFeGNlcHRpb24gewotCQl0cnkgewotCQkJLy8gU3BlY2lmeSBmaWxlIHRvIGRlY29tcHJlc3MKLQkJCS8vIChuc2QpIHJlZHVuZGFudD8KLQkJCS8vIFN0cmluZyBpbkZpbGVOYW1lID0gaW5GaWxlLmdldEFic29sdXRlUGF0aCgpOwotCQkJLy8gLy8iYzovZXhhbXBsZS56aXAiOwotCQkJLy8gRmlsZSBzb3VyY2VaaXBGaWxlID0gbmV3IEZpbGUoaW5GaWxlTmFtZSk7Ci0JCQlGaWxlIHNvdXJjZVppcEZpbGUgPSBpbkZpbGU7Ci0KLQkJCS8vIFNwZWNpZnkgZGVzdGluYXRpb24gd2hlcmUgZmlsZSB3aWxsIGJlIHVuemlwcGVkCi0JCQkvLyBTdHJpbmcgZGVzdGluYXRpb25EaXJlY3RvcnkgPQotCQkJLy8gImQ6L2VjbGlwc2VkZXYvTTVfU1NFX1RFU1RTX1dPUktTUEFDRS8iOyAvLyJjOi90ZW1wLyI7Ci0JCQlGaWxlIHVuemlwRGVzdGluYXRpb25EaXJlY3RvcnkgPSBuZXcgRmlsZShkZXN0aW5hdGlvbkRpcmVjdG9yeSk7Ci0JCQkvLyBPcGVuIFppcCBmaWxlIGZvciByZWFkaW5nCi0JCQlaaXBGaWxlIHppcEZpbGUgPSBuZXcgWmlwRmlsZShzb3VyY2VaaXBGaWxlLCBaaXBGaWxlLk9QRU5fUkVBRCk7Ci0JCQlJUHJvamVjdCBjdXJyZW50UHJvamVjdCA9IG51bGw7Ci0JCQl0cnkgewotCQkJCS8vIENyZWF0ZSBhbiBlbnVtZXJhdGlvbiBvZiB0aGUgZW50cmllcyBpbiB0aGUgemlwIGZpbGUKLQkJCQlFbnVtZXJhdGlvbiB6aXBGaWxlRW50cmllcyA9IHppcEZpbGUuZW50cmllcygpOwotCQkJCVN0cmluZyBwcm9qZWN0Rm9sZGVyTmFtZSA9IG51bGw7Ci0KLQkJCQkvLyBQcm9jZXNzIGVhY2ggZW50cnkKLQkJCQl3aGlsZSAoemlwRmlsZUVudHJpZXMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLQkJCQkJLy8gZ3JhYiBhIHppcCBmaWxlIGVudHJ5Ci0JCQkJCVppcEVudHJ5IGVudHJ5ID0gKFppcEVudHJ5KSB6aXBGaWxlRW50cmllcy5uZXh0RWxlbWVudCgpOwotCQkJCQlTdHJpbmcgY3VycmVudEVudHJ5ID0gZW50cnkuZ2V0TmFtZSgpOwotCQkJCQkvLyBTeXN0ZW0ub3V0LnByaW50bG4oIkV4dHJhY3Rpbmc6ICIgKyBlbnRyeSk7Ci0JCQkJCUZpbGUgZGVzdEZpbGUgPSBuZXcgRmlsZSh1bnppcERlc3RpbmF0aW9uRGlyZWN0b3J5LCBjdXJyZW50RW50cnkpOwotCQkJCQkvLyBncmFiIGZpbGUncyBwYXJlbnQgZGlyZWN0b3J5IHN0cnVjdHVyZQotCQkJCQlGaWxlIGRlc3RpbmF0aW9uUGFyZW50ID0gZGVzdEZpbGUuZ2V0UGFyZW50RmlsZSgpOwotCQkJCQkvLyBjcmVhdGUgdGhlIHBhcmVudCBkaXJlY3Rvcnkgc3RydWN0dXJlIGlmIG5lZWRlZAotCQkJCQlkZXN0aW5hdGlvblBhcmVudC5ta2RpcnMoKTsKLQkJCQkJLy8gZXh0cmFjdCBmaWxlIGlmIG5vdCBhIGRpcmVjdG9yeQotCQkJCQlpZiAoIWVudHJ5LmlzRGlyZWN0b3J5KCkpIHsKLQkJCQkJCUJ1ZmZlcmVkSW5wdXRTdHJlYW0gaXMgPSBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbSh6aXBGaWxlLmdldElucHV0U3RyZWFtKGVudHJ5KSk7Ci0JCQkJCQlpbnQgY3VycmVudEJ5dGU7Ci0JCQkJCQkvLyBlc3RhYmxpc2ggYnVmZmVyIGZvciB3cml0aW5nIGZpbGUKLQkJCQkJCWJ5dGUgZGF0YVtdID0gbmV3IGJ5dGVbQlVGRkVSXTsKLQkJCQkJCS8vIHdyaXRlIHRoZSBjdXJyZW50IGZpbGUgdG8gZGlzawotCQkJCQkJRmlsZU91dHB1dFN0cmVhbSBmb3MgPSBuZXcgRmlsZU91dHB1dFN0cmVhbShkZXN0RmlsZSk7Ci0JCQkJCQlCdWZmZXJlZE91dHB1dFN0cmVhbSBkZXN0ID0gbmV3IEJ1ZmZlcmVkT3V0cHV0U3RyZWFtKGZvcywgQlVGRkVSKTsKLQkJCQkJCXRyeSB7Ci0JCQkJCQkJLy8gcmVhZCBhbmQgd3JpdGUgdW50aWwgbGFzdCBieXRlIGlzIGVuY291bnRlcmVkCi0JCQkJCQkJd2hpbGUgKChjdXJyZW50Qnl0ZSA9IGlzLnJlYWQoZGF0YSwgMCwgQlVGRkVSKSkgIT0gLTEpIHsKLQkJCQkJCQkJZGVzdC53cml0ZShkYXRhLCAwLCBjdXJyZW50Qnl0ZSk7Ci0JCQkJCQkJfQotCQkJCQkJfQotCQkJCQkJZmluYWxseSB7Ci0JCQkJCQkJZGVzdC5mbHVzaCgpOwotCQkJCQkJCWRlc3QuY2xvc2UoKTsKLQkJCQkJCQlpcy5jbG9zZSgpOwotCQkJCQkJCWZvcy5jbG9zZSgpOwotCQkJCQkJfQotCQkJCQkJaWYgKHByb2plY3RGb2xkZXJOYW1lICE9IG51bGwpCi0JCQkJCQkJaW1wb3J0RmlsZShkZXN0RmlsZSwgcHJvamVjdEZvbGRlck5hbWUpOwotCQkJCQl9Ci0JCQkJCWVsc2UgewotCQkJCQkJLy8gbmVlZCBoYW5kbGUgdG8gdGhlIG1haW4gcHJvamVjdCBmb2xkZXIgdG8gY3JlYXRlCi0JCQkJCQkvLyBjb250YWluZXJQYXRoCi0JCQkJCQlpZiAocHJvamVjdEZvbGRlck5hbWUgPT0gbnVsbCkgewotCQkJCQkJCXByb2plY3RGb2xkZXJOYW1lID0gZGVzdEZpbGUuZ2V0TmFtZSgpOwotCQkJCQkJCWZDcmVhdGVkUHJvamVjdHMuYWRkKHByb2plY3RGb2xkZXJOYW1lKTsKLQotCQkJCQkJCWN1cnJlbnRQcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHByb2plY3RGb2xkZXJOYW1lKTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCWZpbmFsbHkgewotCQkJCXppcEZpbGUuY2xvc2UoKTsKLQkJCX0KLQotCQkJLy8gZml4ZXMgd29ya3NwYWNlIG1ldGFkYXRhIGZvciB0aGUgcHJvamVjdAotCQkJLy8gZm9yIGNsZWFuIHN0YXJ0dXAgbmV4dCBydW4KLQkJCWlmIChjdXJyZW50UHJvamVjdCAhPSBudWxsKSB7Ci0JCQkJUGF0aCBwcm9qZWN0TG9jYXRpb24gPSBuZXcgUGF0aChQbGF0Zm9ybS5nZXRMb2NhdGlvbigpLnRvT1NTdHJpbmcoKSk7Ci0JCQkJY3JlYXRlUHJvamVjdChjdXJyZW50UHJvamVjdCwgcHJvamVjdExvY2F0aW9uLCBuZXcgV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJfQotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpIHsKLQkJCWlvZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIAotCSAqLwotCXB1YmxpYyB2b2lkIHJlZnJlc2hXb3Jrc3BhY2UoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlXb3Jrc3BhY2VSb290IHdzUm9vdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCk7Ci0JCUlQcm9qZWN0W10gcHJvamVjdHMgPSB3c1Jvb3QuZ2V0UHJvamVjdHMoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9qZWN0cy5sZW5ndGg7IGkrKykgewotCQkJcHJvamVjdHNbaV0ucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7Ci0JCX0KLQkJd3NSb290LnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCX0KLQotCS8qKgotCSAqIERlbGV0ZSBwcm9qZWN0cyBjcmVhdGVkICh1bnppcHBlZCBhbmQgaW1wb3J0ZWQpIGJ5IHRoaXMgdXRpbGl0eQotCSAqIAotCSAqIEB0aHJvd3MgRXhjZXB0aW9uCi0JICovCi0JcHVibGljIHZvaWQgZGVsZXRlUHJvamVjdHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZmluYWwgSVByb2plY3RbXSBwcm9qZWN0cyA9IGdldENyZWF0ZWRQcm9qZWN0cygpOwotCQlXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24gZGVsZXRlT3AgPSBuZXcgV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uKCkgewotCQkJcHJvdGVjdGVkIHZvaWQgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJCQlmb3IgKGludCBpID0gMDsgaSA8IHByb2plY3RzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJCXByb2plY3RzW2ldLmNsZWFySGlzdG9yeShudWxsKTsKLQkJCQkJcHJvamVjdHNbaV0uY2xvc2UobnVsbCk7Ci0JCQkJCXByb2plY3RzW2ldLmRlbGV0ZSh0cnVlLCB0cnVlLCBudWxsKTsKLQkJCQl9Ci0JCQkJcmVmcmVzaFdvcmtzcGFjZSgpOwotCQkJfQotCQl9OwotCQlXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3MgPSBuZXcgV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yKCk7Ci0JCWRlbGV0ZU9wLnJ1bihwcm9ncmVzcyk7Ci0JCS8vIHNhdmVzIHRoZSBuZXcgd29ya3NwYWNlIG1ldGFkYXRhCi0JCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5zYXZlKHRydWUsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIGRlbGV0ZVByb2plY3QoU3RyaW5nIHByb2plY3ROYW1lKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZmluYWwgU3RyaW5nIG5hbWUgPSBwcm9qZWN0TmFtZTsKLQkJSVdvcmtzcGFjZVJvb3Qgd3NSb290ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLQkJZmluYWwgSVByb2plY3QgcHJvaiA9IHdzUm9vdC5nZXRQcm9qZWN0KG5hbWUpOwotCQlXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24gZGVsZXRlT3AgPSBuZXcgV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uKHByb2opIHsKLQkJCXByb3RlY3RlZCB2b2lkIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCQkJLy8gSVdvcmtzcGFjZVJvb3Qgd3NSb290ID0KLQkJCQkvLyBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpOwotCQkJCS8vIElQcm9qZWN0IHByb2ogPSB3c1Jvb3QuZ2V0UHJvamVjdChuYW1lKTsKLQkJCQlpZiAocHJvaiAhPSBudWxsICYmIHByb2ouZXhpc3RzKCkpIHsKLQkJCQkJcHJvai5jbGVhckhpc3RvcnkobnVsbCk7Ci0JCQkJCS8vIHByb2ouY2xvc2UobnVsbCk7Ci0JCQkJCXByb2oucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7Ci0JCQkJCXRyeSB7Ci0JCQkJCQlwcm9qLmRlbGV0ZSh0cnVlLCB0cnVlLCBudWxsKTsKLQkJCQkJfQotCQkJCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCQkJCS8vIGp1c3QgdHJ5IGFnYWluIChub3Qgc3VyZSB3aHkgdGhleSBhcmUgbm90IGJlaW5nCi0JCQkJCQkvLyBkZWxldGVkKQotCQkJCQkJcHJvai5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX0lORklOSVRFLCBudWxsKTsKLQkJCQkJCXByb2ouZGVsZXRlKHRydWUsIHRydWUsIG51bGwpOwotCQkJCQl9Ci0JCQkJCS8vIHByb2ogPSBudWxsOwotCQkJCX0KLQkJCQlyZWZyZXNoV29ya3NwYWNlKCk7Ci0JCQl9Ci0JCX07Ci0JCVdvcmtzcGFjZVByb2dyZXNzTW9uaXRvciBwcm9ncmVzcyA9IG5ldyBXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IoKTsKLQkJZGVsZXRlT3AucnVuKHByb2dyZXNzKTsKLQkJLy8gc2F2ZXMgdGhlIG5ldyB3b3Jrc3BhY2UgbWV0YWRhdGEKLQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnNhdmUodHJ1ZSwgbnVsbCk7Ci0JfQotCi0JLyoqCi0JICogQHJldHVybiBJUHJvamVjdHMgdGhhdCB3ZXJlIHVuemlwcGVkIGFuZCBpbXBvcnRlZCBpbnRvIHRoZSB3b3Jrc3BhY2UgYnkKLQkgKiAgICAgICAgIHRoaXMgdXRpbGl0eQotCSAqLwotCXB1YmxpYyBJUHJvamVjdFtdIGdldENyZWF0ZWRQcm9qZWN0cygpIHsKLQkJSVdvcmtzcGFjZVJvb3Qgd3NSb290ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLQkJU3RyaW5nW10gcHJvamVjdE5hbWVzID0gKFN0cmluZ1tdKSBmQ3JlYXRlZFByb2plY3RzLnRvQXJyYXkobmV3IFN0cmluZ1tmQ3JlYXRlZFByb2plY3RzLnNpemUoKV0pOwotCQlJUHJvamVjdFtdIHByb2plY3RzID0gbmV3IElQcm9qZWN0W3Byb2plY3ROYW1lcy5sZW5ndGhdOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHByb2plY3ROYW1lcy5sZW5ndGg7IGkrKykgewotCQkJcHJvamVjdHNbaV0gPSB3c1Jvb3QuZ2V0UHJvamVjdChwcm9qZWN0TmFtZXNbaV0pOwotCQl9Ci0JCXJldHVybiBwcm9qZWN0czsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBpbml0SmF2YVByb2plY3QoU3RyaW5nIHByb2pOYW1lKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCVBsYXRmb3JtLmdldEpvYk1hbmFnZXIoKS5iZWdpblJ1bGUoUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCS8vIHJlc3luY2gKLQkJcmVmcmVzaFdvcmtzcGFjZSgpOwotCQkvLyBjaGFuZ2UgcHJlcmVxcyB0byBnZXQgdGhpcyBmdW5jdGlvbmFsaXR5IGJhY2sgaW4KLQkJSVByb2plY3QgcHJvaiA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChwcm9qTmFtZSk7Ci0JCQotCQlpZiAoIXByb2ouZXhpc3RzKCkpIHsKLQkJCQotCQkJcHJvai5jcmVhdGUobmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCX0KLQkJaWYgKCFwcm9qLmlzT3BlbigpKSB7Ci0JCQlwcm9qLm9wZW4obnVsbCk7Ci0JCX0KLQkJLy8gbmVlZCB0byBhZGQgamF2YSBuYXR1cmUsIG9yIGVsc2UgcHJvamVjdCB3b24ndCAiZXhpc3QoKSIgaW4gdGhlCi0JCS8vIGphdmEKLQkJLy8gZWxlbWVudCBzZW5zZQotCQlJUHJvamVjdERlc2NyaXB0aW9uIGRlc2MgPSBwcm9qLmdldERlc2NyaXB0aW9uKCk7Ci0JCUxpc3QgbmF0dXJlcyA9IG5ldyBBcnJheUxpc3QoQXJyYXlzLmFzTGlzdChkZXNjLmdldE5hdHVyZUlkcygpKSk7Ci0JCWlmICghbmF0dXJlcy5jb250YWlucyhKYXZhQ29yZS5OQVRVUkVfSUQpKQotCQkJbmF0dXJlcy5hZGQoSmF2YUNvcmUuTkFUVVJFX0lEKTsKLQkJZGVzYy5zZXROYXR1cmVJZHMoKFN0cmluZ1tdKSBuYXR1cmVzLnRvQXJyYXkobmV3IFN0cmluZ1swXSkpOwotCQlwcm9qLnNldERlc2NyaXB0aW9uKGRlc2MsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQlQbGF0Zm9ybS5nZXRKb2JNYW5hZ2VyKCkuZW5kUnVsZShSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpKTsKLQkJcmVmcmVzaFdvcmtzcGFjZSgpOwotCX0KLQotCXByaXZhdGUgdm9pZCBjcmVhdGVQcm9qZWN0KElQcm9qZWN0IHByb2plY3QsIElQYXRoIGxvY2F0aW9uUGF0aCwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCWlmIChtb25pdG9yID09IG51bGwpIHsKLQkJCW1vbml0b3IgPSBuZXcgV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yKCk7Ci0JCX0KLQkJbW9uaXRvci5iZWdpblRhc2soImNyZWF0aW5nIHRlc3QgcHJvamVjdCIsIDEwKTsKLQkJLy8gY3JlYXRlIHRoZSBwcm9qZWN0Ci0JCXRyeSB7Ci0JCQlpZiAoIXByb2plY3QuZXhpc3RzKCkpIHsKLQkJCQlJUHJvamVjdERlc2NyaXB0aW9uIGRlc2MgPSBwcm9qZWN0LmdldFdvcmtzcGFjZSgpLm5ld1Byb2plY3REZXNjcmlwdGlvbihwcm9qZWN0LmdldE5hbWUoKSk7Ci0JCQkJaWYgKFBsYXRmb3JtLmdldExvY2F0aW9uKCkuZXF1YWxzKGxvY2F0aW9uUGF0aCkpIHsKLQkJCQkJbG9jYXRpb25QYXRoID0gbnVsbDsKLQkJCQl9Ci0JCQkJZGVzYy5zZXRMb2NhdGlvbihsb2NhdGlvblBhdGgpOwotCQkJCXByb2plY3QuY3JlYXRlKGRlc2MsIG1vbml0b3IpOwotCQkJCW1vbml0b3IgPSBudWxsOwotCQkJfQotCQkJaWYgKCFwcm9qZWN0LmlzT3BlbigpKSB7Ci0JCQkJcHJvamVjdC5vcGVuKG1vbml0b3IpOwotCQkJCW1vbml0b3IgPSBudWxsOwotCQkJfQotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vbml0b3IgIT0gbnVsbCkgewotCQkJCW1vbml0b3IuZG9uZSgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgZGVsZXRlUHJvamVjdChJUHJvamVjdCBmUHJvamVjdCkgdGhyb3dzIEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24sIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLQkJZmluYWwgSVByb2plY3QgcHJvaiA9IGZQcm9qZWN0OwotCQlXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24gZGVsZXRlT3AgPSBuZXcgV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uKHByb2opIHsKLQkJCXByb3RlY3RlZCB2b2lkIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCQkJLy8gSVdvcmtzcGFjZVJvb3Qgd3NSb290ID0KLQkJCQkvLyBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpOwotCQkJCS8vIElQcm9qZWN0IHByb2ogPSB3c1Jvb3QuZ2V0UHJvamVjdChuYW1lKTsKLQkJCQlpZiAocHJvaiAhPSBudWxsICYmIHByb2ouZXhpc3RzKCkpIHsKLQkJCQkJcHJvai5jbGVhckhpc3RvcnkobnVsbCk7Ci0JCQkJCS8vIHByb2ouY2xvc2UobnVsbCk7Ci0JCQkJCXByb2oucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7Ci0JCQkJCXByb2ouZGVsZXRlKHRydWUsIHRydWUsIG51bGwpOwotCQkJCQkvLyBwcm9qID0gbnVsbDsKLQkJCQl9Ci0JCQkJcmVmcmVzaFdvcmtzcGFjZSgpOwotCQkJfQotCQl9OwotCQkvLyBXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3MgPSBuZXcgV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yKCk7Ci0JCWRlbGV0ZU9wLnJ1bihudWxsKTsKLQkJLy8gc2F2ZXMgdGhlIG5ldyB3b3Jrc3BhY2UgbWV0YWRhdGEKLQkJLy8gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnNhdmUodHJ1ZSwgbnVsbCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy91dGlsL1Byb2plY3RVdGlsLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3V0aWwvUHJvamVjdFV0aWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTM2NTY1Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3V0aWwvUHJvamVjdFV0aWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy51dGlsOwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0RGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZVJ1bm5hYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUNsYXNzcGF0aEVudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklKYXZhUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhTW9kZWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5KU1BVSVRlc3RzUGx1Z2luOwotCi0vKioKLSAqIFNvbWUgdXRpbGl0aWVzIGZvciBjcmVhdGluZyBwcm9qZWN0cywgYW5kIGNvcHlpbmcgZmlsZXMgaW50byB0aGUgd29ya3NwYWNlLgotICovCi1wdWJsaWMgY2xhc3MgUHJvamVjdFV0aWwgewotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSkFWQV9OQVRVUkVfSUQgPSAib3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZSI7Ci0JCi0JLyoqCi0JICogQWRkIGEgbGlicmFyeSBlbnRyeSAobGlrZSBhIGphcikgdG8gdGhlIGNsYXNzcGF0aCBvZiBhIHByb2plY3QuCi0JICogVGhlIGphciBtdXN0IGJlIGluIHlvdXIgcG9qZWN0LiBZb3UgY2FuIGNvcHkgdGhlIGphciBpbnRvIHlvdXIgd29ya3NwYWNlIHVzaW5nCi0JICogY29weUJ1bmRsZUVudHJ5SW50b1dvcmtzcGFjZShTdHJpbmcgZW50cnluYW1lLCBTdHJpbmcgZnVsbFBhdGgpCi0JICogCi0JICogQHBhcmFtIHByb2ogYXNzdW1lZCBpdCBoYXMgamF2YSBuYXR1cmUKLQkgKiBAcGFyYW0gcGF0aFRvSmFyIHByb2plY3QgcmVsYXRpdmUsIG5vIGxlYWRpbmcgc2xhc2gKLQkgKi8KLQlwdWJsaWMgc3RhdGljIHZvaWQgYWRkTGlicmFyeUVudHJ5KElQcm9qZWN0IHByb2osIFN0cmluZyBwYXRoVG9KYXIpIHsKLQkJCi0JCUlQYXRoIHByb2pMb2NhdGlvbiA9IHByb2ouZ2V0TG9jYXRpb24oKTsKLQkJSVBhdGggYWJzSmFyUGF0aCA9IHByb2pMb2NhdGlvbi5hcHBlbmQocGF0aFRvSmFyKTsKLQkJCi0JCUlKYXZhUHJvamVjdCBqUHJvaiA9IEphdmFDb3JlLmNyZWF0ZShwcm9qKTsKLQkJCi0JCUlDbGFzc3BhdGhFbnRyeSBzdHJ1dHNKYXJFbnRyeSA9IEphdmFDb3JlLm5ld0xpYnJhcnlFbnRyeShhYnNKYXJQYXRoLCBudWxsLCBudWxsKTsKLQkJdHJ5IHsKLQkJCUlDbGFzc3BhdGhFbnRyeVtdIGN1cnJlbnRFbnRyaWVzID0galByb2ouZ2V0UmF3Q2xhc3NwYXRoKCk7Ci0JCQkKLQkJCUxpc3QgbCA9IG5ldyBBcnJheUxpc3QoKTsKLQkJCWwuYWRkQWxsKEFycmF5cy5hc0xpc3QoY3VycmVudEVudHJpZXMpKTsKLQkJCWwuYWRkKHN0cnV0c0phckVudHJ5KTsKLQkJCQotCQkJSUNsYXNzcGF0aEVudHJ5W10gbmV3RW50cmllcyA9IChJQ2xhc3NwYXRoRW50cnlbXSlsLnRvQXJyYXkobmV3IElDbGFzc3BhdGhFbnRyeVtsLnNpemUoKV0pOwotCQkJalByb2ouc2V0UmF3Q2xhc3NwYXRoKG5ld0VudHJpZXMsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQl9Ci0JCWNhdGNoIChKYXZhTW9kZWxFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQkKLQl9Ci0KLQlzdGF0aWMgdm9pZCBfY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKGZpbmFsIFN0cmluZyByb290RW50cnksIGZpbmFsIFN0cmluZyBmdWxsVGFyZ2V0UGF0aCkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlFbnVtZXJhdGlvbiBlbnRyaWVzID0gSlNQVUlUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0RW50cnlQYXRocyhyb290RW50cnkpOwotCQl3aGlsZSAoZW50cmllcyAhPSBudWxsICYmIGVudHJpZXMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLQkJCVN0cmluZyBlbnRyeVBhdGggPSBlbnRyaWVzLm5leHRFbGVtZW50KCkudG9TdHJpbmcoKTsKLQkJCVN0cmluZyB0YXJnZXRQYXRoID0gbmV3IFBhdGgoZnVsbFRhcmdldFBhdGggKyAiLyIgKyBlbnRyeVBhdGguc3Vic3RyaW5nKHJvb3RFbnRyeS5sZW5ndGgoKSkpLnRvU3RyaW5nKCk7Ci0JCQlpZiAoZW50cnlQYXRoLmVuZHNXaXRoKCIvIikpIHsKLQkJCQlJRm9sZGVyIGZvbGRlciA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0Rm9sZGVyKG5ldyBQYXRoKHRhcmdldFBhdGgpKTsKLQkJCQlpZiAoIWZvbGRlci5leGlzdHMoKSkgewotCQkJCQlmb2xkZXIuY3JlYXRlKHRydWUsIHRydWUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJCX0KLQkJCQlfY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKGVudHJ5UGF0aCwgdGFyZ2V0UGF0aCk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlfY29weUJ1bmRsZUVudHJ5SW50b1dvcmtzcGFjZShlbnRyeVBhdGgsIHRhcmdldFBhdGgpOwotCQkJfQotCQkJLy8gU3lzdGVtLm91dC5wcmludGxuKGVudHJ5UGF0aCArICIgLT4gIiArIHRhcmdldFBhdGgpOwotCQl9Ci0JfQotCi0Jc3RhdGljIElGaWxlIF9jb3B5QnVuZGxlRW50cnlJbnRvV29ya3NwYWNlKFN0cmluZyBlbnRyeW5hbWUsIFN0cmluZyBmdWxsUGF0aCkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlJRmlsZSBmaWxlID0gbnVsbDsKLQkJVVJMIGVudHJ5ID0gSlNQVUlUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0RW50cnkoZW50cnluYW1lKTsKLQkJaWYgKGVudHJ5ICE9IG51bGwpIHsKLQkJCXRyeSB7Ci0JCQkJYnl0ZVtdIGIgPSBuZXcgYnl0ZVsyMDQ4XTsKLQkJCQlJbnB1dFN0cmVhbSBpbnB1dCA9IGVudHJ5Lm9wZW5TdHJlYW0oKTsKLQkJCQlCeXRlQXJyYXlPdXRwdXRTdHJlYW0gb3V0cHV0ID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOwotCQkJCWludCBpID0gLTE7Ci0JCQkJd2hpbGUgKChpID0gaW5wdXQucmVhZChiKSkgPiAtMSkgewotCQkJCQlvdXRwdXQud3JpdGUoYiwgMCwgaSk7Ci0JCQkJfQotCQkJCWZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgoZnVsbFBhdGgpKTsKLQkJCQlpZiAoZmlsZSAhPSBudWxsKSB7Ci0JCQkJCWlmICghZmlsZS5leGlzdHMoKSkgewotCQkJCQkJZmlsZS5jcmVhdGUobmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKG91dHB1dC50b0J5dGVBcnJheSgpKSwgdHJ1ZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQkJCX0KLQkJCQkJZWxzZSB7Ci0JCQkJCQlmaWxlLnNldENvbnRlbnRzKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShvdXRwdXQudG9CeXRlQXJyYXkoKSksIHRydWUsIGZhbHNlLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfQotCQl9Ci0JCXJldHVybiBmaWxlOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBjb3B5QnVuZGxlRW50cmllc0ludG9Xb3Jrc3BhY2UoZmluYWwgU3RyaW5nIHJvb3RFbnRyeSwgZmluYWwgU3RyaW5nIGZ1bGxUYXJnZXRQYXRoKSB7Ci0JCUlXb3Jrc3BhY2VSdW5uYWJsZSBydW5uYWJsZSA9IG5ldyBJV29ya3NwYWNlUnVubmFibGUoKSB7Ci0JCQlwdWJsaWMgdm9pZCBydW4oSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCQkJX2NvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZShyb290RW50cnksIGZ1bGxUYXJnZXRQYXRoKTsKLQkJCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuY2hlY2twb2ludCh0cnVlKTsKLQkJCX0KLQkJfTsKLQkJdHJ5IHsKLQkJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5ydW4ocnVubmFibGUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQl9Ci0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiAKLQkgKiBAcGFyYW0gZW50cnluYW1lIHBhdGggcmVsYXRpdmUgdG8gVEVTVCBwbHVnaW4gc3RhcnRpbmcgdy8gYSAiLyIKLQkgKiAJCQkJCQkoZWcuICIvdGVzdGZpbGVzL2J1Z251bWJlci9zdHJ1dHMtbG9naWMudGxkIikKLQkgKiBAcGFyYW0gZnVsbFBhdGggcGF0aCByZWxhdGl2ZSB0byBqdW5pdCB0ZXN0IHdvcmtwYWNlCi0JICogCQkJCQkJKGVnLiAiL215cnVudGltZXByb2ovc3RydXRzLWxvZ2ljLnRsZCIpCi0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSUZpbGUgY29weUJ1bmRsZUVudHJ5SW50b1dvcmtzcGFjZShmaW5hbCBTdHJpbmcgZW50cnluYW1lLCBmaW5hbCBTdHJpbmcgZnVsbFBhdGgpIHsKLQkJZmluYWwgSUZpbGUgZmlsZVtdID0gbmV3IElGaWxlWzFdOwotCQlJV29ya3NwYWNlUnVubmFibGUgcnVubmFibGUgPSBuZXcgSVdvcmtzcGFjZVJ1bm5hYmxlKCkgewotCQkJcHVibGljIHZvaWQgcnVuKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQkJCWZpbGVbMF0gPSBfY29weUJ1bmRsZUVudHJ5SW50b1dvcmtzcGFjZShlbnRyeW5hbWUsIGZ1bGxQYXRoKTsKLQkJCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuY2hlY2twb2ludCh0cnVlKTsKLQkJCX0KLQkJfTsKLQkJdHJ5IHsKLQkJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5ydW4ocnVubmFibGUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQl9Ci0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJcmV0dXJuIGZpbGVbMF07Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgIElQcm9qZWN0IGNyZWF0ZVByb2plY3QoU3RyaW5nIG5hbWUsIElQYXRoIGxvY2F0aW9uLCBTdHJpbmdbXSBuYXR1cmVJZHMpIHsKLQkJSVByb2plY3REZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5uZXdQcm9qZWN0RGVzY3JpcHRpb24obmFtZSk7Ci0JCWlmIChsb2NhdGlvbiAhPSBudWxsKSB7Ci0JCQlkZXNjcmlwdGlvbi5zZXRMb2NhdGlvbihsb2NhdGlvbik7Ci0JCX0KLQkJaWYgKG5hdHVyZUlkcyAhPSBudWxsKSB7Ci0JCQlkZXNjcmlwdGlvbi5zZXROYXR1cmVJZHMobmF0dXJlSWRzKTsKLQkJfQotCQlJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KG5hbWUpOwotCQl0cnkgewotCQkJcHJvamVjdC5jcmVhdGUoZGVzY3JpcHRpb24sIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJcHJvamVjdC5vcGVuKG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQl9Ci0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJcmV0dXJuIHByb2plY3Q7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy91dGlsL1N0cmluZ0NvbXBhcmVVdGlsLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3V0aWwvU3RyaW5nQ29tcGFyZVV0aWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDEwNmFiYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3V0aWwvU3RyaW5nQ29tcGFyZVV0aWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy51dGlsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1JlYWRlcjsKLQotcHVibGljIGNsYXNzIFN0cmluZ0NvbXBhcmVVdGlsIHsKLQotCXB1YmxpYyBib29sZWFuIGVxdWFsc0lnbm9yZUxpbmVTZXBlcmF0b3IoU3RyaW5nIHN0cmluZzEsIFN0cmluZyBzdHJpbmcyKSB7Ci0KLQkJaWYgKHN0cmluZzEgPT0gbnVsbCkKLQkJCXJldHVybiBmYWxzZTsKLQkJaWYgKHN0cmluZzIgPT0gbnVsbCkKLQkJCXJldHVybiBmYWxzZTsKLQotCQlTdHJpbmdSZWFkZXIgczFSZWFkZXIgPSBuZXcgU3RyaW5nUmVhZGVyKHN0cmluZzEpOwotCQlTdHJpbmdSZWFkZXIgczJSZWFkZXIgPSBuZXcgU3RyaW5nUmVhZGVyKHN0cmluZzIpOwotCi0JCS8vIGFzc3VtZSB0cnVlIHVubGVzcyBmaW5kIGV2aWRlbmNlIHRvIHRoZSBjb250cmFyeQotCQlib29sZWFuIHJlc3VsdCA9IHRydWU7Ci0JCWludCBzMUNoYXIgPSAtMTsKLQkJaW50IHMyQ2hhciA9IC0xOwotCQlkbyB7Ci0KLQkJCXMxQ2hhciA9IGdldE5leHRDaGFyKHMxUmVhZGVyKTsKLQotCQkJczJDaGFyID0gZ2V0TmV4dENoYXIoczJSZWFkZXIpOwotCi0JCQlpZiAoczFDaGFyICE9IHMyQ2hhcikgewotCQkJCXJlc3VsdCA9IGZhbHNlOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCXdoaWxlIChzMUNoYXIgIT0gLTEgJiYgczJDaGFyICE9IC0xKTsKLQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCS8qKgotCSAqIE1ldGhvZCBnZXROZXh0Q2hhci4KLQkgKiBAcGFyYW0gczFSZWFkZXIKLQkgKiBAcmV0dXJuIGNoYXIKLQkgKi8KLQlwcml2YXRlIGludCBnZXROZXh0Q2hhcihTdHJpbmdSZWFkZXIgcmVhZGVyKSB7Ci0JCWludCBuZXh0Q2hhciA9IC0xOwotCQl0cnkgewotCQkJbmV4dENoYXIgPSByZWFkZXIucmVhZCgpOwotCQkJd2hpbGUgKGlzRU9MKG5leHRDaGFyKSkgewotCQkJCW5leHRDaGFyID0gcmVhZGVyLnJlYWQoKTsKLQkJCX0KLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQlyZXR1cm4gbmV4dENoYXI7Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIGlzRU9MKGludCBhQ2hhcikgewotCQlyZXR1cm4gKGFDaGFyID09ICdcbicgfHwgYUNoYXIgPT0gJ1xyJyk7Ci0JfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy91dGlsL1RpbWVzdGFtcFV0aWwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvdXRpbC9UaW1lc3RhbXBVdGlsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjOWI5OTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy91dGlsL1RpbWVzdGFtcFV0aWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnV0aWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7Ci1pbXBvcnQgamF2YS51dGlsLkRhdGU7Ci0KLWltcG9ydCBjb20uaWJtLmljdS50ZXh0LkRhdGVGb3JtYXQ7Ci1pbXBvcnQgY29tLmlibS5pY3UudGV4dC5TaW1wbGVEYXRlRm9ybWF0OwotCi0vKioKLSAqIEBhdXRob3IgZGF2aWR3Ci0gKgotICogVGhpcyBjbGFzcyBwcm92aWRlcyBvbmUgdGltZXN0YW1wIHBlciBWTSBydW4uCi0gKiAoVGVjaG5pY2FsbHksIHBlciBjbGFzcyBsb2FkaW5nLikKLSAqLwotcHVibGljIGNsYXNzIFRpbWVzdGFtcFV0aWwgewotCi0JcHJpdmF0ZSBzdGF0aWMgRGF0ZSB0aW1lc3RhbXAgPSBudWxsOwotCXByaXZhdGUgc3RhdGljIERhdGVGb3JtYXQgc2hvcnRGb3JtYXQgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgieXl5eSctJ01NJy0nZGQiKTsKLQkvLwlwcml2YXRlIHN0YXRpYyBEYXRlRm9ybWF0IGxvbmdGb3JtYXQgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgieXl5eSctJ01NJy0nZGQnLSdrayctJ21tJy0nc3MiKTsKLQotCXByaXZhdGUgc3RhdGljIFN0cmluZyBub3dTaG9ydCA9IG51bGw7Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyB0aW1lc3RhbXAoKSB7Ci0KLQkJaWYgKFRpbWVzdGFtcFV0aWwubm93U2hvcnQgPT0gbnVsbCkgewotCQkJVGltZXN0YW1wVXRpbC5ub3dTaG9ydCA9IHNob3J0Rm9ybWF0LmZvcm1hdChlbnN1cmVUaW1lc3RhbXAoKSk7Ci0JCX0KLQkJcmV0dXJuIFRpbWVzdGFtcFV0aWwubm93U2hvcnQ7Ci0JfQotCi0JcHJvdGVjdGVkIHN0YXRpYyBEYXRlIGVuc3VyZVRpbWVzdGFtcCgpIHsKLQkJLy8ganVzdCBjYWxjdWxhdGUgJ3RpbWVzdGFtcCcgb25jZSBwZXIgY2xhc3MgbG9hZGluZywgCi0JCS8vIHNvIHRoaXMgJ3RpbWVzdGFtcCcgcmVtYWlucyB0aGUgc2FtZSBkdXJpbmcgCi0JCS8vIGVudGlyZSBydW4uIAotCQlpZiAoVGltZXN0YW1wVXRpbC50aW1lc3RhbXAgPT0gbnVsbCkgewotCQkJQ2FsZW5kYXIgY2FsZW5kYXIgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOwotCQkJVGltZXN0YW1wVXRpbC50aW1lc3RhbXAgPSBjYWxlbmRhci5nZXRUaW1lKCk7Ci0JCX0KLQkJcmV0dXJuIFRpbWVzdGFtcFV0aWwudGltZXN0YW1wOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy91dGlsL1dvcmtzcGFjZVByb2dyZXNzTW9uaXRvci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy91dGlsL1dvcmtzcGFjZVByb2dyZXNzTW9uaXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhM2YxMDdhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvdXRpbC9Xb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy51dGlsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci0KLWNsYXNzIFdvcmtzcGFjZVByb2dyZXNzTW9uaXRvciBpbXBsZW1lbnRzIElQcm9ncmVzc01vbml0b3IgewotCXByaXZhdGUgYm9vbGVhbiBmaW5pc2hlZCA9IGZhbHNlOwotCi0JcHVibGljIHZvaWQgYmVnaW5UYXNrKFN0cmluZyBuYW1lLCBpbnQgdG90YWxXb3JrKSB7Ci0JfQotCi0JcHVibGljIHZvaWQgZG9uZSgpIHsKLQkJZmluaXNoZWQgPSB0cnVlOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzRmluaXNoZWQoKSB7Ci0JCXJldHVybiBmaW5pc2hlZDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBpbnRlcm5hbFdvcmtlZChkb3VibGUgd29yaykgewotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzQ2FuY2VsZWQoKSB7Ci0JCXJldHVybiBmaW5pc2hlZDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRDYW5jZWxlZChib29sZWFuIHZhbHVlKSB7Ci0JCWlmICh2YWx1ZSA9PSB0cnVlKQotCQkJZmluaXNoZWQgPSB0cnVlOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFRhc2tOYW1lKFN0cmluZyBuYW1lKSB7Ci0JfQotCi0JcHVibGljIHZvaWQgc3ViVGFzayhTdHJpbmcgbmFtZSkgewotCX0KLQotCXB1YmxpYyB2b2lkIHdvcmtlZChpbnQgd29yaykgewotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3ZhbGlkYXRpb24vSlNQSFRNTFZhbGlkYXRvclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvdmFsaWRhdGlvbi9KU1BIVE1MVmFsaWRhdG9yVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjc4MDA1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvdmFsaWRhdGlvbi9KU1BIVE1MVmFsaWRhdG9yVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnZhbGlkYXRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uSlNQQ29udGVudFZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnV0aWwuUHJvamVjdFV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwucHJvdmlzaW9uYWwuY29yZS5JUmVwb3J0ZXI7Ci0KLS8qKgotICogVGVzdHMgSFRNTCB2YWxpZGF0b3Igb24ganNwIGZpbGUKLSAqLwotcHVibGljIGNsYXNzIEpTUEhUTUxWYWxpZGF0b3JUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCVN0cmluZyB3dHBfYXV0b3Rlc3Rfbm9uaW50ZXJhY3RpdmUgPSBudWxsOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9KRUNUX05BTUUgPSAiYnVnXzE0MzIwOSI7Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zZXRVcCgpOwotCQlTdHJpbmcgbm9uaW50ZXJhY3RpdmUgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoInd0cC5hdXRvdGVzdC5ub25pbnRlcmFjdGl2ZSIpOwotCQlpZiAobm9uaW50ZXJhY3RpdmUgIT0gbnVsbCkKLQkJCXd0cF9hdXRvdGVzdF9ub25pbnRlcmFjdGl2ZSA9IG5vbmludGVyYWN0aXZlOwotCQlTeXN0ZW0uc2V0UHJvcGVydHkoInd0cC5hdXRvdGVzdC5ub25pbnRlcmFjdGl2ZSIsICJ0cnVlIik7Ci0KLQkJaWYgKCFSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QoUFJPSkVDVF9OQU1FKS5leGlzdHMoKSkgewotCQkJUHJvamVjdFV0aWwuY3JlYXRlUHJvamVjdChQUk9KRUNUX05BTUUsIG51bGwsIG5ldyBTdHJpbmdbXXtKYXZhQ29yZS5OQVRVUkVfSUR9KTsKLQkJCVByb2plY3RVdGlsLmNvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZSgiL3Rlc3RmaWxlcy8iICsgUFJPSkVDVF9OQU1FLCAiLyIgKyBQUk9KRUNUX05BTUUpOwotCQl9Ci0JCWFzc2VydFRydWUoInByb2plY3QgY291bGQgbm90IGJlIGNyZWF0ZWQiLCBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QoUFJPSkVDVF9OQU1FKS5leGlzdHMoKSk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIudGVhckRvd24oKTsKLQkJaWYgKHd0cF9hdXRvdGVzdF9ub25pbnRlcmFjdGl2ZSAhPSBudWxsKQotCQkJU3lzdGVtLnNldFByb3BlcnR5KCJ3dHAuYXV0b3Rlc3Qubm9uaW50ZXJhY3RpdmUiLCB3dHBfYXV0b3Rlc3Rfbm9uaW50ZXJhY3RpdmUpOwotCX0KLQotCS8qKgotCSAqIFRlc3RzIGpzcCBleHByZXNzaW9uIGluIGh0bWwgYXR0cmlidXRlcyBpbiBqc3AgZmlsZQotCSAqIAotCSAqIEB0aHJvd3MgRXhjZXB0aW9uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEpTUGluQXR0cmlidXRlcygpIHRocm93cyBFeGNlcHRpb24gewotCQlKU1BDb250ZW50VmFsaWRhdG9yIHZhbGlkYXRvciA9IG5ldyBKU1BDb250ZW50VmFsaWRhdG9yKCk7Ci0JCUlSZXBvcnRlciByZXBvcnRlciA9IG5ldyBSZXBvcnRlckZvclRlc3QoKTsKLQkJVmFsaWRhdGlvbkNvbnRleHRGb3JUZXN0IGhlbHBlciA9IG5ldyBWYWxpZGF0aW9uQ29udGV4dEZvclRlc3QoKTsKLQkJU3RyaW5nIGZpbGVQYXRoID0gIi8iICsgUFJPSkVDVF9OQU1FICsgIi9XZWJDb250ZW50L3VzZWpzcGluYXR0cmlidXRlLmpzcCI7Ci0JCWhlbHBlci5zZXRVUkkoZmlsZVBhdGgpOwotCQl2YWxpZGF0b3IudmFsaWRhdGUoaGVscGVyLCByZXBvcnRlcik7Ci0KLQkJYXNzZXJ0VHJ1ZSgianNwIGluIGF0dHJpYnV0ZXMgYXJlIGVycm9ycyB3aGVuIHRoZXkgc2hvdWxkIG5vdCBiZSAoaW4gLmpzcCkiLCByZXBvcnRlci5nZXRNZXNzYWdlcygpLmlzRW1wdHkoKSk7Ci0JfQotCi0JLyoqCi0JICogVGVzdHMganNwIGV4cHJlc3Npb24gaW4gaHRtbCBhdHRyaWJ1dGVzIGluIGh0bWwgZmlsZQotCSAqIAotCSAqIEB0aHJvd3MgRXhjZXB0aW9uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEpTUGluQXR0cmlidXRlc0hUTUwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJSlNQQ29udGVudFZhbGlkYXRvciB2YWxpZGF0b3IgPSBuZXcgSlNQQ29udGVudFZhbGlkYXRvcigpOwotCQlJUmVwb3J0ZXIgcmVwb3J0ZXIgPSBuZXcgUmVwb3J0ZXJGb3JUZXN0KCk7Ci0JCVZhbGlkYXRpb25Db250ZXh0Rm9yVGVzdCBoZWxwZXIgPSBuZXcgVmFsaWRhdGlvbkNvbnRleHRGb3JUZXN0KCk7Ci0JCVN0cmluZyBmaWxlUGF0aCA9ICIvIiArIFBST0pFQ1RfTkFNRSArICIvV2ViQ29udGVudC91c2Vqc3BpbmF0dHJpYnV0ZS5odG1sIjsKLQkJaGVscGVyLnNldFVSSShmaWxlUGF0aCk7Ci0JCXZhbGlkYXRvci52YWxpZGF0ZShoZWxwZXIsIHJlcG9ydGVyKTsKLQotCQlhc3NlcnRUcnVlKCJqc3AgaW4gYXR0cmlidXRlcyBhcmUgbm90IGVycm9ycyB3aGVuIHRoZXkgc2hvdWxkIGJlIChpbiAuaHRtbCkiLCAhcmVwb3J0ZXIuZ2V0TWVzc2FnZXMoKS5pc0VtcHR5KCkpOwotCX0KLQotCS8qKgotCSAqIFRlc3RzIGJhZCBhdHRyaWJ1dGUgbmFtZXMgaW4ganNwIGZpbGUgZmFsc2UKLQkgKiAKLQkgKiBAdGhyb3dzIEV4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RCYWRBdHRyaWJ1dGVOYW1lKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUpTUENvbnRlbnRWYWxpZGF0b3IgdmFsaWRhdG9yID0gbmV3IEpTUENvbnRlbnRWYWxpZGF0b3IoKTsKLQkJSVJlcG9ydGVyIHJlcG9ydGVyID0gbmV3IFJlcG9ydGVyRm9yVGVzdCgpOwotCQlWYWxpZGF0aW9uQ29udGV4dEZvclRlc3QgaGVscGVyID0gbmV3IFZhbGlkYXRpb25Db250ZXh0Rm9yVGVzdCgpOwotCQlTdHJpbmcgZmlsZVBhdGggPSAiLyIgKyBQUk9KRUNUX05BTUUgKyAiL1dlYkNvbnRlbnQvYmFkYXR0cmlidXRlbmFtZXMuanNwIjsKLQkJaGVscGVyLnNldFVSSShmaWxlUGF0aCk7Ci0JCXZhbGlkYXRvci52YWxpZGF0ZShoZWxwZXIsIHJlcG9ydGVyKTsKLQotCQlhc3NlcnRUcnVlKCJiYWQgYXR0cmlidXRlIG5hbWUgaXMgbm90IGVycm9yIHdoZW4gaXQgc2hvdWxkIGJlIiwgIXJlcG9ydGVyLmdldE1lc3NhZ2VzKCkuaXNFbXB0eSgpKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3ZhbGlkYXRpb24vUmVwb3J0ZXJGb3JUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3ZhbGlkYXRpb24vUmVwb3J0ZXJGb3JUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlYTk4YWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy92YWxpZGF0aW9uL1JlcG9ydGVyRm9yVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnZhbGlkYXRpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwuY29yZS5JTWVzc2FnZUFjY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5wcm92aXNpb25hbC5jb3JlLklNZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLnByb3Zpc2lvbmFsLmNvcmUuSVJlcG9ydGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLnByb3Zpc2lvbmFsLmNvcmUuSVZhbGlkYXRvcjsKLQotY2xhc3MgUmVwb3J0ZXJGb3JUZXN0IGltcGxlbWVudHMgSVJlcG9ydGVyIHsKLQlMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLQlwdWJsaWMgUmVwb3J0ZXJGb3JUZXN0KCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyB2b2lkIGFkZE1lc3NhZ2UoSVZhbGlkYXRvciBvcmlnaW4sIElNZXNzYWdlIG1lc3NhZ2UpIHsKLQkJbGlzdC5hZGQobWVzc2FnZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgZGlzcGxheVN1YnRhc2soSVZhbGlkYXRvciB2YWxpZGF0b3IsIElNZXNzYWdlIG1lc3NhZ2UpIHsKLQkJLyogZG8gbm90IG5lZWQgdG8gaW1wbGVtZW50ICovCi0JfQotCi0JcHVibGljIElNZXNzYWdlQWNjZXNzIGdldE1lc3NhZ2VBY2Nlc3MoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzQ2FuY2VsbGVkKCkgewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHVibGljIHZvaWQgcmVtb3ZlQWxsTWVzc2FnZXMoSVZhbGlkYXRvciBvcmlnaW4sIE9iamVjdCBvYmplY3QpIHsgLy8gZG8KLQkJLyogZG8gbm90IG5lZWQgdG8gaW1wbGVtZW50ICovCi0JfQotCi0JcHVibGljIHZvaWQgcmVtb3ZlQWxsTWVzc2FnZXMoSVZhbGlkYXRvciBvcmlnaW4pIHsKLQkJLyogZG8gbm90IG5lZWQgdG8gaW1wbGVtZW50ICovCi0JfQotCi0JcHVibGljIHZvaWQgcmVtb3ZlTWVzc2FnZVN1YnNldChJVmFsaWRhdG9yIHZhbGlkYXRvciwgT2JqZWN0IG9iaiwgU3RyaW5nIGdyb3VwTmFtZSkgey8vIGRvCi0JCS8qIGRvIG5vdCBuZWVkIHRvIGltcGxlbWVudCAqLwotCX0KLQotCXB1YmxpYyBMaXN0IGdldE1lc3NhZ2VzKCkgewotCQlyZXR1cm4gbGlzdDsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3ZhbGlkYXRpb24vVmFsaWRhdGlvbkNvbnRleHRGb3JUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3ZhbGlkYXRpb24vVmFsaWRhdGlvbkNvbnRleHRGb3JUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmNjEzZmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy92YWxpZGF0aW9uL1ZhbGlkYXRpb25Db250ZXh0Rm9yVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnZhbGlkYXRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5wcm92aXNpb25hbC5jb3JlLklWYWxpZGF0aW9uQ29udGV4dDsKLQotY2xhc3MgVmFsaWRhdGlvbkNvbnRleHRGb3JUZXN0IGltcGxlbWVudHMgSVZhbGlkYXRpb25Db250ZXh0IHsKLQlwcml2YXRlIFN0cmluZyBmVVJJID0gbnVsbDsKLQotCXB1YmxpYyB2b2lkIHNldFVSSShTdHJpbmcgdXJpKSB7Ci0JCWZVUkkgPSB1cmk7Ci0JfQotCi0JcHVibGljIFN0cmluZ1tdIGdldFVSSXMoKSB7Ci0JCWlmIChmVVJJICE9IG51bGwpCi0JCQlyZXR1cm4gbmV3IFN0cmluZ1tde2ZVUkl9OwotCQlyZXR1cm4gbmV3IFN0cmluZ1swXTsKLQl9Ci0KLQlwdWJsaWMgT2JqZWN0IGxvYWRNb2RlbChTdHJpbmcgc3ltYm9saWNOYW1lKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBPYmplY3QgbG9hZE1vZGVsKFN0cmluZyBzeW1ib2xpY05hbWUsIE9iamVjdFtdIHBhcm1zKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy92aWV3ZXIvVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25KU1AuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvdmlld2VyL1Rlc3RWaWV3ZXJDb25maWd1cmF0aW9uSlNQLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmZDNkMjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy92aWV3ZXIvVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25KU1AuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy52aWV3ZXI7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklBdXRvRWRpdFN0cmF0ZWd5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSUluZm9ybWF0aW9uQ29udHJvbENyZWF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVGV4dERvdWJsZUNsaWNrU3RyYXRlZ3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVGV4dEhvdmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuY29udGVudGFzc2lzdC5JQ29udGVudEFzc2lzdGFudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmZvcm1hdHRlci5JQ29udGVudEZvcm1hdHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0Lmh5cGVybGluay5JSHlwZXJsaW5rRGV0ZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5pbmZvcm1hdGlvbi5JSW5mb3JtYXRpb25QcmVzZW50ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5yZWNvbmNpbGVyLklSZWNvbmNpbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuc291cmNlLklBbm5vdGF0aW9uSG92ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRleHQuSUpTUFBhcnRpdGlvbnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS5TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25KU1A7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5Mb2dnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGV4dC5JSFRNTFBhcnRpdGlvbnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5TdHJ1Y3R1cmVkVGV4dFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnByb3Zpc2lvbmFsLnN0eWxlLkxpbmVTdHlsZVByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXh0LklYTUxQYXJ0aXRpb25zOwotCi0vKioKLSAqIEBhdXRob3IgcGF2ZXJ5Ci0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0Vmlld2VyQ29uZmlndXJhdGlvbkpTUCBleHRlbmRzIFRlc3RDYXNlIHsKLSAgICAKLQlwcml2YXRlIFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbkpTUCBmQ29uZmlnID0gbnVsbDsKLQlwcml2YXRlIGJvb2xlYW4gZkRpc3BsYXlFeGlzdHMgPSB0cnVlOwotCXByaXZhdGUgU3RydWN0dXJlZFRleHRWaWV3ZXIgZlZpZXdlciA9IG51bGw7Ci0JcHJpdmF0ZSBib29sZWFuIGlzU2V0dXAgPSBmYWxzZTsKLQkKLSAgICBwdWJsaWMgVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25KU1AoKSB7Ci0gICAgICAgIHN1cGVyKCJUZXN0Vmlld2VyQ29uZmlndXJhdGlvbkpTUCIpOwotICAgIH0KLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQkKLSAgICAJc3VwZXIuc2V0VXAoKTsKLQkJaWYoIXRoaXMuaXNTZXR1cCl7Ci0JCQlzZXRVcFZpZXdlckNvbmZpZ3VyYXRpb24oKTsKLQkJCXRoaXMuaXNTZXR1cCA9IHRydWU7Ci0JCX0KLSAgICB9Ci0JCi0JcHJpdmF0ZSB2b2lkIHNldFVwVmlld2VyQ29uZmlndXJhdGlvbigpIHsKLQotCQlpZiAoRGlzcGxheS5nZXRDdXJyZW50KCkgIT0gbnVsbCkgewotCQkJCi0JCQlTaGVsbCBzaGVsbCA9IG51bGw7Ci0JCQlDb21wb3NpdGUgcGFyZW50ID0gbnVsbDsKLQkJCQotCQkJaWYoUGxhdGZvcm1VSS5pc1dvcmtiZW5jaFJ1bm5pbmcoKSkgewotCQkJCXNoZWxsID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRTaGVsbCgpOwotCQkJfQotCQkJZWxzZSB7CQotCQkJCXNoZWxsID0gbmV3IFNoZWxsKERpc3BsYXkuZ2V0Q3VycmVudCgpKTsKLQkJCX0KLQkJCXBhcmVudCA9IG5ldyBDb21wb3NpdGUoc2hlbGwsIFNXVC5OT05FKTsKLQkJCQotCQkJLy8gZHVtbXkgdmlld2VyCi0JCQlmVmlld2VyID0gbmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyKHBhcmVudCwgbnVsbCwgbnVsbCwgZmFsc2UsIFNXVC5OT05FKTsKLQkJCWZDb25maWcgPSBuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uSlNQKCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlmRGlzcGxheUV4aXN0cyA9IGZhbHNlOwotCQkJTG9nZ2VyLmxvZyhMb2dnZXIuSU5GTywgIlJlbWVtYmVyLCB2aWV3ZXIgY29uZmlndXJhdGlvbiB0ZXN0cyBhcmUgbm90IHJ1biBiZWNhdXNlIHdvcmtiZW5jaCBpcyBub3Qgb3BlbiAobm9ybWFsIG9uIGJ1aWxkIG1hY2hpbmUpIik7Ci0JCX0KLQl9Ci0gICAgCi0JLyoqCi0JICogTm90IG5lY2Vzc2FyeQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RHZXRBbm5vdGF0aW9uSG92ZXIoKSB7Ci0JCQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCUlBbm5vdGF0aW9uSG92ZXIgaG92ZXIgPSBmQ29uZmlnLmdldEFubm90YXRpb25Ib3ZlcihmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgiQW5ub3RhdGlvbkhvdmVyIGlzIG51bGwiLCBob3Zlcik7Ci0gICAgfQotCQotCXB1YmxpYyB2b2lkIHRlc3RHZXRBdXRvRWRpdFN0cmF0ZWdpZXMoKSB7Ci0JCQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCUlBdXRvRWRpdFN0cmF0ZWd5W10gc3RyYXRlZ2llcyA9IGZDb25maWcuZ2V0QXV0b0VkaXRTdHJhdGVnaWVzKGZWaWV3ZXIsIElKU1BQYXJ0aXRpb25zLkpTUF9ERUZBVUxUKTsKLQkJYXNzZXJ0Tm90TnVsbChzdHJhdGVnaWVzKTsKLQkJYXNzZXJ0VHJ1ZSgidGhlcmUgYXJlIG5vIGF1dG8gZWRpdCBzdHJhdGVnaWVzIiwgc3RyYXRlZ2llcy5sZW5ndGggPiAwKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEdldENvbmZpZ3VyZWRDb250ZW50VHlwZXMoKSB7Ci0JCQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCVN0cmluZ1tdIGNvbmZpZ3VyZWRDb250ZW50VHlwZXMgPSBmQ29uZmlnLmdldENvbmZpZ3VyZWRDb250ZW50VHlwZXMoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoY29uZmlndXJlZENvbnRlbnRUeXBlcyk7Ci0JCWFzc2VydFRydWUoInRoZXJlIGFyZSBubyBjb25maWd1cmVkIGNvbnRlbnQgdHlwZXMiLCBjb25maWd1cmVkQ29udGVudFR5cGVzLmxlbmd0aCA+IDEpOwotCX0KLQkKLQkvKioKLQkgKiBOb3QgbmVjZXNzYXJ5Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldENvbnRlbnRBc3Npc3RhbnQoKSB7Ci0JCQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCUlDb250ZW50QXNzaXN0YW50IGNhID0gZkNvbmZpZy5nZXRDb250ZW50QXNzaXN0YW50KGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKCJ0aGVyZSBpcyBubyBjb250ZW50IGFzc2lzdGFudCIsIGNhKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEdldENvbnRlbnRGb3JtYXR0ZXIoKSB7Ci0JCQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCUlDb250ZW50Rm9ybWF0dGVyIGNmID0gZkNvbmZpZy5nZXRDb250ZW50Rm9ybWF0dGVyKGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKCJ0aGVyZSBpcyBubyBjb250ZW50IGZvcm1hdHRlciIsIGNmKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEdldERvdWJsZUNsaWNrU3RyYXRlZ3koKSB7Ci0JCQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCVN0cmluZ1tdIGNvbnRlbnRUeXBlcyA9IGZDb25maWcuZ2V0Q29uZmlndXJlZENvbnRlbnRUeXBlcyhmVmlld2VyKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjb250ZW50VHlwZXMubGVuZ3RoOyBpKyspIHsKLQkJCUlUZXh0RG91YmxlQ2xpY2tTdHJhdGVneSBzdHJhdGVneSA9IGZDb25maWcuZ2V0RG91YmxlQ2xpY2tTdHJhdGVneShmVmlld2VyLCBjb250ZW50VHlwZXNbaV0pOwotCQkJaWYoc3RyYXRlZ3kgIT0gbnVsbCkgewotCQkJCXJldHVybjsKLQkJCX0KLQkJfQotCQlhc3NlcnRUcnVlKCJ0aGVyZSBhcmUgbm8gY29uZmlndXJlZCBkb3VibGUgY2xpY2sgc3RyYXRlZ2llcyIsIGZhbHNlKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEdldEh5cGVybGlua0RldGVjdG9ycygpIHsKLQkJCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJSUh5cGVybGlua0RldGVjdG9yW10gZGV0ZWN0b3JzID0gZkNvbmZpZy5nZXRIeXBlcmxpbmtEZXRlY3RvcnMoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoInRoZXJlIGFyZSBubyBoeXBlcmxpbmsgZGV0ZWN0b3JzIiwgZGV0ZWN0b3JzKTsKLQkJYXNzZXJ0VHJ1ZSgidGhlcmUgYXJlIG5vIGh5cGVybGluayBkZXRlY3RvcnMiLCBkZXRlY3RvcnMubGVuZ3RoID4gMSk7Ci0JfQotCQotICAgIHB1YmxpYyB2b2lkIHRlc3RHZXRJbmRlbnRQcmVmaXhlcygpIHsKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQlTdHJpbmdbXSBjb250ZW50VHlwZXMgPSBmQ29uZmlnLmdldENvbmZpZ3VyZWRDb250ZW50VHlwZXMoZlZpZXdlcik7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY29udGVudFR5cGVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlTdHJpbmcgcHJlZml4ZXNbXSA9IGZDb25maWcuZ2V0SW5kZW50UHJlZml4ZXMoZlZpZXdlciwgY29udGVudFR5cGVzW2ldKTsKLQkJCWlmKHByZWZpeGVzICE9IG51bGwpIHsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSgidGhlcmUgYXJlIG5vIGNvbmZpZ3VyZWQgaW5kZW50IHByZWZpeGVzIiwgZmFsc2UpOwotCX0KLQkKLQkvKioKLQkgKiBOb3QgbmVjZXNzYXJ5Ci0JICovCi0gICAgcHVibGljIHZvaWQgdGVzdEdldEluZm9ybWF0aW9uQ29udHJvbENyZWF0b3IoKSB7Ci0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJSUluZm9ybWF0aW9uQ29udHJvbENyZWF0b3IgaW5mb0NyZWF0b3IgPSBmQ29uZmlnLmdldEluZm9ybWF0aW9uQ29udHJvbENyZWF0b3IoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoIkluZm9ybWF0aW9uQ29udHJvbENyZWF0b3IgaXMgbnVsbCIsIGluZm9DcmVhdG9yKTsKLSAgICB9Ci0gICAgCi0JLyoqCi0JICogTm90IG5lY2Vzc2FyeQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RHZXRJbmZvcm1hdGlvblByZXNlbnRlcigpIHsKLQkJCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJSUluZm9ybWF0aW9uUHJlc2VudGVyIHByZXNlbnRlciA9IGZDb25maWcuZ2V0SW5mb3JtYXRpb25QcmVzZW50ZXIoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoIkluZm9ybWF0aW9uUHJlc2VudGVyIGlzIG51bGwiLCBwcmVzZW50ZXIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0TGluZVN0eWxlUHJvdmlkZXJzKCkgewotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCVN0cmluZ1tdIGNvbnRlbnRUeXBlcyA9IGZDb25maWcuZ2V0Q29uZmlndXJlZENvbnRlbnRUeXBlcyhmVmlld2VyKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjb250ZW50VHlwZXMubGVuZ3RoOyBpKyspIHsKLQkJCUxpbmVTdHlsZVByb3ZpZGVyIHByb3ZpZGVyc1tdID0gZkNvbmZpZy5nZXRMaW5lU3R5bGVQcm92aWRlcnMoZlZpZXdlciwgY29udGVudFR5cGVzW2ldKTsKLQkJCWlmKHByb3ZpZGVycyAhPSBudWxsKSB7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQl9Ci0JCWFzc2VydFRydWUoInRoZXJlIGFyZSBubyBjb25maWd1cmVkIGxpbmUgc3R5bGUgcHJvdmlkZXJzIiwgZmFsc2UpOwotCX0KLQkKLQkvKioKLQkgKiBOb3QgbmVjZXNzYXJ5Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldFJlY29uY2lsZXIoKSB7Ci0JCQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCUlSZWNvbmNpbGVyIHIgPSBmQ29uZmlnLmdldFJlY29uY2lsZXIoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoIlJlY29uY2lsZXIgaXMgbnVsbCIsIHIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0VGV4dEhvdmVyKCkgewotCQkKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJU3RyaW5nW10gaG92ZXJQYXJ0aXRpb25zID0gbmV3IFN0cmluZ1tde0lIVE1MUGFydGl0aW9ucy5IVE1MX0RFRkFVTFQsCi0JCQkJCQkJCQkJCQkJSUhUTUxQYXJ0aXRpb25zLlNDUklQVCwKLQkJCQkJCQkJCQkJCQlJSlNQUGFydGl0aW9ucy5KU1BfREVGQVVMVCwKLQkJCQkJCQkJCQkJCQlJSlNQUGFydGl0aW9ucy5KU1BfRElSRUNUSVZFLAotCQkJCQkJCQkJCQkJCUlKU1BQYXJ0aXRpb25zLkpTUF9DT05URU5UX0pBVkEsCi0JCQkJCQkJCQkJCQkJSVhNTFBhcnRpdGlvbnMuWE1MX0RFRkFVTFR9OwotCQkKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBob3ZlclBhcnRpdGlvbnMubGVuZ3RoOyBpKyspIHsKLQkJCUlUZXh0SG92ZXIgaG92ZXIgPSBmQ29uZmlnLmdldFRleHRIb3ZlcihmVmlld2VyLCBob3ZlclBhcnRpdGlvbnNbaV0sIFNXVC5OT05FKTsKLQkJCWFzc2VydE5vdE51bGwoImhvdmVyIHdhcyBudWxsIGZvciBwYXJ0aXRpb246ICIgKyBob3ZlclBhcnRpdGlvbnNbaV0sIGhvdmVyKTsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvdmlld2VyL1ZpZXdlclRlc3RKU1AuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvdmlld2VyL1ZpZXdlclRlc3RKU1AuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTE2MmE0My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3ZpZXdlci9WaWV3ZXJUZXN0SlNQLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMudmlld2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUNvbnRyaWJ1dGlvbk1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5KRmFjZVJlc291cmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9ySlNQOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkuU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uSlNQOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5CdXN5SW5kaWNhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSU1lbWVudG87Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVZpZXdTaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuVmlld1BhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5JVGV4dEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5JQ29udGVudE91dGxpbmVQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JbmRleGVkUmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuU3RydWN0dXJlZFRleHRFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5TdHJ1Y3R1cmVkVGV4dFZpZXdlcjsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotCi1wdWJsaWMgY2xhc3MgVmlld2VyVGVzdEpTUCBleHRlbmRzIFZpZXdQYXJ0IHsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBTU0VfRURJVE9SX0ZPTlQgPSAib3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXh0Zm9udCI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgREVGQVVMVF9WSUVXRVJfQ09OVEVOVFMgPSAiPCVAIHBhZ2UgY29udGVudFR5cGU9XCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMVwiICU+XG4iOwotCi0JU3RydWN0dXJlZFRleHRWaWV3ZXIgZlNvdXJjZVZpZXdlciA9IG51bGw7Ci0JcHJpdmF0ZSBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb24gZkNvbmZpZyA9IG51bGw7Ci0JcHJpdmF0ZSBJQ29udGVudE91dGxpbmVQYWdlIGZDb250ZW50T3V0bGluZVBhZ2UgPSBudWxsOwotCXByaXZhdGUgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBmSGlnaGxpZ2h0UmFuZ2VMaXN0ZW5lciA9IG51bGw7Ci0KLQkvKioKLQkgKiBTZXRzIHRoZSB2aWV3ZXIncyBoaWdobGlnaHRpbmcgdGV4dCByYW5nZSB0byB0aGUgdGV4dCByYW5nZSBpbmRpY2F0ZWQKLQkgKiBieSB0aGUgc2VsZWN0ZWQgTm9kZXMuCi0JICovCi0JcHJvdGVjdGVkIGNsYXNzIE5vZGVSYW5nZVNlbGVjdGlvbkxpc3RlbmVyIGltcGxlbWVudHMgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciB7Ci0JCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7Ci0JCQlpZiAoIWV2ZW50LmdldFNlbGVjdGlvbigpLmlzRW1wdHkoKSAmJiBldmVudC5nZXRTZWxlY3Rpb24oKSBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7Ci0JCQkJSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBldmVudC5nZXRTZWxlY3Rpb24oKTsKLQkJCQlJbmRleGVkUmVnaW9uIHN0YXJ0Tm9kZSA9IChJbmRleGVkUmVnaW9uKSBzZWxlY3Rpb24uZ2V0Rmlyc3RFbGVtZW50KCk7Ci0JCQkJSW5kZXhlZFJlZ2lvbiBlbmROb2RlID0gKEluZGV4ZWRSZWdpb24pIHNlbGVjdGlvbi50b0FycmF5KClbc2VsZWN0aW9uLnNpemUoKSAtIDFdOwotCi0JCQkJaWYgKHN0YXJ0Tm9kZSBpbnN0YW5jZW9mIEF0dHIpCi0JCQkJCXN0YXJ0Tm9kZSA9IChJbmRleGVkUmVnaW9uKSAoKEF0dHIpIHN0YXJ0Tm9kZSkuZ2V0T3duZXJFbGVtZW50KCk7Ci0JCQkJaWYgKGVuZE5vZGUgaW5zdGFuY2VvZiBBdHRyKQotCQkJCQllbmROb2RlID0gKEluZGV4ZWRSZWdpb24pICgoQXR0cikgZW5kTm9kZSkuZ2V0T3duZXJFbGVtZW50KCk7Ci0KLQkJCQlpbnQgc3RhcnQgPSBzdGFydE5vZGUuZ2V0U3RhcnRPZmZzZXQoKTsKLQkJCQlpbnQgZW5kID0gZW5kTm9kZS5nZXRFbmRPZmZzZXQoKTsKLQotCQkJCWZTb3VyY2VWaWV3ZXIucmVzZXRWaXNpYmxlUmVnaW9uKCk7Ci0JCQkJZlNvdXJjZVZpZXdlci5zZXRWaXNpYmxlUmVnaW9uKHN0YXJ0LCBlbmQgLSBzdGFydCk7Ci0JCQkJZlNvdXJjZVZpZXdlci5zZXRTZWxlY3RlZFJhbmdlKHN0YXJ0LCAwKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCWZTb3VyY2VWaWV3ZXIucmVzZXRWaXNpYmxlUmVnaW9uKCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgY2xhc3MgTnVtYmVySW5wdXREaWFsb2cgZXh0ZW5kcyBEaWFsb2cgewotCQlwdWJsaWMgTnVtYmVySW5wdXREaWFsb2coU2hlbGwgc2hlbGwpIHsKLQkJCXN1cGVyKHNoZWxsKTsKLQkJfQotCi0JCXB1YmxpYyBUZXh0IHN0YXJ0OwotCQlpbnQgc3RhcnRWYWx1ZTsKLQkJcHVibGljIFRleHQgbGVuZ3RoOwotCQlpbnQgbGVuZ3RoVmFsdWU7Ci0KLQkJcHJvdGVjdGVkIENvbnRyb2wgY3JlYXRlRGlhbG9nQXJlYShDb21wb3NpdGUgcGFyZW50KSB7Ci0JCQlDb21wb3NpdGUgY29tcG9zaXRlID0gKENvbXBvc2l0ZSkgc3VwZXIuY3JlYXRlRGlhbG9nQXJlYShwYXJlbnQpOwotCQkJQ29tcG9zaXRlIGNvbnRhaW5lciA9IG5ldyBDb21wb3NpdGUoY29tcG9zaXRlLCBTV1QuTlVMTCk7Ci0JCQljb250YWluZXIuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKSk7Ci0JCQljb250YWluZXIuc2V0TGF5b3V0KG5ldyBHcmlkTGF5b3V0KDIsIHRydWUpKTsKLQkJCXNldFNoZWxsU3R5bGUoZ2V0U2hlbGwoKS5nZXRTdHlsZSgpIHwgU1dULlJFU0laRSk7Ci0KLQkJCUxhYmVsIGxhYmVsID0gbmV3IExhYmVsKGNvbnRhaW5lciwgU1dULk5VTEwpOwotCQkJbGFiZWwuc2V0VGV4dCgiU3RhcnQiKTsKLQkJCWxhYmVsLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCkpOwotCi0JCQlsYWJlbCA9IG5ldyBMYWJlbChjb250YWluZXIsIFNXVC5OVUxMKTsKLQkJCWxhYmVsLnNldFRleHQoIkxlbmd0aCIpOwotCQkJbGFiZWwuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKSk7Ci0KLQkJCXN0YXJ0ID0gbmV3IFRleHQoY29udGFpbmVyLCBTV1QuQk9SREVSKTsKLQkJCXN0YXJ0VmFsdWUgPSBmU291cmNlVmlld2VyLmdldFZpc2libGVSZWdpb24oKS5nZXRPZmZzZXQoKTsKLQkJCXN0YXJ0LnNldFRleHQoIiIgKyBzdGFydFZhbHVlKTsKLQkJCXN0YXJ0LnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCkpOwotCi0JCQlsZW5ndGggPSBuZXcgVGV4dChjb250YWluZXIsIFNXVC5CT1JERVIpOwotCQkJbGVuZ3RoVmFsdWUgPSBmU291cmNlVmlld2VyLmdldFZpc2libGVSZWdpb24oKS5nZXRMZW5ndGgoKTsKLQkJCWxlbmd0aC5zZXRUZXh0KCIiICsgbGVuZ3RoVmFsdWUpOwotCQkJbGVuZ3RoLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCkpOwotCi0JCQkvLyBzdGFydC5hZGRNb2RpZnlMaXN0ZW5lcihuZXcgTW9kaWZ5TGlzdGVuZXIoKSB7Ci0JCQkvLyBwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KE1vZGlmeUV2ZW50IGUpIHsKLQkJCS8vIGlmIChlLndpZGdldCA9PSBzdGFydCkgewotCQkJLy8gdHJ5IHsKLQkJCS8vIHN0YXJ0VmFsdWUgPSBJbnRlZ2VyLmRlY29kZShzdGFydC5nZXRUZXh0KCkpLmludFZhbHVlKCk7Ci0JCQkvLyB9Ci0JCQkvLyBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUyKSB7Ci0JCQkvLyBzdGFydFZhbHVlID0gMDsKLQkJCS8vIH0KLQkJCS8vIH0KLQkJCS8vIH0KLQkJCS8vIH0pOwotCQkJLy8gbGVuZ3RoLmFkZE1vZGlmeUxpc3RlbmVyKG5ldyBNb2RpZnlMaXN0ZW5lcigpIHsKLQkJCS8vIHB1YmxpYyB2b2lkIG1vZGlmeVRleHQoTW9kaWZ5RXZlbnQgZSkgewotCQkJLy8gaWYgKGUud2lkZ2V0ID09IGxlbmd0aCkgewotCQkJLy8gdHJ5IHsKLQkJCS8vIGxlbmd0aFZhbHVlID0gSW50ZWdlci5kZWNvZGUobGVuZ3RoLmdldFRleHQoKSkuaW50VmFsdWUoKTsKLQkJCS8vIH0KLQkJCS8vIGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZTIpIHsKLQkJCS8vIGxlbmd0aFZhbHVlID0gMDsKLQkJCS8vIH0KLQkJCS8vIH0KLQkJCS8vIH0KLQkJCS8vIH0pOwotCi0JCQlyZXR1cm4gY29tcG9zaXRlOwotCQl9Ci0KLQkJLyoKLQkJICogKG5vbi1KYXZhZG9jKQotCQkgKiAKLQkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZyNva1ByZXNzZWQoKQotCQkgKi8KLQkJcHJvdGVjdGVkIHZvaWQgb2tQcmVzc2VkKCkgewotCQkJdHJ5IHsKLQkJCQlzdGFydFZhbHVlID0gSW50ZWdlci5kZWNvZGUoc3RhcnQuZ2V0VGV4dCgpKS5pbnRWYWx1ZSgpOwotCQkJfQotCQkJY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlMikgewotCQkJCXN0YXJ0VmFsdWUgPSAwOwotCQkJfQotCQkJdHJ5IHsKLQkJCQlsZW5ndGhWYWx1ZSA9IEludGVnZXIuZGVjb2RlKGxlbmd0aC5nZXRUZXh0KCkpLmludFZhbHVlKCk7Ci0JCQl9Ci0JCQljYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUyKSB7Ci0JCQkJbGVuZ3RoVmFsdWUgPSAwOwotCQkJfQotCQkJc3VwZXIub2tQcmVzc2VkKCk7Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBhZGRBY3Rpb25zKElDb250cmlidXRpb25NYW5hZ2VyIG1ncikgewotCQlpZiAobWdyICE9IG51bGwpIHsKLQkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkJCXJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkJCXJldHVybiAiTmV3IEpTUCI7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlzdXBlci5ydW4oKTsKLQkJCQkJQnVzeUluZGljYXRvci5zaG93V2hpbGUoZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLCBuZXcgUnVubmFibGUoKSB7Ci0JCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCQkJc2V0dXBWaWV3ZXJGb3JOZXcoKTsKLQkJCQkJCQlmU291cmNlVmlld2VyLnNldEVkaXRhYmxlKHRydWUpOwotCQkJCQkJfQotCQkJCQl9KTsKLQkJCQl9Ci0JCQl9KTsKLQkJCW1nci5hZGQobmV3IFNlcGFyYXRvcigpKTsKLQkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkJCXJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkJCXJldHVybiAiQ2hhbmdlIFZpc2liaWxpdHkiOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJc3VwZXIucnVuKCk7Ci0JCQkJCU51bWJlcklucHV0RGlhbG9nIGRsZyA9IG5ldyBOdW1iZXJJbnB1dERpYWxvZyhmU291cmNlVmlld2VyLmdldENvbnRyb2woKS5nZXRTaGVsbCgpKTsKLQkJCQkJaW50IHByb2NlZWQgPSBkbGcub3BlbigpOwotCQkJCQlpZiAocHJvY2VlZCA9PSBXaW5kb3cuQ0FOQ0VMKQotCQkJCQkJcmV0dXJuOwotCQkJCQlmU291cmNlVmlld2VyLnJlc2V0VmlzaWJsZVJlZ2lvbigpOwotCQkJCQlmU291cmNlVmlld2VyLnNldFZpc2libGVSZWdpb24oZGxnLnN0YXJ0VmFsdWUsIGRsZy5sZW5ndGhWYWx1ZSk7Ci0JCQkJfQotCQkJfSk7Ci0JCQltZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQkJCQlyZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJCQlyZXR1cm4gIlNob3cgQWxsIjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlmU291cmNlVmlld2VyLnJlc2V0VmlzaWJsZVJlZ2lvbigpOwotCQkJCX0KLQkJCX0pOwotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJDaGFuZ2UgVmlzaWJpbGl0eSBpbiBFZGl0b3IiOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJc3VwZXIucnVuKCk7Ci0JCQkJCVN0cnVjdHVyZWRUZXh0Vmlld2VyIHNvdXJjZVZpZXdlciA9IG51bGw7Ci0JCQkJCUlFZGl0b3JQYXJ0IHBhcnQgPSBnZXRWaWV3U2l0ZSgpLmdldFdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKTsKLQkJCQkJaWYgKHBhcnQgIT0gbnVsbCAmJiBwYXJ0IGluc3RhbmNlb2YgU3RydWN0dXJlZFRleHRFZGl0b3IpIHsKLQkJCQkJCXNvdXJjZVZpZXdlciA9ICgoU3RydWN0dXJlZFRleHRFZGl0b3IpIHBhcnQpLmdldFRleHRWaWV3ZXIoKTsKLQkJCQkJfQotCQkJCQlpZiAoc291cmNlVmlld2VyICE9IG51bGwpIHsKLQkJCQkJCU51bWJlcklucHV0RGlhbG9nIGRsZyA9IG5ldyBOdW1iZXJJbnB1dERpYWxvZyhzb3VyY2VWaWV3ZXIuZ2V0Q29udHJvbCgpLmdldFNoZWxsKCkpOwotCQkJCQkJaW50IHByb2NlZWQgPSBkbGcub3BlbigpOwotCQkJCQkJaWYgKHByb2NlZWQgPT0gV2luZG93LkNBTkNFTCkKLQkJCQkJCQlyZXR1cm47Ci0JCQkJCQlzb3VyY2VWaWV3ZXIucmVzZXRWaXNpYmxlUmVnaW9uKCk7Ci0JCQkJCQlzb3VyY2VWaWV3ZXIuc2V0VmlzaWJsZVJlZ2lvbihkbGcuc3RhcnRWYWx1ZSwgZGxnLmxlbmd0aFZhbHVlKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0pOwotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJTaG93IEFsbCBpbiBFZGl0b3IiOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJc3VwZXIucnVuKCk7Ci0JCQkJCVN0cnVjdHVyZWRUZXh0Vmlld2VyIHNvdXJjZVZpZXdlciA9IG51bGw7Ci0JCQkJCUlFZGl0b3JQYXJ0IHBhcnQgPSBnZXRWaWV3U2l0ZSgpLmdldFdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKTsKLQkJCQkJaWYgKHBhcnQgIT0gbnVsbCAmJiBwYXJ0IGluc3RhbmNlb2YgU3RydWN0dXJlZFRleHRFZGl0b3IpIHsKLQkJCQkJCXNvdXJjZVZpZXdlciA9ICgoU3RydWN0dXJlZFRleHRFZGl0b3IpIHBhcnQpLmdldFRleHRWaWV3ZXIoKTsKLQkJCQkJfQotCQkJCQlpZiAoc291cmNlVmlld2VyICE9IG51bGwpIHsKLQkJCQkJCXNvdXJjZVZpZXdlci5yZXNldFZpc2libGVSZWdpb24oKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0pOwotCQkJbWdyLmFkZChuZXcgU2VwYXJhdG9yKCkpOwotCQkJLy8gbm8gbG9uZ2VyIGFibGUgdG8gc2V0IGlucHV0IHRvIE5VTEwKLQkJCS8vIG1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCS8vIHB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCS8vIHJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJLy8gfQotCQkJLy8KLQkJCS8vIHB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkvLyByZXR1cm4gIlNldCBJbnB1dCB0byBOVUxMIjsKLQkJCS8vIH0KLQkJCS8vIHB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCS8vIHN1cGVyLnJ1bigpOwotCQkJLy8gdmlld2VyLnNldElucHV0KG51bGwpOwotCQkJLy8gfQotCQkJLy8gfSk7Ci0JCQltZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQkJCQlyZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJCQlyZXR1cm4gIlRha2UgSW5wdXQgZnJvbSBBY3RpdmUgRWRpdG9yIjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlJVGV4dEVkaXRvciB0ZXh0RWRpdG9yID0gZ2V0QWN0aXZlRWRpdG9yKCk7Ci0JCQkJCWlmICh0ZXh0RWRpdG9yICE9IG51bGwpIHsKLQkJCQkJCXNldHVwVmlld2VyRm9yRWRpdG9yKHRleHRFZGl0b3IpOwotCQkJCQkJZlNvdXJjZVZpZXdlci5zZXRFZGl0YWJsZSh0cnVlKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0pOwotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJUYWtlIElucHV0IGFuZCBGb2xsb3cgU2VsZWN0aW9uIjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlmb2xsb3dTZWxlY3Rpb24oKTsKLQkJCQkJZlNvdXJjZVZpZXdlci5zZXRFZGl0YWJsZSh0cnVlKTsKLQkJCQl9Ci0JCQl9KTsKLQkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkJCXJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkJCXJldHVybiAiVGFrZSBJbnB1dCBhbmQgRm9sbG93IFNlbGVjdGlvbiBBcyBSZWFkT25seSI7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlzdXBlci5ydW4oKTsKLQkJCQkJZm9sbG93U2VsZWN0aW9uKCk7Ci0JCQkJCWZTb3VyY2VWaWV3ZXIuc2V0RWRpdGFibGUoZmFsc2UpOwotCQkJCX0KLQkJCX0pOwotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJTdG9wIEZvbGxvd2luZyBTZWxlY3Rpb24iOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJc3VwZXIucnVuKCk7Ci0JCQkJCXN0b3BGb2xsb3dTZWxlY3Rpb24oKTsKLQkJCQl9Ci0JCQl9KTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQjY3JlYXRlUGFydENvbnRyb2woQ29tcG9zaXRlKQotCSAqLwotCXB1YmxpYyB2b2lkIGNyZWF0ZVBhcnRDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJSUNvbnRyaWJ1dGlvbk1hbmFnZXIgbWdyID0gZ2V0Vmlld1NpdGUoKS5nZXRBY3Rpb25CYXJzKCkuZ2V0TWVudU1hbmFnZXIoKTsKLQkJYWRkQWN0aW9ucyhtZ3IpOwotCi0JCS8vIGNyZWF0ZSBzb3VyY2Ugdmlld2VyICYgaXRzIGNvbnRlbnQgdHlwZS1zcGVjaWZpYyB2aWV3ZXIKLQkJLy8gY29uZmlndXJhdGlvbgotCQlmU291cmNlVmlld2VyID0gbmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyKHBhcmVudCwgbnVsbCwgbnVsbCwgZmFsc2UsIFNXVC5OT05FKTsKLQkJZkNvbmZpZyA9IG5ldyBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25KU1AoKTsKLQotCQkvLyBzZXQgdXAgdGhlIHZpZXdlciB3aXRoIGEgZG9jdW1lbnQgJiB2aWV3ZXIgY29uZmlnCi0JCXNldHVwVmlld2VyRm9yTmV3KCk7Ci0KLQkJc2V0dXBWaWV3ZXJQcmVmZXJlbmNlcygpOwotCX0KLQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQjZGlzcG9zZSgpCi0JICovCi0JcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLQkJc3RvcEZvbGxvd1NlbGVjdGlvbigpOwotCQlmU291cmNlVmlld2VyLnVuY29uZmlndXJlKCk7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydCNzZXRGb2N1cygpCi0JICovCi0JcHVibGljIHZvaWQgc2V0Rm9jdXMoKSB7Ci0JCWlmIChmU291cmNlVmlld2VyLmdldENvbnRyb2woKSAhPSBudWxsICYmICFmU291cmNlVmlld2VyLmdldENvbnRyb2woKS5pc0Rpc3Bvc2VkKCkpCi0JCQlmU291cmNlVmlld2VyLmdldENvbnRyb2woKS5zZXRGb2N1cygpOwotCX0KLQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVZpZXdQYXJ0I2luaXQoSVZpZXdTaXRlLCBJTWVtZW50bykKLQkgKi8KLQlwdWJsaWMgdm9pZCBpbml0KElWaWV3U2l0ZSBzaXRlLCBJTWVtZW50byBtZW1lbnRvKSB0aHJvd3MgUGFydEluaXRFeGNlcHRpb24gewotCQlzdXBlci5pbml0KHNpdGUsIG1lbWVudG8pOwotCX0KLQotCS8qKgotCSAqIFNldCB1cCBzb3VyY2Ugdmlld2VyIHdpdGggYW55IGFkZGl0aW9uYWwgcHJlZmVyZW5jZXMgaXQgc2hvdWxkIGhhdmUgRXg6Ci0JICogZm9udCwgdGFiIHdpZHRoCi0JICovCi0JcHJpdmF0ZSB2b2lkIHNldHVwVmlld2VyUHJlZmVyZW5jZXMoKSB7Ci0JCWZTb3VyY2VWaWV3ZXIuZ2V0VGV4dFdpZGdldCgpLnNldEZvbnQoSkZhY2VSZXNvdXJjZXMuZ2V0Rm9udChTU0VfRURJVE9SX0ZPTlQpKTsKLQl9Ci0KLQkvKioKLQkgKiBTZXQgdXAgc291cmNlIHZpZXdlciB3aXRoIGEgbmV3IGRvY3VtZW50ICYgY29uZmlndXJlIGl0Ci0JICovCi0JcHJpdmF0ZSB2b2lkIHNldHVwVmlld2VyRm9yTmV3KCkgewotCQlzdG9wRm9sbG93U2VsZWN0aW9uKCk7IC8vIGlmIHdhcyBmb2xsb3dpbmcgc2VsZWN0aW9uLCBzdG9wCi0KLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCi0JCUlEb2N1bWVudCBkb2MgPSBtb2RlbE1hbmFnZXIuY3JlYXRlU3RydWN0dXJlZERvY3VtZW50Rm9yKENvbnRlbnRUeXBlSWRGb3JKU1AuQ29udGVudFR5cGVJRF9KU1ApOwotCQlkb2Muc2V0KERFRkFVTFRfVklFV0VSX0NPTlRFTlRTKTsKLQotCQlmU291cmNlVmlld2VyLnNldERvY3VtZW50KGRvYyk7Ci0JCS8vIG5lZWQgdG8gcmVjb25maWd1cmUgYWZ0ZXIgc2V0IGRvY3VtZW50IGp1c3Qgc28gaGlnaGxpZ2h0ZXIgd29ya3MKLQkJZlNvdXJjZVZpZXdlci5jb25maWd1cmUoZkNvbmZpZyk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgY3VycmVudCBhY3RpdmUgdGV4dCBlZGl0b3IgaWYgcG9zc2libGUKLQkgKiAKLQkgKiBAcmV0dXJuIElUZXh0RWRpdG9yCi0JICovCi0JcHJpdmF0ZSBJVGV4dEVkaXRvciBnZXRBY3RpdmVFZGl0b3IoKSB7Ci0JCUlUZXh0RWRpdG9yIGVkaXRvciA9IG51bGw7Ci0JCUlFZGl0b3JQYXJ0IGVkaXRvclBhcnQgPSBnZXRTaXRlKCkuZ2V0V29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpOwotCQlpZiAoZWRpdG9yUGFydCBpbnN0YW5jZW9mIElUZXh0RWRpdG9yKQotCQkJZWRpdG9yID0gKElUZXh0RWRpdG9yKSBlZGl0b3JQYXJ0OwotCQlpZiAoZWRpdG9yID09IG51bGwgJiYgZWRpdG9yUGFydCAhPSBudWxsKQotCQkJZWRpdG9yID0gKElUZXh0RWRpdG9yKSBlZGl0b3JQYXJ0LmdldEFkYXB0ZXIoSVRleHRFZGl0b3IuY2xhc3MpOwotCQlyZXR1cm4gZWRpdG9yOwotCX0KLQotCS8qKgotCSAqIFNldHMgdXAgdGhlIHZpZXdlciB3aXRoIHRoZSBzYW1lIGRvY3VtZW50L2lucHV0IGFzIHRoZSBnaXZlbiBlZGl0b3IKLQkgKiAKLQkgKiBAcGFyYW0gSVRleHRFZGl0b3IKLQkgKiAgICAgICAgICAgIGVkaXRvciAtIHRoZSBlZGl0b3IgdG8gdXNlICpjYW5ub3QgdG8gYmUgbnVsbCoKLQkgKi8KLQlwcml2YXRlIHZvaWQgc2V0dXBWaWV3ZXJGb3JFZGl0b3IoSVRleHRFZGl0b3IgZWRpdG9yKSB7Ci0JCXN0b3BGb2xsb3dTZWxlY3Rpb24oKTsgLy8gaWYgd2FzIGZvbGxvd2luZyBzZWxlY3Rpb24sIHN0b3AKLQkJSURvY3VtZW50IGRvYyA9IGVkaXRvci5nZXREb2N1bWVudFByb3ZpZGVyKCkuZ2V0RG9jdW1lbnQoZWRpdG9yLmdldEVkaXRvcklucHV0KCkpOwotCQlmU291cmNlVmlld2VyLnNldERvY3VtZW50KGRvYyk7Ci0KLQkJLy8gbmVlZCB0byByZWNvbmZpZ3VyZSBhZnRlciBzZXQgZG9jdW1lbnQganVzdCBzbyBoaWdobGlnaHRlciB3b3JrcwotCQlmU291cmNlVmlld2VyLmNvbmZpZ3VyZShuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uSlNQKCkpOwotCX0KLQotCS8qKgotCSAqIEhvb2tzIHVwIHRoZSB2aWV3ZXIgdG8gZm9sbG93IHRoZSBzZWxlY3Rpb24gbWFkZSBpbiB0aGUgYWN0aXZlIGVkaXRvcgotCSAqLwotCXByaXZhdGUgdm9pZCBmb2xsb3dTZWxlY3Rpb24oKSB7Ci0JCUlUZXh0RWRpdG9yIGVkaXRvciA9IGdldEFjdGl2ZUVkaXRvcigpOwotCQlpZiAoZWRpdG9yICE9IG51bGwpIHsKLQkJCXNldHVwVmlld2VyRm9yRWRpdG9yKGVkaXRvcik7Ci0JCQlpZiAoZkhpZ2hsaWdodFJhbmdlTGlzdGVuZXIgPT0gbnVsbCkKLQkJCQlmSGlnaGxpZ2h0UmFuZ2VMaXN0ZW5lciA9IG5ldyBOb2RlUmFuZ2VTZWxlY3Rpb25MaXN0ZW5lcigpOwotCi0JCQlmQ29udGVudE91dGxpbmVQYWdlID0gKChJQ29udGVudE91dGxpbmVQYWdlKSBlZGl0b3IuZ2V0QWRhcHRlcihJQ29udGVudE91dGxpbmVQYWdlLmNsYXNzKSk7Ci0JCQlpZiAoZkNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7Ci0JCQkJZkNvbnRlbnRPdXRsaW5lUGFnZS5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoZkhpZ2hsaWdodFJhbmdlTGlzdGVuZXIpOwotCi0JCQkJaWYgKCFmQ29udGVudE91dGxpbmVQYWdlLmdldFNlbGVjdGlvbigpLmlzRW1wdHkoKSAmJiBmQ29udGVudE91dGxpbmVQYWdlLmdldFNlbGVjdGlvbigpIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKLQkJCQkJZlNvdXJjZVZpZXdlci5yZXNldFZpc2libGVSZWdpb24oKTsKLQotCQkJCQlPYmplY3RbXSBub2RlcyA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIGZDb250ZW50T3V0bGluZVBhZ2UuZ2V0U2VsZWN0aW9uKCkpLnRvQXJyYXkoKTsKLQkJCQkJSW5kZXhlZFJlZ2lvbiBzdGFydE5vZGUgPSAoSW5kZXhlZFJlZ2lvbikgbm9kZXNbMF07Ci0JCQkJCUluZGV4ZWRSZWdpb24gZW5kTm9kZSA9IChJbmRleGVkUmVnaW9uKSBub2Rlc1tub2Rlcy5sZW5ndGggLSAxXTsKLQotCQkJCQlpZiAoc3RhcnROb2RlIGluc3RhbmNlb2YgQXR0cikKLQkJCQkJCXN0YXJ0Tm9kZSA9IChJbmRleGVkUmVnaW9uKSAoKEF0dHIpIHN0YXJ0Tm9kZSkuZ2V0T3duZXJFbGVtZW50KCk7Ci0JCQkJCWlmIChlbmROb2RlIGluc3RhbmNlb2YgQXR0cikKLQkJCQkJCWVuZE5vZGUgPSAoSW5kZXhlZFJlZ2lvbikgKChBdHRyKSBlbmROb2RlKS5nZXRPd25lckVsZW1lbnQoKTsKLQotCQkJCQlpbnQgc3RhcnQgPSBzdGFydE5vZGUuZ2V0U3RhcnRPZmZzZXQoKTsKLQkJCQkJaW50IGVuZCA9IGVuZE5vZGUuZ2V0RW5kT2Zmc2V0KCk7Ci0KLQkJCQkJZlNvdXJjZVZpZXdlci5zZXRWaXNpYmxlUmVnaW9uKHN0YXJ0LCBlbmQgLSBzdGFydCk7Ci0JCQkJCWZTb3VyY2VWaWV3ZXIuc2V0U2VsZWN0ZWRSYW5nZShzdGFydCwgMCk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCi0JLyoqCi0JICogQ2Vhc2UgZm9sbG93aW5nIHRoZSBzZWxlY3Rpb24gbWFkZSBpbiB0aGUgZWRpdG9yCi0JICovCi0JcHJpdmF0ZSB2b2lkIHN0b3BGb2xsb3dTZWxlY3Rpb24oKSB7Ci0JCWlmIChmQ29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsKLQkJCWZDb250ZW50T3V0bGluZVBhZ2UucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKGZIaWdobGlnaHRSYW5nZUxpc3RlbmVyKTsKLQkJCWZTb3VyY2VWaWV3ZXIucmVzZXRWaXNpYmxlUmVnaW9uKCk7Ci0JCQlmQ29udGVudE91dGxpbmVQYWdlID0gbnVsbDsKLQkJfQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiNmFkNjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotCi08cHJvamVjdAotICAgIG5hbWU9InRlc3RzdWl0ZSIKLSAgICBkZWZhdWx0PSJydW4iCi0gICAgYmFzZWRpcj0iLiI+Ci0gICAgCi0gICAgPCEtLSBUaGUgZm9sbG93aW5nIHByb3BlcnRpZXMgc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgotICAgIDwhLS0gJHtlY2xpcHNlLWhvbWV9ICAgLS0+Ci0gICAgPCEtLSAke2J1aWxkRGlyZWN0b3J5fSAgLS0+Ci0gICAgPCEtLSAke2J1aWxkTGFiZWx9ICAgICAgICAtLT4KLQotICAgIDwhLS0gc2hvdWxkIGJlIGxpdHRsZSBuZWVkIHRvIGNoYW5nZSB3aGF0J3MgYWJvdmUgIC0tPgotICAgIAotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJwbHVnaW4tbmFtZSIKLSAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9ImNsYXNzbmFtZSIKLSAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuSlNQVUlUZXN0U3VpdGUiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9InRlc3RUeXBlIgotICAgICAgICB2YWx1ZT0idWktdGVzdCIgLz4KLQotICAgIDwhLS0gc2hvdWxkIGJlIGxpdHRsZSBuZWVkIHRvIGNoYW5nZSB3aGF0J3MgYmVsb3cgLS0+Ci0KLSAgICA8ZWNobyBtZXNzYWdlPSJiYXNlZGlyOiAke2Jhc2VkaXJ9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImVjbGlwc2UtaG9tZTogJHtlY2xpcHNlLWhvbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImJ1aWxkRGlyZWN0b3J5OiAke2J1aWxkRGlyZWN0b3J5fSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJwbHVnaW4tbmFtZTogJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iY2xhc3NuYW1lOiAke2NsYXNzbmFtZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0idGVzdFR5cGUgJHt0ZXN0VHlwZX0iIC8+Ci0KLQotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJsaWJyYXJ5LWZpbGUiCi0gICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMS4wL2xpYnJhcnkueG1sIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJ3b3Jrc3BhY2UiCi0gICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vanVuaXR3b3Jrc3BhY2VzLyR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICAKLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGFsbCBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBmb3IgLS0+Ci0gICAgPCEtLSBhbGwgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcnVuLiBJbml0aWFsaXphdGlvbiBmb3IgaW5kaXZpZHVhbCB0ZXN0cyAtLT4KLSAgICA8IS0tIHNob3VsZCBiZSBkb25lIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgc3VpdGUgdGFyZ2V0LiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9ImluaXQiPgotICAgICAgICA8dHN0YW1wIC8+Ci0gICAgICAgIDxkZWxldGU+Ci0gICAgICAgICAgICA8ZmlsZXNldAotICAgICAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9IgotICAgICAgICAgICAgICAgIGluY2x1ZGVzPSIke3BsdWdpbi1uYW1lfS4qeG1sIiAvPgotICAgICAgICA8L2RlbGV0ZT4KLSAgICAgICAgPCEtLSBtYWtlIGRpcmVjdG9yeSwgaW4gY2FzZSBwYXRoIGRvZXNuJ3QgZXhpc3QgeWV0IC0tPgotICAgICAgICA8bWtkaXIgZGlyPSIke3dvcmtzcGFjZX0iIC8+Ci0gICAgICAgIDwhLS0gIGJ1dCBkZWxldGUgdG8gbWFrZSBzdXJlIGZyZXNoIGNvbnRlbnRzLS0+Ci0gICAgICAgIDxkZWxldGUKLSAgICAgICAgICAgIGRpcj0iJHt3b3Jrc3BhY2V9IgotICAgICAgICAgICAgcXVpZXQ9InRydWUiIC8+Ci0KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgZGVmaW5lcyB0aGUgdGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4gLS0+Ci0gICAgPHRhcmdldCBuYW1lPSJzdWl0ZSI+Ci0KLSAgICAgICAgPGFudAotICAgICAgICAgICAgdGFyZ2V0PSIke3Rlc3RUeXBlfSIKLSAgICAgICAgICAgIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLSAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImRhdGEtZGlyIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3dvcmtzcGFjZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJwbHVnaW4tbmFtZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJjbGFzc25hbWUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7Y2xhc3NuYW1lfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9InBsdWdpbi1wYXRoIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy8ke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgPC9hbnQ+Ci0KLSAgICAgICAgPGNvcHkKLSAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIKLSAgICAgICAgICAgIGZpbGU9IiR7d29ya3NwYWNlfS8ubWV0YWRhdGEvLmxvZyIKLSAgICAgICAgICAgIHRvZmlsZT0iJHtidWlsZERpcmVjdG9yeX0vJHtidWlsZExhYmVsfS90ZXN0UmVzdWx0cy9jb25zb2xlbG9ncy8ke3BsdWdpbi1uYW1lfS5jb25zb2xlbG9nLnR4dCIgLz4KLQotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBjb2RlIHRvIGNsZWFudXAgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgYWZ0ZXIgLS0+Ci0gICAgPCEtLSBhZnRlciBhbGwgb2YgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4uIFlvdSBjYW4gdXNlIHRoaXMgdGFyZ2V0IHRvIC0tPgotICAgIDwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9ImNsZWFudXAiPgotICAgICAgICA8IS0tIHVzdWFsbHkgbm8gbmVlZCB0byBkZWxldGUgd29ya3NwYWNlIHVudGlsIG5leHQgcnVuLCBhbmQgbGVhdmluZyBpdCBhbGxvd3MgaW5zcGVjdGlvbiAtLT4KLSAgICAgICAgPCEtLSA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIgLz4gLS0+Ci0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+Ci0gICAgPCEtLSBhZnRlciBhbGwgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4gc2hvdWxkIGdvIGhlcmUuIC0tPgotICAgIDx0YXJnZXQKLSAgICAgICAgbmFtZT0icnVuIgotICAgICAgICBkZXBlbmRzPSJpbml0LHN1aXRlLGNsZWFudXAiPgotICAgICAgICA8YW50Ci0gICAgICAgICAgICB0YXJnZXQ9ImNvbGxlY3QiCi0gICAgICAgICAgICBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iCi0gICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJpbmNsdWRlcyIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0uKnhtbCIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9Im91dHB1dC1maWxlIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfS54bWwiIC8+Ci0gICAgICAgIDwvYW50PgotICAgIDwvdGFyZ2V0PgotCi08L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMuemlwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMuemlwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjQ4MGM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzLnppcAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzLzExNjUyMy9zdHJ1dHMtbG9naWMudGxkIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvMTE2NTIzL3N0cnV0cy1sb2dpYy50bGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5NzU5NzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvMTE2NTIzL3N0cnV0cy1sb2dpYy50bGQKKysrIC9kZXYvbnVsbApAQCAtMSw2NDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLQotCi0KLQotCi0KLTwhRE9DVFlQRSB0YWdsaWIgUFVCTElDICItLy9TdW4gTWljcm9zeXN0ZW1zLCBJbmMuLy9EVEQgSlNQIFRhZyBMaWJyYXJ5IDEuMS8vRU4iICJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvZHRkcy93ZWItanNwdGFnbGlicmFyeV8xXzEuZHRkIj4KLTx0YWdsaWI+Ci08dGxpYnZlcnNpb24+MS4wPC90bGlidmVyc2lvbj4KLTxqc3B2ZXJzaW9uPjEuMTwvanNwdmVyc2lvbj4KLTxzaG9ydG5hbWU+bG9naWM8L3Nob3J0bmFtZT4KLTx1cmk+aHR0cDovL2pha2FydGEuYXBhY2hlLm9yZy9zdHJ1dHMvdGFncy1sb2dpYzwvdXJpPgotPHRhZz4KLTxuYW1lPmVtcHR5PC9uYW1lPgotPHRhZ2NsYXNzPm9yZy5hcGFjaGUuc3RydXRzLnRhZ2xpYi5sb2dpYy5FbXB0eVRhZzwvdGFnY2xhc3M+Ci08Ym9keWNvbnRlbnQ+SlNQPC9ib2R5Y29udGVudD4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5uYW1lPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnByb3BlcnR5PC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnNjb3BlPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPC90YWc+Ci08dGFnPgotPG5hbWU+ZXF1YWw8L25hbWU+Ci08dGFnY2xhc3M+b3JnLmFwYWNoZS5zdHJ1dHMudGFnbGliLmxvZ2ljLkVxdWFsVGFnPC90YWdjbGFzcz4KLTxib2R5Y29udGVudD5KU1A8L2JvZHljb250ZW50PgotPGF0dHJpYnV0ZT4KLTxuYW1lPmNvb2tpZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5oZWFkZXI8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+bmFtZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5wYXJhbWV0ZXI8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+cHJvcGVydHk8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+c2NvcGU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+dmFsdWU8L25hbWU+Ci08cmVxdWlyZWQ+dHJ1ZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTwvdGFnPgotPHRhZz4KLTxuYW1lPmZvcndhcmQ8L25hbWU+Ci08dGFnY2xhc3M+b3JnLmFwYWNoZS5zdHJ1dHMudGFnbGliLmxvZ2ljLkZvcndhcmRUYWc8L3RhZ2NsYXNzPgotPGJvZHljb250ZW50PmVtcHR5PC9ib2R5Y29udGVudD4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5uYW1lPC9uYW1lPgotPHJlcXVpcmVkPnRydWU8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08L3RhZz4KLTx0YWc+Ci08bmFtZT5ncmVhdGVyRXF1YWw8L25hbWU+Ci08dGFnY2xhc3M+b3JnLmFwYWNoZS5zdHJ1dHMudGFnbGliLmxvZ2ljLkdyZWF0ZXJFcXVhbFRhZzwvdGFnY2xhc3M+Ci08Ym9keWNvbnRlbnQ+SlNQPC9ib2R5Y29udGVudD4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5jb29raWU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+aGVhZGVyPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPm5hbWU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+cGFyYW1ldGVyPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnByb3BlcnR5PC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnNjb3BlPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnZhbHVlPC9uYW1lPgotPHJlcXVpcmVkPnRydWU8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08L3RhZz4KLTx0YWc+Ci08bmFtZT5ncmVhdGVyVGhhbjwvbmFtZT4KLTx0YWdjbGFzcz5vcmcuYXBhY2hlLnN0cnV0cy50YWdsaWIubG9naWMuR3JlYXRlclRoYW5UYWc8L3RhZ2NsYXNzPgotPGJvZHljb250ZW50PkpTUDwvYm9keWNvbnRlbnQ+Ci08YXR0cmlidXRlPgotPG5hbWU+Y29va2llPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPmhlYWRlcjwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5uYW1lPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnBhcmFtZXRlcjwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5wcm9wZXJ0eTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5zY29wZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT52YWx1ZTwvbmFtZT4KLTxyZXF1aXJlZD50cnVlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPC90YWc+Ci08dGFnPgotPG5hbWU+aXRlcmF0ZTwvbmFtZT4KLTx0YWdjbGFzcz5vcmcuYXBhY2hlLnN0cnV0cy50YWdsaWIubG9naWMuSXRlcmF0ZVRhZzwvdGFnY2xhc3M+Ci08dGVpY2xhc3M+b3JnLmFwYWNoZS5zdHJ1dHMudGFnbGliLmxvZ2ljLkl0ZXJhdGVUZWk8L3RlaWNsYXNzPgotPGJvZHljb250ZW50PkpTUDwvYm9keWNvbnRlbnQ+Ci08YXR0cmlidXRlPgotPG5hbWU+Y29sbGVjdGlvbjwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5pZDwvbmFtZT4KLTxyZXF1aXJlZD50cnVlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT5mYWxzZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5pbmRleElkPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT5mYWxzZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5sZW5ndGg8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+bmFtZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5vZmZzZXQ8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+cHJvcGVydHk8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+c2NvcGU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+dHlwZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTwvdGFnPgotPHRhZz4KLTxuYW1lPmxlc3NFcXVhbDwvbmFtZT4KLTx0YWdjbGFzcz5vcmcuYXBhY2hlLnN0cnV0cy50YWdsaWIubG9naWMuTGVzc0VxdWFsVGFnPC90YWdjbGFzcz4KLTxib2R5Y29udGVudD5KU1A8L2JvZHljb250ZW50PgotPGF0dHJpYnV0ZT4KLTxuYW1lPmNvb2tpZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5oZWFkZXI8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+bmFtZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5wYXJhbWV0ZXI8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+cHJvcGVydHk8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+c2NvcGU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+dmFsdWU8L25hbWU+Ci08cmVxdWlyZWQ+dHJ1ZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTwvdGFnPgotPHRhZz4KLTxuYW1lPmxlc3NUaGFuPC9uYW1lPgotPHRhZ2NsYXNzPm9yZy5hcGFjaGUuc3RydXRzLnRhZ2xpYi5sb2dpYy5MZXNzVGhhblRhZzwvdGFnY2xhc3M+Ci08Ym9keWNvbnRlbnQ+SlNQPC9ib2R5Y29udGVudD4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5jb29raWU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+aGVhZGVyPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPm5hbWU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+cGFyYW1ldGVyPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnByb3BlcnR5PC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnNjb3BlPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnZhbHVlPC9uYW1lPgotPHJlcXVpcmVkPnRydWU8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08L3RhZz4KLTx0YWc+Ci08bmFtZT5tYXRjaDwvbmFtZT4KLTx0YWdjbGFzcz5vcmcuYXBhY2hlLnN0cnV0cy50YWdsaWIubG9naWMuTWF0Y2hUYWc8L3RhZ2NsYXNzPgotPGJvZHljb250ZW50PkpTUDwvYm9keWNvbnRlbnQ+Ci08YXR0cmlidXRlPgotPG5hbWU+Y29va2llPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPmhlYWRlcjwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5sb2NhdGlvbjwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5uYW1lPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnBhcmFtZXRlcjwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5wcm9wZXJ0eTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5zY29wZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT52YWx1ZTwvbmFtZT4KLTxyZXF1aXJlZD50cnVlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPC90YWc+Ci08dGFnPgotPG5hbWU+bWVzc2FnZXNOb3RQcmVzZW50PC9uYW1lPgotPHRhZ2NsYXNzPm9yZy5hcGFjaGUuc3RydXRzLnRhZ2xpYi5sb2dpYy5NZXNzYWdlc05vdFByZXNlbnRUYWc8L3RhZ2NsYXNzPgotPGJvZHljb250ZW50PkpTUDwvYm9keWNvbnRlbnQ+Ci08YXR0cmlidXRlPgotPG5hbWU+bmFtZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5wcm9wZXJ0eTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5tZXNzYWdlPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPC90YWc+Ci08dGFnPgotPG5hbWU+bWVzc2FnZXNQcmVzZW50PC9uYW1lPgotPHRhZ2NsYXNzPm9yZy5hcGFjaGUuc3RydXRzLnRhZ2xpYi5sb2dpYy5NZXNzYWdlc1ByZXNlbnRUYWc8L3RhZ2NsYXNzPgotPGJvZHljb250ZW50PkpTUDwvYm9keWNvbnRlbnQ+Ci08YXR0cmlidXRlPgotPG5hbWU+bmFtZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5wcm9wZXJ0eTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5tZXNzYWdlPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPC90YWc+Ci08dGFnPgotPG5hbWU+bm90RW1wdHk8L25hbWU+Ci08dGFnY2xhc3M+b3JnLmFwYWNoZS5zdHJ1dHMudGFnbGliLmxvZ2ljLk5vdEVtcHR5VGFnPC90YWdjbGFzcz4KLTxib2R5Y29udGVudD5KU1A8L2JvZHljb250ZW50PgotPGF0dHJpYnV0ZT4KLTxuYW1lPm5hbWU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+cHJvcGVydHk8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+c2NvcGU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08L3RhZz4KLTx0YWc+Ci08bmFtZT5ub3RFcXVhbDwvbmFtZT4KLTx0YWdjbGFzcz5vcmcuYXBhY2hlLnN0cnV0cy50YWdsaWIubG9naWMuTm90RXF1YWxUYWc8L3RhZ2NsYXNzPgotPGJvZHljb250ZW50PkpTUDwvYm9keWNvbnRlbnQ+Ci08YXR0cmlidXRlPgotPG5hbWU+Y29va2llPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPmhlYWRlcjwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5uYW1lPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnBhcmFtZXRlcjwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5wcm9wZXJ0eTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5zY29wZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT52YWx1ZTwvbmFtZT4KLTxyZXF1aXJlZD50cnVlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPC90YWc+Ci08dGFnPgotPG5hbWU+bm90TWF0Y2g8L25hbWU+Ci08dGFnY2xhc3M+b3JnLmFwYWNoZS5zdHJ1dHMudGFnbGliLmxvZ2ljLk5vdE1hdGNoVGFnPC90YWdjbGFzcz4KLTxib2R5Y29udGVudD5KU1A8L2JvZHljb250ZW50PgotPGF0dHJpYnV0ZT4KLTxuYW1lPmNvb2tpZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5oZWFkZXI8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+bG9jYXRpb248L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+bmFtZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5wYXJhbWV0ZXI8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+cHJvcGVydHk8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+c2NvcGU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+dmFsdWU8L25hbWU+Ci08cmVxdWlyZWQ+dHJ1ZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTwvdGFnPgotPHRhZz4KLTxuYW1lPm5vdFByZXNlbnQ8L25hbWU+Ci08dGFnY2xhc3M+b3JnLmFwYWNoZS5zdHJ1dHMudGFnbGliLmxvZ2ljLk5vdFByZXNlbnRUYWc8L3RhZ2NsYXNzPgotPGJvZHljb250ZW50PkpTUDwvYm9keWNvbnRlbnQ+Ci08YXR0cmlidXRlPgotPG5hbWU+Y29va2llPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPmhlYWRlcjwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5uYW1lPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnBhcmFtZXRlcjwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5wcm9wZXJ0eTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5yb2xlPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnNjb3BlPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnVzZXI8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08L3RhZz4KLTx0YWc+Ci08bmFtZT5wcmVzZW50PC9uYW1lPgotPHRhZ2NsYXNzPm9yZy5hcGFjaGUuc3RydXRzLnRhZ2xpYi5sb2dpYy5QcmVzZW50VGFnPC90YWdjbGFzcz4KLTxib2R5Y29udGVudD5KU1A8L2JvZHljb250ZW50PgotPGF0dHJpYnV0ZT4KLTxuYW1lPmNvb2tpZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5oZWFkZXI8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+bmFtZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5wYXJhbWV0ZXI8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+cHJvcGVydHk8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+cm9sZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5zY29wZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT51c2VyPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPC90YWc+Ci08dGFnPgotPG5hbWU+cmVkaXJlY3Q8L25hbWU+Ci08dGFnY2xhc3M+b3JnLmFwYWNoZS5zdHJ1dHMudGFnbGliLmxvZ2ljLlJlZGlyZWN0VGFnPC90YWdjbGFzcz4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5hbmNob3I8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+Zm9yd2FyZDwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5ocmVmPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPm5hbWU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+cGFnZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5wYXJhbUlkPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnBhcmFtTmFtZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5wYXJhbVByb3BlcnR5PC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnBhcmFtU2NvcGU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+cHJvcGVydHk8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+c2NvcGU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+dHJhbnNhY3Rpb248L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08L3RhZz4KLTwvdGFnbGliPgotCi0KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvMTE2NTIzL3N0cnV0cy5qYXIgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy8xMTY1MjMvc3RydXRzLmphcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGIzMmY5Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy8xMTY1MjMvc3RydXRzLmphcgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzLzE4OTkyNC9pbmNsdWRlci5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy8xODk5MjQvaW5jbHVkZXIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZjRjOWQ1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzLzE4OTkyNC9pbmNsdWRlci5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi08JUBpbmNsdWRlIGZpbGU9InRlc3QxODk5MjQuanNwIiAlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzLzE4OTkyNC90ZXN0MTg5OTI0LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzLzE4OTkyNC90ZXN0MTg5OTI0LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjllMzJkMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy8xODk5MjQvdGVzdDE4OTkyNC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLQotPCVAcGFnZSBzZXNzaW9uID0gImZhbHNlIiAlPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0xLTEvd21sXzFfMS5kdGQgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTEtMS93bWxfMV8xLmR0ZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzk0NTI2Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTEtMS93bWxfMV8xLmR0ZAorKysgL2Rldi9udWxsCkBAIC0xLDM1MyArMCwwIEBACi08IS0tDQotV2lyZWxlc3MgTWFya3VwIExhbmd1YWdlIChXTUwpIERvY3VtZW50IFR5cGUgRGVmaW5pdGlvbi4NCi0NCi1Db3B5cmlnaHQgV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiwgMTk5OCwxOTk5Lg0KLSAgICAgICAgICAgICAgICAgICAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgDQotDQotV01MIGlzIGFuIFhNTCBsYW5ndWFnZS4gIFR5cGljYWwgdXNhZ2U6DQotICAgPD94bWwgdmVyc2lvbj0iMS4wIj8+DQotICAgPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iDQotICAgICAgICAgICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPg0KLSAgIDx3bWw+DQotICAgLi4uDQotICAgPC93bWw+DQotDQotVGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlIGFyZSBhdmFpbGFibGUgZnJvbSB0aGUgV2lyZWxlc3MgDQotQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiB3ZWIgc2l0ZSBhdA0KLWh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL2RvY3MvY29weXJpZ2h0Lmh0bS4NCi0tLT4NCi0NCi08IUVOVElUWSAlIGxlbmd0aCAgIkNEQVRBIj4gICAgPCEtLSBbMC05XSsgZm9yIHBpeGVscyBvciBbMC05XSsiJSIgZm9yDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyY2VudGFnZSBsZW5ndGggLS0+DQotPCFFTlRJVFkgJSB2ZGF0YSAgICJDREFUQSI+ICAgIDwhLS0gYXR0cmlidXRlIHZhbHVlIHBvc3NpYmx5IGNvbnRhaW5pbmcNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZSByZWZlcmVuY2VzIC0tPg0KLTwhRU5USVRZICUgSFJFRiAgICAiJXZkYXRhOyI+ICA8IS0tIFVSSSwgVVJMIG9yIFVSTiBkZXNpZ25hdGluZyBhIGh5cGVydGV4dA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuIE1heSBjb250YWluIHZhcmlhYmxlIHJlZmVyZW5jZXMgLS0+DQotPCFFTlRJVFkgJSBib29sZWFuCSIodHJ1ZXxmYWxzZSkiPg0KLTwhRU5USVRZICUgbnVtYmVyICAiTk1UT0tFTiI+ICA8IS0tIGEgbnVtYmVyLCB3aXRoIGZvcm1hdCBbMC05XSsgLS0+DQotPCFFTlRJVFkgJSBjb3JlYXR0cnMgICJpZCAgICBJRCAgICAgI0lNUExJRUQgDQotICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBDREFUQSAgI0lNUExJRUQiPg0KLQ0KLTwhRU5USVRZICUgZW1waCAgICAiZW0gfCBzdHJvbmcgfCBiIHwgaSB8IHUgfCBiaWcgfCBzbWFsbCI+DQotPCFFTlRJVFkgJSBsYXlvdXQgICJiciI+DQotDQotPCFFTlRJVFkgJSB0ZXh0ICAgICAiI1BDREFUQSB8ICVlbXBoOyI+DQotDQotPCEtLSBmbG93IGNvdmVycyAiY2FyZC1sZXZlbCIgZWxlbWVudHMsIHN1Y2ggYXMgdGV4dCBhbmQgaW1hZ2VzIC0tPg0KLTwhRU5USVRZICUgZmxvdyAgICAgIiV0ZXh0OyB8ICVsYXlvdXQ7IHwgaW1nIHwgYW5jaG9yIHwgYSB8IHRhYmxlIj4NCi0NCi08IS0tIFRhc2sgdHlwZXMgLS0+DQotPCFFTlRJVFkgJSB0YXNrICAgImdvIHwgcHJldiB8IG5vb3AgfCByZWZyZXNoIj4NCi0NCi08IS0tIE5hdmlnYXRpb24gYW5kIGV2ZW50IGVsZW1lbnRzIC0tPg0KLTwhRU5USVRZICUgbmF2ZWxtdHMgImRvIHwgb25ldmVudCI+DQotDQotPCEtLT09PT09PT09PT09PT09PT0gRGVja3MgYW5kIENhcmRzID09PT09PT09PT09PT09PT0tLT4NCi0NCi08IUVMRU1FTlQgd21sICggaGVhZD8sIHRlbXBsYXRlPywgY2FyZCsgKT4NCi08IUFUVExJU1Qgd21sDQotICB4bWw6bGFuZyAgICAgICAgTk1UT0tFTiAgICAgICAgI0lNUExJRUQNCi0gICVjb3JlYXR0cnM7DQotICA+DQotDQotPCEtLSBjYXJkIGludHJpbnNpYyBldmVudHMgLS0+DQotPCFFTlRJVFkgJSBjYXJkZXYNCi0gIm9uZW50ZXJmb3J3YXJkICAlSFJFRjsgICAgICAgICAgI0lNUExJRUQNCi0gIG9uZW50ZXJiYWNrd2FyZCAlSFJFRjsgICAgICAgICAgI0lNUExJRUQNCi0gIG9udGltZXIgICAgICAgICAlSFJFRjsgICAgICAgICAgI0lNUExJRUQiDQotICA+DQotDQotPCEtLSBjYXJkIGZpZWxkIHR5cGVzIC0tPg0KLTwhRU5USVRZICUgZmllbGRzICAiJWZsb3c7IHwgaW5wdXQgfCBzZWxlY3QgfCBmaWVsZHNldCI+DQotDQotPCFFTEVNRU5UIGNhcmQgKG9uZXZlbnQqLCB0aW1lcj8sIChkbyB8IHApKik+DQotPCFBVFRMSVNUIGNhcmQNCi0gIHRpdGxlICAgICAgICAgICAldmRhdGE7ICAgICAgICNJTVBMSUVEDQotICBuZXdjb250ZXh0ICAgICAgJWJvb2xlYW47ICAgICAiZmFsc2UiDQotICBvcmRlcmVkICAgICAgICAgJWJvb2xlYW47ICAgICAidHJ1ZSINCi0gIHhtbDpsYW5nICAgICAgICBOTVRPS0VOICAgICAgICNJTVBMSUVEDQotICAlY2FyZGV2Ow0KLSAgJWNvcmVhdHRyczsNCi0gID4NCi0NCi08IS0tPT09PT09PT09PT09PT09PSBFdmVudCBCaW5kaW5ncyA9PT09PT09PT09PT09PT09LS0+DQotDQotPCFFTEVNRU5UIGRvICgldGFzazspPg0KLTwhQVRUTElTVCBkbw0KLSAgdHlwZSAgICAgICAgIENEQVRBICAgICAgICNSRVFVSVJFRA0KLSAgbGFiZWwgICAgICAgICV2ZGF0YTsgICAgICNJTVBMSUVEDQotICBuYW1lICAgICAgICAgTk1UT0tFTiAgICAgI0lNUExJRUQNCi0gIG9wdGlvbmFsICAgICAlYm9vbGVhbjsgICAiZmFsc2UiDQotICB4bWw6bGFuZyAgICAgTk1UT0tFTiAgICAgI0lNUExJRUQNCi0gICVjb3JlYXR0cnM7DQotICA+DQotDQotPCFFTEVNRU5UIG9uZXZlbnQgKCV0YXNrOyk+DQotPCFBVFRMSVNUIG9uZXZlbnQNCi0gIHR5cGUgICAgICAgICBDREFUQSAgICAgICAjUkVRVUlSRUQNCi0gICVjb3JlYXR0cnM7DQotICA+DQotDQotPCEtLT09PT09PT09PT09PT09PT0gRGVjay1sZXZlbCBkZWNsYXJhdGlvbnMgPT09PT09PT09PT09PT09PS0tPg0KLQ0KLTwhRUxFTUVOVCBoZWFkICggYWNjZXNzIHwgbWV0YSApKz4NCi08IUFUVExJU1QgaGVhZA0KLSAgJWNvcmVhdHRyczsNCi0gID4NCi0NCi08IUVMRU1FTlQgdGVtcGxhdGUgKCVuYXZlbG10czspKj4NCi08IUFUVExJU1QgdGVtcGxhdGUNCi0gICVjYXJkZXY7DQotICAlY29yZWF0dHJzOw0KLSAgPg0KLQ0KLTwhRUxFTUVOVCBhY2Nlc3MgRU1QVFk+DQotPCFBVFRMSVNUIGFjY2Vzcw0KLSAgZG9tYWluICAgICAgIENEQVRBICAgICAgICNJTVBMSUVEDQotICBwYXRoICAgICAgICAgQ0RBVEEgICAgICAgI0lNUExJRUQNCi0gICVjb3JlYXR0cnM7DQotICA+DQotDQotPCFFTEVNRU5UIG1ldGEgRU1QVFk+DQotPCFBVFRMSVNUIG1ldGENCi0gIGh0dHAtZXF1aXYgICAgIENEQVRBICAgICAgI0lNUExJRUQNCi0gIG5hbWUgICAgICAgICAgIENEQVRBICAgICAgI0lNUExJRUQNCi0gIGZvcnVhICAgICAgICAgICVib29sZWFuOyAgI0lNUExJRUQNCi0gIGNvbnRlbnQgICAgICAgIENEQVRBICAgICAgI1JFUVVJUkVEDQotICBzY2hlbWUgICAgICAgICBDREFUQSAgICAgICNJTVBMSUVEDQotICAlY29yZWF0dHJzOw0KLSAgPg0KLQ0KLTwhLS09PT09PT09PT09PT09PT09IFRhc2tzID09PT09PT09PT09PT09PT0tLT4NCi0NCi08IUVMRU1FTlQgZ28gKHBvc3RmaWVsZCB8IHNldHZhcikqPg0KLTwhQVRUTElTVCBnbw0KLSAgaHJlZiAgICAgICAgICAgICVIUkVGOyAgICAgICAgICAgI1JFUVVJUkVEDQotICBzZW5kcmVmZXJlciAgICAgJWJvb2xlYW47ICAgICAgICJmYWxzZSINCi0gIG1ldGhvZCAgICAgICAgICAocG9zdHxnZXQpICAgICAgImdldCINCi0gIGFjY2VwdC1jaGFyc2V0ICBDREFUQSAgICAgICAgICAgI0lNUExJRUQNCi0gICVjb3JlYXR0cnM7DQotICA+DQotDQotPCFFTEVNRU5UIHByZXYgKHNldHZhcikqPg0KLTwhQVRUTElTVCBwcmV2DQotICAlY29yZWF0dHJzOw0KLSAgPg0KLQ0KLTwhRUxFTUVOVCByZWZyZXNoIChzZXR2YXIpKj4NCi08IUFUVExJU1QgcmVmcmVzaA0KLSAgJWNvcmVhdHRyczsNCi0gID4NCi0NCi08IUVMRU1FTlQgbm9vcCBFTVBUWT4NCi08IUFUVExJU1Qgbm9vcA0KLSAgJWNvcmVhdHRyczsNCi0gID4NCi0NCi08IS0tPT09PT09PT09PT09PT09PSBwb3N0ZmllbGQgPT09PT09PT09PT09PT09PS0tPg0KLSANCi08IUVMRU1FTlQgcG9zdGZpZWxkIEVNUFRZPg0KLTwhQVRUTElTVCBwb3N0ZmllbGQNCi0gIG5hbWUgICAgICAgICAldmRhdGE7ICAgICAgICAgICAjUkVRVUlSRUQNCi0gIHZhbHVlICAgICAgICAldmRhdGE7ICAgICAgICAgICAjUkVRVUlSRUQNCi0gICVjb3JlYXR0cnM7DQotICA+DQotDQotPCEtLT09PT09PT09PT09PT09PT0gdmFyaWFibGVzID09PT09PT09PT09PT09PT0tLT4NCi0NCi08IUVMRU1FTlQgc2V0dmFyIEVNUFRZPg0KLTwhQVRUTElTVCBzZXR2YXINCi0gIG5hbWUgICAgICAgICAldmRhdGE7ICAgICAgICAgICAjUkVRVUlSRUQNCi0gIHZhbHVlICAgICAgICAldmRhdGE7ICAgICAgICAgICAjUkVRVUlSRUQNCi0gICVjb3JlYXR0cnM7DQotICA+DQotDQotPCEtLT09PT09PT09PT09PT09PT0gQ2FyZCBGaWVsZHMgPT09PT09PT09PT09PT09PS0tPg0KLQ0KLTwhRUxFTUVOVCBzZWxlY3QgKG9wdGdyb3VwfG9wdGlvbikrPg0KLTwhQVRUTElTVCBzZWxlY3QNCi0gIHRpdGxlICAgICAgICAldmRhdGE7ICAgICAgICAgICAjSU1QTElFRA0KLSAgbmFtZSAgICAgICAgIE5NVE9LRU4gICAgICAgICAgICNJTVBMSUVEDQotICB2YWx1ZSAgICAgICAgJXZkYXRhOyAgICAgICAgICAgI0lNUExJRUQNCi0gIGluYW1lICAgICAgICBOTVRPS0VOICAgICAgICAgICAjSU1QTElFRA0KLSAgaXZhbHVlICAgICAgICV2ZGF0YTsgICAgICAgICAgICNJTVBMSUVEDQotICBtdWx0aXBsZSAgICAgJWJvb2xlYW47ICAgICAgICAgImZhbHNlIg0KLSAgdGFiaW5kZXggICAgICVudW1iZXI7ICAgICAgICAgICNJTVBMSUVEDQotICB4bWw6bGFuZyAgICAgTk1UT0tFTiAgICAgICAgICAgI0lNUExJRUQNCi0gICVjb3JlYXR0cnM7DQotICA+DQotDQotPCFFTEVNRU5UIG9wdGdyb3VwIChvcHRncm91cHxvcHRpb24pKyA+DQotPCFBVFRMSVNUIG9wdGdyb3VwDQotICB0aXRsZSAgICAgICV2ZGF0YTsgICAgI0lNUExJRUQNCi0gIHhtbDpsYW5nICAgTk1UT0tFTiAgICAjSU1QTElFRA0KLSAgJWNvcmVhdHRyczsNCi0gID4NCi0NCi08IUVMRU1FTlQgb3B0aW9uICgjUENEQVRBIHwgb25ldmVudCkqPg0KLTwhQVRUTElTVCBvcHRpb24NCi0gIHZhbHVlICAgICAgJXZkYXRhOyAgICAjSU1QTElFRA0KLSAgdGl0bGUgICAgICAldmRhdGE7ICAgICNJTVBMSUVEDQotICBvbnBpY2sgICAgICVIUkVGOyAgICAgI0lNUExJRUQNCi0gIHhtbDpsYW5nICAgTk1UT0tFTiAgICAjSU1QTElFRA0KLSAgJWNvcmVhdHRyczsNCi0gID4NCi0NCi08IUVMRU1FTlQgaW5wdXQgRU1QVFk+DQotPCFBVFRMSVNUIGlucHV0DQotICBuYW1lICAgICAgIE5NVE9LRU4gICAgICAgICAgICNSRVFVSVJFRA0KLSAgdHlwZSAgICAgICAodGV4dHxwYXNzd29yZCkgICAidGV4dCINCi0gIHZhbHVlICAgICAgJXZkYXRhOyAgICAgICAgICAgI0lNUExJRUQNCi0gIGZvcm1hdCAgICAgQ0RBVEEgICAgICAgICAgICAgI0lNUExJRUQNCi0gIGVtcHR5b2sgICAgJWJvb2xlYW47ICAgICAgICAgImZhbHNlIg0KLSAgc2l6ZSAgICAgICAlbnVtYmVyOyAgICAgICAgICAjSU1QTElFRA0KLSAgbWF4bGVuZ3RoICAlbnVtYmVyOyAgICAgICAgICAjSU1QTElFRA0KLSAgdGFiaW5kZXggICAlbnVtYmVyOyAgICAgICAgICAjSU1QTElFRA0KLSAgdGl0bGUgICAgICAldmRhdGE7ICAgICAgICAgICAjSU1QTElFRA0KLSAgeG1sOmxhbmcgICBOTVRPS0VOICAgICAgICAgICAjSU1QTElFRA0KLSAgJWNvcmVhdHRyczsNCi0gID4NCi0NCi08IUVMRU1FTlQgZmllbGRzZXQgKCVmaWVsZHM7IHwgZG8pKiA+DQotPCFBVFRMSVNUIGZpZWxkc2V0DQotICB0aXRsZSAgICAgICAgICAgJXZkYXRhOyAgICAgICNJTVBMSUVEDQotICB4bWw6bGFuZyAgICAgICAgTk1UT0tFTiAgICAgICNJTVBMSUVEDQotICAlY29yZWF0dHJzOw0KLSAgPg0KLQ0KLTwhRUxFTUVOVCB0aW1lciBFTVBUWT4NCi08IUFUVExJU1QgdGltZXINCi0gIG5hbWUgICAgICAgTk1UT0tFTiAgICAgICAgICAgI0lNUExJRUQNCi0gIHZhbHVlICAgICAgJXZkYXRhOyAgICAgICAgICAgI1JFUVVJUkVEDQotICAlY29yZWF0dHJzOw0KLSAgPg0KLQ0KLTwhLS09PT09PT09PT09PT09PT09IEltYWdlcyA9PT09PT09PT09PT09PT09LS0+DQotDQotPCFFTlRJVFkgJSBJQWxpZ24gIih0b3B8bWlkZGxlfGJvdHRvbSkiID4NCi0NCi08IUVMRU1FTlQgaW1nIEVNUFRZPg0KLTwhQVRUTElTVCBpbWcNCi0gIGFsdCAgICAgICAgJXZkYXRhOyAgICAgICNSRVFVSVJFRA0KLSAgc3JjICAgICAgICAlSFJFRjsgICAgICAgI1JFUVVJUkVEDQotICBsb2NhbHNyYyAgICV2ZGF0YTsgICAgICAjSU1QTElFRA0KLSAgdnNwYWNlICAgICAlbGVuZ3RoOyAgICAgIjAiDQotICBoc3BhY2UgICAgICVsZW5ndGg7ICAgICAiMCINCi0gIGFsaWduICAgICAgJUlBbGlnbjsgICAgICJib3R0b20iDQotICBoZWlnaHQgICAgICVsZW5ndGg7ICAgICAjSU1QTElFRA0KLSAgd2lkdGggICAgICAlbGVuZ3RoOyAgICAgI0lNUExJRUQNCi0gIHhtbDpsYW5nICAgTk1UT0tFTiAgICAgICNJTVBMSUVEDQotICAlY29yZWF0dHJzOw0KLSAgPg0KLQ0KLTwhLS09PT09PT09PT09PT09PT09IEFuY2hvciA9PT09PT09PT09PT09PT09LS0+DQotDQotPCFFTEVNRU5UIGFuY2hvciAoICNQQ0RBVEEgfCBiciB8IGltZyB8IGdvIHwgcHJldiB8IHJlZnJlc2ggKSo+DQotPCFBVFRMSVNUIGFuY2hvcg0KLSAgdGl0bGUgICAgICAgICV2ZGF0YTsgICAgICAjSU1QTElFRA0KLSAgeG1sOmxhbmcgICAgIE5NVE9LRU4gICAgICAjSU1QTElFRA0KLSAgJWNvcmVhdHRyczsNCi0gID4NCi0NCi08IUVMRU1FTlQgYSAoICNQQ0RBVEEgfCBiciB8IGltZyApKj4NCi08IUFUVExJU1QgYQ0KLSAgaHJlZiAgICAgICAgICVIUkVGOyAgICAgICAjUkVRVUlSRUQNCi0gIHRpdGxlICAgICAgICAldmRhdGE7ICAgICAgI0lNUExJRUQNCi0gIHhtbDpsYW5nICAgICBOTVRPS0VOICAgICAgI0lNUExJRUQNCi0gICVjb3JlYXR0cnM7DQotICA+DQotDQotPCEtLT09PT09PT09PT09PT09PT0gVGFibGVzID09PT09PT09PT09PT09PT0tLT4NCi0NCi08IUVMRU1FTlQgdGFibGUgKHRyKSs+DQotPCFBVFRMSVNUIHRhYmxlDQotICB0aXRsZSAgICAgICAldmRhdGE7ICAgICNJTVBMSUVEDQotICBhbGlnbiAgICAgICBDREFUQSAgICAgICNJTVBMSUVEDQotICBjb2x1bW5zICAgICAlbnVtYmVyOyAgICNSRVFVSVJFRA0KLSAgeG1sOmxhbmcgICAgTk1UT0tFTiAgICAjSU1QTElFRA0KLSAgJWNvcmVhdHRyczsNCi0gID4NCi0NCi08IUVMRU1FTlQgdHIgKHRkKSs+DQotPCFBVFRMSVNUIHRyDQotICAlY29yZWF0dHJzOw0KLSAgPg0KLQ0KLTwhRUxFTUVOVCB0ZCAoICV0ZXh0OyB8ICVsYXlvdXQ7IHwgaW1nIHwgYW5jaG9yIHwgYSApKj4NCi08IUFUVExJU1QgdGQNCi0gIHhtbDpsYW5nICAgICAgICBOTVRPS0VOICAgICAgICNJTVBMSUVEDQotICAlY29yZWF0dHJzOw0KLSAgPg0KLQ0KLTwhLS09PT09PT09PT09PT09PT09IFRleHQgbGF5b3V0IGFuZCBsaW5lIGJyZWFrcyA9PT09PT09PT09PT09PT09LS0+DQotDQotPCFFTEVNRU5UIGVtICAgICAoJWZsb3c7KSo+DQotPCFBVFRMSVNUIGVtDQotICB4bWw6bGFuZyAgICAgICAgTk1UT0tFTiAgICAgICAjSU1QTElFRA0KLSAgJWNvcmVhdHRyczsNCi0gID4NCi0NCi08IUVMRU1FTlQgc3Ryb25nICglZmxvdzspKj4NCi08IUFUVExJU1Qgc3Ryb25nDQotICB4bWw6bGFuZyAgICAgICAgTk1UT0tFTiAgICAgICAjSU1QTElFRA0KLSAgJWNvcmVhdHRyczsNCi0gID4NCi0NCi08IUVMRU1FTlQgYiAgICAgICglZmxvdzspKj4NCi08IUFUVExJU1QgYg0KLSAgeG1sOmxhbmcgICAgICAgIE5NVE9LRU4gICAgICAgI0lNUExJRUQNCi0gICVjb3JlYXR0cnM7DQotICA+DQotDQotPCFFTEVNRU5UIGkgICAgICAoJWZsb3c7KSo+DQotPCFBVFRMSVNUIGkNCi0gIHhtbDpsYW5nICAgICAgICBOTVRPS0VOICAgICAgICNJTVBMSUVEDQotICAlY29yZWF0dHJzOw0KLSAgPg0KLQ0KLTwhRUxFTUVOVCB1ICAgICAgKCVmbG93OykqPg0KLTwhQVRUTElTVCB1DQotICB4bWw6bGFuZyAgICAgICAgTk1UT0tFTiAgICAgICAjSU1QTElFRA0KLSAgJWNvcmVhdHRyczsNCi0gID4NCi0NCi08IUVMRU1FTlQgYmlnICAgICglZmxvdzspKj4NCi08IUFUVExJU1QgYmlnDQotICB4bWw6bGFuZyAgICAgICAgTk1UT0tFTiAgICAgICAjSU1QTElFRA0KLSAgJWNvcmVhdHRyczsNCi0gID4NCi0NCi08IUVMRU1FTlQgc21hbGwgICglZmxvdzspKj4NCi08IUFUVExJU1Qgc21hbGwNCi0gIHhtbDpsYW5nICAgICAgICBOTVRPS0VOICAgICAgICNJTVBMSUVEDQotICAlY29yZWF0dHJzOw0KLSAgPg0KLQ0KLTwhRU5USVRZICUgVEFsaWduICIobGVmdHxyaWdodHxjZW50ZXIpIj4NCi08IUVOVElUWSAlIFdyYXBNb2RlICIod3JhcHxub3dyYXApIiA+DQotPCFFTEVNRU5UIHAgKCVmaWVsZHM7IHwgZG8pKj4NCi08IUFUVExJU1QgcA0KLSAgYWxpZ24gICAgICAgJVRBbGlnbjsgICAgICJsZWZ0Ig0KLSAgbW9kZSAgICAgICAgJVdyYXBNb2RlOyAgICNJTVBMSUVEDQotICB4bWw6bGFuZyAgICBOTVRPS0VOICAgICAgI0lNUExJRUQNCi0gICVjb3JlYXR0cnM7DQotICA+DQotDQotPCFFTEVNRU5UIGJyIEVNUFRZPg0KLTwhQVRUTElTVCBicg0KLSAgeG1sOmxhbmcgICAgICAgIE5NVE9LRU4gICAgICAgI0lNUExJRUQNCi0gICVjb3JlYXR0cnM7DQotICA+DQotDQotPCFFTlRJVFkgcXVvdCAgIiYjMzQ7Ij4gICAgIDwhLS0gcXVvdGF0aW9uIG1hcmsgLS0+DQotPCFFTlRJVFkgYW1wICAgIiYjMzg7IzM4OyI+IDwhLS0gYW1wZXJzYW5kIC0tPg0KLTwhRU5USVRZIGFwb3MgICImIzM5OyI+ICAgICA8IS0tIGFwb3N0cm9waGUgLS0+DQotPCFFTlRJVFkgbHQgICAgIiYjMzg7IzYwOyI+IDwhLS0gbGVzcyB0aGFuIC0tPg0KLTwhRU5USVRZIGd0ICAgICImIzYyOyI+ICAgICA8IS0tIGdyZWF0ZXIgdGhhbiAtLT4NCi08IUVOVElUWSBuYnNwICAiJiMxNjA7Ij4gICAgPCEtLSBub24tYnJlYWtpbmcgc3BhY2UgLS0+DQotPCFFTlRJVFkgc2h5ICAgIiYjMTczOyI+ICAgIDwhLS0gc29mdCBoeXBoZW4gKGRpc2NyZXRpb25hcnkgaHlwaGVuKSAtLT4NCi0NCi08IS0tDQotQ29weXJpZ2h0IFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4sIDE5OTgsMTk5OS4NCi0gICAgICAgICAgICAgICAgICAgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIA0KLS0tPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMS0yLTEvY2hhbm5lbDEyLmR0ZCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMS0yLTEvY2hhbm5lbDEyLmR0ZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGYyMTAzYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTEtMi0xL2NoYW5uZWwxMi5kdGQKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08IS0tDQotICAgICAgVGhpcyBEVEQgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGlkZW50aWZpZXI6DQotICAgICAJIi0vL1dBUEZPUlVNLy9EVEQgQ0hBTk5FTCAxLjIvL0VOIg0KLS0tPg0KLQ0KLTwhRU5USVRZICUgQm9vbGVhbiAiKCB0cnVlIHwgZmFsc2UgKSI+DQotDQotPCEtLSBhIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciAtLT4NCi08IUVOVElUWSAlIFVSSSAiQ0RBVEEiID4NCi0NCi08IS0tIG9uZSBvciBtb3JlIGRpZ2l0cyAoTlVNQkVSKSAtLT4NCi08IUVOVElUWSAlIE51bWJlciAiQ0RBVEEiID4gIA0KLQ0KLTwhLS0gQ2hhbm5lbCBFdmVudHMgLS0+DQotPCFFTlRJVFkgJSBDaGFubmVsRXZlbnQuYXR0cmlicw0KLQkic3VjY2VzcwkJJVVSSTsJCSNJTVBMSUVEDQotCSBmYWlsdXJlCQklVVJJOwkJI0lNUExJRUQiDQotPg0KLQ0KLTwhRUxFTUVOVCBjaGFubmVsICh0aXRsZSAsIGFic3RyYWN0PyAsIHJlc291cmNlKiApID4NCi08IUFUVExJU1QgY2hhbm5lbA0KLQltYXhzcGFjZQkJJU51bWJlcjsJI1JFUVVJUkVEIA0KLQliYXNlCQkJJVVSSTsJCSNJTVBMSUVEDQotCWV2ZW50aWQJCQlDREFUQQkJI0lNUExJRUQNCi0JY2hhbm5lbGlkCQlDREFUQQkJI1JFUVVJUkVEIA0KLQl1c2VyYWNjZXNzaWJsZSAJCSVCb29sZWFuOwkiZmFsc2UiDQotCSVDaGFubmVsRXZlbnQuYXR0cmliczsNCi0+DQotDQotPCFFTEVNRU5UIHRpdGxlICgjUENEQVRBKT4NCi08IUVMRU1FTlQgYWJzdHJhY3QgKCNQQ0RBVEEpPg0KLQ0KLTwhRUxFTUVOVCByZXNvdXJjZSBFTVBUWT4NCi08IUFUVExJU1QgcmVzb3VyY2UNCi0JaHJlZiAgICAgIAklVVJJOwkgICAJI1JFUVVJUkVEDQotCWxhc3Rtb2QJCSVOdW1iZXI7CSNJTVBMSUVEDQotCWV0YWcJCU5NVE9LRU4JCSNJTVBMSUVEDQotCW1kNQkJTk1UT0tFTgkJI0lNUExJRUQNCi0+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0xLTItMS9wYXBfMS4wLmR0ZCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMS0yLTEvcGFwXzEuMC5kdGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3ZWQwZDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0xLTItMS9wYXBfMS4wLmR0ZAorKysgL2Rldi9udWxsCkBAIC0xLDIxOSArMCwwIEBACi08IS0tDQotUHVzaCBBY2Nlc3MgUHJvdG9jb2wgKFBBUCkgdjEuMCBEb2N1bWVudCBUeXBlIERlZmluaXRpb24uDQotDQotQ29weXJpZ2h0IFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4sIDE5OTgtMjAwMS4NCi0gICAgICAgICAgICAgICAgICAgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIA0KLQ0KLVBBUCBpcyBhbiBYTUwgbGFuZ3VhZ2UuIFR5cGljYWwgdXNhZ2U6DQotICAgPD94bWwgdmVyc2lvbj0iMS4wIj8+DQotICAgPCFET0NUWVBFIHBhcCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgUEFQIDEuMC8vRU4iDQotICAgICAgICAgICAgICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvcGFwXzEuMC5kdGQiPg0KLSAgIDxwYXA+DQotICAgICAgLi4uDQotICAgPC9wYXA+DQotDQotVGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlIGFyZSBhdmFpbGFibGUgZnJvbSB0aGUgV2lyZWxlc3MgDQotQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiB3ZWIgc2l0ZSBhdA0KLWh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL2RvY3MvY29weXJpZ2h0Lmh0bS4NCi0tLT4NCi0NCi08IUVOVElUWSAlIERhdGV0aW1lICJDREFUQSI+ICAgICA8IS0tIElTTyBkYXRlIGFuZCB0aW1lIC0tPg0KLTwhRU5USVRZICUgU3RhdGUgICIocmVqZWN0ZWQgfCBwZW5kaW5nIA0KLSAgICAgICAgICAgICAgICAgIHwgZGVsaXZlcmVkIHwgdW5kZWxpdmVyYWJsZSANCi0gICAgICAgICAgICAgICAgICB8IGV4cGlyZWQgfCBhYm9ydGVkIA0KLSAgICAgICAgICAgICAgICAgIHwgdGltZW91dCB8IGNhbmNlbGxlZCB8IHVua25vd24pIj4gICAgICAgIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gUFBHIE1lc3NhZ2UgU3RhdGUgLS0+DQotDQotDQotPCFFTEVNRU5UIHBhcCAgICAgICAgICAgICAgICAgICAgKCBwdXNoLW1lc3NhZ2UNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHB1c2gtcmVzcG9uc2UNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNhbmNlbC1tZXNzYWdlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjYW5jZWwtcmVzcG9uc2UNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHJlc3VsdG5vdGlmaWNhdGlvbi1tZXNzYWdlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCByZXN1bHRub3RpZmljYXRpb24tcmVzcG9uc2UNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHN0YXR1c3F1ZXJ5LW1lc3NhZ2UNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHN0YXR1c3F1ZXJ5LXJlc3BvbnNlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY3EtbWVzc2FnZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2NxLXJlc3BvbnNlIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYmFkbWVzc2FnZS1yZXNwb25zZSkgPg0KLTwhQVRUTElTVCBwYXANCi0gICAgICAgICAgcHJvZHVjdC1uYW1lICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLT4NCi0NCi0NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLTwhLS0gRGVjbGFyYXRpb24gb2YgcHVzaCBzdWJtaXNzaW9uIG1lc3NhZ2UgICAgLS0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi0NCi08IS0tdGhpcyBtZXNzYWdlIGdvZXMgZnJvbSB0aGUgUHVzaCBJbml0aWF0b3IgdG8gdGhlIHB1c2ggcHJveHkgZ2F0ZXdheS0tPg0KLQ0KLTwhRUxFTUVOVCBwdXNoLW1lc3NhZ2UgKCBhZGRyZXNzKywgcXVhbGl0eS1vZi1zZXJ2aWNlPyApID4NCi08IUFUVExJU1QgcHVzaC1tZXNzYWdlDQotICAgICAgICAgIHB1c2gtaWQgICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICBkZWxpdmVyLWJlZm9yZS10aW1lc3RhbXAgICAlRGF0ZXRpbWU7ICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICBkZWxpdmVyLWFmdGVyLXRpbWVzdGFtcCAgICAlRGF0ZXRpbWU7ICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICBzb3VyY2UtcmVmZXJlbmNlICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICBwcGctbm90aWZ5LXJlcXVlc3RlZC10byAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRCANCi0gICAgICAgICAgcHJvZ3Jlc3Mtbm90ZXMtcmVxdWVzdGVkICAgKCB0cnVlIHwgZmFsc2UgKSAgImZhbHNlIg0KLT4NCi0NCi08IUVMRU1FTlQgYWRkcmVzcyBFTVBUWSA+DQotPCFBVFRMSVNUIGFkZHJlc3MNCi0gICAgICAgICAgYWRkcmVzcy12YWx1ZSAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjUkVRVUlSRUQgDQotPg0KLQ0KLTwhRUxFTUVOVCBxdWFsaXR5LW9mLXNlcnZpY2UgRU1QVFkgPg0KLTwhQVRUTElTVCBxdWFsaXR5LW9mLXNlcnZpY2UNCi0gICAgICAgICAgcHJpb3JpdHkgICAgICAgICAgICAgICAoIGhpZ2ggfCBtZWRpdW0gfCBsb3cgKSAgICAgICAgIm1lZGl1bSINCi0gICAgICAgICAgZGVsaXZlcnktbWV0aG9kICAgICAgICAoIGNvbmZpcm1lZCB8IHByZWZlcmNvbmZpcm1lZCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHVuY29uZmlybWVkIHwgbm90c3BlY2lmaWVkICkgIm5vdHNwZWNpZmllZCINCi0gICAgICAgICAgbmV0d29yayAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICAgICAgbmV0d29yay1yZXF1aXJlZCAgICAgICAoIHRydWUgfCBmYWxzZSApICAgICAgICAgICAgICAgImZhbHNlIg0KLSAgICAgICAgICBiZWFyZXIgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICBiZWFyZXItcmVxdWlyZWQgICAgICAgICggdHJ1ZSB8IGZhbHNlICkgICAgICAgICAgICAgICAiZmFsc2UiDQotPg0KLQ0KLQ0KLQ0KLTwhLS10aGlzIG1lc3NhZ2UgZ29lcyBmcm9tIHRoZSBwdXNoIHByb3h5IGdhdGV3YXkgdG8gdGhlIFB1c2ggSW5pdGlhdG9yLS0+DQotDQotPCFFTEVNRU5UIHB1c2gtcmVzcG9uc2UgKCBwcm9ncmVzcy1ub3RlKiwgcmVzcG9uc2UtcmVzdWx0ICkgPg0KLTwhQVRUTElTVCBwdXNoLXJlc3BvbnNlDQotICAgICAgICAgIHB1c2gtaWQgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI1JFUVVJUkVEDQotICAgICAgICAgIHNlbmRlci1hZGRyZXNzICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICAgICAgc2VuZGVyLW5hbWUgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICByZXBseS10aW1lICAgICAgICAgICAgICVEYXRldGltZTsgICAgICAgICNJTVBMSUVEDQotPg0KLQ0KLTwhRUxFTUVOVCBwcm9ncmVzcy1ub3RlIEVNUFRZID4NCi08IUFUVExJU1QgcHJvZ3Jlc3Mtbm90ZQ0KLSAgICAgICAgICBzdGFnZSAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICBub3RlICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgICAgIHRpbWUgICAgICAgICAgICAgICAgICAgJURhdGV0aW1lOyAgICAgICAgI0lNUExJRUQNCi0+DQotDQotPCFFTEVNRU5UIHJlc3BvbnNlLXJlc3VsdCBFTVBUWSA+DQotPCFBVFRMSVNUIHJlc3BvbnNlLXJlc3VsdA0KLSAgICAgICAgICBjb2RlICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICBkZXNjICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotPg0KLQ0KLQ0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLSBEZWNsYXJhdGlvbiBvZiBjYW5jZWwgb3BlcmF0aW9uICAgICAgICAgICAtLT4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLQ0KLTwhLS10aGlzIG1lc3NhZ2UgZ29lcyBmcm9tIHRoZSBQdXNoIEluaXRpYXRvciB0byB0aGUgcHVzaCBwcm94eSBnYXRld2F5LS0+DQotDQotPCFFTEVNRU5UIGNhbmNlbC1tZXNzYWdlICggYWRkcmVzcyogKSA+DQotPCFBVFRMSVNUIGNhbmNlbC1tZXNzYWdlDQotICAgICAgICAgIHB1c2gtaWQgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI1JFUVVJUkVEDQotPg0KLQ0KLTwhLS10aGlzIG1lc3NhZ2UgZ29lcyBmcm9tIHRoZSBwdXNoIHByb3h5IGdhdGV3YXkgdG8gdGhlIFB1c2ggSW5pdGlhdG9yLS0+DQotDQotPCFFTEVNRU5UIGNhbmNlbC1yZXNwb25zZSAoIGNhbmNlbC1yZXN1bHQrICkgPg0KLTwhQVRUTElTVCBjYW5jZWwtcmVzcG9uc2UNCi0gICAgICAgICAgcHVzaC1pZCAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjUkVRVUlSRUQNCi0+DQotDQotPCFFTEVNRU5UIGNhbmNlbC1yZXN1bHQgKCBhZGRyZXNzKiApID4NCi08IUFUVExJU1QgY2FuY2VsLXJlc3VsdA0KLSAgICAgICAgICBjb2RlICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICBkZXNjICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotPg0KLQ0KLQ0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLSBEZWNsYXJhdGlvbiBvZiBub3RpZnkgcmVzdWx0IG9wZXJhdGlvbiAgICAtLT4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLQ0KLTwhLS10aGlzIG1lc3NhZ2UgZ29lcyBmcm9tIHRoZSBwdXNoIHByb3h5IGdhdGV3YXkgdG8gdGhlIFB1c2ggSW5pdGlhdG9yLS0+DQotDQotPCFFTEVNRU5UIHJlc3VsdG5vdGlmaWNhdGlvbi1tZXNzYWdlICggYWRkcmVzcywgcXVhbGl0eS1vZi1zZXJ2aWNlPyApID4NCi08IUFUVExJU1QgcmVzdWx0bm90aWZpY2F0aW9uLW1lc3NhZ2UNCi0gICAgICAgICAgcHVzaC1pZCAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjUkVRVUlSRUQNCi0gICAgICAgICAgc2VuZGVyLWFkZHJlc3MgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICBzZW5kZXItbmFtZSAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgICAgIHJlY2VpdmVkLXRpbWUgICAgICAgICAgJURhdGV0aW1lOyAgICAgICAgI0lNUExJRUQNCi0gICAgICAgICAgZXZlbnQtdGltZSAgICAgICAgICAgICAlRGF0ZXRpbWU7ICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICBtZXNzYWdlLXN0YXRlICAgICAgICAgICVTdGF0ZTsgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICBjb2RlICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICBkZXNjICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotPg0KLQ0KLTwhLS10aGlzIG1lc3NhZ2UgZ29lcyBmcm9tIHRoZSBQdXNoIEluaXRpYXRvciB0byB0aGUgcHVzaCBwcm94eSBnYXRld2F5LS0+DQotDQotPCFFTEVNRU5UIHJlc3VsdG5vdGlmaWNhdGlvbi1yZXNwb25zZSAoIGFkZHJlc3MgKSA+DQotPCFBVFRMSVNUIHJlc3VsdG5vdGlmaWNhdGlvbi1yZXNwb25zZQ0KLSAgICAgICAgICBwdXNoLWlkICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICBjb2RlICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICBkZXNjICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotPg0KLQ0KLQ0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLSBEZWNsYXJhdGlvbiBvZiBzdGF0dXNxdWVyeSBvcGVyYXRpb24gICAgICAtLT4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLQ0KLTwhLS10aGlzIG1lc3NhZ2UgZ29lcyBmcm9tIHRoZSBQdXNoIEluaXRpYXRvciB0byB0aGUgcHVzaCBwcm94eSBnYXRld2F5LS0+DQotDQotPCFFTEVNRU5UIHN0YXR1c3F1ZXJ5LW1lc3NhZ2UgKCBhZGRyZXNzKiApID4NCi08IUFUVExJU1Qgc3RhdHVzcXVlcnktbWVzc2FnZQ0KLSAgICAgICAgICBwdXNoLWlkICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLT4NCi0NCi08IS0tdGhpcyBtZXNzYWdlIGdvZXMgZnJvbSB0aGUgcHVzaCBwcm94eSBnYXRld2F5IHRvIHRoZSBQdXNoIEluaXRpYXRvci0tPg0KLQ0KLTwhRUxFTUVOVCBzdGF0dXNxdWVyeS1yZXNwb25zZSAoIHN0YXR1c3F1ZXJ5LXJlc3VsdCsgKSA+DQotPCFBVFRMSVNUIHN0YXR1c3F1ZXJ5LXJlc3BvbnNlDQotICAgICAgICAgIHB1c2gtaWQgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI1JFUVVJUkVEDQotPg0KLQ0KLTwhRUxFTUVOVCBzdGF0dXNxdWVyeS1yZXN1bHQgKCBhZGRyZXNzKiwgcXVhbGl0eS1vZi1zZXJ2aWNlPyApID4NCi08IUFUVExJU1Qgc3RhdHVzcXVlcnktcmVzdWx0DQotICAgICAgICAgIGV2ZW50LXRpbWUgICAgICAgICAgICAgJURhdGV0aW1lOyAgICAgICAgI0lNUExJRUQNCi0gICAgICAgICAgbWVzc2FnZS1zdGF0ZSAgICAgICAgICAlU3RhdGU7ICAgICAgICAgICAjUkVRVUlSRUQNCi0gICAgICAgICAgY29kZSAgICAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjUkVRVUlSRUQNCi0gICAgICAgICAgZGVzYyAgICAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLT4NCi0NCi0NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLSBEZWNsYXJhdGlvbiBvZiBjYXBhYmlsaXRpZXMgcXVlcnkgb3BlcmF0aW9uICAgIC0tPg0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi0NCi08IS0tdGhpcyBtZXNzYWdlIGdvZXMgZnJvbSB0aGUgUHVzaCBJbml0aWF0b3IgdG8gdGhlIHB1c2ggcHJveHkgZ2F0ZXdheS0tPg0KLQ0KLTwhRUxFTUVOVCBjY3EtbWVzc2FnZSAoIGFkZHJlc3MgKSA+DQotPCFBVFRMSVNUIGNjcS1tZXNzYWdlDQotICAgICAgICAgIHF1ZXJ5LWlkICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICAgICAgYXBwLWlkICAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLT4NCi0NCi08IS0tdGhpcyBtZXNzYWdlIGdvZXMgZnJvbSB0aGUgcHVzaCBwcm94eSBnYXRld2F5IHRvIHRoZSBQdXNoIEluaXRpYXRvci0tPg0KLQ0KLTwhRUxFTUVOVCBjY3EtcmVzcG9uc2UgKCBhZGRyZXNzICkgPg0KLTwhQVRUTElTVCBjY3EtcmVzcG9uc2UNCi0gICAgICAgICAgcXVlcnktaWQgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICBjb2RlICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICBkZXNjICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotPg0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tIERlY2xhcmF0aW9uIG9mIGJhZCBtZXNzYWdlIHJlc3BvbnNlIG1lc3NhZ2UgICAgLS0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLQ0KLQ0KLTwhLS10aGlzIG1lc3NhZ2UgZ29lcyBmcm9tIHRoZSBwdXNoIHByb3h5IGdhdGV3YXkgdG8gdGhlIFB1c2ggSW5pdGlhdG9yLS0+DQotDQotPCFFTEVNRU5UIGJhZG1lc3NhZ2UtcmVzcG9uc2UgRU1QVFkgPg0KLTwhQVRUTElTVCBiYWRtZXNzYWdlLXJlc3BvbnNlDQotCWNvZGUJCQlDREFUQQkjUkVRVUlSRUQNCi0JZGVzYwkJCUNEQVRBCSNJTVBMSUVEDQotCWJhZC1tZXNzYWdlLWZyYWdtZW50CUNEQVRBCSNJTVBMSUVEDQotPg0KLQ0KLTwhLS0NCi1Db3B5cmlnaHQgV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiwgMTk5OC0yMDAxLg0KLSAgICAgICAgICAgICAgICAgICAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgDQotLS0+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0xLTItMS9zaS5kdGQgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTEtMi0xL3NpLmR0ZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTNlOTdjNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTEtMi0xL3NpLmR0ZAorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLTwhLS0NCi1TZXJ2aWNlIEluZGljYXRpb24gKFNJKSBEb2N1bWVudCBUeXBlIERlZmluaXRpb24uDQotDQotQ29weXJpZ2h0IFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4sIDE5OTgsMTk5OS4NCi0gICAgICAgICAgICAgICAgICAgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIA0KLQ0KLVNJIGlzIGFuIFhNTCBsYW5ndWFnZS4gIFR5cGljYWwgdXNhZ2U6DQotICAgPD94bWwgdmVyc2lvbj0iMS4wIj8+DQotICAgPCFET0NUWVBFIHNpIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBTSSAxLjAvL0VOIg0KLSAgICAgICAgICAgICAgICAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3NpLmR0ZCI+DQotICAgPHNpPg0KLSAgIC4uLg0KLSAgIDwvc2k+DQotDQotVGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlIGFyZSBhdmFpbGFibGUgZnJvbSB0aGUgV2lyZWxlc3MgDQotQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiB3ZWIgc2l0ZSBhdA0KLWh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL2RvY3MvY29weXJpZ2h0Lmh0bS4NCi0tLT4NCi0NCi0NCi08IUVOVElUWSAlIERhdGV0aW1lICJDREFUQSI+ICAgICAgICAgICAgIDwhLS0gSVNPIGRhdGUgYW5kIHRpbWUgLS0+DQotPCFFTlRJVFkgJSBVUkkgICAgICAiQ0RBVEEiPiAgICAgICAgICAgICA8IS0tIFVSSSBkZXNpZ25hdGluZyBhIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoeXBlcnRleHQgbm9kZSAgICAtLT4NCi0NCi0NCi08IS0tPT09PT09PT09PT09PT09PT09PT09PSBUaGUgU0kgRWxlbWVudCA9PT09PT09PT09PT09PT09PT09PT09LS0+DQotPCFFTEVNRU5UIHNpIChpbmRpY2F0aW9uLGluZm8/KT4NCi0NCi0NCi08IS0tPT09PT09PT09PT09PT09PT09IFRoZSBpbmRpY2F0aW9uIEVsZW1lbnQgPT09PT09PT09PT09PT09PT09LS0+DQotPCFFTEVNRU5UIGluZGljYXRpb24gKCNQQ0RBVEEpPg0KLTwhQVRUTElTVCBpbmRpY2F0aW9uDQotICBocmVmCSAgICAgICAgJVVSSTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotICBzaS1pZAkgICAgICAgIENEQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgY3JlYXRlZAklRGF0ZXRpbWU7CSAgICAgICAgICAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotICBzaS1leHBpcmVzCSVEYXRldGltZTsJICAgICAgICAgICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0gIGFjdGlvbgkoc2lnbmFsLW5vbmV8c2lnbmFsLWxvd3wNCi0gICAgICAgICAgICAgICAgIHNpZ25hbC1tZWRpdW18c2lnbmFsLWhpZ2h8ZGVsZXRlKSAgInNpZ25hbC1tZWRpdW0iIA0KLT4NCi0NCi0NCi08IS0tPT09PT09PT09PT09PT09PT09PT09IFRoZSBJTkZPIEVsZW1lbnQgPT09PT09PT09PT09PT09PT09PT09LS0+DQotPCFFTEVNRU5UIGluZm8gKGl0ZW0rKT4NCi0NCi08IUVMRU1FTlQgaXRlbSAoI1BDREFUQSk+DQotPCFBVFRMSVNUIGl0ZW0NCi0gIGNsYXNzCSAgICAgICAgTk1UT0tFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI1JFUVVJUkVEIA0KLT4NCi0NCi08IS0tDQotQ29weXJpZ2h0IFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4sIDE5OTgsMTk5OS4NCi0gICAgICAgICAgICAgICAgICAgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIA0KLS0tPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMS0yLTEvc2wuZHRkIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0xLTItMS9zbC5kdGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4NzMxMWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0xLTItMS9zbC5kdGQKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi08IS0tDQotU2VydmljZSBMb2FkaW5nIChTTCkgRG9jdW1lbnQgVHlwZSBEZWZpbml0aW9uLg0KLQ0KLUNvcHlyaWdodCBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSBMdGQuLCAxOTk4LDE5OTkuDQotICAgICAgICAgICAgICAgICAgICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICANCi0NCi1TTCBpcyBhbiBYTUwgbGFuZ3VhZ2UuICBUeXBpY2FsIHVzYWdlOg0KLSAgIDw/eG1sIHZlcnNpb249IjEuMCI/Pg0KLSAgIDwhRE9DVFlQRSBzbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgU0wgMS4wLy9FTiINCi0gICAgICAgICAgICAgICAgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC9zbC5kdGQiPg0KLSAgIDxzbD4NCi0gICAuLi4NCi0gICA8L3NsPg0KLQ0KLVRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHVzZSBhcmUgYXZhaWxhYmxlIGZyb20gdGhlIFdpcmVsZXNzIA0KLUFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4gd2ViIHNpdGUgYXQNCi1odHRwOi8vd3d3LndhcGZvcnVtLm9yZy9kb2NzL2NvcHlyaWdodC5odG0uDQotLS0+DQotDQotPCFFTlRJVFkgJSBVUkkgIkNEQVRBIj4gICAgICAgICAgICAgICAgPCEtLSBVUkkgZGVzaWduYXRpbmcgYSANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh5cGVydGV4dCBub2RlICAgIC0tPg0KLQ0KLTwhLS09PT09PT09PT09PT09PT09PT09PT0gVGhlIFNMIEVsZW1lbnQgPT09PT09PT09PT09PT09PT09PT09LS0+DQotPCFFTEVNRU5UIHNsIEVNUFRZPg0KLTwhQVRUTElTVCBzbA0KLSAgaHJlZiAgICAgICAgICAlVVJJOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI1JFUVVJUkVEDQotICBhY3Rpb24gICAgICAgIChleGVjdXRlLWxvd3xleGVjdXRlLWhpZ2h8Y2FjaGUpICAgICJleGVjdXRlLWxvdyIgDQotPg0KLQ0KLTwhLS0NCi1Db3B5cmlnaHQgV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiwgMTk5OCwxOTk5Lg0KLSAgICAgICAgICAgICAgICAgICAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgDQotLS0+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0xLTItMS93bWwxMy5kdGQgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTEtMi0xL3dtbDEzLmR0ZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWI4YTQ5Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTEtMi0xL3dtbDEzLmR0ZAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMS0yLTEvd3RhLXdtbDEyLmR0ZCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMS0yLTEvd3RhLXdtbDEyLmR0ZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDYwZjdkZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTEtMi0xL3d0YS13bWwxMi5kdGQKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi08IS0tDQotV2lyZWxlc3MgVGVsZXBob255IEFwcGxpY2F0aW9ucyBXaXJlbGVzcyBNYXJrdXAgTGFuZ3VhZ2UgKFdUQS1XTUwpIERvY3VtZW50IFR5cGUgRGVmaW5pdGlvbi4NCi1XVEEtV01MIGlzIGFuIFhNTCBsYW5ndWFnZS4gVHlwaWNhbCB1c2FnZToNCi08P3htbCB2ZXJzaW9uPSIxLjAiPz4NCi08IURPQ1RZUEUgd3RhLXdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV1RBLVdNTCAxLjIvL0VOIg0KLQkiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3d0YS13bWwxMi5kdGQiPg0KLTx3dGEtd21sPg0KLS4uLg0KLTwvd3RhLXdtbD4NCi0tLT4NCi0NCi08IUVOVElUWSAlIHdtbC1kdGQgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjIvL0VOIg0KLQkiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbDEyLmR0ZCI+DQotDQotJXdtbC1kdGQ7DQotDQotPCFFTEVNRU5UIHd0YS13bWwgKCBoZWFkPywgdGVtcGxhdGU/LCBjYXJkKyApPg0KLTwhQVRUTElTVCB3dGEtd21sDQotCXhtbDpsYW5nCQlOTVRPS0VOCSNJTVBMSUVEDQotCSVjb3JlYXR0cnM7DQotPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMS0yL2NoYW5uZWwxMi5kdGQgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTEtMi9jaGFubmVsMTIuZHRkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZjIxMDNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMS0yL2NoYW5uZWwxMi5kdGQKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08IS0tDQotICAgICAgVGhpcyBEVEQgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGlkZW50aWZpZXI6DQotICAgICAJIi0vL1dBUEZPUlVNLy9EVEQgQ0hBTk5FTCAxLjIvL0VOIg0KLS0tPg0KLQ0KLTwhRU5USVRZICUgQm9vbGVhbiAiKCB0cnVlIHwgZmFsc2UgKSI+DQotDQotPCEtLSBhIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciAtLT4NCi08IUVOVElUWSAlIFVSSSAiQ0RBVEEiID4NCi0NCi08IS0tIG9uZSBvciBtb3JlIGRpZ2l0cyAoTlVNQkVSKSAtLT4NCi08IUVOVElUWSAlIE51bWJlciAiQ0RBVEEiID4gIA0KLQ0KLTwhLS0gQ2hhbm5lbCBFdmVudHMgLS0+DQotPCFFTlRJVFkgJSBDaGFubmVsRXZlbnQuYXR0cmlicw0KLQkic3VjY2VzcwkJJVVSSTsJCSNJTVBMSUVEDQotCSBmYWlsdXJlCQklVVJJOwkJI0lNUExJRUQiDQotPg0KLQ0KLTwhRUxFTUVOVCBjaGFubmVsICh0aXRsZSAsIGFic3RyYWN0PyAsIHJlc291cmNlKiApID4NCi08IUFUVExJU1QgY2hhbm5lbA0KLQltYXhzcGFjZQkJJU51bWJlcjsJI1JFUVVJUkVEIA0KLQliYXNlCQkJJVVSSTsJCSNJTVBMSUVEDQotCWV2ZW50aWQJCQlDREFUQQkJI0lNUExJRUQNCi0JY2hhbm5lbGlkCQlDREFUQQkJI1JFUVVJUkVEIA0KLQl1c2VyYWNjZXNzaWJsZSAJCSVCb29sZWFuOwkiZmFsc2UiDQotCSVDaGFubmVsRXZlbnQuYXR0cmliczsNCi0+DQotDQotPCFFTEVNRU5UIHRpdGxlICgjUENEQVRBKT4NCi08IUVMRU1FTlQgYWJzdHJhY3QgKCNQQ0RBVEEpPg0KLQ0KLTwhRUxFTUVOVCByZXNvdXJjZSBFTVBUWT4NCi08IUFUVExJU1QgcmVzb3VyY2UNCi0JaHJlZiAgICAgIAklVVJJOwkgICAJI1JFUVVJUkVEDQotCWxhc3Rtb2QJCSVOdW1iZXI7CSNJTVBMSUVEDQotCWV0YWcJCU5NVE9LRU4JCSNJTVBMSUVEDQotCW1kNQkJTk1UT0tFTgkJI0lNUExJRUQNCi0+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0xLTIvcGFwXzEuMC5kdGQgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTEtMi9wYXBfMS4wLmR0ZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjdlZDBkMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTEtMi9wYXBfMS4wLmR0ZAorKysgL2Rldi9udWxsCkBAIC0xLDIxOSArMCwwIEBACi08IS0tDQotUHVzaCBBY2Nlc3MgUHJvdG9jb2wgKFBBUCkgdjEuMCBEb2N1bWVudCBUeXBlIERlZmluaXRpb24uDQotDQotQ29weXJpZ2h0IFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4sIDE5OTgtMjAwMS4NCi0gICAgICAgICAgICAgICAgICAgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIA0KLQ0KLVBBUCBpcyBhbiBYTUwgbGFuZ3VhZ2UuIFR5cGljYWwgdXNhZ2U6DQotICAgPD94bWwgdmVyc2lvbj0iMS4wIj8+DQotICAgPCFET0NUWVBFIHBhcCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgUEFQIDEuMC8vRU4iDQotICAgICAgICAgICAgICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvcGFwXzEuMC5kdGQiPg0KLSAgIDxwYXA+DQotICAgICAgLi4uDQotICAgPC9wYXA+DQotDQotVGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlIGFyZSBhdmFpbGFibGUgZnJvbSB0aGUgV2lyZWxlc3MgDQotQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiB3ZWIgc2l0ZSBhdA0KLWh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL2RvY3MvY29weXJpZ2h0Lmh0bS4NCi0tLT4NCi0NCi08IUVOVElUWSAlIERhdGV0aW1lICJDREFUQSI+ICAgICA8IS0tIElTTyBkYXRlIGFuZCB0aW1lIC0tPg0KLTwhRU5USVRZICUgU3RhdGUgICIocmVqZWN0ZWQgfCBwZW5kaW5nIA0KLSAgICAgICAgICAgICAgICAgIHwgZGVsaXZlcmVkIHwgdW5kZWxpdmVyYWJsZSANCi0gICAgICAgICAgICAgICAgICB8IGV4cGlyZWQgfCBhYm9ydGVkIA0KLSAgICAgICAgICAgICAgICAgIHwgdGltZW91dCB8IGNhbmNlbGxlZCB8IHVua25vd24pIj4gICAgICAgIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gUFBHIE1lc3NhZ2UgU3RhdGUgLS0+DQotDQotDQotPCFFTEVNRU5UIHBhcCAgICAgICAgICAgICAgICAgICAgKCBwdXNoLW1lc3NhZ2UNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHB1c2gtcmVzcG9uc2UNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNhbmNlbC1tZXNzYWdlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjYW5jZWwtcmVzcG9uc2UNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHJlc3VsdG5vdGlmaWNhdGlvbi1tZXNzYWdlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCByZXN1bHRub3RpZmljYXRpb24tcmVzcG9uc2UNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHN0YXR1c3F1ZXJ5LW1lc3NhZ2UNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHN0YXR1c3F1ZXJ5LXJlc3BvbnNlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY3EtbWVzc2FnZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2NxLXJlc3BvbnNlIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYmFkbWVzc2FnZS1yZXNwb25zZSkgPg0KLTwhQVRUTElTVCBwYXANCi0gICAgICAgICAgcHJvZHVjdC1uYW1lICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLT4NCi0NCi0NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLTwhLS0gRGVjbGFyYXRpb24gb2YgcHVzaCBzdWJtaXNzaW9uIG1lc3NhZ2UgICAgLS0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi0NCi08IS0tdGhpcyBtZXNzYWdlIGdvZXMgZnJvbSB0aGUgUHVzaCBJbml0aWF0b3IgdG8gdGhlIHB1c2ggcHJveHkgZ2F0ZXdheS0tPg0KLQ0KLTwhRUxFTUVOVCBwdXNoLW1lc3NhZ2UgKCBhZGRyZXNzKywgcXVhbGl0eS1vZi1zZXJ2aWNlPyApID4NCi08IUFUVExJU1QgcHVzaC1tZXNzYWdlDQotICAgICAgICAgIHB1c2gtaWQgICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICBkZWxpdmVyLWJlZm9yZS10aW1lc3RhbXAgICAlRGF0ZXRpbWU7ICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICBkZWxpdmVyLWFmdGVyLXRpbWVzdGFtcCAgICAlRGF0ZXRpbWU7ICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICBzb3VyY2UtcmVmZXJlbmNlICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICBwcGctbm90aWZ5LXJlcXVlc3RlZC10byAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRCANCi0gICAgICAgICAgcHJvZ3Jlc3Mtbm90ZXMtcmVxdWVzdGVkICAgKCB0cnVlIHwgZmFsc2UgKSAgImZhbHNlIg0KLT4NCi0NCi08IUVMRU1FTlQgYWRkcmVzcyBFTVBUWSA+DQotPCFBVFRMSVNUIGFkZHJlc3MNCi0gICAgICAgICAgYWRkcmVzcy12YWx1ZSAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjUkVRVUlSRUQgDQotPg0KLQ0KLTwhRUxFTUVOVCBxdWFsaXR5LW9mLXNlcnZpY2UgRU1QVFkgPg0KLTwhQVRUTElTVCBxdWFsaXR5LW9mLXNlcnZpY2UNCi0gICAgICAgICAgcHJpb3JpdHkgICAgICAgICAgICAgICAoIGhpZ2ggfCBtZWRpdW0gfCBsb3cgKSAgICAgICAgIm1lZGl1bSINCi0gICAgICAgICAgZGVsaXZlcnktbWV0aG9kICAgICAgICAoIGNvbmZpcm1lZCB8IHByZWZlcmNvbmZpcm1lZCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHVuY29uZmlybWVkIHwgbm90c3BlY2lmaWVkICkgIm5vdHNwZWNpZmllZCINCi0gICAgICAgICAgbmV0d29yayAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICAgICAgbmV0d29yay1yZXF1aXJlZCAgICAgICAoIHRydWUgfCBmYWxzZSApICAgICAgICAgICAgICAgImZhbHNlIg0KLSAgICAgICAgICBiZWFyZXIgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICBiZWFyZXItcmVxdWlyZWQgICAgICAgICggdHJ1ZSB8IGZhbHNlICkgICAgICAgICAgICAgICAiZmFsc2UiDQotPg0KLQ0KLQ0KLQ0KLTwhLS10aGlzIG1lc3NhZ2UgZ29lcyBmcm9tIHRoZSBwdXNoIHByb3h5IGdhdGV3YXkgdG8gdGhlIFB1c2ggSW5pdGlhdG9yLS0+DQotDQotPCFFTEVNRU5UIHB1c2gtcmVzcG9uc2UgKCBwcm9ncmVzcy1ub3RlKiwgcmVzcG9uc2UtcmVzdWx0ICkgPg0KLTwhQVRUTElTVCBwdXNoLXJlc3BvbnNlDQotICAgICAgICAgIHB1c2gtaWQgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI1JFUVVJUkVEDQotICAgICAgICAgIHNlbmRlci1hZGRyZXNzICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICAgICAgc2VuZGVyLW5hbWUgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICByZXBseS10aW1lICAgICAgICAgICAgICVEYXRldGltZTsgICAgICAgICNJTVBMSUVEDQotPg0KLQ0KLTwhRUxFTUVOVCBwcm9ncmVzcy1ub3RlIEVNUFRZID4NCi08IUFUVExJU1QgcHJvZ3Jlc3Mtbm90ZQ0KLSAgICAgICAgICBzdGFnZSAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICBub3RlICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgICAgIHRpbWUgICAgICAgICAgICAgICAgICAgJURhdGV0aW1lOyAgICAgICAgI0lNUExJRUQNCi0+DQotDQotPCFFTEVNRU5UIHJlc3BvbnNlLXJlc3VsdCBFTVBUWSA+DQotPCFBVFRMSVNUIHJlc3BvbnNlLXJlc3VsdA0KLSAgICAgICAgICBjb2RlICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICBkZXNjICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotPg0KLQ0KLQ0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLSBEZWNsYXJhdGlvbiBvZiBjYW5jZWwgb3BlcmF0aW9uICAgICAgICAgICAtLT4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLQ0KLTwhLS10aGlzIG1lc3NhZ2UgZ29lcyBmcm9tIHRoZSBQdXNoIEluaXRpYXRvciB0byB0aGUgcHVzaCBwcm94eSBnYXRld2F5LS0+DQotDQotPCFFTEVNRU5UIGNhbmNlbC1tZXNzYWdlICggYWRkcmVzcyogKSA+DQotPCFBVFRMSVNUIGNhbmNlbC1tZXNzYWdlDQotICAgICAgICAgIHB1c2gtaWQgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI1JFUVVJUkVEDQotPg0KLQ0KLTwhLS10aGlzIG1lc3NhZ2UgZ29lcyBmcm9tIHRoZSBwdXNoIHByb3h5IGdhdGV3YXkgdG8gdGhlIFB1c2ggSW5pdGlhdG9yLS0+DQotDQotPCFFTEVNRU5UIGNhbmNlbC1yZXNwb25zZSAoIGNhbmNlbC1yZXN1bHQrICkgPg0KLTwhQVRUTElTVCBjYW5jZWwtcmVzcG9uc2UNCi0gICAgICAgICAgcHVzaC1pZCAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjUkVRVUlSRUQNCi0+DQotDQotPCFFTEVNRU5UIGNhbmNlbC1yZXN1bHQgKCBhZGRyZXNzKiApID4NCi08IUFUVExJU1QgY2FuY2VsLXJlc3VsdA0KLSAgICAgICAgICBjb2RlICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICBkZXNjICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotPg0KLQ0KLQ0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLSBEZWNsYXJhdGlvbiBvZiBub3RpZnkgcmVzdWx0IG9wZXJhdGlvbiAgICAtLT4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLQ0KLTwhLS10aGlzIG1lc3NhZ2UgZ29lcyBmcm9tIHRoZSBwdXNoIHByb3h5IGdhdGV3YXkgdG8gdGhlIFB1c2ggSW5pdGlhdG9yLS0+DQotDQotPCFFTEVNRU5UIHJlc3VsdG5vdGlmaWNhdGlvbi1tZXNzYWdlICggYWRkcmVzcywgcXVhbGl0eS1vZi1zZXJ2aWNlPyApID4NCi08IUFUVExJU1QgcmVzdWx0bm90aWZpY2F0aW9uLW1lc3NhZ2UNCi0gICAgICAgICAgcHVzaC1pZCAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjUkVRVUlSRUQNCi0gICAgICAgICAgc2VuZGVyLWFkZHJlc3MgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICBzZW5kZXItbmFtZSAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgICAgIHJlY2VpdmVkLXRpbWUgICAgICAgICAgJURhdGV0aW1lOyAgICAgICAgI0lNUExJRUQNCi0gICAgICAgICAgZXZlbnQtdGltZSAgICAgICAgICAgICAlRGF0ZXRpbWU7ICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICBtZXNzYWdlLXN0YXRlICAgICAgICAgICVTdGF0ZTsgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICBjb2RlICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICBkZXNjICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotPg0KLQ0KLTwhLS10aGlzIG1lc3NhZ2UgZ29lcyBmcm9tIHRoZSBQdXNoIEluaXRpYXRvciB0byB0aGUgcHVzaCBwcm94eSBnYXRld2F5LS0+DQotDQotPCFFTEVNRU5UIHJlc3VsdG5vdGlmaWNhdGlvbi1yZXNwb25zZSAoIGFkZHJlc3MgKSA+DQotPCFBVFRMSVNUIHJlc3VsdG5vdGlmaWNhdGlvbi1yZXNwb25zZQ0KLSAgICAgICAgICBwdXNoLWlkICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICBjb2RlICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICBkZXNjICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotPg0KLQ0KLQ0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLSBEZWNsYXJhdGlvbiBvZiBzdGF0dXNxdWVyeSBvcGVyYXRpb24gICAgICAtLT4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLQ0KLTwhLS10aGlzIG1lc3NhZ2UgZ29lcyBmcm9tIHRoZSBQdXNoIEluaXRpYXRvciB0byB0aGUgcHVzaCBwcm94eSBnYXRld2F5LS0+DQotDQotPCFFTEVNRU5UIHN0YXR1c3F1ZXJ5LW1lc3NhZ2UgKCBhZGRyZXNzKiApID4NCi08IUFUVExJU1Qgc3RhdHVzcXVlcnktbWVzc2FnZQ0KLSAgICAgICAgICBwdXNoLWlkICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLT4NCi0NCi08IS0tdGhpcyBtZXNzYWdlIGdvZXMgZnJvbSB0aGUgcHVzaCBwcm94eSBnYXRld2F5IHRvIHRoZSBQdXNoIEluaXRpYXRvci0tPg0KLQ0KLTwhRUxFTUVOVCBzdGF0dXNxdWVyeS1yZXNwb25zZSAoIHN0YXR1c3F1ZXJ5LXJlc3VsdCsgKSA+DQotPCFBVFRMSVNUIHN0YXR1c3F1ZXJ5LXJlc3BvbnNlDQotICAgICAgICAgIHB1c2gtaWQgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI1JFUVVJUkVEDQotPg0KLQ0KLTwhRUxFTUVOVCBzdGF0dXNxdWVyeS1yZXN1bHQgKCBhZGRyZXNzKiwgcXVhbGl0eS1vZi1zZXJ2aWNlPyApID4NCi08IUFUVExJU1Qgc3RhdHVzcXVlcnktcmVzdWx0DQotICAgICAgICAgIGV2ZW50LXRpbWUgICAgICAgICAgICAgJURhdGV0aW1lOyAgICAgICAgI0lNUExJRUQNCi0gICAgICAgICAgbWVzc2FnZS1zdGF0ZSAgICAgICAgICAlU3RhdGU7ICAgICAgICAgICAjUkVRVUlSRUQNCi0gICAgICAgICAgY29kZSAgICAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjUkVRVUlSRUQNCi0gICAgICAgICAgZGVzYyAgICAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLT4NCi0NCi0NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLSBEZWNsYXJhdGlvbiBvZiBjYXBhYmlsaXRpZXMgcXVlcnkgb3BlcmF0aW9uICAgIC0tPg0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi0NCi08IS0tdGhpcyBtZXNzYWdlIGdvZXMgZnJvbSB0aGUgUHVzaCBJbml0aWF0b3IgdG8gdGhlIHB1c2ggcHJveHkgZ2F0ZXdheS0tPg0KLQ0KLTwhRUxFTUVOVCBjY3EtbWVzc2FnZSAoIGFkZHJlc3MgKSA+DQotPCFBVFRMSVNUIGNjcS1tZXNzYWdlDQotICAgICAgICAgIHF1ZXJ5LWlkICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICAgICAgYXBwLWlkICAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLT4NCi0NCi08IS0tdGhpcyBtZXNzYWdlIGdvZXMgZnJvbSB0aGUgcHVzaCBwcm94eSBnYXRld2F5IHRvIHRoZSBQdXNoIEluaXRpYXRvci0tPg0KLQ0KLTwhRUxFTUVOVCBjY3EtcmVzcG9uc2UgKCBhZGRyZXNzICkgPg0KLTwhQVRUTElTVCBjY3EtcmVzcG9uc2UNCi0gICAgICAgICAgcXVlcnktaWQgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICBjb2RlICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICBkZXNjICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotPg0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tIERlY2xhcmF0aW9uIG9mIGJhZCBtZXNzYWdlIHJlc3BvbnNlIG1lc3NhZ2UgICAgLS0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLQ0KLQ0KLTwhLS10aGlzIG1lc3NhZ2UgZ29lcyBmcm9tIHRoZSBwdXNoIHByb3h5IGdhdGV3YXkgdG8gdGhlIFB1c2ggSW5pdGlhdG9yLS0+DQotDQotPCFFTEVNRU5UIGJhZG1lc3NhZ2UtcmVzcG9uc2UgRU1QVFkgPg0KLTwhQVRUTElTVCBiYWRtZXNzYWdlLXJlc3BvbnNlDQotCWNvZGUJCQlDREFUQQkjUkVRVUlSRUQNCi0JZGVzYwkJCUNEQVRBCSNJTVBMSUVEDQotCWJhZC1tZXNzYWdlLWZyYWdtZW50CUNEQVRBCSNJTVBMSUVEDQotPg0KLQ0KLTwhLS0NCi1Db3B5cmlnaHQgV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiwgMTk5OC0yMDAxLg0KLSAgICAgICAgICAgICAgICAgICAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgDQotLS0+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0xLTIvc2kuZHRkIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0xLTIvc2kuZHRkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlM2U5N2M1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMS0yL3NpLmR0ZAorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLTwhLS0NCi1TZXJ2aWNlIEluZGljYXRpb24gKFNJKSBEb2N1bWVudCBUeXBlIERlZmluaXRpb24uDQotDQotQ29weXJpZ2h0IFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4sIDE5OTgsMTk5OS4NCi0gICAgICAgICAgICAgICAgICAgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIA0KLQ0KLVNJIGlzIGFuIFhNTCBsYW5ndWFnZS4gIFR5cGljYWwgdXNhZ2U6DQotICAgPD94bWwgdmVyc2lvbj0iMS4wIj8+DQotICAgPCFET0NUWVBFIHNpIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBTSSAxLjAvL0VOIg0KLSAgICAgICAgICAgICAgICAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3NpLmR0ZCI+DQotICAgPHNpPg0KLSAgIC4uLg0KLSAgIDwvc2k+DQotDQotVGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlIGFyZSBhdmFpbGFibGUgZnJvbSB0aGUgV2lyZWxlc3MgDQotQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiB3ZWIgc2l0ZSBhdA0KLWh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL2RvY3MvY29weXJpZ2h0Lmh0bS4NCi0tLT4NCi0NCi0NCi08IUVOVElUWSAlIERhdGV0aW1lICJDREFUQSI+ICAgICAgICAgICAgIDwhLS0gSVNPIGRhdGUgYW5kIHRpbWUgLS0+DQotPCFFTlRJVFkgJSBVUkkgICAgICAiQ0RBVEEiPiAgICAgICAgICAgICA8IS0tIFVSSSBkZXNpZ25hdGluZyBhIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoeXBlcnRleHQgbm9kZSAgICAtLT4NCi0NCi0NCi08IS0tPT09PT09PT09PT09PT09PT09PT09PSBUaGUgU0kgRWxlbWVudCA9PT09PT09PT09PT09PT09PT09PT09LS0+DQotPCFFTEVNRU5UIHNpIChpbmRpY2F0aW9uLGluZm8/KT4NCi0NCi0NCi08IS0tPT09PT09PT09PT09PT09PT09IFRoZSBpbmRpY2F0aW9uIEVsZW1lbnQgPT09PT09PT09PT09PT09PT09LS0+DQotPCFFTEVNRU5UIGluZGljYXRpb24gKCNQQ0RBVEEpPg0KLTwhQVRUTElTVCBpbmRpY2F0aW9uDQotICBocmVmCSAgICAgICAgJVVSSTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotICBzaS1pZAkgICAgICAgIENEQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgY3JlYXRlZAklRGF0ZXRpbWU7CSAgICAgICAgICAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotICBzaS1leHBpcmVzCSVEYXRldGltZTsJICAgICAgICAgICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0gIGFjdGlvbgkoc2lnbmFsLW5vbmV8c2lnbmFsLWxvd3wNCi0gICAgICAgICAgICAgICAgIHNpZ25hbC1tZWRpdW18c2lnbmFsLWhpZ2h8ZGVsZXRlKSAgInNpZ25hbC1tZWRpdW0iIA0KLT4NCi0NCi0NCi08IS0tPT09PT09PT09PT09PT09PT09PT09IFRoZSBJTkZPIEVsZW1lbnQgPT09PT09PT09PT09PT09PT09PT09LS0+DQotPCFFTEVNRU5UIGluZm8gKGl0ZW0rKT4NCi0NCi08IUVMRU1FTlQgaXRlbSAoI1BDREFUQSk+DQotPCFBVFRMSVNUIGl0ZW0NCi0gIGNsYXNzCSAgICAgICAgTk1UT0tFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI1JFUVVJUkVEIA0KLT4NCi0NCi08IS0tDQotQ29weXJpZ2h0IFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4sIDE5OTgsMTk5OS4NCi0gICAgICAgICAgICAgICAgICAgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIA0KLS0tPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMS0yL3NsLmR0ZCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMS0yL3NsLmR0ZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjg3MzExYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTEtMi9zbC5kdGQKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi08IS0tDQotU2VydmljZSBMb2FkaW5nIChTTCkgRG9jdW1lbnQgVHlwZSBEZWZpbml0aW9uLg0KLQ0KLUNvcHlyaWdodCBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSBMdGQuLCAxOTk4LDE5OTkuDQotICAgICAgICAgICAgICAgICAgICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICANCi0NCi1TTCBpcyBhbiBYTUwgbGFuZ3VhZ2UuICBUeXBpY2FsIHVzYWdlOg0KLSAgIDw/eG1sIHZlcnNpb249IjEuMCI/Pg0KLSAgIDwhRE9DVFlQRSBzbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgU0wgMS4wLy9FTiINCi0gICAgICAgICAgICAgICAgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC9zbC5kdGQiPg0KLSAgIDxzbD4NCi0gICAuLi4NCi0gICA8L3NsPg0KLQ0KLVRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHVzZSBhcmUgYXZhaWxhYmxlIGZyb20gdGhlIFdpcmVsZXNzIA0KLUFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4gd2ViIHNpdGUgYXQNCi1odHRwOi8vd3d3LndhcGZvcnVtLm9yZy9kb2NzL2NvcHlyaWdodC5odG0uDQotLS0+DQotDQotPCFFTlRJVFkgJSBVUkkgIkNEQVRBIj4gICAgICAgICAgICAgICAgPCEtLSBVUkkgZGVzaWduYXRpbmcgYSANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh5cGVydGV4dCBub2RlICAgIC0tPg0KLQ0KLTwhLS09PT09PT09PT09PT09PT09PT09PT0gVGhlIFNMIEVsZW1lbnQgPT09PT09PT09PT09PT09PT09PT09LS0+DQotPCFFTEVNRU5UIHNsIEVNUFRZPg0KLTwhQVRUTElTVCBzbA0KLSAgaHJlZiAgICAgICAgICAlVVJJOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI1JFUVVJUkVEDQotICBhY3Rpb24gICAgICAgIChleGVjdXRlLWxvd3xleGVjdXRlLWhpZ2h8Y2FjaGUpICAgICJleGVjdXRlLWxvdyIgDQotPg0KLQ0KLTwhLS0NCi1Db3B5cmlnaHQgV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiwgMTk5OCwxOTk5Lg0KLSAgICAgICAgICAgICAgICAgICAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgDQotLS0+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0xLTIvd21sMTIuZHRkIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0xLTIvd21sMTIuZHRkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDAzYzYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMS0yL3dtbDEyLmR0ZAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMS0yL3d0YS13bWwxMi5kdGQgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTEtMi93dGEtd21sMTIuZHRkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjBmN2RmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMS0yL3d0YS13bWwxMi5kdGQKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi08IS0tDQotV2lyZWxlc3MgVGVsZXBob255IEFwcGxpY2F0aW9ucyBXaXJlbGVzcyBNYXJrdXAgTGFuZ3VhZ2UgKFdUQS1XTUwpIERvY3VtZW50IFR5cGUgRGVmaW5pdGlvbi4NCi1XVEEtV01MIGlzIGFuIFhNTCBsYW5ndWFnZS4gVHlwaWNhbCB1c2FnZToNCi08P3htbCB2ZXJzaW9uPSIxLjAiPz4NCi08IURPQ1RZUEUgd3RhLXdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV1RBLVdNTCAxLjIvL0VOIg0KLQkiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3d0YS13bWwxMi5kdGQiPg0KLTx3dGEtd21sPg0KLS4uLg0KLTwvd3RhLXdtbD4NCi0tLT4NCi0NCi08IUVOVElUWSAlIHdtbC1kdGQgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjIvL0VOIg0KLQkiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbDEyLmR0ZCI+DQotDQotJXdtbC1kdGQ7DQotDQotPCFFTEVNRU5UIHd0YS13bWwgKCBoZWFkPywgdGVtcGxhdGU/LCBjYXJkKyApPg0KLTwhQVRUTElTVCB3dGEtd21sDQotCXhtbDpsYW5nCQlOTVRPS0VOCSNJTVBMSUVEDQotCSVjb3JlYXR0cnM7DQotPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMi0wL2NoYW5uZWwxMi5kdGQgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC9jaGFubmVsMTIuZHRkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZjIxMDNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMi0wL2NoYW5uZWwxMi5kdGQKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08IS0tDQotICAgICAgVGhpcyBEVEQgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGlkZW50aWZpZXI6DQotICAgICAJIi0vL1dBUEZPUlVNLy9EVEQgQ0hBTk5FTCAxLjIvL0VOIg0KLS0tPg0KLQ0KLTwhRU5USVRZICUgQm9vbGVhbiAiKCB0cnVlIHwgZmFsc2UgKSI+DQotDQotPCEtLSBhIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciAtLT4NCi08IUVOVElUWSAlIFVSSSAiQ0RBVEEiID4NCi0NCi08IS0tIG9uZSBvciBtb3JlIGRpZ2l0cyAoTlVNQkVSKSAtLT4NCi08IUVOVElUWSAlIE51bWJlciAiQ0RBVEEiID4gIA0KLQ0KLTwhLS0gQ2hhbm5lbCBFdmVudHMgLS0+DQotPCFFTlRJVFkgJSBDaGFubmVsRXZlbnQuYXR0cmlicw0KLQkic3VjY2VzcwkJJVVSSTsJCSNJTVBMSUVEDQotCSBmYWlsdXJlCQklVVJJOwkJI0lNUExJRUQiDQotPg0KLQ0KLTwhRUxFTUVOVCBjaGFubmVsICh0aXRsZSAsIGFic3RyYWN0PyAsIHJlc291cmNlKiApID4NCi08IUFUVExJU1QgY2hhbm5lbA0KLQltYXhzcGFjZQkJJU51bWJlcjsJI1JFUVVJUkVEIA0KLQliYXNlCQkJJVVSSTsJCSNJTVBMSUVEDQotCWV2ZW50aWQJCQlDREFUQQkJI0lNUExJRUQNCi0JY2hhbm5lbGlkCQlDREFUQQkJI1JFUVVJUkVEIA0KLQl1c2VyYWNjZXNzaWJsZSAJCSVCb29sZWFuOwkiZmFsc2UiDQotCSVDaGFubmVsRXZlbnQuYXR0cmliczsNCi0+DQotDQotPCFFTEVNRU5UIHRpdGxlICgjUENEQVRBKT4NCi08IUVMRU1FTlQgYWJzdHJhY3QgKCNQQ0RBVEEpPg0KLQ0KLTwhRUxFTUVOVCByZXNvdXJjZSBFTVBUWT4NCi08IUFUVExJU1QgcmVzb3VyY2UNCi0JaHJlZiAgICAgIAklVVJJOwkgICAJI1JFUVVJUkVEDQotCWxhc3Rtb2QJCSVOdW1iZXI7CSNJTVBMSUVEDQotCWV0YWcJCU5NVE9LRU4JCSNJTVBMSUVEDQotCW1kNQkJTk1UT0tFTgkJI0lNUExJRUQNCi0+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAvcGFwXzIuMC5kdGQgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC9wYXBfMi4wLmR0ZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWY2ZThmZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC9wYXBfMi4wLmR0ZAorKysgL2Rldi9udWxsCkBAIC0xLDIyMyArMCwwIEBACi08IS0tDQotUHVzaCBBY2Nlc3MgUHJvdG9jb2wgKFBBUCkgdjIuMCBEb2N1bWVudCBUeXBlIERlZmluaXRpb24uDQotDQotQ29weXJpZ2h0IFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4sIDE5OTgtMjAwMS4NCi0gICAgICAgICAgICAgICAgICAgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIA0KLQ0KLVBBUCBpcyBhbiBYTUwgbGFuZ3VhZ2UuIFR5cGljYWwgdXNhZ2U6DQotICAgPD94bWwgdmVyc2lvbj0iMS4wIj8+DQotICAgPCFET0NUWVBFIHBhcCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgUEFQIDIuMC8vRU4iDQotICAgICAgICAgICAgICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvcGFwXzIuMC5kdGQiDQotICAgICAgICAgICAgIFs8P3dhcC1wYXAtdmVyIHN1cHBvcnRlZC12ZXJzaW9ucz0iMi4wLDEuKiI/Pl0+DQotICAgPHBhcD4NCi0gICAgICAuLi4NCi0gICA8L3BhcD4NCi0NCi1UZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UgYXJlIGF2YWlsYWJsZSBmcm9tIHRoZSBXaXJlbGVzcyANCi1BcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSBMdGQuIHdlYiBzaXRlIGF0DQotaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvZG9jcy9jb3B5cmlnaHQuaHRtLg0KLS0tPg0KLQ0KLTwhRU5USVRZICUgRGF0ZXRpbWUgIkNEQVRBIj4gICAgIDwhLS0gSVNPIGRhdGUgYW5kIHRpbWUgLS0+DQotPCFFTlRJVFkgJSBTdGF0ZSAgIihyZWplY3RlZCB8IHBlbmRpbmcgDQotICAgICAgICAgICAgICAgICAgfCBkZWxpdmVyZWQgfCB1bmRlbGl2ZXJhYmxlIA0KLSAgICAgICAgICAgICAgICAgIHwgZXhwaXJlZCB8IGFib3J0ZWQgDQotICAgICAgICAgICAgICAgICAgfCB0aW1lb3V0IHwgY2FuY2VsbGVkIHwgdW5rbm93bikiPiAgICAgICAgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBQUEcgTWVzc2FnZSBTdGF0ZSAtLT4NCi0NCi0NCi08IUVMRU1FTlQgcGFwICAgICAgICAgICAgICAgICAgICAoIHB1c2gtbWVzc2FnZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHVzaC1yZXNwb25zZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2FuY2VsLW1lc3NhZ2UNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNhbmNlbC1yZXNwb25zZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcmVzdWx0bm90aWZpY2F0aW9uLW1lc3NhZ2UNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHJlc3VsdG5vdGlmaWNhdGlvbi1yZXNwb25zZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc3RhdHVzcXVlcnktbWVzc2FnZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc3RhdHVzcXVlcnktcmVzcG9uc2UNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjcS1tZXNzYWdlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY3EtcmVzcG9uc2UgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBiYWRtZXNzYWdlLXJlc3BvbnNlKSA+DQotPCFBVFRMSVNUIHBhcA0KLSAgICAgICAgICBwcm9kdWN0LW5hbWUgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotPg0KLQ0KLQ0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLSBEZWNsYXJhdGlvbiBvZiBwdXNoIHN1Ym1pc3Npb24gbWVzc2FnZSAgICAtLT4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLQ0KLTwhLS10aGlzIG1lc3NhZ2UgZ29lcyBmcm9tIHRoZSBQdXNoIEluaXRpYXRvciB0byB0aGUgcHVzaCBwcm94eSBnYXRld2F5LS0+DQotDQotPCFFTEVNRU5UIHB1c2gtbWVzc2FnZSAoIGFkZHJlc3MrLCBxdWFsaXR5LW9mLXNlcnZpY2U/ICkgPg0KLTwhQVRUTElTVCBwdXNoLW1lc3NhZ2UNCi0gICAgICAgICAgcHVzaC1pZCAgICAgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI1JFUVVJUkVEDQotICAgICAgICAgIHJlcGxhY2UtcHVzaC1pZCAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgICAgIHJlcGxhY2UtbWV0aG9kICAgICAgICAgICAgICggcGVuZGluZy1vbmx5IA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFsbCApICAgICAgICAgICAiYWxsIg0KLSAgICAgICAgICBkZWxpdmVyLWJlZm9yZS10aW1lc3RhbXAgICAlRGF0ZXRpbWU7ICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICBkZWxpdmVyLWFmdGVyLXRpbWVzdGFtcCAgICAlRGF0ZXRpbWU7ICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICBzb3VyY2UtcmVmZXJlbmNlICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICBwcGctbm90aWZ5LXJlcXVlc3RlZC10byAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRCANCi0gICAgICAgICAgcHJvZ3Jlc3Mtbm90ZXMtcmVxdWVzdGVkICAgKCB0cnVlIHwgZmFsc2UgKSAgImZhbHNlIg0KLT4NCi0NCi08IUVMRU1FTlQgYWRkcmVzcyBFTVBUWSA+DQotPCFBVFRMSVNUIGFkZHJlc3MNCi0gICAgICAgICAgYWRkcmVzcy12YWx1ZSAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjUkVRVUlSRUQgDQotPg0KLQ0KLTwhRUxFTUVOVCBxdWFsaXR5LW9mLXNlcnZpY2UgRU1QVFkgPg0KLTwhQVRUTElTVCBxdWFsaXR5LW9mLXNlcnZpY2UNCi0gICAgICAgICAgcHJpb3JpdHkgICAgICAgICAgICAgICAoIGhpZ2ggfCBtZWRpdW0gfCBsb3cgKSAgICAgICAgIm1lZGl1bSINCi0gICAgICAgICAgZGVsaXZlcnktbWV0aG9kICAgICAgICAoIGNvbmZpcm1lZCB8IHByZWZlcmNvbmZpcm1lZCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHVuY29uZmlybWVkIHwgbm90c3BlY2lmaWVkICkgIm5vdHNwZWNpZmllZCINCi0gICAgICAgICAgbmV0d29yayAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICAgICAgbmV0d29yay1yZXF1aXJlZCAgICAgICAoIHRydWUgfCBmYWxzZSApICAgICAgICAgICAgICAgImZhbHNlIg0KLSAgICAgICAgICBiZWFyZXIgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICBiZWFyZXItcmVxdWlyZWQgICAgICAgICggdHJ1ZSB8IGZhbHNlICkgICAgICAgICAgICAgICAiZmFsc2UiDQotPg0KLQ0KLQ0KLQ0KLTwhLS10aGlzIG1lc3NhZ2UgZ29lcyBmcm9tIHRoZSBwdXNoIHByb3h5IGdhdGV3YXkgdG8gdGhlIFB1c2ggSW5pdGlhdG9yLS0+DQotDQotPCFFTEVNRU5UIHB1c2gtcmVzcG9uc2UgKCBwcm9ncmVzcy1ub3RlKiwgcmVzcG9uc2UtcmVzdWx0ICkgPg0KLTwhQVRUTElTVCBwdXNoLXJlc3BvbnNlDQotICAgICAgICAgIHB1c2gtaWQgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI1JFUVVJUkVEDQotICAgICAgICAgIHNlbmRlci1hZGRyZXNzICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICAgICAgc2VuZGVyLW5hbWUgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICByZXBseS10aW1lICAgICAgICAgICAgICVEYXRldGltZTsgICAgICAgICNJTVBMSUVEDQotPg0KLQ0KLTwhRUxFTUVOVCBwcm9ncmVzcy1ub3RlIEVNUFRZID4NCi08IUFUVExJU1QgcHJvZ3Jlc3Mtbm90ZQ0KLSAgICAgICAgICBzdGFnZSAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICBub3RlICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgICAgIHRpbWUgICAgICAgICAgICAgICAgICAgJURhdGV0aW1lOyAgICAgICAgI0lNUExJRUQNCi0+DQotDQotPCFFTEVNRU5UIHJlc3BvbnNlLXJlc3VsdCBFTVBUWSA+DQotPCFBVFRMSVNUIHJlc3BvbnNlLXJlc3VsdA0KLSAgICAgICAgICBjb2RlICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICBkZXNjICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotPg0KLQ0KLQ0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLSBEZWNsYXJhdGlvbiBvZiBjYW5jZWwgb3BlcmF0aW9uICAgICAgICAgICAtLT4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLQ0KLTwhLS10aGlzIG1lc3NhZ2UgZ29lcyBmcm9tIHRoZSBQdXNoIEluaXRpYXRvciB0byB0aGUgcHVzaCBwcm94eSBnYXRld2F5LS0+DQotDQotPCFFTEVNRU5UIGNhbmNlbC1tZXNzYWdlICggYWRkcmVzcyogKSA+DQotPCFBVFRMSVNUIGNhbmNlbC1tZXNzYWdlDQotICAgICAgICAgIHB1c2gtaWQgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI1JFUVVJUkVEDQotPg0KLQ0KLTwhLS10aGlzIG1lc3NhZ2UgZ29lcyBmcm9tIHRoZSBwdXNoIHByb3h5IGdhdGV3YXkgdG8gdGhlIFB1c2ggSW5pdGlhdG9yLS0+DQotDQotPCFFTEVNRU5UIGNhbmNlbC1yZXNwb25zZSAoIGNhbmNlbC1yZXN1bHQrICkgPg0KLTwhQVRUTElTVCBjYW5jZWwtcmVzcG9uc2UNCi0gICAgICAgICAgcHVzaC1pZCAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjUkVRVUlSRUQNCi0+DQotDQotPCFFTEVNRU5UIGNhbmNlbC1yZXN1bHQgKCBhZGRyZXNzKiApID4NCi08IUFUVExJU1QgY2FuY2VsLXJlc3VsdA0KLSAgICAgICAgICBjb2RlICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICBkZXNjICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotPg0KLQ0KLQ0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLSBEZWNsYXJhdGlvbiBvZiBub3RpZnkgcmVzdWx0IG9wZXJhdGlvbiAgICAtLT4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLQ0KLTwhLS10aGlzIG1lc3NhZ2UgZ29lcyBmcm9tIHRoZSBwdXNoIHByb3h5IGdhdGV3YXkgdG8gdGhlIFB1c2ggSW5pdGlhdG9yLS0+DQotDQotPCFFTEVNRU5UIHJlc3VsdG5vdGlmaWNhdGlvbi1tZXNzYWdlICggYWRkcmVzcywgcXVhbGl0eS1vZi1zZXJ2aWNlPyApID4NCi08IUFUVExJU1QgcmVzdWx0bm90aWZpY2F0aW9uLW1lc3NhZ2UNCi0gICAgICAgICAgcHVzaC1pZCAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjUkVRVUlSRUQNCi0gICAgICAgICAgc2VuZGVyLWFkZHJlc3MgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICBzZW5kZXItbmFtZSAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgICAgIHJlY2VpdmVkLXRpbWUgICAgICAgICAgJURhdGV0aW1lOyAgICAgICAgI0lNUExJRUQNCi0gICAgICAgICAgZXZlbnQtdGltZSAgICAgICAgICAgICAlRGF0ZXRpbWU7ICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICBtZXNzYWdlLXN0YXRlICAgICAgICAgICVTdGF0ZTsgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICBjb2RlICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICBkZXNjICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotPg0KLQ0KLTwhLS10aGlzIG1lc3NhZ2UgZ29lcyBmcm9tIHRoZSBQdXNoIEluaXRpYXRvciB0byB0aGUgcHVzaCBwcm94eSBnYXRld2F5LS0+DQotDQotPCFFTEVNRU5UIHJlc3VsdG5vdGlmaWNhdGlvbi1yZXNwb25zZSAoIGFkZHJlc3MgKSA+DQotPCFBVFRMSVNUIHJlc3VsdG5vdGlmaWNhdGlvbi1yZXNwb25zZQ0KLSAgICAgICAgICBwdXNoLWlkICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICBjb2RlICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICBkZXNjICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotPg0KLQ0KLQ0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLSBEZWNsYXJhdGlvbiBvZiBzdGF0dXNxdWVyeSBvcGVyYXRpb24gICAgICAtLT4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLQ0KLTwhLS10aGlzIG1lc3NhZ2UgZ29lcyBmcm9tIHRoZSBQdXNoIEluaXRpYXRvciB0byB0aGUgcHVzaCBwcm94eSBnYXRld2F5LS0+DQotDQotPCFFTEVNRU5UIHN0YXR1c3F1ZXJ5LW1lc3NhZ2UgKCBhZGRyZXNzKiApID4NCi08IUFUVExJU1Qgc3RhdHVzcXVlcnktbWVzc2FnZQ0KLSAgICAgICAgICBwdXNoLWlkICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLT4NCi0NCi08IS0tdGhpcyBtZXNzYWdlIGdvZXMgZnJvbSB0aGUgcHVzaCBwcm94eSBnYXRld2F5IHRvIHRoZSBQdXNoIEluaXRpYXRvci0tPg0KLQ0KLTwhRUxFTUVOVCBzdGF0dXNxdWVyeS1yZXNwb25zZSAoIHN0YXR1c3F1ZXJ5LXJlc3VsdCsgKSA+DQotPCFBVFRMSVNUIHN0YXR1c3F1ZXJ5LXJlc3BvbnNlDQotICAgICAgICAgIHB1c2gtaWQgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI1JFUVVJUkVEDQotPg0KLQ0KLTwhRUxFTUVOVCBzdGF0dXNxdWVyeS1yZXN1bHQgKCBhZGRyZXNzKiwgcXVhbGl0eS1vZi1zZXJ2aWNlPyApID4NCi08IUFUVExJU1Qgc3RhdHVzcXVlcnktcmVzdWx0DQotICAgICAgICAgIGV2ZW50LXRpbWUgICAgICAgICAgICAgJURhdGV0aW1lOyAgICAgICAgI0lNUExJRUQNCi0gICAgICAgICAgbWVzc2FnZS1zdGF0ZSAgICAgICAgICAlU3RhdGU7ICAgICAgICAgICAjUkVRVUlSRUQNCi0gICAgICAgICAgY29kZSAgICAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjUkVRVUlSRUQNCi0gICAgICAgICAgZGVzYyAgICAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLT4NCi0NCi0NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLSBEZWNsYXJhdGlvbiBvZiBjYXBhYmlsaXRpZXMgcXVlcnkgb3BlcmF0aW9uICAgIC0tPg0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi0NCi08IS0tdGhpcyBtZXNzYWdlIGdvZXMgZnJvbSB0aGUgUHVzaCBJbml0aWF0b3IgdG8gdGhlIHB1c2ggcHJveHkgZ2F0ZXdheS0tPg0KLQ0KLTwhRUxFTUVOVCBjY3EtbWVzc2FnZSAoIGFkZHJlc3MgKSA+DQotPCFBVFRMSVNUIGNjcS1tZXNzYWdlDQotICAgICAgICAgIHF1ZXJ5LWlkICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICAgICAgYXBwLWlkICAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLT4NCi0NCi08IS0tdGhpcyBtZXNzYWdlIGdvZXMgZnJvbSB0aGUgcHVzaCBwcm94eSBnYXRld2F5IHRvIHRoZSBQdXNoIEluaXRpYXRvci0tPg0KLQ0KLTwhRUxFTUVOVCBjY3EtcmVzcG9uc2UgKCBhZGRyZXNzICkgPg0KLTwhQVRUTElTVCBjY3EtcmVzcG9uc2UNCi0gICAgICAgICAgcXVlcnktaWQgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICBjb2RlICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICBkZXNjICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotPg0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tIERlY2xhcmF0aW9uIG9mIGJhZCBtZXNzYWdlIHJlc3BvbnNlIG1lc3NhZ2UgICAgLS0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLQ0KLQ0KLTwhLS10aGlzIG1lc3NhZ2UgZ29lcyBmcm9tIHRoZSBwdXNoIHByb3h5IGdhdGV3YXkgdG8gdGhlIFB1c2ggSW5pdGlhdG9yLS0+DQotDQotPCFFTEVNRU5UIGJhZG1lc3NhZ2UtcmVzcG9uc2UgRU1QVFkgPg0KLTwhQVRUTElTVCBiYWRtZXNzYWdlLXJlc3BvbnNlDQotICAgICAgICAgIGNvZGUgICAgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI1JFUVVJUkVEDQotICAgICAgICAgIGRlc2MgICAgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICAgICAgYmFkLW1lc3NhZ2UtZnJhZ21lbnQgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLT4NCi0NCi08IS0tDQotQ29weXJpZ2h0IFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4sIDE5OTgtMjAwMS4NCi0gICAgICAgICAgICAgICAgICAgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIA0KLS0tPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMi0wL3Byb3YuZHRkIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAvcHJvdi5kdGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiYzA0NmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAvcHJvdi5kdGQKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi08IS0tDQotQ2xpZW50IFByb3Zpc2lvbmluZyB2MS4wIERvY3VtZW50IFR5cGUgRGVmaW5pdGlvbi4NCi0NCi1Db3B5cmlnaHQgV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiwgMTk5OC0yMDAxLg0KLSAgICAgICAgICAgICAgICAgICAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgDQotDQotQ29ubmVjdGl2aXR5IERvY3VtZW50IFR5cGUgRGVmaW5pdGlvbg0KLUNvbm5lY3Rpdml0eSBpcyBhbiBYTUwgbGFuZ3VhZ2UuIFR5cGljYWwgVXNhZ2U6DQotDQotICAgPD94bWwgdmVyc2lvbj0iMS4wIj8+DQotICAgPCFET0NUWVBFIHdhcC1wcm92aXNpb25pbmdkb2MgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFBST1YgMS4wLy9FTiINCi0gICAgICAgICAgICAgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC9wcm92LmR0ZCI+DQotICAgICAgICAgICAgDQotPHdhcC1wcm92aXNpb25pbmdkb2M+DQotLi4uDQotPC93YXAtcHJvdmlzaW9uaW5nZG9jPg0KLQ0KLQ0KLVRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHVzZSBhcmUgYXZhaWxhYmxlIGZyb20gdGhlIFdpcmVsZXNzIA0KLUFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4gd2ViIHNpdGUgYXQNCi1odHRwOi8vd3d3LndhcGZvcnVtLm9yZy9kb2NzL2NvcHlyaWdodC5odG0uDQotLS0+DQotDQotPCFFTEVNRU5UIHdhcC1wcm92aXNpb25pbmdkb2MgKGNoYXJhY3RlcmlzdGljKyk+DQotPCFBVFRMSVNUIHdhcC1wcm92aXNpb25pbmdkb2MNCi0gIHZlcnNpb24gICBDREFUQSAjSU1QTElFRA0KLT4NCi0NCi08IUVMRU1FTlQgY2hhcmFjdGVyaXN0aWMgKHBhcm0qLCBjaGFyYWN0ZXJpc3RpYyopPg0KLTwhQVRUTElTVCBjaGFyYWN0ZXJpc3RpYw0KLSAgdHlwZSBDREFUQSAjUkVRVUlSRUQNCi0gDQotPg0KLQ0KLTwhRUxFTUVOVCBwYXJtIEVNUFRZPg0KLTwhQVRUTElTVCBwYXJtDQotICBuYW1lICBDREFUQSAjUkVRVUlSRUQNCi0gIHZhbHVlIENEQVRBICNJTVBMSUVEDQotPg0KLQ0KLQ0KLQ0KLTwhLS0NCi1Db3B5cmlnaHQgV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiwgMTk5OC0yMDAxLg0KLSAgICAgICAgICAgICAgICAgICAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgDQotLS0+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAvc2kuZHRkIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAvc2kuZHRkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlM2U5N2M1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMi0wL3NpLmR0ZAorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLTwhLS0NCi1TZXJ2aWNlIEluZGljYXRpb24gKFNJKSBEb2N1bWVudCBUeXBlIERlZmluaXRpb24uDQotDQotQ29weXJpZ2h0IFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4sIDE5OTgsMTk5OS4NCi0gICAgICAgICAgICAgICAgICAgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIA0KLQ0KLVNJIGlzIGFuIFhNTCBsYW5ndWFnZS4gIFR5cGljYWwgdXNhZ2U6DQotICAgPD94bWwgdmVyc2lvbj0iMS4wIj8+DQotICAgPCFET0NUWVBFIHNpIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBTSSAxLjAvL0VOIg0KLSAgICAgICAgICAgICAgICAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3NpLmR0ZCI+DQotICAgPHNpPg0KLSAgIC4uLg0KLSAgIDwvc2k+DQotDQotVGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlIGFyZSBhdmFpbGFibGUgZnJvbSB0aGUgV2lyZWxlc3MgDQotQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiB3ZWIgc2l0ZSBhdA0KLWh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL2RvY3MvY29weXJpZ2h0Lmh0bS4NCi0tLT4NCi0NCi0NCi08IUVOVElUWSAlIERhdGV0aW1lICJDREFUQSI+ICAgICAgICAgICAgIDwhLS0gSVNPIGRhdGUgYW5kIHRpbWUgLS0+DQotPCFFTlRJVFkgJSBVUkkgICAgICAiQ0RBVEEiPiAgICAgICAgICAgICA8IS0tIFVSSSBkZXNpZ25hdGluZyBhIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoeXBlcnRleHQgbm9kZSAgICAtLT4NCi0NCi0NCi08IS0tPT09PT09PT09PT09PT09PT09PT09PSBUaGUgU0kgRWxlbWVudCA9PT09PT09PT09PT09PT09PT09PT09LS0+DQotPCFFTEVNRU5UIHNpIChpbmRpY2F0aW9uLGluZm8/KT4NCi0NCi0NCi08IS0tPT09PT09PT09PT09PT09PT09IFRoZSBpbmRpY2F0aW9uIEVsZW1lbnQgPT09PT09PT09PT09PT09PT09LS0+DQotPCFFTEVNRU5UIGluZGljYXRpb24gKCNQQ0RBVEEpPg0KLTwhQVRUTElTVCBpbmRpY2F0aW9uDQotICBocmVmCSAgICAgICAgJVVSSTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotICBzaS1pZAkgICAgICAgIENEQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgY3JlYXRlZAklRGF0ZXRpbWU7CSAgICAgICAgICAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotICBzaS1leHBpcmVzCSVEYXRldGltZTsJICAgICAgICAgICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0gIGFjdGlvbgkoc2lnbmFsLW5vbmV8c2lnbmFsLWxvd3wNCi0gICAgICAgICAgICAgICAgIHNpZ25hbC1tZWRpdW18c2lnbmFsLWhpZ2h8ZGVsZXRlKSAgInNpZ25hbC1tZWRpdW0iIA0KLT4NCi0NCi0NCi08IS0tPT09PT09PT09PT09PT09PT09PT09IFRoZSBJTkZPIEVsZW1lbnQgPT09PT09PT09PT09PT09PT09PT09LS0+DQotPCFFTEVNRU5UIGluZm8gKGl0ZW0rKT4NCi0NCi08IUVMRU1FTlQgaXRlbSAoI1BDREFUQSk+DQotPCFBVFRMSVNUIGl0ZW0NCi0gIGNsYXNzCSAgICAgICAgTk1UT0tFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI1JFUVVJUkVEIA0KLT4NCi0NCi08IS0tDQotQ29weXJpZ2h0IFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4sIDE5OTgsMTk5OS4NCi0gICAgICAgICAgICAgICAgICAgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIA0KLS0tPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMi0wL3NsLmR0ZCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMi0wL3NsLmR0ZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjg3MzExYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC9zbC5kdGQKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi08IS0tDQotU2VydmljZSBMb2FkaW5nIChTTCkgRG9jdW1lbnQgVHlwZSBEZWZpbml0aW9uLg0KLQ0KLUNvcHlyaWdodCBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSBMdGQuLCAxOTk4LDE5OTkuDQotICAgICAgICAgICAgICAgICAgICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICANCi0NCi1TTCBpcyBhbiBYTUwgbGFuZ3VhZ2UuICBUeXBpY2FsIHVzYWdlOg0KLSAgIDw/eG1sIHZlcnNpb249IjEuMCI/Pg0KLSAgIDwhRE9DVFlQRSBzbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgU0wgMS4wLy9FTiINCi0gICAgICAgICAgICAgICAgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC9zbC5kdGQiPg0KLSAgIDxzbD4NCi0gICAuLi4NCi0gICA8L3NsPg0KLQ0KLVRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHVzZSBhcmUgYXZhaWxhYmxlIGZyb20gdGhlIFdpcmVsZXNzIA0KLUFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4gd2ViIHNpdGUgYXQNCi1odHRwOi8vd3d3LndhcGZvcnVtLm9yZy9kb2NzL2NvcHlyaWdodC5odG0uDQotLS0+DQotDQotPCFFTlRJVFkgJSBVUkkgIkNEQVRBIj4gICAgICAgICAgICAgICAgPCEtLSBVUkkgZGVzaWduYXRpbmcgYSANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh5cGVydGV4dCBub2RlICAgIC0tPg0KLQ0KLTwhLS09PT09PT09PT09PT09PT09PT09PT0gVGhlIFNMIEVsZW1lbnQgPT09PT09PT09PT09PT09PT09PT09LS0+DQotPCFFTEVNRU5UIHNsIEVNUFRZPg0KLTwhQVRUTElTVCBzbA0KLSAgaHJlZiAgICAgICAgICAlVVJJOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI1JFUVVJUkVEDQotICBhY3Rpb24gICAgICAgIChleGVjdXRlLWxvd3xleGVjdXRlLWhpZ2h8Y2FjaGUpICAgICJleGVjdXRlLWxvdyIgDQotPg0KLQ0KLTwhLS0NCi1Db3B5cmlnaHQgV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiwgMTk5OCwxOTk5Lg0KLSAgICAgICAgICAgICAgICAgICAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgDQotLS0+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAvd21sLWRlcHJlY2F0ZWQtMS5tb2QgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC93bWwtZGVwcmVjYXRlZC0xLm1vZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTI0YWQyZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC93bWwtZGVwcmVjYXRlZC0xLm1vZAorKysgL2Rldi9udWxsCkBAIC0xLDEwMyArMCwwIEBACi08IS0tIFdNTCBEZXByZWNhdGVkIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogd21sLWRlcHJlY2F0ZWQtMS5tb2QgLS0+DQotPCEtLSANCi0gICAgQFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtLCBMdGQuIDIwMDEuDQotDQotCVRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHVzZSBhcmUgYXZhaWxhYmxlIGZyb20gdGhlIFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4gDQotCVdlYiBzaXRlIChodHRwOi8vd3d3LndhcGZvcnVtLm9yZy93aGF0L2NvcHlyaWdodC5odG0pLg0KLS0tPg0KLTwhLS0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XQVBGT1JVTS8vRUxFTUVOVFMgV01MIERlcHJlY2F0ZWQgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJ3bWwtZGVwcmVjYXRlZC0xLm1vZCINCi0NCi0JVGhpcyBtb2R1bGUgY29udGFpbnMgZGVwcmVjYXRlZCBlbGVtZW50cyBhbmQgYXR0cmlidXRlcy4NCi0JDQotCQlBdHRyaWJ1dGVzOiBXTUwgbW9kZSwgWEhUTUwgYWxpZ24sIFhIVE1MIHZzcGFjZSwgWEhUTUwgaHNwYWNlDQotCQkNCi0JCUVsZW1lbnRzOiB1LCBiLCBiaWcsIGksIHNtYWxsIA0KLQkJDQotLS0+DQotPCEtLSANCi0JcCANCi0JDQotCSpXTUwgbW9kZQ0KLQkqWEhUTUwgYWxpZ24NCi0JDQotCVJlcGxhY2VtZW50OiBVc2UgQ1NTIHN0eWxlIHNoZWV0cyANCi0tLT4NCi08IUFUVExJU1QgJXAucW5hbWU7DQotCSVhdHQubW9kZS5xbmFtZTsgKHdyYXAgfCBub3dyYXApICNJTVBMSUVEDQotCWFsaWduIChsZWZ0IHwgcmlnaHQgfCBjZW50ZXIpICJsZWZ0Ig0KLT4NCi08IS0tIA0KLQl0YWJsZSANCi0JDQotCSpXTUwgYWxpZ24gDQotCQ0KLQlOb3RlOiBUaGUgV01MIGFsaWduIGF0dHJpYnV0ZSBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIFhIVE1MIGF0dHJpYnV0ZSB3aXRoIHRoZSBzYW1lIG5hbWUuDQotLS0+DQotPCFBVFRMSVNUICV0YWJsZS5xbmFtZTsNCi0JJWF0dC5hbGlnbi5xbmFtZTsgQ0RBVEEgI0lNUExJRUQNCi0+DQotPCEtLSANCi0JaW1nIA0KLQkNCi0JKlhIVE1MIHZzcGFjZSwgaHNwYWNlLCBhbGlnbg0KLQkNCi0JUmVwbGFjZW1lbnQ6IFVzZSBDU1Mgc3R5bGUgc2hlZXRzIA0KLS0tPg0KLTwhQVRUTElTVCBpbWcNCi0JdnNwYWNlIENEQVRBICIwIg0KLQloc3BhY2UgQ0RBVEEgIjAiDQotCWFsaWduICh0b3AgfCBtaWRkbGUgfCBib3R0b20pICJib3R0b20iDQotPg0KLTwhLS0gDQotCUlubGluZSBQcmVzZW50YXRpb24gDQotCQ0KLQkqWEhUTUwgIGIsIGJpZywgaSwgc21hbGwJDQotCQ0KLQlSZXBsYWNlbWVudDogVXNlIENTUyBzdHlsZSBzaGVldHMgDQotLS0+DQotPCFFTlRJVFkgJSBzdWIuZWxlbWVudCAiSUdOT1JFIj4NCi08IUVOVElUWSAlIHN1Yi5hdHRsaXN0ICJJR05PUkUiPg0KLTwhRU5USVRZICUgc3VwLmVsZW1lbnQgIklHTk9SRSI+DQotPCFFTlRJVFkgJSBzdXAuYXR0bGlzdCAiSUdOT1JFIj4NCi08IUVOVElUWSAlIHR0LmVsZW1lbnQgIklHTk9SRSI+DQotPCFFTlRJVFkgJSB0dC5hdHRsaXN0ICJJR05PUkUiPg0KLTwhRU5USVRZICUgeGh0bWwtaW5scHJlcy5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIElubGluZSBQcmVzZW50YXRpb24gMS4wLy9FTiINCi0JCSJ4aHRtbC1pbmxwcmVzLTEubW9kIj4NCi0leGh0bWwtaW5scHJlcy5tb2Q7DQotPCEtLSANCi0JdQ0KLQ0KLQlUaGlzIGVsZW1lbnQgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgWEhUTUwgaW5saW5lIHByZXNlbnRhdGlvbiBtb2R1bGUuDQotCUl0IHdhcyBkZXByZWNhdGVkIGFscmVhZHkgaW4gSFRNTCA0LjAuDQotCQ0KLQlSZXBsYWNlbWVudDogVXNlIENTUyBzdHlsZSBzaGVldHMgDQotLS0+DQotPCFFTlRJVFkgJSB1LmNvbnRlbnQgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiI+DQotPCFFTlRJVFkgJSB1LnFuYW1lICJ1Ij4NCi08IUVMRU1FTlQgJXUucW5hbWU7ICV1LmNvbnRlbnQ7Pg0KLTwhQVRUTElTVCAldS5xbmFtZTsNCi0JJUNvbW1vbi5hdHRyaWI7IA0KLT4NCi08IS0tIA0KLQltZXRhIA0KLQkNCi0JKldNTCBmb3J1YSBhdHRyaWJ1dGUNCi0tLT4NCi08IUFUVExJU1QgJW1ldGEucW5hbWU7DQotCSVhdHQuZm9ydWEucW5hbWU7ICVCb29sZWFuLmRhdGF0eXBlOyAidHJ1ZSINCi0+DQotPCEtLQ0KLQlodG1sDQotCQ0KLQkqV01MIHVzZS14bWwtZnJhZ21lbnQgYXR0cmlidXRlDQotLS0+DQotPCFBVFRMSVNUICVodG1sLnFuYW1lOw0KLQklYXR0LnVzZXhtbGZyYWdtZW50LnFuYW1lOyAJJUJvb2xlYW4uZGF0YXR5cGU7ICJ0cnVlIg0KLT4NCi0NCi0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC93bWwtZnJhbWV3b3JrLTEubW9kIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAvd21sLWZyYW1ld29yay0xLm1vZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDA2MWFmNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC93bWwtZnJhbWV3b3JrLTEubW9kCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotPCEtLSBXTUwgTW9kdWxhciBGcmFtZXdvcmsgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogd21sLWZyYW1ld29yay0xLm1vZCAtLT4NCi08IS0tIA0KLSAgICBAV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0sIEx0ZC4gMjAwMS4NCi0NCi0JVGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlIGFyZSBhdmFpbGFibGUgZnJvbSB0aGUgV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiANCi0JV2ViIHNpdGUgKGh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL3doYXQvY29weXJpZ2h0Lmh0bSkuDQotLS0+DQotPCEtLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1dBUEZPUlVNLy9FTlRJVElFUyBXTUwgTW9kdWxhciBGcmFtZXdvcmsgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9kdGQvd21sLWZyYW1ld29yay0xLm1vZCINCi0gICAgICAgDQotICAgICAgIFRoaXMgaXMgYW4gZXh0ZW5zaW9uIG9mIHRoZSBYSFRNTCBNb2R1bGFyIEZyYW1ld29yayBtb2R1bGUuIEluIGFkZGl0aW9uIHRvIHRoZSANCi0gICAgICAgcmVxdWlyZWQgWEhUTUwgZW50aXRpZXMgaXQgaW5jbHVkZXM6DQotICAgICAgIA0KLSAgICAgICAJCSpXTUwgZGF0YXR5cGVzDQotICAgICAgIAkJKldNTCBuYW1lc3BhY2UgcXVhbGlmaWVkIG5hbWVzDQotICAgICAgIAkJKldNTCBkb2N1bWVudCBtb2RlbCAgICAgICANCi0tLT4NCi08IS0tIA0KLQlYSFRNTCBub3RhdGlvbnMNCi0tLT4NCi08IUVOVElUWSAlIHhodG1sLW5vdGF0aW9ucy5tb2QgUFVCTElDICItLy9XM0MvL05PVEFUSU9OUyBYSFRNTCBOb3RhdGlvbnMgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLW5vdGF0aW9ucy0xLm1vZCI+DQotJXhodG1sLW5vdGF0aW9ucy5tb2Q7DQotPCEtLSANCi0JV01MIGRhdGF0eXBlcw0KLS0tPg0KLTwhRU5USVRZICUgQm9vbGVhbi5kYXRhdHlwZSAiKHRydWV8ZmFsc2UpIj4NCi08IS0tIA0KLQlYSFRNTCBkYXRhdHlwZXMNCi0tLT4NCi08IUVOVElUWSAlIHhodG1sLWRhdGF0eXBlcy5tb2QgUFVCTElDICItLy9XM0MvL0VOVElUSUVTIFhIVE1MIERhdGF0eXBlcyAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtZGF0YXR5cGVzLTEubW9kIj4NCi0leGh0bWwtZGF0YXR5cGVzLm1vZDsNCi08IS0tIA0KLQlXTUwgcXVhbGlmaWVkIG5hbWVzDQotLS0+DQotPCFFTlRJVFkgJSB3bWwtcW5hbWUubW9kIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0VOVElUSUVTIFdNTCBRdWFsaWZpZWQgTmFtZXMgMS4wLy9FTiINCi0gICAgICAgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWwtcW5hbWUtMS5tb2QiPg0KLSV3bWwtcW5hbWUubW9kOw0KLTwhLS0gDQotCVhIVE1MIHF1YWxpZmllZCBuYW1lcw0KLS0tPg0KLTwhRU5USVRZICUgeGh0bWwtcW5hbWUubW9kIFBVQkxJQyAiLS8vVzNDLy9FTlRJVElFUyBYSFRNTCBRdWFsaWZpZWQgTmFtZXMgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLXFuYW1lLTEubW9kIj4NCi0leGh0bWwtcW5hbWUubW9kOw0KLTwhLS0NCi0JWEhUTUwgZ2xvYmFsIGF0dHJpYnV0ZXMNCi0tLT4NCi08IUVOVElUWSAlIHhodG1sLWlubHN0eWxlLm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgSW5saW5lIFN0eWxlIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1pbmxzdHlsZS0xLm1vZCI+DQotJXhodG1sLWlubHN0eWxlLm1vZDsNCi08IUVOVElUWSAlIFhIVE1MLmJpZGkgIklHTk9SRSI+DQotPCFFTlRJVFkgJSB4aHRtbC1hdHRyaWJzLm1vZCBQVUJMSUMgIi0vL1czQy8vRU5USVRJRVMgWEhUTUwgQ29tbW9uIEF0dHJpYnV0ZXMgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWF0dHJpYnMtMS5tb2QiPg0KLSV4aHRtbC1hdHRyaWJzLm1vZDsNCi08IS0tIA0KLQlYSFRNTCBjaGFyYWN0ZXIgZW50aXRpZXMNCi0tLT4NCi08IUVOVElUWSAlIHhodG1sLWNoYXJlbnQubW9kIFBVQkxJQyAiLS8vVzNDLy9FTlRJVElFUyBYSFRNTCBDaGFyYWN0ZXIgRW50aXRpZXMgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWNoYXJlbnQtMS5tb2QiPg0KLSV4aHRtbC1jaGFyZW50Lm1vZDsNCi08IS0tIA0KLQlXTUwgZG9jdW1lbnQgbW9kZWwNCi0tLT4NCi08IUVOVElUWSAlIHdtbC1tb2RlbC5tb2QgUFVCTElDICItLy9XQVBGT1JVTS8vRU5USVRJRVMgV01MIDIuMCBEb2N1bWVudCBNb2RlbCAxLjAvL0VOIg0KLSAgICAgICAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbDIwLW1vZGVsLTEubW9kIj4NCi0ld21sLW1vZGVsLm1vZDsNCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC93bWwtcW5hbWUtMS5tb2QgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC93bWwtcW5hbWUtMS5tb2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllZjVhNTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAvd21sLXFuYW1lLTEubW9kCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotPCEtLSBXTUwgUXVhbGlmaWVkIE5hbWVzIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB3bWwtcW5hbWUtMS5tb2QgLS0+DQotPCEtLSANCi0gICAgQFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtLCBMdGQuIDIwMDEuDQotDQotCVRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHVzZSBhcmUgYXZhaWxhYmxlIGZyb20gdGhlIFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4gDQotCVdlYiBzaXRlIChodHRwOi8vd3d3LndhcGZvcnVtLm9yZy93aGF0L2NvcHlyaWdodC5odG0pLg0KLS0tPg0KLTwhLS0NCi0gICAgDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotCVBVQkxJQyAiLS8vV0FQRk9SVU0vL0VOVElUSUVTIFdNTCBRdWFsaWZpZWQgTmFtZXMgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJ3bWwtcW5hbWUtMS5tb2QiDQotDQotCVRoaXMgbW9kdWxlIGRlY2xhcmVzIFdNTCBuYW1lcyB3aXRoIHRoZSBXTUwgbmFtZXNwYWNlIHByZWZpeC4JDQotDQotLS0+DQotPCEtLQ0KLQlUaGUgV01MIG5hbWVzcGFjZSBuYW1lDQotLS0+DQotPCFFTlRJVFkgJSBXTUwueG1sbnMgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnLzIwMDEvd21sIj4NCi08IS0tDQotCVdNTCBuYW1lc3BhY2UgcHJlZml4DQotCQ0KLQlPbiBXTUwgZWxlbWVudHMgV01MIGlzIGRlY2xhcmVkIGFzIHRoZSBkZWZhdWx0IG5hbWVzcGFjZS4gDQotCU5hbWVzcGFjZSBwcmVmaXggaXMgdXNlZCBvbmx5IGZvciBXTUwgYXR0cmlidXRlcyBvbiBYSFRNTCBlbGVtZW50cy4NCi0tLT4NCi08IUVOVElUWSAlIFdNTC5wcmVmaXggIndtbCI+DQotPCEtLQ0KLQlQYXJhbWV0ZXIgZW50aXR5IHdpdGggdGhlIFdNTCBuYW1lc3BhY2UgcHJlZml4IHBsdXMgdGhlICI6Ii4gDQotCVRoZSBhY3R1YWwgcHJlZml4LCBXTUwucHJlZml4LCBpcyBkZWNsYXJlZCBpbiB0aGUgV01MIERURCBkcml2ZXIuIA0KLS0tPg0KLTwhRU5USVRZICUgV01MLnBmeCAiJVdNTC5wcmVmaXg7OiI+DQotPCEtLQ0KLQlBdHRyaWJ1dGUgdXNlZCB0byBkZWNsYXJlIHRoZSBXTUwgbmFtZXNwYWNlIHdpdGggdGhlIFdNTCBwcmVmaXguDQotLS0+DQotPCFFTlRJVFkgJSBXTUwueG1sbnMuZXh0cmEuYXR0cmliICJ4bWxuczolV01MLnByZWZpeDsJICVVUkkuZGF0YXR5cGU7IAkJI0ZJWEVEIAknJVdNTC54bWxuczsnIj4NCi08IS0tDQotCUFsbCBXTUwgcXVhbGlmaWVkIG5hbWVzLiANCi0JDQotCU5vdGUgdGhhdCBlbGVtZW50IG5hbWVzIGFyZSBub3QgcHJlZml4ZWQuIE9ubHkgYXR0cmlidXRlIG5hbWVzIGFyZS4NCi0tLT4NCi08IUVOVElUWSAlIGNhcmQucW5hbWUgIiVXTUwucGZ4O2NhcmQiPg0KLTwhRU5USVRZICUgZG8ucW5hbWUgIiVXTUwucGZ4O2RvIj4NCi08IUVOVElUWSAlIGFjY2Vzcy5xbmFtZSAiJVdNTC5wZng7YWNjZXNzIj4NCi08IUVOVElUWSAlIGdvLnFuYW1lICIlV01MLnBmeDtnbyI+DQotPCFFTlRJVFkgJSBwcmV2LnFuYW1lICIlV01MLnBmeDtwcmV2Ij4NCi08IUVOVElUWSAlIHJlZnJlc2gucW5hbWUgIiVXTUwucGZ4O3JlZnJlc2giPg0KLTwhRU5USVRZICUgbm9vcC5xbmFtZSAiJVdNTC5wZng7bm9vcCI+DQotPCFFTlRJVFkgJSBvbmV2ZW50LnFuYW1lICIlV01MLnBmeDtvbmV2ZW50Ij4NCi08IUVOVElUWSAlIHBvc3RmaWVsZC5xbmFtZSAiJVdNTC5wZng7cG9zdGZpZWxkIj4NCi08IUVOVElUWSAlIHNldHZhci5xbmFtZSAiJVdNTC5wZng7c2V0dmFyIj4NCi08IUVOVElUWSAlIGdldHZhci5xbmFtZSAiJVdNTC5wZng7Z2V0dmFyIj4NCi08IUVOVElUWSAlIHRpbWVyLnFuYW1lICIlV01MLnBmeDt0aW1lciI+DQotPCFFTlRJVFkgJSB3aWRnZXQucW5hbWUgIiVXTUwucGZ4O3dpZGdldCI+DQotPCFFTlRJVFkgJSBhbmNob3IucW5hbWUgIiVXTUwucGZ4O2FuY2hvciI+DQotPCFFTlRJVFkgJSBhdHQuZm9ydWEucW5hbWUgIiVXTUwucGZ4O2ZvcnVhIj4NCi08IUVOVElUWSAlIGF0dC52YWx1ZS5xbmFtZSAiJVdNTC5wZng7dmFsdWUiPg0KLTwhRU5USVRZICUgYXR0LmluYW1lLnFuYW1lICIlV01MLnBmeDtpbmFtZSI+DQotPCFFTlRJVFkgJSBhdHQubmFtZS5xbmFtZSAiJVdNTC5wZng7bmFtZSI+DQotPCFFTlRJVFkgJSBhdHQuaXZhbHVlLnFuYW1lICIlV01MLnBmeDtpdmFsdWUiPg0KLTwhRU5USVRZICUgYXR0LmZvcm1hdC5xbmFtZSAiJVdNTC5wZng7Zm9ybWF0Ij4NCi08IUVOVElUWSAlIGF0dC5lbXB0eW9rLnFuYW1lICIlV01MLnBmeDtlbXB0eW9rIj4NCi08IUVOVElUWSAlIGF0dC5sb2NhbHNyYy5xbmFtZSAiJVdNTC5wZng7bG9jYWxzcmMiPg0KLTwhRU5USVRZICUgYXR0LmNvbHVtbnMucW5hbWUgIiVXTUwucGZ4O2NvbHVtbnMiPg0KLTwhRU5USVRZICUgYXR0LmFsaWduLnFuYW1lICIlV01MLnBmeDthbGlnbiI+DQotPCFFTlRJVFkgJSBhdHQubW9kZS5xbmFtZSAiJVdNTC5wZng7bW9kZSI+DQotPCFFTlRJVFkgJSBhdHQub25lbnRlcmZvcndhcmQucW5hbWUgIiVXTUwucGZ4O29uZW50ZXJmb3J3YXJkIj4NCi08IUVOVElUWSAlIGF0dC5vbmVudGVyYmFja3dhcmQucW5hbWUgIiVXTUwucGZ4O29uZW50ZXJiYWNrd2FyZCI+DQotPCFFTlRJVFkgJSBhdHQub250aW1lci5xbmFtZSAiJVdNTC5wZng7b250aW1lciI+DQotPCFFTlRJVFkgJSBhdHQub25waWNrLnFuYW1lICIlV01MLnBmeDtvbnBpY2siPg0KLTwhRU5USVRZICUgYXR0Lm5ld2NvbnRleHQucW5hbWUgIiVXTUwucGZ4O25ld2NvbnRleHQiPg0KLTwhRU5USVRZICUgYXR0LnVzZXhtbGZyYWdtZW50LnFuYW1lICIlV01MLnBmeDt1c2UteG1sLWZyYWdtZW50cyI+DQotPCFFTlRJVFkgJSBhdHQudHlwZS5xbmFtZSAiJVdNTC5wZng7dHlwZSI+DQotPCEtLQ0KLQlUaGUgdSBlbGVtZW50IGlzIG5vdCBkZWNsYXJlZCBpbiBYSFRNTCwgYmVjYXVzZSBpdCBoYXMgYmVlZCByZW1vdmVkIGZyb20gdGhlIGxhbmd1YWdlLiANCi0JU28gaXQgbXVzdCBiZSBkZWNsYXJlZCBoZXJlLiBJdCBpcywgaG93ZXZlciwgZGVwcmVjYXRlZCBpbiBXTUwuIA0KLS0tPg0KLTwhRU5USVRZICUgdS5xbmFtZSAidSI+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAvd21sLXNwZWNpYWwtMS5tb2QgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC93bWwtc3BlY2lhbC0xLm1vZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQ4NTkxMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC93bWwtc3BlY2lhbC0xLm1vZAorKysgL2Rldi9udWxsCkBAIC0xLDI0OCArMCwwIEBACi08IS0tIFdNTCAyLjAgU3BlY2lhbCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHdtbC1zcGVjaWFsLTEubW9kIC0tPg0KLTwhLS0gDQotICAgIEBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSwgTHRkLiAyMDAxLg0KLQ0KLQlUZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UgYXJlIGF2YWlsYWJsZSBmcm9tIHRoZSBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSBMdGQuIA0KLQlXZWIgc2l0ZSAoaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvd2hhdC9jb3B5cmlnaHQuaHRtKS4NCi0tLT4NCi08IS0tDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0VMRU1FTlRTIFdNTCBTcGVjaWFsIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAid21sLXNwZWNpYWwtMS5tb2QiDQotDQotCVRoaXMgbW9kdWxlIGNvbnRhaW5zIGRlY2xhcmF0aW9ucyBvZiB0aGUgZm9sbG93aW5nIFdNTCBlbGVtZW50cy4gDQotCQ0KLQkJY2FyZCwgZG8sIG9uZXZlbnQsIGFjY2VzcywgZ28sIHByZXYsDQotCQlyZWZyZXNoLCBub29wLCAgcG9zdGZpZWxkLCBzZXR2YXIsIGdldHZhcg0KLQkJdGltZXIsIGFuY2hvcg0KLQkJDQotCUl0IGFsc28gY29udGFpbnMgV01MIGV4dGVuc2lvbnMgb2YgWEhUTUwgZWxlbWVudHMuIA0KLS0tPg0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLSANCi0JV01MIEdsb2JhbCBhdHRyaWJ1dGVzDQotLS0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tIA0KLQlXTUwgRXZlbnQgYXR0cmlidXRlcw0KLQkNCi0JVGhlc2UgYXJlIHVzZWQgb24gdGhlIFhIVE1MIGJvZHkgYW5kIGh0bWwgZWxlbWVudHMuDQotCVRoZSBzYW1lIGF0dHJpYnV0ZXMgYXJlIGFsc28gYXZhaWxhYmxlIG9uIHRoZSBXTUwgY2FyZCBlbGVtZW50LCBidXQNCi0Jd2l0aG91dCBuYW1lc3BhY2UgcHJlZml4Lg0KLS0tPg0KLTwhRU5USVRZICUgV01MLmV2ZW50LmF0dHJpYiAiJWF0dC5vbmVudGVyZm9yd2FyZC5xbmFtZTsgQ0RBVEEJI0lNUExJRUQNCi0gJWF0dC5vbmVudGVyYmFja3dhcmQucW5hbWU7IENEQVRBCSNJTVBMSUVEDQotICVhdHQub250aW1lci5xbmFtZTsgQ0RBVEEJI0lNUExJRUQiPg0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLSANCi0JV01MIEVsZW1lbnRzDQotLS0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tIA0KLQlDYXJkcyANCi0JDQotCVVzZSBzYW1lIGNvbnRlbnQgbW9kZWwgYXMgdGhlIEhUTUwgYm9keSBlbGVtZW50DQotLS0+DQotPCFFTEVNRU5UICVjYXJkLnFuYW1lOyAlQ2FyZEJvZHkubWl4Oz4NCi08IUFUVExJU1QgJWNhcmQucW5hbWU7DQotCSVDb21tb24uYXR0cmliOyANCi0JbmV3Y29udGV4dCAlQm9vbGVhbi5kYXRhdHlwZTsgImZhbHNlIg0KLQlvbmVudGVyZm9yd2FyZCBDREFUQSAjSU1QTElFRA0KLQlvbmVudGVyYmFja3dhcmQgQ0RBVEEgI0lNUExJRUQNCi0Jb250aW1lciBDREFUQSAjSU1QTElFRA0KLT4NCi08IS0tIA0KLQlEbyANCi0tLT4NCi08IUVMRU1FTlQgJWRvLnFuYW1lOyAoJVRhc2tzLmNsYXNzOyk+DQotPCFBVFRMSVNUICVkby5xbmFtZTsNCi0JJUNvbW1vbi5hdHRyaWI7IA0KLSAgCXR5cGUgICAgICAgICAgICAgQ0RBVEEgICAgICAgI1JFUVVJUkVEDQotICAJbGFiZWwgICAgICAgICAgICAgQ0RBVEEgICAgICAgI0lNUExJRUQNCi0+DQotPCEtLSANCi0JT25ldmVudCANCi0tLT4NCi08IUVMRU1FTlQgJW9uZXZlbnQucW5hbWU7ICVUYXNrcy5jbGFzczs+DQotPCFBVFRMSVNUICVvbmV2ZW50LnFuYW1lOw0KLQklQ29yZS5hdHRyaWI7IA0KLQl0eXBlIENEQVRBICNSRVFVSVJFRA0KLT4NCi08IS0tIA0KLQlBY2Nlc3MgDQotLS0+DQotPCFFTEVNRU5UICVhY2Nlc3MucW5hbWU7IEVNUFRZPg0KLTwhQVRUTElTVCAlYWNjZXNzLnFuYW1lOw0KLQklQ29yZS5hdHRyaWI7IA0KLQlkb21haW4gQ0RBVEEgI0lNUExJRUQNCi0JcGF0aCBDREFUQSAjSU1QTElFRA0KLT4NCi08IS0tIA0KLQlHbyANCi0tLT4NCi08IUVOVElUWSAlIGNhY2hlLWNvbnRyb2wgJyhuby1jYWNoZSknPg0KLTwhRUxFTUVOVCAlZ28ucW5hbWU7ICglcG9zdGZpZWxkLnFuYW1lOyB8ICVzZXR2YXIucW5hbWU7KSo+DQotPCFBVFRMSVNUICVnby5xbmFtZTsNCi0JJUNvcmUuYXR0cmliOyANCi0JaHJlZiAlVVJJLmRhdGF0eXBlOyAjUkVRVUlSRUQNCi0Jc2VuZHJlZmVyZXIgJUJvb2xlYW4uZGF0YXR5cGU7ICJmYWxzZSINCi0JdHlwZSAlQ29udGVudFR5cGUuZGF0YXR5cGU7ICNJTVBMSUVEDQotCW1ldGhvZCAocG9zdCB8IGdldCkgImdldCINCi0JZW5jdHlwZSAlQ29udGVudFR5cGUuZGF0YXR5cGU7ICJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiDQotCWFjY2VwdC1jaGFyc2V0IENEQVRBICNJTVBMSUVEDQotCWNhY2hlLWNvbnRyb2wgJWNhY2hlLWNvbnRyb2w7ICNJTVBMSUVEDQotPg0KLTwhLS0gDQotCVByZXYgDQotLS0+DQotPCFFTEVNRU5UICVwcmV2LnFuYW1lOyAoJXNldHZhci5xbmFtZTspKj4NCi08IUFUVExJU1QgJXByZXYucW5hbWU7DQotCSVDb3JlLmF0dHJpYjsgDQotPg0KLTwhLS0gDQotCVJlZnJlc2ggDQotLS0+DQotPCFFTEVNRU5UICVyZWZyZXNoLnFuYW1lOyAoJXNldHZhci5xbmFtZTspKj4NCi08IUFUVExJU1QgJXJlZnJlc2gucW5hbWU7DQotCSVDb3JlLmF0dHJpYjsgDQotPg0KLTwhLS0gDQotCU5vb3AgDQotLS0+DQotPCFFTEVNRU5UICVub29wLnFuYW1lOyBFTVBUWT4NCi08IUFUVExJU1QgJW5vb3AucW5hbWU7DQotCSVDb3JlLmF0dHJpYjsgDQotPg0KLTwhLS0gDQotCVBvc3RmaWVsZCANCi0tLT4NCi08IUVMRU1FTlQgJXBvc3RmaWVsZC5xbmFtZTsgRU1QVFk+DQotPCFBVFRMSVNUICVwb3N0ZmllbGQucW5hbWU7DQotCSVDb3JlLmF0dHJpYjsgDQotCW5hbWUgQ0RBVEEgI1JFUVVJUkVEDQotCXZhbHVlIENEQVRBICNSRVFVSVJFRA0KLT4NCi08IS0tIA0KLQlTZXR2YXIgDQotLS0+DQotPCFFTEVNRU5UICVzZXR2YXIucW5hbWU7IEVNUFRZPg0KLTwhQVRUTElTVCAlc2V0dmFyLnFuYW1lOw0KLQklQ29yZS5hdHRyaWI7IA0KLQluYW1lIENEQVRBICNSRVFVSVJFRA0KLQl2YWx1ZSBDREFUQSAjUkVRVUlSRUQNCi0+DQotPCEtLSANCi0JR2V0dmFyDQotLS0+DQotPCFFTEVNRU5UICVnZXR2YXIucW5hbWU7IEVNUFRZPg0KLTwhQVRUTElTVCAlZ2V0dmFyLnFuYW1lOw0KLQklQ29yZS5hdHRyaWI7IA0KLQluYW1lIENEQVRBICNSRVFVSVJFRA0KLQljb252ZXJzaW9uIChlc2NhcGUgfCBub2VzYyB8IHVuZXNjKSAibm9lc2MiDQotPg0KLTwhLS0gDQotCVRpbWVyICANCi0tLT4NCi08IUVMRU1FTlQgJXRpbWVyLnFuYW1lOyBFTVBUWT4NCi08IUFUVExJU1QgJXRpbWVyLnFuYW1lOw0KLQklQ29yZS5hdHRyaWI7IA0KLQluYW1lIE5NVE9LRU4gI0lNUExJRUQNCi0JdmFsdWUgQ0RBVEEgI1JFUVVJUkVEDQotPg0KLTwhLS0gDQotCUFuY2hvciANCi0JDQotCVNhbWUgY29udGVudCBtb2RlbCBhcyBIVE1MIGEgZWxlbWVudCwgYnV0IGV4dGVuZGVkIHdpdGggV01MIHRhc2tzLg0KLS0tPg0KLTwhRUxFTUVOVCAlYW5jaG9yLnFuYW1lOyAoI1BDREFUQSB8ICVJbmxOb0FuY2hvci5taXg7IHwgJVRhc2tzLW5vbm9vcC5jbGFzczspKj4NCi08IUFUVExJU1QgJWFuY2hvci5xbmFtZTsNCi0JJUNvbW1vbi5hdHRyaWI7IA0KLQlhY2Nlc3NrZXkgQ0RBVEEgI0lNUExJRUQNCi0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tIA0KLQlXTUwgZXh0ZW5zaW9ucyBvZiBYSFRNTCBlbGVtZW50cw0KLS0tPg0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLSANCi0Jc2VsZWN0IA0KLQkNCi0JKldNTCBpbmFtZSwgaXZhbHVlLCB2YWx1ZSwgYW5kIG5hbWUgYXR0cmlidXRlcw0KLQkqWEhUTUwgdGFiaW5kZXggKG5vdCBpbiBCYXNpYyBGb3JtcyBtb2R1bGUpDQotLS0+DQotPCFBVFRMSVNUICVzZWxlY3QucW5hbWU7DQotCSVhdHQuaW5hbWUucW5hbWU7IE5NVE9LRU4gI0lNUExJRUQNCi0JJWF0dC52YWx1ZS5xbmFtZTsgQ0RBVEEgI0lNUExJRUQNCi0JJWF0dC5pdmFsdWUucW5hbWU7IENEQVRBICNJTVBMSUVEDQotCSVhdHQubmFtZS5xbmFtZTsgQ0RBVEEgI0lNUExJRUQNCi0+DQotPCEtLSANCi0JaW5wdXQgDQotCQ0KLQkqV01MIGZvcm1hdCwgZW1wdHlvaywgYW5kIG5hbWUgYXR0cmlidXRlcw0KLQkqWEhUTUwgdGFiaW5kZXggKG5vdCBpbiBCYXNpYyBGb3JtcyBtb2R1bGUpDQotLS0+DQotPCFBVFRMSVNUICVpbnB1dC5xbmFtZTsNCi0JJWF0dC5mb3JtYXQucW5hbWU7IENEQVRBICNJTVBMSUVEDQotCSVhdHQuZW1wdHlvay5xbmFtZTsgJUJvb2xlYW4uZGF0YXR5cGU7ICNJTVBMSUVEDQotCSVhdHQubmFtZS5xbmFtZTsgQ0RBVEEgI0lNUExJRUQNCi0+DQotPCEtLSANCi0JdGV4dGFyZWENCi0JDQotCSpXTUwgZm9ybWF0LCBlbXB0eW9rLCBhbmQgbmFtZSBhdHRyaWJ1dGVzDQotCSpYSFRNTCB0YWJpbmRleCBhdHRyaWJ1dGUgKG5vdCBpbiBCYXNpYyBGb3JtcyBtb2R1bGUpDQotLS0+DQotPCFBVFRMSVNUICV0ZXh0YXJlYS5xbmFtZTsNCi0JJWF0dC5mb3JtYXQucW5hbWU7IENEQVRBICNJTVBMSUVEDQotCSVhdHQuZW1wdHlvay5xbmFtZTsgJUJvb2xlYW4uZGF0YXR5cGU7ICNJTVBMSUVEDQotCSVhdHQubmFtZS5xbmFtZTsgQ0RBVEEgI0lNUExJRUQNCi0+DQotPCEtLSANCi0Jb3B0aW9uDQotCQ0KLQkqV01MIG9ucGljayBhdHRyaWJ1dGUNCi0tLT4NCi08IUFUVExJU1QgJW9wdGlvbi5xbmFtZTsNCi0JJWF0dC5vbnBpY2sucW5hbWU7IENEQVRBICNJTVBMSUVEDQotPg0KLTwhLS0gDQotCWltZyANCi0NCi0JKldNTCBsb2NhbHNyYyBhdHRyaWJ1dGUNCi0tLT4NCi08IUFUVExJU1QgaW1nDQotCSVhdHQubG9jYWxzcmMucW5hbWU7IENEQVRBICNJTVBMSUVEDQotCSVhdHQudHlwZS5xbmFtZTsgJUNvbnRlbnRUeXBlLmRhdGF0eXBlOyAjSU1QTElFRA0KLT4NCi08IS0tIA0KLQl0YWJsZSANCi0JDQotCSpXTUwgY29sdW1ucyBhdHRyaWJ1dGUNCi0JDQotLS0+DQotPCFBVFRMSVNUICV0YWJsZS5xbmFtZTsNCi0JJWF0dC5jb2x1bW5zLnFuYW1lOyAlTnVtYmVyLmRhdGF0eXBlOyAjSU1QTElFRA0KLT4NCi08IS0tIA0KLQlib2R5IA0KLQkNCi0JKldNTCBuZXdjb250ZXh0IA0KLQkqV01MIGV2ZW50IGF0dHJpYnV0ZXMNCi0tLT4NCi08IUFUVExJU1QgJWJvZHkucW5hbWU7DQotCSVhdHQubmV3Y29udGV4dC5xbmFtZTsgJUJvb2xlYW4uZGF0YXR5cGU7ICJmYWxzZSINCi0JJVdNTC5ldmVudC5hdHRyaWI7IA0KLT4NCi08IS0tIA0KLQlodG1sIA0KLQkNCi0JKkRlY2xhcmF0aW9uIG9mIFdNTCBuYW1lc3BhY2Ugd2l0aCBwcmVmaXgJDQotCSpXTUwgZXZlbnQgYXR0cmlidXRlcw0KLS0tPg0KLTwhQVRUTElTVCAlaHRtbC5xbmFtZTsNCi0JJVdNTC54bWxucy5leHRyYS5hdHRyaWI7IA0KLQklV01MLmV2ZW50LmF0dHJpYjsgDQotPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMi0wL3dtbDIwLWZsYXQuZHRkIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAvd21sMjAtZmxhdC5kdGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwNTcwYTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAvd21sMjAtZmxhdC5kdGQKKysrIC9kZXYvbnVsbApAQCAtMSwzNjA5ICswLDAgQEAKLTwhLS0gV01MIDIuMCBEVEQgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHdtbDIwLmR0ZCAtLT4NCi08IS0tIA0KLSAgICBAV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0sIEx0ZC4gMjAwMS4NCi0NCi0JVGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlIGFyZSBhdmFpbGFibGUgZnJvbSB0aGUgV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiANCi0JV2ViIHNpdGUgKGh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL3doYXQvY29weXJpZ2h0Lmh0bSkuDQotLS0+DQotPCEtLQ0KLQlUaGlzIGlzIHRoZSBXTUwgMi4wIERURCBkcml2ZXIgZmlsZS4gUGxlYXNlIHVzZSB0aGlzIGZvcm1hbCBwdWJsaWMgaWRlbnRpZmllciB0byBpZGVudGlmeSBpdDoNCi0NCi0gICAgICAgICAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMi4wLy9FTiINCi0gICAgICAgICAgICAgICAgICAgCSAgICAgICAgICANCi0gICAgIEZvciBleGFtcGxlLCBpZiB5b3UgYXJlIHVzaW5nIFdNTCAyLjAgZGlyZWN0bHksIHVzZQ0KLSAgICAgdGhlIEZQSSBpbiB0aGUgRE9DVFlQRSBkZWNsYXJhdGlvbiwgd2l0aCB0aGUgeG1sbnMgYXR0cmlidXRlDQotICAgICBvbiB0aGUgZG9jdW1lbnQgZWxlbWVudCB0byBpZGVudGlmeSB0aGUgZGVmYXVsdCBuYW1lc3BhY2U6DQotDQotICAgICAgICAgPD94bWwgdmVyc2lvbj0iMS4wIj8+DQotICAgICAgICAgPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdNTCAyLjAvL0VOIg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvZHRkL3dtbDIwLmR0ZCIgPg0KLSAgICAgICAgIDxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIg0KLSAgICAgICAgICAgICAgICAgICB4bWxuczp3bWw9Imh0dHA6Ly93d3cud2FwZm9ydW0ub3JnLzIwMDEvd21sIj4NCi0gICAgICAgICAuLi4NCi0gICAgICAgICA8L2h0bWw+DQotDQotLS0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tDQotCQlWZXJzaW9uLCBYTUwgTmFtZXNwYWNlcywgYW5kIHByb2ZpbGUgaW5mb3JtYXRpb24gDQotLS0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tDQotCVZhbHVlIG9mIFhIVE1MIHZlcnNpb24gYXR0cmlidXRlIA0KLS0tPg0KLTwhRU5USVRZICUgWEhUTUwudmVyc2lvbiAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMi4wLy9FTiI+DQotPCEtLSANCi0JVmFsdWUgb2YgWEhUTUwgcHJvZmlsZSBhdHRyaWJ1dGUNCi0JDQotCVJlc2VydmVkIGZvciBmdXR1cmUgdXNlIHdpdGggZG9jdW1lbnQgcHJvZmlsZXMgDQotLS0+DQotPCFFTlRJVFkgJSBYSFRNTC5wcm9maWxlICIiPg0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLQ0KLQkJTW9kdWxhcmlzYXRpb24gZnJhbWV3b3JrIHNldHVwDQotLS0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IUVOVElUWSAlIHdtbC1mcmFtZXdvcmsubW9kIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0VOVElUSUVTIFdNTCBNb2R1bGFyIEZyYW1ld29yayAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sLWZyYW1ld29yay0xLm1vZCI+DQotPCEtLSBXTUwgTW9kdWxhciBGcmFtZXdvcmsgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogd21sLWZyYW1ld29yay0xLm1vZCAtLT4NCi08IS0tIA0KLSAgICBAV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0sIEx0ZC4gMjAwMS4NCi0NCi0JVGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlIGFyZSBhdmFpbGFibGUgZnJvbSB0aGUgV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiANCi0JV2ViIHNpdGUgKGh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL3doYXQvY29weXJpZ2h0Lmh0bSkuDQotLS0+DQotPCEtLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1dBUEZPUlVNLy9FTlRJVElFUyBXTUwgTW9kdWxhciBGcmFtZXdvcmsgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9kdGQvd21sLWZyYW1ld29yay0xLm1vZCINCi0gICAgICAgDQotICAgICAgIFRoaXMgaXMgYW4gZXh0ZW5zaW9uIG9mIHRoZSBYSFRNTCBNb2R1bGFyIEZyYW1ld29yayBtb2R1bGUuIEluIGFkZGl0aW9uIHRvIHRoZSANCi0gICAgICAgcmVxdWlyZWQgWEhUTUwgZW50aXRpZXMgaXQgaW5jbHVkZXM6DQotICAgICAgIA0KLSAgICAgICAJCSpXTUwgZGF0YXR5cGVzDQotICAgICAgIAkJKldNTCBuYW1lc3BhY2UgcXVhbGlmaWVkIG5hbWVzDQotICAgICAgIAkJKldNTCBkb2N1bWVudCBtb2RlbCAgICAgICANCi0tLT4NCi08IS0tIA0KLQlYSFRNTCBub3RhdGlvbnMNCi0tLT4NCi08IUVOVElUWSAlIHhodG1sLW5vdGF0aW9ucy5tb2QgUFVCTElDICItLy9XM0MvL05PVEFUSU9OUyBYSFRNTCBOb3RhdGlvbnMgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLW5vdGF0aW9ucy0xLm1vZCI+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgTm90YXRpb25zIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLW5vdGF0aW9ucy0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCwgYSByZWZvcm11bGF0aW9uIG9mIEhUTUwgYXMgYSBtb2R1bGFyIFhNTCBhcHBsaWNhdGlvbi4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJldmlzaW9uOiAkSWQ6IHdtbDIwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTggcGF2ZXJ5IEV4cCAkDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9OT1RBVElPTlMgWEhUTUwgTm90YXRpb25zIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLW5vdGF0aW9ucy0xLm1vZCINCi0NCi0gICAgIFJldmlzaW9uczoNCi0gICAgIChub25lKQ0KLSAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBOb3RhdGlvbnMNCi0NCi0gICAgIGRlZmluZXMgdGhlIGZvbGxvd2luZyBub3RhdGlvbnMsIG1hbnkgb2YgdGhlc2UgaW1wb3J0ZWQgZnJvbQ0KLSAgICAgb3RoZXIgc3BlY2lmaWNhdGlvbnMgYW5kIHN0YW5kYXJkcy4gV2hlbiBhbiBleGlzdGluZyBGUEkgaXMNCi0gICAgIGtub3duLCBpdCBpcyBpbmNvcnBvcmF0ZWQgaGVyZS4NCi0tLT4NCi0NCi08IS0tIFhNTCBOb3RhdGlvbnMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFNHTUwgYW5kIFhNTCBOb3RhdGlvbnMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIFczQyBYTUwgMS4wIFJlY29tbWVuZGF0aW9uIC0tPg0KLTwhTk9UQVRJT04gdzNjLXhtbA0KLSAgICAgUFVCTElDICJJU08gODg3OS8vTk9UQVRJT04gRXh0ZW5zaWJsZSBNYXJrdXAgTGFuZ3VhZ2UgKFhNTCkgMS4wLy9FTiIgPg0KLQ0KLTwhLS0gWE1MIDEuMCBDREFUQSAtLT4NCi08IU5PVEFUSU9OIGNkYXRhDQotICAgICBQVUJMSUMgIi0vL1czQy8vTk9UQVRJT04gWE1MIDEuMDogQ0RBVEEvL0VOIiA+DQotDQotPCEtLSBTR01MIEZvcm1hbCBQdWJsaWMgSWRlbnRpZmllcnMgLS0+DQotPCFOT1RBVElPTiBmcGkNCi0gICAgIFBVQkxJQyAiSVNPIDg4Nzk6MTk4Ni8vTk9UQVRJT04gRm9ybWFsIFB1YmxpYyBJZGVudGlmaWVyLy9FTiIgPg0KLQ0KLTwhLS0gWEhUTUwgTm90YXRpb25zIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gTGVuZ3RoIGRlZmluZWQgZm9yIGNlbGxwYWRkaW5nL2NlbGxzcGFjaW5nIC0tPg0KLQ0KLTwhLS0gbm4gZm9yIHBpeGVscyBvciBubiUgZm9yIHBlcmNlbnRhZ2UgbGVuZ3RoIC0tPg0KLTwhTk9UQVRJT04gbGVuZ3RoDQotICAgIFBVQkxJQyAiLS8vVzNDLy9OT1RBVElPTiBYSFRNTCBEYXRhdHlwZTogTGVuZ3RoLy9FTiIgPg0KLQ0KLTwhLS0gc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgbGluayB0eXBlcyAtLT4NCi08IU5PVEFUSU9OIGxpbmtUeXBlcw0KLSAgICBQVUJMSUMgIi0vL1czQy8vTk9UQVRJT04gWEhUTUwgRGF0YXR5cGU6IExpbmtUeXBlcy8vRU4iID4NCi0NCi08IS0tIHNpbmdsZSBvciBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBtZWRpYSBkZXNjcmlwdG9ycyAtLT4NCi08IU5PVEFUSU9OIG1lZGlhRGVzYw0KLSAgICBQVUJMSUMgIi0vL1czQy8vTk9UQVRJT04gWEhUTUwgRGF0YXR5cGU6IE1lZGlhRGVzYy8vRU4iID4NCi0NCi08IS0tIHBpeGVsLCBwZXJjZW50YWdlLCBvciByZWxhdGl2ZSAtLT4NCi08IU5PVEFUSU9OIG11bHRpTGVuZ3RoDQotICAgIFBVQkxJQyAiLS8vVzNDLy9OT1RBVElPTiBYSFRNTCBEYXRhdHlwZTogTXVsdGlMZW5ndGgvL0VOIiA+DQotDQotPCEtLSBvbmUgb3IgbW9yZSBkaWdpdHMgKE5VTUJFUikgLS0+DQotPCFOT1RBVElPTiBudW1iZXINCi0gICAgUFVCTElDICItLy9XM0MvL05PVEFUSU9OIFhIVE1MIERhdGF0eXBlOiBOdW1iZXIvL0VOIiA+DQotDQotPCEtLSBpbnRlZ2VyIHJlcHJlc2VudGluZyBsZW5ndGggaW4gcGl4ZWxzIC0tPg0KLTwhTk9UQVRJT04gcGl4ZWxzDQotICAgIFBVQkxJQyAiLS8vVzNDLy9OT1RBVElPTiBYSFRNTCBEYXRhdHlwZTogUGl4ZWxzLy9FTiIgPg0KLQ0KLTwhLS0gc2NyaXB0IGV4cHJlc3Npb24gLS0+DQotPCFOT1RBVElPTiBzY3JpcHQNCi0gICAgUFVCTElDICItLy9XM0MvL05PVEFUSU9OIFhIVE1MIERhdGF0eXBlOiBTY3JpcHQvL0VOIiA+DQotDQotPCEtLSB0ZXh0dWFsIGNvbnRlbnQgLS0+DQotPCFOT1RBVElPTiB0ZXh0DQotICAgIFBVQkxJQyAiLS8vVzNDLy9OT1RBVElPTiBYSFRNTCBEYXRhdHlwZTogVGV4dC8vRU4iID4NCi0NCi08IS0tIEltcG9ydGVkIE5vdGF0aW9ucyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIGEgc2luZ2xlIGNoYXJhY3RlciBmcm9tIFtJU08xMDY0Nl0gLS0+DQotPCFOT1RBVElPTiBjaGFyYWN0ZXINCi0gICAgUFVCTElDICItLy9XM0MvL05PVEFUSU9OIFhIVE1MIERhdGF0eXBlOiBDaGFyYWN0ZXIvL0VOIiA+DQotDQotPCEtLSBhIGNoYXJhY3RlciBlbmNvZGluZywgYXMgcGVyIFtSRkMyMDQ1XSAtLT4NCi08IU5PVEFUSU9OIGNoYXJzZXQNCi0gICAgUFVCTElDICItLy9XM0MvL05PVEFUSU9OIFhIVE1MIERhdGF0eXBlOiBDaGFyc2V0Ly9FTiIgPg0KLQ0KLTwhLS0gYSBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBjaGFyYWN0ZXIgZW5jb2RpbmdzLCBhcyBwZXIgW1JGQzIwNDVdIC0tPg0KLTwhTk9UQVRJT04gY2hhcnNldHMNCi0gICAgUFVCTElDICItLy9XM0MvL05PVEFUSU9OIFhIVE1MIERhdGF0eXBlOiBDaGFyc2V0cy8vRU4iID4NCi0NCi08IS0tIG1lZGlhIHR5cGUsIGFzIHBlciBbUkZDMjA0NV0gLS0+DQotPCFOT1RBVElPTiBjb250ZW50VHlwZQ0KLSAgICBQVUJMSUMgIi0vL1czQy8vTk9UQVRJT04gWEhUTUwgRGF0YXR5cGU6IENvbnRlbnRUeXBlLy9FTiIgPg0KLQ0KLTwhLS0gY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgbWVkaWEgdHlwZXMsIGFzIHBlciBbUkZDMjA0NV0gLS0+DQotPCFOT1RBVElPTiBjb250ZW50VHlwZXMNCi0gICAgUFVCTElDICItLy9XM0MvL05PVEFUSU9OIFhIVE1MIERhdGF0eXBlOiBDb250ZW50VHlwZXMvL0VOIiA+DQotDQotPCEtLSBkYXRlIGFuZCB0aW1lIGluZm9ybWF0aW9uLiBJU08gZGF0ZSBmb3JtYXQgLS0+DQotPCFOT1RBVElPTiBkYXRldGltZQ0KLSAgICBQVUJMSUMgIi0vL1czQy8vTk9UQVRJT04gWEhUTUwgRGF0YXR5cGU6IERhdGV0aW1lLy9FTiIgPg0KLQ0KLTwhLS0gYSBsYW5ndWFnZSBjb2RlLCBhcyBwZXIgW1JGQzMwNjZdIC0tPg0KLTwhTk9UQVRJT04gbGFuZ3VhZ2VDb2RlDQotICAgIFBVQkxJQyAiLS8vVzNDLy9OT1RBVElPTiBYSFRNTCBEYXRhdHlwZTogTGFuZ3VhZ2VDb2RlLy9FTiIgPg0KLQ0KLTwhLS0gYSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIsIHNlZSBbVVJJXSAtLT4NCi08IU5PVEFUSU9OIHVyaQ0KLSAgICBQVUJMSUMgIi0vL1czQy8vTk9UQVRJT04gWEhUTUwgRGF0YXR5cGU6IFVSSS8vRU4iID4NCi0NCi08IS0tIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVycywgc2VlIFtVUkldIC0tPg0KLTwhTk9UQVRJT04gdXJpcw0KLSAgICBQVUJMSUMgIi0vL1czQy8vTk9UQVRJT04gWEhUTUwgRGF0YXR5cGU6IFVSSXMvL0VOIiA+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtbm90YXRpb25zLTEubW9kIC0tPg0KLQ0KLTwhLS0gDQotCVdNTCBkYXRhdHlwZXMNCi0tLT4NCi08IUVOVElUWSAlIEJvb2xlYW4uZGF0YXR5cGUgIih0cnVlfGZhbHNlKSI+DQotPCEtLSANCi0JWEhUTUwgZGF0YXR5cGVzDQotLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1kYXRhdHlwZXMubW9kIFBVQkxJQyAiLS8vVzNDLy9FTlRJVElFUyBYSFRNTCBEYXRhdHlwZXMgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWRhdGF0eXBlcy0xLm1vZCI+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgRGF0YXR5cGVzIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLWRhdGF0eXBlcy0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCwgYSByZWZvcm11bGF0aW9uIG9mIEhUTUwgYXMgYSBtb2R1bGFyIFhNTCBhcHBsaWNhdGlvbi4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJldmlzaW9uOiAkSWQ6IHdtbDIwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTggcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRU5USVRJRVMgWEhUTUwgRGF0YXR5cGVzIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWRhdGF0eXBlcy0xLm1vZCINCi0NCi0gICAgIFJldmlzaW9uczoNCi0gICAgIChub25lKQ0KLSAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBEYXRhdHlwZXMNCi0NCi0gICAgIGRlZmluZXMgY29udGFpbmVycyBmb3IgdGhlIGZvbGxvd2luZyBkYXRhdHlwZXMsIG1hbnkgb2YNCi0gICAgIHRoZXNlIGltcG9ydGVkIGZyb20gb3RoZXIgc3BlY2lmaWNhdGlvbnMgYW5kIHN0YW5kYXJkcy4NCi0tLT4NCi0NCi08IS0tIExlbmd0aCBkZWZpbmVkIGZvciBjZWxscGFkZGluZy9jZWxsc3BhY2luZyAtLT4NCi0NCi08IS0tIG5uIGZvciBwaXhlbHMgb3Igbm4lIGZvciBwZXJjZW50YWdlIGxlbmd0aCAtLT4NCi08IUVOVElUWSAlIExlbmd0aC5kYXRhdHlwZSAiQ0RBVEEiID4NCi0NCi08IS0tIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIGxpbmsgdHlwZXMgLS0+DQotPCFFTlRJVFkgJSBMaW5rVHlwZXMuZGF0YXR5cGUgIk5NVE9LRU5TIiA+DQotDQotPCEtLSBzaW5nbGUgb3IgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgbWVkaWEgZGVzY3JpcHRvcnMgLS0+DQotPCFFTlRJVFkgJSBNZWRpYURlc2MuZGF0YXR5cGUgIkNEQVRBIiA+DQotDQotPCEtLSBwaXhlbCwgcGVyY2VudGFnZSwgb3IgcmVsYXRpdmUgLS0+DQotPCFFTlRJVFkgJSBNdWx0aUxlbmd0aC5kYXRhdHlwZSAiQ0RBVEEiID4NCi0NCi08IS0tIG9uZSBvciBtb3JlIGRpZ2l0cyAoTlVNQkVSKSAtLT4NCi08IUVOVElUWSAlIE51bWJlci5kYXRhdHlwZSAiQ0RBVEEiID4NCi0NCi08IS0tIGludGVnZXIgcmVwcmVzZW50aW5nIGxlbmd0aCBpbiBwaXhlbHMgLS0+DQotPCFFTlRJVFkgJSBQaXhlbHMuZGF0YXR5cGUgIkNEQVRBIiA+DQotDQotPCEtLSBzY3JpcHQgZXhwcmVzc2lvbiAtLT4NCi08IUVOVElUWSAlIFNjcmlwdC5kYXRhdHlwZSAiQ0RBVEEiID4NCi0NCi08IS0tIHRleHR1YWwgY29udGVudCAtLT4NCi08IUVOVElUWSAlIFRleHQuZGF0YXR5cGUgIkNEQVRBIiA+DQotDQotPCEtLSBJbXBvcnRlZCBEYXRhdHlwZXMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBhIHNpbmdsZSBjaGFyYWN0ZXIgZnJvbSBbSVNPMTA2NDZdIC0tPg0KLTwhRU5USVRZICUgQ2hhcmFjdGVyLmRhdGF0eXBlICJDREFUQSIgPg0KLQ0KLTwhLS0gYSBjaGFyYWN0ZXIgZW5jb2RpbmcsIGFzIHBlciBbUkZDMjA0NV0gLS0+DQotPCFFTlRJVFkgJSBDaGFyc2V0LmRhdGF0eXBlICJDREFUQSIgPg0KLQ0KLTwhLS0gYSBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBjaGFyYWN0ZXIgZW5jb2RpbmdzLCBhcyBwZXIgW1JGQzIwNDVdIC0tPg0KLTwhRU5USVRZICUgQ2hhcnNldHMuZGF0YXR5cGUgIkNEQVRBIiA+DQotDQotPCEtLSBDb2xvciBzcGVjaWZpY2F0aW9uIHVzaW5nIGNvbG9yIG5hbWUgb3Igc1JHQiAoI1JSR0dCQikgdmFsdWVzIC0tPg0KLTwhRU5USVRZICUgQ29sb3IuZGF0YXR5cGUgIkNEQVRBIiA+DQotDQotPCEtLSBtZWRpYSB0eXBlLCBhcyBwZXIgW1JGQzIwNDVdIC0tPg0KLTwhRU5USVRZICUgQ29udGVudFR5cGUuZGF0YXR5cGUgIkNEQVRBIiA+DQotDQotPCEtLSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBtZWRpYSB0eXBlcywgYXMgcGVyIFtSRkMyMDQ1XSAtLT4NCi08IUVOVElUWSAlIENvbnRlbnRUeXBlcy5kYXRhdHlwZSAiQ0RBVEEiID4NCi0NCi08IS0tIGRhdGUgYW5kIHRpbWUgaW5mb3JtYXRpb24uIElTTyBkYXRlIGZvcm1hdCAtLT4NCi08IUVOVElUWSAlIERhdGV0aW1lLmRhdGF0eXBlICJDREFUQSIgPg0KLQ0KLTwhLS0gZm9ybWFsIHB1YmxpYyBpZGVudGlmaWVyLCBhcyBwZXIgW0lTTzg4NzldIC0tPg0KLTwhRU5USVRZICUgRlBJLmRhdGF0eXBlICJDREFUQSIgPg0KLQ0KLTwhLS0gYSBsYW5ndWFnZSBjb2RlLCBhcyBwZXIgW1JGQzMwNjZdIC0tPg0KLTwhRU5USVRZICUgTGFuZ3VhZ2VDb2RlLmRhdGF0eXBlICJOTVRPS0VOIiA+DQotDQotPCEtLSBhIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciwgc2VlIFtVUkldIC0tPg0KLTwhRU5USVRZICUgVVJJLmRhdGF0eXBlICJDREFUQSIgPg0KLQ0KLTwhLS0gYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXJzLCBzZWUgW1VSSV0gLS0+DQotPCFFTlRJVFkgJSBVUklzLmRhdGF0eXBlICJDREFUQSIgPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLWRhdGF0eXBlcy0xLm1vZCAtLT4NCi0NCi08IS0tIA0KLQlXTUwgcXVhbGlmaWVkIG5hbWVzDQotLS0+DQotPCFFTlRJVFkgJSB3bWwtcW5hbWUubW9kIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0VOVElUSUVTIFdNTCBRdWFsaWZpZWQgTmFtZXMgMS4wLy9FTiINCi0gICAgICAgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWwtcW5hbWUtMS5tb2QiPg0KLTwhLS0gV01MIFF1YWxpZmllZCBOYW1lcyBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogd21sLXFuYW1lLTEubW9kIC0tPg0KLTwhLS0gDQotICAgIEBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSwgTHRkLiAyMDAxLg0KLQ0KLQlUZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UgYXJlIGF2YWlsYWJsZSBmcm9tIHRoZSBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSBMdGQuIA0KLQlXZWIgc2l0ZSAoaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvd2hhdC9jb3B5cmlnaHQuaHRtKS4NCi0tLT4NCi08IS0tDQotICAgIA0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLQlQVUJMSUMgIi0vL1dBUEZPUlVNLy9FTlRJVElFUyBXTUwgUXVhbGlmaWVkIE5hbWVzIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAid21sLXFuYW1lLTEubW9kIg0KLQ0KLQlUaGlzIG1vZHVsZSBkZWNsYXJlcyBXTUwgbmFtZXMgd2l0aCB0aGUgV01MIG5hbWVzcGFjZSBwcmVmaXguCQ0KLQ0KLS0tPg0KLTwhLS0NCi0JVGhlIFdNTCBuYW1lc3BhY2UgbmFtZQ0KLS0tPg0KLTwhRU5USVRZICUgV01MLnhtbG5zICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy8yMDAxL3dtbCI+DQotPCEtLQ0KLQlXTUwgbmFtZXNwYWNlIHByZWZpeA0KLQkNCi0JT24gV01MIGVsZW1lbnRzIFdNTCBpcyBkZWNsYXJlZCBhcyB0aGUgZGVmYXVsdCBuYW1lc3BhY2UuIA0KLQlOYW1lc3BhY2UgcHJlZml4IGlzIHVzZWQgb25seSBmb3IgV01MIGF0dHJpYnV0ZXMgb24gWEhUTUwgZWxlbWVudHMuDQotLS0+DQotPCFFTlRJVFkgJSBXTUwucHJlZml4ICJ3bWwiPg0KLTwhLS0NCi0JUGFyYW1ldGVyIGVudGl0eSB3aXRoIHRoZSBXTUwgbmFtZXNwYWNlIHByZWZpeCBwbHVzIHRoZSAiOiIuIA0KLQlUaGUgYWN0dWFsIHByZWZpeCwgV01MLnByZWZpeCwgaXMgZGVjbGFyZWQgaW4gdGhlIFdNTCBEVEQgZHJpdmVyLiANCi0tLT4NCi08IUVOVElUWSAlIFdNTC5wZnggIiVXTUwucHJlZml4OzoiPg0KLTwhLS0NCi0JQXR0cmlidXRlIHVzZWQgdG8gZGVjbGFyZSB0aGUgV01MIG5hbWVzcGFjZSB3aXRoIHRoZSBXTUwgcHJlZml4Lg0KLS0tPg0KLTwhRU5USVRZICUgV01MLnhtbG5zLmV4dHJhLmF0dHJpYiAieG1sbnM6JVdNTC5wcmVmaXg7CSAlVVJJLmRhdGF0eXBlOyAJCSNGSVhFRCAJJyVXTUwueG1sbnM7JyI+DQotPCEtLQ0KLQlBbGwgV01MIHF1YWxpZmllZCBuYW1lcy4gDQotCQ0KLQlOb3RlIHRoYXQgZWxlbWVudCBuYW1lcyBhcmUgbm90IHByZWZpeGVkLiBPbmx5IGF0dHJpYnV0ZSBuYW1lcyBhcmUuDQotLS0+DQotPCFFTlRJVFkgJSBjYXJkLnFuYW1lICIlV01MLnBmeDtjYXJkIj4NCi08IUVOVElUWSAlIGRvLnFuYW1lICIlV01MLnBmeDtkbyI+DQotPCFFTlRJVFkgJSBhY2Nlc3MucW5hbWUgIiVXTUwucGZ4O2FjY2VzcyI+DQotPCFFTlRJVFkgJSBnby5xbmFtZSAiJVdNTC5wZng7Z28iPg0KLTwhRU5USVRZICUgcHJldi5xbmFtZSAiJVdNTC5wZng7cHJldiI+DQotPCFFTlRJVFkgJSByZWZyZXNoLnFuYW1lICIlV01MLnBmeDtyZWZyZXNoIj4NCi08IUVOVElUWSAlIG5vb3AucW5hbWUgIiVXTUwucGZ4O25vb3AiPg0KLTwhRU5USVRZICUgb25ldmVudC5xbmFtZSAiJVdNTC5wZng7b25ldmVudCI+DQotPCFFTlRJVFkgJSBwb3N0ZmllbGQucW5hbWUgIiVXTUwucGZ4O3Bvc3RmaWVsZCI+DQotPCFFTlRJVFkgJSBzZXR2YXIucW5hbWUgIiVXTUwucGZ4O3NldHZhciI+DQotPCFFTlRJVFkgJSBnZXR2YXIucW5hbWUgIiVXTUwucGZ4O2dldHZhciI+DQotPCFFTlRJVFkgJSB0aW1lci5xbmFtZSAiJVdNTC5wZng7dGltZXIiPg0KLTwhRU5USVRZICUgd2lkZ2V0LnFuYW1lICIlV01MLnBmeDt3aWRnZXQiPg0KLTwhRU5USVRZICUgYW5jaG9yLnFuYW1lICIlV01MLnBmeDthbmNob3IiPg0KLTwhRU5USVRZICUgYXR0LmZvcnVhLnFuYW1lICIlV01MLnBmeDtmb3J1YSI+DQotPCFFTlRJVFkgJSBhdHQudmFsdWUucW5hbWUgIiVXTUwucGZ4O3ZhbHVlIj4NCi08IUVOVElUWSAlIGF0dC5pbmFtZS5xbmFtZSAiJVdNTC5wZng7aW5hbWUiPg0KLTwhRU5USVRZICUgYXR0Lm5hbWUucW5hbWUgIiVXTUwucGZ4O25hbWUiPg0KLTwhRU5USVRZICUgYXR0Lml2YWx1ZS5xbmFtZSAiJVdNTC5wZng7aXZhbHVlIj4NCi08IUVOVElUWSAlIGF0dC5mb3JtYXQucW5hbWUgIiVXTUwucGZ4O2Zvcm1hdCI+DQotPCFFTlRJVFkgJSBhdHQuZW1wdHlvay5xbmFtZSAiJVdNTC5wZng7ZW1wdHlvayI+DQotPCFFTlRJVFkgJSBhdHQubG9jYWxzcmMucW5hbWUgIiVXTUwucGZ4O2xvY2Fsc3JjIj4NCi08IUVOVElUWSAlIGF0dC5jb2x1bW5zLnFuYW1lICIlV01MLnBmeDtjb2x1bW5zIj4NCi08IUVOVElUWSAlIGF0dC5hbGlnbi5xbmFtZSAiJVdNTC5wZng7YWxpZ24iPg0KLTwhRU5USVRZICUgYXR0Lm1vZGUucW5hbWUgIiVXTUwucGZ4O21vZGUiPg0KLTwhRU5USVRZICUgYXR0Lm9uZW50ZXJmb3J3YXJkLnFuYW1lICIlV01MLnBmeDtvbmVudGVyZm9yd2FyZCI+DQotPCFFTlRJVFkgJSBhdHQub25lbnRlcmJhY2t3YXJkLnFuYW1lICIlV01MLnBmeDtvbmVudGVyYmFja3dhcmQiPg0KLTwhRU5USVRZICUgYXR0Lm9udGltZXIucW5hbWUgIiVXTUwucGZ4O29udGltZXIiPg0KLTwhRU5USVRZICUgYXR0Lm9ucGljay5xbmFtZSAiJVdNTC5wZng7b25waWNrIj4NCi08IUVOVElUWSAlIGF0dC5uZXdjb250ZXh0LnFuYW1lICIlV01MLnBmeDtuZXdjb250ZXh0Ij4NCi08IUVOVElUWSAlIGF0dC51c2V4bWxmcmFnbWVudC5xbmFtZSAiJVdNTC5wZng7dXNlLXhtbC1mcmFnbWVudHMiPg0KLTwhRU5USVRZICUgYXR0LnR5cGUucW5hbWUgIiVXTUwucGZ4O3R5cGUiPg0KLTwhLS0NCi0JVGhlIHUgZWxlbWVudCBpcyBub3QgZGVjbGFyZWQgaW4gWEhUTUwsIGJlY2F1c2UgaXQgaGFzIGJlZWQgcmVtb3ZlZCBmcm9tIHRoZSBsYW5ndWFnZS4gDQotCVNvIGl0IG11c3QgYmUgZGVjbGFyZWQgaGVyZS4gSXQgaXMsIGhvd2V2ZXIsIGRlcHJlY2F0ZWQgaW4gV01MLiANCi0tLT4NCi08IUVOVElUWSAlIHUucW5hbWUgInUiPg0KLQ0KLTwhLS0gDQotCVhIVE1MIHF1YWxpZmllZCBuYW1lcw0KLS0tPg0KLTwhRU5USVRZICUgeGh0bWwtcW5hbWUubW9kIFBVQkxJQyAiLS8vVzNDLy9FTlRJVElFUyBYSFRNTCBRdWFsaWZpZWQgTmFtZXMgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLXFuYW1lLTEubW9kIj4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgUW5hbWUgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1xbmFtZS0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCwgYSByZWZvcm11bGF0aW9uIG9mIEhUTUwgYXMgYSBtb2R1bGFyIFhNTCBhcHBsaWNhdGlvbi4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJldmlzaW9uOiAkSWQ6IHdtbDIwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTggcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRU5USVRJRVMgWEhUTUwgUXVhbGlmaWVkIE5hbWVzIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLXFuYW1lLTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSMyMDAwLTEwLTIyOiBhZGRlZCBxbmFtZSBkZWNsYXJhdGlvbnMgZm9yIHJ1YnkgZWxlbWVudHMNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gWEhUTUwgUW5hbWUgKFF1YWxpZmllZCBOYW1lKSBNb2R1bGUNCi0NCi0gICAgIFRoaXMgbW9kdWxlIGlzIGNvbnRhaW5lZCBpbiB0d28gcGFydHMsIGxhYmVsZWQgU2VjdGlvbiAnQScgYW5kICdCJzoNCi0NCi0gICAgICAgU2VjdGlvbiBBIGRlY2xhcmVzIHBhcmFtZXRlciBlbnRpdGllcyB0byBzdXBwb3J0IG5hbWVzcGFjZS0NCi0gICAgICAgcXVhbGlmaWVkIG5hbWVzLCBuYW1lc3BhY2UgZGVjbGFyYXRpb25zLCBhbmQgbmFtZSBwcmVmaXhpbmcNCi0gICAgICAgZm9yIFhIVE1MIGFuZCBleHRlbnNpb25zLg0KLQ0KLSAgICAgICBTZWN0aW9uIEIgZGVjbGFyZXMgcGFyYW1ldGVyIGVudGl0aWVzIHVzZWQgdG8gcHJvdmlkZQ0KLSAgICAgICBuYW1lc3BhY2UtcXVhbGlmaWVkIG5hbWVzIGZvciBhbGwgWEhUTUwgZWxlbWVudCB0eXBlczoNCi0NCi0gICAgICAgICAlYXBwbGV0LnFuYW1lOyAgIHRoZSB4bWxucy1xdWFsaWZpZWQgbmFtZSBmb3IgPGFwcGxldD4NCi0gICAgICAgICAlYmFzZS5xbmFtZTsgICAgIHRoZSB4bWxucy1xdWFsaWZpZWQgbmFtZSBmb3IgPGJhc2U+DQotICAgICAgICAgLi4uDQotDQotICAgICBYSFRNTCBleHRlbnNpb25zIHdvdWxkIGNyZWF0ZSBhIG1vZHVsZSBzaW1pbGFyIHRvIHRoaXMgb25lLg0KLSAgICAgSW5jbHVkZWQgaW4gdGhlIFhIVE1MIGRpc3RyaWJ1dGlvbiBpcyBhIHRlbXBsYXRlIG1vZHVsZQ0KLSAgICAgKCd0ZW1wbGF0ZS1xbmFtZS0xLm1vZCcpIHN1aXRhYmxlIGZvciB0aGlzIHB1cnBvc2UuDQotLS0+DQotDQotPCEtLSBTZWN0aW9uIEE6IFhIVE1MIFhNTCBOYW1lc3BhY2UgRnJhbWV3b3JrIDo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6IC0tPg0KLQ0KLTwhLS0gMS4gRGVjbGFyZSBhICVYSFRNTC5wcmVmaXhlZDsgY29uZGl0aW9uYWwgc2VjdGlvbiBrZXl3b3JkLCB1c2VkDQotICAgICAgICB0byBhY3RpdmF0ZSBuYW1lc3BhY2UgcHJlZml4aW5nLiBUaGUgZGVmYXVsdCB2YWx1ZSBzaG91bGQNCi0gICAgICAgIGluaGVyaXQgJyVOUy5wcmVmaXhlZDsnIGZyb20gdGhlIERURCBkcml2ZXIsIHNvIHRoYXQgdW5sZXNzDQotICAgICAgICBvdmVycmlkZGVuLCB0aGUgZGVmYXVsdCBiZWhhdmlvdXIgZm9sbG93cyB0aGUgb3ZlcmFsbCBEVEQNCi0gICAgICAgIHByZWZpeGluZyBzY2hlbWUuDQotLS0+DQotPCFFTlRJVFkgJSBOUy5wcmVmaXhlZCAiSUdOT1JFIiA+DQotPCFFTlRJVFkgJSBYSFRNTC5wcmVmaXhlZCAiJU5TLnByZWZpeGVkOyIgPg0KLQ0KLTwhLS0gMi4gRGVjbGFyZSBhIHBhcmFtZXRlciBlbnRpdHkgKGVnLiwgJVhIVE1MLnhtbG5zOykgY29udGFpbmluZw0KLSAgICAgICAgdGhlIFVSSSByZWZlcmVuY2UgdXNlZCB0byBpZGVudGlmeSB0aGUgWEhUTUwgbmFtZXNwYWNlOg0KLS0tPg0KLTwhRU5USVRZICUgWEhUTUwueG1sbnMgICJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiA+DQotDQotPCEtLSAzLiBEZWNsYXJlIHBhcmFtZXRlciBlbnRpdGllcyAoZWcuLCAlWEhUTUwucHJlZml4OykgY29udGFpbmluZw0KLSAgICAgICAgdGhlIGRlZmF1bHQgbmFtZXNwYWNlIHByZWZpeCBzdHJpbmcocykgdG8gdXNlIHdoZW4gcHJlZml4aW5nDQotICAgICAgICBpcyBlbmFibGVkLiBUaGlzIG1heSBiZSBvdmVycmlkZGVuIGluIHRoZSBEVEQgZHJpdmVyIG9yIHRoZQ0KLSAgICAgICAgaW50ZXJuYWwgc3Vic2V0IG9mIGFuIGRvY3VtZW50IGluc3RhbmNlLiBJZiBubyBkZWZhdWx0IHByZWZpeA0KLSAgICAgICAgaXMgZGVzaXJlZCwgdGhpcyBtYXkgYmUgZGVjbGFyZWQgYXMgYW4gZW1wdHkgc3RyaW5nLg0KLQ0KLSAgICAgTk9URTogQXMgc3BlY2lmaWVkIGluIFtYTUxOQU1FU10sIHRoZSBuYW1lc3BhY2UgcHJlZml4IHNlcnZlcw0KLSAgICAgYXMgYSBwcm94eSBmb3IgdGhlIFVSSSByZWZlcmVuY2UsIGFuZCBpcyBub3QgaW4gaXRzZWxmIHNpZ25pZmljYW50Lg0KLS0tPg0KLTwhRU5USVRZICUgWEhUTUwucHJlZml4ICAiIiA+DQotDQotPCEtLSA0LiBEZWNsYXJlIHBhcmFtZXRlciBlbnRpdGllcyAoZWcuLCAlWEhUTUwucGZ4OykgY29udGFpbmluZyB0aGUNCi0gICAgICAgIGNvbG9uaXplZCBwcmVmaXgoZXMpIChlZy4sICclWEhUTUwucHJlZml4OzonKSB1c2VkIHdoZW4NCi0gICAgICAgIHByZWZpeGluZyBpcyBhY3RpdmUsIGFuIGVtcHR5IHN0cmluZyB3aGVuIGl0IGlzIG5vdC4NCi0tLT4NCi08IVslWEhUTUwucHJlZml4ZWQ7Ww0KLTwhRU5USVRZICUgWEhUTUwucGZ4ICAiJVhIVE1MLnByZWZpeDs6IiA+DQotXV0+DQotPCFFTlRJVFkgJSBYSFRNTC5wZnggICIiID4NCi0NCi08IS0tIGRlY2xhcmUgcXVhbGlmaWVkIG5hbWUgZXh0ZW5zaW9ucyBoZXJlIC4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLXFuYW1lLWV4dHJhLm1vZCAiIiA+DQotDQotDQotPCEtLSA1LiBUaGUgcGFyYW1ldGVyIGVudGl0eSAlWEhUTUwueG1sbnMuZXh0cmEuYXR0cmliOyBtYXkgYmUNCi0gICAgICAgIHJlZGVjbGFyZWQgdG8gY29udGFpbiBhbnkgbm9uLVhIVE1MIG5hbWVzcGFjZSBkZWNsYXJhdGlvbg0KLSAgICAgICAgYXR0cmlidXRlcyBmb3IgbmFtZXNwYWNlcyBlbWJlZGRlZCBpbiBYSFRNTC4gVGhlIGRlZmF1bHQNCi0gICAgICAgIGlzIGFuIGVtcHR5IHN0cmluZy4gIFhMaW5rIHNob3VsZCBiZSBpbmNsdWRlZCBoZXJlIGlmIHVzZWQNCi0gICAgICAgIGluIHRoZSBEVEQuDQotLS0+DQotPCFFTlRJVFkgJSBYSFRNTC54bWxucy5leHRyYS5hdHRyaWIgIiIgPg0KLQ0KLTwhLS0gVGhlIHJlbWFpbmRlciBvZiBTZWN0aW9uIEEgaXMgb25seSBmb2xsb3dlZCBpbiBYSFRNTCwgbm90IGV4dGVuc2lvbnMuIC0tPg0KLQ0KLTwhLS0gRGVjbGFyZSBhIHBhcmFtZXRlciBlbnRpdHkgJU5TLmRlY2wuYXR0cmliOyBjb250YWluaW5nDQotICAgICBhbGwgWE1MIE5hbWVzcGFjZSBkZWNsYXJhdGlvbnMgdXNlZCBpbiB0aGUgRFRELCBwbHVzIHRoZQ0KLSAgICAgeG1sbnMgZGVjbGFyYXRpb24gZm9yIFhIVE1MLCBpdHMgZm9ybSBkZXBlbmRlbnQgb24gd2hldGhlcg0KLSAgICAgcHJlZml4aW5nIGlzIGFjdGl2ZS4NCi0tLT4NCi08IVslWEhUTUwucHJlZml4ZWQ7Ww0KLTwhRU5USVRZICUgTlMuZGVjbC5hdHRyaWINCi0gICAgICJ4bWxuczolWEhUTUwucHJlZml4OyAgJVVSSS5kYXRhdHlwZTsgICAjRklYRUQgJyVYSFRNTC54bWxuczsnDQotICAgICAgJVhIVE1MLnhtbG5zLmV4dHJhLmF0dHJpYjsiDQotPg0KLV1dPg0KLTwhRU5USVRZICUgTlMuZGVjbC5hdHRyaWINCi0gICAgICIlWEhUTUwueG1sbnMuZXh0cmEuYXR0cmliOyINCi0+DQotDQotPCEtLSBUaGlzIGlzIGEgcGxhY2Vob2xkZXIgZm9yIGZ1dHVyZSBYTGluayBzdXBwb3J0Lg0KLS0tPg0KLTwhRU5USVRZICUgWExJTksueG1sbnMuYXR0cmliICIiID4NCi0NCi08IS0tIERlY2xhcmUgYSBwYXJhbWV0ZXIgZW50aXR5ICVOUy5kZWNsLmF0dHJpYjsgY29udGFpbmluZyBhbGwNCi0gICAgIFhNTCBuYW1lc3BhY2UgZGVjbGFyYXRpb24gYXR0cmlidXRlcyB1c2VkIGJ5IFhIVE1MLCBpbmNsdWRpbmcNCi0gICAgIGEgZGVmYXVsdCB4bWxucyBhdHRyaWJ1dGUgd2hlbiBwcmVmaXhpbmcgaXMgaW5hY3RpdmUuDQotLS0+DQotPCFbJVhIVE1MLnByZWZpeGVkO1sNCi08IUVOVElUWSAlIFhIVE1MLnhtbG5zLmF0dHJpYg0KLSAgICAgIiVOUy5kZWNsLmF0dHJpYjsNCi0gICAgICAlWExJTksueG1sbnMuYXR0cmliOyINCi0+DQotXV0+DQotPCFFTlRJVFkgJSBYSFRNTC54bWxucy5hdHRyaWINCi0gICAgICJ4bWxucyAgICAgICAgJVVSSS5kYXRhdHlwZTsgICAgICAgICAgICNGSVhFRCAnJVhIVE1MLnhtbG5zOycNCi0gICAgICAlWExJTksueG1sbnMuYXR0cmliOyINCi0+DQotDQotPCEtLSBwbGFjZWhvbGRlciBmb3IgcXVhbGlmaWVkIG5hbWUgcmVkZWNsYXJhdGlvbnMgLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1xbmFtZS5yZWRlY2wgIiIgPg0KLQ0KLQ0KLTwhLS0gU2VjdGlvbiBCOiBYSFRNTCBRdWFsaWZpZWQgTmFtZXMgOjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6OjogLS0+DQotDQotPCEtLSA2LiBUaGlzIHNlY3Rpb24gZGVjbGFyZXMgcGFyYW1ldGVyIGVudGl0aWVzIHVzZWQgdG8gcHJvdmlkZQ0KLSAgICAgICAgbmFtZXNwYWNlLXF1YWxpZmllZCBuYW1lcyBmb3IgYWxsIFhIVE1MIGVsZW1lbnQgdHlwZXMuDQotLS0+DQotDQotPCEtLSBtb2R1bGU6ICB4aHRtbC1hcHBsZXQtMS5tb2QgLS0+DQotPCFFTlRJVFkgJSBhcHBsZXQucW5hbWUgICIlWEhUTUwucGZ4O2FwcGxldCIgPg0KLQ0KLTwhLS0gbW9kdWxlOiAgeGh0bWwtYmFzZS0xLm1vZCAtLT4NCi08IUVOVElUWSAlIGJhc2UucW5hbWUgICAgIiVYSFRNTC5wZng7YmFzZSIgPg0KLQ0KLTwhLS0gbW9kdWxlOiAgeGh0bWwtYmRvLTEubW9kIC0tPg0KLTwhRU5USVRZICUgYmRvLnFuYW1lICAgICAiJVhIVE1MLnBmeDtiZG8iID4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLWJsa3BocmFzLTEubW9kIC0tPg0KLTwhRU5USVRZICUgYWRkcmVzcy5xbmFtZSAiJVhIVE1MLnBmeDthZGRyZXNzIiA+DQotPCFFTlRJVFkgJSBibG9ja3F1b3RlLnFuYW1lICAiJVhIVE1MLnBmeDtibG9ja3F1b3RlIiA+DQotPCFFTlRJVFkgJSBwcmUucW5hbWUgICAgICIlWEhUTUwucGZ4O3ByZSIgPg0KLTwhRU5USVRZICUgaDEucW5hbWUgICAgICAiJVhIVE1MLnBmeDtoMSIgPg0KLTwhRU5USVRZICUgaDIucW5hbWUgICAgICAiJVhIVE1MLnBmeDtoMiIgPg0KLTwhRU5USVRZICUgaDMucW5hbWUgICAgICAiJVhIVE1MLnBmeDtoMyIgPg0KLTwhRU5USVRZICUgaDQucW5hbWUgICAgICAiJVhIVE1MLnBmeDtoNCIgPg0KLTwhRU5USVRZICUgaDUucW5hbWUgICAgICAiJVhIVE1MLnBmeDtoNSIgPg0KLTwhRU5USVRZICUgaDYucW5hbWUgICAgICAiJVhIVE1MLnBmeDtoNiIgPg0KLQ0KLTwhLS0gbW9kdWxlOiAgeGh0bWwtYmxrcHJlcy0xLm1vZCAtLT4NCi08IUVOVElUWSAlIGhyLnFuYW1lICAgICAgIiVYSFRNTC5wZng7aHIiID4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLWJsa3N0cnVjdC0xLm1vZCAtLT4NCi08IUVOVElUWSAlIGRpdi5xbmFtZSAgICAgIiVYSFRNTC5wZng7ZGl2IiA+DQotPCFFTlRJVFkgJSBwLnFuYW1lICAgICAgICIlWEhUTUwucGZ4O3AiID4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLWVkaXQtMS5tb2QgLS0+DQotPCFFTlRJVFkgJSBpbnMucW5hbWUgICAgICIlWEhUTUwucGZ4O2lucyIgPg0KLTwhRU5USVRZICUgZGVsLnFuYW1lICAgICAiJVhIVE1MLnBmeDtkZWwiID4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLWZvcm0tMS5tb2QgLS0+DQotPCFFTlRJVFkgJSBmb3JtLnFuYW1lICAgICIlWEhUTUwucGZ4O2Zvcm0iID4NCi08IUVOVElUWSAlIGxhYmVsLnFuYW1lICAgIiVYSFRNTC5wZng7bGFiZWwiID4NCi08IUVOVElUWSAlIGlucHV0LnFuYW1lICAgIiVYSFRNTC5wZng7aW5wdXQiID4NCi08IUVOVElUWSAlIHNlbGVjdC5xbmFtZSAgIiVYSFRNTC5wZng7c2VsZWN0IiA+DQotPCFFTlRJVFkgJSBvcHRncm91cC5xbmFtZSAgIiVYSFRNTC5wZng7b3B0Z3JvdXAiID4NCi08IUVOVElUWSAlIG9wdGlvbi5xbmFtZSAgIiVYSFRNTC5wZng7b3B0aW9uIiA+DQotPCFFTlRJVFkgJSB0ZXh0YXJlYS5xbmFtZSAgIiVYSFRNTC5wZng7dGV4dGFyZWEiID4NCi08IUVOVElUWSAlIGZpZWxkc2V0LnFuYW1lICAiJVhIVE1MLnBmeDtmaWVsZHNldCIgPg0KLTwhRU5USVRZICUgbGVnZW5kLnFuYW1lICAiJVhIVE1MLnBmeDtsZWdlbmQiID4NCi08IUVOVElUWSAlIGJ1dHRvbi5xbmFtZSAgIiVYSFRNTC5wZng7YnV0dG9uIiA+DQotDQotPCEtLSBtb2R1bGU6ICB4aHRtbC1oeXBlcnRleHQtMS5tb2QgLS0+DQotPCFFTlRJVFkgJSBhLnFuYW1lICAgICAgICIlWEhUTUwucGZ4O2EiID4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLWltYWdlLTEubW9kIC0tPg0KLTwhRU5USVRZICUgaW1nLnFuYW1lICAgICAiJVhIVE1MLnBmeDtpbWciID4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLWlubHBocmFzLTEubW9kIC0tPg0KLTwhRU5USVRZICUgYWJici5xbmFtZSAgICAiJVhIVE1MLnBmeDthYmJyIiA+DQotPCFFTlRJVFkgJSBhY3JvbnltLnFuYW1lICIlWEhUTUwucGZ4O2Fjcm9ueW0iID4NCi08IUVOVElUWSAlIGNpdGUucW5hbWUgICAgIiVYSFRNTC5wZng7Y2l0ZSIgPg0KLTwhRU5USVRZICUgY29kZS5xbmFtZSAgICAiJVhIVE1MLnBmeDtjb2RlIiA+DQotPCFFTlRJVFkgJSBkZm4ucW5hbWUgICAgICIlWEhUTUwucGZ4O2RmbiIgPg0KLTwhRU5USVRZICUgZW0ucW5hbWUgICAgICAiJVhIVE1MLnBmeDtlbSIgPg0KLTwhRU5USVRZICUga2JkLnFuYW1lICAgICAiJVhIVE1MLnBmeDtrYmQiID4NCi08IUVOVElUWSAlIHEucW5hbWUgICAgICAgIiVYSFRNTC5wZng7cSIgPg0KLTwhRU5USVRZICUgc2FtcC5xbmFtZSAgICAiJVhIVE1MLnBmeDtzYW1wIiA+DQotPCFFTlRJVFkgJSBzdHJvbmcucW5hbWUgICIlWEhUTUwucGZ4O3N0cm9uZyIgPg0KLTwhRU5USVRZICUgdmFyLnFuYW1lICAgICAiJVhIVE1MLnBmeDt2YXIiID4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLWlubHByZXMtMS5tb2QgLS0+DQotPCFFTlRJVFkgJSBiLnFuYW1lICAgICAgICIlWEhUTUwucGZ4O2IiID4NCi08IUVOVElUWSAlIGJpZy5xbmFtZSAgICAgIiVYSFRNTC5wZng7YmlnIiA+DQotPCFFTlRJVFkgJSBpLnFuYW1lICAgICAgICIlWEhUTUwucGZ4O2kiID4NCi08IUVOVElUWSAlIHNtYWxsLnFuYW1lICAgIiVYSFRNTC5wZng7c21hbGwiID4NCi08IUVOVElUWSAlIHN1Yi5xbmFtZSAgICAgIiVYSFRNTC5wZng7c3ViIiA+DQotPCFFTlRJVFkgJSBzdXAucW5hbWUgICAgICIlWEhUTUwucGZ4O3N1cCIgPg0KLTwhRU5USVRZICUgdHQucW5hbWUgICAgICAiJVhIVE1MLnBmeDt0dCIgPg0KLQ0KLTwhLS0gbW9kdWxlOiAgeGh0bWwtaW5sc3RydWN0LTEubW9kIC0tPg0KLTwhRU5USVRZICUgYnIucW5hbWUgICAgICAiJVhIVE1MLnBmeDticiIgPg0KLTwhRU5USVRZICUgc3Bhbi5xbmFtZSAgICAiJVhIVE1MLnBmeDtzcGFuIiA+DQotDQotPCEtLSBtb2R1bGU6ICB4aHRtbC1pc21hcC0xLm1vZCAoYWxzbyBjc2lzbWFwLCBzc2lzbWFwKSAtLT4NCi08IUVOVElUWSAlIG1hcC5xbmFtZSAgICAgIiVYSFRNTC5wZng7bWFwIiA+DQotPCFFTlRJVFkgJSBhcmVhLnFuYW1lICAgICIlWEhUTUwucGZ4O2FyZWEiID4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLWxpbmstMS5tb2QgLS0+DQotPCFFTlRJVFkgJSBsaW5rLnFuYW1lICAgICIlWEhUTUwucGZ4O2xpbmsiID4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLWxpc3QtMS5tb2QgLS0+DQotPCFFTlRJVFkgJSBkbC5xbmFtZSAgICAgICIlWEhUTUwucGZ4O2RsIiA+DQotPCFFTlRJVFkgJSBkdC5xbmFtZSAgICAgICIlWEhUTUwucGZ4O2R0IiA+DQotPCFFTlRJVFkgJSBkZC5xbmFtZSAgICAgICIlWEhUTUwucGZ4O2RkIiA+DQotPCFFTlRJVFkgJSBvbC5xbmFtZSAgICAgICIlWEhUTUwucGZ4O29sIiA+DQotPCFFTlRJVFkgJSB1bC5xbmFtZSAgICAgICIlWEhUTUwucGZ4O3VsIiA+DQotPCFFTlRJVFkgJSBsaS5xbmFtZSAgICAgICIlWEhUTUwucGZ4O2xpIiA+DQotDQotPCEtLSBtb2R1bGU6ICB4aHRtbC1tZXRhLTEubW9kIC0tPg0KLTwhRU5USVRZICUgbWV0YS5xbmFtZSAgICAiJVhIVE1MLnBmeDttZXRhIiA+DQotDQotPCEtLSBtb2R1bGU6ICB4aHRtbC1wYXJhbS0xLm1vZCAtLT4NCi08IUVOVElUWSAlIHBhcmFtLnFuYW1lICAgIiVYSFRNTC5wZng7cGFyYW0iID4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLW9iamVjdC0xLm1vZCAtLT4NCi08IUVOVElUWSAlIG9iamVjdC5xbmFtZSAgIiVYSFRNTC5wZng7b2JqZWN0IiA+DQotDQotPCEtLSBtb2R1bGU6ICB4aHRtbC1zY3JpcHQtMS5tb2QgLS0+DQotPCFFTlRJVFkgJSBzY3JpcHQucW5hbWUgICIlWEhUTUwucGZ4O3NjcmlwdCIgPg0KLTwhRU5USVRZICUgbm9zY3JpcHQucW5hbWUgICIlWEhUTUwucGZ4O25vc2NyaXB0IiA+DQotDQotPCEtLSBtb2R1bGU6ICB4aHRtbC1zdHJ1Y3QtMS5tb2QgLS0+DQotPCFFTlRJVFkgJSBodG1sLnFuYW1lICAgICIlWEhUTUwucGZ4O2h0bWwiID4NCi08IUVOVElUWSAlIGhlYWQucW5hbWUgICAgIiVYSFRNTC5wZng7aGVhZCIgPg0KLTwhRU5USVRZICUgdGl0bGUucW5hbWUgICAiJVhIVE1MLnBmeDt0aXRsZSIgPg0KLTwhRU5USVRZICUgYm9keS5xbmFtZSAgICAiJVhIVE1MLnBmeDtib2R5IiA+DQotDQotPCEtLSBtb2R1bGU6ICB4aHRtbC1zdHlsZS0xLm1vZCAtLT4NCi08IUVOVElUWSAlIHN0eWxlLnFuYW1lICAgIiVYSFRNTC5wZng7c3R5bGUiID4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLXRhYmxlLTEubW9kIC0tPg0KLTwhRU5USVRZICUgdGFibGUucW5hbWUgICAiJVhIVE1MLnBmeDt0YWJsZSIgPg0KLTwhRU5USVRZICUgY2FwdGlvbi5xbmFtZSAiJVhIVE1MLnBmeDtjYXB0aW9uIiA+DQotPCFFTlRJVFkgJSB0aGVhZC5xbmFtZSAgICIlWEhUTUwucGZ4O3RoZWFkIiA+DQotPCFFTlRJVFkgJSB0Zm9vdC5xbmFtZSAgICIlWEhUTUwucGZ4O3Rmb290IiA+DQotPCFFTlRJVFkgJSB0Ym9keS5xbmFtZSAgICIlWEhUTUwucGZ4O3Rib2R5IiA+DQotPCFFTlRJVFkgJSBjb2xncm91cC5xbmFtZSAgIiVYSFRNTC5wZng7Y29sZ3JvdXAiID4NCi08IUVOVElUWSAlIGNvbC5xbmFtZSAgICAgIiVYSFRNTC5wZng7Y29sIiA+DQotPCFFTlRJVFkgJSB0ci5xbmFtZSAgICAgICIlWEhUTUwucGZ4O3RyIiA+DQotPCFFTlRJVFkgJSB0aC5xbmFtZSAgICAgICIlWEhUTUwucGZ4O3RoIiA+DQotPCFFTlRJVFkgJSB0ZC5xbmFtZSAgICAgICIlWEhUTUwucGZ4O3RkIiA+DQotDQotPCEtLSBtb2R1bGU6ICB4aHRtbC1ydWJ5LTEubW9kIC0tPg0KLQ0KLTwhRU5USVRZICUgcnVieS5xbmFtZSAgICAiJVhIVE1MLnBmeDtydWJ5IiA+DQotPCFFTlRJVFkgJSByYmMucW5hbWUgICAgICIlWEhUTUwucGZ4O3JiYyIgPg0KLTwhRU5USVRZICUgcnRjLnFuYW1lICAgICAiJVhIVE1MLnBmeDtydGMiID4NCi08IUVOVElUWSAlIHJiLnFuYW1lICAgICAgIiVYSFRNTC5wZng7cmIiID4NCi08IUVOVElUWSAlIHJ0LnFuYW1lICAgICAgIiVYSFRNTC5wZng7cnQiID4NCi08IUVOVElUWSAlIHJwLnFuYW1lICAgICAgIiVYSFRNTC5wZng7cnAiID4NCi0NCi08IS0tIFByb3Zpc2lvbmFsIFhIVE1MIDIuMCBRdWFsaWZpZWQgTmFtZXMgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBtb2R1bGU6ICB4aHRtbC1pbWFnZS0yLm1vZCAtLT4NCi08IUVOVElUWSAlIGFsdC5xbmFtZSAgICAgIiVYSFRNTC5wZng7YWx0IiA+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtcW5hbWUtMS5tb2QgLS0+DQotDQotPCEtLQ0KLQlYSFRNTCBnbG9iYWwgYXR0cmlidXRlcw0KLS0tPg0KLTwhRU5USVRZICUgeGh0bWwtaW5sc3R5bGUubW9kIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBJbmxpbmUgU3R5bGUgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWlubHN0eWxlLTEubW9kIj4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBJbmxpbmUgU3R5bGUgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtaW5sc3R5bGUtMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwsIGEgcmVmb3JtdWxhdGlvbiBvZiBIVE1MIGFzIGEgbW9kdWxhciBYTUwgYXBwbGljYXRpb24uDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB3bWwyMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU4IHBhdmVyeSBFeHAgJA0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRU5USVRJRVMgWEhUTUwgSW5saW5lIFN0eWxlIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWlubHN0eWxlLTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIElubGluZSBTdHlsZQ0KLQ0KLSAgICAgVGhpcyBtb2R1bGUgZGVjbGFyZXMgdGhlICdzdHlsZScgYXR0cmlidXRlLCB1c2VkIHRvIHN1cHBvcnQgaW5saW5lDQotICAgICBzdHlsZSBtYXJrdXAuIFRoaXMgbW9kdWxlIG11c3QgYmUgaW5zdGFudGlhdGVkIHByaW9yIHRvIHRoZSBYSFRNTA0KLSAgICAgQ29tbW9uIEF0dHJpYnV0ZXMgbW9kdWxlIGluIG9yZGVyIHRvIGJlIGluY2x1ZGVkIGluICVDb3JlLmF0dHJpYjsuDQotLS0+DQotDQotPCFFTlRJVFkgJSBzdHlsZS5hdHRyaWINCi0gICAgICJzdHlsZSAgICAgICAgQ0RBVEEgICAgICAgICAgICAgICAgICAgICNJTVBMSUVEIg0KLT4NCi0NCi0NCi08IUVOVElUWSAlIENvcmUuZXh0cmEuYXR0cmliDQotICAgICAiJXN0eWxlLmF0dHJpYjsiDQotPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLWlubHN0eWxlLTEubW9kIC0tPg0KLQ0KLTwhRU5USVRZICUgWEhUTUwuYmlkaSAiSUdOT1JFIj4NCi08IUVOVElUWSAlIHhodG1sLWF0dHJpYnMubW9kIFBVQkxJQyAiLS8vVzNDLy9FTlRJVElFUyBYSFRNTCBDb21tb24gQXR0cmlidXRlcyAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtYXR0cmlicy0xLm1vZCI+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgQ29tbW9uIEF0dHJpYnV0ZXMgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLWF0dHJpYnMtMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwsIGEgcmVmb3JtdWxhdGlvbiBvZiBIVE1MIGFzIGEgbW9kdWxhciBYTUwgYXBwbGljYXRpb24uDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB3bWwyMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU4IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VOVElUSUVTIFhIVE1MIENvbW1vbiBBdHRyaWJ1dGVzIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWF0dHJpYnMtMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotICAgICAobm9uZSkNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gQ29tbW9uIEF0dHJpYnV0ZXMNCi0NCi0gICAgIFRoaXMgbW9kdWxlIGRlY2xhcmVzIG1hbnkgb2YgdGhlIGNvbW1vbiBhdHRyaWJ1dGVzIGZvciB0aGUgWEhUTUwgRFRELg0KLSAgICAgJU5TLmRlY2wuYXR0cmliOyBpcyBkZWNsYXJlZCBpbiB0aGUgWEhUTUwgUW5hbWUgbW9kdWxlLg0KLS0tPg0KLQ0KLTwhRU5USVRZICUgaWQuYXR0cmliDQotICAgICAiaWQgICAgICAgICAgIElEICAgICAgICAgICAgICAgICAgICAgICAjSU1QTElFRCINCi0+DQotDQotPCFFTlRJVFkgJSBjbGFzcy5hdHRyaWINCi0gICAgICJjbGFzcyAgICAgICAgTk1UT0tFTlMgICAgICAgICAgICAgICAgICNJTVBMSUVEIg0KLT4NCi0NCi08IUVOVElUWSAlIHRpdGxlLmF0dHJpYg0KLSAgICAgInRpdGxlICAgICAgICAlVGV4dC5kYXRhdHlwZTsgICAgICAgICAgI0lNUExJRUQiDQotPg0KLQ0KLTwhRU5USVRZICUgQ29yZS5leHRyYS5hdHRyaWIgIiIgPg0KLQ0KLTwhRU5USVRZICUgQ29yZS5hdHRyaWINCi0gICAgICIlWEhUTUwueG1sbnMuYXR0cmliOw0KLSAgICAgICVpZC5hdHRyaWI7DQotICAgICAgJWNsYXNzLmF0dHJpYjsNCi0gICAgICAldGl0bGUuYXR0cmliOw0KLSAgICAgICVDb3JlLmV4dHJhLmF0dHJpYjsiDQotPg0KLQ0KLTwhRU5USVRZICUgbGFuZy5hdHRyaWINCi0gICAgICJ4bWw6bGFuZyAgICAgJUxhbmd1YWdlQ29kZS5kYXRhdHlwZTsgICNJTVBMSUVEIg0KLT4NCi0NCi08IVslWEhUTUwuYmlkaTtbDQotPCFFTlRJVFkgJSBkaXIuYXR0cmliDQotICAgICAiZGlyICAgICAgICAgICggbHRyIHwgcnRsICkgICAgICAgICAgICAjSU1QTElFRCINCi0+DQotDQotPCFFTlRJVFkgJSBJMThuLmF0dHJpYg0KLSAgICAgIiVkaXIuYXR0cmliOw0KLSAgICAgICVsYW5nLmF0dHJpYjsiDQotPg0KLQ0KLV1dPg0KLTwhRU5USVRZICUgSTE4bi5hdHRyaWINCi0gICAgICIlbGFuZy5hdHRyaWI7Ig0KLT4NCi0NCi08IUVOVElUWSAlIENvbW1vbi5leHRyYS5hdHRyaWIgIiIgPg0KLQ0KLTwhLS0gaW50cmluc2ljIGV2ZW50IGF0dHJpYnV0ZXMgZGVjbGFyZWQgcHJldmlvdXNseQ0KLS0tPg0KLTwhRU5USVRZICUgRXZlbnRzLmF0dHJpYiAiIiA+DQotDQotPCFFTlRJVFkgJSBDb21tb24uYXR0cmliDQotICAgICAiJUNvcmUuYXR0cmliOw0KLSAgICAgICVJMThuLmF0dHJpYjsNCi0gICAgICAlRXZlbnRzLmF0dHJpYjsNCi0gICAgICAlQ29tbW9uLmV4dHJhLmF0dHJpYjsiDQotPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLWF0dHJpYnMtMS5tb2QgLS0+DQotDQotPCEtLSANCi0JWEhUTUwgY2hhcmFjdGVyIGVudGl0aWVzDQotLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1jaGFyZW50Lm1vZCBQVUJMSUMgIi0vL1czQy8vRU5USVRJRVMgWEhUTUwgQ2hhcmFjdGVyIEVudGl0aWVzIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1jaGFyZW50LTEubW9kIj4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBDaGFyYWN0ZXIgRW50aXRpZXMgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLWNoYXJlbnQtMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwsIGEgcmVmb3JtdWxhdGlvbiBvZiBIVE1MIGFzIGEgbW9kdWxhciBYTUwgYXBwbGljYXRpb24uDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB3bWwyMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU4IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VOVElUSUVTIFhIVE1MIENoYXJhY3RlciBFbnRpdGllcyAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1jaGFyZW50LTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIENoYXJhY3RlciBFbnRpdGllcyBmb3IgWEhUTUwNCi0NCi0gICAgIFRoaXMgbW9kdWxlIGRlY2xhcmVzIHRoZSBzZXQgb2YgY2hhcmFjdGVyIGVudGl0aWVzIGZvciBYSFRNTCwNCi0gICAgIGluY2x1ZGluZyB0aGUgTGF0aW4gMSwgU3ltYm9sIGFuZCBTcGVjaWFsIGNoYXJhY3RlciBjb2xsZWN0aW9ucy4NCi0tLT4NCi0NCi08IUVOVElUWSAlIHhodG1sLWxhdDENCi0gICAgUFVCTElDICItLy9XM0MvL0VOVElUSUVTIExhdGluIDEgZm9yIFhIVE1MLy9FTiINCi0gICAgICAgICAgICJ4aHRtbC1sYXQxLmVudCIgPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhNTC1jb21wYXRpYmxlIElTTyBMYXRpbiAxIENoYXJhY3RlciBFbnRpdHkgU2V0IGZvciBYSFRNTCAuLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1sYXQxLmVudA0KLQ0KLSAgICAgVHlwaWNhbCBpbnZvY2F0aW9uOg0KLQ0KLSAgICAgICA8IUVOVElUWSAlIHhodG1sLWxhdDENCi0gICAgICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTlRJVElFUyBMYXRpbiAxIGZvciBYSFRNTC8vRU4iDQotICAgICAgICAgICAgICAgICAgInhodG1sLWxhdDEuZW50IiA+DQotICAgICAgICV4aHRtbC1sYXQxOw0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRU5USVRJRVMgTGF0aW4gMSBmb3IgWEhUTUwvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1sYXQxLmVudCINCi0NCi0gICAgIFJldmlzaW9uOiAgJElkOiB3bWwyMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU4IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFBvcnRpb25zIChDKSBJbnRlcm5hdGlvbmFsIE9yZ2FuaXphdGlvbiBmb3IgU3RhbmRhcmRpemF0aW9uIDE5ODY6DQotICAgICBQZXJtaXNzaW9uIHRvIGNvcHkgaW4gYW55IGZvcm0gaXMgZ3JhbnRlZCBmb3IgdXNlIHdpdGggY29uZm9ybWluZw0KLSAgICAgU0dNTCBzeXN0ZW1zIGFuZCBhcHBsaWNhdGlvbnMgYXMgZGVmaW5lZCBpbiBJU08gODg3OSwgcHJvdmlkZWQNCi0gICAgIHRoaXMgbm90aWNlIGlzIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMuDQotLS0+DQotDQotPCFFTlRJVFkgbmJzcCAgICImIzE2MDsiID48IS0tIG5vLWJyZWFrIHNwYWNlID0gbm9uLWJyZWFraW5nIHNwYWNlLCBVKzAwQTAgSVNPbnVtIC0tPg0KLTwhRU5USVRZIGlleGNsICAiJiMxNjE7IiA+PCEtLSBpbnZlcnRlZCBleGNsYW1hdGlvbiBtYXJrLCBVKzAwQTEgSVNPbnVtIC0tPg0KLTwhRU5USVRZIGNlbnQgICAiJiMxNjI7IiA+PCEtLSBjZW50IHNpZ24sIFUrMDBBMiBJU09udW0gLS0+DQotPCFFTlRJVFkgcG91bmQgICImIzE2MzsiID48IS0tIHBvdW5kIHNpZ24sIFUrMDBBMyBJU09udW0gLS0+DQotPCFFTlRJVFkgY3VycmVuICImIzE2NDsiID48IS0tIGN1cnJlbmN5IHNpZ24sIFUrMDBBNCBJU09udW0gLS0+DQotPCFFTlRJVFkgeWVuICAgICImIzE2NTsiID48IS0tIHllbiBzaWduID0geXVhbiBzaWduLCBVKzAwQTUgSVNPbnVtIC0tPg0KLTwhRU5USVRZIGJydmJhciAiJiMxNjY7IiA+PCEtLSBicm9rZW4gYmFyID0gYnJva2VuIHZlcnRpY2FsIGJhciwgVSswMEE2IElTT251bSAtLT4NCi08IUVOVElUWSBzZWN0ICAgIiYjMTY3OyIgPjwhLS0gc2VjdGlvbiBzaWduLCBVKzAwQTcgSVNPbnVtIC0tPg0KLTwhRU5USVRZIHVtbCAgICAiJiMxNjg7IiA+PCEtLSBkaWFlcmVzaXMgPSBzcGFjaW5nIGRpYWVyZXNpcywgVSswMEE4IElTT2RpYSAtLT4NCi08IUVOVElUWSBjb3B5ICAgIiYjMTY5OyIgPjwhLS0gY29weXJpZ2h0IHNpZ24sIFUrMDBBOSBJU09udW0gLS0+DQotPCFFTlRJVFkgb3JkZiAgICImIzE3MDsiID48IS0tIGZlbWluaW5lIG9yZGluYWwgaW5kaWNhdG9yLCBVKzAwQUEgSVNPbnVtIC0tPg0KLTwhRU5USVRZIGxhcXVvICAiJiMxNzE7IiA+PCEtLSBsZWZ0LXBvaW50aW5nIGRvdWJsZSBhbmdsZSBxdW90YXRpb24gbWFyayA9IGxlZnQgcG9pbnRpbmcgZ3VpbGxlbWV0LCBVKzAwQUIgSVNPbnVtIC0tPg0KLTwhRU5USVRZIG5vdCAgICAiJiMxNzI7IiA+PCEtLSBub3Qgc2lnbiwgVSswMEFDIElTT251bSAtLT4NCi08IUVOVElUWSBzaHkgICAgIiYjMTczOyIgPjwhLS0gc29mdCBoeXBoZW4gPSBkaXNjcmV0aW9uYXJ5IGh5cGhlbiwgVSswMEFEIElTT251bSAtLT4NCi08IUVOVElUWSByZWcgICAgIiYjMTc0OyIgPjwhLS0gcmVnaXN0ZXJlZCBzaWduID0gcmVnaXN0ZXJlZCB0cmFkZSBtYXJrIHNpZ24sIFUrMDBBRSBJU09udW0gLS0+DQotPCFFTlRJVFkgbWFjciAgICImIzE3NTsiID48IS0tIG1hY3JvbiA9IHNwYWNpbmcgbWFjcm9uID0gb3ZlcmxpbmUgPSBBUEwgb3ZlcmJhciwgVSswMEFGIElTT2RpYSAtLT4NCi08IUVOVElUWSBkZWcgICAgIiYjMTc2OyIgPjwhLS0gZGVncmVlIHNpZ24sIFUrMDBCMCBJU09udW0gLS0+DQotPCFFTlRJVFkgcGx1c21uICImIzE3NzsiID48IS0tIHBsdXMtbWludXMgc2lnbiA9IHBsdXMtb3ItbWludXMgc2lnbiwgVSswMEIxIElTT251bSAtLT4NCi08IUVOVElUWSBzdXAyICAgIiYjMTc4OyIgPjwhLS0gc3VwZXJzY3JpcHQgdHdvID0gc3VwZXJzY3JpcHQgZGlnaXQgdHdvID0gc3F1YXJlZCwgVSswMEIyIElTT251bSAtLT4NCi08IUVOVElUWSBzdXAzICAgIiYjMTc5OyIgPjwhLS0gc3VwZXJzY3JpcHQgdGhyZWUgPSBzdXBlcnNjcmlwdCBkaWdpdCB0aHJlZSA9IGN1YmVkLCBVKzAwQjMgSVNPbnVtIC0tPg0KLTwhRU5USVRZIGFjdXRlICAiJiMxODA7IiA+PCEtLSBhY3V0ZSBhY2NlbnQgPSBzcGFjaW5nIGFjdXRlLCBVKzAwQjQgSVNPZGlhIC0tPg0KLTwhRU5USVRZIG1pY3JvICAiJiMxODE7IiA+PCEtLSBtaWNybyBzaWduLCBVKzAwQjUgSVNPbnVtIC0tPg0KLTwhRU5USVRZIHBhcmEgICAiJiMxODI7IiA+PCEtLSBwaWxjcm93IHNpZ24gPSBwYXJhZ3JhcGggc2lnbiwgVSswMEI2IElTT251bSAtLT4NCi08IUVOVElUWSBtaWRkb3QgIiYjMTgzOyIgPjwhLS0gbWlkZGxlIGRvdCA9IEdlb3JnaWFuIGNvbW1hID0gR3JlZWsgbWlkZGxlIGRvdCwgVSswMEI3IElTT251bSAtLT4NCi08IUVOVElUWSBjZWRpbCAgIiYjMTg0OyIgPjwhLS0gY2VkaWxsYSA9IHNwYWNpbmcgY2VkaWxsYSwgVSswMEI4IElTT2RpYSAtLT4NCi08IUVOVElUWSBzdXAxICAgIiYjMTg1OyIgPjwhLS0gc3VwZXJzY3JpcHQgb25lID0gc3VwZXJzY3JpcHQgZGlnaXQgb25lLCBVKzAwQjkgSVNPbnVtIC0tPg0KLTwhRU5USVRZIG9yZG0gICAiJiMxODY7IiA+PCEtLSBtYXNjdWxpbmUgb3JkaW5hbCBpbmRpY2F0b3IsIFUrMDBCQSBJU09udW0gLS0+DQotPCFFTlRJVFkgcmFxdW8gICImIzE4NzsiID48IS0tIHJpZ2h0LXBvaW50aW5nIGRvdWJsZSBhbmdsZSBxdW90YXRpb24gbWFyayA9IHJpZ2h0IHBvaW50aW5nIGd1aWxsZW1ldCwgVSswMEJCIElTT251bSAtLT4NCi08IUVOVElUWSBmcmFjMTQgIiYjMTg4OyIgPjwhLS0gdnVsZ2FyIGZyYWN0aW9uIG9uZSBxdWFydGVyID0gZnJhY3Rpb24gb25lIHF1YXJ0ZXIsIFUrMDBCQyBJU09udW0gLS0+DQotPCFFTlRJVFkgZnJhYzEyICImIzE4OTsiID48IS0tIHZ1bGdhciBmcmFjdGlvbiBvbmUgaGFsZiA9IGZyYWN0aW9uIG9uZSBoYWxmLCBVKzAwQkQgSVNPbnVtIC0tPg0KLTwhRU5USVRZIGZyYWMzNCAiJiMxOTA7IiA+PCEtLSB2dWxnYXIgZnJhY3Rpb24gdGhyZWUgcXVhcnRlcnMgPSBmcmFjdGlvbiB0aHJlZSBxdWFydGVycywgVSswMEJFIElTT251bSAtLT4NCi08IUVOVElUWSBpcXVlc3QgIiYjMTkxOyIgPjwhLS0gaW52ZXJ0ZWQgcXVlc3Rpb24gbWFyayA9IHR1cm5lZCBxdWVzdGlvbiBtYXJrLCBVKzAwQkYgSVNPbnVtIC0tPg0KLTwhRU5USVRZIEFncmF2ZSAiJiMxOTI7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIEEgd2l0aCBncmF2ZSA9IGxhdGluIGNhcGl0YWwgQSBncmF2ZSwgVSswMEMwIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgQWFjdXRlICImIzE5MzsiID48IS0tIGxhdGluIGNhcGl0YWwgQSB3aXRoIGFjdXRlLCBVKzAwQzEgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBBY2lyYyAgIiYjMTk0OyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBBIHdpdGggY2lyY3VtZmxleCwgVSswMEMyIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgQXRpbGRlICImIzE5NTsiID48IS0tIGxhdGluIGNhcGl0YWwgQSB3aXRoIHRpbGRlLCBVKzAwQzMgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBBdW1sICAgIiYjMTk2OyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBBIHdpdGggZGlhZXJlc2lzLCBVKzAwQzQgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBBcmluZyAgIiYjMTk3OyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBBIHdpdGggcmluZyBhYm92ZSA9IGxhdGluIGNhcGl0YWwgQSByaW5nLCBVKzAwQzUgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBBRWxpZyAgIiYjMTk4OyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBBRSA9IGxhdGluIGNhcGl0YWwgbGlnYXR1cmUgQUUsIFUrMDBDNiBJU09sYXQxIC0tPg0KLTwhRU5USVRZIENjZWRpbCAiJiMxOTk7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIEMgd2l0aCBjZWRpbGxhLCBVKzAwQzcgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBFZ3JhdmUgIiYjMjAwOyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBFIHdpdGggZ3JhdmUsIFUrMDBDOCBJU09sYXQxIC0tPg0KLTwhRU5USVRZIEVhY3V0ZSAiJiMyMDE7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIEUgd2l0aCBhY3V0ZSwgVSswMEM5IElTT2xhdDEgLS0+DQotPCFFTlRJVFkgRWNpcmMgICImIzIwMjsiID48IS0tIGxhdGluIGNhcGl0YWwgRSB3aXRoIGNpcmN1bWZsZXgsIFUrMDBDQSBJU09sYXQxIC0tPg0KLTwhRU5USVRZIEV1bWwgICAiJiMyMDM7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIEUgd2l0aCBkaWFlcmVzaXMsIFUrMDBDQiBJU09sYXQxIC0tPg0KLTwhRU5USVRZIElncmF2ZSAiJiMyMDQ7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIEkgd2l0aCBncmF2ZSwgVSswMENDIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgSWFjdXRlICImIzIwNTsiID48IS0tIGxhdGluIGNhcGl0YWwgSSB3aXRoIGFjdXRlLCBVKzAwQ0QgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBJY2lyYyAgIiYjMjA2OyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBJIHdpdGggY2lyY3VtZmxleCwgVSswMENFIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgSXVtbCAgICImIzIwNzsiID48IS0tIGxhdGluIGNhcGl0YWwgSSB3aXRoIGRpYWVyZXNpcywgVSswMENGIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgRVRIICAgICImIzIwODsiID48IS0tIGxhdGluIGNhcGl0YWwgRVRILCBVKzAwRDAgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBOdGlsZGUgIiYjMjA5OyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBOIHdpdGggdGlsZGUsIFUrMDBEMSBJU09sYXQxIC0tPg0KLTwhRU5USVRZIE9ncmF2ZSAiJiMyMTA7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIE8gd2l0aCBncmF2ZSwgVSswMEQyIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgT2FjdXRlICImIzIxMTsiID48IS0tIGxhdGluIGNhcGl0YWwgTyB3aXRoIGFjdXRlLCBVKzAwRDMgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBPY2lyYyAgIiYjMjEyOyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBPIHdpdGggY2lyY3VtZmxleCwgVSswMEQ0IElTT2xhdDEgLS0+DQotPCFFTlRJVFkgT3RpbGRlICImIzIxMzsiID48IS0tIGxhdGluIGNhcGl0YWwgTyB3aXRoIHRpbGRlLCBVKzAwRDUgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBPdW1sICAgIiYjMjE0OyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBPIHdpdGggZGlhZXJlc2lzLCBVKzAwRDYgSVNPbGF0MSAtLT4NCi08IUVOVElUWSB0aW1lcyAgIiYjMjE1OyIgPjwhLS0gbXVsdGlwbGljYXRpb24gc2lnbiwgVSswMEQ3IElTT251bSAtLT4NCi08IUVOVElUWSBPc2xhc2ggIiYjMjE2OyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBPIHdpdGggc3Ryb2tlID0gbGF0aW4gY2FwaXRhbCBPIHNsYXNoLCBVKzAwRDggSVNPbGF0MSAtLT4NCi08IUVOVElUWSBVZ3JhdmUgIiYjMjE3OyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBVIHdpdGggZ3JhdmUsIFUrMDBEOSBJU09sYXQxIC0tPg0KLTwhRU5USVRZIFVhY3V0ZSAiJiMyMTg7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIFUgd2l0aCBhY3V0ZSwgVSswMERBIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgVWNpcmMgICImIzIxOTsiID48IS0tIGxhdGluIGNhcGl0YWwgVSB3aXRoIGNpcmN1bWZsZXgsIFUrMDBEQiBJU09sYXQxIC0tPg0KLTwhRU5USVRZIFV1bWwgICAiJiMyMjA7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIFUgd2l0aCBkaWFlcmVzaXMsIFUrMDBEQyBJU09sYXQxIC0tPg0KLTwhRU5USVRZIFlhY3V0ZSAiJiMyMjE7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIFkgd2l0aCBhY3V0ZSwgVSswMEREIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgVEhPUk4gICImIzIyMjsiID48IS0tIGxhdGluIGNhcGl0YWwgVEhPUk4sIFUrMDBERSBJU09sYXQxIC0tPg0KLTwhRU5USVRZIHN6bGlnICAiJiMyMjM7IiA+PCEtLSBsYXRpbiBzbWFsbCBzaGFycCBzID0gZXNzLXplZCwgVSswMERGIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgYWdyYXZlICImIzIyNDsiID48IS0tIGxhdGluIHNtYWxsIGEgd2l0aCBncmF2ZSA9IGxhdGluIHNtYWxsIGEgZ3JhdmUsIFUrMDBFMCBJU09sYXQxIC0tPg0KLTwhRU5USVRZIGFhY3V0ZSAiJiMyMjU7IiA+PCEtLSBsYXRpbiBzbWFsbCBhIHdpdGggYWN1dGUsIFUrMDBFMSBJU09sYXQxIC0tPg0KLTwhRU5USVRZIGFjaXJjICAiJiMyMjY7IiA+PCEtLSBsYXRpbiBzbWFsbCBhIHdpdGggY2lyY3VtZmxleCwgVSswMEUyIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgYXRpbGRlICImIzIyNzsiID48IS0tIGxhdGluIHNtYWxsIGEgd2l0aCB0aWxkZSwgVSswMEUzIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgYXVtbCAgICImIzIyODsiID48IS0tIGxhdGluIHNtYWxsIGEgd2l0aCBkaWFlcmVzaXMsIFUrMDBFNCBJU09sYXQxIC0tPg0KLTwhRU5USVRZIGFyaW5nICAiJiMyMjk7IiA+PCEtLSBsYXRpbiBzbWFsbCBhIHdpdGggcmluZyBhYm92ZSA9IGxhdGluIHNtYWxsIGEgcmluZywgVSswMEU1IElTT2xhdDEgLS0+DQotPCFFTlRJVFkgYWVsaWcgICImIzIzMDsiID48IS0tIGxhdGluIHNtYWxsIGFlID0gbGF0aW4gc21hbGwgbGlnYXR1cmUgYWUsIFUrMDBFNiBJU09sYXQxIC0tPg0KLTwhRU5USVRZIGNjZWRpbCAiJiMyMzE7IiA+PCEtLSBsYXRpbiBzbWFsbCBjIHdpdGggY2VkaWxsYSwgVSswMEU3IElTT2xhdDEgLS0+DQotPCFFTlRJVFkgZWdyYXZlICImIzIzMjsiID48IS0tIGxhdGluIHNtYWxsIGUgd2l0aCBncmF2ZSwgVSswMEU4IElTT2xhdDEgLS0+DQotPCFFTlRJVFkgZWFjdXRlICImIzIzMzsiID48IS0tIGxhdGluIHNtYWxsIGUgd2l0aCBhY3V0ZSwgVSswMEU5IElTT2xhdDEgLS0+DQotPCFFTlRJVFkgZWNpcmMgICImIzIzNDsiID48IS0tIGxhdGluIHNtYWxsIGUgd2l0aCBjaXJjdW1mbGV4LCBVKzAwRUEgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBldW1sICAgIiYjMjM1OyIgPjwhLS0gbGF0aW4gc21hbGwgZSB3aXRoIGRpYWVyZXNpcywgVSswMEVCIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgaWdyYXZlICImIzIzNjsiID48IS0tIGxhdGluIHNtYWxsIGkgd2l0aCBncmF2ZSwgVSswMEVDIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgaWFjdXRlICImIzIzNzsiID48IS0tIGxhdGluIHNtYWxsIGkgd2l0aCBhY3V0ZSwgVSswMEVEIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgaWNpcmMgICImIzIzODsiID48IS0tIGxhdGluIHNtYWxsIGkgd2l0aCBjaXJjdW1mbGV4LCBVKzAwRUUgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBpdW1sICAgIiYjMjM5OyIgPjwhLS0gbGF0aW4gc21hbGwgaSB3aXRoIGRpYWVyZXNpcywgVSswMEVGIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgZXRoICAgICImIzI0MDsiID48IS0tIGxhdGluIHNtYWxsIGV0aCwgVSswMEYwIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgbnRpbGRlICImIzI0MTsiID48IS0tIGxhdGluIHNtYWxsIG4gd2l0aCB0aWxkZSwgVSswMEYxIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgb2dyYXZlICImIzI0MjsiID48IS0tIGxhdGluIHNtYWxsIG8gd2l0aCBncmF2ZSwgVSswMEYyIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgb2FjdXRlICImIzI0MzsiID48IS0tIGxhdGluIHNtYWxsIG8gd2l0aCBhY3V0ZSwgVSswMEYzIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgb2NpcmMgICImIzI0NDsiID48IS0tIGxhdGluIHNtYWxsIG8gd2l0aCBjaXJjdW1mbGV4LCBVKzAwRjQgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBvdGlsZGUgIiYjMjQ1OyIgPjwhLS0gbGF0aW4gc21hbGwgbyB3aXRoIHRpbGRlLCBVKzAwRjUgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBvdW1sICAgIiYjMjQ2OyIgPjwhLS0gbGF0aW4gc21hbGwgbyB3aXRoIGRpYWVyZXNpcywgVSswMEY2IElTT2xhdDEgLS0+DQotPCFFTlRJVFkgZGl2aWRlICImIzI0NzsiID48IS0tIGRpdmlzaW9uIHNpZ24sIFUrMDBGNyBJU09udW0gLS0+DQotPCFFTlRJVFkgb3NsYXNoICImIzI0ODsiID48IS0tIGxhdGluIHNtYWxsIG8gd2l0aCBzdHJva2UsID0gbGF0aW4gc21hbGwgbyBzbGFzaCwgVSswMEY4IElTT2xhdDEgLS0+DQotPCFFTlRJVFkgdWdyYXZlICImIzI0OTsiID48IS0tIGxhdGluIHNtYWxsIHUgd2l0aCBncmF2ZSwgVSswMEY5IElTT2xhdDEgLS0+DQotPCFFTlRJVFkgdWFjdXRlICImIzI1MDsiID48IS0tIGxhdGluIHNtYWxsIHUgd2l0aCBhY3V0ZSwgVSswMEZBIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgdWNpcmMgICImIzI1MTsiID48IS0tIGxhdGluIHNtYWxsIHUgd2l0aCBjaXJjdW1mbGV4LCBVKzAwRkIgSVNPbGF0MSAtLT4NCi08IUVOVElUWSB1dW1sICAgIiYjMjUyOyIgPjwhLS0gbGF0aW4gc21hbGwgdSB3aXRoIGRpYWVyZXNpcywgVSswMEZDIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgeWFjdXRlICImIzI1MzsiID48IS0tIGxhdGluIHNtYWxsIHkgd2l0aCBhY3V0ZSwgVSswMEZEIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgdGhvcm4gICImIzI1NDsiID48IS0tIGxhdGluIHNtYWxsIHRob3JuIHdpdGgsIFUrMDBGRSBJU09sYXQxIC0tPg0KLTwhRU5USVRZIHl1bWwgICAiJiMyNTU7IiA+PCEtLSBsYXRpbiBzbWFsbCB5IHdpdGggZGlhZXJlc2lzLCBVKzAwRkYgSVNPbGF0MSAtLT4NCi08IS0tIGVuZCBvZiB4aHRtbC1sYXQxLmVudCAtLT4NCi0NCi0NCi08IUVOVElUWSAlIHhodG1sLXN5bWJvbA0KLSAgICBQVUJMSUMgIi0vL1czQy8vRU5USVRJRVMgU3ltYm9scyBmb3IgWEhUTUwvL0VOIg0KLSAgICAgICAgICAgInhodG1sLXN5bWJvbC5lbnQiID4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBJU08gTWF0aCwgR3JlZWsgYW5kIFN5bWJvbGljIENoYXJhY3RlciBFbnRpdHkgU2V0IGZvciBYSFRNTCAuLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtc3ltYm9sLmVudA0KLQ0KLSAgICAgVHlwaWNhbCBpbnZvY2F0aW9uOg0KLQ0KLSAgICAgICA8IUVOVElUWSAlIHhodG1sLXN5bWJvbA0KLSAgICAgICAgICAgUFVCTElDICItLy9XM0MvL0VOVElUSUVTIFN5bWJvbHMgZm9yIFhIVE1MLy9FTiINCi0gICAgICAgICAgICAgICAgICAieGh0bWwtc3ltYm9sLmVudCIgPg0KLSAgICAgICAleGh0bWwtc3ltYm9sOw0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRU5USVRJRVMgU3ltYm9scyBmb3IgWEhUTUwvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1zeW1ib2wuZW50Ig0KLQ0KLSAgICAgUmV2aXNpb246ICAkSWQ6IHdtbDIwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTggcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgUG9ydGlvbnMgKEMpIEludGVybmF0aW9uYWwgT3JnYW5pemF0aW9uIGZvciBTdGFuZGFyZGl6YXRpb24gMTk4NjoNCi0gICAgIFBlcm1pc3Npb24gdG8gY29weSBpbiBhbnkgZm9ybSBpcyBncmFudGVkIGZvciB1c2Ugd2l0aCBjb25mb3JtaW5nDQotICAgICBTR01MIHN5c3RlbXMgYW5kIGFwcGxpY2F0aW9ucyBhcyBkZWZpbmVkIGluIElTTyA4ODc5LCBwcm92aWRlZA0KLSAgICAgdGhpcyBub3RpY2UgaXMgaW5jbHVkZWQgaW4gYWxsIGNvcGllcy4NCi0tLT4NCi0NCi08IS0tIFJlbGV2YW50IElTTyBlbnRpdHkgc2V0IGlzIGdpdmVuIHVubGVzcyBuYW1lcyBhcmUgbmV3bHkgaW50cm9kdWNlZC4NCi0gICAgIE5ldyBuYW1lcyAoaS5lLiwgbm90IGluIElTTyA4ODc5IFtTR01MXSBsaXN0KSBkbyBub3QgY2xhc2ggd2l0aA0KLSAgICAgYW55IGV4aXN0aW5nIElTTyA4ODc5IGVudGl0eSBuYW1lcy4gSVNPIDEwNjQ2IFtJU08xMDY0Nl0gY2hhcmFjdGVyDQotICAgICBudW1iZXJzIGFyZSBnaXZlbiBmb3IgZWFjaCBjaGFyYWN0ZXIsIGluIGhleC4gRW50aXR5IHZhbHVlcyBhcmUNCi0gICAgIGRlY2ltYWwgY29udmVyc2lvbnMgb2YgdGhlIElTTyAxMDY0NiB2YWx1ZXMgYW5kIHJlZmVyIHRvIHRoZQ0KLSAgICAgZG9jdW1lbnQgY2hhcmFjdGVyIHNldC4gTmFtZXMgYXJlIFVuaWNvZGUgW1VOSUNPREVdIG5hbWVzLg0KLS0tPg0KLQ0KLTwhLS0gTGF0aW4gRXh0ZW5kZWQtQiAtLT4NCi08IUVOVElUWSBmbm9mICAgICAiJiM0MDI7IiA+PCEtLSBsYXRpbiBzbWFsbCBmIHdpdGggaG9vayA9IGZ1bmN0aW9uDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBmbG9yaW4sIFUrMDE5MiBJU090ZWNoIC0tPg0KLQ0KLTwhLS0gR3JlZWsgLS0+DQotPCFFTlRJVFkgQWxwaGEgICAgIiYjOTEzOyIgPjwhLS0gZ3JlZWsgY2FwaXRhbCBsZXR0ZXIgYWxwaGEsIFUrMDM5MSAtLT4NCi08IUVOVElUWSBCZXRhICAgICAiJiM5MTQ7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciBiZXRhLCBVKzAzOTIgLS0+DQotPCFFTlRJVFkgR2FtbWEgICAgIiYjOTE1OyIgPjwhLS0gZ3JlZWsgY2FwaXRhbCBsZXR0ZXIgZ2FtbWEsIFUrMDM5MyBJU09ncmszIC0tPg0KLTwhRU5USVRZIERlbHRhICAgICImIzkxNjsiID48IS0tIGdyZWVrIGNhcGl0YWwgbGV0dGVyIGRlbHRhLCBVKzAzOTQgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBFcHNpbG9uICAiJiM5MTc7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciBlcHNpbG9uLCBVKzAzOTUgLS0+DQotPCFFTlRJVFkgWmV0YSAgICAgIiYjOTE4OyIgPjwhLS0gZ3JlZWsgY2FwaXRhbCBsZXR0ZXIgemV0YSwgVSswMzk2IC0tPg0KLTwhRU5USVRZIEV0YSAgICAgICImIzkxOTsiID48IS0tIGdyZWVrIGNhcGl0YWwgbGV0dGVyIGV0YSwgVSswMzk3IC0tPg0KLTwhRU5USVRZIFRoZXRhICAgICImIzkyMDsiID48IS0tIGdyZWVrIGNhcGl0YWwgbGV0dGVyIHRoZXRhLCBVKzAzOTggSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBJb3RhICAgICAiJiM5MjE7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciBpb3RhLCBVKzAzOTkgLS0+DQotPCFFTlRJVFkgS2FwcGEgICAgIiYjOTIyOyIgPjwhLS0gZ3JlZWsgY2FwaXRhbCBsZXR0ZXIga2FwcGEsIFUrMDM5QSAtLT4NCi08IUVOVElUWSBMYW1iZGEgICAiJiM5MjM7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciBsYW1iZGEsIFUrMDM5QiBJU09ncmszIC0tPg0KLTwhRU5USVRZIE11ICAgICAgICImIzkyNDsiID48IS0tIGdyZWVrIGNhcGl0YWwgbGV0dGVyIG11LCBVKzAzOUMgLS0+DQotPCFFTlRJVFkgTnUgICAgICAgIiYjOTI1OyIgPjwhLS0gZ3JlZWsgY2FwaXRhbCBsZXR0ZXIgbnUsIFUrMDM5RCAtLT4NCi08IUVOVElUWSBYaSAgICAgICAiJiM5MjY7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciB4aSwgVSswMzlFIElTT2dyazMgLS0+DQotPCFFTlRJVFkgT21pY3JvbiAgIiYjOTI3OyIgPjwhLS0gZ3JlZWsgY2FwaXRhbCBsZXR0ZXIgb21pY3JvbiwgVSswMzlGIC0tPg0KLTwhRU5USVRZIFBpICAgICAgICImIzkyODsiID48IS0tIGdyZWVrIGNhcGl0YWwgbGV0dGVyIHBpLCBVKzAzQTAgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBSaG8gICAgICAiJiM5Mjk7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciByaG8sIFUrMDNBMSAtLT4NCi08IS0tIHRoZXJlIGlzIG5vIFNpZ21hZiwgYW5kIG5vIFUrMDNBMiBjaGFyYWN0ZXIgZWl0aGVyIC0tPg0KLTwhRU5USVRZIFNpZ21hICAgICImIzkzMTsiID48IS0tIGdyZWVrIGNhcGl0YWwgbGV0dGVyIHNpZ21hLCBVKzAzQTMgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBUYXUgICAgICAiJiM5MzI7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciB0YXUsIFUrMDNBNCAtLT4NCi08IUVOVElUWSBVcHNpbG9uICAiJiM5MzM7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciB1cHNpbG9uLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFUrMDNBNSBJU09ncmszIC0tPg0KLTwhRU5USVRZIFBoaSAgICAgICImIzkzNDsiID48IS0tIGdyZWVrIGNhcGl0YWwgbGV0dGVyIHBoaSwgVSswM0E2IElTT2dyazMgLS0+DQotPCFFTlRJVFkgQ2hpICAgICAgIiYjOTM1OyIgPjwhLS0gZ3JlZWsgY2FwaXRhbCBsZXR0ZXIgY2hpLCBVKzAzQTcgLS0+DQotPCFFTlRJVFkgUHNpICAgICAgIiYjOTM2OyIgPjwhLS0gZ3JlZWsgY2FwaXRhbCBsZXR0ZXIgcHNpLCBVKzAzQTggSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBPbWVnYSAgICAiJiM5Mzc7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciBvbWVnYSwgVSswM0E5IElTT2dyazMgLS0+DQotPCFFTlRJVFkgYWxwaGEgICAgIiYjOTQ1OyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIGFscGhhLCBVKzAzQjEgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBiZXRhICAgICAiJiM5NDY7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgYmV0YSwgVSswM0IyIElTT2dyazMgLS0+DQotPCFFTlRJVFkgZ2FtbWEgICAgIiYjOTQ3OyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIGdhbW1hLCBVKzAzQjMgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBkZWx0YSAgICAiJiM5NDg7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgZGVsdGEsIFUrMDNCNCBJU09ncmszIC0tPg0KLTwhRU5USVRZIGVwc2lsb24gICImIzk0OTsiID48IS0tIGdyZWVrIHNtYWxsIGxldHRlciBlcHNpbG9uLCBVKzAzQjUgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSB6ZXRhICAgICAiJiM5NTA7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgemV0YSwgVSswM0I2IElTT2dyazMgLS0+DQotPCFFTlRJVFkgZXRhICAgICAgIiYjOTUxOyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIGV0YSwgVSswM0I3IElTT2dyazMgLS0+DQotPCFFTlRJVFkgdGhldGEgICAgIiYjOTUyOyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIHRoZXRhLCBVKzAzQjggSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBpb3RhICAgICAiJiM5NTM7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgaW90YSwgVSswM0I5IElTT2dyazMgLS0+DQotPCFFTlRJVFkga2FwcGEgICAgIiYjOTU0OyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIGthcHBhLCBVKzAzQkEgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBsYW1iZGEgICAiJiM5NTU7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgbGFtYmRhLCBVKzAzQkIgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBtdSAgICAgICAiJiM5NTY7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgbXUsIFUrMDNCQyBJU09ncmszIC0tPg0KLTwhRU5USVRZIG51ICAgICAgICImIzk1NzsiID48IS0tIGdyZWVrIHNtYWxsIGxldHRlciBudSwgVSswM0JEIElTT2dyazMgLS0+DQotPCFFTlRJVFkgeGkgICAgICAgIiYjOTU4OyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIHhpLCBVKzAzQkUgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBvbWljcm9uICAiJiM5NTk7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgb21pY3JvbiwgVSswM0JGIE5FVyAtLT4NCi08IUVOVElUWSBwaSAgICAgICAiJiM5NjA7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgcGksIFUrMDNDMCBJU09ncmszIC0tPg0KLTwhRU5USVRZIHJobyAgICAgICImIzk2MTsiID48IS0tIGdyZWVrIHNtYWxsIGxldHRlciByaG8sIFUrMDNDMSBJU09ncmszIC0tPg0KLTwhRU5USVRZIHNpZ21hZiAgICImIzk2MjsiID48IS0tIGdyZWVrIHNtYWxsIGxldHRlciBmaW5hbCBzaWdtYSwgVSswM0MyIElTT2dyazMgLS0+DQotPCFFTlRJVFkgc2lnbWEgICAgIiYjOTYzOyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIHNpZ21hLCBVKzAzQzMgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSB0YXUgICAgICAiJiM5NjQ7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgdGF1LCBVKzAzQzQgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSB1cHNpbG9uICAiJiM5NjU7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgdXBzaWxvbiwgVSswM0M1IElTT2dyazMgLS0+DQotPCFFTlRJVFkgcGhpICAgICAgIiYjOTY2OyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIHBoaSwgVSswM0M2IElTT2dyazMgLS0+DQotPCFFTlRJVFkgY2hpICAgICAgIiYjOTY3OyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIGNoaSwgVSswM0M3IElTT2dyazMgLS0+DQotPCFFTlRJVFkgcHNpICAgICAgIiYjOTY4OyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIHBzaSwgVSswM0M4IElTT2dyazMgLS0+DQotPCFFTlRJVFkgb21lZ2EgICAgIiYjOTY5OyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIG9tZWdhLCBVKzAzQzkgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSB0aGV0YXN5bSAiJiM5Nzc7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgdGhldGEgc3ltYm9sLCBVKzAzRDEgTkVXIC0tPg0KLTwhRU5USVRZIHVwc2loICAgICImIzk3ODsiID48IS0tIGdyZWVrIHVwc2lsb24gd2l0aCBob29rIHN5bWJvbCwgVSswM0QyIE5FVyAtLT4NCi08IUVOVElUWSBwaXYgICAgICAiJiM5ODI7IiA+PCEtLSBncmVlayBwaSBzeW1ib2wsIFUrMDNENiBJU09ncmszIC0tPg0KLQ0KLTwhLS0gR2VuZXJhbCBQdW5jdHVhdGlvbiAtLT4NCi08IUVOVElUWSBidWxsICAgICAiJiM4MjI2OyIgPjwhLS0gYnVsbGV0ID0gYmxhY2sgc21hbGwgY2lyY2xlLCBVKzIwMjIgSVNPcHViICAtLT4NCi08IS0tIGJ1bGxldCBpcyBOT1QgdGhlIHNhbWUgYXMgYnVsbGV0IG9wZXJhdG9yLCBVKzIyMTkgLS0+DQotPCFFTlRJVFkgaGVsbGlwICAgIiYjODIzMDsiID48IS0tIGhvcml6b250YWwgZWxsaXBzaXMgPSB0aHJlZSBkb3QgbGVhZGVyLCBVKzIwMjYgSVNPcHViICAtLT4NCi08IUVOVElUWSBwcmltZSAgICAiJiM4MjQyOyIgPjwhLS0gcHJpbWUgPSBtaW51dGVzID0gZmVldCwgVSsyMDMyIElTT3RlY2ggLS0+DQotPCFFTlRJVFkgUHJpbWUgICAgIiYjODI0MzsiID48IS0tIGRvdWJsZSBwcmltZSA9IHNlY29uZHMgPSBpbmNoZXMsIFUrMjAzMyBJU090ZWNoIC0tPg0KLTwhRU5USVRZIG9saW5lICAgICImIzgyNTQ7IiA+PCEtLSBvdmVybGluZSA9IHNwYWNpbmcgb3ZlcnNjb3JlLCBVKzIwM0UgTkVXIC0tPg0KLTwhRU5USVRZIGZyYXNsICAgICImIzgyNjA7IiA+PCEtLSBmcmFjdGlvbiBzbGFzaCwgVSsyMDQ0IE5FVyAtLT4NCi0NCi08IS0tIExldHRlcmxpa2UgU3ltYm9scyAtLT4NCi08IUVOVElUWSB3ZWllcnAgICAiJiM4NDcyOyIgPjwhLS0gc2NyaXB0IGNhcGl0YWwgUCA9IHBvd2VyIHNldCA9IFdlaWVyc3RyYXNzIHAsIFUrMjExOCBJU09hbXNvIC0tPg0KLTwhRU5USVRZIGltYWdlICAgICImIzg0NjU7IiA+PCEtLSBibGFja2xldHRlciBjYXBpdGFsIEkgPSBpbWFnaW5hcnkgcGFydCwgVSsyMTExIElTT2Ftc28gLS0+DQotPCFFTlRJVFkgcmVhbCAgICAgIiYjODQ3NjsiID48IS0tIGJsYWNrbGV0dGVyIGNhcGl0YWwgUiA9IHJlYWwgcGFydCBzeW1ib2wsIFUrMjExQyBJU09hbXNvIC0tPg0KLTwhRU5USVRZIHRyYWRlICAgICImIzg0ODI7IiA+PCEtLSB0cmFkZSBtYXJrIHNpZ24sIFUrMjEyMiBJU09udW0gLS0+DQotPCFFTlRJVFkgYWxlZnN5bSAgIiYjODUwMTsiID48IS0tIGFsZWYgc3ltYm9sID0gZmlyc3QgdHJhbnNmaW5pdGUgY2FyZGluYWwsIFUrMjEzNSBORVcgLS0+DQotPCEtLSBhbGVmIHN5bWJvbCBpcyBOT1QgdGhlIHNhbWUgYXMgaGVicmV3IGxldHRlciBhbGVmLCBVKzA1RDAgYWx0aG91Z2gNCi0gICAgIHRoZSBzYW1lIGdseXBoIGNvdWxkIGJlIHVzZWQgdG8gZGVwaWN0IGJvdGggY2hhcmFjdGVycyAtLT4NCi0NCi08IS0tIEFycm93cyAtLT4NCi08IUVOVElUWSBsYXJyICAgICAiJiM4NTkyOyIgPjwhLS0gbGVmdHdhcmRzIGFycm93LCBVKzIxOTAgSVNPbnVtIC0tPg0KLTwhRU5USVRZIHVhcnIgICAgICImIzg1OTM7IiA+PCEtLSB1cHdhcmRzIGFycm93LCBVKzIxOTEgSVNPbnVtLS0+DQotPCFFTlRJVFkgcmFyciAgICAgIiYjODU5NDsiID48IS0tIHJpZ2h0d2FyZHMgYXJyb3csIFUrMjE5MiBJU09udW0gLS0+DQotPCFFTlRJVFkgZGFyciAgICAgIiYjODU5NTsiID48IS0tIGRvd253YXJkcyBhcnJvdywgVSsyMTkzIElTT251bSAtLT4NCi08IUVOVElUWSBoYXJyICAgICAiJiM4NTk2OyIgPjwhLS0gbGVmdCByaWdodCBhcnJvdywgVSsyMTk0IElTT2Ftc2EgLS0+DQotPCFFTlRJVFkgY3JhcnIgICAgIiYjODYyOTsiID48IS0tIGRvd253YXJkcyBhcnJvdyB3aXRoIGNvcm5lciBsZWZ0d2FyZHMNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBjYXJyaWFnZSByZXR1cm4sIFUrMjFCNSBORVcgLS0+DQotPCFFTlRJVFkgbEFyciAgICAgIiYjODY1NjsiID48IS0tIGxlZnR3YXJkcyBkb3VibGUgYXJyb3csIFUrMjFEMCBJU090ZWNoIC0tPg0KLTwhLS0gVW5pY29kZSBkb2VzIG5vdCBzYXkgdGhhdCBsQXJyIGlzIHRoZSBzYW1lIGFzIHRoZSAnaXMgaW1wbGllZCBieScgYXJyb3cNCi0gICAgYnV0IGFsc28gZG9lcyBub3QgaGF2ZSBhbnkgb3RoZXIgY2hhcmFjdGVyIGZvciB0aGF0IGZ1bmN0aW9uLiBTbyA/IGxBcnIgY2FuDQotICAgIGJlIHVzZWQgZm9yICdpcyBpbXBsaWVkIGJ5JyBhcyBJU090ZWNoIHN1Z2dlc3RzIC0tPg0KLTwhRU5USVRZIHVBcnIgICAgICImIzg2NTc7IiA+PCEtLSB1cHdhcmRzIGRvdWJsZSBhcnJvdywgVSsyMUQxIElTT2Ftc2EgLS0+DQotPCFFTlRJVFkgckFyciAgICAgIiYjODY1ODsiID48IS0tIHJpZ2h0d2FyZHMgZG91YmxlIGFycm93LCBVKzIxRDIgSVNPdGVjaCAtLT4NCi08IS0tIFVuaWNvZGUgZG9lcyBub3Qgc2F5IHRoaXMgaXMgdGhlICdpbXBsaWVzJyBjaGFyYWN0ZXIgYnV0IGRvZXMgbm90IGhhdmUNCi0gICAgIGFub3RoZXIgY2hhcmFjdGVyIHdpdGggdGhpcyBmdW5jdGlvbiBzbyA/DQotICAgICByQXJyIGNhbiBiZSB1c2VkIGZvciAnaW1wbGllcycgYXMgSVNPdGVjaCBzdWdnZXN0cyAtLT4NCi08IUVOVElUWSBkQXJyICAgICAiJiM4NjU5OyIgPjwhLS0gZG93bndhcmRzIGRvdWJsZSBhcnJvdywgVSsyMUQzIElTT2Ftc2EgLS0+DQotPCFFTlRJVFkgaEFyciAgICAgIiYjODY2MDsiID48IS0tIGxlZnQgcmlnaHQgZG91YmxlIGFycm93LCBVKzIxRDQgSVNPYW1zYSAtLT4NCi0NCi08IS0tIE1hdGhlbWF0aWNhbCBPcGVyYXRvcnMgLS0+DQotPCFFTlRJVFkgZm9yYWxsICAgIiYjODcwNDsiID48IS0tIGZvciBhbGwsIFUrMjIwMCBJU090ZWNoIC0tPg0KLTwhRU5USVRZIHBhcnQgICAgICImIzg3MDY7IiA+PCEtLSBwYXJ0aWFsIGRpZmZlcmVudGlhbCwgVSsyMjAyIElTT3RlY2ggIC0tPg0KLTwhRU5USVRZIGV4aXN0ICAgICImIzg3MDc7IiA+PCEtLSB0aGVyZSBleGlzdHMsIFUrMjIwMyBJU090ZWNoIC0tPg0KLTwhRU5USVRZIGVtcHR5ICAgICImIzg3MDk7IiA+PCEtLSBlbXB0eSBzZXQgPSBudWxsIHNldCA9IGRpYW1ldGVyLCBVKzIyMDUgSVNPYW1zbyAtLT4NCi08IUVOVElUWSBuYWJsYSAgICAiJiM4NzExOyIgPjwhLS0gbmFibGEgPSBiYWNrd2FyZCBkaWZmZXJlbmNlLCBVKzIyMDcgSVNPdGVjaCAtLT4NCi08IUVOVElUWSBpc2luICAgICAiJiM4NzEyOyIgPjwhLS0gZWxlbWVudCBvZiwgVSsyMjA4IElTT3RlY2ggLS0+DQotPCFFTlRJVFkgbm90aW4gICAgIiYjODcxMzsiID48IS0tIG5vdCBhbiBlbGVtZW50IG9mLCBVKzIyMDkgSVNPdGVjaCAtLT4NCi08IUVOVElUWSBuaSAgICAgICAiJiM4NzE1OyIgPjwhLS0gY29udGFpbnMgYXMgbWVtYmVyLCBVKzIyMEIgSVNPdGVjaCAtLT4NCi08IS0tIHNob3VsZCB0aGVyZSBiZSBhIG1vcmUgbWVtb3JhYmxlIG5hbWUgdGhhbiAnbmknPyAtLT4NCi08IUVOVElUWSBwcm9kICAgICAiJiM4NzE5OyIgPjwhLS0gbi1hcnkgcHJvZHVjdCA9IHByb2R1Y3Qgc2lnbiwgVSsyMjBGIElTT2Ftc2IgLS0+DQotPCEtLSBwcm9kIGlzIE5PVCB0aGUgc2FtZSBjaGFyYWN0ZXIgYXMgVSswM0EwICdncmVlayBjYXBpdGFsIGxldHRlciBwaScgdGhvdWdoDQotICAgICB0aGUgc2FtZSBnbHlwaCBtaWdodCBiZSB1c2VkIGZvciBib3RoIC0tPg0KLTwhRU5USVRZIHN1bSAgICAgICImIzg3MjE7IiA+PCEtLSBuLWFyeSBzdW1hdGlvbiwgVSsyMjExIElTT2Ftc2IgLS0+DQotPCEtLSBzdW0gaXMgTk9UIHRoZSBzYW1lIGNoYXJhY3RlciBhcyBVKzAzQTMgJ2dyZWVrIGNhcGl0YWwgbGV0dGVyIHNpZ21hJw0KLSAgICAgdGhvdWdoIHRoZSBzYW1lIGdseXBoIG1pZ2h0IGJlIHVzZWQgZm9yIGJvdGggLS0+DQotPCFFTlRJVFkgbWludXMgICAgIiYjODcyMjsiID48IS0tIG1pbnVzIHNpZ24sIFUrMjIxMiBJU090ZWNoIC0tPg0KLTwhRU5USVRZIGxvd2FzdCAgICImIzg3Mjc7IiA+PCEtLSBhc3RlcmlzayBvcGVyYXRvciwgVSsyMjE3IElTT3RlY2ggLS0+DQotPCFFTlRJVFkgcmFkaWMgICAgIiYjODczMDsiID48IS0tIHNxdWFyZSByb290ID0gcmFkaWNhbCBzaWduLCBVKzIyMUEgSVNPdGVjaCAtLT4NCi08IUVOVElUWSBwcm9wICAgICAiJiM4NzMzOyIgPjwhLS0gcHJvcG9ydGlvbmFsIHRvLCBVKzIyMUQgSVNPdGVjaCAtLT4NCi08IUVOVElUWSBpbmZpbiAgICAiJiM4NzM0OyIgPjwhLS0gaW5maW5pdHksIFUrMjIxRSBJU090ZWNoIC0tPg0KLTwhRU5USVRZIGFuZyAgICAgICImIzg3MzY7IiA+PCEtLSBhbmdsZSwgVSsyMjIwIElTT2Ftc28gLS0+DQotPCFFTlRJVFkgYW5kICAgICAgIiYjODc0MzsiID48IS0tIGxvZ2ljYWwgYW5kID0gd2VkZ2UsIFUrMjIyNyBJU090ZWNoIC0tPg0KLTwhRU5USVRZIG9yICAgICAgICImIzg3NDQ7IiA+PCEtLSBsb2dpY2FsIG9yID0gdmVlLCBVKzIyMjggSVNPdGVjaCAtLT4NCi08IUVOVElUWSBjYXAgICAgICAiJiM4NzQ1OyIgPjwhLS0gaW50ZXJzZWN0aW9uID0gY2FwLCBVKzIyMjkgSVNPdGVjaCAtLT4NCi08IUVOVElUWSBjdXAgICAgICAiJiM4NzQ2OyIgPjwhLS0gdW5pb24gPSBjdXAsIFUrMjIyQSBJU090ZWNoIC0tPg0KLTwhRU5USVRZIGludCAgICAgICImIzg3NDc7IiA+PCEtLSBpbnRlZ3JhbCwgVSsyMjJCIElTT3RlY2ggLS0+DQotPCFFTlRJVFkgdGhlcmU0ICAgIiYjODc1NjsiID48IS0tIHRoZXJlZm9yZSwgVSsyMjM0IElTT3RlY2ggLS0+DQotPCFFTlRJVFkgc2ltICAgICAgIiYjODc2NDsiID48IS0tIHRpbGRlIG9wZXJhdG9yID0gdmFyaWVzIHdpdGggPSBzaW1pbGFyIHRvLCBVKzIyM0MgSVNPdGVjaCAtLT4NCi08IS0tIHRpbGRlIG9wZXJhdG9yIGlzIE5PVCB0aGUgc2FtZSBjaGFyYWN0ZXIgYXMgdGhlIHRpbGRlLCBVKzAwN0UsDQotICAgICBhbHRob3VnaCB0aGUgc2FtZSBnbHlwaCBtaWdodCBiZSB1c2VkIHRvIHJlcHJlc2VudCBib3RoICAtLT4NCi08IUVOVElUWSBjb25nICAgICAiJiM4NzczOyIgPjwhLS0gYXBwcm94aW1hdGVseSBlcXVhbCB0bywgVSsyMjQ1IElTT3RlY2ggLS0+DQotPCFFTlRJVFkgYXN5bXAgICAgIiYjODc3NjsiID48IS0tIGFsbW9zdCBlcXVhbCB0byA9IGFzeW1wdG90aWMgdG8sIFUrMjI0OCBJU09hbXNyIC0tPg0KLTwhRU5USVRZIG5lICAgICAgICImIzg4MDA7IiA+PCEtLSBub3QgZXF1YWwgdG8sIFUrMjI2MCBJU090ZWNoIC0tPg0KLTwhRU5USVRZIGVxdWl2ICAgICImIzg4MDE7IiA+PCEtLSBpZGVudGljYWwgdG8sIFUrMjI2MSBJU090ZWNoIC0tPg0KLTwhRU5USVRZIGxlICAgICAgICImIzg4MDQ7IiA+PCEtLSBsZXNzLXRoYW4gb3IgZXF1YWwgdG8sIFUrMjI2NCBJU090ZWNoIC0tPg0KLTwhRU5USVRZIGdlICAgICAgICImIzg4MDU7IiA+PCEtLSBncmVhdGVyLXRoYW4gb3IgZXF1YWwgdG8sIFUrMjI2NSBJU090ZWNoIC0tPg0KLTwhRU5USVRZIHN1YiAgICAgICImIzg4MzQ7IiA+PCEtLSBzdWJzZXQgb2YsIFUrMjI4MiBJU090ZWNoIC0tPg0KLTwhRU5USVRZIHN1cCAgICAgICImIzg4MzU7IiA+PCEtLSBzdXBlcnNldCBvZiwgVSsyMjgzIElTT3RlY2ggLS0+DQotPCEtLSBub3RlIHRoYXQgbnN1cCwgJ25vdCBhIHN1cGVyc2V0IG9mLCBVKzIyODMnIGlzIG5vdCBjb3ZlcmVkIGJ5IHRoZSBTeW1ib2wNCi0gICAgIGZvbnQgZW5jb2RpbmcgYW5kIGlzIG5vdCBpbmNsdWRlZC4gU2hvdWxkIGl0IGJlLCBmb3Igc3ltbWV0cnk/DQotICAgICBJdCBpcyBpbiBJU09hbXNuICAtLT4NCi08IUVOVElUWSBuc3ViICAgICAiJiM4ODM2OyIgPjwhLS0gbm90IGEgc3Vic2V0IG9mLCBVKzIyODQgSVNPYW1zbiAtLT4NCi08IUVOVElUWSBzdWJlICAgICAiJiM4ODM4OyIgPjwhLS0gc3Vic2V0IG9mIG9yIGVxdWFsIHRvLCBVKzIyODYgSVNPdGVjaCAtLT4NCi08IUVOVElUWSBzdXBlICAgICAiJiM4ODM5OyIgPjwhLS0gc3VwZXJzZXQgb2Ygb3IgZXF1YWwgdG8sIFUrMjI4NyBJU090ZWNoIC0tPg0KLTwhRU5USVRZIG9wbHVzICAgICImIzg4NTM7IiA+PCEtLSBjaXJjbGVkIHBsdXMgPSBkaXJlY3Qgc3VtLCBVKzIyOTUgSVNPYW1zYiAtLT4NCi08IUVOVElUWSBvdGltZXMgICAiJiM4ODU1OyIgPjwhLS0gY2lyY2xlZCB0aW1lcyA9IHZlY3RvciBwcm9kdWN0LCBVKzIyOTcgSVNPYW1zYiAtLT4NCi08IUVOVElUWSBwZXJwICAgICAiJiM4ODY5OyIgPjwhLS0gdXAgdGFjayA9IG9ydGhvZ29uYWwgdG8gPSBwZXJwZW5kaWN1bGFyLCBVKzIyQTUgSVNPdGVjaCAtLT4NCi08IUVOVElUWSBzZG90ICAgICAiJiM4OTAxOyIgPjwhLS0gZG90IG9wZXJhdG9yLCBVKzIyQzUgSVNPYW1zYiAtLT4NCi08IS0tIGRvdCBvcGVyYXRvciBpcyBOT1QgdGhlIHNhbWUgY2hhcmFjdGVyIGFzIFUrMDBCNyBtaWRkbGUgZG90IC0tPg0KLQ0KLTwhLS0gTWlzY2VsbGFuZW91cyBUZWNobmljYWwgLS0+DQotPCFFTlRJVFkgbGNlaWwgICAgIiYjODk2ODsiID48IS0tIGxlZnQgY2VpbGluZyA9IGFwbCB1cHN0aWxlLCBVKzIzMDggSVNPYW1zYyAgLS0+DQotPCFFTlRJVFkgcmNlaWwgICAgIiYjODk2OTsiID48IS0tIHJpZ2h0IGNlaWxpbmcsIFUrMjMwOSBJU09hbXNjICAtLT4NCi08IUVOVElUWSBsZmxvb3IgICAiJiM4OTcwOyIgPjwhLS0gbGVmdCBmbG9vciA9IGFwbCBkb3duc3RpbGUsIFUrMjMwQSBJU09hbXNjICAtLT4NCi08IUVOVElUWSByZmxvb3IgICAiJiM4OTcxOyIgPjwhLS0gcmlnaHQgZmxvb3IsIFUrMjMwQiBJU09hbXNjICAtLT4NCi08IUVOVElUWSBsYW5nICAgICAiJiM5MDAxOyIgPjwhLS0gbGVmdC1wb2ludGluZyBhbmdsZSBicmFja2V0ID0gYnJhLCBVKzIzMjkgSVNPdGVjaCAtLT4NCi08IS0tIGxhbmcgaXMgTk9UIHRoZSBzYW1lIGNoYXJhY3RlciBhcyBVKzAwM0MgJ2xlc3MgdGhhbicNCi0gICAgIG9yIFUrMjAzOSAnc2luZ2xlIGxlZnQtcG9pbnRpbmcgYW5nbGUgcXVvdGF0aW9uIG1hcmsnIC0tPg0KLTwhRU5USVRZIHJhbmcgICAgICImIzkwMDI7IiA+PCEtLSByaWdodC1wb2ludGluZyBhbmdsZSBicmFja2V0ID0ga2V0LCBVKzIzMkEgSVNPdGVjaCAtLT4NCi08IS0tIHJhbmcgaXMgTk9UIHRoZSBzYW1lIGNoYXJhY3RlciBhcyBVKzAwM0UgJ2dyZWF0ZXIgdGhhbicNCi0gICAgIG9yIFUrMjAzQSAnc2luZ2xlIHJpZ2h0LXBvaW50aW5nIGFuZ2xlIHF1b3RhdGlvbiBtYXJrJyAtLT4NCi0NCi08IS0tIEdlb21ldHJpYyBTaGFwZXMgLS0+DQotPCFFTlRJVFkgbG96ICAgICAgIiYjOTY3NDsiID48IS0tIGxvemVuZ2UsIFUrMjVDQSBJU09wdWIgLS0+DQotDQotPCEtLSBNaXNjZWxsYW5lb3VzIFN5bWJvbHMgLS0+DQotPCFFTlRJVFkgc3BhZGVzICAgIiYjOTgyNDsiID48IS0tIGJsYWNrIHNwYWRlIHN1aXQsIFUrMjY2MCBJU09wdWIgLS0+DQotPCEtLSBibGFjayBoZXJlIHNlZW1zIHRvIG1lYW4gZmlsbGVkIGFzIG9wcG9zZWQgdG8gaG9sbG93IC0tPg0KLTwhRU5USVRZIGNsdWJzICAgICImIzk4Mjc7IiA+PCEtLSBibGFjayBjbHViIHN1aXQgPSBzaGFtcm9jaywgVSsyNjYzIElTT3B1YiAtLT4NCi08IUVOVElUWSBoZWFydHMgICAiJiM5ODI5OyIgPjwhLS0gYmxhY2sgaGVhcnQgc3VpdCA9IHZhbGVudGluZSwgVSsyNjY1IElTT3B1YiAtLT4NCi08IUVOVElUWSBkaWFtcyAgICAiJiM5ODMwOyIgPjwhLS0gYmxhY2sgZGlhbW9uZCBzdWl0LCBVKzI2NjYgSVNPcHViIC0tPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLXN5bWJvbC5lbnQgLS0+DQotDQotDQotPCFFTlRJVFkgJSB4aHRtbC1zcGVjaWFsDQotICAgIFBVQkxJQyAiLS8vVzNDLy9FTlRJVElFUyBTcGVjaWFsIGZvciBYSFRNTC8vRU4iDQotICAgICAgICAgICAieGh0bWwtc3BlY2lhbC5lbnQiID4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYTUwtY29tcGF0aWJsZSBJU08gU3BlY2lhbCBDaGFyYWN0ZXIgRW50aXR5IFNldCBmb3IgWEhUTUwgLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtc3BlY2lhbC5lbnQNCi0NCi0gICAgIFR5cGljYWwgaW52b2NhdGlvbjoNCi0NCi0gICAgICAgPCFFTlRJVFkgJSB4aHRtbC1zcGVjaWFsDQotICAgICAgICAgICBQVUJMSUMgIi0vL1czQy8vRU5USVRJRVMgU3BlY2lhbCBmb3IgWEhUTUwvL0VOIg0KLSAgICAgICAgICAgICAgICAgICJ4aHRtbC1zcGVjaWFsLmVudCIgPg0KLSAgICAgICAleGh0bWwtc3BlY2lhbDsNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VOVElUSUVTIFNwZWNpYWwgZm9yIFhIVE1MLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtc3BlY2lhbC5lbnQiDQotDQotICAgICBSZXZpc2lvbjogICRJZDogd21sMjAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1OCBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBQb3J0aW9ucyAoQykgSW50ZXJuYXRpb25hbCBPcmdhbml6YXRpb24gZm9yIFN0YW5kYXJkaXphdGlvbiAxOTg2Og0KLSAgICAgUGVybWlzc2lvbiB0byBjb3B5IGluIGFueSBmb3JtIGlzIGdyYW50ZWQgZm9yIHVzZSB3aXRoIGNvbmZvcm1pbmcNCi0gICAgIFNHTUwgc3lzdGVtcyBhbmQgYXBwbGljYXRpb25zIGFzIGRlZmluZWQgaW4gSVNPIDg4NzksIHByb3ZpZGVkDQotICAgICB0aGlzIG5vdGljZSBpcyBpbmNsdWRlZCBpbiBhbGwgY29waWVzLg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLTIwMDAtMTAtMjg6IGFkZGVkICZhcG9zOyBhbmQgYWx0ZXJlZCBYTUwgUHJlZGVmaW5lZCBFbnRpdGllcyBmb3IgY29tcGF0aWJpbGl0eQ0KLS0tPg0KLQ0KLTwhLS0gUmVsZXZhbnQgSVNPIGVudGl0eSBzZXQgaXMgZ2l2ZW4gdW5sZXNzIG5hbWVzIGFyZSBuZXdseSBpbnRyb2R1Y2VkLg0KLSAgICAgTmV3IG5hbWVzIChpLmUuLCBub3QgaW4gSVNPIDg4NzkgW1NHTUxdIGxpc3QpIGRvIG5vdCBjbGFzaCB3aXRoDQotICAgICBhbnkgZXhpc3RpbmcgSVNPIDg4NzkgZW50aXR5IG5hbWVzLiBJU08gMTA2NDYgW0lTTzEwNjQ2XSBjaGFyYWN0ZXINCi0gICAgIG51bWJlcnMgYXJlIGdpdmVuIGZvciBlYWNoIGNoYXJhY3RlciwgaW4gaGV4LiBFbnRpdHkgdmFsdWVzIGFyZQ0KLSAgICAgZGVjaW1hbCBjb252ZXJzaW9ucyBvZiB0aGUgSVNPIDEwNjQ2IHZhbHVlcyBhbmQgcmVmZXIgdG8gdGhlDQotICAgICBkb2N1bWVudCBjaGFyYWN0ZXIgc2V0LiBOYW1lcyBhcmUgVW5pY29kZSBbVU5JQ09ERV0gbmFtZXMuDQotLS0+DQotDQotPCEtLSBDMCBDb250cm9scyBhbmQgQmFzaWMgTGF0aW4gLS0+DQotPCFFTlRJVFkgbHQgICAgICAiJiMzODsmIzYwOyIgPjwhLS0gbGVzcy10aGFuIHNpZ24sIFUrMDAzQyBJU09udW0gLS0+DQotPCFFTlRJVFkgZ3QgICAgICAiJiM2MjsiID48IS0tIGdyZWF0ZXItdGhhbiBzaWduLCBVKzAwM0UgSVNPbnVtIC0tPg0KLTwhRU5USVRZIGFtcCAgICAgIiYjMzg7JiMzODsiID48IS0tIGFtcGVyc2FuZCwgVSswMDI2IElTT251bSAtLT4NCi08IUVOVElUWSBhcG9zICAgICImIzM5OyIgPjwhLS0gYXBvc3Ryb3BoZSwgVSswMDI3IElTT251bSAtLT4NCi08IUVOVElUWSBxdW90ICAgICImIzM0OyIgPjwhLS0gcXVvdGF0aW9uIG1hcmsgPSBBUEwgcXVvdGUsIFUrMDAyMiBJU09udW0gLS0+DQotDQotPCEtLSBMYXRpbiBFeHRlbmRlZC1BIC0tPg0KLTwhRU5USVRZIE9FbGlnICAgIiYjMzM4OyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBsaWdhdHVyZSBPRSwgVSswMTUyIElTT2xhdDIgLS0+DQotPCFFTlRJVFkgb2VsaWcgICAiJiMzMzk7IiA+PCEtLSBsYXRpbiBzbWFsbCBsaWdhdHVyZSBvZSwgVSswMTUzIElTT2xhdDIgLS0+DQotDQotPCEtLSBsaWdhdHVyZSBpcyBhIG1pc25vbWVyLCB0aGlzIGlzIGEgc2VwYXJhdGUgY2hhcmFjdGVyIGluIHNvbWUgbGFuZ3VhZ2VzIC0tPg0KLTwhRU5USVRZIFNjYXJvbiAgIiYjMzUyOyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBsZXR0ZXIgUyB3aXRoIGNhcm9uLCBVKzAxNjAgSVNPbGF0MiAtLT4NCi08IUVOVElUWSBzY2Fyb24gICImIzM1MzsiID48IS0tIGxhdGluIHNtYWxsIGxldHRlciBzIHdpdGggY2Fyb24sIFUrMDE2MSBJU09sYXQyIC0tPg0KLTwhRU5USVRZIFl1bWwgICAgIiYjMzc2OyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBsZXR0ZXIgWSB3aXRoIGRpYWVyZXNpcywgVSswMTc4IElTT2xhdDIgLS0+DQotDQotPCEtLSBTcGFjaW5nIE1vZGlmaWVyIExldHRlcnMgLS0+DQotPCFFTlRJVFkgY2lyYyAgICAiJiM3MTA7IiA+PCEtLSBtb2RpZmllciBsZXR0ZXIgY2lyY3VtZmxleCBhY2NlbnQsIFUrMDJDNiBJU09wdWIgLS0+DQotPCFFTlRJVFkgdGlsZGUgICAiJiM3MzI7IiA+PCEtLSBzbWFsbCB0aWxkZSwgVSswMkRDIElTT2RpYSAtLT4NCi0NCi08IS0tIEdlbmVyYWwgUHVuY3R1YXRpb24gLS0+DQotPCFFTlRJVFkgZW5zcCAgICAiJiM4MTk0OyIgPjwhLS0gZW4gc3BhY2UsIFUrMjAwMiBJU09wdWIgLS0+DQotPCFFTlRJVFkgZW1zcCAgICAiJiM4MTk1OyIgPjwhLS0gZW0gc3BhY2UsIFUrMjAwMyBJU09wdWIgLS0+DQotPCFFTlRJVFkgdGhpbnNwICAiJiM4MjAxOyIgPjwhLS0gdGhpbiBzcGFjZSwgVSsyMDA5IElTT3B1YiAtLT4NCi08IUVOVElUWSB6d25qICAgICImIzgyMDQ7IiA+PCEtLSB6ZXJvIHdpZHRoIG5vbi1qb2luZXIsIFUrMjAwQyBORVcgUkZDIDIwNzAgLS0+DQotPCFFTlRJVFkgendqICAgICAiJiM4MjA1OyIgPjwhLS0gemVybyB3aWR0aCBqb2luZXIsIFUrMjAwRCBORVcgUkZDIDIwNzAgLS0+DQotPCFFTlRJVFkgbHJtICAgICAiJiM4MjA2OyIgPjwhLS0gbGVmdC10by1yaWdodCBtYXJrLCBVKzIwMEUgTkVXIFJGQyAyMDcwIC0tPg0KLTwhRU5USVRZIHJsbSAgICAgIiYjODIwNzsiID48IS0tIHJpZ2h0LXRvLWxlZnQgbWFyaywgVSsyMDBGIE5FVyBSRkMgMjA3MCAtLT4NCi08IUVOVElUWSBuZGFzaCAgICImIzgyMTE7IiA+PCEtLSBlbiBkYXNoLCBVKzIwMTMgSVNPcHViIC0tPg0KLTwhRU5USVRZIG1kYXNoICAgIiYjODIxMjsiID48IS0tIGVtIGRhc2gsIFUrMjAxNCBJU09wdWIgLS0+DQotPCFFTlRJVFkgbHNxdW8gICAiJiM4MjE2OyIgPjwhLS0gbGVmdCBzaW5nbGUgcXVvdGF0aW9uIG1hcmssIFUrMjAxOCBJU09udW0gLS0+DQotPCFFTlRJVFkgcnNxdW8gICAiJiM4MjE3OyIgPjwhLS0gcmlnaHQgc2luZ2xlIHF1b3RhdGlvbiBtYXJrLCBVKzIwMTkgSVNPbnVtIC0tPg0KLTwhRU5USVRZIHNicXVvICAgIiYjODIxODsiID48IS0tIHNpbmdsZSBsb3ctOSBxdW90YXRpb24gbWFyaywgVSsyMDFBIE5FVyAtLT4NCi08IUVOVElUWSBsZHF1byAgICImIzgyMjA7IiA+PCEtLSBsZWZ0IGRvdWJsZSBxdW90YXRpb24gbWFyaywgVSsyMDFDIElTT251bSAtLT4NCi08IUVOVElUWSByZHF1byAgICImIzgyMjE7IiA+PCEtLSByaWdodCBkb3VibGUgcXVvdGF0aW9uIG1hcmssIFUrMjAxRCBJU09udW0gLS0+DQotPCFFTlRJVFkgYmRxdW8gICAiJiM4MjIyOyIgPjwhLS0gZG91YmxlIGxvdy05IHF1b3RhdGlvbiBtYXJrLCBVKzIwMUUgTkVXIC0tPg0KLTwhRU5USVRZIGRhZ2dlciAgIiYjODIyNDsiID48IS0tIGRhZ2dlciwgVSsyMDIwIElTT3B1YiAtLT4NCi08IUVOVElUWSBEYWdnZXIgICImIzgyMjU7IiA+PCEtLSBkb3VibGUgZGFnZ2VyLCBVKzIwMjEgSVNPcHViIC0tPg0KLTwhRU5USVRZIHBlcm1pbCAgIiYjODI0MDsiID48IS0tIHBlciBtaWxsZSBzaWduLCBVKzIwMzAgSVNPdGVjaCAtLT4NCi0NCi08IS0tIGxzYXF1byBpcyBwcm9wb3NlZCBidXQgbm90IHlldCBJU08gc3RhbmRhcmRpemVkIC0tPg0KLTwhRU5USVRZIGxzYXF1byAgIiYjODI0OTsiID48IS0tIHNpbmdsZSBsZWZ0LXBvaW50aW5nIGFuZ2xlIHF1b3RhdGlvbiBtYXJrLCBVKzIwMzkgSVNPIHByb3Bvc2VkIC0tPg0KLTwhLS0gcnNhcXVvIGlzIHByb3Bvc2VkIGJ1dCBub3QgeWV0IElTTyBzdGFuZGFyZGl6ZWQgLS0+DQotPCFFTlRJVFkgcnNhcXVvICAiJiM4MjUwOyIgPjwhLS0gc2luZ2xlIHJpZ2h0LXBvaW50aW5nIGFuZ2xlIHF1b3RhdGlvbiBtYXJrLCBVKzIwM0EgSVNPIHByb3Bvc2VkIC0tPg0KLTwhRU5USVRZIGV1cm8gICAgIiYjODM2NDsiID48IS0tIGV1cm8gc2lnbiwgVSsyMEFDIE5FVyAtLT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1zcGVjaWFsLmVudCAtLT4NCi0NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1jaGFyZW50LTEubW9kIC0tPg0KLQ0KLTwhLS0gDQotCVdNTCBkb2N1bWVudCBtb2RlbA0KLS0tPg0KLTwhRU5USVRZICUgd21sLW1vZGVsLm1vZCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9FTlRJVElFUyBXTUwgMi4wIERvY3VtZW50IE1vZGVsIDEuMC8vRU4iDQotICAgICAgICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sMjAtbW9kZWwtMS5tb2QiPg0KLTwhLS0gV01MIDIuMCBEb2N1bWVudCBNb2RlbCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHdtbDIwLW1vZGVsLTEubW9kIC0tPg0KLTwhLS0gDQotICAgIEBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSwgTHRkLiAyMDAxLg0KLQ0KLQlUZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UgYXJlIGF2YWlsYWJsZSBmcm9tIHRoZSBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSBMdGQuIA0KLQlXZWIgc2l0ZSAoaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvd2hhdC9jb3B5cmlnaHQuaHRtKS4NCi0tLT4NCi08IS0tDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0VOVElUSUVTIFdNTCAyLjAgRG9jdW1lbnQgTW9kZWwgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9kdGQvd21sMjAtbW9kZWwtMS5tb2QiDQotICAgICAgDQotICAgICBUaGlzIG1vZHVsZSBkZXNjcmliZXMgdGhlIGdyb3VwaW5ncyBvZiBlbGVtZW50cyB0aGF0IG1ha2UgdXANCi0gICAgIGNvbW1vbiBjb250ZW50IG1vZGVscyBmb3IgV01MIGFuZCBYSFRNTCBlbGVtZW50cy4NCi0NCi0gICAgIFRocmVlIGJhc2ljIGNvbnRlbnQgbW9kZWxzIGFyZSBkZWNsYXJlZDoNCi0NCi0gICAgICAgICAlSW5saW5lLm1peDsgIGNoYXJhY3Rlci1sZXZlbCBlbGVtZW50cw0KLSAgICAgICAgICVCbG9jay5taXg7ICAgYmxvY2stbGlrZSBlbGVtZW50cywgZWcuLCBwYXJhZ3JhcGhzIGFuZCBsaXN0cw0KLSAgICAgICAgICVGbG93Lm1peDsgICAgYW55IGJsb2NrIG9yIGlubGluZSBlbGVtZW50cw0KLQ0KLSAgICAgQW55IHBhcmFtZXRlciBlbnRpdGllcyBkZWNsYXJlZCBpbiB0aGlzIG1vZHVsZSBtYXkgYmUgdXNlZA0KLSAgICAgdG8gY3JlYXRlIGVsZW1lbnQgY29udGVudCBtb2RlbHMsIGJ1dCB0aGUgYWJvdmUgdGhyZWUgYXJlDQotICAgICBjb25zaWRlcmVkICdnbG9iYWwnIChpbnNvZmFyIGFzIHRoYXQgdGVybSBhcHBsaWVzIGhlcmUpLg0KLSAgICAgDQotICAgICAgICAJICAgICANCi0tLT4NCi08IS0tIA0KLQlPcHRpb25hbCBFbGVtZW50cyBpbiBoZWFkICANCi0tLT4NCi08IUVOVElUWSAlIEhlYWRPcHRzLm1peCAiKCAlbWV0YS5xbmFtZTsgDQotCQl8ICVsaW5rLnFuYW1lOyANCi0JCXwgJXN0eWxlLnFuYW1lOyANCi0JCXwgJW9iamVjdC5xbmFtZTsgDQotCQl8ICVhY2Nlc3MucW5hbWU7KSoiPg0KLTwhLS0gDQotCVRhc2sgZWxlbWVudHMNCi0NCi0JVXNlZCBmb3IgdGhlIFdNTCBkbyBhbmQgb25ldmVudCBlbGVtZW50cw0KLS0tPg0KLTwhRU5USVRZICUgVGFza3MuY2xhc3MgIiglZ28ucW5hbWU7IA0KLQkJfCAlcHJldi5xbmFtZTsgDQotCQl8ICVub29wLnFuYW1lOyANCi0JCXwgJXJlZnJlc2gucW5hbWU7KSI+DQotPCEtLSANCi0JVGFza3Mgd2l0aG91dCBub29wIGVsZW1lbnQNCi0NCi0JVXNlZCBmb3IgdGhlIFdNTCBhbmNob3INCi0tLT4NCi08IUVOVElUWSAlIFRhc2tzLW5vbm9vcC5jbGFzcyAiJWdvLnFuYW1lOyANCi0JCXwgJXByZXYucW5hbWU7IA0KLQkJfCAlcmVmcmVzaC5xbmFtZTsiPg0KLTwhLS0NCi0JRG8gZWxlbWVudA0KLS0tPg0KLTwhRU5USVRZICUgRG8uY2xhc3MgIiVkby5xbmFtZTsiPg0KLTwhLS0gDQotCU1pc2NlbGxhbmVvdXMgRWxlbWVudHMgIA0KLQkNCi0JVGhpcyBpcyBub3QgdXNlZCBmb3IgYW55dGhpbmcgcmlnaHQgbm93LiANCi0tLT4NCi08IUVOVElUWSAlIE1pc2MuY2xhc3MgIiI+DQotPCEtLSANCi0JSW5saW5lIEVsZW1lbnRzICANCi0tLT4NCi08IUVOVElUWSAlIElubFN0cnVjdC5jbGFzcyAiJWJyLnFuYW1lOyANCi0JfCAlc3Bhbi5xbmFtZTsiPg0KLTwhRU5USVRZICUgSW5sUGhyYXMuY2xhc3MgInwgJWVtLnFuYW1lOyANCi0JfCAlc3Ryb25nLnFuYW1lOyANCi0JfCAlZGZuLnFuYW1lOyANCi0JfCAlY29kZS5xbmFtZTsgDQotCXwgJXNhbXAucW5hbWU7IA0KLQl8ICVrYmQucW5hbWU7IA0KLQl8ICV2YXIucW5hbWU7IA0KLQl8ICVjaXRlLnFuYW1lOyANCi0gICAgIAl8ICVhYmJyLnFuYW1lOyANCi0JfCAlYWNyb255bS5xbmFtZTsgDQotCXwgJXEucW5hbWU7Ij4NCi08IUVOVElUWSAlIElubFByZXMuY2xhc3MgInwgJWkucW5hbWU7IA0KLQl8ICViLnFuYW1lOyANCi0JfCAlYmlnLnFuYW1lOyANCi0JfCAlc21hbGwucW5hbWU7DQotCXwgJXUucW5hbWU7Ij4NCi08IUVOVElUWSAlIEkxOG4uY2xhc3MgIiI+DQotPCFFTlRJVFkgJSBBbmNob3IuY2xhc3MgInwgJWEucW5hbWU7IA0KLQl8ICVhbmNob3IucW5hbWU7IHwgJWRvLnFuYW1lOyI+DQotPCFFTlRJVFkgJSBJbmxTcGVjaWFsLmNsYXNzICJ8ICVpbWcucW5hbWU7IA0KLQkgfCAlb2JqZWN0LnFuYW1lOyANCi0JfCAlZ2V0dmFyLnFuYW1lOyI+DQotPCFFTlRJVFkgJSBJbmxGb3JtLmNsYXNzICJ8ICVpbnB1dC5xbmFtZTsgDQotCSB8ICVzZWxlY3QucW5hbWU7IA0KLQkgfCAldGV4dGFyZWEucW5hbWU7DQotICAgICAgICAgfCAlbGFiZWwucW5hbWU7Ij4NCi08IUVOVElUWSAlIElubGluZS5leHRyYSAiIj4NCi08IUVOVElUWSAlIElubGluZS5jbGFzcyAiJUlubFN0cnVjdC5jbGFzczsNCi0gICAgICAlSW5sUGhyYXMuY2xhc3M7DQotICAgICAgJUlubFByZXMuY2xhc3M7DQotICAgICAgJUFuY2hvci5jbGFzczsNCi0gICAgICAlSW5sU3BlY2lhbC5jbGFzczsNCi0gICAgICAlSW5sRm9ybS5jbGFzczsNCi0gICAgICAlSW5saW5lLmV4dHJhOyI+DQotPCFFTlRJVFkgJSBJbmxOb0FuY2hvci5jbGFzcyAiJUlubFN0cnVjdC5jbGFzczsNCi0gICAgICAlSW5sUGhyYXMuY2xhc3M7DQotICAgICAgJUlubFByZXMuY2xhc3M7DQotICAgICAgJUlubFNwZWNpYWwuY2xhc3M7DQotICAgICAgJUlubEZvcm0uY2xhc3M7DQotICAgICAgJUlubGluZS5leHRyYTsiPg0KLTwhRU5USVRZICUgSW5sTm9BbmNob3IubWl4ICIlSW5sTm9BbmNob3IuY2xhc3M7DQotICAgICAgJU1pc2MuY2xhc3M7Ij4NCi08IUVOVElUWSAlIElubGluZS5taXggIiVJbmxpbmUuY2xhc3M7DQotICAgICAgJU1pc2MuY2xhc3M7Ij4NCi08IS0tIA0KLQlCbG9jayBFbGVtZW50cyAgDQotLS0+DQotPCFFTlRJVFkgJSBIZWFkaW5nLmNsYXNzICIlaDEucW5hbWU7IA0KLQl8ICVoMi5xbmFtZTsgDQotCXwgJWgzLnFuYW1lOyANCi0JfCAlaDQucW5hbWU7IA0KLQl8ICVoNS5xbmFtZTsgDQotCXwgJWg2LnFuYW1lOyI+DQotPCFFTlRJVFkgJSBMaXN0LmNsYXNzICIldWwucW5hbWU7IA0KLQl8ICVvbC5xbmFtZTsgDQotCXwgJWRsLnFuYW1lOyI+DQotPCFFTlRJVFkgJSBUYWJsZS5jbGFzcyAifCAldGFibGUucW5hbWU7Ij4NCi08IUVOVElUWSAlIEZvcm0uY2xhc3MgInwgJWZvcm0ucW5hbWU7Ij4NCi08IUVOVElUWSAlIEZpZWxkc2V0LmNsYXNzICJ8ICVmaWVsZHNldC5xbmFtZTsiPg0KLTwhRU5USVRZICUgQmxrU3RydWN0LmNsYXNzICIlcC5xbmFtZTsgDQotCXwgJWRpdi5xbmFtZTsiPg0KLTwhRU5USVRZICUgQmxrUGhyYXMuY2xhc3MgInwgJXByZS5xbmFtZTsgDQotCSB8ICVibG9ja3F1b3RlLnFuYW1lOyANCi0JIHwgJWFkZHJlc3MucW5hbWU7Ij4NCi08IUVOVElUWSAlIEJsa1ByZXMuY2xhc3MgInwgJWhyLnFuYW1lOyI+DQotPCFFTlRJVFkgJSBCbGtTcGVjaWFsLmNsYXNzICIlVGFibGUuY2xhc3M7DQotICAgICAgJUZvcm0uY2xhc3M7DQotICAgICAgJUZpZWxkc2V0LmNsYXNzOyI+DQotPCFFTlRJVFkgJSBCbG9jay5leHRyYSAiIj4NCi08IUVOVElUWSAlIEJsb2NrLmNsYXNzICIlQmxrU3RydWN0LmNsYXNzOw0KLSAgICAgICVCbGtQaHJhcy5jbGFzczsNCi0JICVCbGtQcmVzLmNsYXNzOw0KLSAgICAgICVCbGtTcGVjaWFsLmNsYXNzOw0KLSAgICAgICVCbG9jay5leHRyYTsiPg0KLTwhRU5USVRZICUgQmxvY2subWl4ICIlSGVhZGluZy5jbGFzczsNCi0gICAgICB8ICVMaXN0LmNsYXNzOw0KLSAgICAgIHwgJUJsb2NrLmNsYXNzOyAgICAgDQotICAgICAgfCAlRG8uY2xhc3M7DQotICAgICAgJU1pc2MuY2xhc3M7Ij4NCi08IUVOVElUWSAlIEJsa05vRm9ybS5taXggIiVIZWFkaW5nLmNsYXNzOw0KLSAgICAgIHwgJUxpc3QuY2xhc3M7DQotICAgICAgfCAlQmxrU3RydWN0LmNsYXNzOw0KLSAgICAgICVCbGtQaHJhcy5jbGFzczsNCi0gICAgICAlQmxrUHJlcy5jbGFzczsNCi0gICAgICB8ICV0YWJsZS5xbmFtZTsNCi0gICAgICAlQmxvY2suZXh0cmE7DQotICAgICAgJU1pc2MuY2xhc3M7Ij4NCi08IS0tIA0KLQlBbGwgQ29udGVudCBFbGVtZW50cyAgDQotLS0+DQotPCEtLSANCi0JZGVjbGFyZXMgYWxsIGNvbnRlbnQgZXhjZXB0IHRhYmxlcw0KLS0tPg0KLTwhRU5USVRZICUgRmxvd05vVGFibGUubWl4ICIlSGVhZGluZy5jbGFzczsNCi0gICAgICB8ICVMaXN0LmNsYXNzOw0KLSAgICAgIHwgJUJsa1N0cnVjdC5jbGFzczsNCi0gICAgICAlQmxrUGhyYXMuY2xhc3M7DQotICAgICAgJUZvcm0uY2xhc3M7DQotICAgICAgJUJsb2NrLmV4dHJhOw0KLSAgICAgIHwgJUlubGluZS5jbGFzczsNCi0gICAgICAlTWlzYy5jbGFzczsiPg0KLTwhRU5USVRZICUgRmxvdy5taXggIiVIZWFkaW5nLmNsYXNzOw0KLSAgICAgIHwgJUxpc3QuY2xhc3M7DQotICAgICAgfCAlQmxvY2suY2xhc3M7DQotICAgICAgfCAlSW5saW5lLmNsYXNzOw0KLSAgICAgICVNaXNjLmNsYXNzOyI+DQotPCEtLSAJDQotCVRlbXBsYXRlIGxldmVsIGVsZW1lbnRzIA0KLS0tPg0KLTwhRU5USVRZICUgVGVtcGxhdGUubWl4ICIoICVvbmV2ZW50LnFuYW1lOykqIj4NCi08IS0tIA0KLQlDb250ZW50IG1vZGVsIG9mIHRoZSBXTUwgY2FyZCBhbmQgWEhUTUwgYm9keSBlbGVtZW50cw0KLS0tPg0KLTwhRU5USVRZICUgQ2FyZEJvZHkubWl4ICIoJW9uZXZlbnQucW5hbWU7KiwgJXRpbWVyLnFuYW1lOz8sICAoICVCbG9jay5taXg7ICkrKSI+DQotPCEtLSBlbmQgb2Ygd21sMjAtbW9kZWwtMS5tb2QgLS0+DQotDQotDQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tDQotCQlYSFRNTCBtb2R1bGVzIA0KLS0tPg0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLSBUZXh0IE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSBwcmUuY29udGVudCAiKCAjUENEQVRBDQotICAgICAgfCAlSW5sU3RydWN0LmNsYXNzOyB8ICVpLnFuYW1lOyB8ICViLnFuYW1lOyANCi0gICAgICAlSW5sUGhyYXMuY2xhc3M7DQotICAgICAgJUFuY2hvci5jbGFzczsNCi0gICAgICAlSW5saW5lLmV4dHJhOyANCi0JfCAlZ2V0dmFyLnFuYW1lOw0KLQl8ICVpbnB1dC5xbmFtZTt8ICVzZWxlY3QucW5hbWU7KSoiPg0KLTwhRU5USVRZICUgcC5jb250ZW50ICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgfCAldGFibGUucW5hbWU7IHwgJWZpZWxkc2V0LnFuYW1lOykqIj4NCi08IUVOVElUWSAlIHhodG1sLXRleHQubW9kIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBUZXh0IDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC10ZXh0LTEubW9kIj4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBUZXh0IE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtdGV4dC0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCwgYSByZWZvcm11bGF0aW9uIG9mIEhUTUwgYXMgYSBtb2R1bGFyIFhNTCBhcHBsaWNhdGlvbi4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJldmlzaW9uOiAkSWQ6IHdtbDIwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTggcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgVGV4dCAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC10ZXh0LTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIFRleHR1YWwgQ29udGVudA0KLQ0KLSAgICAgVGhlIFRleHQgbW9kdWxlIGluY2x1ZGVzIGRlY2xhcmF0aW9ucyBmb3IgYWxsIGNvcmUNCi0gICAgIHRleHQgY29udGFpbmVyIGVsZW1lbnRzIGFuZCB0aGVpciBhdHRyaWJ1dGVzLg0KLS0tPg0KLQ0KLTwhRU5USVRZICUgeGh0bWwtaW5sc3RydWN0Lm1vZHVsZSAiSU5DTFVERSIgPg0KLTwhWyV4aHRtbC1pbmxzdHJ1Y3QubW9kdWxlO1sNCi08IUVOVElUWSAlIHhodG1sLWlubHN0cnVjdC5tb2QNCi0gICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBJbmxpbmUgU3RydWN0dXJhbCAxLjAvL0VOIg0KLSAgICAgICAgICAgICJ4aHRtbC1pbmxzdHJ1Y3QtMS5tb2QiID4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBJbmxpbmUgU3RydWN0dXJhbCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtaW5sc3RydWN0LTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MLCBhIHJlZm9ybXVsYXRpb24gb2YgSFRNTCBhcyBhIG1vZHVsYXIgWE1MIGFwcGxpY2F0aW9uLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUmV2aXNpb246ICRJZDogd21sMjAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1OCBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBJbmxpbmUgU3RydWN0dXJhbCAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1pbmxzdHJ1Y3QtMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotICAgICAobm9uZSkNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gSW5saW5lIFN0cnVjdHVyYWwNCi0NCi0gICAgICAgIGJyLCBzcGFuDQotDQotICAgICBUaGlzIG1vZHVsZSBkZWNsYXJlcyB0aGUgZWxlbWVudHMgYW5kIHRoZWlyIGF0dHJpYnV0ZXMNCi0gICAgIHVzZWQgdG8gc3VwcG9ydCBpbmxpbmUtbGV2ZWwgc3RydWN0dXJhbCBtYXJrdXAuDQotLS0+DQotDQotPCEtLSBicjogZm9yY2VkIGxpbmUgYnJlYWsgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBici5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVici5lbGVtZW50O1sNCi0NCi08IUVOVElUWSAlIGJyLmNvbnRlbnQgICJFTVBUWSIgPg0KLTwhRU5USVRZICUgYnIucW5hbWUgICJiciIgPg0KLTwhRUxFTUVOVCAlYnIucW5hbWU7ICAlYnIuY29udGVudDsgPg0KLQ0KLTwhLS0gZW5kIG9mIGJyLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBici5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVici5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWJyLnFuYW1lOw0KLSAgICAgICVDb3JlLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgYnIuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIHNwYW46IGdlbmVyaWMgaW5saW5lIGNvbnRhaW5lciAuLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIHNwYW4uZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslc3Bhbi5lbGVtZW50O1sNCi08IUVOVElUWSAlIHNwYW4uY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiINCi0+DQotPCFFTlRJVFkgJSBzcGFuLnFuYW1lICAic3BhbiIgPg0KLTwhRUxFTUVOVCAlc3Bhbi5xbmFtZTsgICVzcGFuLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBzcGFuLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBzcGFuLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJXNwYW4uYXR0bGlzdDtbDQotPCFBVFRMSVNUICVzcGFuLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBzcGFuLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtaW5sc3RydWN0LTEubW9kIC0tPg0KLV1dPg0KLQ0KLTwhRU5USVRZICUgeGh0bWwtaW5scGhyYXMubW9kdWxlICJJTkNMVURFIiA+DQotPCFbJXhodG1sLWlubHBocmFzLm1vZHVsZTtbDQotPCFFTlRJVFkgJSB4aHRtbC1pbmxwaHJhcy5tb2QNCi0gICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBJbmxpbmUgUGhyYXNhbCAxLjAvL0VOIg0KLSAgICAgICAgICAgICJ4aHRtbC1pbmxwaHJhcy0xLm1vZCIgPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhIVE1MIElubGluZSBQaHJhc2FsIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1pbmxwaHJhcy0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCwgYSByZWZvcm11bGF0aW9uIG9mIEhUTUwgYXMgYSBtb2R1bGFyIFhNTCBhcHBsaWNhdGlvbi4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJldmlzaW9uOiAkSWQ6IHdtbDIwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTggcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgSW5saW5lIFBocmFzYWwgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtaW5scGhyYXMtMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotICAgICAobm9uZSkNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gSW5saW5lIFBocmFzYWwNCi0NCi0gICAgICAgIGFiYnIsIGFjcm9ueW0sIGNpdGUsIGNvZGUsIGRmbiwgZW0sIGtiZCwgcSwgc2FtcCwgc3Ryb25nLCB2YXINCi0NCi0gICAgIFRoaXMgbW9kdWxlIGRlY2xhcmVzIHRoZSBlbGVtZW50cyBhbmQgdGhlaXIgYXR0cmlidXRlcyB1c2VkIHRvDQotICAgICBzdXBwb3J0IGlubGluZS1sZXZlbCBwaHJhc2FsIG1hcmt1cC4NCi0tLT4NCi0NCi08IUVOVElUWSAlIGFiYnIuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslYWJici5lbGVtZW50O1sNCi08IUVOVElUWSAlIGFiYnIuY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiINCi0+DQotPCFFTlRJVFkgJSBhYmJyLnFuYW1lICAiYWJiciIgPg0KLTwhRUxFTUVOVCAlYWJici5xbmFtZTsgICVhYmJyLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBhYmJyLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBhYmJyLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWFiYnIuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVhYmJyLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBhYmJyLmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBhY3JvbnltLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWFjcm9ueW0uZWxlbWVudDtbDQotPCFFTlRJVFkgJSBhY3JvbnltLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiDQotPg0KLTwhRU5USVRZICUgYWNyb255bS5xbmFtZSAgImFjcm9ueW0iID4NCi08IUVMRU1FTlQgJWFjcm9ueW0ucW5hbWU7ICAlYWNyb255bS5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgYWNyb255bS5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgYWNyb255bS5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVhY3JvbnltLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlYWNyb255bS5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgYWNyb255bS5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgY2l0ZS5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVjaXRlLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgY2l0ZS5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7ICkqIg0KLT4NCi08IUVOVElUWSAlIGNpdGUucW5hbWUgICJjaXRlIiA+DQotPCFFTEVNRU5UICVjaXRlLnFuYW1lOyAgJWNpdGUuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGNpdGUuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGNpdGUuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslY2l0ZS5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWNpdGUucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGNpdGUuYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGNvZGUuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslY29kZS5lbGVtZW50O1sNCi08IUVOVElUWSAlIGNvZGUuY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiINCi0+DQotPCFFTlRJVFkgJSBjb2RlLnFuYW1lICAiY29kZSIgPg0KLTwhRUxFTUVOVCAlY29kZS5xbmFtZTsgICVjb2RlLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBjb2RlLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBjb2RlLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWNvZGUuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVjb2RlLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBjb2RlLmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBkZm4uZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslZGZuLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgZGZuLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiDQotPg0KLTwhRU5USVRZICUgZGZuLnFuYW1lICAiZGZuIiA+DQotPCFFTEVNRU5UICVkZm4ucW5hbWU7ICAlZGZuLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBkZm4uZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGRmbi5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVkZm4uYXR0bGlzdDtbDQotPCFBVFRMSVNUICVkZm4ucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGRmbi5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgZW0uZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslZW0uZWxlbWVudDtbDQotPCFFTlRJVFkgJSBlbS5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7ICkqIg0KLT4NCi08IUVOVElUWSAlIGVtLnFuYW1lICAiZW0iID4NCi08IUVMRU1FTlQgJWVtLnFuYW1lOyAgJWVtLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBlbS5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgZW0uYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslZW0uYXR0bGlzdDtbDQotPCFBVFRMSVNUICVlbS5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgZW0uYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGtiZC5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVrYmQuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBrYmQuY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiINCi0+DQotPCFFTlRJVFkgJSBrYmQucW5hbWUgICJrYmQiID4NCi08IUVMRU1FTlQgJWtiZC5xbmFtZTsgICVrYmQuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGtiZC5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUga2JkLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWtiZC5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWtiZC5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2Yga2JkLmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBxLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJXEuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBxLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiDQotPg0KLTwhRU5USVRZICUgcS5xbmFtZSAgInEiID4NCi08IUVMRU1FTlQgJXEucW5hbWU7ICAlcS5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgcS5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgcS5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVxLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlcS5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0gICAgICBjaXRlICAgICAgICAgJVVSSS5kYXRhdHlwZTsgICAgICAgICAgICNJTVBMSUVEDQotPg0KLTwhLS0gZW5kIG9mIHEuYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHNhbXAuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslc2FtcC5lbGVtZW50O1sNCi08IUVOVElUWSAlIHNhbXAuY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiINCi0+DQotPCFFTlRJVFkgJSBzYW1wLnFuYW1lICAic2FtcCIgPg0KLTwhRUxFTUVOVCAlc2FtcC5xbmFtZTsgICVzYW1wLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBzYW1wLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBzYW1wLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJXNhbXAuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVzYW1wLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBzYW1wLmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBzdHJvbmcuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslc3Ryb25nLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgc3Ryb25nLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiDQotPg0KLTwhRU5USVRZICUgc3Ryb25nLnFuYW1lICAic3Ryb25nIiA+DQotPCFFTEVNRU5UICVzdHJvbmcucW5hbWU7ICAlc3Ryb25nLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBzdHJvbmcuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHN0cm9uZy5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVzdHJvbmcuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVzdHJvbmcucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIHN0cm9uZy5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgdmFyLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJXZhci5lbGVtZW50O1sNCi08IUVOVElUWSAlIHZhci5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7ICkqIg0KLT4NCi08IUVOVElUWSAlIHZhci5xbmFtZSAgInZhciIgPg0KLTwhRUxFTUVOVCAldmFyLnFuYW1lOyAgJXZhci5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgdmFyLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSB2YXIuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVsldmFyLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAldmFyLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiB2YXIuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1pbmxwaHJhcy0xLm1vZCAtLT4NCi1dXT4NCi0NCi08IUVOVElUWSAlIHhodG1sLWJsa3N0cnVjdC5tb2R1bGUgIklOQ0xVREUiID4NCi08IVsleGh0bWwtYmxrc3RydWN0Lm1vZHVsZTtbDQotPCFFTlRJVFkgJSB4aHRtbC1ibGtzdHJ1Y3QubW9kDQotICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgQmxvY2sgU3RydWN0dXJhbCAxLjAvL0VOIg0KLSAgICAgICAgICAgICJ4aHRtbC1ibGtzdHJ1Y3QtMS5tb2QiID4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBCbG9jayBTdHJ1Y3R1cmFsIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtYmxrc3RydWN0LTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MLCBhIHJlZm9ybXVsYXRpb24gb2YgSFRNTCBhcyBhIG1vZHVsYXIgWE1MIGFwcGxpY2F0aW9uLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUmV2aXNpb246ICRJZDogd21sMjAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1OCBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBCbG9jayBTdHJ1Y3R1cmFsIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWJsa3N0cnVjdC0xLm1vZCINCi0NCi0gICAgIFJldmlzaW9uczoNCi0gICAgIChub25lKQ0KLSAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBCbG9jayBTdHJ1Y3R1cmFsDQotDQotICAgICAgICBkaXYsIHANCi0NCi0gICAgIFRoaXMgbW9kdWxlIGRlY2xhcmVzIHRoZSBlbGVtZW50cyBhbmQgdGhlaXIgYXR0cmlidXRlcyB1c2VkIHRvDQotICAgICBzdXBwb3J0IGJsb2NrLWxldmVsIHN0cnVjdHVyYWwgbWFya3VwLg0KLS0tPg0KLQ0KLTwhRU5USVRZICUgZGl2LmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWRpdi5lbGVtZW50O1sNCi08IUVOVElUWSAlIGRpdi5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUZsb3cubWl4OyApKiINCi0+DQotPCFFTlRJVFkgJSBkaXYucW5hbWUgICJkaXYiID4NCi08IUVMRU1FTlQgJWRpdi5xbmFtZTsgICVkaXYuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGRpdi5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgZGl2LmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWRpdi5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWRpdi5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgZGl2LmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBwLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJXAuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBwLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiID4NCi08IUVOVElUWSAlIHAucW5hbWUgICJwIiA+DQotPCFFTEVNRU5UICVwLnFuYW1lOyAgJXAuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIHAuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHAuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslcC5hdHRsaXN0O1sNCi08IUFUVExJU1QgJXAucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIHAuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1ibGtzdHJ1Y3QtMS5tb2QgLS0+DQotXV0+DQotDQotPCFFTlRJVFkgJSB4aHRtbC1ibGtwaHJhcy5tb2R1bGUgIklOQ0xVREUiID4NCi08IVsleGh0bWwtYmxrcGhyYXMubW9kdWxlO1sNCi08IUVOVElUWSAlIHhodG1sLWJsa3BocmFzLm1vZA0KLSAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEJsb2NrIFBocmFzYWwgMS4wLy9FTiINCi0gICAgICAgICAgICAieGh0bWwtYmxrcGhyYXMtMS5tb2QiID4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBCbG9jayBQaHJhc2FsIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtYmxrcGhyYXMtMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwsIGEgcmVmb3JtdWxhdGlvbiBvZiBIVE1MIGFzIGEgbW9kdWxhciBYTUwgYXBwbGljYXRpb24uDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB3bWwyMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU4IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEJsb2NrIFBocmFzYWwgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtYmxrcGhyYXMtMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotICAgICAobm9uZSkNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gQmxvY2sgUGhyYXNhbA0KLQ0KLSAgICAgICAgYWRkcmVzcywgYmxvY2txdW90ZSwgcHJlLCBoMSwgaDIsIGgzLCBoNCwgaDUsIGg2DQotDQotICAgICBUaGlzIG1vZHVsZSBkZWNsYXJlcyB0aGUgZWxlbWVudHMgYW5kIHRoZWlyIGF0dHJpYnV0ZXMgdXNlZCB0bw0KLSAgICAgc3VwcG9ydCBibG9jay1sZXZlbCBwaHJhc2FsIG1hcmt1cC4NCi0tLT4NCi0NCi08IUVOVElUWSAlIGFkZHJlc3MuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslYWRkcmVzcy5lbGVtZW50O1sNCi08IUVOVElUWSAlIGFkZHJlc3MuY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiIgPg0KLTwhRU5USVRZICUgYWRkcmVzcy5xbmFtZSAgImFkZHJlc3MiID4NCi08IUVMRU1FTlQgJWFkZHJlc3MucW5hbWU7ICAlYWRkcmVzcy5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgYWRkcmVzcy5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgYWRkcmVzcy5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVhZGRyZXNzLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlYWRkcmVzcy5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgYWRkcmVzcy5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgYmxvY2txdW90ZS5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVibG9ja3F1b3RlLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgYmxvY2txdW90ZS5jb250ZW50DQotICAgICAiKCAlQmxvY2subWl4OyApKyINCi0+DQotPCFFTlRJVFkgJSBibG9ja3F1b3RlLnFuYW1lICAiYmxvY2txdW90ZSIgPg0KLTwhRUxFTUVOVCAlYmxvY2txdW90ZS5xbmFtZTsgICVibG9ja3F1b3RlLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBibG9ja3F1b3RlLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBibG9ja3F1b3RlLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWJsb2NrcXVvdGUuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVibG9ja3F1b3RlLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLSAgICAgIGNpdGUgICAgICAgICAlVVJJLmRhdGF0eXBlOyAgICAgICAgICAgI0lNUExJRUQNCi0+DQotPCEtLSBlbmQgb2YgYmxvY2txdW90ZS5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgcHJlLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJXByZS5lbGVtZW50O1sNCi08IUVOVElUWSAlIHByZS5jb250ZW50DQotICAgICAiKCAjUENEQVRBDQotICAgICAgfCAlSW5sU3RydWN0LmNsYXNzOw0KLSAgICAgICVJbmxQaHJhcy5jbGFzczsNCi0gICAgICB8ICV0dC5xbmFtZTsgfCAlaS5xbmFtZTsgfCAlYi5xbmFtZTsNCi0gICAgICAlSTE4bi5jbGFzczsNCi0gICAgICAlQW5jaG9yLmNsYXNzOw0KLSAgICAgIHwgJXNjcmlwdC5xbmFtZTsgfCAlbWFwLnFuYW1lOw0KLSAgICAgICVJbmxpbmUuZXh0cmE7ICkqIg0KLT4NCi08IUVOVElUWSAlIHByZS5xbmFtZSAgInByZSIgPg0KLTwhRUxFTUVOVCAlcHJlLnFuYW1lOyAgJXByZS5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgcHJlLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBwcmUuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslcHJlLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlcHJlLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLSAgICAgIHhtbDpzcGFjZSAgICAoIHByZXNlcnZlICkgICAgICAgICAgICAgI0ZJWEVEICdwcmVzZXJ2ZScNCi0+DQotPCEtLSBlbmQgb2YgcHJlLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uICBIZWFkaW5nIEVsZW1lbnRzICAuLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgSGVhZGluZy5jb250ZW50ICAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7ICkqIiA+DQotDQotPCFFTlRJVFkgJSBoMS5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVoMS5lbGVtZW50O1sNCi08IUVOVElUWSAlIGgxLnFuYW1lICAiaDEiID4NCi08IUVMRU1FTlQgJWgxLnFuYW1lOyAgJUhlYWRpbmcuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGgxLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBoMS5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVoMS5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWgxLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBoMS5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgaDIuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslaDIuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBoMi5xbmFtZSAgImgyIiA+DQotPCFFTEVNRU5UICVoMi5xbmFtZTsgICVIZWFkaW5nLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBoMi5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgaDIuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslaDIuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVoMi5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgaDIuYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGgzLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWgzLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgaDMucW5hbWUgICJoMyIgPg0KLTwhRUxFTUVOVCAlaDMucW5hbWU7ICAlSGVhZGluZy5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgaDMuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGgzLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWgzLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlaDMucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGgzLmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBoNC5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVoNC5lbGVtZW50O1sNCi08IUVOVElUWSAlIGg0LnFuYW1lICAiaDQiID4NCi08IUVMRU1FTlQgJWg0LnFuYW1lOyAgJUhlYWRpbmcuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGg0LmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBoNC5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVoNC5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWg0LnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBoNC5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgaDUuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslaDUuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBoNS5xbmFtZSAgImg1IiA+DQotPCFFTEVNRU5UICVoNS5xbmFtZTsgICVIZWFkaW5nLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBoNS5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgaDUuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslaDUuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVoNS5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgaDUuYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGg2LmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWg2LmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgaDYucW5hbWUgICJoNiIgPg0KLTwhRUxFTUVOVCAlaDYucW5hbWU7ICAlSGVhZGluZy5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgaDYuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGg2LmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWg2LmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlaDYucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGg2LmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtYmxrcGhyYXMtMS5tb2QgLS0+DQotXV0+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtdGV4dC0xLm1vZCAtLT4NCi0NCi08IUVOVElUWSAlIHhodG1sLWh5cGVydGV4dC5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEh5cGVydGV4dCAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtaHlwZXJ0ZXh0LTEubW9kIj4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBIeXBlcnRleHQgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtaHlwZXJ0ZXh0LTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MLCBhIHJlZm9ybXVsYXRpb24gb2YgSFRNTCBhcyBhIG1vZHVsYXIgWE1MIGFwcGxpY2F0aW9uLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUmV2aXNpb246ICRJZDogd21sMjAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1OCBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBIeXBlcnRleHQgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtaHlwZXJ0ZXh0LTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIEh5cGVydGV4dA0KLQ0KLSAgICAgICAgYQ0KLQ0KLSAgICAgVGhpcyBtb2R1bGUgZGVjbGFyZXMgdGhlIGFuY2hvciAoJ2EnKSBlbGVtZW50IHR5cGUsIHdoaWNoDQotICAgICBkZWZpbmVzIHRoZSBzb3VyY2Ugb2YgYSBoeXBlcnRleHQgbGluay4gVGhlIGRlc3RpbmF0aW9uDQotICAgICAob3IgbGluayAndGFyZ2V0JykgaXMgaWRlbnRpZmllZCB2aWEgaXRzICdpZCcgYXR0cmlidXRlDQotICAgICByYXRoZXIgdGhhbiB0aGUgJ25hbWUnIGF0dHJpYnV0ZSBhcyB3YXMgdXNlZCBpbiBIVE1MLg0KLS0tPg0KLQ0KLTwhLS0gLi4uLi4uLi4uLi4uICBBbmNob3IgRWxlbWVudCAgLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgYS5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVhLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgYS5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUlubE5vQW5jaG9yLm1peDsgKSoiDQotPg0KLTwhRU5USVRZICUgYS5xbmFtZSAgImEiID4NCi08IUVMRU1FTlQgJWEucW5hbWU7ICAlYS5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgYS5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgYS5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVhLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlYS5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0gICAgICBocmVmICAgICAgICAgJVVSSS5kYXRhdHlwZTsgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgY2hhcnNldCAgICAgICVDaGFyc2V0LmRhdGF0eXBlOyAgICAgICAjSU1QTElFRA0KLSAgICAgIHR5cGUgICAgICAgICAlQ29udGVudFR5cGUuZGF0YXR5cGU7ICAgI0lNUExJRUQNCi0gICAgICBocmVmbGFuZyAgICAgJUxhbmd1YWdlQ29kZS5kYXRhdHlwZTsgICNJTVBMSUVEDQotICAgICAgcmVsICAgICAgICAgICVMaW5rVHlwZXMuZGF0YXR5cGU7ICAgICAjSU1QTElFRA0KLSAgICAgIHJldiAgICAgICAgICAlTGlua1R5cGVzLmRhdGF0eXBlOyAgICAgI0lNUExJRUQNCi0gICAgICBhY2Nlc3NrZXkgICAgJUNoYXJhY3Rlci5kYXRhdHlwZTsgICAgICNJTVBMSUVEDQotICAgICAgdGFiaW5kZXggICAgICVOdW1iZXIuZGF0YXR5cGU7ICAgICAgICAjSU1QTElFRA0KLT4NCi08IS0tIGVuZCBvZiBhLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtaHlwZXJ0ZXh0LTEubW9kIC0tPg0KLQ0KLTwhLS0gTGlzdCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtbGlzdC5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIExpc3RzIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1saXN0LTEubW9kIj4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBMaXN0cyBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtbGlzdC0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCwgYSByZWZvcm11bGF0aW9uIG9mIEhUTUwgYXMgYSBtb2R1bGFyIFhNTCBhcHBsaWNhdGlvbi4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJldmlzaW9uOiAkSWQ6IHdtbDIwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTggcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgTGlzdHMgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtbGlzdC0xLm1vZCINCi0NCi0gICAgIFJldmlzaW9uczoNCi0gICAgIChub25lKQ0KLSAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBMaXN0cw0KLQ0KLSAgICAgICAgZGwsIGR0LCBkZCwgb2wsIHVsLCBsaQ0KLQ0KLSAgICAgVGhpcyBtb2R1bGUgZGVjbGFyZXMgdGhlIGxpc3Qtb3JpZW50ZWQgZWxlbWVudCB0eXBlcw0KLSAgICAgYW5kIHRoZWlyIGF0dHJpYnV0ZXMuDQotLS0+DQotDQotPCFFTlRJVFkgJSBkbC5xbmFtZSAgImRsIiA+DQotPCFFTlRJVFkgJSBkdC5xbmFtZSAgImR0IiA+DQotPCFFTlRJVFkgJSBkZC5xbmFtZSAgImRkIiA+DQotPCFFTlRJVFkgJSBvbC5xbmFtZSAgIm9sIiA+DQotPCFFTlRJVFkgJSB1bC5xbmFtZSAgInVsIiA+DQotPCFFTlRJVFkgJSBsaS5xbmFtZSAgImxpIiA+DQotDQotPCEtLSBkbDogRGVmaW5pdGlvbiBMaXN0IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBkbC5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVkbC5lbGVtZW50O1sNCi08IUVOVElUWSAlIGRsLmNvbnRlbnQgICIoICVkdC5xbmFtZTsgfCAlZGQucW5hbWU7ICkrIiA+DQotPCFFTEVNRU5UICVkbC5xbmFtZTsgICVkbC5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgZGwuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGRsLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWRsLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlZGwucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGRsLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBkdDogRGVmaW5pdGlvbiBUZXJtIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBkdC5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVkdC5lbGVtZW50O1sNCi08IUVOVElUWSAlIGR0LmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiDQotPg0KLTwhRUxFTUVOVCAlZHQucW5hbWU7ICAlZHQuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGR0LmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBkdC5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVkdC5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWR0LnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBkdC5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gZGQ6IERlZmluaXRpb24gRGVzY3JpcHRpb24gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgZGQuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslZGQuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBkZC5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUZsb3cubWl4OyApKiINCi0+DQotPCFFTEVNRU5UICVkZC5xbmFtZTsgICVkZC5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgZGQuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGRkLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWRkLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlZGQucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGRkLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBvbDogT3JkZXJlZCBMaXN0IChudW1iZXJlZCBzdHlsZXMpIC4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBvbC5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVvbC5lbGVtZW50O1sNCi08IUVOVElUWSAlIG9sLmNvbnRlbnQgICIoICVsaS5xbmFtZTsgKSsiID4NCi08IUVMRU1FTlQgJW9sLnFuYW1lOyAgJW9sLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBvbC5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgb2wuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslb2wuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVvbC5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2Ygb2wuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIHVsOiBVbm9yZGVyZWQgTGlzdCAoYnVsbGV0IHN0eWxlcykgLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIHVsLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJXVsLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgdWwuY29udGVudCAgIiggJWxpLnFuYW1lOyApKyIgPg0KLTwhRUxFTUVOVCAldWwucW5hbWU7ICAldWwuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIHVsLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSB1bC5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyV1bC5hdHRsaXN0O1sNCi08IUFUVExJU1QgJXVsLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiB1bC5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gbGk6IExpc3QgSXRlbSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgbGkuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslbGkuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBsaS5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUZsb3cubWl4OyApKiINCi0+DQotPCFFTEVNRU5UICVsaS5xbmFtZTsgICVsaS5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgbGkuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGxpLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWxpLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlbGkucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGxpLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtbGlzdC0xLm1vZCAtLT4NCi0NCi08IS0tIEV4dGVuZCBsaXN0cyB3aXRoIHZhbHVlIGFuZCBzdGFydCBhdHRyaWJ1dGVzIC0tPiANCi08IUFUVExJU1QgJWxpLnFuYW1lOw0KLSAgICAgIHZhbHVlICAgICAgICAlTnVtYmVyLmRhdGF0eXBlOyAgICAgICAgICNJTVBMSUVEDQotPg0KLTwhQVRUTElTVCAlb2wucW5hbWU7DQotICAgICAgc3RhcnQgICAgICAgICVOdW1iZXIuZGF0YXR5cGU7ICAgICAgICAjSU1QTElFRA0KLT4NCi08IS0tIEltYWdlIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1pbWFnZS5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEltYWdlcyAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtaW1hZ2UtMS5tb2QiPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhIVE1MIEltYWdlcyBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1pbWFnZS0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCwgYSByZWZvcm11bGF0aW9uIG9mIEhUTUwgYXMgYSBtb2R1bGFyIFhNTCBhcHBsaWNhdGlvbi4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJvdmlzaW9uOiAkSWQ6IHdtbDIwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTggcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgSW1hZ2VzIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWltYWdlLTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIEltYWdlcw0KLQ0KLSAgICAgICAgaW1nDQotDQotICAgICBUaGlzIG1vZHVsZSBwcm92aWRlcyBtYXJrdXAgdG8gc3VwcG9ydCBiYXNpYyBpbWFnZSBlbWJlZGRpbmcuDQotLS0+DQotDQotPCEtLSBUbyBhdm9pZCBwcm9ibGVtcyB3aXRoIHRleHQtb25seSBVQXMgYXMgd2VsbCBhcyB0byBtYWtlDQotICAgICBpbWFnZSBjb250ZW50IHVuZGVyc3RhbmRhYmxlIGFuZCBuYXZpZ2FibGUgdG8gdXNlcnMgb2YNCi0gICAgIG5vbi12aXN1YWwgVUFzLCB5b3UgbmVlZCB0byBwcm92aWRlIGEgZGVzY3JpcHRpb24gd2l0aA0KLSAgICAgdGhlICdhbHQnIGF0dHJpYnV0ZSwgYW5kIGF2b2lkIHNlcnZlci1zaWRlIGltYWdlIG1hcHMuDQotLS0+DQotDQotPCFFTlRJVFkgJSBpbWcuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslaW1nLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgaW1nLmNvbnRlbnQgICJFTVBUWSIgPg0KLTwhRU5USVRZICUgaW1nLnFuYW1lICAiaW1nIiA+DQotPCFFTEVNRU5UICVpbWcucW5hbWU7ICAlaW1nLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBpbWcuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGltZy5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVpbWcuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVpbWcucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotICAgICAgc3JjICAgICAgICAgICVVUkkuZGF0YXR5cGU7ICAgICAgICAgICAjUkVRVUlSRUQNCi0gICAgICBhbHQgICAgICAgICAgJVRleHQuZGF0YXR5cGU7ICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgIGxvbmdkZXNjICAgICAlVVJJLmRhdGF0eXBlOyAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICBoZWlnaHQgICAgICAgJUxlbmd0aC5kYXRhdHlwZTsgICAgICAgICNJTVBMSUVEDQotICAgICAgd2lkdGggICAgICAgICVMZW5ndGguZGF0YXR5cGU7ICAgICAgICAjSU1QTElFRA0KLT4NCi08IS0tIGVuZCBvZiBpbWcuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1pbWFnZS0xLm1vZCAtLT4NCi0NCi08IS0tIFBhcmFtIEVsZW1lbnQgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1wYXJhbS5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIFBhcmFtIEVsZW1lbnQgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLXBhcmFtLTEubW9kIj4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBQYXJhbSBFbGVtZW50IE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLXBhcmFtLTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MLCBhIHJlZm9ybXVsYXRpb24gb2YgSFRNTCBhcyBhIG1vZHVsYXIgWE1MIGFwcGxpY2F0aW9uLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUmV2aXNpb246ICRJZDogd21sMjAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1OCBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBQYXJhbSBFbGVtZW50IDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLXBhcmFtLTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIFBhcmFtZXRlcnMgZm9yIEphdmEgQXBwbGV0cyBhbmQgRW1iZWRkZWQgT2JqZWN0cw0KLQ0KLSAgICAgICAgcGFyYW0NCi0NCi0gICAgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGRlY2xhcmF0aW9ucyBmb3IgdGhlIHBhcmFtIGVsZW1lbnQsDQotICAgICB1c2VkIHRvIHByb3ZpZGUgbmFtZWQgcHJvcGVydHkgdmFsdWVzIGZvciB0aGUgYXBwbGV0DQotICAgICBhbmQgb2JqZWN0IGVsZW1lbnRzLg0KLS0tPg0KLQ0KLTwhLS0gcGFyYW06IE5hbWVkIFByb3BlcnR5IFZhbHVlIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgcGFyYW0uZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslcGFyYW0uZWxlbWVudDtbDQotPCFFTlRJVFkgJSBwYXJhbS5jb250ZW50ICAiRU1QVFkiID4NCi08IUVOVElUWSAlIHBhcmFtLnFuYW1lICAicGFyYW0iID4NCi08IUVMRU1FTlQgJXBhcmFtLnFuYW1lOyAgJXBhcmFtLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBwYXJhbS5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgcGFyYW0uYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslcGFyYW0uYXR0bGlzdDtbDQotPCFBVFRMSVNUICVwYXJhbS5xbmFtZTsNCi0gICAgICAlWEhUTUwueG1sbnMuYXR0cmliOw0KLSAgICAgICVpZC5hdHRyaWI7DQotICAgICAgbmFtZSAgICAgICAgIENEQVRBICAgICAgICAgICAgICAgICAgICAjUkVRVUlSRUQNCi0gICAgICB2YWx1ZSAgICAgICAgQ0RBVEEgICAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgdmFsdWV0eXBlICAgICggZGF0YSB8IHJlZiB8IG9iamVjdCApICAnZGF0YScNCi0gICAgICB0eXBlICAgICAgICAgJUNvbnRlbnRUeXBlLmRhdGF0eXBlOyAgICNJTVBMSUVEDQotPg0KLTwhLS0gZW5kIG9mIHBhcmFtLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtcGFyYW0tMS5tb2QgLS0+DQotDQotPCEtLSBFbWJlZGRlZCBPYmplY3QgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtb2JqZWN0Lm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgRW1iZWRkZWQgT2JqZWN0IDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1vYmplY3QtMS5tb2QiPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhIVE1MIEVtYmVkZGVkIE9iamVjdCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1vYmplY3QtMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwsIGEgcmVmb3JtdWxhdGlvbiBvZiBIVE1MIGFzIGEgbW9kdWxhciBYTUwgYXBwbGljYXRpb24uDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB3bWwyMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU4IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEVtYmVkZGVkIE9iamVjdCAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1vYmplY3QtMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotICAgICAobm9uZSkNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gRW1iZWRkZWQgT2JqZWN0cw0KLQ0KLSAgICAgICAgb2JqZWN0DQotDQotICAgICBUaGlzIG1vZHVsZSBkZWNsYXJlcyB0aGUgb2JqZWN0IGVsZW1lbnQgdHlwZSBhbmQgaXRzIGF0dHJpYnV0ZXMsIHVzZWQNCi0gICAgIHRvIGVtYmVkIGV4dGVybmFsIG9iamVjdHMgYXMgcGFydCBvZiBYSFRNTCBwYWdlcy4gSW4gdGhlIGRvY3VtZW50LA0KLSAgICAgcGxhY2UgcGFyYW0gZWxlbWVudHMgcHJpb3IgdG8gb3RoZXIgY29udGVudCB3aXRoaW4gdGhlIG9iamVjdCBlbGVtZW50Lg0KLQ0KLSAgICAgTm90ZSB0aGF0IHVzZSBvZiB0aGlzIG1vZHVsZSByZXF1aXJlcyBpbnN0YW50aWF0aW9uIG9mIHRoZSBQYXJhbQ0KLSAgICAgRWxlbWVudCBNb2R1bGUuDQotLS0+DQotDQotPCEtLSBvYmplY3Q6IEdlbmVyaWMgRW1iZWRkZWQgT2JqZWN0IC4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBvYmplY3QuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslb2JqZWN0LmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgb2JqZWN0LmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlRmxvdy5taXg7IHwgJXBhcmFtLnFuYW1lOyApKiINCi0+DQotPCFFTlRJVFkgJSBvYmplY3QucW5hbWUgICJvYmplY3QiID4NCi08IUVMRU1FTlQgJW9iamVjdC5xbmFtZTsgICVvYmplY3QuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIG9iamVjdC5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgb2JqZWN0LmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJW9iamVjdC5hdHRsaXN0O1sNCi08IUFUVExJU1QgJW9iamVjdC5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0gICAgICBkZWNsYXJlICAgICAgKCBkZWNsYXJlICkgICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgY2xhc3NpZCAgICAgICVVUkkuZGF0YXR5cGU7ICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIGNvZGViYXNlICAgICAlVVJJLmRhdGF0eXBlOyAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICBkYXRhICAgICAgICAgJVVSSS5kYXRhdHlwZTsgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgdHlwZSAgICAgICAgICVDb250ZW50VHlwZS5kYXRhdHlwZTsgICAjSU1QTElFRA0KLSAgICAgIGNvZGV0eXBlICAgICAlQ29udGVudFR5cGUuZGF0YXR5cGU7ICAgI0lNUExJRUQNCi0gICAgICBhcmNoaXZlICAgICAgJVVSSXMuZGF0YXR5cGU7ICAgICAgICAgICNJTVBMSUVEDQotICAgICAgc3RhbmRieSAgICAgICVUZXh0LmRhdGF0eXBlOyAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIGhlaWdodCAgICAgICAlTGVuZ3RoLmRhdGF0eXBlOyAgICAgICAgI0lNUExJRUQNCi0gICAgICB3aWR0aCAgICAgICAgJUxlbmd0aC5kYXRhdHlwZTsgICAgICAgICNJTVBMSUVEDQotICAgICAgbmFtZSAgICAgICAgIENEQVRBICAgICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIHRhYmluZGV4ICAgICAlTnVtYmVyLmRhdGF0eXBlOyAgICAgICAgI0lNUExJRUQNCi0+DQotPCEtLSBlbmQgb2Ygb2JqZWN0LmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtb2JqZWN0LTEubW9kIC0tPg0KLQ0KLTwhLS0gVGFibGVzIE1vZHVsZSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLXRhYmxlLm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgQmFzaWMgVGFibGVzIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1iYXNpYy10YWJsZS0xLm1vZCI+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhIVE1MIEJhc2ljIFRhYmxlIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtYmFzaWMtdGFibGUtMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwgQmFzaWMsIGEgcHJvcGVyIHN1YnNldCBvZiBYSFRNTC4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJldmlzaW9uOiAkSWQ6IHdtbDIwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTggcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgQmFzaWMgVGFibGVzIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWJhc2ljLXRhYmxlLTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIEJhc2ljIFRhYmxlcw0KLQ0KLSAgICAgICAgdGFibGUsIGNhcHRpb24sIHRyLCB0aCwgdGQNCi0NCi0gICAgIFRoaXMgdGFibGUgbW9kdWxlIGRlY2xhcmVzIGVsZW1lbnRzIGFuZCBhdHRyaWJ1dGVzIGRlZmluaW5nDQotICAgICBhIHRhYmxlIG1vZGVsIGJhc2VkIGZ1bmRhbWVudGFsbHkgb24gZmVhdHVyZXMgZm91bmQgaW4gdGhlDQotICAgICB3aWRlbHktZGVwbG95ZWQgSFRNTCAzLjIgdGFibGUgbW9kZWwuICBXaGlsZSB0aGlzIG1vZHVsZQ0KLSAgICAgbWltaWNzIHRoZSBjb250ZW50IG1vZGVsIGFuZCB0YWJsZSBhdHRyaWJ1dGVzIG9mIEhUTUwgMy4yDQotICAgICB0YWJsZXMsIHRoZSBlbGVtZW50IHR5cGVzIGRlY2xhcmVkIGhlcmVpbiBhbHNvIGluY2x1ZGVzIGFsbA0KLSAgICAgSFRNTCA0IGNvbW1vbiBhbmQgbW9zdCBvZiB0aGUgSFRNTCA0IHRhYmxlIGF0dHJpYnV0ZXMuDQotLS0+DQotDQotPCEtLSBkZWNsYXJlIHF1YWxpZmllZCBlbGVtZW50IHR5cGUgbmFtZXM6DQotLS0+DQotPCFFTlRJVFkgJSB0YWJsZS5xbmFtZSAgInRhYmxlIiA+DQotPCFFTlRJVFkgJSBjYXB0aW9uLnFuYW1lICAiY2FwdGlvbiIgPg0KLTwhRU5USVRZICUgdHIucW5hbWUgICJ0ciIgPg0KLTwhRU5USVRZICUgdGgucW5hbWUgICJ0aCIgPg0KLTwhRU5USVRZICUgdGQucW5hbWUgICJ0ZCIgPg0KLQ0KLTwhLS0gaG9yaXpvbnRhbCBhbGlnbm1lbnQgYXR0cmlidXRlcyBmb3IgY2VsbCBjb250ZW50cw0KLS0tPg0KLTwhRU5USVRZICUgQ2VsbEhBbGlnbi5hdHRyaWINCi0gICAgICJhbGlnbiAgICAgICAgKCBsZWZ0DQotICAgICAgICAgICAgICAgICAgIHwgY2VudGVyDQotICAgICAgICAgICAgICAgICAgIHwgcmlnaHQgKSAgICAgICAgICAgICAgICAjSU1QTElFRCINCi0+DQotDQotPCEtLSB2ZXJ0aWNhbCBhbGlnbm1lbnQgYXR0cmlidXRlcyBmb3IgY2VsbCBjb250ZW50cw0KLS0tPg0KLTwhRU5USVRZICUgQ2VsbFZBbGlnbi5hdHRyaWINCi0gICAgICJ2YWxpZ24gICAgICAgKCB0b3ANCi0gICAgICAgICAgICAgICAgICAgfCBtaWRkbGUNCi0gICAgICAgICAgICAgICAgICAgfCBib3R0b20gKSAgICAgICAgICAgICAgICNJTVBMSUVEIg0KLT4NCi0NCi08IS0tIHNjb3BlIGlzIHNpbXBsZXIgdGhhbiBheGVzIGF0dHJpYnV0ZSBmb3IgY29tbW9uIHRhYmxlcw0KLS0tPg0KLTwhRU5USVRZICUgc2NvcGUuYXR0cmliDQotICAgICAic2NvcGUgICAgICAgICggcm93IHwgY29sICApICAgICAgICAgICAjSU1QTElFRCINCi0+DQotDQotPCEtLSB0YWJsZTogVGFibGUgRWxlbWVudCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSB0YWJsZS5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyV0YWJsZS5lbGVtZW50O1sNCi08IUVOVElUWSAlIHRhYmxlLmNvbnRlbnQNCi0gICAgICIoICVjYXB0aW9uLnFuYW1lOz8sICV0ci5xbmFtZTsrICkiDQotPg0KLTwhRUxFTUVOVCAldGFibGUucW5hbWU7ICAldGFibGUuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIHRhYmxlLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSB0YWJsZS5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyV0YWJsZS5hdHRsaXN0O1sNCi08IUFUVExJU1QgJXRhYmxlLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLSAgICAgIHN1bW1hcnkgICAgICAlVGV4dC5kYXRhdHlwZTsgICAgICAgICAgI0lNUExJRUQNCi0+DQotPCEtLSBlbmQgb2YgdGFibGUuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGNhcHRpb246IFRhYmxlIENhcHRpb24gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIGNhcHRpb24uZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslY2FwdGlvbi5lbGVtZW50O1sNCi08IUVOVElUWSAlIGNhcHRpb24uY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiINCi0+DQotPCFFTEVNRU5UICVjYXB0aW9uLnFuYW1lOyAgJWNhcHRpb24uY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGNhcHRpb24uZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGNhcHRpb24uYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslY2FwdGlvbi5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWNhcHRpb24ucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGNhcHRpb24uYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIHRyOiBUYWJsZSBSb3cgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIHRyLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJXRyLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgdHIuY29udGVudCAgIiggJXRoLnFuYW1lOyB8ICV0ZC5xbmFtZTsgKSsiID4NCi08IUVMRU1FTlQgJXRyLnFuYW1lOyAgJXRyLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiB0ci5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgdHIuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVsldHIuYXR0bGlzdDtbDQotPCFBVFRMSVNUICV0ci5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0gICAgICAlQ2VsbEhBbGlnbi5hdHRyaWI7DQotICAgICAgJUNlbGxWQWxpZ24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiB0ci5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gdGg6IFRhYmxlIEhlYWRlciBDZWxsIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gdGggaXMgZm9yIGhlYWRlciBjZWxscywgdGQgZm9yIGRhdGEsDQotICAgICBidXQgZm9yIGNlbGxzIGFjdGluZyBhcyBib3RoIHVzZSB0ZA0KLS0tPg0KLQ0KLTwhRU5USVRZICUgdGguZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVsldGguZWxlbWVudDtbDQotPCFFTlRJVFkgJSB0aC5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUZsb3dOb1RhYmxlLm1peDsgKSoiDQotPg0KLTwhRUxFTUVOVCAldGgucW5hbWU7ICAldGguY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIHRoLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSB0aC5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyV0aC5hdHRsaXN0O1sNCi08IUFUVExJU1QgJXRoLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLSAgICAgIGFiYnIgICAgICAgICAlVGV4dC5kYXRhdHlwZTsgICAgICAgICAgI0lNUExJRUQNCi0gICAgICBheGlzICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgaGVhZGVycyAgICAgIElEUkVGUyAgICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgICVzY29wZS5hdHRyaWI7DQotICAgICAgcm93c3BhbiAgICAgICVOdW1iZXIuZGF0YXR5cGU7ICAgICAgICAnMScNCi0gICAgICBjb2xzcGFuICAgICAgJU51bWJlci5kYXRhdHlwZTsgICAgICAgICcxJw0KLSAgICAgICVDZWxsSEFsaWduLmF0dHJpYjsNCi0gICAgICAlQ2VsbFZBbGlnbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIHRoLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSB0ZDogVGFibGUgRGF0YSBDZWxsIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSB0ZC5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyV0ZC5lbGVtZW50O1sNCi08IUVOVElUWSAlIHRkLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlRmxvd05vVGFibGUubWl4OyApKiINCi0+DQotPCFFTEVNRU5UICV0ZC5xbmFtZTsgICV0ZC5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgdGQuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHRkLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJXRkLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAldGQucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotICAgICAgYWJiciAgICAgICAgICVUZXh0LmRhdGF0eXBlOyAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIGF4aXMgICAgICAgICBDREFUQSAgICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICBoZWFkZXJzICAgICAgSURSRUZTICAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgJXNjb3BlLmF0dHJpYjsNCi0gICAgICByb3dzcGFuICAgICAgJU51bWJlci5kYXRhdHlwZTsgICAgICAgICcxJw0KLSAgICAgIGNvbHNwYW4gICAgICAlTnVtYmVyLmRhdGF0eXBlOyAgICAgICAgJzEnDQotICAgICAgJUNlbGxIQWxpZ24uYXR0cmliOw0KLSAgICAgICVDZWxsVkFsaWduLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgdGQuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1iYXNpYy10YWJsZS0xLm1vZCAtLT4NCi0NCi08IS0tIEZvcm1zIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTEVNRU5UICVvcHRncm91cC5xbmFtZTsgKCVvcHRpb24ucW5hbWU7KSs+DQotPCFBVFRMSVNUICVvcHRncm91cC5xbmFtZTsNCi0JJUNvbW1vbi5hdHRyaWI7IAkNCi0JbGFiZWwgJVRleHQuZGF0YXR5cGU7ICNSRVFVSVJFRA0KLT4NCi08IUVOVElUWSAlIG9wdGlvbi5jb250ZW50ICIoICNQQ0RBVEEgfCAlb25ldmVudC5xbmFtZTt8ICVnZXR2YXIucW5hbWU7KSoiPg0KLTwhRU5USVRZICUgc2VsZWN0LmNvbnRlbnQgIiggJW9wdGdyb3VwLnFuYW1lOyB8ICVvcHRpb24ucW5hbWU7ICkrIj4NCi08IUVMRU1FTlQgJWZpZWxkc2V0LnFuYW1lOyAoI1BDREFUQSB8ICVGbG93Lm1peDspKj4NCi08IUFUVExJU1QgJWZpZWxkc2V0LnFuYW1lOw0KLQklQ29tbW9uLmF0dHJpYjsgDQotPg0KLTwhRU5USVRZICUgdGV4dGFyZWEuY29udGVudCAiKCAjUENEQVRBIHwgJWdldHZhci5xbmFtZTsgKSoiPg0KLTwhRU5USVRZICUgZm9ybS5jb250ZW50ICIoICVCbGtOb0Zvcm0ubWl4Ow0KLSAgICAgIHwgJWZpZWxkc2V0LnFuYW1lOyApKyI+DQotPCFFTlRJVFkgJSB4aHRtbC1iYXNpYy1mb3JtLm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgQmFzaWMgRm9ybXMgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWJhc2ljLWZvcm0tMS5tb2QiPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhIVE1MIFNpbXBsaWZpZWQgRm9ybXMgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1iYXNpYy1mb3JtLTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MIEJhc2ljLCBhIHByb3BlciBzdWJzZXQgb2YgWEhUTUwuDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB3bWwyMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU4IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEJhc2ljIEZvcm1zIDEuMC8vRU4iICANCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtYmFzaWMtZm9ybS0xLm1vZCINCi0NCi0gICAgIFJldmlzaW9uczoNCi0gICAgIChub25lKQ0KLSAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBCYXNpYyBGb3Jtcw0KLQ0KLSAgICAgVGhpcyBmb3JtcyBtb2R1bGUgaXMgYmFzZWQgb24gdGhlIEhUTUwgMy4yIGZvcm1zIG1vZGVsLCB3aXRoDQotICAgICB0aGUgV0FJLXJlcXVlc3RlZCBhZGRpdGlvbiBvZiB0aGUgbGFiZWwgZWxlbWVudC4gV2hpbGUgdGhpcyANCi0gICAgIG1vZHVsZSBlc3NlbnRpYWxseSBtaW1pY3MgdGhlIGNvbnRlbnQgbW9kZWwgYW5kIGF0dHJpYnV0ZXMgb2YgDQotICAgICBIVE1MIDMuMiBmb3JtcywgdGhlIGVsZW1lbnQgdHlwZXMgZGVjbGFyZWQgaGVyZWluIGFsc28gaW5jbHVkZQ0KLSAgICAgYWxsIEhUTUwgNCBjb21tb24gYXR0cmlidXRlcy4NCi0NCi0gICAgICAgIGZvcm0sIGxhYmVsLCBpbnB1dCwgc2VsZWN0LCBvcHRpb24sIHRleHRhcmVhDQotLS0+DQotDQotPCEtLSBkZWNsYXJlIHF1YWxpZmllZCBlbGVtZW50IHR5cGUgbmFtZXM6DQotLS0+DQotPCFFTlRJVFkgJSBmb3JtLnFuYW1lICAiZm9ybSIgPg0KLTwhRU5USVRZICUgbGFiZWwucW5hbWUgICJsYWJlbCIgPg0KLTwhRU5USVRZICUgaW5wdXQucW5hbWUgICJpbnB1dCIgPg0KLTwhRU5USVRZICUgc2VsZWN0LnFuYW1lICAic2VsZWN0IiA+DQotPCFFTlRJVFkgJSBvcHRpb24ucW5hbWUgICJvcHRpb24iID4NCi08IUVOVElUWSAlIHRleHRhcmVhLnFuYW1lICAidGV4dGFyZWEiID4NCi0NCi08IS0tICVCbGtOb0Zvcm0ubWl4OyBpbmNsdWRlcyBhbGwgbm9uLWZvcm0gYmxvY2sgZWxlbWVudHMsDQotICAgICBwbHVzICVNaXNjLmNsYXNzOw0KLS0tPg0KLTwhRU5USVRZICUgQmxrTm9Gb3JtLm1peA0KLSAgICAgIiVIZWFkaW5nLmNsYXNzOw0KLSAgICAgIHwgJUxpc3QuY2xhc3M7DQotICAgICAgfCAlQmxrU3RydWN0LmNsYXNzOw0KLSAgICAgICVCbGtQaHJhcy5jbGFzczsNCi0gICAgICAlQmxrUHJlcy5jbGFzczsNCi0gICAgICB8ICV0YWJsZS5xbmFtZTsgDQotICAgICAgJUJsb2NrLmV4dHJhOw0KLSAgICAgICVNaXNjLmNsYXNzOyINCi0+DQotDQotPCEtLSBmb3JtOiBGb3JtIEVsZW1lbnQgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBmb3JtLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWZvcm0uZWxlbWVudDtbDQotPCFFTlRJVFkgJSBmb3JtLmNvbnRlbnQNCi0gICAgICIoICVCbGtOb0Zvcm0ubWl4OyApKyINCi0+DQotPCFFTEVNRU5UICVmb3JtLnFuYW1lOyAgJWZvcm0uY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGZvcm0uZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGZvcm0uYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslZm9ybS5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWZvcm0ucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotICAgICAgYWN0aW9uICAgICAgICVVUkkuZGF0YXR5cGU7ICAgICAgICAgICAjUkVRVUlSRUQNCi0gICAgICBtZXRob2QgICAgICAgKCBnZXQgfCBwb3N0ICkgICAgICAgICAgICdnZXQnDQotICAgICAgZW5jdHlwZSAgICAgICVDb250ZW50VHlwZS5kYXRhdHlwZTsgICAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJw0KLT4NCi08IS0tIGVuZCBvZiBmb3JtLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBsYWJlbDogRm9ybSBGaWVsZCBMYWJlbCBUZXh0IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBsYWJlbC5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVsYWJlbC5lbGVtZW50O1sNCi08IS0tIEVhY2ggbGFiZWwgbXVzdCBub3QgY29udGFpbiBtb3JlIHRoYW4gT05FIGZpZWxkDQotLS0+DQotPCFFTlRJVFkgJSBsYWJlbC5jb250ZW50DQotICAgICAiKCAjUENEQVRBIA0KLSAgICAgIHwgJWlucHV0LnFuYW1lOyB8ICVzZWxlY3QucW5hbWU7IHwgJXRleHRhcmVhLnFuYW1lOw0KLSAgICAgIHwgJUlubFN0cnVjdC5jbGFzczsNCi0gICAgICAlSW5sUGhyYXMuY2xhc3M7DQotICAgICAgJUkxOG4uY2xhc3M7DQotICAgICAgJUlubFByZXMuY2xhc3M7DQotICAgICAgJUlubFNwZWNpYWwuY2xhc3M7DQotICAgICAgJU1pc2MuY2xhc3M7ICkqIg0KLT4NCi08IUVMRU1FTlQgJWxhYmVsLnFuYW1lOyAgJWxhYmVsLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBsYWJlbC5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgbGFiZWwuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslbGFiZWwuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVsYWJlbC5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0gICAgICBmb3IgICAgICAgICAgSURSRUYgICAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgYWNjZXNza2V5ICAgICVDaGFyYWN0ZXIuZGF0YXR5cGU7ICAgICAjSU1QTElFRA0KLT4NCi08IS0tIGVuZCBvZiBsYWJlbC5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gaW5wdXQ6IEZvcm0gQ29udHJvbCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgaW5wdXQuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslaW5wdXQuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBpbnB1dC5jb250ZW50ICAiRU1QVFkiID4NCi08IUVMRU1FTlQgJWlucHV0LnFuYW1lOyAgJWlucHV0LmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBpbnB1dC5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhLS0gQmFzaWMgRm9ybXMgcmVtb3ZlcyAnaW1hZ2UnIGFuZCAnZmlsZScgaW5wdXQgdHlwZXMuDQotLS0+DQotPCFFTlRJVFkgJSBpbnB1dC5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVpbnB1dC5hdHRsaXN0O1sNCi08IUVOVElUWSAlIElucHV0VHlwZS5jbGFzcw0KLSAgICAgIiggdGV4dCB8IHBhc3N3b3JkIHwgY2hlY2tib3ggfCByYWRpbyANCi0gICAgICB8IHN1Ym1pdCB8IHJlc2V0IHwgaGlkZGVuICkiDQotPg0KLTwhLS0gYXR0cmlidXRlIG5hbWUgcmVxdWlyZWQgZm9yIGFsbCBidXQgc3VibWl0ICYgcmVzZXQNCi0tLT4NCi08IUFUVExJU1QgJWlucHV0LnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLSAgICAgIHR5cGUgICAgICAgICAlSW5wdXRUeXBlLmNsYXNzOyAgICAgICAgJ3RleHQnDQotICAgICAgbmFtZSAgICAgICAgIENEQVRBICAgICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIHZhbHVlICAgICAgICBDREFUQSAgICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICBjaGVja2VkICAgICAgKCBjaGVja2VkICkgICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgc2l6ZSAgICAgICAgIENEQVRBICAgICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIG1heGxlbmd0aCAgICAlTnVtYmVyLmRhdGF0eXBlOyAgICAgICAgI0lNUExJRUQNCi0gICAgICBzcmMgICAgICAgICAgJVVSSS5kYXRhdHlwZTsgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgdGFiaW5kZXggICAgICVOdW1iZXIuZGF0YXR5cGU7ICAgICAgICAjSU1QTElFRA0KLSAgICAgIGFjY2Vzc2tleSAgICAlQ2hhcmFjdGVyLmRhdGF0eXBlOyAgICAgI0lNUExJRUQNCi0+DQotPCEtLSBlbmQgb2YgaW5wdXQuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIHNlbGVjdDogT3B0aW9uIFNlbGVjdG9yIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIHNlbGVjdC5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVzZWxlY3QuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBzZWxlY3QuY29udGVudCAgIiggJW9wdGlvbi5xbmFtZTsgKSsiID4NCi08IUVMRU1FTlQgJXNlbGVjdC5xbmFtZTsgICVzZWxlY3QuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIHNlbGVjdC5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgc2VsZWN0LmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJXNlbGVjdC5hdHRsaXN0O1sNCi08IUFUVExJU1QgJXNlbGVjdC5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0gICAgICBuYW1lICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgc2l6ZSAgICAgICAgICVOdW1iZXIuZGF0YXR5cGU7ICAgICAgICAjSU1QTElFRA0KLSAgICAgIG11bHRpcGxlICAgICAoIG11bHRpcGxlICkgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICB0YWJpbmRleCAgICAgJU51bWJlci5kYXRhdHlwZTsgICAgICAgICNJTVBMSUVEDQotPg0KLTwhLS0gZW5kIG9mIHNlbGVjdC5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gb3B0aW9uOiBTZWxlY3RhYmxlIENob2ljZSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgb3B0aW9uLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJW9wdGlvbi5lbGVtZW50O1sNCi08IUVOVElUWSAlIG9wdGlvbi5jb250ZW50ICAiKCAjUENEQVRBICkiID4NCi08IUVMRU1FTlQgJW9wdGlvbi5xbmFtZTsgICVvcHRpb24uY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIG9wdGlvbi5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgb3B0aW9uLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJW9wdGlvbi5hdHRsaXN0O1sNCi08IUFUVExJU1QgJW9wdGlvbi5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0gICAgICBzZWxlY3RlZCAgICAgKCBzZWxlY3RlZCApICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgdmFsdWUgICAgICAgIENEQVRBICAgICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLT4NCi08IS0tIGVuZCBvZiBvcHRpb24uYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIHRleHRhcmVhOiBNdWx0aS1MaW5lIFRleHQgRmllbGQgLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIHRleHRhcmVhLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJXRleHRhcmVhLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgdGV4dGFyZWEuY29udGVudCAgIiggI1BDREFUQSApIiA+DQotPCFFTEVNRU5UICV0ZXh0YXJlYS5xbmFtZTsgICV0ZXh0YXJlYS5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgdGV4dGFyZWEuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHRleHRhcmVhLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJXRleHRhcmVhLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAldGV4dGFyZWEucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotICAgICAgbmFtZSAgICAgICAgIENEQVRBICAgICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIHJvd3MgICAgICAgICAlTnVtYmVyLmRhdGF0eXBlOyAgICAgICAgI1JFUVVJUkVEDQotICAgICAgY29scyAgICAgICAgICVOdW1iZXIuZGF0YXR5cGU7ICAgICAgICAjUkVRVUlSRUQNCi0gICAgICB0YWJpbmRleCAgICAgJU51bWJlci5kYXRhdHlwZTsgICAgICAgICNJTVBMSUVEDQotICAgICAgYWNjZXNza2V5ICAgICVDaGFyYWN0ZXIuZGF0YXR5cGU7ICAgICAjSU1QTElFRA0KLT4NCi08IS0tIGVuZCBvZiB0ZXh0YXJlYS5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLWJhc2ljLWZvcm0tMS5tb2QgLS0+DQotDQotPCEtLSBMaW5rIEVsZW1lbnQgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtbGluay5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIExpbmsgRWxlbWVudCAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtbGluay0xLm1vZCI+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgTGluayBFbGVtZW50IE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLWxpbmstMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwsIGEgcmVmb3JtdWxhdGlvbiBvZiBIVE1MIGFzIGEgbW9kdWxhciBYTUwgYXBwbGljYXRpb24uDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB3bWwyMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU4IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIExpbmsgRWxlbWVudCAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1saW5rLTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIExpbmsgZWxlbWVudA0KLQ0KLSAgICAgICAgbGluaw0KLQ0KLSAgICAgVGhpcyBtb2R1bGUgZGVjbGFyZXMgdGhlIGxpbmsgZWxlbWVudCB0eXBlIGFuZCBpdHMgYXR0cmlidXRlcywNCi0gICAgIHdoaWNoIGNvdWxkIChpbiBwcmluY2lwbGUpIGJlIHVzZWQgdG8gZGVmaW5lIGRvY3VtZW50LWxldmVsIGxpbmtzDQotICAgICB0byBleHRlcm5hbCByZXNvdXJjZXMgc3VjaCBhczoNCi0NCi0gICAgIGEpIGZvciBkb2N1bWVudCBzcGVjaWZpYyB0b29sYmFycy9tZW51cywgZS5nLiBzdGFydCwgY29udGVudHMsDQotICAgICAgICBwcmV2aW91cywgbmV4dCwgaW5kZXgsIGVuZCwgaGVscA0KLSAgICAgYikgdG8gbGluayB0byBhIHNlcGFyYXRlIHN0eWxlIHNoZWV0IChyZWw9InN0eWxlc2hlZXQiKQ0KLSAgICAgYykgdG8gbWFrZSBhIGxpbmsgdG8gYSBzY3JpcHQgKHJlbD0ic2NyaXB0IikNCi0gICAgIGQpIGJ5IHN0eWxlIHNoZWV0cyB0byBjb250cm9sIGhvdyBjb2xsZWN0aW9ucyBvZiBodG1sIG5vZGVzIGFyZQ0KLSAgICAgICAgcmVuZGVyZWQgaW50byBwcmludGVkIGRvY3VtZW50cw0KLSAgICAgZSkgdG8gbWFrZSBhIGxpbmsgdG8gYSBwcmludGFibGUgdmVyc2lvbiBvZiB0aGlzIGRvY3VtZW50DQotICAgICAgICBlLmcuIGEgcG9zdHNjcmlwdCBvciBwZGYgdmVyc2lvbiAocmVsPSJhbHRlcm5hdGUiIG1lZGlhPSJwcmludCIpDQotLS0+DQotDQotPCEtLSBsaW5rOiBNZWRpYS1JbmRlcGVuZGVudCBMaW5rIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBsaW5rLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWxpbmsuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBsaW5rLmNvbnRlbnQgICJFTVBUWSIgPg0KLTwhRU5USVRZICUgbGluay5xbmFtZSAgImxpbmsiID4NCi08IUVMRU1FTlQgJWxpbmsucW5hbWU7ICAlbGluay5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgbGluay5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgbGluay5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVsaW5rLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlbGluay5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0gICAgICBjaGFyc2V0ICAgICAgJUNoYXJzZXQuZGF0YXR5cGU7ICAgICAgICNJTVBMSUVEDQotICAgICAgaHJlZiAgICAgICAgICVVUkkuZGF0YXR5cGU7ICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIGhyZWZsYW5nICAgICAlTGFuZ3VhZ2VDb2RlLmRhdGF0eXBlOyAgI0lNUExJRUQNCi0gICAgICB0eXBlICAgICAgICAgJUNvbnRlbnRUeXBlLmRhdGF0eXBlOyAgICNJTVBMSUVEDQotICAgICAgcmVsICAgICAgICAgICVMaW5rVHlwZXMuZGF0YXR5cGU7ICAgICAjSU1QTElFRA0KLSAgICAgIHJldiAgICAgICAgICAlTGlua1R5cGVzLmRhdGF0eXBlOyAgICAgI0lNUExJRUQNCi0gICAgICBtZWRpYSAgICAgICAgJU1lZGlhRGVzYy5kYXRhdHlwZTsgICAgICNJTVBMSUVEDQotPg0KLTwhLS0gZW5kIG9mIGxpbmsuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1saW5rLTEubW9kIC0tPg0KLQ0KLTwhLS0gRG9jdW1lbnQgTWV0YWluZm9ybWF0aW9uIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLW1ldGEubW9kIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBNZXRhaW5mb3JtYXRpb24gMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLW1ldGEtMS5tb2QiPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhIVE1MIERvY3VtZW50IE1ldGFpbmZvcm1hdGlvbiBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1tZXRhLTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MLCBhIHJlZm9ybXVsYXRpb24gb2YgSFRNTCBhcyBhIG1vZHVsYXIgWE1MIGFwcGxpY2F0aW9uLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUmV2aXNpb246ICRJZDogd21sMjAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1OCBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBNZXRhaW5mb3JtYXRpb24gMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtbWV0YS0xLm1vZCINCi0NCi0gICAgIFJldmlzaW9uczoNCi0gICAgIChub25lKQ0KLSAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBNZXRhIEluZm9ybWF0aW9uDQotDQotICAgICAgICBtZXRhDQotDQotICAgICBUaGlzIG1vZHVsZSBkZWNsYXJlcyB0aGUgbWV0YSBlbGVtZW50IHR5cGUgYW5kIGl0cyBhdHRyaWJ1dGVzLA0KLSAgICAgdXNlZCB0byBwcm92aWRlIGRlY2xhcmF0aXZlIGRvY3VtZW50IG1ldGFpbmZvcm1hdGlvbi4NCi0tLT4NCi0NCi08IS0tIG1ldGE6IEdlbmVyaWMgTWV0YWluZm9ybWF0aW9uIC4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIG1ldGEuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslbWV0YS5lbGVtZW50O1sNCi08IUVOVElUWSAlIG1ldGEuY29udGVudCAgIkVNUFRZIiA+DQotPCFFTlRJVFkgJSBtZXRhLnFuYW1lICAibWV0YSIgPg0KLTwhRUxFTUVOVCAlbWV0YS5xbmFtZTsgICVtZXRhLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBtZXRhLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBtZXRhLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJW1ldGEuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVtZXRhLnFuYW1lOw0KLSAgICAgICVYSFRNTC54bWxucy5hdHRyaWI7DQotICAgICAgJUkxOG4uYXR0cmliOw0KLSAgICAgIGh0dHAtZXF1aXYgICBOTVRPS0VOICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICBuYW1lICAgICAgICAgTk1UT0tFTiAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgY29udGVudCAgICAgIENEQVRBICAgICAgICAgICAgICAgICAgICAjUkVRVUlSRUQNCi0gICAgICBzY2hlbWUgICAgICAgQ0RBVEEgICAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotPg0KLTwhLS0gZW5kIG9mIG1ldGEuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1tZXRhLTEubW9kIC0tPg0KLQ0KLTwhLS0gQmFzZSBFbGVtZW50IE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLWJhc2UubW9kIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBCYXNlIEVsZW1lbnQgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWJhc2UtMS5tb2QiPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhIVE1MIEJhc2UgRWxlbWVudCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1iYXNlLTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MLCBhIHJlZm9ybXVsYXRpb24gb2YgSFRNTCBhcyBhIG1vZHVsYXIgWE1MIGFwcGxpY2F0aW9uLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUmV2aXNpb246ICRJZDogd21sMjAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1OCBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBCYXNlIEVsZW1lbnQgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtYmFzZS0xLm1vZCINCi0NCi0gICAgIFJldmlzaW9uczoNCi0gICAgIChub25lKQ0KLSAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBCYXNlIGVsZW1lbnQNCi0NCi0gICAgICAgIGJhc2UNCi0NCi0gICAgIFRoaXMgbW9kdWxlIGRlY2xhcmVzIHRoZSBiYXNlIGVsZW1lbnQgdHlwZSBhbmQgaXRzIGF0dHJpYnV0ZXMsDQotICAgICB1c2VkIHRvIGRlZmluZSBhIGJhc2UgVVJJIGFnYWluc3Qgd2hpY2ggcmVsYXRpdmUgVVJJcyBpbiB0aGUNCi0gICAgIGRvY3VtZW50IHdpbGwgYmUgcmVzb2x2ZWQuDQotDQotICAgICBOb3RlIHRoYXQgdGhpcyBtb2R1bGUgYWxzbyByZWRlY2xhcmVzIHRoZSBjb250ZW50IG1vZGVsIGZvcg0KLSAgICAgdGhlIGhlYWQgZWxlbWVudCB0byBpbmNsdWRlIHRoZSBiYXNlIGVsZW1lbnQuDQotLS0+DQotDQotPCEtLSBiYXNlOiBEb2N1bWVudCBCYXNlIFVSSSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBiYXNlLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWJhc2UuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBiYXNlLmNvbnRlbnQgICJFTVBUWSIgPg0KLTwhRU5USVRZICUgYmFzZS5xbmFtZSAgImJhc2UiID4NCi08IUVMRU1FTlQgJWJhc2UucW5hbWU7ICAlYmFzZS5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgYmFzZS5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgYmFzZS5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyViYXNlLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlYmFzZS5xbmFtZTsNCi0gICAgICAlWEhUTUwueG1sbnMuYXR0cmliOw0KLSAgICAgIGhyZWYgICAgICAgICAlVVJJLmRhdGF0eXBlOyAgICAgICAgICAgI1JFUVVJUkVEDQotPg0KLTwhLS0gZW5kIG9mIGJhc2UuYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGhlYWQuY29udGVudA0KLSAgICAiKCAlSGVhZE9wdHMubWl4OywNCi0gICAgICggKCAldGl0bGUucW5hbWU7LCAlSGVhZE9wdHMubWl4OywgKCAlYmFzZS5xbmFtZTssICVIZWFkT3B0cy5taXg7ICk/ICkNCi0gICAgIHwgKCAlYmFzZS5xbmFtZTssICVIZWFkT3B0cy5taXg7LCAoICV0aXRsZS5xbmFtZTssICVIZWFkT3B0cy5taXg7ICkpKSkiDQotPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLWJhc2UtMS5tb2QgLS0+DQotDQotPCEtLSBTdHlsZXNoZWV0cyBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtc3R5bGUubW9kIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBTdHlsZSBTaGVldHMgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLXN0eWxlLTEubW9kIj4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBEb2N1bWVudCBTdHlsZSBTaGVldCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtc3R5bGUtMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwsIGEgcmVmb3JtdWxhdGlvbiBvZiBIVE1MIGFzIGEgbW9kdWxhciBYTUwgYXBwbGljYXRpb24uDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB3bWwyMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU4IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCBTdHlsZSBTaGVldHMgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtc3R5bGUtMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotICAgICAobm9uZSkNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gU3R5bGUgU2hlZXRzDQotDQotICAgICAgICBzdHlsZQ0KLQ0KLSAgICAgVGhpcyBtb2R1bGUgZGVjbGFyZXMgdGhlIHN0eWxlIGVsZW1lbnQgdHlwZSBhbmQgaXRzIGF0dHJpYnV0ZXMsDQotICAgICB1c2VkIHRvIGVtYmVkIHN0eWxlIHNoZWV0IGluZm9ybWF0aW9uIGluIHRoZSBkb2N1bWVudCBoZWFkIGVsZW1lbnQuDQotLS0+DQotDQotPCEtLSBzdHlsZTogU3R5bGUgU2hlZXQgSW5mb3JtYXRpb24gLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBzdHlsZS5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVzdHlsZS5lbGVtZW50O1sNCi08IUVOVElUWSAlIHN0eWxlLmNvbnRlbnQgICIoICNQQ0RBVEEgKSIgPg0KLTwhRU5USVRZICUgc3R5bGUucW5hbWUgICJzdHlsZSIgPg0KLTwhRUxFTUVOVCAlc3R5bGUucW5hbWU7ICAlc3R5bGUuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIHN0eWxlLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBzdHlsZS5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVzdHlsZS5hdHRsaXN0O1sNCi08IUFUVExJU1QgJXN0eWxlLnFuYW1lOw0KLSAgICAgICVYSFRNTC54bWxucy5hdHRyaWI7DQotICAgICAgJXRpdGxlLmF0dHJpYjsNCi0gICAgICAlSTE4bi5hdHRyaWI7DQotICAgICAgdHlwZSAgICAgICAgICVDb250ZW50VHlwZS5kYXRhdHlwZTsgICAjUkVRVUlSRUQNCi0gICAgICBtZWRpYSAgICAgICAgJU1lZGlhRGVzYy5kYXRhdHlwZTsgICAgICNJTVBMSUVEDQotICAgICAgeG1sOnNwYWNlICAgICggcHJlc2VydmUgKSAgICAgICAgICAgICAjRklYRUQgJ3ByZXNlcnZlJw0KLT4NCi08IS0tIGVuZCBvZiBzdHlsZS5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLXN0eWxlLTEubW9kIC0tPg0KLQ0KLTwhLS0gRG9jdW1lbnQgU3RydWN0dXJlIE1vZHVsZSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIGh0bWwuY29udGVudCAiKCAlaGVhZC5xbmFtZTssICVUZW1wbGF0ZS5taXg7LCAoJWJvZHkucW5hbWU7IHwgKCVjYXJkLnFuYW1lOyspKSkiPg0KLTwhRU5USVRZICUgYm9keS5jb250ZW50ICIoJUNhcmRCb2R5Lm1peDspIj4NCi08IUVOVElUWSAlIHhodG1sLXN0cnVjdC5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIERvY3VtZW50IFN0cnVjdHVyZSAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtc3RydWN0LTEubW9kIj4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBTdHJ1Y3R1cmUgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtc3RydWN0LTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MLCBhIHJlZm9ybXVsYXRpb24gb2YgSFRNTCBhcyBhIG1vZHVsYXIgWE1MIGFwcGxpY2F0aW9uLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUmV2aXNpb246ICRJZDogd21sMjAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1OCBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBEb2N1bWVudCBTdHJ1Y3R1cmUgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtc3RydWN0LTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIERvY3VtZW50IFN0cnVjdHVyZQ0KLQ0KLSAgICAgICAgdGl0bGUsIGhlYWQsIGJvZHksIGh0bWwNCi0NCi0gICAgIFRoZSBTdHJ1Y3R1cmUgTW9kdWxlIGRlZmluZXMgdGhlIG1ham9yIHN0cnVjdHVyYWwgZWxlbWVudHMgYW5kDQotICAgICB0aGVpciBhdHRyaWJ1dGVzLg0KLQ0KLSAgICAgTm90ZSB0aGF0IHRoZSBjb250ZW50IG1vZGVsIG9mIHRoZSBoZWFkIGVsZW1lbnQgdHlwZSBpcyByZWRlY2xhcmVkDQotICAgICB3aGVuIHRoZSBCYXNlIE1vZHVsZSBpcyBpbmNsdWRlZCBpbiB0aGUgRFRELg0KLQ0KLSAgICAgVGhlIHBhcmFtZXRlciBlbnRpdHkgY29udGFpbmluZyB0aGUgWE1MIG5hbWVzcGFjZSBVUkkgdmFsdWUgdXNlZA0KLSAgICAgZm9yIFhIVE1MIGlzICclWEhUTUwueG1sbnM7JywgZGVmaW5lZCBpbiB0aGUgUXVhbGlmaWVkIE5hbWVzIG1vZHVsZS4NCi0tLT4NCi0NCi08IS0tIHRpdGxlOiBEb2N1bWVudCBUaXRsZSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIFRoZSB0aXRsZSBlbGVtZW50IGlzIG5vdCBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIGZsb3cgb2YgdGV4dC4NCi0gICAgIEl0IHNob3VsZCBiZSBkaXNwbGF5ZWQsIGZvciBleGFtcGxlIGFzIHRoZSBwYWdlIGhlYWRlciBvcg0KLSAgICAgd2luZG93IHRpdGxlLiBFeGFjdGx5IG9uZSB0aXRsZSBpcyByZXF1aXJlZCBwZXIgZG9jdW1lbnQuDQotLS0+DQotDQotPCFFTlRJVFkgJSB0aXRsZS5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyV0aXRsZS5lbGVtZW50O1sNCi08IUVOVElUWSAlIHRpdGxlLmNvbnRlbnQgICIoICNQQ0RBVEEgKSIgPg0KLTwhRU5USVRZICUgdGl0bGUucW5hbWUgICJ0aXRsZSIgPg0KLTwhRUxFTUVOVCAldGl0bGUucW5hbWU7ICAldGl0bGUuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIHRpdGxlLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSB0aXRsZS5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyV0aXRsZS5hdHRsaXN0O1sNCi08IUFUVExJU1QgJXRpdGxlLnFuYW1lOw0KLSAgICAgICVYSFRNTC54bWxucy5hdHRyaWI7DQotICAgICAgJUkxOG4uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiB0aXRsZS5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gaGVhZDogRG9jdW1lbnQgSGVhZCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgaGVhZC5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVoZWFkLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgaGVhZC5jb250ZW50DQotICAgICIoICVIZWFkT3B0cy5taXg7LCAldGl0bGUucW5hbWU7LCAlSGVhZE9wdHMubWl4OyApIg0KLT4NCi08IUVOVElUWSAlIGhlYWQucW5hbWUgICJoZWFkIiA+DQotPCFFTEVNRU5UICVoZWFkLnFuYW1lOyAgJWhlYWQuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGhlYWQuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGhlYWQuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslaGVhZC5hdHRsaXN0O1sNCi08IS0tIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlIHdpdGggZG9jdW1lbnQgcHJvZmlsZXMNCi0tLT4NCi08IUVOVElUWSAlIHByb2ZpbGUuYXR0cmliDQotICAgICAicHJvZmlsZSAgICAgICVVUkkuZGF0YXR5cGU7ICAgICAgICAgICAnJVhIVE1MLnByb2ZpbGU7JyINCi0+DQotDQotPCFBVFRMSVNUICVoZWFkLnFuYW1lOw0KLSAgICAgICVYSFRNTC54bWxucy5hdHRyaWI7DQotICAgICAgJUkxOG4uYXR0cmliOw0KLSAgICAgICVwcm9maWxlLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgaGVhZC5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gYm9keTogRG9jdW1lbnQgQm9keSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgYm9keS5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVib2R5LmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgYm9keS5jb250ZW50DQotICAgICAiKCAlQmxvY2subWl4OyApKyINCi0+DQotPCFFTlRJVFkgJSBib2R5LnFuYW1lICAiYm9keSIgPg0KLTwhRUxFTUVOVCAlYm9keS5xbmFtZTsgICVib2R5LmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBib2R5LmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBib2R5LmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWJvZHkuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVib2R5LnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBib2R5LmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBodG1sOiBYSFRNTCBEb2N1bWVudCBFbGVtZW50IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBodG1sLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWh0bWwuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBodG1sLmNvbnRlbnQgICIoICVoZWFkLnFuYW1lOywgJWJvZHkucW5hbWU7ICkiID4NCi08IUVOVElUWSAlIGh0bWwucW5hbWUgICJodG1sIiA+DQotPCFFTEVNRU5UICVodG1sLnFuYW1lOyAgJWh0bWwuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGh0bWwuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGh0bWwuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslaHRtbC5hdHRsaXN0O1sNCi08IS0tIHZlcnNpb24gYXR0cmlidXRlIHZhbHVlIGRlZmluZWQgaW4gZHJpdmVyDQotLS0+DQotPCFFTlRJVFkgJSBYSFRNTC52ZXJzaW9uLmF0dHJpYg0KLSAgICAgInZlcnNpb24gICAgICAlRlBJLmRhdGF0eXBlOyAgICAgICAgICAgI0ZJWEVEICclWEhUTUwudmVyc2lvbjsnIg0KLT4NCi0NCi08IS0tIHNlZSB0aGUgUXVhbGlmaWVkIE5hbWVzIG1vZHVsZSBmb3IgaW5mb3JtYXRpb24NCi0gICAgIG9uIGhvdyB0byBleHRlbmQgWEhUTUwgdXNpbmcgWE1MIG5hbWVzcGFjZXMNCi0tLT4NCi08IUFUVExJU1QgJWh0bWwucW5hbWU7DQotICAgICAgJVhIVE1MLnhtbG5zLmF0dHJpYjsNCi0gICAgICAlWEhUTUwudmVyc2lvbi5hdHRyaWI7DQotICAgICAgJUkxOG4uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBodG1sLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtc3RydWN0LTEubW9kIC0tPg0KLQ0KLTwhLS0gQmxvY2sgUHJlc2VudGF0aW9uIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1ibGtwcmVzLm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgQmxvY2sgUHJlc2VudGF0aW9uIDEuMC8vRU4iDQotIAkJImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1ibGtwcmVzLTEubW9kIj4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBCbG9jayBQcmVzZW50YXRpb24gTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtYmxrcHJlcy0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCwgYSByZWZvcm11bGF0aW9uIG9mIEhUTUwgYXMgYSBtb2R1bGFyIFhNTCBhcHBsaWNhdGlvbi4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJldmlzaW9uOiAkSWQ6IHdtbDIwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTggcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgQmxvY2sgUHJlc2VudGF0aW9uIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWJsa3ByZXMtMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotICAgICAobm9uZSkNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gQmxvY2sgUHJlc2VudGF0aW9uYWwgRWxlbWVudHMNCi0NCi0gICAgICAgIGhyDQotDQotICAgICBUaGlzIG1vZHVsZSBkZWNsYXJlcyB0aGUgZWxlbWVudHMgYW5kIHRoZWlyIGF0dHJpYnV0ZXMgdXNlZCB0bw0KLSAgICAgc3VwcG9ydCBibG9jay1sZXZlbCBwcmVzZW50YXRpb25hbCBtYXJrdXAuDQotLS0+DQotDQotPCFFTlRJVFkgJSBoci5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVoci5lbGVtZW50O1sNCi08IUVOVElUWSAlIGhyLmNvbnRlbnQgICJFTVBUWSIgPg0KLTwhRU5USVRZICUgaHIucW5hbWUgICJociIgPg0KLTwhRUxFTUVOVCAlaHIucW5hbWU7ICAlaHIuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGhyLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBoci5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVoci5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWhyLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBoci5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLWJsa3ByZXMtMS5tb2QgLS0+DQotDQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tDQotCQlXTUwgRGVjbGFyYXRpb25zDQotLS0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tIFNwZWNpYWwgV01MIGVsZW1lbnRzLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHdtbC1zcGVjaWFsLm1vZCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9FTEVNRU5UUyBXTUwgU3BlY2lhbCAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sLXNwZWNpYWwtMS5tb2QiPg0KLTwhLS0gV01MIDIuMCBTcGVjaWFsIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogd21sLXNwZWNpYWwtMS5tb2QgLS0+DQotPCEtLSANCi0gICAgQFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtLCBMdGQuIDIwMDEuDQotDQotCVRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHVzZSBhcmUgYXZhaWxhYmxlIGZyb20gdGhlIFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4gDQotCVdlYiBzaXRlIChodHRwOi8vd3d3LndhcGZvcnVtLm9yZy93aGF0L2NvcHlyaWdodC5odG0pLg0KLS0tPg0KLTwhLS0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XQVBGT1JVTS8vRUxFTUVOVFMgV01MIFNwZWNpYWwgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJ3bWwtc3BlY2lhbC0xLm1vZCINCi0NCi0JVGhpcyBtb2R1bGUgY29udGFpbnMgZGVjbGFyYXRpb25zIG9mIHRoZSBmb2xsb3dpbmcgV01MIGVsZW1lbnRzLiANCi0JDQotCQljYXJkLCBkbywgb25ldmVudCwgYWNjZXNzLCBnbywgcHJldiwNCi0JCXJlZnJlc2gsIG5vb3AsICBwb3N0ZmllbGQsIHNldHZhciwgZ2V0dmFyDQotCQl0aW1lciwgYW5jaG9yDQotCQkNCi0JSXQgYWxzbyBjb250YWlucyBXTUwgZXh0ZW5zaW9ucyBvZiBYSFRNTCBlbGVtZW50cy4gDQotLS0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tIA0KLQlXTUwgR2xvYmFsIGF0dHJpYnV0ZXMNCi0tLT4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLTwhLS0gDQotCVdNTCBFdmVudCBhdHRyaWJ1dGVzDQotCQ0KLQlUaGVzZSBhcmUgdXNlZCBvbiB0aGUgWEhUTUwgYm9keSBhbmQgaHRtbCBlbGVtZW50cy4NCi0JVGhlIHNhbWUgYXR0cmlidXRlcyBhcmUgYWxzbyBhdmFpbGFibGUgb24gdGhlIFdNTCBjYXJkIGVsZW1lbnQsIGJ1dA0KLQl3aXRob3V0IG5hbWVzcGFjZSBwcmVmaXguDQotLS0+DQotPCFFTlRJVFkgJSBXTUwuZXZlbnQuYXR0cmliICIlYXR0Lm9uZW50ZXJmb3J3YXJkLnFuYW1lOyBDREFUQQkjSU1QTElFRA0KLSAlYXR0Lm9uZW50ZXJiYWNrd2FyZC5xbmFtZTsgQ0RBVEEJI0lNUExJRUQNCi0gJWF0dC5vbnRpbWVyLnFuYW1lOyBDREFUQQkjSU1QTElFRCI+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tIA0KLQlXTUwgRWxlbWVudHMNCi0tLT4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLTwhLS0gDQotCUNhcmRzIA0KLQkNCi0JVXNlIHNhbWUgY29udGVudCBtb2RlbCBhcyB0aGUgSFRNTCBib2R5IGVsZW1lbnQNCi0tLT4NCi08IUVMRU1FTlQgJWNhcmQucW5hbWU7ICVDYXJkQm9keS5taXg7Pg0KLTwhQVRUTElTVCAlY2FyZC5xbmFtZTsNCi0JJUNvbW1vbi5hdHRyaWI7IA0KLQluZXdjb250ZXh0ICVCb29sZWFuLmRhdGF0eXBlOyAiZmFsc2UiDQotCW9uZW50ZXJmb3J3YXJkIENEQVRBICNJTVBMSUVEDQotCW9uZW50ZXJiYWNrd2FyZCBDREFUQSAjSU1QTElFRA0KLQlvbnRpbWVyIENEQVRBICNJTVBMSUVEDQotPg0KLTwhLS0gDQotCURvIA0KLS0tPg0KLTwhRUxFTUVOVCAlZG8ucW5hbWU7ICglVGFza3MuY2xhc3M7KT4NCi08IUFUVExJU1QgJWRvLnFuYW1lOw0KLQklQ29tbW9uLmF0dHJpYjsgDQotICAJdHlwZSAgICAgICAgICAgICBDREFUQSAgICAgICAjUkVRVUlSRUQNCi0gIAlsYWJlbCAgICAgICAgICAgICBDREFUQSAgICAgICAjSU1QTElFRA0KLT4NCi08IS0tIA0KLQlPbmV2ZW50IA0KLS0tPg0KLTwhRUxFTUVOVCAlb25ldmVudC5xbmFtZTsgJVRhc2tzLmNsYXNzOz4NCi08IUFUVExJU1QgJW9uZXZlbnQucW5hbWU7DQotCSVDb3JlLmF0dHJpYjsgDQotCXR5cGUgQ0RBVEEgI1JFUVVJUkVEDQotPg0KLTwhLS0gDQotCUFjY2VzcyANCi0tLT4NCi08IUVMRU1FTlQgJWFjY2Vzcy5xbmFtZTsgRU1QVFk+DQotPCFBVFRMSVNUICVhY2Nlc3MucW5hbWU7DQotCSVDb3JlLmF0dHJpYjsgDQotCWRvbWFpbiBDREFUQSAjSU1QTElFRA0KLQlwYXRoIENEQVRBICNJTVBMSUVEDQotPg0KLTwhLS0gDQotCUdvIA0KLS0tPg0KLTwhRU5USVRZICUgY2FjaGUtY29udHJvbCAnKG5vLWNhY2hlKSc+DQotPCFFTEVNRU5UICVnby5xbmFtZTsgKCVwb3N0ZmllbGQucW5hbWU7IHwgJXNldHZhci5xbmFtZTspKj4NCi08IUFUVExJU1QgJWdvLnFuYW1lOw0KLQklQ29yZS5hdHRyaWI7IA0KLQlocmVmICVVUkkuZGF0YXR5cGU7ICNSRVFVSVJFRA0KLQlzZW5kcmVmZXJlciAlQm9vbGVhbi5kYXRhdHlwZTsgImZhbHNlIg0KLQl0eXBlICVDb250ZW50VHlwZS5kYXRhdHlwZTsgI0lNUExJRUQNCi0JbWV0aG9kIChwb3N0IHwgZ2V0KSAiZ2V0Ig0KLQllbmN0eXBlICVDb250ZW50VHlwZS5kYXRhdHlwZTsgImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCINCi0JYWNjZXB0LWNoYXJzZXQgQ0RBVEEgI0lNUExJRUQNCi0JY2FjaGUtY29udHJvbCAlY2FjaGUtY29udHJvbDsgI0lNUExJRUQNCi0+DQotPCEtLSANCi0JUHJldiANCi0tLT4NCi08IUVMRU1FTlQgJXByZXYucW5hbWU7ICglc2V0dmFyLnFuYW1lOykqPg0KLTwhQVRUTElTVCAlcHJldi5xbmFtZTsNCi0JJUNvcmUuYXR0cmliOyANCi0+DQotPCEtLSANCi0JUmVmcmVzaCANCi0tLT4NCi08IUVMRU1FTlQgJXJlZnJlc2gucW5hbWU7ICglc2V0dmFyLnFuYW1lOykqPg0KLTwhQVRUTElTVCAlcmVmcmVzaC5xbmFtZTsNCi0JJUNvcmUuYXR0cmliOyANCi0+DQotPCEtLSANCi0JTm9vcCANCi0tLT4NCi08IUVMRU1FTlQgJW5vb3AucW5hbWU7IEVNUFRZPg0KLTwhQVRUTElTVCAlbm9vcC5xbmFtZTsNCi0JJUNvcmUuYXR0cmliOyANCi0+DQotPCEtLSANCi0JUG9zdGZpZWxkIA0KLS0tPg0KLTwhRUxFTUVOVCAlcG9zdGZpZWxkLnFuYW1lOyBFTVBUWT4NCi08IUFUVExJU1QgJXBvc3RmaWVsZC5xbmFtZTsNCi0JJUNvcmUuYXR0cmliOyANCi0JbmFtZSBDREFUQSAjUkVRVUlSRUQNCi0JdmFsdWUgQ0RBVEEgI1JFUVVJUkVEDQotPg0KLTwhLS0gDQotCVNldHZhciANCi0tLT4NCi08IUVMRU1FTlQgJXNldHZhci5xbmFtZTsgRU1QVFk+DQotPCFBVFRMSVNUICVzZXR2YXIucW5hbWU7DQotCSVDb3JlLmF0dHJpYjsgDQotCW5hbWUgQ0RBVEEgI1JFUVVJUkVEDQotCXZhbHVlIENEQVRBICNSRVFVSVJFRA0KLT4NCi08IS0tIA0KLQlHZXR2YXINCi0tLT4NCi08IUVMRU1FTlQgJWdldHZhci5xbmFtZTsgRU1QVFk+DQotPCFBVFRMSVNUICVnZXR2YXIucW5hbWU7DQotCSVDb3JlLmF0dHJpYjsgDQotCW5hbWUgQ0RBVEEgI1JFUVVJUkVEDQotCWNvbnZlcnNpb24gKGVzY2FwZSB8IG5vZXNjIHwgdW5lc2MpICJub2VzYyINCi0+DQotPCEtLSANCi0JVGltZXIgIA0KLS0tPg0KLTwhRUxFTUVOVCAldGltZXIucW5hbWU7IEVNUFRZPg0KLTwhQVRUTElTVCAldGltZXIucW5hbWU7DQotCSVDb3JlLmF0dHJpYjsgDQotCW5hbWUgTk1UT0tFTiAjSU1QTElFRA0KLQl2YWx1ZSBDREFUQSAjUkVRVUlSRUQNCi0+DQotPCEtLSANCi0JQW5jaG9yIA0KLQkNCi0JU2FtZSBjb250ZW50IG1vZGVsIGFzIEhUTUwgYSBlbGVtZW50LCBidXQgZXh0ZW5kZWQgd2l0aCBXTUwgdGFza3MuDQotLS0+DQotPCFFTEVNRU5UICVhbmNob3IucW5hbWU7ICgjUENEQVRBIHwgJUlubE5vQW5jaG9yLm1peDsgfCAlVGFza3Mtbm9ub29wLmNsYXNzOykqPg0KLTwhQVRUTElTVCAlYW5jaG9yLnFuYW1lOw0KLQklQ29tbW9uLmF0dHJpYjsgDQotCWFjY2Vzc2tleSBDREFUQSAjSU1QTElFRA0KLT4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLTwhLS0gDQotCVdNTCBleHRlbnNpb25zIG9mIFhIVE1MIGVsZW1lbnRzDQotLS0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tIA0KLQlzZWxlY3QgDQotCQ0KLQkqV01MIGluYW1lLCBpdmFsdWUsIHZhbHVlLCBhbmQgbmFtZSBhdHRyaWJ1dGVzDQotCSpYSFRNTCB0YWJpbmRleCAobm90IGluIEJhc2ljIEZvcm1zIG1vZHVsZSkNCi0tLT4NCi08IUFUVExJU1QgJXNlbGVjdC5xbmFtZTsNCi0JJWF0dC5pbmFtZS5xbmFtZTsgTk1UT0tFTiAjSU1QTElFRA0KLQklYXR0LnZhbHVlLnFuYW1lOyBDREFUQSAjSU1QTElFRA0KLQklYXR0Lml2YWx1ZS5xbmFtZTsgQ0RBVEEgI0lNUExJRUQNCi0JJWF0dC5uYW1lLnFuYW1lOyBDREFUQSAjSU1QTElFRA0KLT4NCi08IS0tIA0KLQlpbnB1dCANCi0JDQotCSpXTUwgZm9ybWF0LCBlbXB0eW9rLCBhbmQgbmFtZSBhdHRyaWJ1dGVzDQotCSpYSFRNTCB0YWJpbmRleCAobm90IGluIEJhc2ljIEZvcm1zIG1vZHVsZSkNCi0tLT4NCi08IUFUVExJU1QgJWlucHV0LnFuYW1lOw0KLQklYXR0LmZvcm1hdC5xbmFtZTsgQ0RBVEEgI0lNUExJRUQNCi0JJWF0dC5lbXB0eW9rLnFuYW1lOyAlQm9vbGVhbi5kYXRhdHlwZTsgI0lNUExJRUQNCi0JJWF0dC5uYW1lLnFuYW1lOyBDREFUQSAjSU1QTElFRA0KLT4NCi08IS0tIA0KLQl0ZXh0YXJlYQ0KLQkNCi0JKldNTCBmb3JtYXQsIGVtcHR5b2ssIGFuZCBuYW1lIGF0dHJpYnV0ZXMNCi0JKlhIVE1MIHRhYmluZGV4IGF0dHJpYnV0ZSAobm90IGluIEJhc2ljIEZvcm1zIG1vZHVsZSkNCi0tLT4NCi08IUFUVExJU1QgJXRleHRhcmVhLnFuYW1lOw0KLQklYXR0LmZvcm1hdC5xbmFtZTsgQ0RBVEEgI0lNUExJRUQNCi0JJWF0dC5lbXB0eW9rLnFuYW1lOyAlQm9vbGVhbi5kYXRhdHlwZTsgI0lNUExJRUQNCi0JJWF0dC5uYW1lLnFuYW1lOyBDREFUQSAjSU1QTElFRA0KLT4NCi08IS0tIA0KLQlvcHRpb24NCi0JDQotCSpXTUwgb25waWNrIGF0dHJpYnV0ZQ0KLS0tPg0KLTwhQVRUTElTVCAlb3B0aW9uLnFuYW1lOw0KLQklYXR0Lm9ucGljay5xbmFtZTsgQ0RBVEEgI0lNUExJRUQNCi0+DQotPCEtLSANCi0JaW1nIA0KLQ0KLQkqV01MIGxvY2Fsc3JjIGF0dHJpYnV0ZQ0KLS0tPg0KLTwhQVRUTElTVCBpbWcNCi0JJWF0dC5sb2NhbHNyYy5xbmFtZTsgQ0RBVEEgI0lNUExJRUQNCi0JJWF0dC50eXBlLnFuYW1lOyAlQ29udGVudFR5cGUuZGF0YXR5cGU7ICNJTVBMSUVEDQotPg0KLTwhLS0gDQotCXRhYmxlIA0KLQkNCi0JKldNTCBjb2x1bW5zIGF0dHJpYnV0ZQ0KLQkNCi0tLT4NCi08IUFUVExJU1QgJXRhYmxlLnFuYW1lOw0KLQklYXR0LmNvbHVtbnMucW5hbWU7ICVOdW1iZXIuZGF0YXR5cGU7ICNJTVBMSUVEDQotPg0KLTwhLS0gDQotCWJvZHkgDQotCQ0KLQkqV01MIG5ld2NvbnRleHQgDQotCSpXTUwgZXZlbnQgYXR0cmlidXRlcw0KLS0tPg0KLTwhQVRUTElTVCAlYm9keS5xbmFtZTsNCi0JJWF0dC5uZXdjb250ZXh0LnFuYW1lOyAlQm9vbGVhbi5kYXRhdHlwZTsgImZhbHNlIg0KLQklV01MLmV2ZW50LmF0dHJpYjsgDQotPg0KLTwhLS0gDQotCWh0bWwgDQotCQ0KLQkqRGVjbGFyYXRpb24gb2YgV01MIG5hbWVzcGFjZSB3aXRoIHByZWZpeAkNCi0JKldNTCBldmVudCBhdHRyaWJ1dGVzDQotLS0+DQotPCFBVFRMSVNUICVodG1sLnFuYW1lOw0KLQklV01MLnhtbG5zLmV4dHJhLmF0dHJpYjsgDQotCSVXTUwuZXZlbnQuYXR0cmliOyANCi0+DQotDQotPCEtLSBEZXByZWNhdGVkIFdNTCBlbGVtZW50cy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB3bWwtZGVwcmVjYXRlZC5tb2QgUFVCTElDICItLy9XQVBGT1JVTS8vRUxFTUVOVFMgV01MIERlcHJlY2F0ZWQgMS4wLy9FTiINCi0gICAgICAgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWwtZGVwcmVjYXRlZC0xLm1vZCI+DQotPCEtLSBXTUwgRGVwcmVjYXRlZCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHdtbC1kZXByZWNhdGVkLTEubW9kIC0tPg0KLTwhLS0gDQotICAgIEBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSwgTHRkLiAyMDAxLg0KLQ0KLQlUZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UgYXJlIGF2YWlsYWJsZSBmcm9tIHRoZSBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSBMdGQuIA0KLQlXZWIgc2l0ZSAoaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvd2hhdC9jb3B5cmlnaHQuaHRtKS4NCi0tLT4NCi08IS0tDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0VMRU1FTlRTIFdNTCBEZXByZWNhdGVkIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAid21sLWRlcHJlY2F0ZWQtMS5tb2QiDQotDQotCVRoaXMgbW9kdWxlIGNvbnRhaW5zIGRlcHJlY2F0ZWQgZWxlbWVudHMgYW5kIGF0dHJpYnV0ZXMuDQotCQ0KLQkJQXR0cmlidXRlczogV01MIG1vZGUsIFhIVE1MIGFsaWduLCBYSFRNTCB2c3BhY2UsIFhIVE1MIGhzcGFjZQ0KLQkJDQotCQlFbGVtZW50czogdSwgYiwgYmlnLCBpLCBzbWFsbCANCi0JCQ0KLS0tPg0KLTwhLS0gDQotCXAgDQotCQ0KLQkqV01MIG1vZGUNCi0JKlhIVE1MIGFsaWduDQotCQ0KLQlSZXBsYWNlbWVudDogVXNlIENTUyBzdHlsZSBzaGVldHMgDQotLS0+DQotPCFBVFRMSVNUICVwLnFuYW1lOw0KLQklYXR0Lm1vZGUucW5hbWU7ICh3cmFwIHwgbm93cmFwKSAjSU1QTElFRA0KLQlhbGlnbiAobGVmdCB8IHJpZ2h0IHwgY2VudGVyKSAibGVmdCINCi0+DQotPCEtLSANCi0JdGFibGUgDQotCQ0KLQkqV01MIGFsaWduIA0KLQkNCi0JTm90ZTogVGhlIFdNTCBhbGlnbiBhdHRyaWJ1dGUgaXMgbm90IHRoZSBzYW1lIGFzIHRoZSBYSFRNTCBhdHRyaWJ1dGUgd2l0aCB0aGUgc2FtZSBuYW1lLg0KLS0tPg0KLTwhQVRUTElTVCAldGFibGUucW5hbWU7DQotCSVhdHQuYWxpZ24ucW5hbWU7IENEQVRBICNJTVBMSUVEDQotPg0KLTwhLS0gDQotCWltZyANCi0JDQotCSpYSFRNTCB2c3BhY2UsIGhzcGFjZSwgYWxpZ24NCi0JDQotCVJlcGxhY2VtZW50OiBVc2UgQ1NTIHN0eWxlIHNoZWV0cyANCi0tLT4NCi08IUFUVExJU1QgaW1nDQotCXZzcGFjZSBDREFUQSAiMCINCi0JaHNwYWNlIENEQVRBICIwIg0KLQlhbGlnbiAodG9wIHwgbWlkZGxlIHwgYm90dG9tKSAiYm90dG9tIg0KLT4NCi08IS0tIA0KLQlJbmxpbmUgUHJlc2VudGF0aW9uIA0KLQkNCi0JKlhIVE1MICBiLCBiaWcsIGksIHNtYWxsCQ0KLQkNCi0JUmVwbGFjZW1lbnQ6IFVzZSBDU1Mgc3R5bGUgc2hlZXRzIA0KLS0tPg0KLTwhRU5USVRZICUgc3ViLmVsZW1lbnQgIklHTk9SRSI+DQotPCFFTlRJVFkgJSBzdWIuYXR0bGlzdCAiSUdOT1JFIj4NCi08IUVOVElUWSAlIHN1cC5lbGVtZW50ICJJR05PUkUiPg0KLTwhRU5USVRZICUgc3VwLmF0dGxpc3QgIklHTk9SRSI+DQotPCFFTlRJVFkgJSB0dC5lbGVtZW50ICJJR05PUkUiPg0KLTwhRU5USVRZICUgdHQuYXR0bGlzdCAiSUdOT1JFIj4NCi08IUVOVElUWSAlIHhodG1sLWlubHByZXMubW9kIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBJbmxpbmUgUHJlc2VudGF0aW9uIDEuMC8vRU4iDQotCQkieGh0bWwtaW5scHJlcy0xLm1vZCI+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgSW5saW5lIFByZXNlbnRhdGlvbiBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLWlubHByZXMtMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwsIGEgcmVmb3JtdWxhdGlvbiBvZiBIVE1MIGFzIGEgbW9kdWxhciBYTUwgYXBwbGljYXRpb24uDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB3bWwyMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU4IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIElubGluZSBQcmVzZW50YXRpb24gMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtaW5scHJlcy0xLm1vZCINCi0NCi0gICAgIFJldmlzaW9uczoNCi0gICAgIChub25lKQ0KLSAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBJbmxpbmUgUHJlc2VudGF0aW9uYWwgRWxlbWVudHMNCi0NCi0gICAgICAgIGIsIGJpZywgaSwgc21hbGwsIHN1Yiwgc3VwLCB0dA0KLQ0KLSAgICAgVGhpcyBtb2R1bGUgZGVjbGFyZXMgdGhlIGVsZW1lbnRzIGFuZCB0aGVpciBhdHRyaWJ1dGVzIHVzZWQgdG8NCi0gICAgIHN1cHBvcnQgaW5saW5lLWxldmVsIHByZXNlbnRhdGlvbmFsIG1hcmt1cC4NCi0tLT4NCi0NCi08IUVOVElUWSAlIGIuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslYi5lbGVtZW50O1sNCi08IUVOVElUWSAlIGIuY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiINCi0+DQotPCFFTlRJVFkgJSBiLnFuYW1lICAiYiIgPg0KLTwhRUxFTUVOVCAlYi5xbmFtZTsgICViLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBiLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBiLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWIuYXR0bGlzdDtbDQotPCFBVFRMSVNUICViLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBiLmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBiaWcuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslYmlnLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgYmlnLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiDQotPg0KLTwhRU5USVRZICUgYmlnLnFuYW1lICAiYmlnIiA+DQotPCFFTEVNRU5UICViaWcucW5hbWU7ICAlYmlnLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBiaWcuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGJpZy5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyViaWcuYXR0bGlzdDtbDQotPCFBVFRMSVNUICViaWcucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGJpZy5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgaS5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVpLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgaS5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7ICkqIg0KLT4NCi08IUVOVElUWSAlIGkucW5hbWUgICJpIiA+DQotPCFFTEVNRU5UICVpLnFuYW1lOyAgJWkuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGkuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGkuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslaS5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWkucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGkuYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHNtYWxsLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJXNtYWxsLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgc21hbGwuY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiINCi0+DQotPCFFTlRJVFkgJSBzbWFsbC5xbmFtZSAgInNtYWxsIiA+DQotPCFFTEVNRU5UICVzbWFsbC5xbmFtZTsgICVzbWFsbC5jb250ZW50OyA+DQotPCEtLSBlbmQgb2Ygc21hbGwuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHNtYWxsLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJXNtYWxsLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlc21hbGwucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIHNtYWxsLmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBzdWIuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslc3ViLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgc3ViLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiDQotPg0KLTwhRU5USVRZICUgc3ViLnFuYW1lICAic3ViIiA+DQotPCFFTEVNRU5UICVzdWIucW5hbWU7ICAlc3ViLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBzdWIuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHN1Yi5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVzdWIuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVzdWIucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIHN1Yi5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgc3VwLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJXN1cC5lbGVtZW50O1sNCi08IUVOVElUWSAlIHN1cC5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7ICkqIg0KLT4NCi08IUVOVElUWSAlIHN1cC5xbmFtZSAgInN1cCIgPg0KLTwhRUxFTUVOVCAlc3VwLnFuYW1lOyAgJXN1cC5jb250ZW50OyA+DQotPCEtLSBlbmQgb2Ygc3VwLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBzdXAuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslc3VwLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlc3VwLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBzdXAuYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHR0LmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJXR0LmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgdHQuY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiINCi0+DQotPCFFTlRJVFkgJSB0dC5xbmFtZSAgInR0IiA+DQotPCFFTEVNRU5UICV0dC5xbmFtZTsgICV0dC5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgdHQuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHR0LmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJXR0LmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAldHQucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIHR0LmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtaW5scHJlcy0xLm1vZCAtLT4NCi0NCi08IS0tIA0KLQl1DQotDQotCVRoaXMgZWxlbWVudCBpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBYSFRNTCBpbmxpbmUgcHJlc2VudGF0aW9uIG1vZHVsZS4NCi0JSXQgd2FzIGRlcHJlY2F0ZWQgYWxyZWFkeSBpbiBIVE1MIDQuMC4NCi0JDQotCVJlcGxhY2VtZW50OiBVc2UgQ1NTIHN0eWxlIHNoZWV0cyANCi0tLT4NCi08IUVOVElUWSAlIHUuY29udGVudCAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7ICkqIj4NCi08IUVOVElUWSAlIHUucW5hbWUgInUiPg0KLTwhRUxFTUVOVCAldS5xbmFtZTsgJXUuY29udGVudDs+DQotPCFBVFRMSVNUICV1LnFuYW1lOw0KLQklQ29tbW9uLmF0dHJpYjsgDQotPg0KLTwhLS0gDQotCW1ldGEgDQotCQ0KLQkqV01MIGZvcnVhIGF0dHJpYnV0ZQ0KLS0tPg0KLTwhQVRUTElTVCAlbWV0YS5xbmFtZTsNCi0JJWF0dC5mb3J1YS5xbmFtZTsgJUJvb2xlYW4uZGF0YXR5cGU7ICJ0cnVlIg0KLT4NCi08IS0tDQotCWh0bWwNCi0JDQotCSpXTUwgdXNlLXhtbC1mcmFnbWVudCBhdHRyaWJ1dGUNCi0tLT4NCi08IUFUVExJU1QgJWh0bWwucW5hbWU7DQotCSVhdHQudXNleG1sZnJhZ21lbnQucW5hbWU7IAklQm9vbGVhbi5kYXRhdHlwZTsgInRydWUiDQotPg0KLQ0KLQ0KLQ0KLTwhLS0gZW5kIG9mIFdNTCAyLjAgRFREICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMi0wL3dtbDIwLW1vZGVsLTEubW9kIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAvd21sMjAtbW9kZWwtMS5tb2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyZDc2MjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAvd21sMjAtbW9kZWwtMS5tb2QKKysrIC9kZXYvbnVsbApAQCAtMSwxODQgKzAsMCBAQAotPCEtLSBXTUwgMi4wIERvY3VtZW50IE1vZGVsIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogd21sMjAtbW9kZWwtMS5tb2QgLS0+DQotPCEtLSANCi0gICAgQFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtLCBMdGQuIDIwMDEuDQotDQotCVRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHVzZSBhcmUgYXZhaWxhYmxlIGZyb20gdGhlIFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4gDQotCVdlYiBzaXRlIChodHRwOi8vd3d3LndhcGZvcnVtLm9yZy93aGF0L2NvcHlyaWdodC5odG0pLg0KLS0tPg0KLTwhLS0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XQVBGT1JVTS8vRU5USVRJRVMgV01MIDIuMCBEb2N1bWVudCBNb2RlbCAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL2R0ZC93bWwyMC1tb2RlbC0xLm1vZCINCi0gICAgICANCi0gICAgIFRoaXMgbW9kdWxlIGRlc2NyaWJlcyB0aGUgZ3JvdXBpbmdzIG9mIGVsZW1lbnRzIHRoYXQgbWFrZSB1cA0KLSAgICAgY29tbW9uIGNvbnRlbnQgbW9kZWxzIGZvciBXTUwgYW5kIFhIVE1MIGVsZW1lbnRzLg0KLQ0KLSAgICAgVGhyZWUgYmFzaWMgY29udGVudCBtb2RlbHMgYXJlIGRlY2xhcmVkOg0KLQ0KLSAgICAgICAgICVJbmxpbmUubWl4OyAgY2hhcmFjdGVyLWxldmVsIGVsZW1lbnRzDQotICAgICAgICAgJUJsb2NrLm1peDsgICBibG9jay1saWtlIGVsZW1lbnRzLCBlZy4sIHBhcmFncmFwaHMgYW5kIGxpc3RzDQotICAgICAgICAgJUZsb3cubWl4OyAgICBhbnkgYmxvY2sgb3IgaW5saW5lIGVsZW1lbnRzDQotDQotICAgICBBbnkgcGFyYW1ldGVyIGVudGl0aWVzIGRlY2xhcmVkIGluIHRoaXMgbW9kdWxlIG1heSBiZSB1c2VkDQotICAgICB0byBjcmVhdGUgZWxlbWVudCBjb250ZW50IG1vZGVscywgYnV0IHRoZSBhYm92ZSB0aHJlZSBhcmUNCi0gICAgIGNvbnNpZGVyZWQgJ2dsb2JhbCcgKGluc29mYXIgYXMgdGhhdCB0ZXJtIGFwcGxpZXMgaGVyZSkuDQotICAgICANCi0gICAgICAgIAkgICAgIA0KLS0tPg0KLTwhLS0gDQotCU9wdGlvbmFsIEVsZW1lbnRzIGluIGhlYWQgIA0KLS0tPg0KLTwhRU5USVRZICUgSGVhZE9wdHMubWl4ICIoICVtZXRhLnFuYW1lOyANCi0JCXwgJWxpbmsucW5hbWU7IA0KLQkJfCAlc3R5bGUucW5hbWU7IA0KLQkJfCAlb2JqZWN0LnFuYW1lOyANCi0JCXwgJWFjY2Vzcy5xbmFtZTspKiI+DQotPCEtLSANCi0JVGFzayBlbGVtZW50cw0KLQ0KLQlVc2VkIGZvciB0aGUgV01MIGRvIGFuZCBvbmV2ZW50IGVsZW1lbnRzDQotLS0+DQotPCFFTlRJVFkgJSBUYXNrcy5jbGFzcyAiKCVnby5xbmFtZTsgDQotCQl8ICVwcmV2LnFuYW1lOyANCi0JCXwgJW5vb3AucW5hbWU7IA0KLQkJfCAlcmVmcmVzaC5xbmFtZTspIj4NCi08IS0tIA0KLQlUYXNrcyB3aXRob3V0IG5vb3AgZWxlbWVudA0KLQ0KLQlVc2VkIGZvciB0aGUgV01MIGFuY2hvcg0KLS0tPg0KLTwhRU5USVRZICUgVGFza3Mtbm9ub29wLmNsYXNzICIlZ28ucW5hbWU7IA0KLQkJfCAlcHJldi5xbmFtZTsgDQotCQl8ICVyZWZyZXNoLnFuYW1lOyI+DQotPCEtLQ0KLQlEbyBlbGVtZW50DQotLS0+DQotPCFFTlRJVFkgJSBEby5jbGFzcyAiJWRvLnFuYW1lOyI+DQotPCEtLSANCi0JTWlzY2VsbGFuZW91cyBFbGVtZW50cyAgDQotCQ0KLQlUaGlzIGlzIG5vdCB1c2VkIGZvciBhbnl0aGluZyByaWdodCBub3cuIA0KLS0tPg0KLTwhRU5USVRZICUgTWlzYy5jbGFzcyAiIj4NCi08IS0tIA0KLQlJbmxpbmUgRWxlbWVudHMgIA0KLS0tPg0KLTwhRU5USVRZICUgSW5sU3RydWN0LmNsYXNzICIlYnIucW5hbWU7IA0KLQl8ICVzcGFuLnFuYW1lOyI+DQotPCFFTlRJVFkgJSBJbmxQaHJhcy5jbGFzcyAifCAlZW0ucW5hbWU7IA0KLQl8ICVzdHJvbmcucW5hbWU7IA0KLQl8ICVkZm4ucW5hbWU7IA0KLQl8ICVjb2RlLnFuYW1lOyANCi0JfCAlc2FtcC5xbmFtZTsgDQotCXwgJWtiZC5xbmFtZTsgDQotCXwgJXZhci5xbmFtZTsgDQotCXwgJWNpdGUucW5hbWU7IA0KLSAgICAgCXwgJWFiYnIucW5hbWU7IA0KLQl8ICVhY3JvbnltLnFuYW1lOyANCi0JfCAlcS5xbmFtZTsiPg0KLTwhRU5USVRZICUgSW5sUHJlcy5jbGFzcyAifCAlaS5xbmFtZTsgDQotCXwgJWIucW5hbWU7IA0KLQl8ICViaWcucW5hbWU7IA0KLQl8ICVzbWFsbC5xbmFtZTsNCi0JfCAldS5xbmFtZTsiPg0KLTwhRU5USVRZICUgSTE4bi5jbGFzcyAiIj4NCi08IUVOVElUWSAlIEFuY2hvci5jbGFzcyAifCAlYS5xbmFtZTsgDQotCXwgJWFuY2hvci5xbmFtZTsgfCAlZG8ucW5hbWU7Ij4NCi08IUVOVElUWSAlIElubFNwZWNpYWwuY2xhc3MgInwgJWltZy5xbmFtZTsgDQotCSB8ICVvYmplY3QucW5hbWU7IA0KLQl8ICVnZXR2YXIucW5hbWU7Ij4NCi08IUVOVElUWSAlIElubEZvcm0uY2xhc3MgInwgJWlucHV0LnFuYW1lOyANCi0JIHwgJXNlbGVjdC5xbmFtZTsgDQotCSB8ICV0ZXh0YXJlYS5xbmFtZTsNCi0gICAgICAgICB8ICVsYWJlbC5xbmFtZTsiPg0KLTwhRU5USVRZICUgSW5saW5lLmV4dHJhICIiPg0KLTwhRU5USVRZICUgSW5saW5lLmNsYXNzICIlSW5sU3RydWN0LmNsYXNzOw0KLSAgICAgICVJbmxQaHJhcy5jbGFzczsNCi0gICAgICAlSW5sUHJlcy5jbGFzczsNCi0gICAgICAlQW5jaG9yLmNsYXNzOw0KLSAgICAgICVJbmxTcGVjaWFsLmNsYXNzOw0KLSAgICAgICVJbmxGb3JtLmNsYXNzOw0KLSAgICAgICVJbmxpbmUuZXh0cmE7Ij4NCi08IUVOVElUWSAlIElubE5vQW5jaG9yLmNsYXNzICIlSW5sU3RydWN0LmNsYXNzOw0KLSAgICAgICVJbmxQaHJhcy5jbGFzczsNCi0gICAgICAlSW5sUHJlcy5jbGFzczsNCi0gICAgICAlSW5sU3BlY2lhbC5jbGFzczsNCi0gICAgICAlSW5sRm9ybS5jbGFzczsNCi0gICAgICAlSW5saW5lLmV4dHJhOyI+DQotPCFFTlRJVFkgJSBJbmxOb0FuY2hvci5taXggIiVJbmxOb0FuY2hvci5jbGFzczsNCi0gICAgICAlTWlzYy5jbGFzczsiPg0KLTwhRU5USVRZICUgSW5saW5lLm1peCAiJUlubGluZS5jbGFzczsNCi0gICAgICAlTWlzYy5jbGFzczsiPg0KLTwhLS0gDQotCUJsb2NrIEVsZW1lbnRzICANCi0tLT4NCi08IUVOVElUWSAlIEhlYWRpbmcuY2xhc3MgIiVoMS5xbmFtZTsgDQotCXwgJWgyLnFuYW1lOyANCi0JfCAlaDMucW5hbWU7IA0KLQl8ICVoNC5xbmFtZTsgDQotCXwgJWg1LnFuYW1lOyANCi0JfCAlaDYucW5hbWU7Ij4NCi08IUVOVElUWSAlIExpc3QuY2xhc3MgIiV1bC5xbmFtZTsgDQotCXwgJW9sLnFuYW1lOyANCi0JfCAlZGwucW5hbWU7Ij4NCi08IUVOVElUWSAlIFRhYmxlLmNsYXNzICJ8ICV0YWJsZS5xbmFtZTsiPg0KLTwhRU5USVRZICUgRm9ybS5jbGFzcyAifCAlZm9ybS5xbmFtZTsiPg0KLTwhRU5USVRZICUgRmllbGRzZXQuY2xhc3MgInwgJWZpZWxkc2V0LnFuYW1lOyI+DQotPCFFTlRJVFkgJSBCbGtTdHJ1Y3QuY2xhc3MgIiVwLnFuYW1lOyANCi0JfCAlZGl2LnFuYW1lOyI+DQotPCFFTlRJVFkgJSBCbGtQaHJhcy5jbGFzcyAifCAlcHJlLnFuYW1lOyANCi0JIHwgJWJsb2NrcXVvdGUucW5hbWU7IA0KLQkgfCAlYWRkcmVzcy5xbmFtZTsiPg0KLTwhRU5USVRZICUgQmxrUHJlcy5jbGFzcyAifCAlaHIucW5hbWU7Ij4NCi08IUVOVElUWSAlIEJsa1NwZWNpYWwuY2xhc3MgIiVUYWJsZS5jbGFzczsNCi0gICAgICAlRm9ybS5jbGFzczsNCi0gICAgICAlRmllbGRzZXQuY2xhc3M7Ij4NCi08IUVOVElUWSAlIEJsb2NrLmV4dHJhICIiPg0KLTwhRU5USVRZICUgQmxvY2suY2xhc3MgIiVCbGtTdHJ1Y3QuY2xhc3M7DQotICAgICAgJUJsa1BocmFzLmNsYXNzOw0KLQkgJUJsa1ByZXMuY2xhc3M7DQotICAgICAgJUJsa1NwZWNpYWwuY2xhc3M7DQotICAgICAgJUJsb2NrLmV4dHJhOyI+DQotPCFFTlRJVFkgJSBCbG9jay5taXggIiVIZWFkaW5nLmNsYXNzOw0KLSAgICAgIHwgJUxpc3QuY2xhc3M7DQotICAgICAgfCAlQmxvY2suY2xhc3M7ICAgICANCi0gICAgICB8ICVEby5jbGFzczsNCi0gICAgICAlTWlzYy5jbGFzczsiPg0KLTwhRU5USVRZICUgQmxrTm9Gb3JtLm1peCAiJUhlYWRpbmcuY2xhc3M7DQotICAgICAgfCAlTGlzdC5jbGFzczsNCi0gICAgICB8ICVCbGtTdHJ1Y3QuY2xhc3M7DQotICAgICAgJUJsa1BocmFzLmNsYXNzOw0KLSAgICAgICVCbGtQcmVzLmNsYXNzOw0KLSAgICAgIHwgJXRhYmxlLnFuYW1lOw0KLSAgICAgICVCbG9jay5leHRyYTsNCi0gICAgICAlTWlzYy5jbGFzczsiPg0KLTwhLS0gDQotCUFsbCBDb250ZW50IEVsZW1lbnRzICANCi0tLT4NCi08IS0tIA0KLQlkZWNsYXJlcyBhbGwgY29udGVudCBleGNlcHQgdGFibGVzDQotLS0+DQotPCFFTlRJVFkgJSBGbG93Tm9UYWJsZS5taXggIiVIZWFkaW5nLmNsYXNzOw0KLSAgICAgIHwgJUxpc3QuY2xhc3M7DQotICAgICAgfCAlQmxrU3RydWN0LmNsYXNzOw0KLSAgICAgICVCbGtQaHJhcy5jbGFzczsNCi0gICAgICAlRm9ybS5jbGFzczsNCi0gICAgICAlQmxvY2suZXh0cmE7DQotICAgICAgfCAlSW5saW5lLmNsYXNzOw0KLSAgICAgICVNaXNjLmNsYXNzOyI+DQotPCFFTlRJVFkgJSBGbG93Lm1peCAiJUhlYWRpbmcuY2xhc3M7DQotICAgICAgfCAlTGlzdC5jbGFzczsNCi0gICAgICB8ICVCbG9jay5jbGFzczsNCi0gICAgICB8ICVJbmxpbmUuY2xhc3M7DQotICAgICAgJU1pc2MuY2xhc3M7Ij4NCi08IS0tIAkNCi0JVGVtcGxhdGUgbGV2ZWwgZWxlbWVudHMgDQotLS0+DQotPCFFTlRJVFkgJSBUZW1wbGF0ZS5taXggIiggJW9uZXZlbnQucW5hbWU7KSoiPg0KLTwhLS0gDQotCUNvbnRlbnQgbW9kZWwgb2YgdGhlIFdNTCBjYXJkIGFuZCBYSFRNTCBib2R5IGVsZW1lbnRzDQotLS0+DQotPCFFTlRJVFkgJSBDYXJkQm9keS5taXggIiglb25ldmVudC5xbmFtZTsqLCAldGltZXIucW5hbWU7PywgICggJUJsb2NrLm1peDsgKSspIj4NCi08IS0tIGVuZCBvZiB3bWwyMC1tb2RlbC0xLm1vZCAtLT4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC93bWwyMC5kdGQgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC93bWwyMC5kdGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkNmY4ZDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAvd21sMjAuZHRkCisrKyAvZGV2L251bGwKQEAgLTEsMTU0ICswLDAgQEAKLTwhLS0gV01MIDIuMCBEVEQgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHdtbDIwLmR0ZCAtLT4NCi08IS0tIA0KLSAgICBAV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0sIEx0ZC4gMjAwMS4NCi0NCi0JVGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlIGFyZSBhdmFpbGFibGUgZnJvbSB0aGUgV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiANCi0JV2ViIHNpdGUgKGh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL3doYXQvY29weXJpZ2h0Lmh0bSkuDQotLS0+DQotPCEtLQ0KLQlUaGlzIGlzIHRoZSBXTUwgMi4wIERURCBkcml2ZXIgZmlsZS4gUGxlYXNlIHVzZSB0aGlzIGZvcm1hbCBwdWJsaWMgaWRlbnRpZmllciB0byBpZGVudGlmeSBpdDoNCi0NCi0gICAgICAgICAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMi4wLy9FTiINCi0gICAgICAgICAgICAgICAgICAgCSAgICAgICAgICANCi0gICAgIEZvciBleGFtcGxlLCBpZiB5b3UgYXJlIHVzaW5nIFdNTCAyLjAgZGlyZWN0bHksIHVzZQ0KLSAgICAgdGhlIEZQSSBpbiB0aGUgRE9DVFlQRSBkZWNsYXJhdGlvbiwgd2l0aCB0aGUgeG1sbnMgYXR0cmlidXRlDQotICAgICBvbiB0aGUgZG9jdW1lbnQgZWxlbWVudCB0byBpZGVudGlmeSB0aGUgZGVmYXVsdCBuYW1lc3BhY2U6DQotDQotICAgICAgICAgPD94bWwgdmVyc2lvbj0iMS4wIj8+DQotICAgICAgICAgPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdNTCAyLjAvL0VOIg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvZHRkL3dtbDIwLmR0ZCIgPg0KLSAgICAgICAgIDxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIg0KLSAgICAgICAgICAgICAgICAgICB4bWxuczp3bWw9Imh0dHA6Ly93d3cud2FwZm9ydW0ub3JnLzIwMDEvd21sIj4NCi0gICAgICAgICAuLi4NCi0gICAgICAgICA8L2h0bWw+DQotDQotLS0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tDQotCQlWZXJzaW9uLCBYTUwgTmFtZXNwYWNlcywgYW5kIHByb2ZpbGUgaW5mb3JtYXRpb24gDQotLS0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tDQotCVZhbHVlIG9mIFhIVE1MIHZlcnNpb24gYXR0cmlidXRlIA0KLS0tPg0KLTwhRU5USVRZICUgWEhUTUwudmVyc2lvbiAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMi4wLy9FTiI+DQotPCEtLSANCi0JVmFsdWUgb2YgWEhUTUwgcHJvZmlsZSBhdHRyaWJ1dGUNCi0JDQotCVJlc2VydmVkIGZvciBmdXR1cmUgdXNlIHdpdGggZG9jdW1lbnQgcHJvZmlsZXMgDQotLS0+DQotPCFFTlRJVFkgJSBYSFRNTC5wcm9maWxlICIiPg0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLQ0KLQkJTW9kdWxhcmlzYXRpb24gZnJhbWV3b3JrIHNldHVwDQotLS0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IUVOVElUWSAlIHdtbC1mcmFtZXdvcmsubW9kIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0VOVElUSUVTIFdNTCBNb2R1bGFyIEZyYW1ld29yayAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sLWZyYW1ld29yay0xLm1vZCI+DQotJXdtbC1mcmFtZXdvcmsubW9kOw0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLQ0KLQkJWEhUTUwgbW9kdWxlcyANCi0tLT4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLTwhLS0gVGV4dCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgcHJlLmNvbnRlbnQgIiggI1BDREFUQQ0KLSAgICAgIHwgJUlubFN0cnVjdC5jbGFzczsgfCAlaS5xbmFtZTsgfCAlYi5xbmFtZTsgDQotICAgICAgJUlubFBocmFzLmNsYXNzOw0KLSAgICAgICVBbmNob3IuY2xhc3M7DQotICAgICAgJUlubGluZS5leHRyYTsgDQotCXwgJWdldHZhci5xbmFtZTsNCi0JfCAlaW5wdXQucW5hbWU7fCAlc2VsZWN0LnFuYW1lOykqIj4NCi08IUVOVElUWSAlIHAuY29udGVudCAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7IHwgJXRhYmxlLnFuYW1lOyB8ICVmaWVsZHNldC5xbmFtZTspKiI+DQotPCFFTlRJVFkgJSB4aHRtbC10ZXh0Lm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgVGV4dCAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtdGV4dC0xLm1vZCI+DQotJXhodG1sLXRleHQubW9kOw0KLTwhRU5USVRZICUgeGh0bWwtaHlwZXJ0ZXh0Lm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgSHlwZXJ0ZXh0IDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1oeXBlcnRleHQtMS5tb2QiPg0KLSV4aHRtbC1oeXBlcnRleHQubW9kOw0KLTwhLS0gTGlzdCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtbGlzdC5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIExpc3RzIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1saXN0LTEubW9kIj4NCi0leGh0bWwtbGlzdC5tb2Q7DQotPCEtLSBFeHRlbmQgbGlzdHMgd2l0aCB2YWx1ZSBhbmQgc3RhcnQgYXR0cmlidXRlcyAtLT4gDQotPCFBVFRMSVNUICVsaS5xbmFtZTsNCi0gICAgICB2YWx1ZSAgICAgICAgJU51bWJlci5kYXRhdHlwZTsgICAgICAgICAjSU1QTElFRA0KLT4NCi08IUFUVExJU1QgJW9sLnFuYW1lOw0KLSAgICAgIHN0YXJ0ICAgICAgICAlTnVtYmVyLmRhdGF0eXBlOyAgICAgICAgI0lNUExJRUQNCi0+DQotPCEtLSBJbWFnZSBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtaW1hZ2UubW9kIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBJbWFnZXMgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWltYWdlLTEubW9kIj4NCi0leGh0bWwtaW1hZ2UubW9kOw0KLTwhLS0gUGFyYW0gRWxlbWVudCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLXBhcmFtLm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgUGFyYW0gRWxlbWVudCAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtcGFyYW0tMS5tb2QiPg0KLSV4aHRtbC1wYXJhbS5tb2Q7DQotPCEtLSBFbWJlZGRlZCBPYmplY3QgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtb2JqZWN0Lm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgRW1iZWRkZWQgT2JqZWN0IDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1vYmplY3QtMS5tb2QiPg0KLSV4aHRtbC1vYmplY3QubW9kOw0KLTwhLS0gVGFibGVzIE1vZHVsZSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLXRhYmxlLm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgQmFzaWMgVGFibGVzIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1iYXNpYy10YWJsZS0xLm1vZCI+DQotJXhodG1sLXRhYmxlLm1vZDsNCi08IS0tIEZvcm1zIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTEVNRU5UICVvcHRncm91cC5xbmFtZTsgKCVvcHRpb24ucW5hbWU7KSs+DQotPCFBVFRMSVNUICVvcHRncm91cC5xbmFtZTsNCi0JJUNvbW1vbi5hdHRyaWI7IAkNCi0JbGFiZWwgJVRleHQuZGF0YXR5cGU7ICNSRVFVSVJFRA0KLT4NCi08IUVOVElUWSAlIG9wdGlvbi5jb250ZW50ICIoICNQQ0RBVEEgfCAlb25ldmVudC5xbmFtZTt8ICVnZXR2YXIucW5hbWU7KSoiPg0KLTwhRU5USVRZICUgc2VsZWN0LmNvbnRlbnQgIiggJW9wdGdyb3VwLnFuYW1lOyB8ICVvcHRpb24ucW5hbWU7ICkrIj4NCi08IUVMRU1FTlQgJWZpZWxkc2V0LnFuYW1lOyAoI1BDREFUQSB8ICVGbG93Lm1peDspKj4NCi08IUFUVExJU1QgJWZpZWxkc2V0LnFuYW1lOw0KLQklQ29tbW9uLmF0dHJpYjsgDQotPg0KLTwhRU5USVRZICUgdGV4dGFyZWEuY29udGVudCAiKCAjUENEQVRBIHwgJWdldHZhci5xbmFtZTsgKSoiPg0KLTwhRU5USVRZICUgZm9ybS5jb250ZW50ICIoICVCbGtOb0Zvcm0ubWl4Ow0KLSAgICAgIHwgJWZpZWxkc2V0LnFuYW1lOyApKyI+DQotPCFFTlRJVFkgJSB4aHRtbC1iYXNpYy1mb3JtLm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgQmFzaWMgRm9ybXMgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWJhc2ljLWZvcm0tMS5tb2QiPg0KLSV4aHRtbC1iYXNpYy1mb3JtLm1vZDsNCi08IS0tIExpbmsgRWxlbWVudCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1saW5rLm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgTGluayBFbGVtZW50IDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1saW5rLTEubW9kIj4NCi0leGh0bWwtbGluay5tb2Q7DQotPCEtLSBEb2N1bWVudCBNZXRhaW5mb3JtYXRpb24gTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtbWV0YS5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIE1ldGFpbmZvcm1hdGlvbiAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtbWV0YS0xLm1vZCI+DQotJXhodG1sLW1ldGEubW9kOw0KLTwhLS0gQmFzZSBFbGVtZW50IE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLWJhc2UubW9kIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBCYXNlIEVsZW1lbnQgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWJhc2UtMS5tb2QiPg0KLSV4aHRtbC1iYXNlLm1vZDsNCi08IS0tIFN0eWxlc2hlZXRzIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1zdHlsZS5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIFN0eWxlIFNoZWV0cyAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtc3R5bGUtMS5tb2QiPg0KLSV4aHRtbC1zdHlsZS5tb2Q7DQotPCEtLSBEb2N1bWVudCBTdHJ1Y3R1cmUgTW9kdWxlIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgaHRtbC5jb250ZW50ICIoICVoZWFkLnFuYW1lOywgJVRlbXBsYXRlLm1peDssICglYm9keS5xbmFtZTsgfCAoJWNhcmQucW5hbWU7KykpKSI+DQotPCFFTlRJVFkgJSBib2R5LmNvbnRlbnQgIiglQ2FyZEJvZHkubWl4OykiPg0KLTwhRU5USVRZICUgeGh0bWwtc3RydWN0Lm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgRG9jdW1lbnQgU3RydWN0dXJlIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1zdHJ1Y3QtMS5tb2QiPg0KLSV4aHRtbC1zdHJ1Y3QubW9kOw0KLTwhLS0gQmxvY2sgUHJlc2VudGF0aW9uIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1ibGtwcmVzLm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgQmxvY2sgUHJlc2VudGF0aW9uIDEuMC8vRU4iDQotIAkJImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1ibGtwcmVzLTEubW9kIj4NCi0leGh0bWwtYmxrcHJlcy5tb2Q7DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tDQotCQlXTUwgRGVjbGFyYXRpb25zDQotLS0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tIFNwZWNpYWwgV01MIGVsZW1lbnRzLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHdtbC1zcGVjaWFsLm1vZCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9FTEVNRU5UUyBXTUwgU3BlY2lhbCAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sLXNwZWNpYWwtMS5tb2QiPg0KLSV3bWwtc3BlY2lhbC5tb2Q7DQotPCEtLSBEZXByZWNhdGVkIFdNTCBlbGVtZW50cy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB3bWwtZGVwcmVjYXRlZC5tb2QgUFVCTElDICItLy9XQVBGT1JVTS8vRUxFTUVOVFMgV01MIERlcHJlY2F0ZWQgMS4wLy9FTiINCi0gICAgICAgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWwtZGVwcmVjYXRlZC0xLm1vZCI+DQotJXdtbC1kZXByZWNhdGVkLm1vZDsNCi08IS0tIGVuZCBvZiBXTUwgMi4wIERURCAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC93dGEtd21sMTIuZHRkIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAvd3RhLXdtbDEyLmR0ZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDYwZjdkZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC93dGEtd21sMTIuZHRkCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotPCEtLQ0KLVdpcmVsZXNzIFRlbGVwaG9ueSBBcHBsaWNhdGlvbnMgV2lyZWxlc3MgTWFya3VwIExhbmd1YWdlIChXVEEtV01MKSBEb2N1bWVudCBUeXBlIERlZmluaXRpb24uDQotV1RBLVdNTCBpcyBhbiBYTUwgbGFuZ3VhZ2UuIFR5cGljYWwgdXNhZ2U6DQotPD94bWwgdmVyc2lvbj0iMS4wIj8+DQotPCFET0NUWVBFIHd0YS13bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdUQS1XTUwgMS4yLy9FTiINCi0JImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93dGEtd21sMTIuZHRkIj4NCi08d3RhLXdtbD4NCi0uLi4NCi08L3d0YS13bWw+DQotLS0+DQotDQotPCFFTlRJVFkgJSB3bWwtZHRkIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4yLy9FTiINCi0JImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWwxMi5kdGQiPg0KLQ0KLSV3bWwtZHRkOw0KLQ0KLTwhRUxFTUVOVCB3dGEtd21sICggaGVhZD8sIHRlbXBsYXRlPywgY2FyZCsgKT4NCi08IUFUVExJU1Qgd3RhLXdtbA0KLQl4bWw6bGFuZwkJTk1UT0tFTgkjSU1QTElFRA0KLQklY29yZWF0dHJzOw0KLT4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC94aHRtbC1tb2JpbGUxMC1mbGF0LmR0ZCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMi0wL3hodG1sLW1vYmlsZTEwLWZsYXQuZHRkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTNlNzNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMi0wL3hodG1sLW1vYmlsZTEwLWZsYXQuZHRkCisrKyAvZGV2L251bGwKQEAgLTEsMzIxNiArMCwwIEBACi08IS0tIFhIVE1MIE1vYmlsZSAxLjAgRFREICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1tb2JpbGUxMC5kdGQgLS0+DQotPCEtLSANCi0gICAgIFRoaXMgaXMgWEhUTUwgTW9iaWxlIHByb2ZpbGUsIGEgcHJvcGVyIHN1YnNldCBvZiBYSFRNTC4NCi0gICAgIA0KLSAgICAgCUBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSwgTHRkLiAyMDAxLg0KLQ0KLQlUZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UgYXJlIGF2YWlsYWJsZSBmcm9tIHRoZSBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSBMdGQuIA0KLQlXZWIgc2l0ZSAoaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvd2hhdC9jb3B5cmlnaHQuaHRtKS4NCi0gICAgDQotLS0+DQotPCEtLSBUaGlzIGlzIHRoZSBkcml2ZXIgZmlsZSBmb3IgdmVyc2lvbiAxLjAgb2YgdGhlIFhIVE1MIE1vYmlsZSBEVEQuDQotDQotICAgICBUaGlzIERURCBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgIFBVQkxJQzogIi0vL1dBUEZPUlVNLy9EVEQgWEhUTUwgTW9iaWxlIDEuMC8vRU4iDQotICAgICBTWVNURU06ICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQveGh0bWwtbW9iaWxlMTAuZHRkIg0KLS0tPg0KLTwhRU5USVRZICUgWEhUTUwudmVyc2lvbiAgIi0vL1dBUEZPUlVNLy9EVEQgWEhUTUwgTW9iaWxlIDEuMC8vRU4iID4NCi0NCi08IS0tIFVzZSB0aGlzIFVSSSB0byBpZGVudGlmeSB0aGUgZGVmYXVsdCBuYW1lc3BhY2U6DQotDQotICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiDQotDQotICAgICBTZWUgdGhlIFF1YWxpZmllZCBOYW1lcyBtb2R1bGUgZm9yIGluZm9ybWF0aW9uDQotICAgICBvbiB0aGUgdXNlIG9mIG5hbWVzcGFjZSBwcmVmaXhlcyBpbiB0aGUgRFRELg0KLS0tPg0KLTwhRU5USVRZICUgTlMucHJlZml4ZWQgIklHTk9SRSIgPg0KLTwhRU5USVRZICUgWEhUTUwucHJlZml4ICAiIiA+DQotDQotPCEtLSBGb3IgZXhhbXBsZSwgaWYgeW91IGFyZSB1c2luZyBYSFRNTCBNb2JpbGUgMS4wIGRpcmVjdGx5LCB1c2UNCi0gICAgIHRoZSBGUEkgaW4gdGhlIERPQ1RZUEUgZGVjbGFyYXRpb24sIHdpdGggdGhlIHhtbG5zIGF0dHJpYnV0ZQ0KLSAgICAgb24gdGhlIGRvY3VtZW50IGVsZW1lbnQgdG8gaWRlbnRpZnkgdGhlIGRlZmF1bHQgbmFtZXNwYWNlOg0KLQ0KLSAgICAgICAgIDw/eG1sIHZlcnNpb249IjEuMCI/Pg0KLSAgICAgICAgIDwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBYSFRNTCBNb2JpbGUgMS4wLy9FTiINCi0gICAgICAgICAgICAgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC94aHRtbC1tb2JpbGUxMC5kdGQiID4NCi0gICAgICAgICA8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCINCi0gICAgICAgICAgICAgICB4bWw6bGFuZz0iZW4iID4NCi0gICAgICAgICAuLi4NCi0gICAgICAgICA8L2h0bWw+DQotLS0+DQotDQotPCEtLSByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSB3aXRoIGRvY3VtZW50IHByb2ZpbGVzIC0tPg0KLTwhRU5USVRZICUgWEhUTUwucHJvZmlsZSAgIiIgPg0KLQ0KLTwhLS0gSW5saW5lIFN0eWxlIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLWlubHN0eWxlLm1vZA0KLSAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIElubGluZSBTdHlsZSAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtaW5sc3R5bGUtMS5tb2QiID4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBJbmxpbmUgU3R5bGUgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtaW5sc3R5bGUtMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwsIGEgcmVmb3JtdWxhdGlvbiBvZiBIVE1MIGFzIGEgbW9kdWxhciBYTUwgYXBwbGljYXRpb24uDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB4aHRtbC1tb2JpbGUxMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU3IHBhdmVyeSBFeHAgJA0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRU5USVRJRVMgWEhUTUwgSW5saW5lIFN0eWxlIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWlubHN0eWxlLTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIElubGluZSBTdHlsZQ0KLQ0KLSAgICAgVGhpcyBtb2R1bGUgZGVjbGFyZXMgdGhlICdzdHlsZScgYXR0cmlidXRlLCB1c2VkIHRvIHN1cHBvcnQgaW5saW5lDQotICAgICBzdHlsZSBtYXJrdXAuIFRoaXMgbW9kdWxlIG11c3QgYmUgaW5zdGFudGlhdGVkIHByaW9yIHRvIHRoZSBYSFRNTA0KLSAgICAgQ29tbW9uIEF0dHJpYnV0ZXMgbW9kdWxlIGluIG9yZGVyIHRvIGJlIGluY2x1ZGVkIGluICVDb3JlLmF0dHJpYjsuDQotLS0+DQotDQotPCFFTlRJVFkgJSBzdHlsZS5hdHRyaWINCi0gICAgICJzdHlsZSAgICAgICAgQ0RBVEEgICAgICAgICAgICAgICAgICAgICNJTVBMSUVEIg0KLT4NCi0NCi0NCi08IUVOVElUWSAlIENvcmUuZXh0cmEuYXR0cmliDQotICAgICAiJXN0eWxlLmF0dHJpYjsiDQotPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLWlubHN0eWxlLTEubW9kIC0tPg0KLQ0KLQ0KLTwhLS0gRG9jdW1lbnQgTW9kZWwgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLW1vZGVsLm1vZA0KLSAgICAgUFVCTElDICItLy9XQVBGT1JVTS8vRU5USVRJRVMgWEhUTUwgTW9iaWxlIDEuMCBEb2N1bWVudCBNb2RlbCAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQveGh0bWwtbW9iaWxlMTAtbW9kZWwtMS5tb2QiID4NCi0NCi08IS0tIFhIVE1MIEZyYW1ld29yayAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgWEhUTUwuYmlkaSAgIklHTk9SRSIgPg0KLTwhRU5USVRZICUgeGh0bWwtZnJhbWV3b3JrLm1vZA0KLSAgICAgUFVCTElDICItLy9XM0MvL0VOVElUSUVTIFhIVE1MIE1vZHVsYXIgRnJhbWV3b3JrIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1mcmFtZXdvcmstMS5tb2QiID4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBNb2R1bGFyIEZyYW1ld29yayBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtZnJhbWV3b3JrLTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MLCBhIHJlZm9ybXVsYXRpb24gb2YgSFRNTCBhcyBhIG1vZHVsYXIgWE1MIGFwcGxpY2F0aW9uLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUmV2aXNpb246ICRJZDogeGh0bWwtbW9iaWxlMTAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1NyBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTlRJVElFUyBYSFRNTCBNb2R1bGFyIEZyYW1ld29yayAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1mcmFtZXdvcmstMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotICAgICAobm9uZSkNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gTW9kdWxhciBGcmFtZXdvcmsNCi0NCi0gICAgIFRoaXMgcmVxdWlyZWQgbW9kdWxlIGluc3RhbnRpYXRlcyB0aGUgbW9kdWxlcyBuZWVkZWQNCi0gICAgIHRvIHN1cHBvcnQgdGhlIFhIVE1MIG1vZHVsYXJpemF0aW9uIG1vZGVsLCBpbmNsdWRpbmc6DQotDQotICAgICAgICArICBub3RhdGlvbnMNCi0gICAgICAgICsgIGRhdGF0eXBlcw0KLSAgICAgICAgKyAgbmFtZXNwYWNlLXF1YWxpZmllZCBuYW1lcw0KLSAgICAgICAgKyAgY29tbW9uIGF0dHJpYnV0ZXMNCi0gICAgICAgICsgIGRvY3VtZW50IG1vZGVsDQotICAgICAgICArICBjaGFyYWN0ZXIgZW50aXRpZXMNCi0NCi0gICAgIFRoZSBJbnRyaW5zaWMgRXZlbnRzIG1vZHVsZSBpcyBpZ25vcmVkIGJ5IGRlZmF1bHQgYnV0DQotICAgICBvY2N1cnMgaW4gdGhpcyBtb2R1bGUgYmVjYXVzZSBpdCBtdXN0IGJlIGluc3RhbnRpYXRlZA0KLSAgICAgcHJpb3IgdG8gQXR0cmlidXRlcyBidXQgYWZ0ZXIgRGF0YXR5cGVzLg0KLS0tPg0KLQ0KLTwhRU5USVRZICUgeGh0bWwtYXJjaC5tb2R1bGUgIklHTk9SRSIgPg0KLTwhWyV4aHRtbC1hcmNoLm1vZHVsZTtbDQotPCFFTlRJVFkgJSB4aHRtbC1hcmNoLm1vZA0KLSAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEJhc2UgQXJjaGl0ZWN0dXJlIDEuMC8vRU4iDQotICAgICAgICAgICAgInhodG1sLWFyY2gtMS5tb2QiID4NCi0leGh0bWwtYXJjaC5tb2Q7XV0+DQotDQotPCFFTlRJVFkgJSB4aHRtbC1ub3RhdGlvbnMubW9kdWxlICJJTkNMVURFIiA+DQotPCFbJXhodG1sLW5vdGF0aW9ucy5tb2R1bGU7Ww0KLTwhRU5USVRZICUgeGh0bWwtbm90YXRpb25zLm1vZA0KLSAgICAgUFVCTElDICItLy9XM0MvL05PVEFUSU9OUyBYSFRNTCBOb3RhdGlvbnMgMS4wLy9FTiINCi0gICAgICAgICAgICAieGh0bWwtbm90YXRpb25zLTEubW9kIiA+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgTm90YXRpb25zIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLW5vdGF0aW9ucy0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCwgYSByZWZvcm11bGF0aW9uIG9mIEhUTUwgYXMgYSBtb2R1bGFyIFhNTCBhcHBsaWNhdGlvbi4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJldmlzaW9uOiAkSWQ6IHhodG1sLW1vYmlsZTEwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTcgcGF2ZXJ5IEV4cCAkDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9OT1RBVElPTlMgWEhUTUwgTm90YXRpb25zIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLW5vdGF0aW9ucy0xLm1vZCINCi0NCi0gICAgIFJldmlzaW9uczoNCi0gICAgIChub25lKQ0KLSAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBOb3RhdGlvbnMNCi0NCi0gICAgIGRlZmluZXMgdGhlIGZvbGxvd2luZyBub3RhdGlvbnMsIG1hbnkgb2YgdGhlc2UgaW1wb3J0ZWQgZnJvbQ0KLSAgICAgb3RoZXIgc3BlY2lmaWNhdGlvbnMgYW5kIHN0YW5kYXJkcy4gV2hlbiBhbiBleGlzdGluZyBGUEkgaXMNCi0gICAgIGtub3duLCBpdCBpcyBpbmNvcnBvcmF0ZWQgaGVyZS4NCi0tLT4NCi0NCi08IS0tIFhNTCBOb3RhdGlvbnMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFNHTUwgYW5kIFhNTCBOb3RhdGlvbnMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIFczQyBYTUwgMS4wIFJlY29tbWVuZGF0aW9uIC0tPg0KLTwhTk9UQVRJT04gdzNjLXhtbA0KLSAgICAgUFVCTElDICJJU08gODg3OS8vTk9UQVRJT04gRXh0ZW5zaWJsZSBNYXJrdXAgTGFuZ3VhZ2UgKFhNTCkgMS4wLy9FTiIgPg0KLQ0KLTwhLS0gWE1MIDEuMCBDREFUQSAtLT4NCi08IU5PVEFUSU9OIGNkYXRhDQotICAgICBQVUJMSUMgIi0vL1czQy8vTk9UQVRJT04gWE1MIDEuMDogQ0RBVEEvL0VOIiA+DQotDQotPCEtLSBTR01MIEZvcm1hbCBQdWJsaWMgSWRlbnRpZmllcnMgLS0+DQotPCFOT1RBVElPTiBmcGkNCi0gICAgIFBVQkxJQyAiSVNPIDg4Nzk6MTk4Ni8vTk9UQVRJT04gRm9ybWFsIFB1YmxpYyBJZGVudGlmaWVyLy9FTiIgPg0KLQ0KLTwhLS0gWEhUTUwgTm90YXRpb25zIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gTGVuZ3RoIGRlZmluZWQgZm9yIGNlbGxwYWRkaW5nL2NlbGxzcGFjaW5nIC0tPg0KLQ0KLTwhLS0gbm4gZm9yIHBpeGVscyBvciBubiUgZm9yIHBlcmNlbnRhZ2UgbGVuZ3RoIC0tPg0KLTwhTk9UQVRJT04gbGVuZ3RoDQotICAgIFBVQkxJQyAiLS8vVzNDLy9OT1RBVElPTiBYSFRNTCBEYXRhdHlwZTogTGVuZ3RoLy9FTiIgPg0KLQ0KLTwhLS0gc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgbGluayB0eXBlcyAtLT4NCi08IU5PVEFUSU9OIGxpbmtUeXBlcw0KLSAgICBQVUJMSUMgIi0vL1czQy8vTk9UQVRJT04gWEhUTUwgRGF0YXR5cGU6IExpbmtUeXBlcy8vRU4iID4NCi0NCi08IS0tIHNpbmdsZSBvciBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBtZWRpYSBkZXNjcmlwdG9ycyAtLT4NCi08IU5PVEFUSU9OIG1lZGlhRGVzYw0KLSAgICBQVUJMSUMgIi0vL1czQy8vTk9UQVRJT04gWEhUTUwgRGF0YXR5cGU6IE1lZGlhRGVzYy8vRU4iID4NCi0NCi08IS0tIHBpeGVsLCBwZXJjZW50YWdlLCBvciByZWxhdGl2ZSAtLT4NCi08IU5PVEFUSU9OIG11bHRpTGVuZ3RoDQotICAgIFBVQkxJQyAiLS8vVzNDLy9OT1RBVElPTiBYSFRNTCBEYXRhdHlwZTogTXVsdGlMZW5ndGgvL0VOIiA+DQotDQotPCEtLSBvbmUgb3IgbW9yZSBkaWdpdHMgKE5VTUJFUikgLS0+DQotPCFOT1RBVElPTiBudW1iZXINCi0gICAgUFVCTElDICItLy9XM0MvL05PVEFUSU9OIFhIVE1MIERhdGF0eXBlOiBOdW1iZXIvL0VOIiA+DQotDQotPCEtLSBpbnRlZ2VyIHJlcHJlc2VudGluZyBsZW5ndGggaW4gcGl4ZWxzIC0tPg0KLTwhTk9UQVRJT04gcGl4ZWxzDQotICAgIFBVQkxJQyAiLS8vVzNDLy9OT1RBVElPTiBYSFRNTCBEYXRhdHlwZTogUGl4ZWxzLy9FTiIgPg0KLQ0KLTwhLS0gc2NyaXB0IGV4cHJlc3Npb24gLS0+DQotPCFOT1RBVElPTiBzY3JpcHQNCi0gICAgUFVCTElDICItLy9XM0MvL05PVEFUSU9OIFhIVE1MIERhdGF0eXBlOiBTY3JpcHQvL0VOIiA+DQotDQotPCEtLSB0ZXh0dWFsIGNvbnRlbnQgLS0+DQotPCFOT1RBVElPTiB0ZXh0DQotICAgIFBVQkxJQyAiLS8vVzNDLy9OT1RBVElPTiBYSFRNTCBEYXRhdHlwZTogVGV4dC8vRU4iID4NCi0NCi08IS0tIEltcG9ydGVkIE5vdGF0aW9ucyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIGEgc2luZ2xlIGNoYXJhY3RlciBmcm9tIFtJU08xMDY0Nl0gLS0+DQotPCFOT1RBVElPTiBjaGFyYWN0ZXINCi0gICAgUFVCTElDICItLy9XM0MvL05PVEFUSU9OIFhIVE1MIERhdGF0eXBlOiBDaGFyYWN0ZXIvL0VOIiA+DQotDQotPCEtLSBhIGNoYXJhY3RlciBlbmNvZGluZywgYXMgcGVyIFtSRkMyMDQ1XSAtLT4NCi08IU5PVEFUSU9OIGNoYXJzZXQNCi0gICAgUFVCTElDICItLy9XM0MvL05PVEFUSU9OIFhIVE1MIERhdGF0eXBlOiBDaGFyc2V0Ly9FTiIgPg0KLQ0KLTwhLS0gYSBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBjaGFyYWN0ZXIgZW5jb2RpbmdzLCBhcyBwZXIgW1JGQzIwNDVdIC0tPg0KLTwhTk9UQVRJT04gY2hhcnNldHMNCi0gICAgUFVCTElDICItLy9XM0MvL05PVEFUSU9OIFhIVE1MIERhdGF0eXBlOiBDaGFyc2V0cy8vRU4iID4NCi0NCi08IS0tIG1lZGlhIHR5cGUsIGFzIHBlciBbUkZDMjA0NV0gLS0+DQotPCFOT1RBVElPTiBjb250ZW50VHlwZQ0KLSAgICBQVUJMSUMgIi0vL1czQy8vTk9UQVRJT04gWEhUTUwgRGF0YXR5cGU6IENvbnRlbnRUeXBlLy9FTiIgPg0KLQ0KLTwhLS0gY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgbWVkaWEgdHlwZXMsIGFzIHBlciBbUkZDMjA0NV0gLS0+DQotPCFOT1RBVElPTiBjb250ZW50VHlwZXMNCi0gICAgUFVCTElDICItLy9XM0MvL05PVEFUSU9OIFhIVE1MIERhdGF0eXBlOiBDb250ZW50VHlwZXMvL0VOIiA+DQotDQotPCEtLSBkYXRlIGFuZCB0aW1lIGluZm9ybWF0aW9uLiBJU08gZGF0ZSBmb3JtYXQgLS0+DQotPCFOT1RBVElPTiBkYXRldGltZQ0KLSAgICBQVUJMSUMgIi0vL1czQy8vTk9UQVRJT04gWEhUTUwgRGF0YXR5cGU6IERhdGV0aW1lLy9FTiIgPg0KLQ0KLTwhLS0gYSBsYW5ndWFnZSBjb2RlLCBhcyBwZXIgW1JGQzMwNjZdIC0tPg0KLTwhTk9UQVRJT04gbGFuZ3VhZ2VDb2RlDQotICAgIFBVQkxJQyAiLS8vVzNDLy9OT1RBVElPTiBYSFRNTCBEYXRhdHlwZTogTGFuZ3VhZ2VDb2RlLy9FTiIgPg0KLQ0KLTwhLS0gYSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIsIHNlZSBbVVJJXSAtLT4NCi08IU5PVEFUSU9OIHVyaQ0KLSAgICBQVUJMSUMgIi0vL1czQy8vTk9UQVRJT04gWEhUTUwgRGF0YXR5cGU6IFVSSS8vRU4iID4NCi0NCi08IS0tIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVycywgc2VlIFtVUkldIC0tPg0KLTwhTk9UQVRJT04gdXJpcw0KLSAgICBQVUJMSUMgIi0vL1czQy8vTk9UQVRJT04gWEhUTUwgRGF0YXR5cGU6IFVSSXMvL0VOIiA+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtbm90YXRpb25zLTEubW9kIC0tPg0KLV1dPg0KLQ0KLTwhRU5USVRZICUgeGh0bWwtZGF0YXR5cGVzLm1vZHVsZSAiSU5DTFVERSIgPg0KLTwhWyV4aHRtbC1kYXRhdHlwZXMubW9kdWxlO1sNCi08IUVOVElUWSAlIHhodG1sLWRhdGF0eXBlcy5tb2QNCi0gICAgIFBVQkxJQyAiLS8vVzNDLy9FTlRJVElFUyBYSFRNTCBEYXRhdHlwZXMgMS4wLy9FTiINCi0gICAgICAgICAgICAieGh0bWwtZGF0YXR5cGVzLTEubW9kIiA+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgRGF0YXR5cGVzIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLWRhdGF0eXBlcy0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCwgYSByZWZvcm11bGF0aW9uIG9mIEhUTUwgYXMgYSBtb2R1bGFyIFhNTCBhcHBsaWNhdGlvbi4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJldmlzaW9uOiAkSWQ6IHhodG1sLW1vYmlsZTEwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTcgcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRU5USVRJRVMgWEhUTUwgRGF0YXR5cGVzIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWRhdGF0eXBlcy0xLm1vZCINCi0NCi0gICAgIFJldmlzaW9uczoNCi0gICAgIChub25lKQ0KLSAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBEYXRhdHlwZXMNCi0NCi0gICAgIGRlZmluZXMgY29udGFpbmVycyBmb3IgdGhlIGZvbGxvd2luZyBkYXRhdHlwZXMsIG1hbnkgb2YNCi0gICAgIHRoZXNlIGltcG9ydGVkIGZyb20gb3RoZXIgc3BlY2lmaWNhdGlvbnMgYW5kIHN0YW5kYXJkcy4NCi0tLT4NCi0NCi08IS0tIExlbmd0aCBkZWZpbmVkIGZvciBjZWxscGFkZGluZy9jZWxsc3BhY2luZyAtLT4NCi0NCi08IS0tIG5uIGZvciBwaXhlbHMgb3Igbm4lIGZvciBwZXJjZW50YWdlIGxlbmd0aCAtLT4NCi08IUVOVElUWSAlIExlbmd0aC5kYXRhdHlwZSAiQ0RBVEEiID4NCi0NCi08IS0tIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIGxpbmsgdHlwZXMgLS0+DQotPCFFTlRJVFkgJSBMaW5rVHlwZXMuZGF0YXR5cGUgIk5NVE9LRU5TIiA+DQotDQotPCEtLSBzaW5nbGUgb3IgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgbWVkaWEgZGVzY3JpcHRvcnMgLS0+DQotPCFFTlRJVFkgJSBNZWRpYURlc2MuZGF0YXR5cGUgIkNEQVRBIiA+DQotDQotPCEtLSBwaXhlbCwgcGVyY2VudGFnZSwgb3IgcmVsYXRpdmUgLS0+DQotPCFFTlRJVFkgJSBNdWx0aUxlbmd0aC5kYXRhdHlwZSAiQ0RBVEEiID4NCi0NCi08IS0tIG9uZSBvciBtb3JlIGRpZ2l0cyAoTlVNQkVSKSAtLT4NCi08IUVOVElUWSAlIE51bWJlci5kYXRhdHlwZSAiQ0RBVEEiID4NCi0NCi08IS0tIGludGVnZXIgcmVwcmVzZW50aW5nIGxlbmd0aCBpbiBwaXhlbHMgLS0+DQotPCFFTlRJVFkgJSBQaXhlbHMuZGF0YXR5cGUgIkNEQVRBIiA+DQotDQotPCEtLSBzY3JpcHQgZXhwcmVzc2lvbiAtLT4NCi08IUVOVElUWSAlIFNjcmlwdC5kYXRhdHlwZSAiQ0RBVEEiID4NCi0NCi08IS0tIHRleHR1YWwgY29udGVudCAtLT4NCi08IUVOVElUWSAlIFRleHQuZGF0YXR5cGUgIkNEQVRBIiA+DQotDQotPCEtLSBJbXBvcnRlZCBEYXRhdHlwZXMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBhIHNpbmdsZSBjaGFyYWN0ZXIgZnJvbSBbSVNPMTA2NDZdIC0tPg0KLTwhRU5USVRZICUgQ2hhcmFjdGVyLmRhdGF0eXBlICJDREFUQSIgPg0KLQ0KLTwhLS0gYSBjaGFyYWN0ZXIgZW5jb2RpbmcsIGFzIHBlciBbUkZDMjA0NV0gLS0+DQotPCFFTlRJVFkgJSBDaGFyc2V0LmRhdGF0eXBlICJDREFUQSIgPg0KLQ0KLTwhLS0gYSBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBjaGFyYWN0ZXIgZW5jb2RpbmdzLCBhcyBwZXIgW1JGQzIwNDVdIC0tPg0KLTwhRU5USVRZICUgQ2hhcnNldHMuZGF0YXR5cGUgIkNEQVRBIiA+DQotDQotPCEtLSBDb2xvciBzcGVjaWZpY2F0aW9uIHVzaW5nIGNvbG9yIG5hbWUgb3Igc1JHQiAoI1JSR0dCQikgdmFsdWVzIC0tPg0KLTwhRU5USVRZICUgQ29sb3IuZGF0YXR5cGUgIkNEQVRBIiA+DQotDQotPCEtLSBtZWRpYSB0eXBlLCBhcyBwZXIgW1JGQzIwNDVdIC0tPg0KLTwhRU5USVRZICUgQ29udGVudFR5cGUuZGF0YXR5cGUgIkNEQVRBIiA+DQotDQotPCEtLSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBtZWRpYSB0eXBlcywgYXMgcGVyIFtSRkMyMDQ1XSAtLT4NCi08IUVOVElUWSAlIENvbnRlbnRUeXBlcy5kYXRhdHlwZSAiQ0RBVEEiID4NCi0NCi08IS0tIGRhdGUgYW5kIHRpbWUgaW5mb3JtYXRpb24uIElTTyBkYXRlIGZvcm1hdCAtLT4NCi08IUVOVElUWSAlIERhdGV0aW1lLmRhdGF0eXBlICJDREFUQSIgPg0KLQ0KLTwhLS0gZm9ybWFsIHB1YmxpYyBpZGVudGlmaWVyLCBhcyBwZXIgW0lTTzg4NzldIC0tPg0KLTwhRU5USVRZICUgRlBJLmRhdGF0eXBlICJDREFUQSIgPg0KLQ0KLTwhLS0gYSBsYW5ndWFnZSBjb2RlLCBhcyBwZXIgW1JGQzMwNjZdIC0tPg0KLTwhRU5USVRZICUgTGFuZ3VhZ2VDb2RlLmRhdGF0eXBlICJOTVRPS0VOIiA+DQotDQotPCEtLSBhIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciwgc2VlIFtVUkldIC0tPg0KLTwhRU5USVRZICUgVVJJLmRhdGF0eXBlICJDREFUQSIgPg0KLQ0KLTwhLS0gYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXJzLCBzZWUgW1VSSV0gLS0+DQotPCFFTlRJVFkgJSBVUklzLmRhdGF0eXBlICJDREFUQSIgPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLWRhdGF0eXBlcy0xLm1vZCAtLT4NCi1dXT4NCi0NCi08IS0tIHBsYWNlaG9sZGVyIGZvciBYTGluayBzdXBwb3J0IG1vZHVsZSAtLT4NCi08IUVOVElUWSAlIHhodG1sLXhsaW5rLm1vZCAiIiA+DQotDQotDQotPCFFTlRJVFkgJSB4aHRtbC1xbmFtZS5tb2R1bGUgIklOQ0xVREUiID4NCi08IVsleGh0bWwtcW5hbWUubW9kdWxlO1sNCi08IUVOVElUWSAlIHhodG1sLXFuYW1lLm1vZA0KLSAgICAgUFVCTElDICItLy9XM0MvL0VOVElUSUVTIFhIVE1MIFF1YWxpZmllZCBOYW1lcyAxLjAvL0VOIg0KLSAgICAgICAgICAgICJ4aHRtbC1xbmFtZS0xLm1vZCIgPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBRbmFtZSBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLXFuYW1lLTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MLCBhIHJlZm9ybXVsYXRpb24gb2YgSFRNTCBhcyBhIG1vZHVsYXIgWE1MIGFwcGxpY2F0aW9uLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUmV2aXNpb246ICRJZDogeGh0bWwtbW9iaWxlMTAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1NyBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTlRJVElFUyBYSFRNTCBRdWFsaWZpZWQgTmFtZXMgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtcW5hbWUtMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotIzIwMDAtMTAtMjI6IGFkZGVkIHFuYW1lIGRlY2xhcmF0aW9ucyBmb3IgcnVieSBlbGVtZW50cw0KLSAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBYSFRNTCBRbmFtZSAoUXVhbGlmaWVkIE5hbWUpIE1vZHVsZQ0KLQ0KLSAgICAgVGhpcyBtb2R1bGUgaXMgY29udGFpbmVkIGluIHR3byBwYXJ0cywgbGFiZWxlZCBTZWN0aW9uICdBJyBhbmQgJ0InOg0KLQ0KLSAgICAgICBTZWN0aW9uIEEgZGVjbGFyZXMgcGFyYW1ldGVyIGVudGl0aWVzIHRvIHN1cHBvcnQgbmFtZXNwYWNlLQ0KLSAgICAgICBxdWFsaWZpZWQgbmFtZXMsIG5hbWVzcGFjZSBkZWNsYXJhdGlvbnMsIGFuZCBuYW1lIHByZWZpeGluZw0KLSAgICAgICBmb3IgWEhUTUwgYW5kIGV4dGVuc2lvbnMuDQotDQotICAgICAgIFNlY3Rpb24gQiBkZWNsYXJlcyBwYXJhbWV0ZXIgZW50aXRpZXMgdXNlZCB0byBwcm92aWRlDQotICAgICAgIG5hbWVzcGFjZS1xdWFsaWZpZWQgbmFtZXMgZm9yIGFsbCBYSFRNTCBlbGVtZW50IHR5cGVzOg0KLQ0KLSAgICAgICAgICVhcHBsZXQucW5hbWU7ICAgdGhlIHhtbG5zLXF1YWxpZmllZCBuYW1lIGZvciA8YXBwbGV0Pg0KLSAgICAgICAgICViYXNlLnFuYW1lOyAgICAgdGhlIHhtbG5zLXF1YWxpZmllZCBuYW1lIGZvciA8YmFzZT4NCi0gICAgICAgICAuLi4NCi0NCi0gICAgIFhIVE1MIGV4dGVuc2lvbnMgd291bGQgY3JlYXRlIGEgbW9kdWxlIHNpbWlsYXIgdG8gdGhpcyBvbmUuDQotICAgICBJbmNsdWRlZCBpbiB0aGUgWEhUTUwgZGlzdHJpYnV0aW9uIGlzIGEgdGVtcGxhdGUgbW9kdWxlDQotICAgICAoJ3RlbXBsYXRlLXFuYW1lLTEubW9kJykgc3VpdGFibGUgZm9yIHRoaXMgcHVycG9zZS4NCi0tLT4NCi0NCi08IS0tIFNlY3Rpb24gQTogWEhUTUwgWE1MIE5hbWVzcGFjZSBGcmFtZXdvcmsgOjo6Ojo6Ojo6Ojo6Ojo6Ojo6OjogLS0+DQotDQotPCEtLSAxLiBEZWNsYXJlIGEgJVhIVE1MLnByZWZpeGVkOyBjb25kaXRpb25hbCBzZWN0aW9uIGtleXdvcmQsIHVzZWQNCi0gICAgICAgIHRvIGFjdGl2YXRlIG5hbWVzcGFjZSBwcmVmaXhpbmcuIFRoZSBkZWZhdWx0IHZhbHVlIHNob3VsZA0KLSAgICAgICAgaW5oZXJpdCAnJU5TLnByZWZpeGVkOycgZnJvbSB0aGUgRFREIGRyaXZlciwgc28gdGhhdCB1bmxlc3MNCi0gICAgICAgIG92ZXJyaWRkZW4sIHRoZSBkZWZhdWx0IGJlaGF2aW91ciBmb2xsb3dzIHRoZSBvdmVyYWxsIERURA0KLSAgICAgICAgcHJlZml4aW5nIHNjaGVtZS4NCi0tLT4NCi08IUVOVElUWSAlIE5TLnByZWZpeGVkICJJR05PUkUiID4NCi08IUVOVElUWSAlIFhIVE1MLnByZWZpeGVkICIlTlMucHJlZml4ZWQ7IiA+DQotDQotPCEtLSAyLiBEZWNsYXJlIGEgcGFyYW1ldGVyIGVudGl0eSAoZWcuLCAlWEhUTUwueG1sbnM7KSBjb250YWluaW5nDQotICAgICAgICB0aGUgVVJJIHJlZmVyZW5jZSB1c2VkIHRvIGlkZW50aWZ5IHRoZSBYSFRNTCBuYW1lc3BhY2U6DQotLS0+DQotPCFFTlRJVFkgJSBYSFRNTC54bWxucyAgImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiID4NCi0NCi08IS0tIDMuIERlY2xhcmUgcGFyYW1ldGVyIGVudGl0aWVzIChlZy4sICVYSFRNTC5wcmVmaXg7KSBjb250YWluaW5nDQotICAgICAgICB0aGUgZGVmYXVsdCBuYW1lc3BhY2UgcHJlZml4IHN0cmluZyhzKSB0byB1c2Ugd2hlbiBwcmVmaXhpbmcNCi0gICAgICAgIGlzIGVuYWJsZWQuIFRoaXMgbWF5IGJlIG92ZXJyaWRkZW4gaW4gdGhlIERURCBkcml2ZXIgb3IgdGhlDQotICAgICAgICBpbnRlcm5hbCBzdWJzZXQgb2YgYW4gZG9jdW1lbnQgaW5zdGFuY2UuIElmIG5vIGRlZmF1bHQgcHJlZml4DQotICAgICAgICBpcyBkZXNpcmVkLCB0aGlzIG1heSBiZSBkZWNsYXJlZCBhcyBhbiBlbXB0eSBzdHJpbmcuDQotDQotICAgICBOT1RFOiBBcyBzcGVjaWZpZWQgaW4gW1hNTE5BTUVTXSwgdGhlIG5hbWVzcGFjZSBwcmVmaXggc2VydmVzDQotICAgICBhcyBhIHByb3h5IGZvciB0aGUgVVJJIHJlZmVyZW5jZSwgYW5kIGlzIG5vdCBpbiBpdHNlbGYgc2lnbmlmaWNhbnQuDQotLS0+DQotPCFFTlRJVFkgJSBYSFRNTC5wcmVmaXggICIiID4NCi0NCi08IS0tIDQuIERlY2xhcmUgcGFyYW1ldGVyIGVudGl0aWVzIChlZy4sICVYSFRNTC5wZng7KSBjb250YWluaW5nIHRoZQ0KLSAgICAgICAgY29sb25pemVkIHByZWZpeChlcykgKGVnLiwgJyVYSFRNTC5wcmVmaXg7OicpIHVzZWQgd2hlbg0KLSAgICAgICAgcHJlZml4aW5nIGlzIGFjdGl2ZSwgYW4gZW1wdHkgc3RyaW5nIHdoZW4gaXQgaXMgbm90Lg0KLS0tPg0KLTwhWyVYSFRNTC5wcmVmaXhlZDtbDQotPCFFTlRJVFkgJSBYSFRNTC5wZnggICIlWEhUTUwucHJlZml4OzoiID4NCi1dXT4NCi08IUVOVElUWSAlIFhIVE1MLnBmeCAgIiIgPg0KLQ0KLTwhLS0gZGVjbGFyZSBxdWFsaWZpZWQgbmFtZSBleHRlbnNpb25zIGhlcmUgLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtcW5hbWUtZXh0cmEubW9kICIiID4NCi0NCi0NCi08IS0tIDUuIFRoZSBwYXJhbWV0ZXIgZW50aXR5ICVYSFRNTC54bWxucy5leHRyYS5hdHRyaWI7IG1heSBiZQ0KLSAgICAgICAgcmVkZWNsYXJlZCB0byBjb250YWluIGFueSBub24tWEhUTUwgbmFtZXNwYWNlIGRlY2xhcmF0aW9uDQotICAgICAgICBhdHRyaWJ1dGVzIGZvciBuYW1lc3BhY2VzIGVtYmVkZGVkIGluIFhIVE1MLiBUaGUgZGVmYXVsdA0KLSAgICAgICAgaXMgYW4gZW1wdHkgc3RyaW5nLiAgWExpbmsgc2hvdWxkIGJlIGluY2x1ZGVkIGhlcmUgaWYgdXNlZA0KLSAgICAgICAgaW4gdGhlIERURC4NCi0tLT4NCi08IUVOVElUWSAlIFhIVE1MLnhtbG5zLmV4dHJhLmF0dHJpYiAiIiA+DQotDQotPCEtLSBUaGUgcmVtYWluZGVyIG9mIFNlY3Rpb24gQSBpcyBvbmx5IGZvbGxvd2VkIGluIFhIVE1MLCBub3QgZXh0ZW5zaW9ucy4gLS0+DQotDQotPCEtLSBEZWNsYXJlIGEgcGFyYW1ldGVyIGVudGl0eSAlTlMuZGVjbC5hdHRyaWI7IGNvbnRhaW5pbmcNCi0gICAgIGFsbCBYTUwgTmFtZXNwYWNlIGRlY2xhcmF0aW9ucyB1c2VkIGluIHRoZSBEVEQsIHBsdXMgdGhlDQotICAgICB4bWxucyBkZWNsYXJhdGlvbiBmb3IgWEhUTUwsIGl0cyBmb3JtIGRlcGVuZGVudCBvbiB3aGV0aGVyDQotICAgICBwcmVmaXhpbmcgaXMgYWN0aXZlLg0KLS0tPg0KLTwhWyVYSFRNTC5wcmVmaXhlZDtbDQotPCFFTlRJVFkgJSBOUy5kZWNsLmF0dHJpYg0KLSAgICAgInhtbG5zOiVYSFRNTC5wcmVmaXg7ICAlVVJJLmRhdGF0eXBlOyAgICNGSVhFRCAnJVhIVE1MLnhtbG5zOycNCi0gICAgICAlWEhUTUwueG1sbnMuZXh0cmEuYXR0cmliOyINCi0+DQotXV0+DQotPCFFTlRJVFkgJSBOUy5kZWNsLmF0dHJpYg0KLSAgICAgIiVYSFRNTC54bWxucy5leHRyYS5hdHRyaWI7Ig0KLT4NCi0NCi08IS0tIFRoaXMgaXMgYSBwbGFjZWhvbGRlciBmb3IgZnV0dXJlIFhMaW5rIHN1cHBvcnQuDQotLS0+DQotPCFFTlRJVFkgJSBYTElOSy54bWxucy5hdHRyaWIgIiIgPg0KLQ0KLTwhLS0gRGVjbGFyZSBhIHBhcmFtZXRlciBlbnRpdHkgJU5TLmRlY2wuYXR0cmliOyBjb250YWluaW5nIGFsbA0KLSAgICAgWE1MIG5hbWVzcGFjZSBkZWNsYXJhdGlvbiBhdHRyaWJ1dGVzIHVzZWQgYnkgWEhUTUwsIGluY2x1ZGluZw0KLSAgICAgYSBkZWZhdWx0IHhtbG5zIGF0dHJpYnV0ZSB3aGVuIHByZWZpeGluZyBpcyBpbmFjdGl2ZS4NCi0tLT4NCi08IVslWEhUTUwucHJlZml4ZWQ7Ww0KLTwhRU5USVRZICUgWEhUTUwueG1sbnMuYXR0cmliDQotICAgICAiJU5TLmRlY2wuYXR0cmliOw0KLSAgICAgICVYTElOSy54bWxucy5hdHRyaWI7Ig0KLT4NCi1dXT4NCi08IUVOVElUWSAlIFhIVE1MLnhtbG5zLmF0dHJpYg0KLSAgICAgInhtbG5zICAgICAgICAlVVJJLmRhdGF0eXBlOyAgICAgICAgICAgI0ZJWEVEICclWEhUTUwueG1sbnM7Jw0KLSAgICAgICVYTElOSy54bWxucy5hdHRyaWI7Ig0KLT4NCi0NCi08IS0tIHBsYWNlaG9sZGVyIGZvciBxdWFsaWZpZWQgbmFtZSByZWRlY2xhcmF0aW9ucyAtLT4NCi08IUVOVElUWSAlIHhodG1sLXFuYW1lLnJlZGVjbCAiIiA+DQotDQotDQotPCEtLSBTZWN0aW9uIEI6IFhIVE1MIFF1YWxpZmllZCBOYW1lcyA6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6OiAtLT4NCi0NCi08IS0tIDYuIFRoaXMgc2VjdGlvbiBkZWNsYXJlcyBwYXJhbWV0ZXIgZW50aXRpZXMgdXNlZCB0byBwcm92aWRlDQotICAgICAgICBuYW1lc3BhY2UtcXVhbGlmaWVkIG5hbWVzIGZvciBhbGwgWEhUTUwgZWxlbWVudCB0eXBlcy4NCi0tLT4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLWFwcGxldC0xLm1vZCAtLT4NCi08IUVOVElUWSAlIGFwcGxldC5xbmFtZSAgIiVYSFRNTC5wZng7YXBwbGV0IiA+DQotDQotPCEtLSBtb2R1bGU6ICB4aHRtbC1iYXNlLTEubW9kIC0tPg0KLTwhRU5USVRZICUgYmFzZS5xbmFtZSAgICAiJVhIVE1MLnBmeDtiYXNlIiA+DQotDQotPCEtLSBtb2R1bGU6ICB4aHRtbC1iZG8tMS5tb2QgLS0+DQotPCFFTlRJVFkgJSBiZG8ucW5hbWUgICAgICIlWEhUTUwucGZ4O2JkbyIgPg0KLQ0KLTwhLS0gbW9kdWxlOiAgeGh0bWwtYmxrcGhyYXMtMS5tb2QgLS0+DQotPCFFTlRJVFkgJSBhZGRyZXNzLnFuYW1lICIlWEhUTUwucGZ4O2FkZHJlc3MiID4NCi08IUVOVElUWSAlIGJsb2NrcXVvdGUucW5hbWUgICIlWEhUTUwucGZ4O2Jsb2NrcXVvdGUiID4NCi08IUVOVElUWSAlIHByZS5xbmFtZSAgICAgIiVYSFRNTC5wZng7cHJlIiA+DQotPCFFTlRJVFkgJSBoMS5xbmFtZSAgICAgICIlWEhUTUwucGZ4O2gxIiA+DQotPCFFTlRJVFkgJSBoMi5xbmFtZSAgICAgICIlWEhUTUwucGZ4O2gyIiA+DQotPCFFTlRJVFkgJSBoMy5xbmFtZSAgICAgICIlWEhUTUwucGZ4O2gzIiA+DQotPCFFTlRJVFkgJSBoNC5xbmFtZSAgICAgICIlWEhUTUwucGZ4O2g0IiA+DQotPCFFTlRJVFkgJSBoNS5xbmFtZSAgICAgICIlWEhUTUwucGZ4O2g1IiA+DQotPCFFTlRJVFkgJSBoNi5xbmFtZSAgICAgICIlWEhUTUwucGZ4O2g2IiA+DQotDQotPCEtLSBtb2R1bGU6ICB4aHRtbC1ibGtwcmVzLTEubW9kIC0tPg0KLTwhRU5USVRZICUgaHIucW5hbWUgICAgICAiJVhIVE1MLnBmeDtociIgPg0KLQ0KLTwhLS0gbW9kdWxlOiAgeGh0bWwtYmxrc3RydWN0LTEubW9kIC0tPg0KLTwhRU5USVRZICUgZGl2LnFuYW1lICAgICAiJVhIVE1MLnBmeDtkaXYiID4NCi08IUVOVElUWSAlIHAucW5hbWUgICAgICAgIiVYSFRNTC5wZng7cCIgPg0KLQ0KLTwhLS0gbW9kdWxlOiAgeGh0bWwtZWRpdC0xLm1vZCAtLT4NCi08IUVOVElUWSAlIGlucy5xbmFtZSAgICAgIiVYSFRNTC5wZng7aW5zIiA+DQotPCFFTlRJVFkgJSBkZWwucW5hbWUgICAgICIlWEhUTUwucGZ4O2RlbCIgPg0KLQ0KLTwhLS0gbW9kdWxlOiAgeGh0bWwtZm9ybS0xLm1vZCAtLT4NCi08IUVOVElUWSAlIGZvcm0ucW5hbWUgICAgIiVYSFRNTC5wZng7Zm9ybSIgPg0KLTwhRU5USVRZICUgbGFiZWwucW5hbWUgICAiJVhIVE1MLnBmeDtsYWJlbCIgPg0KLTwhRU5USVRZICUgaW5wdXQucW5hbWUgICAiJVhIVE1MLnBmeDtpbnB1dCIgPg0KLTwhRU5USVRZICUgc2VsZWN0LnFuYW1lICAiJVhIVE1MLnBmeDtzZWxlY3QiID4NCi08IUVOVElUWSAlIG9wdGdyb3VwLnFuYW1lICAiJVhIVE1MLnBmeDtvcHRncm91cCIgPg0KLTwhRU5USVRZICUgb3B0aW9uLnFuYW1lICAiJVhIVE1MLnBmeDtvcHRpb24iID4NCi08IUVOVElUWSAlIHRleHRhcmVhLnFuYW1lICAiJVhIVE1MLnBmeDt0ZXh0YXJlYSIgPg0KLTwhRU5USVRZICUgZmllbGRzZXQucW5hbWUgICIlWEhUTUwucGZ4O2ZpZWxkc2V0IiA+DQotPCFFTlRJVFkgJSBsZWdlbmQucW5hbWUgICIlWEhUTUwucGZ4O2xlZ2VuZCIgPg0KLTwhRU5USVRZICUgYnV0dG9uLnFuYW1lICAiJVhIVE1MLnBmeDtidXR0b24iID4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLWh5cGVydGV4dC0xLm1vZCAtLT4NCi08IUVOVElUWSAlIGEucW5hbWUgICAgICAgIiVYSFRNTC5wZng7YSIgPg0KLQ0KLTwhLS0gbW9kdWxlOiAgeGh0bWwtaW1hZ2UtMS5tb2QgLS0+DQotPCFFTlRJVFkgJSBpbWcucW5hbWUgICAgICIlWEhUTUwucGZ4O2ltZyIgPg0KLQ0KLTwhLS0gbW9kdWxlOiAgeGh0bWwtaW5scGhyYXMtMS5tb2QgLS0+DQotPCFFTlRJVFkgJSBhYmJyLnFuYW1lICAgICIlWEhUTUwucGZ4O2FiYnIiID4NCi08IUVOVElUWSAlIGFjcm9ueW0ucW5hbWUgIiVYSFRNTC5wZng7YWNyb255bSIgPg0KLTwhRU5USVRZICUgY2l0ZS5xbmFtZSAgICAiJVhIVE1MLnBmeDtjaXRlIiA+DQotPCFFTlRJVFkgJSBjb2RlLnFuYW1lICAgICIlWEhUTUwucGZ4O2NvZGUiID4NCi08IUVOVElUWSAlIGRmbi5xbmFtZSAgICAgIiVYSFRNTC5wZng7ZGZuIiA+DQotPCFFTlRJVFkgJSBlbS5xbmFtZSAgICAgICIlWEhUTUwucGZ4O2VtIiA+DQotPCFFTlRJVFkgJSBrYmQucW5hbWUgICAgICIlWEhUTUwucGZ4O2tiZCIgPg0KLTwhRU5USVRZICUgcS5xbmFtZSAgICAgICAiJVhIVE1MLnBmeDtxIiA+DQotPCFFTlRJVFkgJSBzYW1wLnFuYW1lICAgICIlWEhUTUwucGZ4O3NhbXAiID4NCi08IUVOVElUWSAlIHN0cm9uZy5xbmFtZSAgIiVYSFRNTC5wZng7c3Ryb25nIiA+DQotPCFFTlRJVFkgJSB2YXIucW5hbWUgICAgICIlWEhUTUwucGZ4O3ZhciIgPg0KLQ0KLTwhLS0gbW9kdWxlOiAgeGh0bWwtaW5scHJlcy0xLm1vZCAtLT4NCi08IUVOVElUWSAlIGIucW5hbWUgICAgICAgIiVYSFRNTC5wZng7YiIgPg0KLTwhRU5USVRZICUgYmlnLnFuYW1lICAgICAiJVhIVE1MLnBmeDtiaWciID4NCi08IUVOVElUWSAlIGkucW5hbWUgICAgICAgIiVYSFRNTC5wZng7aSIgPg0KLTwhRU5USVRZICUgc21hbGwucW5hbWUgICAiJVhIVE1MLnBmeDtzbWFsbCIgPg0KLTwhRU5USVRZICUgc3ViLnFuYW1lICAgICAiJVhIVE1MLnBmeDtzdWIiID4NCi08IUVOVElUWSAlIHN1cC5xbmFtZSAgICAgIiVYSFRNTC5wZng7c3VwIiA+DQotPCFFTlRJVFkgJSB0dC5xbmFtZSAgICAgICIlWEhUTUwucGZ4O3R0IiA+DQotDQotPCEtLSBtb2R1bGU6ICB4aHRtbC1pbmxzdHJ1Y3QtMS5tb2QgLS0+DQotPCFFTlRJVFkgJSBici5xbmFtZSAgICAgICIlWEhUTUwucGZ4O2JyIiA+DQotPCFFTlRJVFkgJSBzcGFuLnFuYW1lICAgICIlWEhUTUwucGZ4O3NwYW4iID4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLWlzbWFwLTEubW9kIChhbHNvIGNzaXNtYXAsIHNzaXNtYXApIC0tPg0KLTwhRU5USVRZICUgbWFwLnFuYW1lICAgICAiJVhIVE1MLnBmeDttYXAiID4NCi08IUVOVElUWSAlIGFyZWEucW5hbWUgICAgIiVYSFRNTC5wZng7YXJlYSIgPg0KLQ0KLTwhLS0gbW9kdWxlOiAgeGh0bWwtbGluay0xLm1vZCAtLT4NCi08IUVOVElUWSAlIGxpbmsucW5hbWUgICAgIiVYSFRNTC5wZng7bGluayIgPg0KLQ0KLTwhLS0gbW9kdWxlOiAgeGh0bWwtbGlzdC0xLm1vZCAtLT4NCi08IUVOVElUWSAlIGRsLnFuYW1lICAgICAgIiVYSFRNTC5wZng7ZGwiID4NCi08IUVOVElUWSAlIGR0LnFuYW1lICAgICAgIiVYSFRNTC5wZng7ZHQiID4NCi08IUVOVElUWSAlIGRkLnFuYW1lICAgICAgIiVYSFRNTC5wZng7ZGQiID4NCi08IUVOVElUWSAlIG9sLnFuYW1lICAgICAgIiVYSFRNTC5wZng7b2wiID4NCi08IUVOVElUWSAlIHVsLnFuYW1lICAgICAgIiVYSFRNTC5wZng7dWwiID4NCi08IUVOVElUWSAlIGxpLnFuYW1lICAgICAgIiVYSFRNTC5wZng7bGkiID4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLW1ldGEtMS5tb2QgLS0+DQotPCFFTlRJVFkgJSBtZXRhLnFuYW1lICAgICIlWEhUTUwucGZ4O21ldGEiID4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLXBhcmFtLTEubW9kIC0tPg0KLTwhRU5USVRZICUgcGFyYW0ucW5hbWUgICAiJVhIVE1MLnBmeDtwYXJhbSIgPg0KLQ0KLTwhLS0gbW9kdWxlOiAgeGh0bWwtb2JqZWN0LTEubW9kIC0tPg0KLTwhRU5USVRZICUgb2JqZWN0LnFuYW1lICAiJVhIVE1MLnBmeDtvYmplY3QiID4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLXNjcmlwdC0xLm1vZCAtLT4NCi08IUVOVElUWSAlIHNjcmlwdC5xbmFtZSAgIiVYSFRNTC5wZng7c2NyaXB0IiA+DQotPCFFTlRJVFkgJSBub3NjcmlwdC5xbmFtZSAgIiVYSFRNTC5wZng7bm9zY3JpcHQiID4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLXN0cnVjdC0xLm1vZCAtLT4NCi08IUVOVElUWSAlIGh0bWwucW5hbWUgICAgIiVYSFRNTC5wZng7aHRtbCIgPg0KLTwhRU5USVRZICUgaGVhZC5xbmFtZSAgICAiJVhIVE1MLnBmeDtoZWFkIiA+DQotPCFFTlRJVFkgJSB0aXRsZS5xbmFtZSAgICIlWEhUTUwucGZ4O3RpdGxlIiA+DQotPCFFTlRJVFkgJSBib2R5LnFuYW1lICAgICIlWEhUTUwucGZ4O2JvZHkiID4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLXN0eWxlLTEubW9kIC0tPg0KLTwhRU5USVRZICUgc3R5bGUucW5hbWUgICAiJVhIVE1MLnBmeDtzdHlsZSIgPg0KLQ0KLTwhLS0gbW9kdWxlOiAgeGh0bWwtdGFibGUtMS5tb2QgLS0+DQotPCFFTlRJVFkgJSB0YWJsZS5xbmFtZSAgICIlWEhUTUwucGZ4O3RhYmxlIiA+DQotPCFFTlRJVFkgJSBjYXB0aW9uLnFuYW1lICIlWEhUTUwucGZ4O2NhcHRpb24iID4NCi08IUVOVElUWSAlIHRoZWFkLnFuYW1lICAgIiVYSFRNTC5wZng7dGhlYWQiID4NCi08IUVOVElUWSAlIHRmb290LnFuYW1lICAgIiVYSFRNTC5wZng7dGZvb3QiID4NCi08IUVOVElUWSAlIHRib2R5LnFuYW1lICAgIiVYSFRNTC5wZng7dGJvZHkiID4NCi08IUVOVElUWSAlIGNvbGdyb3VwLnFuYW1lICAiJVhIVE1MLnBmeDtjb2xncm91cCIgPg0KLTwhRU5USVRZICUgY29sLnFuYW1lICAgICAiJVhIVE1MLnBmeDtjb2wiID4NCi08IUVOVElUWSAlIHRyLnFuYW1lICAgICAgIiVYSFRNTC5wZng7dHIiID4NCi08IUVOVElUWSAlIHRoLnFuYW1lICAgICAgIiVYSFRNTC5wZng7dGgiID4NCi08IUVOVElUWSAlIHRkLnFuYW1lICAgICAgIiVYSFRNTC5wZng7dGQiID4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLXJ1YnktMS5tb2QgLS0+DQotDQotPCFFTlRJVFkgJSBydWJ5LnFuYW1lICAgICIlWEhUTUwucGZ4O3J1YnkiID4NCi08IUVOVElUWSAlIHJiYy5xbmFtZSAgICAgIiVYSFRNTC5wZng7cmJjIiA+DQotPCFFTlRJVFkgJSBydGMucW5hbWUgICAgICIlWEhUTUwucGZ4O3J0YyIgPg0KLTwhRU5USVRZICUgcmIucW5hbWUgICAgICAiJVhIVE1MLnBmeDtyYiIgPg0KLTwhRU5USVRZICUgcnQucW5hbWUgICAgICAiJVhIVE1MLnBmeDtydCIgPg0KLTwhRU5USVRZICUgcnAucW5hbWUgICAgICAiJVhIVE1MLnBmeDtycCIgPg0KLQ0KLTwhLS0gUHJvdmlzaW9uYWwgWEhUTUwgMi4wIFF1YWxpZmllZCBOYW1lcyAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLWltYWdlLTIubW9kIC0tPg0KLTwhRU5USVRZICUgYWx0LnFuYW1lICAgICAiJVhIVE1MLnBmeDthbHQiID4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1xbmFtZS0xLm1vZCAtLT4NCi1dXT4NCi0NCi08IUVOVElUWSAlIHhodG1sLWV2ZW50cy5tb2R1bGUgIklHTk9SRSIgPg0KLTwhWyV4aHRtbC1ldmVudHMubW9kdWxlO1sNCi08IUVOVElUWSAlIHhodG1sLWV2ZW50cy5tb2QNCi0gICAgIFBVQkxJQyAiLS8vVzNDLy9FTlRJVElFUyBYSFRNTCBJbnRyaW5zaWMgRXZlbnRzIDEuMC8vRU4iDQotICAgICAgICAgICAgInhodG1sLWV2ZW50cy0xLm1vZCIgPg0KLSV4aHRtbC1ldmVudHMubW9kO11dPg0KLQ0KLTwhRU5USVRZICUgeGh0bWwtYXR0cmlicy5tb2R1bGUgIklOQ0xVREUiID4NCi08IVsleGh0bWwtYXR0cmlicy5tb2R1bGU7Ww0KLTwhRU5USVRZICUgeGh0bWwtYXR0cmlicy5tb2QNCi0gICAgIFBVQkxJQyAiLS8vVzNDLy9FTlRJVElFUyBYSFRNTCBDb21tb24gQXR0cmlidXRlcyAxLjAvL0VOIg0KLSAgICAgICAgICAgICJ4aHRtbC1hdHRyaWJzLTEubW9kIiA+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgQ29tbW9uIEF0dHJpYnV0ZXMgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLWF0dHJpYnMtMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwsIGEgcmVmb3JtdWxhdGlvbiBvZiBIVE1MIGFzIGEgbW9kdWxhciBYTUwgYXBwbGljYXRpb24uDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB4aHRtbC1tb2JpbGUxMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU3IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VOVElUSUVTIFhIVE1MIENvbW1vbiBBdHRyaWJ1dGVzIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWF0dHJpYnMtMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotICAgICAobm9uZSkNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gQ29tbW9uIEF0dHJpYnV0ZXMNCi0NCi0gICAgIFRoaXMgbW9kdWxlIGRlY2xhcmVzIG1hbnkgb2YgdGhlIGNvbW1vbiBhdHRyaWJ1dGVzIGZvciB0aGUgWEhUTUwgRFRELg0KLSAgICAgJU5TLmRlY2wuYXR0cmliOyBpcyBkZWNsYXJlZCBpbiB0aGUgWEhUTUwgUW5hbWUgbW9kdWxlLg0KLS0tPg0KLQ0KLTwhRU5USVRZICUgaWQuYXR0cmliDQotICAgICAiaWQgICAgICAgICAgIElEICAgICAgICAgICAgICAgICAgICAgICAjSU1QTElFRCINCi0+DQotDQotPCFFTlRJVFkgJSBjbGFzcy5hdHRyaWINCi0gICAgICJjbGFzcyAgICAgICAgTk1UT0tFTlMgICAgICAgICAgICAgICAgICNJTVBMSUVEIg0KLT4NCi0NCi08IUVOVElUWSAlIHRpdGxlLmF0dHJpYg0KLSAgICAgInRpdGxlICAgICAgICAlVGV4dC5kYXRhdHlwZTsgICAgICAgICAgI0lNUExJRUQiDQotPg0KLQ0KLTwhRU5USVRZICUgQ29yZS5leHRyYS5hdHRyaWIgIiIgPg0KLQ0KLTwhRU5USVRZICUgQ29yZS5hdHRyaWINCi0gICAgICIlWEhUTUwueG1sbnMuYXR0cmliOw0KLSAgICAgICVpZC5hdHRyaWI7DQotICAgICAgJWNsYXNzLmF0dHJpYjsNCi0gICAgICAldGl0bGUuYXR0cmliOw0KLSAgICAgICVDb3JlLmV4dHJhLmF0dHJpYjsiDQotPg0KLQ0KLTwhRU5USVRZICUgbGFuZy5hdHRyaWINCi0gICAgICJ4bWw6bGFuZyAgICAgJUxhbmd1YWdlQ29kZS5kYXRhdHlwZTsgICNJTVBMSUVEIg0KLT4NCi0NCi08IVslWEhUTUwuYmlkaTtbDQotPCFFTlRJVFkgJSBkaXIuYXR0cmliDQotICAgICAiZGlyICAgICAgICAgICggbHRyIHwgcnRsICkgICAgICAgICAgICAjSU1QTElFRCINCi0+DQotDQotPCFFTlRJVFkgJSBJMThuLmF0dHJpYg0KLSAgICAgIiVkaXIuYXR0cmliOw0KLSAgICAgICVsYW5nLmF0dHJpYjsiDQotPg0KLQ0KLV1dPg0KLTwhRU5USVRZICUgSTE4bi5hdHRyaWINCi0gICAgICIlbGFuZy5hdHRyaWI7Ig0KLT4NCi0NCi08IUVOVElUWSAlIENvbW1vbi5leHRyYS5hdHRyaWIgIiIgPg0KLQ0KLTwhLS0gaW50cmluc2ljIGV2ZW50IGF0dHJpYnV0ZXMgZGVjbGFyZWQgcHJldmlvdXNseQ0KLS0tPg0KLTwhRU5USVRZICUgRXZlbnRzLmF0dHJpYiAiIiA+DQotDQotPCFFTlRJVFkgJSBDb21tb24uYXR0cmliDQotICAgICAiJUNvcmUuYXR0cmliOw0KLSAgICAgICVJMThuLmF0dHJpYjsNCi0gICAgICAlRXZlbnRzLmF0dHJpYjsNCi0gICAgICAlQ29tbW9uLmV4dHJhLmF0dHJpYjsiDQotPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLWF0dHJpYnMtMS5tb2QgLS0+DQotXV0+DQotDQotPCEtLSBwbGFjZWhvbGRlciBmb3IgY29udGVudCBtb2RlbCByZWRlY2xhcmF0aW9ucyAtLT4NCi08IUVOVElUWSAlIHhodG1sLW1vZGVsLnJlZGVjbCAiIiA+DQotDQotDQotPCFFTlRJVFkgJSB4aHRtbC1tb2RlbC5tb2R1bGUgIklOQ0xVREUiID4NCi08IVsleGh0bWwtbW9kZWwubW9kdWxlO1sNCi08IS0tIGluc3RhbnRpYXRlIHRoZSBEb2N1bWVudCBNb2RlbCBtb2R1bGUgZGVjbGFyZWQgaW4gdGhlIERURCBkcml2ZXINCi0tLT4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgTW9iaWxlIDEuMCBEb2N1bWVudCBNb2RlbCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLW1vYmlsZTEwLW1vZGVsLTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MIE1vYmlsZSwgYSBwcm9wZXIgc3Vic2V0IG9mIFhIVE1MLg0KLSAgICAgCUBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSwgTHRkLiAyMDAxLg0KLQ0KLQlUZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UgYXJlIGF2YWlsYWJsZSBmcm9tIHRoZSBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSBMdGQuIA0KLQlXZWIgc2l0ZSAoaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvd2hhdC9jb3B5cmlnaHQuaHRtKS4NCi0gICAgDQotLS0+DQotPCEtLSBYSFRNTCBNb2JpbGUgRG9jdW1lbnQgTW9kZWwNCi0NCi0gICAgIFRoaXMgbW9kdWxlIGRlc2NyaWJlcyB0aGUgZ3JvdXBpbmdzIG9mIGVsZW1lbnRzIHRoYXQgbWFrZSB1cA0KLSAgICAgY29tbW9uIGNvbnRlbnQgbW9kZWxzIGZvciBYSFRNTCBlbGVtZW50cy4NCi0tLT4NCi0NCi08IS0tIE9wdGlvbmFsIEVsZW1lbnRzIGluIGhlYWQgIC4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgSGVhZE9wdHMubWl4DQotICAgICAiKCAlbWV0YS5xbmFtZTsgfCAlbGluay5xbmFtZTsgfCAlb2JqZWN0LnFuYW1lOyB8ICVzdHlsZS5xbmFtZTsgKSoiID4NCi0NCi08IS0tIE1pc2NlbGxhbmVvdXMgRWxlbWVudHMgIC4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgTWlzYy5jbGFzcyAiIiA+DQotDQotPCEtLSBJbmxpbmUgRWxlbWVudHMgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIElubFN0cnVjdC5jbGFzcyAiJWJyLnFuYW1lOyB8ICVzcGFuLnFuYW1lOyIgPg0KLQ0KLTwhRU5USVRZICUgSW5sUGhyYXMuY2xhc3MNCi0gICAgICJ8ICVlbS5xbmFtZTsgfCAlc3Ryb25nLnFuYW1lOyB8ICVkZm4ucW5hbWU7IHwgJWNvZGUucW5hbWU7DQotICAgICAgfCAlc2FtcC5xbmFtZTsgfCAla2JkLnFuYW1lOyB8ICV2YXIucW5hbWU7IHwgJWNpdGUucW5hbWU7DQotICAgICAgfCAlYWJici5xbmFtZTsgfCAlYWNyb255bS5xbmFtZTsgfCAlcS5xbmFtZTsiID4NCi0NCi08IUVOVElUWSAlIElubFByZXMuY2xhc3MNCi0gICAgICJ8ICVpLnFuYW1lOyB8ICViLnFuYW1lOyB8ICViaWcucW5hbWU7IHwgJXNtYWxsLnFuYW1lOyAiID4NCi0NCi0NCi08IUVOVElUWSAlIEkxOG4uY2xhc3MgIiIgPg0KLQ0KLTwhRU5USVRZICUgQW5jaG9yLmNsYXNzICJ8ICVhLnFuYW1lOyIgPg0KLQ0KLTwhRU5USVRZICUgSW5sU3BlY2lhbC5jbGFzcyAifCAlaW1nLnFuYW1lOyB8ICVvYmplY3QucW5hbWU7IiA+DQotDQotPCFFTlRJVFkgJSBJbmxGb3JtLmNsYXNzDQotICAgICAifCAlaW5wdXQucW5hbWU7IHwgJXNlbGVjdC5xbmFtZTsgfCAldGV4dGFyZWEucW5hbWU7DQotICAgICAgfCAlbGFiZWwucW5hbWU7Ig0KLT4NCi0NCi08IUVOVElUWSAlIElubGluZS5leHRyYSAiIiA+DQotDQotPCFFTlRJVFkgJSBJbmxpbmUuY2xhc3MNCi0gICAgICIlSW5sU3RydWN0LmNsYXNzOw0KLSAgICAgICVJbmxQaHJhcy5jbGFzczsNCi0gICAgICAlQW5jaG9yLmNsYXNzOw0KLSAgICAgICVJbmxTcGVjaWFsLmNsYXNzOw0KLSAgICAgICVJbmxGb3JtLmNsYXNzOw0KLSAgICAgICVJbmxpbmUuZXh0cmE7Ig0KLT4NCi0NCi08IUVOVElUWSAlIElubE5vQW5jaG9yLmNsYXNzDQotICAgICAiJUlubFN0cnVjdC5jbGFzczsNCi0gICAgICAlSW5sUGhyYXMuY2xhc3M7DQotICAgICAgJUlubFNwZWNpYWwuY2xhc3M7DQotICAgICAgJUlubEZvcm0uY2xhc3M7DQotICAgICAgJUlubGluZS5leHRyYTsiDQotPg0KLQ0KLTwhRU5USVRZICUgSW5sTm9BbmNob3IubWl4DQotICAgICAiJUlubE5vQW5jaG9yLmNsYXNzOw0KLSAgICAgICVNaXNjLmNsYXNzOyINCi0+DQotDQotPCFFTlRJVFkgJSBJbmxpbmUubWl4DQotICAgICAiJUlubGluZS5jbGFzczsNCi0gICAgICAlTWlzYy5jbGFzczsiDQotPg0KLQ0KLTwhLS0gQmxvY2sgRWxlbWVudHMgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBIZWFkaW5nLmNsYXNzDQotICAgICAiJWgxLnFuYW1lOyB8ICVoMi5xbmFtZTsgfCAlaDMucW5hbWU7DQotICAgICAgfCAlaDQucW5hbWU7IHwgJWg1LnFuYW1lOyB8ICVoNi5xbmFtZTsiDQotPg0KLTwhRU5USVRZICUgTGlzdC5jbGFzcyAgIiV1bC5xbmFtZTsgfCAlb2wucW5hbWU7IHwgJWRsLnFuYW1lOyIgPg0KLQ0KLTwhRU5USVRZICUgVGFibGUuY2xhc3MgInwgJXRhYmxlLnFuYW1lOyIgPg0KLQ0KLTwhRU5USVRZICUgRm9ybS5jbGFzcyAgInwgJWZvcm0ucW5hbWU7IiA+DQotDQotPCFFTlRJVFkgJSBGaWVsZHNldC5jbGFzcyAgInwgJWZpZWxkc2V0LnFuYW1lOyIgPg0KLQ0KLTwhRU5USVRZICUgQmxrU3RydWN0LmNsYXNzICIlcC5xbmFtZTsgfCAlZGl2LnFuYW1lOyIgPg0KLQ0KLTwhRU5USVRZICUgQmxrUGhyYXMuY2xhc3MNCi0gICAgICJ8ICVwcmUucW5hbWU7IHwgJWJsb2NrcXVvdGUucW5hbWU7IHwgJWFkZHJlc3MucW5hbWU7Ig0KLT4NCi0NCi08IUVOVElUWSAlIEJsa1ByZXMuY2xhc3MgInwgJWhyLnFuYW1lOyIgPg0KLQ0KLTwhRU5USVRZICUgQmxrU3BlY2lhbC5jbGFzcw0KLSAgICAgIiVUYWJsZS5jbGFzczsNCi0gICAgICAlRm9ybS5jbGFzczsNCi0gICAgICAlRmllbGRzZXQuY2xhc3M7Ig0KLT4NCi0NCi08IUVOVElUWSAlIEJsb2NrLmV4dHJhICIiID4NCi0NCi08IUVOVElUWSAlIEJsb2NrLmNsYXNzDQotICAgICAiJUJsa1N0cnVjdC5jbGFzczsNCi0gICAgICAlQmxrUGhyYXMuY2xhc3M7DQotICAgICAgJUJsa1ByZXMuY2xhc3M7DQotICAgICAgJUJsa1NwZWNpYWwuY2xhc3M7DQotICAgICAgJUJsb2NrLmV4dHJhOyINCi0+DQotDQotPCFFTlRJVFkgJSBCbGtOb0Zvcm0ubWl4DQotICAgICAiJUhlYWRpbmcuY2xhc3M7DQotICAgICAgfCAlTGlzdC5jbGFzczsNCi0gICAgICB8ICVCbGtTdHJ1Y3QuY2xhc3M7DQotICAgICAgJUJsa1BocmFzLmNsYXNzOw0KLSAgICAgICVCbGtQcmVzLmNsYXNzOw0KLSAgICAgICVUYWJsZS5jbGFzczsNCi0gICAgICAlQmxvY2suZXh0cmE7DQotICAgICAgJU1pc2MuY2xhc3M7Ig0KLT4NCi0NCi08IUVOVElUWSAlIEJsb2NrLm1peA0KLSAgICAgIiVIZWFkaW5nLmNsYXNzOw0KLSAgICAgIHwgJUxpc3QuY2xhc3M7DQotICAgICAgfCAlQmxvY2suY2xhc3M7DQotICAgICAgJU1pc2MuY2xhc3M7Ig0KLT4NCi0NCi08IS0tIEFsbCBDb250ZW50IEVsZW1lbnRzICAuLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gZGVjbGFyZXMgYWxsIGNvbnRlbnQgZXhjZXB0IHRhYmxlcw0KLS0tPg0KLTwhRU5USVRZICUgRmxvd05vVGFibGUubWl4DQotICAgICAiJUhlYWRpbmcuY2xhc3M7DQotICAgICAgfCAlTGlzdC5jbGFzczsNCi0gICAgICB8ICVCbGtTdHJ1Y3QuY2xhc3M7DQotICAgICAgJUJsa1BocmFzLmNsYXNzOw0KLSAgICAgICVGb3JtLmNsYXNzOw0KLSAgICAgICVCbG9jay5leHRyYTsNCi0gICAgICB8ICVJbmxpbmUuY2xhc3M7DQotICAgICAgJU1pc2MuY2xhc3M7Ig0KLT4NCi0NCi0NCi08IUVOVElUWSAlIEZsb3cubWl4DQotICAgICAiJUhlYWRpbmcuY2xhc3M7DQotICAgICAgfCAlTGlzdC5jbGFzczsNCi0gICAgICB8ICVCbG9jay5jbGFzczsNCi0gICAgICB8ICVJbmxpbmUuY2xhc3M7DQotICAgICAgJU1pc2MuY2xhc3M7Ig0KLT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1tb2JpbGUxMC1tb2RlbC0xLm1vZCAtLT4NCi1dXT4NCi0NCi08IUVOVElUWSAlIHhodG1sLWNoYXJlbnQubW9kdWxlICJJTkNMVURFIiA+DQotPCFbJXhodG1sLWNoYXJlbnQubW9kdWxlO1sNCi08IUVOVElUWSAlIHhodG1sLWNoYXJlbnQubW9kDQotICAgICBQVUJMSUMgIi0vL1czQy8vRU5USVRJRVMgWEhUTUwgQ2hhcmFjdGVyIEVudGl0aWVzIDEuMC8vRU4iDQotICAgICAgICAgICAgInhodG1sLWNoYXJlbnQtMS5tb2QiID4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBDaGFyYWN0ZXIgRW50aXRpZXMgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLWNoYXJlbnQtMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwsIGEgcmVmb3JtdWxhdGlvbiBvZiBIVE1MIGFzIGEgbW9kdWxhciBYTUwgYXBwbGljYXRpb24uDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB4aHRtbC1tb2JpbGUxMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU3IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VOVElUSUVTIFhIVE1MIENoYXJhY3RlciBFbnRpdGllcyAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1jaGFyZW50LTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIENoYXJhY3RlciBFbnRpdGllcyBmb3IgWEhUTUwNCi0NCi0gICAgIFRoaXMgbW9kdWxlIGRlY2xhcmVzIHRoZSBzZXQgb2YgY2hhcmFjdGVyIGVudGl0aWVzIGZvciBYSFRNTCwNCi0gICAgIGluY2x1ZGluZyB0aGUgTGF0aW4gMSwgU3ltYm9sIGFuZCBTcGVjaWFsIGNoYXJhY3RlciBjb2xsZWN0aW9ucy4NCi0tLT4NCi0NCi08IUVOVElUWSAlIHhodG1sLWxhdDENCi0gICAgUFVCTElDICItLy9XM0MvL0VOVElUSUVTIExhdGluIDEgZm9yIFhIVE1MLy9FTiINCi0gICAgICAgICAgICJ4aHRtbC1sYXQxLmVudCIgPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhNTC1jb21wYXRpYmxlIElTTyBMYXRpbiAxIENoYXJhY3RlciBFbnRpdHkgU2V0IGZvciBYSFRNTCAuLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1sYXQxLmVudA0KLQ0KLSAgICAgVHlwaWNhbCBpbnZvY2F0aW9uOg0KLQ0KLSAgICAgICA8IUVOVElUWSAlIHhodG1sLWxhdDENCi0gICAgICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTlRJVElFUyBMYXRpbiAxIGZvciBYSFRNTC8vRU4iDQotICAgICAgICAgICAgICAgICAgInhodG1sLWxhdDEuZW50IiA+DQotICAgICAgICV4aHRtbC1sYXQxOw0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRU5USVRJRVMgTGF0aW4gMSBmb3IgWEhUTUwvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1sYXQxLmVudCINCi0NCi0gICAgIFJldmlzaW9uOiAgJElkOiB4aHRtbC1tb2JpbGUxMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU3IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFBvcnRpb25zIChDKSBJbnRlcm5hdGlvbmFsIE9yZ2FuaXphdGlvbiBmb3IgU3RhbmRhcmRpemF0aW9uIDE5ODY6DQotICAgICBQZXJtaXNzaW9uIHRvIGNvcHkgaW4gYW55IGZvcm0gaXMgZ3JhbnRlZCBmb3IgdXNlIHdpdGggY29uZm9ybWluZw0KLSAgICAgU0dNTCBzeXN0ZW1zIGFuZCBhcHBsaWNhdGlvbnMgYXMgZGVmaW5lZCBpbiBJU08gODg3OSwgcHJvdmlkZWQNCi0gICAgIHRoaXMgbm90aWNlIGlzIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMuDQotLS0+DQotDQotPCFFTlRJVFkgbmJzcCAgICImIzE2MDsiID48IS0tIG5vLWJyZWFrIHNwYWNlID0gbm9uLWJyZWFraW5nIHNwYWNlLCBVKzAwQTAgSVNPbnVtIC0tPg0KLTwhRU5USVRZIGlleGNsICAiJiMxNjE7IiA+PCEtLSBpbnZlcnRlZCBleGNsYW1hdGlvbiBtYXJrLCBVKzAwQTEgSVNPbnVtIC0tPg0KLTwhRU5USVRZIGNlbnQgICAiJiMxNjI7IiA+PCEtLSBjZW50IHNpZ24sIFUrMDBBMiBJU09udW0gLS0+DQotPCFFTlRJVFkgcG91bmQgICImIzE2MzsiID48IS0tIHBvdW5kIHNpZ24sIFUrMDBBMyBJU09udW0gLS0+DQotPCFFTlRJVFkgY3VycmVuICImIzE2NDsiID48IS0tIGN1cnJlbmN5IHNpZ24sIFUrMDBBNCBJU09udW0gLS0+DQotPCFFTlRJVFkgeWVuICAgICImIzE2NTsiID48IS0tIHllbiBzaWduID0geXVhbiBzaWduLCBVKzAwQTUgSVNPbnVtIC0tPg0KLTwhRU5USVRZIGJydmJhciAiJiMxNjY7IiA+PCEtLSBicm9rZW4gYmFyID0gYnJva2VuIHZlcnRpY2FsIGJhciwgVSswMEE2IElTT251bSAtLT4NCi08IUVOVElUWSBzZWN0ICAgIiYjMTY3OyIgPjwhLS0gc2VjdGlvbiBzaWduLCBVKzAwQTcgSVNPbnVtIC0tPg0KLTwhRU5USVRZIHVtbCAgICAiJiMxNjg7IiA+PCEtLSBkaWFlcmVzaXMgPSBzcGFjaW5nIGRpYWVyZXNpcywgVSswMEE4IElTT2RpYSAtLT4NCi08IUVOVElUWSBjb3B5ICAgIiYjMTY5OyIgPjwhLS0gY29weXJpZ2h0IHNpZ24sIFUrMDBBOSBJU09udW0gLS0+DQotPCFFTlRJVFkgb3JkZiAgICImIzE3MDsiID48IS0tIGZlbWluaW5lIG9yZGluYWwgaW5kaWNhdG9yLCBVKzAwQUEgSVNPbnVtIC0tPg0KLTwhRU5USVRZIGxhcXVvICAiJiMxNzE7IiA+PCEtLSBsZWZ0LXBvaW50aW5nIGRvdWJsZSBhbmdsZSBxdW90YXRpb24gbWFyayA9IGxlZnQgcG9pbnRpbmcgZ3VpbGxlbWV0LCBVKzAwQUIgSVNPbnVtIC0tPg0KLTwhRU5USVRZIG5vdCAgICAiJiMxNzI7IiA+PCEtLSBub3Qgc2lnbiwgVSswMEFDIElTT251bSAtLT4NCi08IUVOVElUWSBzaHkgICAgIiYjMTczOyIgPjwhLS0gc29mdCBoeXBoZW4gPSBkaXNjcmV0aW9uYXJ5IGh5cGhlbiwgVSswMEFEIElTT251bSAtLT4NCi08IUVOVElUWSByZWcgICAgIiYjMTc0OyIgPjwhLS0gcmVnaXN0ZXJlZCBzaWduID0gcmVnaXN0ZXJlZCB0cmFkZSBtYXJrIHNpZ24sIFUrMDBBRSBJU09udW0gLS0+DQotPCFFTlRJVFkgbWFjciAgICImIzE3NTsiID48IS0tIG1hY3JvbiA9IHNwYWNpbmcgbWFjcm9uID0gb3ZlcmxpbmUgPSBBUEwgb3ZlcmJhciwgVSswMEFGIElTT2RpYSAtLT4NCi08IUVOVElUWSBkZWcgICAgIiYjMTc2OyIgPjwhLS0gZGVncmVlIHNpZ24sIFUrMDBCMCBJU09udW0gLS0+DQotPCFFTlRJVFkgcGx1c21uICImIzE3NzsiID48IS0tIHBsdXMtbWludXMgc2lnbiA9IHBsdXMtb3ItbWludXMgc2lnbiwgVSswMEIxIElTT251bSAtLT4NCi08IUVOVElUWSBzdXAyICAgIiYjMTc4OyIgPjwhLS0gc3VwZXJzY3JpcHQgdHdvID0gc3VwZXJzY3JpcHQgZGlnaXQgdHdvID0gc3F1YXJlZCwgVSswMEIyIElTT251bSAtLT4NCi08IUVOVElUWSBzdXAzICAgIiYjMTc5OyIgPjwhLS0gc3VwZXJzY3JpcHQgdGhyZWUgPSBzdXBlcnNjcmlwdCBkaWdpdCB0aHJlZSA9IGN1YmVkLCBVKzAwQjMgSVNPbnVtIC0tPg0KLTwhRU5USVRZIGFjdXRlICAiJiMxODA7IiA+PCEtLSBhY3V0ZSBhY2NlbnQgPSBzcGFjaW5nIGFjdXRlLCBVKzAwQjQgSVNPZGlhIC0tPg0KLTwhRU5USVRZIG1pY3JvICAiJiMxODE7IiA+PCEtLSBtaWNybyBzaWduLCBVKzAwQjUgSVNPbnVtIC0tPg0KLTwhRU5USVRZIHBhcmEgICAiJiMxODI7IiA+PCEtLSBwaWxjcm93IHNpZ24gPSBwYXJhZ3JhcGggc2lnbiwgVSswMEI2IElTT251bSAtLT4NCi08IUVOVElUWSBtaWRkb3QgIiYjMTgzOyIgPjwhLS0gbWlkZGxlIGRvdCA9IEdlb3JnaWFuIGNvbW1hID0gR3JlZWsgbWlkZGxlIGRvdCwgVSswMEI3IElTT251bSAtLT4NCi08IUVOVElUWSBjZWRpbCAgIiYjMTg0OyIgPjwhLS0gY2VkaWxsYSA9IHNwYWNpbmcgY2VkaWxsYSwgVSswMEI4IElTT2RpYSAtLT4NCi08IUVOVElUWSBzdXAxICAgIiYjMTg1OyIgPjwhLS0gc3VwZXJzY3JpcHQgb25lID0gc3VwZXJzY3JpcHQgZGlnaXQgb25lLCBVKzAwQjkgSVNPbnVtIC0tPg0KLTwhRU5USVRZIG9yZG0gICAiJiMxODY7IiA+PCEtLSBtYXNjdWxpbmUgb3JkaW5hbCBpbmRpY2F0b3IsIFUrMDBCQSBJU09udW0gLS0+DQotPCFFTlRJVFkgcmFxdW8gICImIzE4NzsiID48IS0tIHJpZ2h0LXBvaW50aW5nIGRvdWJsZSBhbmdsZSBxdW90YXRpb24gbWFyayA9IHJpZ2h0IHBvaW50aW5nIGd1aWxsZW1ldCwgVSswMEJCIElTT251bSAtLT4NCi08IUVOVElUWSBmcmFjMTQgIiYjMTg4OyIgPjwhLS0gdnVsZ2FyIGZyYWN0aW9uIG9uZSBxdWFydGVyID0gZnJhY3Rpb24gb25lIHF1YXJ0ZXIsIFUrMDBCQyBJU09udW0gLS0+DQotPCFFTlRJVFkgZnJhYzEyICImIzE4OTsiID48IS0tIHZ1bGdhciBmcmFjdGlvbiBvbmUgaGFsZiA9IGZyYWN0aW9uIG9uZSBoYWxmLCBVKzAwQkQgSVNPbnVtIC0tPg0KLTwhRU5USVRZIGZyYWMzNCAiJiMxOTA7IiA+PCEtLSB2dWxnYXIgZnJhY3Rpb24gdGhyZWUgcXVhcnRlcnMgPSBmcmFjdGlvbiB0aHJlZSBxdWFydGVycywgVSswMEJFIElTT251bSAtLT4NCi08IUVOVElUWSBpcXVlc3QgIiYjMTkxOyIgPjwhLS0gaW52ZXJ0ZWQgcXVlc3Rpb24gbWFyayA9IHR1cm5lZCBxdWVzdGlvbiBtYXJrLCBVKzAwQkYgSVNPbnVtIC0tPg0KLTwhRU5USVRZIEFncmF2ZSAiJiMxOTI7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIEEgd2l0aCBncmF2ZSA9IGxhdGluIGNhcGl0YWwgQSBncmF2ZSwgVSswMEMwIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgQWFjdXRlICImIzE5MzsiID48IS0tIGxhdGluIGNhcGl0YWwgQSB3aXRoIGFjdXRlLCBVKzAwQzEgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBBY2lyYyAgIiYjMTk0OyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBBIHdpdGggY2lyY3VtZmxleCwgVSswMEMyIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgQXRpbGRlICImIzE5NTsiID48IS0tIGxhdGluIGNhcGl0YWwgQSB3aXRoIHRpbGRlLCBVKzAwQzMgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBBdW1sICAgIiYjMTk2OyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBBIHdpdGggZGlhZXJlc2lzLCBVKzAwQzQgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBBcmluZyAgIiYjMTk3OyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBBIHdpdGggcmluZyBhYm92ZSA9IGxhdGluIGNhcGl0YWwgQSByaW5nLCBVKzAwQzUgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBBRWxpZyAgIiYjMTk4OyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBBRSA9IGxhdGluIGNhcGl0YWwgbGlnYXR1cmUgQUUsIFUrMDBDNiBJU09sYXQxIC0tPg0KLTwhRU5USVRZIENjZWRpbCAiJiMxOTk7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIEMgd2l0aCBjZWRpbGxhLCBVKzAwQzcgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBFZ3JhdmUgIiYjMjAwOyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBFIHdpdGggZ3JhdmUsIFUrMDBDOCBJU09sYXQxIC0tPg0KLTwhRU5USVRZIEVhY3V0ZSAiJiMyMDE7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIEUgd2l0aCBhY3V0ZSwgVSswMEM5IElTT2xhdDEgLS0+DQotPCFFTlRJVFkgRWNpcmMgICImIzIwMjsiID48IS0tIGxhdGluIGNhcGl0YWwgRSB3aXRoIGNpcmN1bWZsZXgsIFUrMDBDQSBJU09sYXQxIC0tPg0KLTwhRU5USVRZIEV1bWwgICAiJiMyMDM7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIEUgd2l0aCBkaWFlcmVzaXMsIFUrMDBDQiBJU09sYXQxIC0tPg0KLTwhRU5USVRZIElncmF2ZSAiJiMyMDQ7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIEkgd2l0aCBncmF2ZSwgVSswMENDIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgSWFjdXRlICImIzIwNTsiID48IS0tIGxhdGluIGNhcGl0YWwgSSB3aXRoIGFjdXRlLCBVKzAwQ0QgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBJY2lyYyAgIiYjMjA2OyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBJIHdpdGggY2lyY3VtZmxleCwgVSswMENFIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgSXVtbCAgICImIzIwNzsiID48IS0tIGxhdGluIGNhcGl0YWwgSSB3aXRoIGRpYWVyZXNpcywgVSswMENGIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgRVRIICAgICImIzIwODsiID48IS0tIGxhdGluIGNhcGl0YWwgRVRILCBVKzAwRDAgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBOdGlsZGUgIiYjMjA5OyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBOIHdpdGggdGlsZGUsIFUrMDBEMSBJU09sYXQxIC0tPg0KLTwhRU5USVRZIE9ncmF2ZSAiJiMyMTA7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIE8gd2l0aCBncmF2ZSwgVSswMEQyIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgT2FjdXRlICImIzIxMTsiID48IS0tIGxhdGluIGNhcGl0YWwgTyB3aXRoIGFjdXRlLCBVKzAwRDMgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBPY2lyYyAgIiYjMjEyOyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBPIHdpdGggY2lyY3VtZmxleCwgVSswMEQ0IElTT2xhdDEgLS0+DQotPCFFTlRJVFkgT3RpbGRlICImIzIxMzsiID48IS0tIGxhdGluIGNhcGl0YWwgTyB3aXRoIHRpbGRlLCBVKzAwRDUgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBPdW1sICAgIiYjMjE0OyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBPIHdpdGggZGlhZXJlc2lzLCBVKzAwRDYgSVNPbGF0MSAtLT4NCi08IUVOVElUWSB0aW1lcyAgIiYjMjE1OyIgPjwhLS0gbXVsdGlwbGljYXRpb24gc2lnbiwgVSswMEQ3IElTT251bSAtLT4NCi08IUVOVElUWSBPc2xhc2ggIiYjMjE2OyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBPIHdpdGggc3Ryb2tlID0gbGF0aW4gY2FwaXRhbCBPIHNsYXNoLCBVKzAwRDggSVNPbGF0MSAtLT4NCi08IUVOVElUWSBVZ3JhdmUgIiYjMjE3OyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBVIHdpdGggZ3JhdmUsIFUrMDBEOSBJU09sYXQxIC0tPg0KLTwhRU5USVRZIFVhY3V0ZSAiJiMyMTg7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIFUgd2l0aCBhY3V0ZSwgVSswMERBIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgVWNpcmMgICImIzIxOTsiID48IS0tIGxhdGluIGNhcGl0YWwgVSB3aXRoIGNpcmN1bWZsZXgsIFUrMDBEQiBJU09sYXQxIC0tPg0KLTwhRU5USVRZIFV1bWwgICAiJiMyMjA7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIFUgd2l0aCBkaWFlcmVzaXMsIFUrMDBEQyBJU09sYXQxIC0tPg0KLTwhRU5USVRZIFlhY3V0ZSAiJiMyMjE7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIFkgd2l0aCBhY3V0ZSwgVSswMEREIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgVEhPUk4gICImIzIyMjsiID48IS0tIGxhdGluIGNhcGl0YWwgVEhPUk4sIFUrMDBERSBJU09sYXQxIC0tPg0KLTwhRU5USVRZIHN6bGlnICAiJiMyMjM7IiA+PCEtLSBsYXRpbiBzbWFsbCBzaGFycCBzID0gZXNzLXplZCwgVSswMERGIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgYWdyYXZlICImIzIyNDsiID48IS0tIGxhdGluIHNtYWxsIGEgd2l0aCBncmF2ZSA9IGxhdGluIHNtYWxsIGEgZ3JhdmUsIFUrMDBFMCBJU09sYXQxIC0tPg0KLTwhRU5USVRZIGFhY3V0ZSAiJiMyMjU7IiA+PCEtLSBsYXRpbiBzbWFsbCBhIHdpdGggYWN1dGUsIFUrMDBFMSBJU09sYXQxIC0tPg0KLTwhRU5USVRZIGFjaXJjICAiJiMyMjY7IiA+PCEtLSBsYXRpbiBzbWFsbCBhIHdpdGggY2lyY3VtZmxleCwgVSswMEUyIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgYXRpbGRlICImIzIyNzsiID48IS0tIGxhdGluIHNtYWxsIGEgd2l0aCB0aWxkZSwgVSswMEUzIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgYXVtbCAgICImIzIyODsiID48IS0tIGxhdGluIHNtYWxsIGEgd2l0aCBkaWFlcmVzaXMsIFUrMDBFNCBJU09sYXQxIC0tPg0KLTwhRU5USVRZIGFyaW5nICAiJiMyMjk7IiA+PCEtLSBsYXRpbiBzbWFsbCBhIHdpdGggcmluZyBhYm92ZSA9IGxhdGluIHNtYWxsIGEgcmluZywgVSswMEU1IElTT2xhdDEgLS0+DQotPCFFTlRJVFkgYWVsaWcgICImIzIzMDsiID48IS0tIGxhdGluIHNtYWxsIGFlID0gbGF0aW4gc21hbGwgbGlnYXR1cmUgYWUsIFUrMDBFNiBJU09sYXQxIC0tPg0KLTwhRU5USVRZIGNjZWRpbCAiJiMyMzE7IiA+PCEtLSBsYXRpbiBzbWFsbCBjIHdpdGggY2VkaWxsYSwgVSswMEU3IElTT2xhdDEgLS0+DQotPCFFTlRJVFkgZWdyYXZlICImIzIzMjsiID48IS0tIGxhdGluIHNtYWxsIGUgd2l0aCBncmF2ZSwgVSswMEU4IElTT2xhdDEgLS0+DQotPCFFTlRJVFkgZWFjdXRlICImIzIzMzsiID48IS0tIGxhdGluIHNtYWxsIGUgd2l0aCBhY3V0ZSwgVSswMEU5IElTT2xhdDEgLS0+DQotPCFFTlRJVFkgZWNpcmMgICImIzIzNDsiID48IS0tIGxhdGluIHNtYWxsIGUgd2l0aCBjaXJjdW1mbGV4LCBVKzAwRUEgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBldW1sICAgIiYjMjM1OyIgPjwhLS0gbGF0aW4gc21hbGwgZSB3aXRoIGRpYWVyZXNpcywgVSswMEVCIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgaWdyYXZlICImIzIzNjsiID48IS0tIGxhdGluIHNtYWxsIGkgd2l0aCBncmF2ZSwgVSswMEVDIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgaWFjdXRlICImIzIzNzsiID48IS0tIGxhdGluIHNtYWxsIGkgd2l0aCBhY3V0ZSwgVSswMEVEIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgaWNpcmMgICImIzIzODsiID48IS0tIGxhdGluIHNtYWxsIGkgd2l0aCBjaXJjdW1mbGV4LCBVKzAwRUUgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBpdW1sICAgIiYjMjM5OyIgPjwhLS0gbGF0aW4gc21hbGwgaSB3aXRoIGRpYWVyZXNpcywgVSswMEVGIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgZXRoICAgICImIzI0MDsiID48IS0tIGxhdGluIHNtYWxsIGV0aCwgVSswMEYwIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgbnRpbGRlICImIzI0MTsiID48IS0tIGxhdGluIHNtYWxsIG4gd2l0aCB0aWxkZSwgVSswMEYxIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgb2dyYXZlICImIzI0MjsiID48IS0tIGxhdGluIHNtYWxsIG8gd2l0aCBncmF2ZSwgVSswMEYyIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgb2FjdXRlICImIzI0MzsiID48IS0tIGxhdGluIHNtYWxsIG8gd2l0aCBhY3V0ZSwgVSswMEYzIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgb2NpcmMgICImIzI0NDsiID48IS0tIGxhdGluIHNtYWxsIG8gd2l0aCBjaXJjdW1mbGV4LCBVKzAwRjQgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBvdGlsZGUgIiYjMjQ1OyIgPjwhLS0gbGF0aW4gc21hbGwgbyB3aXRoIHRpbGRlLCBVKzAwRjUgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBvdW1sICAgIiYjMjQ2OyIgPjwhLS0gbGF0aW4gc21hbGwgbyB3aXRoIGRpYWVyZXNpcywgVSswMEY2IElTT2xhdDEgLS0+DQotPCFFTlRJVFkgZGl2aWRlICImIzI0NzsiID48IS0tIGRpdmlzaW9uIHNpZ24sIFUrMDBGNyBJU09udW0gLS0+DQotPCFFTlRJVFkgb3NsYXNoICImIzI0ODsiID48IS0tIGxhdGluIHNtYWxsIG8gd2l0aCBzdHJva2UsID0gbGF0aW4gc21hbGwgbyBzbGFzaCwgVSswMEY4IElTT2xhdDEgLS0+DQotPCFFTlRJVFkgdWdyYXZlICImIzI0OTsiID48IS0tIGxhdGluIHNtYWxsIHUgd2l0aCBncmF2ZSwgVSswMEY5IElTT2xhdDEgLS0+DQotPCFFTlRJVFkgdWFjdXRlICImIzI1MDsiID48IS0tIGxhdGluIHNtYWxsIHUgd2l0aCBhY3V0ZSwgVSswMEZBIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgdWNpcmMgICImIzI1MTsiID48IS0tIGxhdGluIHNtYWxsIHUgd2l0aCBjaXJjdW1mbGV4LCBVKzAwRkIgSVNPbGF0MSAtLT4NCi08IUVOVElUWSB1dW1sICAgIiYjMjUyOyIgPjwhLS0gbGF0aW4gc21hbGwgdSB3aXRoIGRpYWVyZXNpcywgVSswMEZDIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgeWFjdXRlICImIzI1MzsiID48IS0tIGxhdGluIHNtYWxsIHkgd2l0aCBhY3V0ZSwgVSswMEZEIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgdGhvcm4gICImIzI1NDsiID48IS0tIGxhdGluIHNtYWxsIHRob3JuIHdpdGgsIFUrMDBGRSBJU09sYXQxIC0tPg0KLTwhRU5USVRZIHl1bWwgICAiJiMyNTU7IiA+PCEtLSBsYXRpbiBzbWFsbCB5IHdpdGggZGlhZXJlc2lzLCBVKzAwRkYgSVNPbGF0MSAtLT4NCi08IS0tIGVuZCBvZiB4aHRtbC1sYXQxLmVudCAtLT4NCi0NCi0NCi08IUVOVElUWSAlIHhodG1sLXN5bWJvbA0KLSAgICBQVUJMSUMgIi0vL1czQy8vRU5USVRJRVMgU3ltYm9scyBmb3IgWEhUTUwvL0VOIg0KLSAgICAgICAgICAgInhodG1sLXN5bWJvbC5lbnQiID4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBJU08gTWF0aCwgR3JlZWsgYW5kIFN5bWJvbGljIENoYXJhY3RlciBFbnRpdHkgU2V0IGZvciBYSFRNTCAuLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtc3ltYm9sLmVudA0KLQ0KLSAgICAgVHlwaWNhbCBpbnZvY2F0aW9uOg0KLQ0KLSAgICAgICA8IUVOVElUWSAlIHhodG1sLXN5bWJvbA0KLSAgICAgICAgICAgUFVCTElDICItLy9XM0MvL0VOVElUSUVTIFN5bWJvbHMgZm9yIFhIVE1MLy9FTiINCi0gICAgICAgICAgICAgICAgICAieGh0bWwtc3ltYm9sLmVudCIgPg0KLSAgICAgICAleGh0bWwtc3ltYm9sOw0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRU5USVRJRVMgU3ltYm9scyBmb3IgWEhUTUwvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1zeW1ib2wuZW50Ig0KLQ0KLSAgICAgUmV2aXNpb246ICAkSWQ6IHhodG1sLW1vYmlsZTEwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTcgcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgUG9ydGlvbnMgKEMpIEludGVybmF0aW9uYWwgT3JnYW5pemF0aW9uIGZvciBTdGFuZGFyZGl6YXRpb24gMTk4NjoNCi0gICAgIFBlcm1pc3Npb24gdG8gY29weSBpbiBhbnkgZm9ybSBpcyBncmFudGVkIGZvciB1c2Ugd2l0aCBjb25mb3JtaW5nDQotICAgICBTR01MIHN5c3RlbXMgYW5kIGFwcGxpY2F0aW9ucyBhcyBkZWZpbmVkIGluIElTTyA4ODc5LCBwcm92aWRlZA0KLSAgICAgdGhpcyBub3RpY2UgaXMgaW5jbHVkZWQgaW4gYWxsIGNvcGllcy4NCi0tLT4NCi0NCi08IS0tIFJlbGV2YW50IElTTyBlbnRpdHkgc2V0IGlzIGdpdmVuIHVubGVzcyBuYW1lcyBhcmUgbmV3bHkgaW50cm9kdWNlZC4NCi0gICAgIE5ldyBuYW1lcyAoaS5lLiwgbm90IGluIElTTyA4ODc5IFtTR01MXSBsaXN0KSBkbyBub3QgY2xhc2ggd2l0aA0KLSAgICAgYW55IGV4aXN0aW5nIElTTyA4ODc5IGVudGl0eSBuYW1lcy4gSVNPIDEwNjQ2IFtJU08xMDY0Nl0gY2hhcmFjdGVyDQotICAgICBudW1iZXJzIGFyZSBnaXZlbiBmb3IgZWFjaCBjaGFyYWN0ZXIsIGluIGhleC4gRW50aXR5IHZhbHVlcyBhcmUNCi0gICAgIGRlY2ltYWwgY29udmVyc2lvbnMgb2YgdGhlIElTTyAxMDY0NiB2YWx1ZXMgYW5kIHJlZmVyIHRvIHRoZQ0KLSAgICAgZG9jdW1lbnQgY2hhcmFjdGVyIHNldC4gTmFtZXMgYXJlIFVuaWNvZGUgW1VOSUNPREVdIG5hbWVzLg0KLS0tPg0KLQ0KLTwhLS0gTGF0aW4gRXh0ZW5kZWQtQiAtLT4NCi08IUVOVElUWSBmbm9mICAgICAiJiM0MDI7IiA+PCEtLSBsYXRpbiBzbWFsbCBmIHdpdGggaG9vayA9IGZ1bmN0aW9uDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBmbG9yaW4sIFUrMDE5MiBJU090ZWNoIC0tPg0KLQ0KLTwhLS0gR3JlZWsgLS0+DQotPCFFTlRJVFkgQWxwaGEgICAgIiYjOTEzOyIgPjwhLS0gZ3JlZWsgY2FwaXRhbCBsZXR0ZXIgYWxwaGEsIFUrMDM5MSAtLT4NCi08IUVOVElUWSBCZXRhICAgICAiJiM5MTQ7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciBiZXRhLCBVKzAzOTIgLS0+DQotPCFFTlRJVFkgR2FtbWEgICAgIiYjOTE1OyIgPjwhLS0gZ3JlZWsgY2FwaXRhbCBsZXR0ZXIgZ2FtbWEsIFUrMDM5MyBJU09ncmszIC0tPg0KLTwhRU5USVRZIERlbHRhICAgICImIzkxNjsiID48IS0tIGdyZWVrIGNhcGl0YWwgbGV0dGVyIGRlbHRhLCBVKzAzOTQgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBFcHNpbG9uICAiJiM5MTc7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciBlcHNpbG9uLCBVKzAzOTUgLS0+DQotPCFFTlRJVFkgWmV0YSAgICAgIiYjOTE4OyIgPjwhLS0gZ3JlZWsgY2FwaXRhbCBsZXR0ZXIgemV0YSwgVSswMzk2IC0tPg0KLTwhRU5USVRZIEV0YSAgICAgICImIzkxOTsiID48IS0tIGdyZWVrIGNhcGl0YWwgbGV0dGVyIGV0YSwgVSswMzk3IC0tPg0KLTwhRU5USVRZIFRoZXRhICAgICImIzkyMDsiID48IS0tIGdyZWVrIGNhcGl0YWwgbGV0dGVyIHRoZXRhLCBVKzAzOTggSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBJb3RhICAgICAiJiM5MjE7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciBpb3RhLCBVKzAzOTkgLS0+DQotPCFFTlRJVFkgS2FwcGEgICAgIiYjOTIyOyIgPjwhLS0gZ3JlZWsgY2FwaXRhbCBsZXR0ZXIga2FwcGEsIFUrMDM5QSAtLT4NCi08IUVOVElUWSBMYW1iZGEgICAiJiM5MjM7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciBsYW1iZGEsIFUrMDM5QiBJU09ncmszIC0tPg0KLTwhRU5USVRZIE11ICAgICAgICImIzkyNDsiID48IS0tIGdyZWVrIGNhcGl0YWwgbGV0dGVyIG11LCBVKzAzOUMgLS0+DQotPCFFTlRJVFkgTnUgICAgICAgIiYjOTI1OyIgPjwhLS0gZ3JlZWsgY2FwaXRhbCBsZXR0ZXIgbnUsIFUrMDM5RCAtLT4NCi08IUVOVElUWSBYaSAgICAgICAiJiM5MjY7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciB4aSwgVSswMzlFIElTT2dyazMgLS0+DQotPCFFTlRJVFkgT21pY3JvbiAgIiYjOTI3OyIgPjwhLS0gZ3JlZWsgY2FwaXRhbCBsZXR0ZXIgb21pY3JvbiwgVSswMzlGIC0tPg0KLTwhRU5USVRZIFBpICAgICAgICImIzkyODsiID48IS0tIGdyZWVrIGNhcGl0YWwgbGV0dGVyIHBpLCBVKzAzQTAgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBSaG8gICAgICAiJiM5Mjk7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciByaG8sIFUrMDNBMSAtLT4NCi08IS0tIHRoZXJlIGlzIG5vIFNpZ21hZiwgYW5kIG5vIFUrMDNBMiBjaGFyYWN0ZXIgZWl0aGVyIC0tPg0KLTwhRU5USVRZIFNpZ21hICAgICImIzkzMTsiID48IS0tIGdyZWVrIGNhcGl0YWwgbGV0dGVyIHNpZ21hLCBVKzAzQTMgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBUYXUgICAgICAiJiM5MzI7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciB0YXUsIFUrMDNBNCAtLT4NCi08IUVOVElUWSBVcHNpbG9uICAiJiM5MzM7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciB1cHNpbG9uLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFUrMDNBNSBJU09ncmszIC0tPg0KLTwhRU5USVRZIFBoaSAgICAgICImIzkzNDsiID48IS0tIGdyZWVrIGNhcGl0YWwgbGV0dGVyIHBoaSwgVSswM0E2IElTT2dyazMgLS0+DQotPCFFTlRJVFkgQ2hpICAgICAgIiYjOTM1OyIgPjwhLS0gZ3JlZWsgY2FwaXRhbCBsZXR0ZXIgY2hpLCBVKzAzQTcgLS0+DQotPCFFTlRJVFkgUHNpICAgICAgIiYjOTM2OyIgPjwhLS0gZ3JlZWsgY2FwaXRhbCBsZXR0ZXIgcHNpLCBVKzAzQTggSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBPbWVnYSAgICAiJiM5Mzc7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciBvbWVnYSwgVSswM0E5IElTT2dyazMgLS0+DQotPCFFTlRJVFkgYWxwaGEgICAgIiYjOTQ1OyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIGFscGhhLCBVKzAzQjEgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBiZXRhICAgICAiJiM5NDY7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgYmV0YSwgVSswM0IyIElTT2dyazMgLS0+DQotPCFFTlRJVFkgZ2FtbWEgICAgIiYjOTQ3OyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIGdhbW1hLCBVKzAzQjMgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBkZWx0YSAgICAiJiM5NDg7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgZGVsdGEsIFUrMDNCNCBJU09ncmszIC0tPg0KLTwhRU5USVRZIGVwc2lsb24gICImIzk0OTsiID48IS0tIGdyZWVrIHNtYWxsIGxldHRlciBlcHNpbG9uLCBVKzAzQjUgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSB6ZXRhICAgICAiJiM5NTA7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgemV0YSwgVSswM0I2IElTT2dyazMgLS0+DQotPCFFTlRJVFkgZXRhICAgICAgIiYjOTUxOyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIGV0YSwgVSswM0I3IElTT2dyazMgLS0+DQotPCFFTlRJVFkgdGhldGEgICAgIiYjOTUyOyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIHRoZXRhLCBVKzAzQjggSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBpb3RhICAgICAiJiM5NTM7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgaW90YSwgVSswM0I5IElTT2dyazMgLS0+DQotPCFFTlRJVFkga2FwcGEgICAgIiYjOTU0OyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIGthcHBhLCBVKzAzQkEgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBsYW1iZGEgICAiJiM5NTU7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgbGFtYmRhLCBVKzAzQkIgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBtdSAgICAgICAiJiM5NTY7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgbXUsIFUrMDNCQyBJU09ncmszIC0tPg0KLTwhRU5USVRZIG51ICAgICAgICImIzk1NzsiID48IS0tIGdyZWVrIHNtYWxsIGxldHRlciBudSwgVSswM0JEIElTT2dyazMgLS0+DQotPCFFTlRJVFkgeGkgICAgICAgIiYjOTU4OyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIHhpLCBVKzAzQkUgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBvbWljcm9uICAiJiM5NTk7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgb21pY3JvbiwgVSswM0JGIE5FVyAtLT4NCi08IUVOVElUWSBwaSAgICAgICAiJiM5NjA7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgcGksIFUrMDNDMCBJU09ncmszIC0tPg0KLTwhRU5USVRZIHJobyAgICAgICImIzk2MTsiID48IS0tIGdyZWVrIHNtYWxsIGxldHRlciByaG8sIFUrMDNDMSBJU09ncmszIC0tPg0KLTwhRU5USVRZIHNpZ21hZiAgICImIzk2MjsiID48IS0tIGdyZWVrIHNtYWxsIGxldHRlciBmaW5hbCBzaWdtYSwgVSswM0MyIElTT2dyazMgLS0+DQotPCFFTlRJVFkgc2lnbWEgICAgIiYjOTYzOyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIHNpZ21hLCBVKzAzQzMgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSB0YXUgICAgICAiJiM5NjQ7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgdGF1LCBVKzAzQzQgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSB1cHNpbG9uICAiJiM5NjU7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgdXBzaWxvbiwgVSswM0M1IElTT2dyazMgLS0+DQotPCFFTlRJVFkgcGhpICAgICAgIiYjOTY2OyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIHBoaSwgVSswM0M2IElTT2dyazMgLS0+DQotPCFFTlRJVFkgY2hpICAgICAgIiYjOTY3OyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIGNoaSwgVSswM0M3IElTT2dyazMgLS0+DQotPCFFTlRJVFkgcHNpICAgICAgIiYjOTY4OyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIHBzaSwgVSswM0M4IElTT2dyazMgLS0+DQotPCFFTlRJVFkgb21lZ2EgICAgIiYjOTY5OyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIG9tZWdhLCBVKzAzQzkgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSB0aGV0YXN5bSAiJiM5Nzc7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgdGhldGEgc3ltYm9sLCBVKzAzRDEgTkVXIC0tPg0KLTwhRU5USVRZIHVwc2loICAgICImIzk3ODsiID48IS0tIGdyZWVrIHVwc2lsb24gd2l0aCBob29rIHN5bWJvbCwgVSswM0QyIE5FVyAtLT4NCi08IUVOVElUWSBwaXYgICAgICAiJiM5ODI7IiA+PCEtLSBncmVlayBwaSBzeW1ib2wsIFUrMDNENiBJU09ncmszIC0tPg0KLQ0KLTwhLS0gR2VuZXJhbCBQdW5jdHVhdGlvbiAtLT4NCi08IUVOVElUWSBidWxsICAgICAiJiM4MjI2OyIgPjwhLS0gYnVsbGV0ID0gYmxhY2sgc21hbGwgY2lyY2xlLCBVKzIwMjIgSVNPcHViICAtLT4NCi08IS0tIGJ1bGxldCBpcyBOT1QgdGhlIHNhbWUgYXMgYnVsbGV0IG9wZXJhdG9yLCBVKzIyMTkgLS0+DQotPCFFTlRJVFkgaGVsbGlwICAgIiYjODIzMDsiID48IS0tIGhvcml6b250YWwgZWxsaXBzaXMgPSB0aHJlZSBkb3QgbGVhZGVyLCBVKzIwMjYgSVNPcHViICAtLT4NCi08IUVOVElUWSBwcmltZSAgICAiJiM4MjQyOyIgPjwhLS0gcHJpbWUgPSBtaW51dGVzID0gZmVldCwgVSsyMDMyIElTT3RlY2ggLS0+DQotPCFFTlRJVFkgUHJpbWUgICAgIiYjODI0MzsiID48IS0tIGRvdWJsZSBwcmltZSA9IHNlY29uZHMgPSBpbmNoZXMsIFUrMjAzMyBJU090ZWNoIC0tPg0KLTwhRU5USVRZIG9saW5lICAgICImIzgyNTQ7IiA+PCEtLSBvdmVybGluZSA9IHNwYWNpbmcgb3ZlcnNjb3JlLCBVKzIwM0UgTkVXIC0tPg0KLTwhRU5USVRZIGZyYXNsICAgICImIzgyNjA7IiA+PCEtLSBmcmFjdGlvbiBzbGFzaCwgVSsyMDQ0IE5FVyAtLT4NCi0NCi08IS0tIExldHRlcmxpa2UgU3ltYm9scyAtLT4NCi08IUVOVElUWSB3ZWllcnAgICAiJiM4NDcyOyIgPjwhLS0gc2NyaXB0IGNhcGl0YWwgUCA9IHBvd2VyIHNldCA9IFdlaWVyc3RyYXNzIHAsIFUrMjExOCBJU09hbXNvIC0tPg0KLTwhRU5USVRZIGltYWdlICAgICImIzg0NjU7IiA+PCEtLSBibGFja2xldHRlciBjYXBpdGFsIEkgPSBpbWFnaW5hcnkgcGFydCwgVSsyMTExIElTT2Ftc28gLS0+DQotPCFFTlRJVFkgcmVhbCAgICAgIiYjODQ3NjsiID48IS0tIGJsYWNrbGV0dGVyIGNhcGl0YWwgUiA9IHJlYWwgcGFydCBzeW1ib2wsIFUrMjExQyBJU09hbXNvIC0tPg0KLTwhRU5USVRZIHRyYWRlICAgICImIzg0ODI7IiA+PCEtLSB0cmFkZSBtYXJrIHNpZ24sIFUrMjEyMiBJU09udW0gLS0+DQotPCFFTlRJVFkgYWxlZnN5bSAgIiYjODUwMTsiID48IS0tIGFsZWYgc3ltYm9sID0gZmlyc3QgdHJhbnNmaW5pdGUgY2FyZGluYWwsIFUrMjEzNSBORVcgLS0+DQotPCEtLSBhbGVmIHN5bWJvbCBpcyBOT1QgdGhlIHNhbWUgYXMgaGVicmV3IGxldHRlciBhbGVmLCBVKzA1RDAgYWx0aG91Z2gNCi0gICAgIHRoZSBzYW1lIGdseXBoIGNvdWxkIGJlIHVzZWQgdG8gZGVwaWN0IGJvdGggY2hhcmFjdGVycyAtLT4NCi0NCi08IS0tIEFycm93cyAtLT4NCi08IUVOVElUWSBsYXJyICAgICAiJiM4NTkyOyIgPjwhLS0gbGVmdHdhcmRzIGFycm93LCBVKzIxOTAgSVNPbnVtIC0tPg0KLTwhRU5USVRZIHVhcnIgICAgICImIzg1OTM7IiA+PCEtLSB1cHdhcmRzIGFycm93LCBVKzIxOTEgSVNPbnVtLS0+DQotPCFFTlRJVFkgcmFyciAgICAgIiYjODU5NDsiID48IS0tIHJpZ2h0d2FyZHMgYXJyb3csIFUrMjE5MiBJU09udW0gLS0+DQotPCFFTlRJVFkgZGFyciAgICAgIiYjODU5NTsiID48IS0tIGRvd253YXJkcyBhcnJvdywgVSsyMTkzIElTT251bSAtLT4NCi08IUVOVElUWSBoYXJyICAgICAiJiM4NTk2OyIgPjwhLS0gbGVmdCByaWdodCBhcnJvdywgVSsyMTk0IElTT2Ftc2EgLS0+DQotPCFFTlRJVFkgY3JhcnIgICAgIiYjODYyOTsiID48IS0tIGRvd253YXJkcyBhcnJvdyB3aXRoIGNvcm5lciBsZWZ0d2FyZHMNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBjYXJyaWFnZSByZXR1cm4sIFUrMjFCNSBORVcgLS0+DQotPCFFTlRJVFkgbEFyciAgICAgIiYjODY1NjsiID48IS0tIGxlZnR3YXJkcyBkb3VibGUgYXJyb3csIFUrMjFEMCBJU090ZWNoIC0tPg0KLTwhLS0gVW5pY29kZSBkb2VzIG5vdCBzYXkgdGhhdCBsQXJyIGlzIHRoZSBzYW1lIGFzIHRoZSAnaXMgaW1wbGllZCBieScgYXJyb3cNCi0gICAgYnV0IGFsc28gZG9lcyBub3QgaGF2ZSBhbnkgb3RoZXIgY2hhcmFjdGVyIGZvciB0aGF0IGZ1bmN0aW9uLiBTbyA/IGxBcnIgY2FuDQotICAgIGJlIHVzZWQgZm9yICdpcyBpbXBsaWVkIGJ5JyBhcyBJU090ZWNoIHN1Z2dlc3RzIC0tPg0KLTwhRU5USVRZIHVBcnIgICAgICImIzg2NTc7IiA+PCEtLSB1cHdhcmRzIGRvdWJsZSBhcnJvdywgVSsyMUQxIElTT2Ftc2EgLS0+DQotPCFFTlRJVFkgckFyciAgICAgIiYjODY1ODsiID48IS0tIHJpZ2h0d2FyZHMgZG91YmxlIGFycm93LCBVKzIxRDIgSVNPdGVjaCAtLT4NCi08IS0tIFVuaWNvZGUgZG9lcyBub3Qgc2F5IHRoaXMgaXMgdGhlICdpbXBsaWVzJyBjaGFyYWN0ZXIgYnV0IGRvZXMgbm90IGhhdmUNCi0gICAgIGFub3RoZXIgY2hhcmFjdGVyIHdpdGggdGhpcyBmdW5jdGlvbiBzbyA/DQotICAgICByQXJyIGNhbiBiZSB1c2VkIGZvciAnaW1wbGllcycgYXMgSVNPdGVjaCBzdWdnZXN0cyAtLT4NCi08IUVOVElUWSBkQXJyICAgICAiJiM4NjU5OyIgPjwhLS0gZG93bndhcmRzIGRvdWJsZSBhcnJvdywgVSsyMUQzIElTT2Ftc2EgLS0+DQotPCFFTlRJVFkgaEFyciAgICAgIiYjODY2MDsiID48IS0tIGxlZnQgcmlnaHQgZG91YmxlIGFycm93LCBVKzIxRDQgSVNPYW1zYSAtLT4NCi0NCi08IS0tIE1hdGhlbWF0aWNhbCBPcGVyYXRvcnMgLS0+DQotPCFFTlRJVFkgZm9yYWxsICAgIiYjODcwNDsiID48IS0tIGZvciBhbGwsIFUrMjIwMCBJU090ZWNoIC0tPg0KLTwhRU5USVRZIHBhcnQgICAgICImIzg3MDY7IiA+PCEtLSBwYXJ0aWFsIGRpZmZlcmVudGlhbCwgVSsyMjAyIElTT3RlY2ggIC0tPg0KLTwhRU5USVRZIGV4aXN0ICAgICImIzg3MDc7IiA+PCEtLSB0aGVyZSBleGlzdHMsIFUrMjIwMyBJU090ZWNoIC0tPg0KLTwhRU5USVRZIGVtcHR5ICAgICImIzg3MDk7IiA+PCEtLSBlbXB0eSBzZXQgPSBudWxsIHNldCA9IGRpYW1ldGVyLCBVKzIyMDUgSVNPYW1zbyAtLT4NCi08IUVOVElUWSBuYWJsYSAgICAiJiM4NzExOyIgPjwhLS0gbmFibGEgPSBiYWNrd2FyZCBkaWZmZXJlbmNlLCBVKzIyMDcgSVNPdGVjaCAtLT4NCi08IUVOVElUWSBpc2luICAgICAiJiM4NzEyOyIgPjwhLS0gZWxlbWVudCBvZiwgVSsyMjA4IElTT3RlY2ggLS0+DQotPCFFTlRJVFkgbm90aW4gICAgIiYjODcxMzsiID48IS0tIG5vdCBhbiBlbGVtZW50IG9mLCBVKzIyMDkgSVNPdGVjaCAtLT4NCi08IUVOVElUWSBuaSAgICAgICAiJiM4NzE1OyIgPjwhLS0gY29udGFpbnMgYXMgbWVtYmVyLCBVKzIyMEIgSVNPdGVjaCAtLT4NCi08IS0tIHNob3VsZCB0aGVyZSBiZSBhIG1vcmUgbWVtb3JhYmxlIG5hbWUgdGhhbiAnbmknPyAtLT4NCi08IUVOVElUWSBwcm9kICAgICAiJiM4NzE5OyIgPjwhLS0gbi1hcnkgcHJvZHVjdCA9IHByb2R1Y3Qgc2lnbiwgVSsyMjBGIElTT2Ftc2IgLS0+DQotPCEtLSBwcm9kIGlzIE5PVCB0aGUgc2FtZSBjaGFyYWN0ZXIgYXMgVSswM0EwICdncmVlayBjYXBpdGFsIGxldHRlciBwaScgdGhvdWdoDQotICAgICB0aGUgc2FtZSBnbHlwaCBtaWdodCBiZSB1c2VkIGZvciBib3RoIC0tPg0KLTwhRU5USVRZIHN1bSAgICAgICImIzg3MjE7IiA+PCEtLSBuLWFyeSBzdW1hdGlvbiwgVSsyMjExIElTT2Ftc2IgLS0+DQotPCEtLSBzdW0gaXMgTk9UIHRoZSBzYW1lIGNoYXJhY3RlciBhcyBVKzAzQTMgJ2dyZWVrIGNhcGl0YWwgbGV0dGVyIHNpZ21hJw0KLSAgICAgdGhvdWdoIHRoZSBzYW1lIGdseXBoIG1pZ2h0IGJlIHVzZWQgZm9yIGJvdGggLS0+DQotPCFFTlRJVFkgbWludXMgICAgIiYjODcyMjsiID48IS0tIG1pbnVzIHNpZ24sIFUrMjIxMiBJU090ZWNoIC0tPg0KLTwhRU5USVRZIGxvd2FzdCAgICImIzg3Mjc7IiA+PCEtLSBhc3RlcmlzayBvcGVyYXRvciwgVSsyMjE3IElTT3RlY2ggLS0+DQotPCFFTlRJVFkgcmFkaWMgICAgIiYjODczMDsiID48IS0tIHNxdWFyZSByb290ID0gcmFkaWNhbCBzaWduLCBVKzIyMUEgSVNPdGVjaCAtLT4NCi08IUVOVElUWSBwcm9wICAgICAiJiM4NzMzOyIgPjwhLS0gcHJvcG9ydGlvbmFsIHRvLCBVKzIyMUQgSVNPdGVjaCAtLT4NCi08IUVOVElUWSBpbmZpbiAgICAiJiM4NzM0OyIgPjwhLS0gaW5maW5pdHksIFUrMjIxRSBJU090ZWNoIC0tPg0KLTwhRU5USVRZIGFuZyAgICAgICImIzg3MzY7IiA+PCEtLSBhbmdsZSwgVSsyMjIwIElTT2Ftc28gLS0+DQotPCFFTlRJVFkgYW5kICAgICAgIiYjODc0MzsiID48IS0tIGxvZ2ljYWwgYW5kID0gd2VkZ2UsIFUrMjIyNyBJU090ZWNoIC0tPg0KLTwhRU5USVRZIG9yICAgICAgICImIzg3NDQ7IiA+PCEtLSBsb2dpY2FsIG9yID0gdmVlLCBVKzIyMjggSVNPdGVjaCAtLT4NCi08IUVOVElUWSBjYXAgICAgICAiJiM4NzQ1OyIgPjwhLS0gaW50ZXJzZWN0aW9uID0gY2FwLCBVKzIyMjkgSVNPdGVjaCAtLT4NCi08IUVOVElUWSBjdXAgICAgICAiJiM4NzQ2OyIgPjwhLS0gdW5pb24gPSBjdXAsIFUrMjIyQSBJU090ZWNoIC0tPg0KLTwhRU5USVRZIGludCAgICAgICImIzg3NDc7IiA+PCEtLSBpbnRlZ3JhbCwgVSsyMjJCIElTT3RlY2ggLS0+DQotPCFFTlRJVFkgdGhlcmU0ICAgIiYjODc1NjsiID48IS0tIHRoZXJlZm9yZSwgVSsyMjM0IElTT3RlY2ggLS0+DQotPCFFTlRJVFkgc2ltICAgICAgIiYjODc2NDsiID48IS0tIHRpbGRlIG9wZXJhdG9yID0gdmFyaWVzIHdpdGggPSBzaW1pbGFyIHRvLCBVKzIyM0MgSVNPdGVjaCAtLT4NCi08IS0tIHRpbGRlIG9wZXJhdG9yIGlzIE5PVCB0aGUgc2FtZSBjaGFyYWN0ZXIgYXMgdGhlIHRpbGRlLCBVKzAwN0UsDQotICAgICBhbHRob3VnaCB0aGUgc2FtZSBnbHlwaCBtaWdodCBiZSB1c2VkIHRvIHJlcHJlc2VudCBib3RoICAtLT4NCi08IUVOVElUWSBjb25nICAgICAiJiM4NzczOyIgPjwhLS0gYXBwcm94aW1hdGVseSBlcXVhbCB0bywgVSsyMjQ1IElTT3RlY2ggLS0+DQotPCFFTlRJVFkgYXN5bXAgICAgIiYjODc3NjsiID48IS0tIGFsbW9zdCBlcXVhbCB0byA9IGFzeW1wdG90aWMgdG8sIFUrMjI0OCBJU09hbXNyIC0tPg0KLTwhRU5USVRZIG5lICAgICAgICImIzg4MDA7IiA+PCEtLSBub3QgZXF1YWwgdG8sIFUrMjI2MCBJU090ZWNoIC0tPg0KLTwhRU5USVRZIGVxdWl2ICAgICImIzg4MDE7IiA+PCEtLSBpZGVudGljYWwgdG8sIFUrMjI2MSBJU090ZWNoIC0tPg0KLTwhRU5USVRZIGxlICAgICAgICImIzg4MDQ7IiA+PCEtLSBsZXNzLXRoYW4gb3IgZXF1YWwgdG8sIFUrMjI2NCBJU090ZWNoIC0tPg0KLTwhRU5USVRZIGdlICAgICAgICImIzg4MDU7IiA+PCEtLSBncmVhdGVyLXRoYW4gb3IgZXF1YWwgdG8sIFUrMjI2NSBJU090ZWNoIC0tPg0KLTwhRU5USVRZIHN1YiAgICAgICImIzg4MzQ7IiA+PCEtLSBzdWJzZXQgb2YsIFUrMjI4MiBJU090ZWNoIC0tPg0KLTwhRU5USVRZIHN1cCAgICAgICImIzg4MzU7IiA+PCEtLSBzdXBlcnNldCBvZiwgVSsyMjgzIElTT3RlY2ggLS0+DQotPCEtLSBub3RlIHRoYXQgbnN1cCwgJ25vdCBhIHN1cGVyc2V0IG9mLCBVKzIyODMnIGlzIG5vdCBjb3ZlcmVkIGJ5IHRoZSBTeW1ib2wNCi0gICAgIGZvbnQgZW5jb2RpbmcgYW5kIGlzIG5vdCBpbmNsdWRlZC4gU2hvdWxkIGl0IGJlLCBmb3Igc3ltbWV0cnk/DQotICAgICBJdCBpcyBpbiBJU09hbXNuICAtLT4NCi08IUVOVElUWSBuc3ViICAgICAiJiM4ODM2OyIgPjwhLS0gbm90IGEgc3Vic2V0IG9mLCBVKzIyODQgSVNPYW1zbiAtLT4NCi08IUVOVElUWSBzdWJlICAgICAiJiM4ODM4OyIgPjwhLS0gc3Vic2V0IG9mIG9yIGVxdWFsIHRvLCBVKzIyODYgSVNPdGVjaCAtLT4NCi08IUVOVElUWSBzdXBlICAgICAiJiM4ODM5OyIgPjwhLS0gc3VwZXJzZXQgb2Ygb3IgZXF1YWwgdG8sIFUrMjI4NyBJU090ZWNoIC0tPg0KLTwhRU5USVRZIG9wbHVzICAgICImIzg4NTM7IiA+PCEtLSBjaXJjbGVkIHBsdXMgPSBkaXJlY3Qgc3VtLCBVKzIyOTUgSVNPYW1zYiAtLT4NCi08IUVOVElUWSBvdGltZXMgICAiJiM4ODU1OyIgPjwhLS0gY2lyY2xlZCB0aW1lcyA9IHZlY3RvciBwcm9kdWN0LCBVKzIyOTcgSVNPYW1zYiAtLT4NCi08IUVOVElUWSBwZXJwICAgICAiJiM4ODY5OyIgPjwhLS0gdXAgdGFjayA9IG9ydGhvZ29uYWwgdG8gPSBwZXJwZW5kaWN1bGFyLCBVKzIyQTUgSVNPdGVjaCAtLT4NCi08IUVOVElUWSBzZG90ICAgICAiJiM4OTAxOyIgPjwhLS0gZG90IG9wZXJhdG9yLCBVKzIyQzUgSVNPYW1zYiAtLT4NCi08IS0tIGRvdCBvcGVyYXRvciBpcyBOT1QgdGhlIHNhbWUgY2hhcmFjdGVyIGFzIFUrMDBCNyBtaWRkbGUgZG90IC0tPg0KLQ0KLTwhLS0gTWlzY2VsbGFuZW91cyBUZWNobmljYWwgLS0+DQotPCFFTlRJVFkgbGNlaWwgICAgIiYjODk2ODsiID48IS0tIGxlZnQgY2VpbGluZyA9IGFwbCB1cHN0aWxlLCBVKzIzMDggSVNPYW1zYyAgLS0+DQotPCFFTlRJVFkgcmNlaWwgICAgIiYjODk2OTsiID48IS0tIHJpZ2h0IGNlaWxpbmcsIFUrMjMwOSBJU09hbXNjICAtLT4NCi08IUVOVElUWSBsZmxvb3IgICAiJiM4OTcwOyIgPjwhLS0gbGVmdCBmbG9vciA9IGFwbCBkb3duc3RpbGUsIFUrMjMwQSBJU09hbXNjICAtLT4NCi08IUVOVElUWSByZmxvb3IgICAiJiM4OTcxOyIgPjwhLS0gcmlnaHQgZmxvb3IsIFUrMjMwQiBJU09hbXNjICAtLT4NCi08IUVOVElUWSBsYW5nICAgICAiJiM5MDAxOyIgPjwhLS0gbGVmdC1wb2ludGluZyBhbmdsZSBicmFja2V0ID0gYnJhLCBVKzIzMjkgSVNPdGVjaCAtLT4NCi08IS0tIGxhbmcgaXMgTk9UIHRoZSBzYW1lIGNoYXJhY3RlciBhcyBVKzAwM0MgJ2xlc3MgdGhhbicNCi0gICAgIG9yIFUrMjAzOSAnc2luZ2xlIGxlZnQtcG9pbnRpbmcgYW5nbGUgcXVvdGF0aW9uIG1hcmsnIC0tPg0KLTwhRU5USVRZIHJhbmcgICAgICImIzkwMDI7IiA+PCEtLSByaWdodC1wb2ludGluZyBhbmdsZSBicmFja2V0ID0ga2V0LCBVKzIzMkEgSVNPdGVjaCAtLT4NCi08IS0tIHJhbmcgaXMgTk9UIHRoZSBzYW1lIGNoYXJhY3RlciBhcyBVKzAwM0UgJ2dyZWF0ZXIgdGhhbicNCi0gICAgIG9yIFUrMjAzQSAnc2luZ2xlIHJpZ2h0LXBvaW50aW5nIGFuZ2xlIHF1b3RhdGlvbiBtYXJrJyAtLT4NCi0NCi08IS0tIEdlb21ldHJpYyBTaGFwZXMgLS0+DQotPCFFTlRJVFkgbG96ICAgICAgIiYjOTY3NDsiID48IS0tIGxvemVuZ2UsIFUrMjVDQSBJU09wdWIgLS0+DQotDQotPCEtLSBNaXNjZWxsYW5lb3VzIFN5bWJvbHMgLS0+DQotPCFFTlRJVFkgc3BhZGVzICAgIiYjOTgyNDsiID48IS0tIGJsYWNrIHNwYWRlIHN1aXQsIFUrMjY2MCBJU09wdWIgLS0+DQotPCEtLSBibGFjayBoZXJlIHNlZW1zIHRvIG1lYW4gZmlsbGVkIGFzIG9wcG9zZWQgdG8gaG9sbG93IC0tPg0KLTwhRU5USVRZIGNsdWJzICAgICImIzk4Mjc7IiA+PCEtLSBibGFjayBjbHViIHN1aXQgPSBzaGFtcm9jaywgVSsyNjYzIElTT3B1YiAtLT4NCi08IUVOVElUWSBoZWFydHMgICAiJiM5ODI5OyIgPjwhLS0gYmxhY2sgaGVhcnQgc3VpdCA9IHZhbGVudGluZSwgVSsyNjY1IElTT3B1YiAtLT4NCi08IUVOVElUWSBkaWFtcyAgICAiJiM5ODMwOyIgPjwhLS0gYmxhY2sgZGlhbW9uZCBzdWl0LCBVKzI2NjYgSVNPcHViIC0tPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLXN5bWJvbC5lbnQgLS0+DQotDQotDQotPCFFTlRJVFkgJSB4aHRtbC1zcGVjaWFsDQotICAgIFBVQkxJQyAiLS8vVzNDLy9FTlRJVElFUyBTcGVjaWFsIGZvciBYSFRNTC8vRU4iDQotICAgICAgICAgICAieGh0bWwtc3BlY2lhbC5lbnQiID4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYTUwtY29tcGF0aWJsZSBJU08gU3BlY2lhbCBDaGFyYWN0ZXIgRW50aXR5IFNldCBmb3IgWEhUTUwgLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtc3BlY2lhbC5lbnQNCi0NCi0gICAgIFR5cGljYWwgaW52b2NhdGlvbjoNCi0NCi0gICAgICAgPCFFTlRJVFkgJSB4aHRtbC1zcGVjaWFsDQotICAgICAgICAgICBQVUJMSUMgIi0vL1czQy8vRU5USVRJRVMgU3BlY2lhbCBmb3IgWEhUTUwvL0VOIg0KLSAgICAgICAgICAgICAgICAgICJ4aHRtbC1zcGVjaWFsLmVudCIgPg0KLSAgICAgICAleGh0bWwtc3BlY2lhbDsNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VOVElUSUVTIFNwZWNpYWwgZm9yIFhIVE1MLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtc3BlY2lhbC5lbnQiDQotDQotICAgICBSZXZpc2lvbjogICRJZDogeGh0bWwtbW9iaWxlMTAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1NyBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBQb3J0aW9ucyAoQykgSW50ZXJuYXRpb25hbCBPcmdhbml6YXRpb24gZm9yIFN0YW5kYXJkaXphdGlvbiAxOTg2Og0KLSAgICAgUGVybWlzc2lvbiB0byBjb3B5IGluIGFueSBmb3JtIGlzIGdyYW50ZWQgZm9yIHVzZSB3aXRoIGNvbmZvcm1pbmcNCi0gICAgIFNHTUwgc3lzdGVtcyBhbmQgYXBwbGljYXRpb25zIGFzIGRlZmluZWQgaW4gSVNPIDg4NzksIHByb3ZpZGVkDQotICAgICB0aGlzIG5vdGljZSBpcyBpbmNsdWRlZCBpbiBhbGwgY29waWVzLg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLTIwMDAtMTAtMjg6IGFkZGVkICZhcG9zOyBhbmQgYWx0ZXJlZCBYTUwgUHJlZGVmaW5lZCBFbnRpdGllcyBmb3IgY29tcGF0aWJpbGl0eQ0KLS0tPg0KLQ0KLTwhLS0gUmVsZXZhbnQgSVNPIGVudGl0eSBzZXQgaXMgZ2l2ZW4gdW5sZXNzIG5hbWVzIGFyZSBuZXdseSBpbnRyb2R1Y2VkLg0KLSAgICAgTmV3IG5hbWVzIChpLmUuLCBub3QgaW4gSVNPIDg4NzkgW1NHTUxdIGxpc3QpIGRvIG5vdCBjbGFzaCB3aXRoDQotICAgICBhbnkgZXhpc3RpbmcgSVNPIDg4NzkgZW50aXR5IG5hbWVzLiBJU08gMTA2NDYgW0lTTzEwNjQ2XSBjaGFyYWN0ZXINCi0gICAgIG51bWJlcnMgYXJlIGdpdmVuIGZvciBlYWNoIGNoYXJhY3RlciwgaW4gaGV4LiBFbnRpdHkgdmFsdWVzIGFyZQ0KLSAgICAgZGVjaW1hbCBjb252ZXJzaW9ucyBvZiB0aGUgSVNPIDEwNjQ2IHZhbHVlcyBhbmQgcmVmZXIgdG8gdGhlDQotICAgICBkb2N1bWVudCBjaGFyYWN0ZXIgc2V0LiBOYW1lcyBhcmUgVW5pY29kZSBbVU5JQ09ERV0gbmFtZXMuDQotLS0+DQotDQotPCEtLSBDMCBDb250cm9scyBhbmQgQmFzaWMgTGF0aW4gLS0+DQotPCFFTlRJVFkgbHQgICAgICAiJiMzODsmIzYwOyIgPjwhLS0gbGVzcy10aGFuIHNpZ24sIFUrMDAzQyBJU09udW0gLS0+DQotPCFFTlRJVFkgZ3QgICAgICAiJiM2MjsiID48IS0tIGdyZWF0ZXItdGhhbiBzaWduLCBVKzAwM0UgSVNPbnVtIC0tPg0KLTwhRU5USVRZIGFtcCAgICAgIiYjMzg7JiMzODsiID48IS0tIGFtcGVyc2FuZCwgVSswMDI2IElTT251bSAtLT4NCi08IUVOVElUWSBhcG9zICAgICImIzM5OyIgPjwhLS0gYXBvc3Ryb3BoZSwgVSswMDI3IElTT251bSAtLT4NCi08IUVOVElUWSBxdW90ICAgICImIzM0OyIgPjwhLS0gcXVvdGF0aW9uIG1hcmsgPSBBUEwgcXVvdGUsIFUrMDAyMiBJU09udW0gLS0+DQotDQotPCEtLSBMYXRpbiBFeHRlbmRlZC1BIC0tPg0KLTwhRU5USVRZIE9FbGlnICAgIiYjMzM4OyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBsaWdhdHVyZSBPRSwgVSswMTUyIElTT2xhdDIgLS0+DQotPCFFTlRJVFkgb2VsaWcgICAiJiMzMzk7IiA+PCEtLSBsYXRpbiBzbWFsbCBsaWdhdHVyZSBvZSwgVSswMTUzIElTT2xhdDIgLS0+DQotDQotPCEtLSBsaWdhdHVyZSBpcyBhIG1pc25vbWVyLCB0aGlzIGlzIGEgc2VwYXJhdGUgY2hhcmFjdGVyIGluIHNvbWUgbGFuZ3VhZ2VzIC0tPg0KLTwhRU5USVRZIFNjYXJvbiAgIiYjMzUyOyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBsZXR0ZXIgUyB3aXRoIGNhcm9uLCBVKzAxNjAgSVNPbGF0MiAtLT4NCi08IUVOVElUWSBzY2Fyb24gICImIzM1MzsiID48IS0tIGxhdGluIHNtYWxsIGxldHRlciBzIHdpdGggY2Fyb24sIFUrMDE2MSBJU09sYXQyIC0tPg0KLTwhRU5USVRZIFl1bWwgICAgIiYjMzc2OyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBsZXR0ZXIgWSB3aXRoIGRpYWVyZXNpcywgVSswMTc4IElTT2xhdDIgLS0+DQotDQotPCEtLSBTcGFjaW5nIE1vZGlmaWVyIExldHRlcnMgLS0+DQotPCFFTlRJVFkgY2lyYyAgICAiJiM3MTA7IiA+PCEtLSBtb2RpZmllciBsZXR0ZXIgY2lyY3VtZmxleCBhY2NlbnQsIFUrMDJDNiBJU09wdWIgLS0+DQotPCFFTlRJVFkgdGlsZGUgICAiJiM3MzI7IiA+PCEtLSBzbWFsbCB0aWxkZSwgVSswMkRDIElTT2RpYSAtLT4NCi0NCi08IS0tIEdlbmVyYWwgUHVuY3R1YXRpb24gLS0+DQotPCFFTlRJVFkgZW5zcCAgICAiJiM4MTk0OyIgPjwhLS0gZW4gc3BhY2UsIFUrMjAwMiBJU09wdWIgLS0+DQotPCFFTlRJVFkgZW1zcCAgICAiJiM4MTk1OyIgPjwhLS0gZW0gc3BhY2UsIFUrMjAwMyBJU09wdWIgLS0+DQotPCFFTlRJVFkgdGhpbnNwICAiJiM4MjAxOyIgPjwhLS0gdGhpbiBzcGFjZSwgVSsyMDA5IElTT3B1YiAtLT4NCi08IUVOVElUWSB6d25qICAgICImIzgyMDQ7IiA+PCEtLSB6ZXJvIHdpZHRoIG5vbi1qb2luZXIsIFUrMjAwQyBORVcgUkZDIDIwNzAgLS0+DQotPCFFTlRJVFkgendqICAgICAiJiM4MjA1OyIgPjwhLS0gemVybyB3aWR0aCBqb2luZXIsIFUrMjAwRCBORVcgUkZDIDIwNzAgLS0+DQotPCFFTlRJVFkgbHJtICAgICAiJiM4MjA2OyIgPjwhLS0gbGVmdC10by1yaWdodCBtYXJrLCBVKzIwMEUgTkVXIFJGQyAyMDcwIC0tPg0KLTwhRU5USVRZIHJsbSAgICAgIiYjODIwNzsiID48IS0tIHJpZ2h0LXRvLWxlZnQgbWFyaywgVSsyMDBGIE5FVyBSRkMgMjA3MCAtLT4NCi08IUVOVElUWSBuZGFzaCAgICImIzgyMTE7IiA+PCEtLSBlbiBkYXNoLCBVKzIwMTMgSVNPcHViIC0tPg0KLTwhRU5USVRZIG1kYXNoICAgIiYjODIxMjsiID48IS0tIGVtIGRhc2gsIFUrMjAxNCBJU09wdWIgLS0+DQotPCFFTlRJVFkgbHNxdW8gICAiJiM4MjE2OyIgPjwhLS0gbGVmdCBzaW5nbGUgcXVvdGF0aW9uIG1hcmssIFUrMjAxOCBJU09udW0gLS0+DQotPCFFTlRJVFkgcnNxdW8gICAiJiM4MjE3OyIgPjwhLS0gcmlnaHQgc2luZ2xlIHF1b3RhdGlvbiBtYXJrLCBVKzIwMTkgSVNPbnVtIC0tPg0KLTwhRU5USVRZIHNicXVvICAgIiYjODIxODsiID48IS0tIHNpbmdsZSBsb3ctOSBxdW90YXRpb24gbWFyaywgVSsyMDFBIE5FVyAtLT4NCi08IUVOVElUWSBsZHF1byAgICImIzgyMjA7IiA+PCEtLSBsZWZ0IGRvdWJsZSBxdW90YXRpb24gbWFyaywgVSsyMDFDIElTT251bSAtLT4NCi08IUVOVElUWSByZHF1byAgICImIzgyMjE7IiA+PCEtLSByaWdodCBkb3VibGUgcXVvdGF0aW9uIG1hcmssIFUrMjAxRCBJU09udW0gLS0+DQotPCFFTlRJVFkgYmRxdW8gICAiJiM4MjIyOyIgPjwhLS0gZG91YmxlIGxvdy05IHF1b3RhdGlvbiBtYXJrLCBVKzIwMUUgTkVXIC0tPg0KLTwhRU5USVRZIGRhZ2dlciAgIiYjODIyNDsiID48IS0tIGRhZ2dlciwgVSsyMDIwIElTT3B1YiAtLT4NCi08IUVOVElUWSBEYWdnZXIgICImIzgyMjU7IiA+PCEtLSBkb3VibGUgZGFnZ2VyLCBVKzIwMjEgSVNPcHViIC0tPg0KLTwhRU5USVRZIHBlcm1pbCAgIiYjODI0MDsiID48IS0tIHBlciBtaWxsZSBzaWduLCBVKzIwMzAgSVNPdGVjaCAtLT4NCi0NCi08IS0tIGxzYXF1byBpcyBwcm9wb3NlZCBidXQgbm90IHlldCBJU08gc3RhbmRhcmRpemVkIC0tPg0KLTwhRU5USVRZIGxzYXF1byAgIiYjODI0OTsiID48IS0tIHNpbmdsZSBsZWZ0LXBvaW50aW5nIGFuZ2xlIHF1b3RhdGlvbiBtYXJrLCBVKzIwMzkgSVNPIHByb3Bvc2VkIC0tPg0KLTwhLS0gcnNhcXVvIGlzIHByb3Bvc2VkIGJ1dCBub3QgeWV0IElTTyBzdGFuZGFyZGl6ZWQgLS0+DQotPCFFTlRJVFkgcnNhcXVvICAiJiM4MjUwOyIgPjwhLS0gc2luZ2xlIHJpZ2h0LXBvaW50aW5nIGFuZ2xlIHF1b3RhdGlvbiBtYXJrLCBVKzIwM0EgSVNPIHByb3Bvc2VkIC0tPg0KLTwhRU5USVRZIGV1cm8gICAgIiYjODM2NDsiID48IS0tIGV1cm8gc2lnbiwgVSsyMEFDIE5FVyAtLT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1zcGVjaWFsLmVudCAtLT4NCi0NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1jaGFyZW50LTEubW9kIC0tPg0KLV1dPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLWZyYW1ld29yay0xLm1vZCAtLT4NCi0NCi0NCi08IS0tIFhIVE1MIENvcmUgTW9kdWxlcyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgcHJlLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEENCi0gICAgICB8ICVJbmxTdHJ1Y3QuY2xhc3M7DQotICAgICAgJUlubFBocmFzLmNsYXNzOw0KLSAgICAgICVBbmNob3IuY2xhc3M7DQotICAgICAgJUlubGluZS5leHRyYTsgKSoiDQotPg0KLQ0KLTwhRU5USVRZICUgeGh0bWwtdGV4dC5tb2QNCi0gICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBUZXh0IDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC10ZXh0LTEubW9kIiA+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgVGV4dCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLXRleHQtMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwsIGEgcmVmb3JtdWxhdGlvbiBvZiBIVE1MIGFzIGEgbW9kdWxhciBYTUwgYXBwbGljYXRpb24uDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB4aHRtbC1tb2JpbGUxMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU3IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIFRleHQgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtdGV4dC0xLm1vZCINCi0NCi0gICAgIFJldmlzaW9uczoNCi0gICAgIChub25lKQ0KLSAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBUZXh0dWFsIENvbnRlbnQNCi0NCi0gICAgIFRoZSBUZXh0IG1vZHVsZSBpbmNsdWRlcyBkZWNsYXJhdGlvbnMgZm9yIGFsbCBjb3JlDQotICAgICB0ZXh0IGNvbnRhaW5lciBlbGVtZW50cyBhbmQgdGhlaXIgYXR0cmlidXRlcy4NCi0tLT4NCi0NCi08IUVOVElUWSAlIHhodG1sLWlubHN0cnVjdC5tb2R1bGUgIklOQ0xVREUiID4NCi08IVsleGh0bWwtaW5sc3RydWN0Lm1vZHVsZTtbDQotPCFFTlRJVFkgJSB4aHRtbC1pbmxzdHJ1Y3QubW9kDQotICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgSW5saW5lIFN0cnVjdHVyYWwgMS4wLy9FTiINCi0gICAgICAgICAgICAieGh0bWwtaW5sc3RydWN0LTEubW9kIiA+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgSW5saW5lIFN0cnVjdHVyYWwgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLWlubHN0cnVjdC0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCwgYSByZWZvcm11bGF0aW9uIG9mIEhUTUwgYXMgYSBtb2R1bGFyIFhNTCBhcHBsaWNhdGlvbi4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJldmlzaW9uOiAkSWQ6IHhodG1sLW1vYmlsZTEwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTcgcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgSW5saW5lIFN0cnVjdHVyYWwgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtaW5sc3RydWN0LTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIElubGluZSBTdHJ1Y3R1cmFsDQotDQotICAgICAgICBiciwgc3Bhbg0KLQ0KLSAgICAgVGhpcyBtb2R1bGUgZGVjbGFyZXMgdGhlIGVsZW1lbnRzIGFuZCB0aGVpciBhdHRyaWJ1dGVzDQotICAgICB1c2VkIHRvIHN1cHBvcnQgaW5saW5lLWxldmVsIHN0cnVjdHVyYWwgbWFya3VwLg0KLS0tPg0KLQ0KLTwhLS0gYnI6IGZvcmNlZCBsaW5lIGJyZWFrIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgYnIuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslYnIuZWxlbWVudDtbDQotDQotPCFFTlRJVFkgJSBici5jb250ZW50ICAiRU1QVFkiID4NCi08IUVOVElUWSAlIGJyLnFuYW1lICAiYnIiID4NCi08IUVMRU1FTlQgJWJyLnFuYW1lOyAgJWJyLmNvbnRlbnQ7ID4NCi0NCi08IS0tIGVuZCBvZiBici5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgYnIuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslYnIuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVici5xbmFtZTsNCi0gICAgICAlQ29yZS5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGJyLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBzcGFuOiBnZW5lcmljIGlubGluZSBjb250YWluZXIgLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBzcGFuLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJXNwYW4uZWxlbWVudDtbDQotPCFFTlRJVFkgJSBzcGFuLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiDQotPg0KLTwhRU5USVRZICUgc3Bhbi5xbmFtZSAgInNwYW4iID4NCi08IUVMRU1FTlQgJXNwYW4ucW5hbWU7ICAlc3Bhbi5jb250ZW50OyA+DQotPCEtLSBlbmQgb2Ygc3Bhbi5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgc3Bhbi5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVzcGFuLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlc3Bhbi5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2Ygc3Bhbi5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLWlubHN0cnVjdC0xLm1vZCAtLT4NCi1dXT4NCi0NCi08IUVOVElUWSAlIHhodG1sLWlubHBocmFzLm1vZHVsZSAiSU5DTFVERSIgPg0KLTwhWyV4aHRtbC1pbmxwaHJhcy5tb2R1bGU7Ww0KLTwhRU5USVRZICUgeGh0bWwtaW5scGhyYXMubW9kDQotICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgSW5saW5lIFBocmFzYWwgMS4wLy9FTiINCi0gICAgICAgICAgICAieGh0bWwtaW5scGhyYXMtMS5tb2QiID4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBJbmxpbmUgUGhyYXNhbCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtaW5scGhyYXMtMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwsIGEgcmVmb3JtdWxhdGlvbiBvZiBIVE1MIGFzIGEgbW9kdWxhciBYTUwgYXBwbGljYXRpb24uDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB4aHRtbC1tb2JpbGUxMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU3IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIElubGluZSBQaHJhc2FsIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWlubHBocmFzLTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIElubGluZSBQaHJhc2FsDQotDQotICAgICAgICBhYmJyLCBhY3JvbnltLCBjaXRlLCBjb2RlLCBkZm4sIGVtLCBrYmQsIHEsIHNhbXAsIHN0cm9uZywgdmFyDQotDQotICAgICBUaGlzIG1vZHVsZSBkZWNsYXJlcyB0aGUgZWxlbWVudHMgYW5kIHRoZWlyIGF0dHJpYnV0ZXMgdXNlZCB0bw0KLSAgICAgc3VwcG9ydCBpbmxpbmUtbGV2ZWwgcGhyYXNhbCBtYXJrdXAuDQotLS0+DQotDQotPCFFTlRJVFkgJSBhYmJyLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWFiYnIuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBhYmJyLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiDQotPg0KLTwhRU5USVRZICUgYWJici5xbmFtZSAgImFiYnIiID4NCi08IUVMRU1FTlQgJWFiYnIucW5hbWU7ICAlYWJici5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgYWJici5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgYWJici5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVhYmJyLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlYWJici5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgYWJici5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgYWNyb255bS5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVhY3JvbnltLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgYWNyb255bS5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7ICkqIg0KLT4NCi08IUVOVElUWSAlIGFjcm9ueW0ucW5hbWUgICJhY3JvbnltIiA+DQotPCFFTEVNRU5UICVhY3JvbnltLnFuYW1lOyAgJWFjcm9ueW0uY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGFjcm9ueW0uZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGFjcm9ueW0uYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslYWNyb255bS5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWFjcm9ueW0ucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGFjcm9ueW0uYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGNpdGUuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslY2l0ZS5lbGVtZW50O1sNCi08IUVOVElUWSAlIGNpdGUuY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiINCi0+DQotPCFFTlRJVFkgJSBjaXRlLnFuYW1lICAiY2l0ZSIgPg0KLTwhRUxFTUVOVCAlY2l0ZS5xbmFtZTsgICVjaXRlLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBjaXRlLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBjaXRlLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWNpdGUuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVjaXRlLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBjaXRlLmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBjb2RlLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWNvZGUuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBjb2RlLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiDQotPg0KLTwhRU5USVRZICUgY29kZS5xbmFtZSAgImNvZGUiID4NCi08IUVMRU1FTlQgJWNvZGUucW5hbWU7ICAlY29kZS5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgY29kZS5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgY29kZS5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVjb2RlLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlY29kZS5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgY29kZS5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgZGZuLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWRmbi5lbGVtZW50O1sNCi08IUVOVElUWSAlIGRmbi5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7ICkqIg0KLT4NCi08IUVOVElUWSAlIGRmbi5xbmFtZSAgImRmbiIgPg0KLTwhRUxFTUVOVCAlZGZuLnFuYW1lOyAgJWRmbi5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgZGZuLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBkZm4uYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslZGZuLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlZGZuLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBkZm4uYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGVtLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWVtLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgZW0uY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiINCi0+DQotPCFFTlRJVFkgJSBlbS5xbmFtZSAgImVtIiA+DQotPCFFTEVNRU5UICVlbS5xbmFtZTsgICVlbS5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgZW0uZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGVtLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWVtLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlZW0ucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGVtLmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBrYmQuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVsla2JkLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUga2JkLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiDQotPg0KLTwhRU5USVRZICUga2JkLnFuYW1lICAia2JkIiA+DQotPCFFTEVNRU5UICVrYmQucW5hbWU7ICAla2JkLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBrYmQuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGtiZC5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVrYmQuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVrYmQucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGtiZC5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgcS5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVxLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgcS5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7ICkqIg0KLT4NCi08IUVOVElUWSAlIHEucW5hbWUgICJxIiA+DQotPCFFTEVNRU5UICVxLnFuYW1lOyAgJXEuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIHEuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHEuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslcS5hdHRsaXN0O1sNCi08IUFUVExJU1QgJXEucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotICAgICAgY2l0ZSAgICAgICAgICVVUkkuZGF0YXR5cGU7ICAgICAgICAgICAjSU1QTElFRA0KLT4NCi08IS0tIGVuZCBvZiBxLmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBzYW1wLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJXNhbXAuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBzYW1wLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiDQotPg0KLTwhRU5USVRZICUgc2FtcC5xbmFtZSAgInNhbXAiID4NCi08IUVMRU1FTlQgJXNhbXAucW5hbWU7ICAlc2FtcC5jb250ZW50OyA+DQotPCEtLSBlbmQgb2Ygc2FtcC5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgc2FtcC5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVzYW1wLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlc2FtcC5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2Ygc2FtcC5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgc3Ryb25nLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJXN0cm9uZy5lbGVtZW50O1sNCi08IUVOVElUWSAlIHN0cm9uZy5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7ICkqIg0KLT4NCi08IUVOVElUWSAlIHN0cm9uZy5xbmFtZSAgInN0cm9uZyIgPg0KLTwhRUxFTUVOVCAlc3Ryb25nLnFuYW1lOyAgJXN0cm9uZy5jb250ZW50OyA+DQotPCEtLSBlbmQgb2Ygc3Ryb25nLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBzdHJvbmcuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslc3Ryb25nLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlc3Ryb25nLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBzdHJvbmcuYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHZhci5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyV2YXIuZWxlbWVudDtbDQotPCFFTlRJVFkgJSB2YXIuY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiINCi0+DQotPCFFTlRJVFkgJSB2YXIucW5hbWUgICJ2YXIiID4NCi08IUVMRU1FTlQgJXZhci5xbmFtZTsgICV2YXIuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIHZhci5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgdmFyLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJXZhci5hdHRsaXN0O1sNCi08IUFUVExJU1QgJXZhci5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgdmFyLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtaW5scGhyYXMtMS5tb2QgLS0+DQotXV0+DQotDQotPCFFTlRJVFkgJSB4aHRtbC1ibGtzdHJ1Y3QubW9kdWxlICJJTkNMVURFIiA+DQotPCFbJXhodG1sLWJsa3N0cnVjdC5tb2R1bGU7Ww0KLTwhRU5USVRZICUgeGh0bWwtYmxrc3RydWN0Lm1vZA0KLSAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEJsb2NrIFN0cnVjdHVyYWwgMS4wLy9FTiINCi0gICAgICAgICAgICAieGh0bWwtYmxrc3RydWN0LTEubW9kIiA+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgQmxvY2sgU3RydWN0dXJhbCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLWJsa3N0cnVjdC0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCwgYSByZWZvcm11bGF0aW9uIG9mIEhUTUwgYXMgYSBtb2R1bGFyIFhNTCBhcHBsaWNhdGlvbi4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJldmlzaW9uOiAkSWQ6IHhodG1sLW1vYmlsZTEwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTcgcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgQmxvY2sgU3RydWN0dXJhbCAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1ibGtzdHJ1Y3QtMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotICAgICAobm9uZSkNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gQmxvY2sgU3RydWN0dXJhbA0KLQ0KLSAgICAgICAgZGl2LCBwDQotDQotICAgICBUaGlzIG1vZHVsZSBkZWNsYXJlcyB0aGUgZWxlbWVudHMgYW5kIHRoZWlyIGF0dHJpYnV0ZXMgdXNlZCB0bw0KLSAgICAgc3VwcG9ydCBibG9jay1sZXZlbCBzdHJ1Y3R1cmFsIG1hcmt1cC4NCi0tLT4NCi0NCi08IUVOVElUWSAlIGRpdi5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVkaXYuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBkaXYuY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVGbG93Lm1peDsgKSoiDQotPg0KLTwhRU5USVRZICUgZGl2LnFuYW1lICAiZGl2IiA+DQotPCFFTEVNRU5UICVkaXYucW5hbWU7ICAlZGl2LmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBkaXYuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGRpdi5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVkaXYuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVkaXYucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGRpdi5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgcC5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVwLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgcC5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7ICkqIiA+DQotPCFFTlRJVFkgJSBwLnFuYW1lICAicCIgPg0KLTwhRUxFTUVOVCAlcC5xbmFtZTsgICVwLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBwLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBwLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJXAuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVwLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBwLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtYmxrc3RydWN0LTEubW9kIC0tPg0KLV1dPg0KLQ0KLTwhRU5USVRZICUgeGh0bWwtYmxrcGhyYXMubW9kdWxlICJJTkNMVURFIiA+DQotPCFbJXhodG1sLWJsa3BocmFzLm1vZHVsZTtbDQotPCFFTlRJVFkgJSB4aHRtbC1ibGtwaHJhcy5tb2QNCi0gICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBCbG9jayBQaHJhc2FsIDEuMC8vRU4iDQotICAgICAgICAgICAgInhodG1sLWJsa3BocmFzLTEubW9kIiA+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgQmxvY2sgUGhyYXNhbCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLWJsa3BocmFzLTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MLCBhIHJlZm9ybXVsYXRpb24gb2YgSFRNTCBhcyBhIG1vZHVsYXIgWE1MIGFwcGxpY2F0aW9uLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUmV2aXNpb246ICRJZDogeGh0bWwtbW9iaWxlMTAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1NyBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBCbG9jayBQaHJhc2FsIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWJsa3BocmFzLTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIEJsb2NrIFBocmFzYWwNCi0NCi0gICAgICAgIGFkZHJlc3MsIGJsb2NrcXVvdGUsIHByZSwgaDEsIGgyLCBoMywgaDQsIGg1LCBoNg0KLQ0KLSAgICAgVGhpcyBtb2R1bGUgZGVjbGFyZXMgdGhlIGVsZW1lbnRzIGFuZCB0aGVpciBhdHRyaWJ1dGVzIHVzZWQgdG8NCi0gICAgIHN1cHBvcnQgYmxvY2stbGV2ZWwgcGhyYXNhbCBtYXJrdXAuDQotLS0+DQotDQotPCFFTlRJVFkgJSBhZGRyZXNzLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWFkZHJlc3MuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBhZGRyZXNzLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiID4NCi08IUVOVElUWSAlIGFkZHJlc3MucW5hbWUgICJhZGRyZXNzIiA+DQotPCFFTEVNRU5UICVhZGRyZXNzLnFuYW1lOyAgJWFkZHJlc3MuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGFkZHJlc3MuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGFkZHJlc3MuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslYWRkcmVzcy5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWFkZHJlc3MucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGFkZHJlc3MuYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGJsb2NrcXVvdGUuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslYmxvY2txdW90ZS5lbGVtZW50O1sNCi08IUVOVElUWSAlIGJsb2NrcXVvdGUuY29udGVudA0KLSAgICAgIiggJUJsb2NrLm1peDsgKSsiDQotPg0KLTwhRU5USVRZICUgYmxvY2txdW90ZS5xbmFtZSAgImJsb2NrcXVvdGUiID4NCi08IUVMRU1FTlQgJWJsb2NrcXVvdGUucW5hbWU7ICAlYmxvY2txdW90ZS5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgYmxvY2txdW90ZS5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgYmxvY2txdW90ZS5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVibG9ja3F1b3RlLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlYmxvY2txdW90ZS5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0gICAgICBjaXRlICAgICAgICAgJVVSSS5kYXRhdHlwZTsgICAgICAgICAgICNJTVBMSUVEDQotPg0KLTwhLS0gZW5kIG9mIGJsb2NrcXVvdGUuYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHByZS5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVwcmUuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBwcmUuY29udGVudA0KLSAgICAgIiggI1BDREFUQQ0KLSAgICAgIHwgJUlubFN0cnVjdC5jbGFzczsNCi0gICAgICAlSW5sUGhyYXMuY2xhc3M7DQotICAgICAgfCAldHQucW5hbWU7IHwgJWkucW5hbWU7IHwgJWIucW5hbWU7DQotICAgICAgJUkxOG4uY2xhc3M7DQotICAgICAgJUFuY2hvci5jbGFzczsNCi0gICAgICB8ICVzY3JpcHQucW5hbWU7IHwgJW1hcC5xbmFtZTsNCi0gICAgICAlSW5saW5lLmV4dHJhOyApKiINCi0+DQotPCFFTlRJVFkgJSBwcmUucW5hbWUgICJwcmUiID4NCi08IUVMRU1FTlQgJXByZS5xbmFtZTsgICVwcmUuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIHByZS5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgcHJlLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJXByZS5hdHRsaXN0O1sNCi08IUFUVExJU1QgJXByZS5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0gICAgICB4bWw6c3BhY2UgICAgKCBwcmVzZXJ2ZSApICAgICAgICAgICAgICNGSVhFRCAncHJlc2VydmUnDQotPg0KLTwhLS0gZW5kIG9mIHByZS5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLiAgSGVhZGluZyBFbGVtZW50cyAgLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIEhlYWRpbmcuY29udGVudCAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiIgPg0KLQ0KLTwhRU5USVRZICUgaDEuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslaDEuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBoMS5xbmFtZSAgImgxIiA+DQotPCFFTEVNRU5UICVoMS5xbmFtZTsgICVIZWFkaW5nLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBoMS5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgaDEuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslaDEuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVoMS5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgaDEuYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGgyLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWgyLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgaDIucW5hbWUgICJoMiIgPg0KLTwhRUxFTUVOVCAlaDIucW5hbWU7ICAlSGVhZGluZy5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgaDIuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGgyLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWgyLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlaDIucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGgyLmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBoMy5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVoMy5lbGVtZW50O1sNCi08IUVOVElUWSAlIGgzLnFuYW1lICAiaDMiID4NCi08IUVMRU1FTlQgJWgzLnFuYW1lOyAgJUhlYWRpbmcuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGgzLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBoMy5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVoMy5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWgzLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBoMy5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgaDQuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslaDQuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBoNC5xbmFtZSAgImg0IiA+DQotPCFFTEVNRU5UICVoNC5xbmFtZTsgICVIZWFkaW5nLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBoNC5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgaDQuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslaDQuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVoNC5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgaDQuYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGg1LmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWg1LmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgaDUucW5hbWUgICJoNSIgPg0KLTwhRUxFTUVOVCAlaDUucW5hbWU7ICAlSGVhZGluZy5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgaDUuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGg1LmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWg1LmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlaDUucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGg1LmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBoNi5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVoNi5lbGVtZW50O1sNCi08IUVOVElUWSAlIGg2LnFuYW1lICAiaDYiID4NCi08IUVMRU1FTlQgJWg2LnFuYW1lOyAgJUhlYWRpbmcuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGg2LmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBoNi5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVoNi5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWg2LnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBoNi5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLWJsa3BocmFzLTEubW9kIC0tPg0KLV1dPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLXRleHQtMS5tb2QgLS0+DQotDQotDQotPCFFTlRJVFkgJSB4aHRtbC1oeXBlcnRleHQubW9kDQotICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgSHlwZXJ0ZXh0IDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1oeXBlcnRleHQtMS5tb2QiID4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBIeXBlcnRleHQgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtaHlwZXJ0ZXh0LTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MLCBhIHJlZm9ybXVsYXRpb24gb2YgSFRNTCBhcyBhIG1vZHVsYXIgWE1MIGFwcGxpY2F0aW9uLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUmV2aXNpb246ICRJZDogeGh0bWwtbW9iaWxlMTAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1NyBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBIeXBlcnRleHQgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtaHlwZXJ0ZXh0LTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIEh5cGVydGV4dA0KLQ0KLSAgICAgICAgYQ0KLQ0KLSAgICAgVGhpcyBtb2R1bGUgZGVjbGFyZXMgdGhlIGFuY2hvciAoJ2EnKSBlbGVtZW50IHR5cGUsIHdoaWNoDQotICAgICBkZWZpbmVzIHRoZSBzb3VyY2Ugb2YgYSBoeXBlcnRleHQgbGluay4gVGhlIGRlc3RpbmF0aW9uDQotICAgICAob3IgbGluayAndGFyZ2V0JykgaXMgaWRlbnRpZmllZCB2aWEgaXRzICdpZCcgYXR0cmlidXRlDQotICAgICByYXRoZXIgdGhhbiB0aGUgJ25hbWUnIGF0dHJpYnV0ZSBhcyB3YXMgdXNlZCBpbiBIVE1MLg0KLS0tPg0KLQ0KLTwhLS0gLi4uLi4uLi4uLi4uICBBbmNob3IgRWxlbWVudCAgLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgYS5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVhLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgYS5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUlubE5vQW5jaG9yLm1peDsgKSoiDQotPg0KLTwhRU5USVRZICUgYS5xbmFtZSAgImEiID4NCi08IUVMRU1FTlQgJWEucW5hbWU7ICAlYS5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgYS5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgYS5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVhLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlYS5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0gICAgICBocmVmICAgICAgICAgJVVSSS5kYXRhdHlwZTsgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgY2hhcnNldCAgICAgICVDaGFyc2V0LmRhdGF0eXBlOyAgICAgICAjSU1QTElFRA0KLSAgICAgIHR5cGUgICAgICAgICAlQ29udGVudFR5cGUuZGF0YXR5cGU7ICAgI0lNUExJRUQNCi0gICAgICBocmVmbGFuZyAgICAgJUxhbmd1YWdlQ29kZS5kYXRhdHlwZTsgICNJTVBMSUVEDQotICAgICAgcmVsICAgICAgICAgICVMaW5rVHlwZXMuZGF0YXR5cGU7ICAgICAjSU1QTElFRA0KLSAgICAgIHJldiAgICAgICAgICAlTGlua1R5cGVzLmRhdGF0eXBlOyAgICAgI0lNUExJRUQNCi0gICAgICBhY2Nlc3NrZXkgICAgJUNoYXJhY3Rlci5kYXRhdHlwZTsgICAgICNJTVBMSUVEDQotICAgICAgdGFiaW5kZXggICAgICVOdW1iZXIuZGF0YXR5cGU7ICAgICAgICAjSU1QTElFRA0KLT4NCi08IS0tIGVuZCBvZiBhLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtaHlwZXJ0ZXh0LTEubW9kIC0tPg0KLQ0KLQ0KLTwhRU5USVRZICUgeGh0bWwtbGlzdC5tb2QNCi0gICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBMaXN0cyAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtbGlzdC0xLm1vZCIgPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhIVE1MIExpc3RzIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1saXN0LTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MLCBhIHJlZm9ybXVsYXRpb24gb2YgSFRNTCBhcyBhIG1vZHVsYXIgWE1MIGFwcGxpY2F0aW9uLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUmV2aXNpb246ICRJZDogeGh0bWwtbW9iaWxlMTAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1NyBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBMaXN0cyAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1saXN0LTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIExpc3RzDQotDQotICAgICAgICBkbCwgZHQsIGRkLCBvbCwgdWwsIGxpDQotDQotICAgICBUaGlzIG1vZHVsZSBkZWNsYXJlcyB0aGUgbGlzdC1vcmllbnRlZCBlbGVtZW50IHR5cGVzDQotICAgICBhbmQgdGhlaXIgYXR0cmlidXRlcy4NCi0tLT4NCi0NCi08IUVOVElUWSAlIGRsLnFuYW1lICAiZGwiID4NCi08IUVOVElUWSAlIGR0LnFuYW1lICAiZHQiID4NCi08IUVOVElUWSAlIGRkLnFuYW1lICAiZGQiID4NCi08IUVOVElUWSAlIG9sLnFuYW1lICAib2wiID4NCi08IUVOVElUWSAlIHVsLnFuYW1lICAidWwiID4NCi08IUVOVElUWSAlIGxpLnFuYW1lICAibGkiID4NCi0NCi08IS0tIGRsOiBEZWZpbml0aW9uIExpc3QgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIGRsLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWRsLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgZGwuY29udGVudCAgIiggJWR0LnFuYW1lOyB8ICVkZC5xbmFtZTsgKSsiID4NCi08IUVMRU1FTlQgJWRsLnFuYW1lOyAgJWRsLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBkbC5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgZGwuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslZGwuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVkbC5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgZGwuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGR0OiBEZWZpbml0aW9uIFRlcm0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIGR0LmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWR0LmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgZHQuY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiINCi0+DQotPCFFTEVNRU5UICVkdC5xbmFtZTsgICVkdC5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgZHQuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGR0LmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWR0LmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlZHQucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGR0LmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBkZDogRGVmaW5pdGlvbiBEZXNjcmlwdGlvbiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBkZC5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVkZC5lbGVtZW50O1sNCi08IUVOVElUWSAlIGRkLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlRmxvdy5taXg7ICkqIg0KLT4NCi08IUVMRU1FTlQgJWRkLnFuYW1lOyAgJWRkLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBkZC5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgZGQuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslZGQuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVkZC5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgZGQuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIG9sOiBPcmRlcmVkIExpc3QgKG51bWJlcmVkIHN0eWxlcykgLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIG9sLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJW9sLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgb2wuY29udGVudCAgIiggJWxpLnFuYW1lOyApKyIgPg0KLTwhRUxFTUVOVCAlb2wucW5hbWU7ICAlb2wuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIG9sLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBvbC5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVvbC5hdHRsaXN0O1sNCi08IUFUVExJU1QgJW9sLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBvbC5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gdWw6IFVub3JkZXJlZCBMaXN0IChidWxsZXQgc3R5bGVzKSAuLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgdWwuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVsldWwuZWxlbWVudDtbDQotPCFFTlRJVFkgJSB1bC5jb250ZW50ICAiKCAlbGkucW5hbWU7ICkrIiA+DQotPCFFTEVNRU5UICV1bC5xbmFtZTsgICV1bC5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgdWwuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHVsLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJXVsLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAldWwucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIHVsLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBsaTogTGlzdCBJdGVtIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBsaS5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVsaS5lbGVtZW50O1sNCi08IUVOVElUWSAlIGxpLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlRmxvdy5taXg7ICkqIg0KLT4NCi08IUVMRU1FTlQgJWxpLnFuYW1lOyAgJWxpLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBsaS5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgbGkuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslbGkuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVsaS5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgbGkuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1saXN0LTEubW9kIC0tPg0KLQ0KLTwhLS0gRXh0ZW5kIGxpc3RzIHdpdGggdmFsdWUgYW5kIHN0YXJ0IGF0dHJpYnV0ZXMgLS0+IA0KLTwhQVRUTElTVCAlbGkucW5hbWU7DQotICAgICAgdmFsdWUgICAgICAgICVOdW1iZXIuZGF0YXR5cGU7ICAgICAgICAgI0lNUExJRUQNCi0+DQotPCFBVFRMSVNUICVvbC5xbmFtZTsNCi0gICAgICBzdGFydCAgICAgICAgJU51bWJlci5kYXRhdHlwZTsgICAgICAgICNJTVBMSUVEDQotPg0KLQ0KLTwhLS0gOjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6OjogLS0+DQotDQotPCEtLSBJbWFnZSBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtaW1hZ2UubW9kDQotICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgSW1hZ2VzIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1pbWFnZS0xLm1vZCIgPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhIVE1MIEltYWdlcyBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1pbWFnZS0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCwgYSByZWZvcm11bGF0aW9uIG9mIEhUTUwgYXMgYSBtb2R1bGFyIFhNTCBhcHBsaWNhdGlvbi4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJvdmlzaW9uOiAkSWQ6IHhodG1sLW1vYmlsZTEwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTcgcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgSW1hZ2VzIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWltYWdlLTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIEltYWdlcw0KLQ0KLSAgICAgICAgaW1nDQotDQotICAgICBUaGlzIG1vZHVsZSBwcm92aWRlcyBtYXJrdXAgdG8gc3VwcG9ydCBiYXNpYyBpbWFnZSBlbWJlZGRpbmcuDQotLS0+DQotDQotPCEtLSBUbyBhdm9pZCBwcm9ibGVtcyB3aXRoIHRleHQtb25seSBVQXMgYXMgd2VsbCBhcyB0byBtYWtlDQotICAgICBpbWFnZSBjb250ZW50IHVuZGVyc3RhbmRhYmxlIGFuZCBuYXZpZ2FibGUgdG8gdXNlcnMgb2YNCi0gICAgIG5vbi12aXN1YWwgVUFzLCB5b3UgbmVlZCB0byBwcm92aWRlIGEgZGVzY3JpcHRpb24gd2l0aA0KLSAgICAgdGhlICdhbHQnIGF0dHJpYnV0ZSwgYW5kIGF2b2lkIHNlcnZlci1zaWRlIGltYWdlIG1hcHMuDQotLS0+DQotDQotPCFFTlRJVFkgJSBpbWcuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslaW1nLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgaW1nLmNvbnRlbnQgICJFTVBUWSIgPg0KLTwhRU5USVRZICUgaW1nLnFuYW1lICAiaW1nIiA+DQotPCFFTEVNRU5UICVpbWcucW5hbWU7ICAlaW1nLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBpbWcuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGltZy5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVpbWcuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVpbWcucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotICAgICAgc3JjICAgICAgICAgICVVUkkuZGF0YXR5cGU7ICAgICAgICAgICAjUkVRVUlSRUQNCi0gICAgICBhbHQgICAgICAgICAgJVRleHQuZGF0YXR5cGU7ICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgIGxvbmdkZXNjICAgICAlVVJJLmRhdGF0eXBlOyAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICBoZWlnaHQgICAgICAgJUxlbmd0aC5kYXRhdHlwZTsgICAgICAgICNJTVBMSUVEDQotICAgICAgd2lkdGggICAgICAgICVMZW5ndGguZGF0YXR5cGU7ICAgICAgICAjSU1QTElFRA0KLT4NCi08IS0tIGVuZCBvZiBpbWcuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1pbWFnZS0xLm1vZCAtLT4NCi0NCi0NCi08IS0tIFRhYmxlcyBNb2R1bGUgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC10YWJsZS5tb2QNCi0gICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBCYXNpYyBUYWJsZXMgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWJhc2ljLXRhYmxlLTEubW9kIiA+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhIVE1MIEJhc2ljIFRhYmxlIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtYmFzaWMtdGFibGUtMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwgQmFzaWMsIGEgcHJvcGVyIHN1YnNldCBvZiBYSFRNTC4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJldmlzaW9uOiAkSWQ6IHhodG1sLW1vYmlsZTEwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTcgcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgQmFzaWMgVGFibGVzIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWJhc2ljLXRhYmxlLTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIEJhc2ljIFRhYmxlcw0KLQ0KLSAgICAgICAgdGFibGUsIGNhcHRpb24sIHRyLCB0aCwgdGQNCi0NCi0gICAgIFRoaXMgdGFibGUgbW9kdWxlIGRlY2xhcmVzIGVsZW1lbnRzIGFuZCBhdHRyaWJ1dGVzIGRlZmluaW5nDQotICAgICBhIHRhYmxlIG1vZGVsIGJhc2VkIGZ1bmRhbWVudGFsbHkgb24gZmVhdHVyZXMgZm91bmQgaW4gdGhlDQotICAgICB3aWRlbHktZGVwbG95ZWQgSFRNTCAzLjIgdGFibGUgbW9kZWwuICBXaGlsZSB0aGlzIG1vZHVsZQ0KLSAgICAgbWltaWNzIHRoZSBjb250ZW50IG1vZGVsIGFuZCB0YWJsZSBhdHRyaWJ1dGVzIG9mIEhUTUwgMy4yDQotICAgICB0YWJsZXMsIHRoZSBlbGVtZW50IHR5cGVzIGRlY2xhcmVkIGhlcmVpbiBhbHNvIGluY2x1ZGVzIGFsbA0KLSAgICAgSFRNTCA0IGNvbW1vbiBhbmQgbW9zdCBvZiB0aGUgSFRNTCA0IHRhYmxlIGF0dHJpYnV0ZXMuDQotLS0+DQotDQotPCEtLSBkZWNsYXJlIHF1YWxpZmllZCBlbGVtZW50IHR5cGUgbmFtZXM6DQotLS0+DQotPCFFTlRJVFkgJSB0YWJsZS5xbmFtZSAgInRhYmxlIiA+DQotPCFFTlRJVFkgJSBjYXB0aW9uLnFuYW1lICAiY2FwdGlvbiIgPg0KLTwhRU5USVRZICUgdHIucW5hbWUgICJ0ciIgPg0KLTwhRU5USVRZICUgdGgucW5hbWUgICJ0aCIgPg0KLTwhRU5USVRZICUgdGQucW5hbWUgICJ0ZCIgPg0KLQ0KLTwhLS0gaG9yaXpvbnRhbCBhbGlnbm1lbnQgYXR0cmlidXRlcyBmb3IgY2VsbCBjb250ZW50cw0KLS0tPg0KLTwhRU5USVRZICUgQ2VsbEhBbGlnbi5hdHRyaWINCi0gICAgICJhbGlnbiAgICAgICAgKCBsZWZ0DQotICAgICAgICAgICAgICAgICAgIHwgY2VudGVyDQotICAgICAgICAgICAgICAgICAgIHwgcmlnaHQgKSAgICAgICAgICAgICAgICAjSU1QTElFRCINCi0+DQotDQotPCEtLSB2ZXJ0aWNhbCBhbGlnbm1lbnQgYXR0cmlidXRlcyBmb3IgY2VsbCBjb250ZW50cw0KLS0tPg0KLTwhRU5USVRZICUgQ2VsbFZBbGlnbi5hdHRyaWINCi0gICAgICJ2YWxpZ24gICAgICAgKCB0b3ANCi0gICAgICAgICAgICAgICAgICAgfCBtaWRkbGUNCi0gICAgICAgICAgICAgICAgICAgfCBib3R0b20gKSAgICAgICAgICAgICAgICNJTVBMSUVEIg0KLT4NCi0NCi08IS0tIHNjb3BlIGlzIHNpbXBsZXIgdGhhbiBheGVzIGF0dHJpYnV0ZSBmb3IgY29tbW9uIHRhYmxlcw0KLS0tPg0KLTwhRU5USVRZICUgc2NvcGUuYXR0cmliDQotICAgICAic2NvcGUgICAgICAgICggcm93IHwgY29sICApICAgICAgICAgICAjSU1QTElFRCINCi0+DQotDQotPCEtLSB0YWJsZTogVGFibGUgRWxlbWVudCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSB0YWJsZS5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyV0YWJsZS5lbGVtZW50O1sNCi08IUVOVElUWSAlIHRhYmxlLmNvbnRlbnQNCi0gICAgICIoICVjYXB0aW9uLnFuYW1lOz8sICV0ci5xbmFtZTsrICkiDQotPg0KLTwhRUxFTUVOVCAldGFibGUucW5hbWU7ICAldGFibGUuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIHRhYmxlLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSB0YWJsZS5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyV0YWJsZS5hdHRsaXN0O1sNCi08IUFUVExJU1QgJXRhYmxlLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLSAgICAgIHN1bW1hcnkgICAgICAlVGV4dC5kYXRhdHlwZTsgICAgICAgICAgI0lNUExJRUQNCi0+DQotPCEtLSBlbmQgb2YgdGFibGUuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGNhcHRpb246IFRhYmxlIENhcHRpb24gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIGNhcHRpb24uZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslY2FwdGlvbi5lbGVtZW50O1sNCi08IUVOVElUWSAlIGNhcHRpb24uY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiINCi0+DQotPCFFTEVNRU5UICVjYXB0aW9uLnFuYW1lOyAgJWNhcHRpb24uY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGNhcHRpb24uZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGNhcHRpb24uYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslY2FwdGlvbi5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWNhcHRpb24ucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGNhcHRpb24uYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIHRyOiBUYWJsZSBSb3cgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIHRyLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJXRyLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgdHIuY29udGVudCAgIiggJXRoLnFuYW1lOyB8ICV0ZC5xbmFtZTsgKSsiID4NCi08IUVMRU1FTlQgJXRyLnFuYW1lOyAgJXRyLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiB0ci5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgdHIuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVsldHIuYXR0bGlzdDtbDQotPCFBVFRMSVNUICV0ci5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0gICAgICAlQ2VsbEhBbGlnbi5hdHRyaWI7DQotICAgICAgJUNlbGxWQWxpZ24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiB0ci5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gdGg6IFRhYmxlIEhlYWRlciBDZWxsIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gdGggaXMgZm9yIGhlYWRlciBjZWxscywgdGQgZm9yIGRhdGEsDQotICAgICBidXQgZm9yIGNlbGxzIGFjdGluZyBhcyBib3RoIHVzZSB0ZA0KLS0tPg0KLQ0KLTwhRU5USVRZICUgdGguZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVsldGguZWxlbWVudDtbDQotPCFFTlRJVFkgJSB0aC5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUZsb3dOb1RhYmxlLm1peDsgKSoiDQotPg0KLTwhRUxFTUVOVCAldGgucW5hbWU7ICAldGguY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIHRoLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSB0aC5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyV0aC5hdHRsaXN0O1sNCi08IUFUVExJU1QgJXRoLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLSAgICAgIGFiYnIgICAgICAgICAlVGV4dC5kYXRhdHlwZTsgICAgICAgICAgI0lNUExJRUQNCi0gICAgICBheGlzICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgaGVhZGVycyAgICAgIElEUkVGUyAgICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgICVzY29wZS5hdHRyaWI7DQotICAgICAgcm93c3BhbiAgICAgICVOdW1iZXIuZGF0YXR5cGU7ICAgICAgICAnMScNCi0gICAgICBjb2xzcGFuICAgICAgJU51bWJlci5kYXRhdHlwZTsgICAgICAgICcxJw0KLSAgICAgICVDZWxsSEFsaWduLmF0dHJpYjsNCi0gICAgICAlQ2VsbFZBbGlnbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIHRoLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSB0ZDogVGFibGUgRGF0YSBDZWxsIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSB0ZC5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyV0ZC5lbGVtZW50O1sNCi08IUVOVElUWSAlIHRkLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlRmxvd05vVGFibGUubWl4OyApKiINCi0+DQotPCFFTEVNRU5UICV0ZC5xbmFtZTsgICV0ZC5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgdGQuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHRkLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJXRkLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAldGQucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotICAgICAgYWJiciAgICAgICAgICVUZXh0LmRhdGF0eXBlOyAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIGF4aXMgICAgICAgICBDREFUQSAgICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICBoZWFkZXJzICAgICAgSURSRUZTICAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgJXNjb3BlLmF0dHJpYjsNCi0gICAgICByb3dzcGFuICAgICAgJU51bWJlci5kYXRhdHlwZTsgICAgICAgICcxJw0KLSAgICAgIGNvbHNwYW4gICAgICAlTnVtYmVyLmRhdGF0eXBlOyAgICAgICAgJzEnDQotICAgICAgJUNlbGxIQWxpZ24uYXR0cmliOw0KLSAgICAgICVDZWxsVkFsaWduLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgdGQuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1iYXNpYy10YWJsZS0xLm1vZCAtLT4NCi0NCi0NCi08IS0tIEZvcm1zIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gDQotCVhIVE1MIGJhc2ljIGZvcm1zIG1vZHVsZSBleHRlbmRlZCB3aXRoIG9wdGdyb3VwIGFuZCBmaWVsZHNldA0KLS0tPg0KLTwhRUxFTUVOVCAlb3B0Z3JvdXAucW5hbWU7ICglb3B0aW9uLnFuYW1lOykrPg0KLTwhQVRUTElTVCAlb3B0Z3JvdXAucW5hbWU7DQotCSVDb21tb24uYXR0cmliOyANCi0JbGFiZWwgJVRleHQuZGF0YXR5cGU7ICNSRVFVSVJFRA0KLT4NCi08IUVOVElUWSAlIHNlbGVjdC5jb250ZW50ICIoICVvcHRncm91cC5xbmFtZTsgfCAlb3B0aW9uLnFuYW1lOyApKyI+DQotPCFFTEVNRU5UICVmaWVsZHNldC5xbmFtZTsgKCNQQ0RBVEEgfCAlRmxvdy5taXg7KSo+DQotPCFBVFRMSVNUICVmaWVsZHNldC5xbmFtZTsNCi0JJUNvbW1vbi5hdHRyaWI7IA0KLT4NCi08IUVOVElUWSAlIGZvcm0uY29udGVudCAiKCAlQmxrTm9Gb3JtLm1peDsgfCAlZmllbGRzZXQucW5hbWU7ICkrIj4NCi08IUVOVElUWSAlIHhodG1sLWZvcm0ubW9kDQotICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgQmFzaWMgRm9ybXMgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWJhc2ljLWZvcm0tMS5tb2QiID4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBTaW1wbGlmaWVkIEZvcm1zIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtYmFzaWMtZm9ybS0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCBCYXNpYywgYSBwcm9wZXIgc3Vic2V0IG9mIFhIVE1MLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUmV2aXNpb246ICRJZDogeGh0bWwtbW9iaWxlMTAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1NyBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBCYXNpYyBGb3JtcyAxLjAvL0VOIiAgDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWJhc2ljLWZvcm0tMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotICAgICAobm9uZSkNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gQmFzaWMgRm9ybXMNCi0NCi0gICAgIFRoaXMgZm9ybXMgbW9kdWxlIGlzIGJhc2VkIG9uIHRoZSBIVE1MIDMuMiBmb3JtcyBtb2RlbCwgd2l0aA0KLSAgICAgdGhlIFdBSS1yZXF1ZXN0ZWQgYWRkaXRpb24gb2YgdGhlIGxhYmVsIGVsZW1lbnQuIFdoaWxlIHRoaXMgDQotICAgICBtb2R1bGUgZXNzZW50aWFsbHkgbWltaWNzIHRoZSBjb250ZW50IG1vZGVsIGFuZCBhdHRyaWJ1dGVzIG9mIA0KLSAgICAgSFRNTCAzLjIgZm9ybXMsIHRoZSBlbGVtZW50IHR5cGVzIGRlY2xhcmVkIGhlcmVpbiBhbHNvIGluY2x1ZGUNCi0gICAgIGFsbCBIVE1MIDQgY29tbW9uIGF0dHJpYnV0ZXMuDQotDQotICAgICAgICBmb3JtLCBsYWJlbCwgaW5wdXQsIHNlbGVjdCwgb3B0aW9uLCB0ZXh0YXJlYQ0KLS0tPg0KLQ0KLTwhLS0gZGVjbGFyZSBxdWFsaWZpZWQgZWxlbWVudCB0eXBlIG5hbWVzOg0KLS0tPg0KLTwhRU5USVRZICUgZm9ybS5xbmFtZSAgImZvcm0iID4NCi08IUVOVElUWSAlIGxhYmVsLnFuYW1lICAibGFiZWwiID4NCi08IUVOVElUWSAlIGlucHV0LnFuYW1lICAiaW5wdXQiID4NCi08IUVOVElUWSAlIHNlbGVjdC5xbmFtZSAgInNlbGVjdCIgPg0KLTwhRU5USVRZICUgb3B0aW9uLnFuYW1lICAib3B0aW9uIiA+DQotPCFFTlRJVFkgJSB0ZXh0YXJlYS5xbmFtZSAgInRleHRhcmVhIiA+DQotDQotPCEtLSAlQmxrTm9Gb3JtLm1peDsgaW5jbHVkZXMgYWxsIG5vbi1mb3JtIGJsb2NrIGVsZW1lbnRzLA0KLSAgICAgcGx1cyAlTWlzYy5jbGFzczsNCi0tLT4NCi08IUVOVElUWSAlIEJsa05vRm9ybS5taXgNCi0gICAgICIlSGVhZGluZy5jbGFzczsNCi0gICAgICB8ICVMaXN0LmNsYXNzOw0KLSAgICAgIHwgJUJsa1N0cnVjdC5jbGFzczsNCi0gICAgICAlQmxrUGhyYXMuY2xhc3M7DQotICAgICAgJUJsa1ByZXMuY2xhc3M7DQotICAgICAgfCAldGFibGUucW5hbWU7IA0KLSAgICAgICVCbG9jay5leHRyYTsNCi0gICAgICAlTWlzYy5jbGFzczsiDQotPg0KLQ0KLTwhLS0gZm9ybTogRm9ybSBFbGVtZW50IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgZm9ybS5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVmb3JtLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgZm9ybS5jb250ZW50DQotICAgICAiKCAlQmxrTm9Gb3JtLm1peDsgKSsiDQotPg0KLTwhRUxFTUVOVCAlZm9ybS5xbmFtZTsgICVmb3JtLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBmb3JtLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBmb3JtLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWZvcm0uYXR0bGlzdDtbDQotPCFBVFRMSVNUICVmb3JtLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLSAgICAgIGFjdGlvbiAgICAgICAlVVJJLmRhdGF0eXBlOyAgICAgICAgICAgI1JFUVVJUkVEDQotICAgICAgbWV0aG9kICAgICAgICggZ2V0IHwgcG9zdCApICAgICAgICAgICAnZ2V0Jw0KLSAgICAgIGVuY3R5cGUgICAgICAlQ29udGVudFR5cGUuZGF0YXR5cGU7ICAgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcNCi0+DQotPCEtLSBlbmQgb2YgZm9ybS5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gbGFiZWw6IEZvcm0gRmllbGQgTGFiZWwgVGV4dCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgbGFiZWwuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslbGFiZWwuZWxlbWVudDtbDQotPCEtLSBFYWNoIGxhYmVsIG11c3Qgbm90IGNvbnRhaW4gbW9yZSB0aGFuIE9ORSBmaWVsZA0KLS0tPg0KLTwhRU5USVRZICUgbGFiZWwuY29udGVudA0KLSAgICAgIiggI1BDREFUQSANCi0gICAgICB8ICVpbnB1dC5xbmFtZTsgfCAlc2VsZWN0LnFuYW1lOyB8ICV0ZXh0YXJlYS5xbmFtZTsNCi0gICAgICB8ICVJbmxTdHJ1Y3QuY2xhc3M7DQotICAgICAgJUlubFBocmFzLmNsYXNzOw0KLSAgICAgICVJMThuLmNsYXNzOw0KLSAgICAgICVJbmxQcmVzLmNsYXNzOw0KLSAgICAgICVJbmxTcGVjaWFsLmNsYXNzOw0KLSAgICAgICVNaXNjLmNsYXNzOyApKiINCi0+DQotPCFFTEVNRU5UICVsYWJlbC5xbmFtZTsgICVsYWJlbC5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgbGFiZWwuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGxhYmVsLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWxhYmVsLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlbGFiZWwucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotICAgICAgZm9yICAgICAgICAgIElEUkVGICAgICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIGFjY2Vzc2tleSAgICAlQ2hhcmFjdGVyLmRhdGF0eXBlOyAgICAgI0lNUExJRUQNCi0+DQotPCEtLSBlbmQgb2YgbGFiZWwuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGlucHV0OiBGb3JtIENvbnRyb2wgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIGlucHV0LmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWlucHV0LmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgaW5wdXQuY29udGVudCAgIkVNUFRZIiA+DQotPCFFTEVNRU5UICVpbnB1dC5xbmFtZTsgICVpbnB1dC5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgaW5wdXQuZWxlbWVudCAtLT5dXT4NCi0NCi08IS0tIEJhc2ljIEZvcm1zIHJlbW92ZXMgJ2ltYWdlJyBhbmQgJ2ZpbGUnIGlucHV0IHR5cGVzLg0KLS0tPg0KLTwhRU5USVRZICUgaW5wdXQuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslaW5wdXQuYXR0bGlzdDtbDQotPCFFTlRJVFkgJSBJbnB1dFR5cGUuY2xhc3MNCi0gICAgICIoIHRleHQgfCBwYXNzd29yZCB8IGNoZWNrYm94IHwgcmFkaW8gDQotICAgICAgfCBzdWJtaXQgfCByZXNldCB8IGhpZGRlbiApIg0KLT4NCi08IS0tIGF0dHJpYnV0ZSBuYW1lIHJlcXVpcmVkIGZvciBhbGwgYnV0IHN1Ym1pdCAmIHJlc2V0DQotLS0+DQotPCFBVFRMSVNUICVpbnB1dC5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0gICAgICB0eXBlICAgICAgICAgJUlucHV0VHlwZS5jbGFzczsgICAgICAgICd0ZXh0Jw0KLSAgICAgIG5hbWUgICAgICAgICBDREFUQSAgICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICB2YWx1ZSAgICAgICAgQ0RBVEEgICAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgY2hlY2tlZCAgICAgICggY2hlY2tlZCApICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIHNpemUgICAgICAgICBDREFUQSAgICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICBtYXhsZW5ndGggICAgJU51bWJlci5kYXRhdHlwZTsgICAgICAgICNJTVBMSUVEDQotICAgICAgc3JjICAgICAgICAgICVVUkkuZGF0YXR5cGU7ICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIHRhYmluZGV4ICAgICAlTnVtYmVyLmRhdGF0eXBlOyAgICAgICAgI0lNUExJRUQNCi0gICAgICBhY2Nlc3NrZXkgICAgJUNoYXJhY3Rlci5kYXRhdHlwZTsgICAgICNJTVBMSUVEDQotPg0KLTwhLS0gZW5kIG9mIGlucHV0LmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBzZWxlY3Q6IE9wdGlvbiBTZWxlY3RvciAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBzZWxlY3QuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslc2VsZWN0LmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgc2VsZWN0LmNvbnRlbnQgICIoICVvcHRpb24ucW5hbWU7ICkrIiA+DQotPCFFTEVNRU5UICVzZWxlY3QucW5hbWU7ICAlc2VsZWN0LmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBzZWxlY3QuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHNlbGVjdC5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVzZWxlY3QuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVzZWxlY3QucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotICAgICAgbmFtZSAgICAgICAgIENEQVRBICAgICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIHNpemUgICAgICAgICAlTnVtYmVyLmRhdGF0eXBlOyAgICAgICAgI0lNUExJRUQNCi0gICAgICBtdWx0aXBsZSAgICAgKCBtdWx0aXBsZSApICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgdGFiaW5kZXggICAgICVOdW1iZXIuZGF0YXR5cGU7ICAgICAgICAjSU1QTElFRA0KLT4NCi08IS0tIGVuZCBvZiBzZWxlY3QuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIG9wdGlvbjogU2VsZWN0YWJsZSBDaG9pY2UgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIG9wdGlvbi5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVvcHRpb24uZWxlbWVudDtbDQotPCFFTlRJVFkgJSBvcHRpb24uY29udGVudCAgIiggI1BDREFUQSApIiA+DQotPCFFTEVNRU5UICVvcHRpb24ucW5hbWU7ICAlb3B0aW9uLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBvcHRpb24uZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIG9wdGlvbi5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVvcHRpb24uYXR0bGlzdDtbDQotPCFBVFRMSVNUICVvcHRpb24ucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotICAgICAgc2VsZWN0ZWQgICAgICggc2VsZWN0ZWQgKSAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIHZhbHVlICAgICAgICBDREFUQSAgICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0+DQotPCEtLSBlbmQgb2Ygb3B0aW9uLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSB0ZXh0YXJlYTogTXVsdGktTGluZSBUZXh0IEZpZWxkIC4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSB0ZXh0YXJlYS5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyV0ZXh0YXJlYS5lbGVtZW50O1sNCi08IUVOVElUWSAlIHRleHRhcmVhLmNvbnRlbnQgICIoICNQQ0RBVEEgKSIgPg0KLTwhRUxFTUVOVCAldGV4dGFyZWEucW5hbWU7ICAldGV4dGFyZWEuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIHRleHRhcmVhLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSB0ZXh0YXJlYS5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyV0ZXh0YXJlYS5hdHRsaXN0O1sNCi08IUFUVExJU1QgJXRleHRhcmVhLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLSAgICAgIG5hbWUgICAgICAgICBDREFUQSAgICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICByb3dzICAgICAgICAgJU51bWJlci5kYXRhdHlwZTsgICAgICAgICNSRVFVSVJFRA0KLSAgICAgIGNvbHMgICAgICAgICAlTnVtYmVyLmRhdGF0eXBlOyAgICAgICAgI1JFUVVJUkVEDQotICAgICAgdGFiaW5kZXggICAgICVOdW1iZXIuZGF0YXR5cGU7ICAgICAgICAjSU1QTElFRA0KLSAgICAgIGFjY2Vzc2tleSAgICAlQ2hhcmFjdGVyLmRhdGF0eXBlOyAgICAgI0lNUExJRUQNCi0+DQotPCEtLSBlbmQgb2YgdGV4dGFyZWEuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1iYXNpYy1mb3JtLTEubW9kIC0tPg0KLQ0KLQ0KLTwhLS0gTGluayBFbGVtZW50IE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLWxpbmsubW9kDQotICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgTGluayBFbGVtZW50IDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1saW5rLTEubW9kIiA+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgTGluayBFbGVtZW50IE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLWxpbmstMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwsIGEgcmVmb3JtdWxhdGlvbiBvZiBIVE1MIGFzIGEgbW9kdWxhciBYTUwgYXBwbGljYXRpb24uDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB4aHRtbC1tb2JpbGUxMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU3IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIExpbmsgRWxlbWVudCAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1saW5rLTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIExpbmsgZWxlbWVudA0KLQ0KLSAgICAgICAgbGluaw0KLQ0KLSAgICAgVGhpcyBtb2R1bGUgZGVjbGFyZXMgdGhlIGxpbmsgZWxlbWVudCB0eXBlIGFuZCBpdHMgYXR0cmlidXRlcywNCi0gICAgIHdoaWNoIGNvdWxkIChpbiBwcmluY2lwbGUpIGJlIHVzZWQgdG8gZGVmaW5lIGRvY3VtZW50LWxldmVsIGxpbmtzDQotICAgICB0byBleHRlcm5hbCByZXNvdXJjZXMgc3VjaCBhczoNCi0NCi0gICAgIGEpIGZvciBkb2N1bWVudCBzcGVjaWZpYyB0b29sYmFycy9tZW51cywgZS5nLiBzdGFydCwgY29udGVudHMsDQotICAgICAgICBwcmV2aW91cywgbmV4dCwgaW5kZXgsIGVuZCwgaGVscA0KLSAgICAgYikgdG8gbGluayB0byBhIHNlcGFyYXRlIHN0eWxlIHNoZWV0IChyZWw9InN0eWxlc2hlZXQiKQ0KLSAgICAgYykgdG8gbWFrZSBhIGxpbmsgdG8gYSBzY3JpcHQgKHJlbD0ic2NyaXB0IikNCi0gICAgIGQpIGJ5IHN0eWxlIHNoZWV0cyB0byBjb250cm9sIGhvdyBjb2xsZWN0aW9ucyBvZiBodG1sIG5vZGVzIGFyZQ0KLSAgICAgICAgcmVuZGVyZWQgaW50byBwcmludGVkIGRvY3VtZW50cw0KLSAgICAgZSkgdG8gbWFrZSBhIGxpbmsgdG8gYSBwcmludGFibGUgdmVyc2lvbiBvZiB0aGlzIGRvY3VtZW50DQotICAgICAgICBlLmcuIGEgcG9zdHNjcmlwdCBvciBwZGYgdmVyc2lvbiAocmVsPSJhbHRlcm5hdGUiIG1lZGlhPSJwcmludCIpDQotLS0+DQotDQotPCEtLSBsaW5rOiBNZWRpYS1JbmRlcGVuZGVudCBMaW5rIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBsaW5rLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWxpbmsuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBsaW5rLmNvbnRlbnQgICJFTVBUWSIgPg0KLTwhRU5USVRZICUgbGluay5xbmFtZSAgImxpbmsiID4NCi08IUVMRU1FTlQgJWxpbmsucW5hbWU7ICAlbGluay5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgbGluay5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgbGluay5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVsaW5rLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlbGluay5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0gICAgICBjaGFyc2V0ICAgICAgJUNoYXJzZXQuZGF0YXR5cGU7ICAgICAgICNJTVBMSUVEDQotICAgICAgaHJlZiAgICAgICAgICVVUkkuZGF0YXR5cGU7ICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIGhyZWZsYW5nICAgICAlTGFuZ3VhZ2VDb2RlLmRhdGF0eXBlOyAgI0lNUExJRUQNCi0gICAgICB0eXBlICAgICAgICAgJUNvbnRlbnRUeXBlLmRhdGF0eXBlOyAgICNJTVBMSUVEDQotICAgICAgcmVsICAgICAgICAgICVMaW5rVHlwZXMuZGF0YXR5cGU7ICAgICAjSU1QTElFRA0KLSAgICAgIHJldiAgICAgICAgICAlTGlua1R5cGVzLmRhdGF0eXBlOyAgICAgI0lNUExJRUQNCi0gICAgICBtZWRpYSAgICAgICAgJU1lZGlhRGVzYy5kYXRhdHlwZTsgICAgICNJTVBMSUVEDQotPg0KLTwhLS0gZW5kIG9mIGxpbmsuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1saW5rLTEubW9kIC0tPg0KLQ0KLQ0KLTwhLS0gRG9jdW1lbnQgTWV0YWluZm9ybWF0aW9uIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLW1ldGEubW9kDQotICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgTWV0YWluZm9ybWF0aW9uIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1tZXRhLTEubW9kIiA+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgRG9jdW1lbnQgTWV0YWluZm9ybWF0aW9uIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLW1ldGEtMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwsIGEgcmVmb3JtdWxhdGlvbiBvZiBIVE1MIGFzIGEgbW9kdWxhciBYTUwgYXBwbGljYXRpb24uDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB4aHRtbC1tb2JpbGUxMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU3IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIE1ldGFpbmZvcm1hdGlvbiAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1tZXRhLTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIE1ldGEgSW5mb3JtYXRpb24NCi0NCi0gICAgICAgIG1ldGENCi0NCi0gICAgIFRoaXMgbW9kdWxlIGRlY2xhcmVzIHRoZSBtZXRhIGVsZW1lbnQgdHlwZSBhbmQgaXRzIGF0dHJpYnV0ZXMsDQotICAgICB1c2VkIHRvIHByb3ZpZGUgZGVjbGFyYXRpdmUgZG9jdW1lbnQgbWV0YWluZm9ybWF0aW9uLg0KLS0tPg0KLQ0KLTwhLS0gbWV0YTogR2VuZXJpYyBNZXRhaW5mb3JtYXRpb24gLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgbWV0YS5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVtZXRhLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgbWV0YS5jb250ZW50ICAiRU1QVFkiID4NCi08IUVOVElUWSAlIG1ldGEucW5hbWUgICJtZXRhIiA+DQotPCFFTEVNRU5UICVtZXRhLnFuYW1lOyAgJW1ldGEuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIG1ldGEuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIG1ldGEuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslbWV0YS5hdHRsaXN0O1sNCi08IUFUVExJU1QgJW1ldGEucW5hbWU7DQotICAgICAgJVhIVE1MLnhtbG5zLmF0dHJpYjsNCi0gICAgICAlSTE4bi5hdHRyaWI7DQotICAgICAgaHR0cC1lcXVpdiAgIE5NVE9LRU4gICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIG5hbWUgICAgICAgICBOTVRPS0VOICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICBjb250ZW50ICAgICAgQ0RBVEEgICAgICAgICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgIHNjaGVtZSAgICAgICBDREFUQSAgICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0+DQotPCEtLSBlbmQgb2YgbWV0YS5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLW1ldGEtMS5tb2QgLS0+DQotDQotDQotPCEtLSBCYXNlIEVsZW1lbnQgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtYmFzZS5tb2QNCi0gICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBCYXNlIEVsZW1lbnQgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWJhc2UtMS5tb2QiID4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBCYXNlIEVsZW1lbnQgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtYmFzZS0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCwgYSByZWZvcm11bGF0aW9uIG9mIEhUTUwgYXMgYSBtb2R1bGFyIFhNTCBhcHBsaWNhdGlvbi4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJldmlzaW9uOiAkSWQ6IHhodG1sLW1vYmlsZTEwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTcgcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgQmFzZSBFbGVtZW50IDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWJhc2UtMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotICAgICAobm9uZSkNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gQmFzZSBlbGVtZW50DQotDQotICAgICAgICBiYXNlDQotDQotICAgICBUaGlzIG1vZHVsZSBkZWNsYXJlcyB0aGUgYmFzZSBlbGVtZW50IHR5cGUgYW5kIGl0cyBhdHRyaWJ1dGVzLA0KLSAgICAgdXNlZCB0byBkZWZpbmUgYSBiYXNlIFVSSSBhZ2FpbnN0IHdoaWNoIHJlbGF0aXZlIFVSSXMgaW4gdGhlDQotICAgICBkb2N1bWVudCB3aWxsIGJlIHJlc29sdmVkLg0KLQ0KLSAgICAgTm90ZSB0aGF0IHRoaXMgbW9kdWxlIGFsc28gcmVkZWNsYXJlcyB0aGUgY29udGVudCBtb2RlbCBmb3INCi0gICAgIHRoZSBoZWFkIGVsZW1lbnQgdG8gaW5jbHVkZSB0aGUgYmFzZSBlbGVtZW50Lg0KLS0tPg0KLQ0KLTwhLS0gYmFzZTogRG9jdW1lbnQgQmFzZSBVUkkgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgYmFzZS5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyViYXNlLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgYmFzZS5jb250ZW50ICAiRU1QVFkiID4NCi08IUVOVElUWSAlIGJhc2UucW5hbWUgICJiYXNlIiA+DQotPCFFTEVNRU5UICViYXNlLnFuYW1lOyAgJWJhc2UuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGJhc2UuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGJhc2UuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslYmFzZS5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWJhc2UucW5hbWU7DQotICAgICAgJVhIVE1MLnhtbG5zLmF0dHJpYjsNCi0gICAgICBocmVmICAgICAgICAgJVVSSS5kYXRhdHlwZTsgICAgICAgICAgICNSRVFVSVJFRA0KLT4NCi08IS0tIGVuZCBvZiBiYXNlLmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBoZWFkLmNvbnRlbnQNCi0gICAgIiggJUhlYWRPcHRzLm1peDssDQotICAgICAoICggJXRpdGxlLnFuYW1lOywgJUhlYWRPcHRzLm1peDssICggJWJhc2UucW5hbWU7LCAlSGVhZE9wdHMubWl4OyApPyApDQotICAgICB8ICggJWJhc2UucW5hbWU7LCAlSGVhZE9wdHMubWl4OywgKCAldGl0bGUucW5hbWU7LCAlSGVhZE9wdHMubWl4OyApKSkpIg0KLT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1iYXNlLTEubW9kIC0tPg0KLQ0KLQ0KLTwhLS0gU3R5bGVzaGVldHMgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLXN0eWxlLm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgU3R5bGUgU2hlZXRzIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1zdHlsZS0xLm1vZCI+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgRG9jdW1lbnQgU3R5bGUgU2hlZXQgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLXN0eWxlLTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MLCBhIHJlZm9ybXVsYXRpb24gb2YgSFRNTCBhcyBhIG1vZHVsYXIgWE1MIGFwcGxpY2F0aW9uLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUmV2aXNpb246ICRJZDogeGh0bWwtbW9iaWxlMTAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1NyBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgU3R5bGUgU2hlZXRzIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLXN0eWxlLTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIFN0eWxlIFNoZWV0cw0KLQ0KLSAgICAgICAgc3R5bGUNCi0NCi0gICAgIFRoaXMgbW9kdWxlIGRlY2xhcmVzIHRoZSBzdHlsZSBlbGVtZW50IHR5cGUgYW5kIGl0cyBhdHRyaWJ1dGVzLA0KLSAgICAgdXNlZCB0byBlbWJlZCBzdHlsZSBzaGVldCBpbmZvcm1hdGlvbiBpbiB0aGUgZG9jdW1lbnQgaGVhZCBlbGVtZW50Lg0KLS0tPg0KLQ0KLTwhLS0gc3R5bGU6IFN0eWxlIFNoZWV0IEluZm9ybWF0aW9uIC4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgc3R5bGUuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslc3R5bGUuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBzdHlsZS5jb250ZW50ICAiKCAjUENEQVRBICkiID4NCi08IUVOVElUWSAlIHN0eWxlLnFuYW1lICAic3R5bGUiID4NCi08IUVMRU1FTlQgJXN0eWxlLnFuYW1lOyAgJXN0eWxlLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBzdHlsZS5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgc3R5bGUuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslc3R5bGUuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVzdHlsZS5xbmFtZTsNCi0gICAgICAlWEhUTUwueG1sbnMuYXR0cmliOw0KLSAgICAgICV0aXRsZS5hdHRyaWI7DQotICAgICAgJUkxOG4uYXR0cmliOw0KLSAgICAgIHR5cGUgICAgICAgICAlQ29udGVudFR5cGUuZGF0YXR5cGU7ICAgI1JFUVVJUkVEDQotICAgICAgbWVkaWEgICAgICAgICVNZWRpYURlc2MuZGF0YXR5cGU7ICAgICAjSU1QTElFRA0KLSAgICAgIHhtbDpzcGFjZSAgICAoIHByZXNlcnZlICkgICAgICAgICAgICAgI0ZJWEVEICdwcmVzZXJ2ZScNCi0+DQotPCEtLSBlbmQgb2Ygc3R5bGUuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1zdHlsZS0xLm1vZCAtLT4NCi0NCi0NCi08IS0tIFBhcmFtIEVsZW1lbnQgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1wYXJhbS5tb2QNCi0gICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBQYXJhbSBFbGVtZW50IDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1wYXJhbS0xLm1vZCIgPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhIVE1MIFBhcmFtIEVsZW1lbnQgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtcGFyYW0tMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwsIGEgcmVmb3JtdWxhdGlvbiBvZiBIVE1MIGFzIGEgbW9kdWxhciBYTUwgYXBwbGljYXRpb24uDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB4aHRtbC1tb2JpbGUxMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU3IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIFBhcmFtIEVsZW1lbnQgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtcGFyYW0tMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotICAgICAobm9uZSkNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gUGFyYW1ldGVycyBmb3IgSmF2YSBBcHBsZXRzIGFuZCBFbWJlZGRlZCBPYmplY3RzDQotDQotICAgICAgICBwYXJhbQ0KLQ0KLSAgICAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgZGVjbGFyYXRpb25zIGZvciB0aGUgcGFyYW0gZWxlbWVudCwNCi0gICAgIHVzZWQgdG8gcHJvdmlkZSBuYW1lZCBwcm9wZXJ0eSB2YWx1ZXMgZm9yIHRoZSBhcHBsZXQNCi0gICAgIGFuZCBvYmplY3QgZWxlbWVudHMuDQotLS0+DQotDQotPCEtLSBwYXJhbTogTmFtZWQgUHJvcGVydHkgVmFsdWUgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBwYXJhbS5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVwYXJhbS5lbGVtZW50O1sNCi08IUVOVElUWSAlIHBhcmFtLmNvbnRlbnQgICJFTVBUWSIgPg0KLTwhRU5USVRZICUgcGFyYW0ucW5hbWUgICJwYXJhbSIgPg0KLTwhRUxFTUVOVCAlcGFyYW0ucW5hbWU7ICAlcGFyYW0uY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIHBhcmFtLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBwYXJhbS5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVwYXJhbS5hdHRsaXN0O1sNCi08IUFUVExJU1QgJXBhcmFtLnFuYW1lOw0KLSAgICAgICVYSFRNTC54bWxucy5hdHRyaWI7DQotICAgICAgJWlkLmF0dHJpYjsNCi0gICAgICBuYW1lICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgIHZhbHVlICAgICAgICBDREFUQSAgICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICB2YWx1ZXR5cGUgICAgKCBkYXRhIHwgcmVmIHwgb2JqZWN0ICkgICdkYXRhJw0KLSAgICAgIHR5cGUgICAgICAgICAlQ29udGVudFR5cGUuZGF0YXR5cGU7ICAgI0lNUExJRUQNCi0+DQotPCEtLSBlbmQgb2YgcGFyYW0uYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1wYXJhbS0xLm1vZCAtLT4NCi0NCi0NCi08IS0tIEVtYmVkZGVkIE9iamVjdCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1vYmplY3QubW9kDQotICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgRW1iZWRkZWQgT2JqZWN0IDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1vYmplY3QtMS5tb2QiID4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBFbWJlZGRlZCBPYmplY3QgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtb2JqZWN0LTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MLCBhIHJlZm9ybXVsYXRpb24gb2YgSFRNTCBhcyBhIG1vZHVsYXIgWE1MIGFwcGxpY2F0aW9uLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUmV2aXNpb246ICRJZDogeGh0bWwtbW9iaWxlMTAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1NyBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBFbWJlZGRlZCBPYmplY3QgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtb2JqZWN0LTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIEVtYmVkZGVkIE9iamVjdHMNCi0NCi0gICAgICAgIG9iamVjdA0KLQ0KLSAgICAgVGhpcyBtb2R1bGUgZGVjbGFyZXMgdGhlIG9iamVjdCBlbGVtZW50IHR5cGUgYW5kIGl0cyBhdHRyaWJ1dGVzLCB1c2VkDQotICAgICB0byBlbWJlZCBleHRlcm5hbCBvYmplY3RzIGFzIHBhcnQgb2YgWEhUTUwgcGFnZXMuIEluIHRoZSBkb2N1bWVudCwNCi0gICAgIHBsYWNlIHBhcmFtIGVsZW1lbnRzIHByaW9yIHRvIG90aGVyIGNvbnRlbnQgd2l0aGluIHRoZSBvYmplY3QgZWxlbWVudC4NCi0NCi0gICAgIE5vdGUgdGhhdCB1c2Ugb2YgdGhpcyBtb2R1bGUgcmVxdWlyZXMgaW5zdGFudGlhdGlvbiBvZiB0aGUgUGFyYW0NCi0gICAgIEVsZW1lbnQgTW9kdWxlLg0KLS0tPg0KLQ0KLTwhLS0gb2JqZWN0OiBHZW5lcmljIEVtYmVkZGVkIE9iamVjdCAuLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgb2JqZWN0LmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJW9iamVjdC5lbGVtZW50O1sNCi08IUVOVElUWSAlIG9iamVjdC5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUZsb3cubWl4OyB8ICVwYXJhbS5xbmFtZTsgKSoiDQotPg0KLTwhRU5USVRZICUgb2JqZWN0LnFuYW1lICAib2JqZWN0IiA+DQotPCFFTEVNRU5UICVvYmplY3QucW5hbWU7ICAlb2JqZWN0LmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBvYmplY3QuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIG9iamVjdC5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVvYmplY3QuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVvYmplY3QucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotICAgICAgZGVjbGFyZSAgICAgICggZGVjbGFyZSApICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIGNsYXNzaWQgICAgICAlVVJJLmRhdGF0eXBlOyAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICBjb2RlYmFzZSAgICAgJVVSSS5kYXRhdHlwZTsgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgZGF0YSAgICAgICAgICVVUkkuZGF0YXR5cGU7ICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIHR5cGUgICAgICAgICAlQ29udGVudFR5cGUuZGF0YXR5cGU7ICAgI0lNUExJRUQNCi0gICAgICBjb2RldHlwZSAgICAgJUNvbnRlbnRUeXBlLmRhdGF0eXBlOyAgICNJTVBMSUVEDQotICAgICAgYXJjaGl2ZSAgICAgICVVUklzLmRhdGF0eXBlOyAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIHN0YW5kYnkgICAgICAlVGV4dC5kYXRhdHlwZTsgICAgICAgICAgI0lNUExJRUQNCi0gICAgICBoZWlnaHQgICAgICAgJUxlbmd0aC5kYXRhdHlwZTsgICAgICAgICNJTVBMSUVEDQotICAgICAgd2lkdGggICAgICAgICVMZW5ndGguZGF0YXR5cGU7ICAgICAgICAjSU1QTElFRA0KLSAgICAgIG5hbWUgICAgICAgICBDREFUQSAgICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICB0YWJpbmRleCAgICAgJU51bWJlci5kYXRhdHlwZTsgICAgICAgICNJTVBMSUVEDQotPg0KLTwhLS0gZW5kIG9mIG9iamVjdC5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLW9iamVjdC0xLm1vZCAtLT4NCi0NCi0NCi08IS0tIERvY3VtZW50IFN0cnVjdHVyZSBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1zdHJ1Y3QubW9kDQotICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgRG9jdW1lbnQgU3RydWN0dXJlIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1zdHJ1Y3QtMS5tb2QiID4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBTdHJ1Y3R1cmUgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtc3RydWN0LTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MLCBhIHJlZm9ybXVsYXRpb24gb2YgSFRNTCBhcyBhIG1vZHVsYXIgWE1MIGFwcGxpY2F0aW9uLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUmV2aXNpb246ICRJZDogeGh0bWwtbW9iaWxlMTAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1NyBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBEb2N1bWVudCBTdHJ1Y3R1cmUgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtc3RydWN0LTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIERvY3VtZW50IFN0cnVjdHVyZQ0KLQ0KLSAgICAgICAgdGl0bGUsIGhlYWQsIGJvZHksIGh0bWwNCi0NCi0gICAgIFRoZSBTdHJ1Y3R1cmUgTW9kdWxlIGRlZmluZXMgdGhlIG1ham9yIHN0cnVjdHVyYWwgZWxlbWVudHMgYW5kDQotICAgICB0aGVpciBhdHRyaWJ1dGVzLg0KLQ0KLSAgICAgTm90ZSB0aGF0IHRoZSBjb250ZW50IG1vZGVsIG9mIHRoZSBoZWFkIGVsZW1lbnQgdHlwZSBpcyByZWRlY2xhcmVkDQotICAgICB3aGVuIHRoZSBCYXNlIE1vZHVsZSBpcyBpbmNsdWRlZCBpbiB0aGUgRFRELg0KLQ0KLSAgICAgVGhlIHBhcmFtZXRlciBlbnRpdHkgY29udGFpbmluZyB0aGUgWE1MIG5hbWVzcGFjZSBVUkkgdmFsdWUgdXNlZA0KLSAgICAgZm9yIFhIVE1MIGlzICclWEhUTUwueG1sbnM7JywgZGVmaW5lZCBpbiB0aGUgUXVhbGlmaWVkIE5hbWVzIG1vZHVsZS4NCi0tLT4NCi0NCi08IS0tIHRpdGxlOiBEb2N1bWVudCBUaXRsZSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIFRoZSB0aXRsZSBlbGVtZW50IGlzIG5vdCBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIGZsb3cgb2YgdGV4dC4NCi0gICAgIEl0IHNob3VsZCBiZSBkaXNwbGF5ZWQsIGZvciBleGFtcGxlIGFzIHRoZSBwYWdlIGhlYWRlciBvcg0KLSAgICAgd2luZG93IHRpdGxlLiBFeGFjdGx5IG9uZSB0aXRsZSBpcyByZXF1aXJlZCBwZXIgZG9jdW1lbnQuDQotLS0+DQotDQotPCFFTlRJVFkgJSB0aXRsZS5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyV0aXRsZS5lbGVtZW50O1sNCi08IUVOVElUWSAlIHRpdGxlLmNvbnRlbnQgICIoICNQQ0RBVEEgKSIgPg0KLTwhRU5USVRZICUgdGl0bGUucW5hbWUgICJ0aXRsZSIgPg0KLTwhRUxFTUVOVCAldGl0bGUucW5hbWU7ICAldGl0bGUuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIHRpdGxlLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSB0aXRsZS5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyV0aXRsZS5hdHRsaXN0O1sNCi08IUFUVExJU1QgJXRpdGxlLnFuYW1lOw0KLSAgICAgICVYSFRNTC54bWxucy5hdHRyaWI7DQotICAgICAgJUkxOG4uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiB0aXRsZS5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gaGVhZDogRG9jdW1lbnQgSGVhZCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgaGVhZC5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVoZWFkLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgaGVhZC5jb250ZW50DQotICAgICIoICVIZWFkT3B0cy5taXg7LCAldGl0bGUucW5hbWU7LCAlSGVhZE9wdHMubWl4OyApIg0KLT4NCi08IUVOVElUWSAlIGhlYWQucW5hbWUgICJoZWFkIiA+DQotPCFFTEVNRU5UICVoZWFkLnFuYW1lOyAgJWhlYWQuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGhlYWQuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGhlYWQuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslaGVhZC5hdHRsaXN0O1sNCi08IS0tIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlIHdpdGggZG9jdW1lbnQgcHJvZmlsZXMNCi0tLT4NCi08IUVOVElUWSAlIHByb2ZpbGUuYXR0cmliDQotICAgICAicHJvZmlsZSAgICAgICVVUkkuZGF0YXR5cGU7ICAgICAgICAgICAnJVhIVE1MLnByb2ZpbGU7JyINCi0+DQotDQotPCFBVFRMSVNUICVoZWFkLnFuYW1lOw0KLSAgICAgICVYSFRNTC54bWxucy5hdHRyaWI7DQotICAgICAgJUkxOG4uYXR0cmliOw0KLSAgICAgICVwcm9maWxlLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgaGVhZC5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gYm9keTogRG9jdW1lbnQgQm9keSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgYm9keS5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVib2R5LmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgYm9keS5jb250ZW50DQotICAgICAiKCAlQmxvY2subWl4OyApKyINCi0+DQotPCFFTlRJVFkgJSBib2R5LnFuYW1lICAiYm9keSIgPg0KLTwhRUxFTUVOVCAlYm9keS5xbmFtZTsgICVib2R5LmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBib2R5LmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBib2R5LmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWJvZHkuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVib2R5LnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBib2R5LmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBodG1sOiBYSFRNTCBEb2N1bWVudCBFbGVtZW50IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBodG1sLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWh0bWwuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBodG1sLmNvbnRlbnQgICIoICVoZWFkLnFuYW1lOywgJWJvZHkucW5hbWU7ICkiID4NCi08IUVOVElUWSAlIGh0bWwucW5hbWUgICJodG1sIiA+DQotPCFFTEVNRU5UICVodG1sLnFuYW1lOyAgJWh0bWwuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGh0bWwuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGh0bWwuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslaHRtbC5hdHRsaXN0O1sNCi08IS0tIHZlcnNpb24gYXR0cmlidXRlIHZhbHVlIGRlZmluZWQgaW4gZHJpdmVyDQotLS0+DQotPCFFTlRJVFkgJSBYSFRNTC52ZXJzaW9uLmF0dHJpYg0KLSAgICAgInZlcnNpb24gICAgICAlRlBJLmRhdGF0eXBlOyAgICAgICAgICAgI0ZJWEVEICclWEhUTUwudmVyc2lvbjsnIg0KLT4NCi0NCi08IS0tIHNlZSB0aGUgUXVhbGlmaWVkIE5hbWVzIG1vZHVsZSBmb3IgaW5mb3JtYXRpb24NCi0gICAgIG9uIGhvdyB0byBleHRlbmQgWEhUTUwgdXNpbmcgWE1MIG5hbWVzcGFjZXMNCi0tLT4NCi08IUFUVExJU1QgJWh0bWwucW5hbWU7DQotICAgICAgJVhIVE1MLnhtbG5zLmF0dHJpYjsNCi0gICAgICAlWEhUTUwudmVyc2lvbi5hdHRyaWI7DQotICAgICAgJUkxOG4uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBodG1sLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtc3RydWN0LTEubW9kIC0tPg0KLQ0KLQ0KLTwhLS0gQmxvY2sgUHJlc2VudGF0aW9uIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1ibGtwcmVzLm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgQmxvY2sgUHJlc2VudGF0aW9uIDEuMC8vRU4iDQotIAkJImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1ibGtwcmVzLTEubW9kIj4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBCbG9jayBQcmVzZW50YXRpb24gTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtYmxrcHJlcy0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCwgYSByZWZvcm11bGF0aW9uIG9mIEhUTUwgYXMgYSBtb2R1bGFyIFhNTCBhcHBsaWNhdGlvbi4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJldmlzaW9uOiAkSWQ6IHhodG1sLW1vYmlsZTEwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTcgcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgQmxvY2sgUHJlc2VudGF0aW9uIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWJsa3ByZXMtMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotICAgICAobm9uZSkNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gQmxvY2sgUHJlc2VudGF0aW9uYWwgRWxlbWVudHMNCi0NCi0gICAgICAgIGhyDQotDQotICAgICBUaGlzIG1vZHVsZSBkZWNsYXJlcyB0aGUgZWxlbWVudHMgYW5kIHRoZWlyIGF0dHJpYnV0ZXMgdXNlZCB0bw0KLSAgICAgc3VwcG9ydCBibG9jay1sZXZlbCBwcmVzZW50YXRpb25hbCBtYXJrdXAuDQotLS0+DQotDQotPCFFTlRJVFkgJSBoci5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVoci5lbGVtZW50O1sNCi08IUVOVElUWSAlIGhyLmNvbnRlbnQgICJFTVBUWSIgPg0KLTwhRU5USVRZICUgaHIucW5hbWUgICJociIgPg0KLTwhRUxFTUVOVCAlaHIucW5hbWU7ICAlaHIuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGhyLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBoci5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVoci5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWhyLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBoci5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLWJsa3ByZXMtMS5tb2QgLS0+DQotDQotDQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLSANCi0JSW5saW5lIFByZXNlbnRhdGlvbjogYiwgYmlnLCBpLCBzbWFsbAkJDQotLS0+DQotPCFFTlRJVFkgJSBzdWIuZWxlbWVudCAiSUdOT1JFIj4NCi08IUVOVElUWSAlIHN1Yi5hdHRsaXN0ICJJR05PUkUiPg0KLTwhRU5USVRZICUgc3VwLmVsZW1lbnQgIklHTk9SRSI+DQotPCFFTlRJVFkgJSBzdXAuYXR0bGlzdCAiSUdOT1JFIj4NCi08IUVOVElUWSAlIHR0LmVsZW1lbnQgIklHTk9SRSI+DQotPCFFTlRJVFkgJSB0dC5hdHRsaXN0ICJJR05PUkUiPg0KLTwhRU5USVRZICUgeGh0bWwtaW5scHJlcy5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIElubGluZSBQcmVzZW50YXRpb24gMS4wLy9FTiINCi0JCSJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtaW5scHJlcy0xLm1vZCI+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgSW5saW5lIFByZXNlbnRhdGlvbiBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLWlubHByZXMtMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwsIGEgcmVmb3JtdWxhdGlvbiBvZiBIVE1MIGFzIGEgbW9kdWxhciBYTUwgYXBwbGljYXRpb24uDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB4aHRtbC1tb2JpbGUxMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU3IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIElubGluZSBQcmVzZW50YXRpb24gMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtaW5scHJlcy0xLm1vZCINCi0NCi0gICAgIFJldmlzaW9uczoNCi0gICAgIChub25lKQ0KLSAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBJbmxpbmUgUHJlc2VudGF0aW9uYWwgRWxlbWVudHMNCi0NCi0gICAgICAgIGIsIGJpZywgaSwgc21hbGwsIHN1Yiwgc3VwLCB0dA0KLQ0KLSAgICAgVGhpcyBtb2R1bGUgZGVjbGFyZXMgdGhlIGVsZW1lbnRzIGFuZCB0aGVpciBhdHRyaWJ1dGVzIHVzZWQgdG8NCi0gICAgIHN1cHBvcnQgaW5saW5lLWxldmVsIHByZXNlbnRhdGlvbmFsIG1hcmt1cC4NCi0tLT4NCi0NCi08IUVOVElUWSAlIGIuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslYi5lbGVtZW50O1sNCi08IUVOVElUWSAlIGIuY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiINCi0+DQotPCFFTlRJVFkgJSBiLnFuYW1lICAiYiIgPg0KLTwhRUxFTUVOVCAlYi5xbmFtZTsgICViLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBiLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBiLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWIuYXR0bGlzdDtbDQotPCFBVFRMSVNUICViLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBiLmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBiaWcuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslYmlnLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgYmlnLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiDQotPg0KLTwhRU5USVRZICUgYmlnLnFuYW1lICAiYmlnIiA+DQotPCFFTEVNRU5UICViaWcucW5hbWU7ICAlYmlnLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBiaWcuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGJpZy5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyViaWcuYXR0bGlzdDtbDQotPCFBVFRMSVNUICViaWcucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGJpZy5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgaS5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVpLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgaS5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7ICkqIg0KLT4NCi08IUVOVElUWSAlIGkucW5hbWUgICJpIiA+DQotPCFFTEVNRU5UICVpLnFuYW1lOyAgJWkuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGkuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGkuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslaS5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWkucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGkuYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHNtYWxsLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJXNtYWxsLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgc21hbGwuY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiINCi0+DQotPCFFTlRJVFkgJSBzbWFsbC5xbmFtZSAgInNtYWxsIiA+DQotPCFFTEVNRU5UICVzbWFsbC5xbmFtZTsgICVzbWFsbC5jb250ZW50OyA+DQotPCEtLSBlbmQgb2Ygc21hbGwuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHNtYWxsLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJXNtYWxsLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlc21hbGwucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIHNtYWxsLmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBzdWIuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslc3ViLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgc3ViLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiDQotPg0KLTwhRU5USVRZICUgc3ViLnFuYW1lICAic3ViIiA+DQotPCFFTEVNRU5UICVzdWIucW5hbWU7ICAlc3ViLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBzdWIuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHN1Yi5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVzdWIuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVzdWIucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIHN1Yi5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgc3VwLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJXN1cC5lbGVtZW50O1sNCi08IUVOVElUWSAlIHN1cC5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7ICkqIg0KLT4NCi08IUVOVElUWSAlIHN1cC5xbmFtZSAgInN1cCIgPg0KLTwhRUxFTUVOVCAlc3VwLnFuYW1lOyAgJXN1cC5jb250ZW50OyA+DQotPCEtLSBlbmQgb2Ygc3VwLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBzdXAuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslc3VwLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlc3VwLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBzdXAuYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHR0LmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJXR0LmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgdHQuY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiINCi0+DQotPCFFTlRJVFkgJSB0dC5xbmFtZSAgInR0IiA+DQotPCFFTEVNRU5UICV0dC5xbmFtZTsgICV0dC5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgdHQuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHR0LmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJXR0LmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAldHQucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIHR0LmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtaW5scHJlcy0xLm1vZCAtLT4NCi0NCi0NCi08IS0tIGVuZCBvZiBYSFRNTCBNb2JpbGUgMS4wIERURCAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC94aHRtbC1tb2JpbGUxMC1tb2RlbC0xLm1vZCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMi0wL3hodG1sLW1vYmlsZTEwLW1vZGVsLTEubW9kCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODBlMjVlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMi0wL3hodG1sLW1vYmlsZTEwLW1vZGVsLTEubW9kCisrKyAvZGV2L251bGwKQEAgLTEsMTYwICswLDAgQEAKLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBNb2JpbGUgMS4wIERvY3VtZW50IE1vZGVsIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtbW9iaWxlMTAtbW9kZWwtMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwgTW9iaWxlLCBhIHByb3BlciBzdWJzZXQgb2YgWEhUTUwuDQotICAgICAJQFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtLCBMdGQuIDIwMDEuDQotDQotCVRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHVzZSBhcmUgYXZhaWxhYmxlIGZyb20gdGhlIFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4gDQotCVdlYiBzaXRlIChodHRwOi8vd3d3LndhcGZvcnVtLm9yZy93aGF0L2NvcHlyaWdodC5odG0pLg0KLSAgICANCi0tLT4NCi08IS0tIFhIVE1MIE1vYmlsZSBEb2N1bWVudCBNb2RlbA0KLQ0KLSAgICAgVGhpcyBtb2R1bGUgZGVzY3JpYmVzIHRoZSBncm91cGluZ3Mgb2YgZWxlbWVudHMgdGhhdCBtYWtlIHVwDQotICAgICBjb21tb24gY29udGVudCBtb2RlbHMgZm9yIFhIVE1MIGVsZW1lbnRzLg0KLS0tPg0KLQ0KLTwhLS0gT3B0aW9uYWwgRWxlbWVudHMgaW4gaGVhZCAgLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBIZWFkT3B0cy5taXgNCi0gICAgICIoICVtZXRhLnFuYW1lOyB8ICVsaW5rLnFuYW1lOyB8ICVvYmplY3QucW5hbWU7IHwgJXN0eWxlLnFuYW1lOyApKiIgPg0KLQ0KLTwhLS0gTWlzY2VsbGFuZW91cyBFbGVtZW50cyAgLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBNaXNjLmNsYXNzICIiID4NCi0NCi08IS0tIElubGluZSBFbGVtZW50cyAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgSW5sU3RydWN0LmNsYXNzICIlYnIucW5hbWU7IHwgJXNwYW4ucW5hbWU7IiA+DQotDQotPCFFTlRJVFkgJSBJbmxQaHJhcy5jbGFzcw0KLSAgICAgInwgJWVtLnFuYW1lOyB8ICVzdHJvbmcucW5hbWU7IHwgJWRmbi5xbmFtZTsgfCAlY29kZS5xbmFtZTsNCi0gICAgICB8ICVzYW1wLnFuYW1lOyB8ICVrYmQucW5hbWU7IHwgJXZhci5xbmFtZTsgfCAlY2l0ZS5xbmFtZTsNCi0gICAgICB8ICVhYmJyLnFuYW1lOyB8ICVhY3JvbnltLnFuYW1lOyB8ICVxLnFuYW1lOyIgPg0KLQ0KLTwhRU5USVRZICUgSW5sUHJlcy5jbGFzcw0KLSAgICAgInwgJWkucW5hbWU7IHwgJWIucW5hbWU7IHwgJWJpZy5xbmFtZTsgfCAlc21hbGwucW5hbWU7ICIgPg0KLQ0KLQ0KLTwhRU5USVRZICUgSTE4bi5jbGFzcyAiIiA+DQotDQotPCFFTlRJVFkgJSBBbmNob3IuY2xhc3MgInwgJWEucW5hbWU7IiA+DQotDQotPCFFTlRJVFkgJSBJbmxTcGVjaWFsLmNsYXNzICJ8ICVpbWcucW5hbWU7IHwgJW9iamVjdC5xbmFtZTsiID4NCi0NCi08IUVOVElUWSAlIElubEZvcm0uY2xhc3MNCi0gICAgICJ8ICVpbnB1dC5xbmFtZTsgfCAlc2VsZWN0LnFuYW1lOyB8ICV0ZXh0YXJlYS5xbmFtZTsNCi0gICAgICB8ICVsYWJlbC5xbmFtZTsiDQotPg0KLQ0KLTwhRU5USVRZICUgSW5saW5lLmV4dHJhICIiID4NCi0NCi08IUVOVElUWSAlIElubGluZS5jbGFzcw0KLSAgICAgIiVJbmxTdHJ1Y3QuY2xhc3M7DQotICAgICAgJUlubFBocmFzLmNsYXNzOw0KLSAgICAgICVBbmNob3IuY2xhc3M7DQotICAgICAgJUlubFNwZWNpYWwuY2xhc3M7DQotICAgICAgJUlubEZvcm0uY2xhc3M7DQotICAgICAgJUlubGluZS5leHRyYTsiDQotPg0KLQ0KLTwhRU5USVRZICUgSW5sTm9BbmNob3IuY2xhc3MNCi0gICAgICIlSW5sU3RydWN0LmNsYXNzOw0KLSAgICAgICVJbmxQaHJhcy5jbGFzczsNCi0gICAgICAlSW5sU3BlY2lhbC5jbGFzczsNCi0gICAgICAlSW5sRm9ybS5jbGFzczsNCi0gICAgICAlSW5saW5lLmV4dHJhOyINCi0+DQotDQotPCFFTlRJVFkgJSBJbmxOb0FuY2hvci5taXgNCi0gICAgICIlSW5sTm9BbmNob3IuY2xhc3M7DQotICAgICAgJU1pc2MuY2xhc3M7Ig0KLT4NCi0NCi08IUVOVElUWSAlIElubGluZS5taXgNCi0gICAgICIlSW5saW5lLmNsYXNzOw0KLSAgICAgICVNaXNjLmNsYXNzOyINCi0+DQotDQotPCEtLSBCbG9jayBFbGVtZW50cyAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIEhlYWRpbmcuY2xhc3MNCi0gICAgICIlaDEucW5hbWU7IHwgJWgyLnFuYW1lOyB8ICVoMy5xbmFtZTsNCi0gICAgICB8ICVoNC5xbmFtZTsgfCAlaDUucW5hbWU7IHwgJWg2LnFuYW1lOyINCi0+DQotPCFFTlRJVFkgJSBMaXN0LmNsYXNzICAiJXVsLnFuYW1lOyB8ICVvbC5xbmFtZTsgfCAlZGwucW5hbWU7IiA+DQotDQotPCFFTlRJVFkgJSBUYWJsZS5jbGFzcyAifCAldGFibGUucW5hbWU7IiA+DQotDQotPCFFTlRJVFkgJSBGb3JtLmNsYXNzICAifCAlZm9ybS5xbmFtZTsiID4NCi0NCi08IUVOVElUWSAlIEZpZWxkc2V0LmNsYXNzICAifCAlZmllbGRzZXQucW5hbWU7IiA+DQotDQotPCFFTlRJVFkgJSBCbGtTdHJ1Y3QuY2xhc3MgIiVwLnFuYW1lOyB8ICVkaXYucW5hbWU7IiA+DQotDQotPCFFTlRJVFkgJSBCbGtQaHJhcy5jbGFzcw0KLSAgICAgInwgJXByZS5xbmFtZTsgfCAlYmxvY2txdW90ZS5xbmFtZTsgfCAlYWRkcmVzcy5xbmFtZTsiDQotPg0KLQ0KLTwhRU5USVRZICUgQmxrUHJlcy5jbGFzcyAifCAlaHIucW5hbWU7IiA+DQotDQotPCFFTlRJVFkgJSBCbGtTcGVjaWFsLmNsYXNzDQotICAgICAiJVRhYmxlLmNsYXNzOw0KLSAgICAgICVGb3JtLmNsYXNzOw0KLSAgICAgICVGaWVsZHNldC5jbGFzczsiDQotPg0KLQ0KLTwhRU5USVRZICUgQmxvY2suZXh0cmEgIiIgPg0KLQ0KLTwhRU5USVRZICUgQmxvY2suY2xhc3MNCi0gICAgICIlQmxrU3RydWN0LmNsYXNzOw0KLSAgICAgICVCbGtQaHJhcy5jbGFzczsNCi0gICAgICAlQmxrUHJlcy5jbGFzczsNCi0gICAgICAlQmxrU3BlY2lhbC5jbGFzczsNCi0gICAgICAlQmxvY2suZXh0cmE7Ig0KLT4NCi0NCi08IUVOVElUWSAlIEJsa05vRm9ybS5taXgNCi0gICAgICIlSGVhZGluZy5jbGFzczsNCi0gICAgICB8ICVMaXN0LmNsYXNzOw0KLSAgICAgIHwgJUJsa1N0cnVjdC5jbGFzczsNCi0gICAgICAlQmxrUGhyYXMuY2xhc3M7DQotICAgICAgJUJsa1ByZXMuY2xhc3M7DQotICAgICAgJVRhYmxlLmNsYXNzOw0KLSAgICAgICVCbG9jay5leHRyYTsNCi0gICAgICAlTWlzYy5jbGFzczsiDQotPg0KLQ0KLTwhRU5USVRZICUgQmxvY2subWl4DQotICAgICAiJUhlYWRpbmcuY2xhc3M7DQotICAgICAgfCAlTGlzdC5jbGFzczsNCi0gICAgICB8ICVCbG9jay5jbGFzczsNCi0gICAgICAlTWlzYy5jbGFzczsiDQotPg0KLQ0KLTwhLS0gQWxsIENvbnRlbnQgRWxlbWVudHMgIC4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBkZWNsYXJlcyBhbGwgY29udGVudCBleGNlcHQgdGFibGVzDQotLS0+DQotPCFFTlRJVFkgJSBGbG93Tm9UYWJsZS5taXgNCi0gICAgICIlSGVhZGluZy5jbGFzczsNCi0gICAgICB8ICVMaXN0LmNsYXNzOw0KLSAgICAgIHwgJUJsa1N0cnVjdC5jbGFzczsNCi0gICAgICAlQmxrUGhyYXMuY2xhc3M7DQotICAgICAgJUZvcm0uY2xhc3M7DQotICAgICAgJUJsb2NrLmV4dHJhOw0KLSAgICAgIHwgJUlubGluZS5jbGFzczsNCi0gICAgICAlTWlzYy5jbGFzczsiDQotPg0KLQ0KLQ0KLTwhRU5USVRZICUgRmxvdy5taXgNCi0gICAgICIlSGVhZGluZy5jbGFzczsNCi0gICAgICB8ICVMaXN0LmNsYXNzOw0KLSAgICAgIHwgJUJsb2NrLmNsYXNzOw0KLSAgICAgIHwgJUlubGluZS5jbGFzczsNCi0gICAgICAlTWlzYy5jbGFzczsiDQotPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLW1vYmlsZTEwLW1vZGVsLTEubW9kIC0tPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMi0wL3hodG1sLW1vYmlsZTEwLmR0ZCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMi0wL3hodG1sLW1vYmlsZTEwLmR0ZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWViNmIyYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC94aHRtbC1tb2JpbGUxMC5kdGQKKysrIC9kZXYvbnVsbApAQCAtMSwxODkgKzAsMCBAQAotPCEtLSBYSFRNTCBNb2JpbGUgMS4wIERURCAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtbW9iaWxlMTAuZHRkIC0tPg0KLTwhLS0gDQotICAgICBUaGlzIGlzIFhIVE1MIE1vYmlsZSBwcm9maWxlLCBhIHByb3BlciBzdWJzZXQgb2YgWEhUTUwuDQotICAgICANCi0gICAgIAlAV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0sIEx0ZC4gMjAwMS4NCi0NCi0JVGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlIGFyZSBhdmFpbGFibGUgZnJvbSB0aGUgV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiANCi0JV2ViIHNpdGUgKGh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL3doYXQvY29weXJpZ2h0Lmh0bSkuDQotICAgIA0KLS0tPg0KLTwhLS0gVGhpcyBpcyB0aGUgZHJpdmVyIGZpbGUgZm9yIHZlcnNpb24gMS4wIG9mIHRoZSBYSFRNTCBNb2JpbGUgRFRELg0KLQ0KLSAgICAgVGhpcyBEVEQgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICBQVUJMSUM6ICItLy9XQVBGT1JVTS8vRFREIFhIVE1MIE1vYmlsZSAxLjAvL0VOIg0KLSAgICAgU1lTVEVNOiAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3hodG1sLW1vYmlsZTEwLmR0ZCINCi0tLT4NCi08IUVOVElUWSAlIFhIVE1MLnZlcnNpb24gICItLy9XQVBGT1JVTS8vRFREIFhIVE1MIE1vYmlsZSAxLjAvL0VOIiA+DQotDQotPCEtLSBVc2UgdGhpcyBVUkkgdG8gaWRlbnRpZnkgdGhlIGRlZmF1bHQgbmFtZXNwYWNlOg0KLQ0KLSAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIg0KLQ0KLSAgICAgU2VlIHRoZSBRdWFsaWZpZWQgTmFtZXMgbW9kdWxlIGZvciBpbmZvcm1hdGlvbg0KLSAgICAgb24gdGhlIHVzZSBvZiBuYW1lc3BhY2UgcHJlZml4ZXMgaW4gdGhlIERURC4NCi0tLT4NCi08IUVOVElUWSAlIE5TLnByZWZpeGVkICJJR05PUkUiID4NCi08IUVOVElUWSAlIFhIVE1MLnByZWZpeCAgIiIgPg0KLQ0KLTwhLS0gRm9yIGV4YW1wbGUsIGlmIHlvdSBhcmUgdXNpbmcgWEhUTUwgTW9iaWxlIDEuMCBkaXJlY3RseSwgdXNlDQotICAgICB0aGUgRlBJIGluIHRoZSBET0NUWVBFIGRlY2xhcmF0aW9uLCB3aXRoIHRoZSB4bWxucyBhdHRyaWJ1dGUNCi0gICAgIG9uIHRoZSBkb2N1bWVudCBlbGVtZW50IHRvIGlkZW50aWZ5IHRoZSBkZWZhdWx0IG5hbWVzcGFjZToNCi0NCi0gICAgICAgICA8P3htbCB2ZXJzaW9uPSIxLjAiPz4NCi0gICAgICAgICA8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgWEhUTUwgTW9iaWxlIDEuMC8vRU4iDQotICAgICAgICAgICAgICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQveGh0bWwtbW9iaWxlMTAuZHRkIiA+DQotICAgICAgICAgPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiDQotICAgICAgICAgICAgICAgeG1sOmxhbmc9ImVuIiA+DQotICAgICAgICAgLi4uDQotICAgICAgICAgPC9odG1sPg0KLS0tPg0KLQ0KLTwhLS0gcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2Ugd2l0aCBkb2N1bWVudCBwcm9maWxlcyAtLT4NCi08IUVOVElUWSAlIFhIVE1MLnByb2ZpbGUgICIiID4NCi0NCi08IS0tIElubGluZSBTdHlsZSBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1pbmxzdHlsZS5tb2QNCi0gICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBJbmxpbmUgU3R5bGUgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWlubHN0eWxlLTEubW9kIiA+DQotJXhodG1sLWlubHN0eWxlLm1vZDsNCi0NCi08IS0tIERvY3VtZW50IE1vZGVsIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1tb2RlbC5tb2QNCi0gICAgIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0VOVElUSUVTIFhIVE1MIE1vYmlsZSAxLjAgRG9jdW1lbnQgTW9kZWwgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3hodG1sLW1vYmlsZTEwLW1vZGVsLTEubW9kIiA+DQotDQotPCEtLSBYSFRNTCBGcmFtZXdvcmsgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIFhIVE1MLmJpZGkgICJJR05PUkUiID4NCi08IUVOVElUWSAlIHhodG1sLWZyYW1ld29yay5tb2QNCi0gICAgIFBVQkxJQyAiLS8vVzNDLy9FTlRJVElFUyBYSFRNTCBNb2R1bGFyIEZyYW1ld29yayAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtZnJhbWV3b3JrLTEubW9kIiA+DQotJXhodG1sLWZyYW1ld29yay5tb2Q7DQotDQotPCEtLSBYSFRNTCBDb3JlIE1vZHVsZXMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHByZS5jb250ZW50DQotICAgICAiKCAjUENEQVRBDQotICAgICAgfCAlSW5sU3RydWN0LmNsYXNzOw0KLSAgICAgICVJbmxQaHJhcy5jbGFzczsNCi0gICAgICAlQW5jaG9yLmNsYXNzOw0KLSAgICAgICVJbmxpbmUuZXh0cmE7ICkqIg0KLT4NCi0NCi08IUVOVElUWSAlIHhodG1sLXRleHQubW9kDQotICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgVGV4dCAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtdGV4dC0xLm1vZCIgPg0KLSV4aHRtbC10ZXh0Lm1vZDsNCi0NCi08IUVOVElUWSAlIHhodG1sLWh5cGVydGV4dC5tb2QNCi0gICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBIeXBlcnRleHQgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWh5cGVydGV4dC0xLm1vZCIgPg0KLSV4aHRtbC1oeXBlcnRleHQubW9kOw0KLQ0KLTwhRU5USVRZICUgeGh0bWwtbGlzdC5tb2QNCi0gICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBMaXN0cyAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtbGlzdC0xLm1vZCIgPg0KLSV4aHRtbC1saXN0Lm1vZDsNCi08IS0tIEV4dGVuZCBsaXN0cyB3aXRoIHZhbHVlIGFuZCBzdGFydCBhdHRyaWJ1dGVzIC0tPiANCi08IUFUVExJU1QgJWxpLnFuYW1lOw0KLSAgICAgIHZhbHVlICAgICAgICAlTnVtYmVyLmRhdGF0eXBlOyAgICAgICAgICNJTVBMSUVEDQotPg0KLTwhQVRUTElTVCAlb2wucW5hbWU7DQotICAgICAgc3RhcnQgICAgICAgICVOdW1iZXIuZGF0YXR5cGU7ICAgICAgICAjSU1QTElFRA0KLT4NCi0NCi08IS0tIDo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6IC0tPg0KLQ0KLTwhLS0gSW1hZ2UgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLWltYWdlLm1vZA0KLSAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEltYWdlcyAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtaW1hZ2UtMS5tb2QiID4NCi0leGh0bWwtaW1hZ2UubW9kOw0KLQ0KLTwhLS0gVGFibGVzIE1vZHVsZSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLXRhYmxlLm1vZA0KLSAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEJhc2ljIFRhYmxlcyAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtYmFzaWMtdGFibGUtMS5tb2QiID4NCi0leGh0bWwtdGFibGUubW9kOw0KLQ0KLTwhLS0gRm9ybXMgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiANCi0JWEhUTUwgYmFzaWMgZm9ybXMgbW9kdWxlIGV4dGVuZGVkIHdpdGggb3B0Z3JvdXAgYW5kIGZpZWxkc2V0DQotLS0+DQotPCFFTEVNRU5UICVvcHRncm91cC5xbmFtZTsgKCVvcHRpb24ucW5hbWU7KSs+DQotPCFBVFRMSVNUICVvcHRncm91cC5xbmFtZTsNCi0JJUNvbW1vbi5hdHRyaWI7IA0KLQlsYWJlbCAlVGV4dC5kYXRhdHlwZTsgI1JFUVVJUkVEDQotPg0KLTwhRU5USVRZICUgc2VsZWN0LmNvbnRlbnQgIiggJW9wdGdyb3VwLnFuYW1lOyB8ICVvcHRpb24ucW5hbWU7ICkrIj4NCi08IUVMRU1FTlQgJWZpZWxkc2V0LnFuYW1lOyAoI1BDREFUQSB8ICVGbG93Lm1peDspKj4NCi08IUFUVExJU1QgJWZpZWxkc2V0LnFuYW1lOw0KLQklQ29tbW9uLmF0dHJpYjsgDQotPg0KLTwhRU5USVRZICUgZm9ybS5jb250ZW50ICIoICVCbGtOb0Zvcm0ubWl4OyB8ICVmaWVsZHNldC5xbmFtZTsgKSsiPg0KLTwhRU5USVRZICUgeGh0bWwtZm9ybS5tb2QNCi0gICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBCYXNpYyBGb3JtcyAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtYmFzaWMtZm9ybS0xLm1vZCIgPg0KLSV4aHRtbC1mb3JtLm1vZDsNCi0NCi08IS0tIExpbmsgRWxlbWVudCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1saW5rLm1vZA0KLSAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIExpbmsgRWxlbWVudCAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtbGluay0xLm1vZCIgPg0KLSV4aHRtbC1saW5rLm1vZDsNCi0NCi08IS0tIERvY3VtZW50IE1ldGFpbmZvcm1hdGlvbiBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1tZXRhLm1vZA0KLSAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIE1ldGFpbmZvcm1hdGlvbiAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtbWV0YS0xLm1vZCIgPg0KLSV4aHRtbC1tZXRhLm1vZDsNCi0NCi08IS0tIEJhc2UgRWxlbWVudCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1iYXNlLm1vZA0KLSAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEJhc2UgRWxlbWVudCAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtYmFzZS0xLm1vZCIgPg0KLSV4aHRtbC1iYXNlLm1vZDsNCi0NCi08IS0tIFN0eWxlc2hlZXRzIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1zdHlsZS5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIFN0eWxlIFNoZWV0cyAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtc3R5bGUtMS5tb2QiPg0KLSV4aHRtbC1zdHlsZS5tb2Q7DQotDQotPCEtLSBQYXJhbSBFbGVtZW50IE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtcGFyYW0ubW9kDQotICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgUGFyYW0gRWxlbWVudCAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtcGFyYW0tMS5tb2QiID4NCi0leGh0bWwtcGFyYW0ubW9kOw0KLQ0KLTwhLS0gRW1iZWRkZWQgT2JqZWN0IE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLW9iamVjdC5tb2QNCi0gICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBFbWJlZGRlZCBPYmplY3QgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLW9iamVjdC0xLm1vZCIgPg0KLSV4aHRtbC1vYmplY3QubW9kOw0KLQ0KLTwhLS0gRG9jdW1lbnQgU3RydWN0dXJlIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLXN0cnVjdC5tb2QNCi0gICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBEb2N1bWVudCBTdHJ1Y3R1cmUgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLXN0cnVjdC0xLm1vZCIgPg0KLSV4aHRtbC1zdHJ1Y3QubW9kOw0KLQ0KLTwhLS0gQmxvY2sgUHJlc2VudGF0aW9uIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1ibGtwcmVzLm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgQmxvY2sgUHJlc2VudGF0aW9uIDEuMC8vRU4iDQotIAkJImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1ibGtwcmVzLTEubW9kIj4NCi0leGh0bWwtYmxrcHJlcy5tb2Q7DQotDQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLSANCi0JSW5saW5lIFByZXNlbnRhdGlvbjogYiwgYmlnLCBpLCBzbWFsbAkJDQotLS0+DQotPCFFTlRJVFkgJSBzdWIuZWxlbWVudCAiSUdOT1JFIj4NCi08IUVOVElUWSAlIHN1Yi5hdHRsaXN0ICJJR05PUkUiPg0KLTwhRU5USVRZICUgc3VwLmVsZW1lbnQgIklHTk9SRSI+DQotPCFFTlRJVFkgJSBzdXAuYXR0bGlzdCAiSUdOT1JFIj4NCi08IUVOVElUWSAlIHR0LmVsZW1lbnQgIklHTk9SRSI+DQotPCFFTlRJVFkgJSB0dC5hdHRsaXN0ICJJR05PUkUiPg0KLTwhRU5USVRZICUgeGh0bWwtaW5scHJlcy5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIElubGluZSBQcmVzZW50YXRpb24gMS4wLy9FTiINCi0JCSJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtaW5scHJlcy0xLm1vZCI+DQotJXhodG1sLWlubHByZXMubW9kOw0KLQ0KLTwhLS0gZW5kIG9mIFhIVE1MIE1vYmlsZSAxLjAgRFREICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd21sMjBfZHRkIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93bWwyMF9kdGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1N2U5NTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93bWwyMF9kdGQKKysrIC9kZXYvbnVsbApAQCAtMSwxNjAgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIj4NCi08IS0tIHNhdmVkIGZyb20gdXJsPSgwMDM3KWh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWwyMC5kdGQgLS0+DQotPEhUTUw+PEhFQUQ+DQotPE1FVEEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MiI+DQotPE1FVEEgY29udGVudD0iTVNIVE1MIDUuNTAuNDkxMi4zMDAiIG5hbWU9R0VORVJBVE9SPjwvSEVBRD4NCi08Qk9EWT48WE1QPjwhLS0gV01MIDIuMCBEVEQgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHdtbDIwLmR0ZCAtLT4NCi08IS0tIA0KLSAgICBAV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0sIEx0ZC4gMjAwMS4NCi0NCi0JVGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlIGFyZSBhdmFpbGFibGUgZnJvbSB0aGUgV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiANCi0JV2ViIHNpdGUgKGh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL3doYXQvY29weXJpZ2h0Lmh0bSkuDQotLS0+DQotPCEtLQ0KLQlUaGlzIGlzIHRoZSBXTUwgMi4wIERURCBkcml2ZXIgZmlsZS4gUGxlYXNlIHVzZSB0aGlzIGZvcm1hbCBwdWJsaWMgaWRlbnRpZmllciB0byBpZGVudGlmeSBpdDoNCi0NCi0gICAgICAgICAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMi4wLy9FTiINCi0gICAgICAgICAgICAgICAgICAgCSAgICAgICAgICANCi0gICAgIEZvciBleGFtcGxlLCBpZiB5b3UgYXJlIHVzaW5nIFdNTCAyLjAgZGlyZWN0bHksIHVzZQ0KLSAgICAgdGhlIEZQSSBpbiB0aGUgRE9DVFlQRSBkZWNsYXJhdGlvbiwgd2l0aCB0aGUgeG1sbnMgYXR0cmlidXRlDQotICAgICBvbiB0aGUgZG9jdW1lbnQgZWxlbWVudCB0byBpZGVudGlmeSB0aGUgZGVmYXVsdCBuYW1lc3BhY2U6DQotDQotICAgICAgICAgPD94bWwgdmVyc2lvbj0iMS4wIj8+DQotICAgICAgICAgPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdNTCAyLjAvL0VOIg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvZHRkL3dtbDIwLmR0ZCIgPg0KLSAgICAgICAgIDxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIg0KLSAgICAgICAgICAgICAgICAgICB4bWxuczp3bWw9Imh0dHA6Ly93d3cud2FwZm9ydW0ub3JnLzIwMDEvd21sIj4NCi0gICAgICAgICAuLi4NCi0gICAgICAgICA8L2h0bWw+DQotDQotLS0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tDQotCQlWZXJzaW9uLCBYTUwgTmFtZXNwYWNlcywgYW5kIHByb2ZpbGUgaW5mb3JtYXRpb24gDQotLS0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tDQotCVZhbHVlIG9mIFhIVE1MIHZlcnNpb24gYXR0cmlidXRlIA0KLS0tPg0KLTwhRU5USVRZICUgWEhUTUwudmVyc2lvbiAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMi4wLy9FTiI+DQotPCEtLSANCi0JVmFsdWUgb2YgWEhUTUwgcHJvZmlsZSBhdHRyaWJ1dGUNCi0JDQotCVJlc2VydmVkIGZvciBmdXR1cmUgdXNlIHdpdGggZG9jdW1lbnQgcHJvZmlsZXMgDQotLS0+DQotPCFFTlRJVFkgJSBYSFRNTC5wcm9maWxlICIiPg0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLQ0KLQkJTW9kdWxhcmlzYXRpb24gZnJhbWV3b3JrIHNldHVwDQotLS0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IUVOVElUWSAlIHdtbC1mcmFtZXdvcmsubW9kIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0VOVElUSUVTIFdNTCBNb2R1bGFyIEZyYW1ld29yayAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sLWZyYW1ld29yay0xLm1vZCI+DQotJXdtbC1mcmFtZXdvcmsubW9kOw0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLQ0KLQkJWEhUTUwgbW9kdWxlcyANCi0tLT4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLTwhLS0gVGV4dCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgcHJlLmNvbnRlbnQgIiggI1BDREFUQQ0KLSAgICAgIHwgJUlubFN0cnVjdC5jbGFzczsgfCAlaS5xbmFtZTsgfCAlYi5xbmFtZTsgDQotICAgICAgJUlubFBocmFzLmNsYXNzOw0KLSAgICAgICVBbmNob3IuY2xhc3M7DQotICAgICAgJUlubGluZS5leHRyYTsgDQotCXwgJWdldHZhci5xbmFtZTsNCi0JfCAlaW5wdXQucW5hbWU7fCAlc2VsZWN0LnFuYW1lOykqIj4NCi08IUVOVElUWSAlIHAuY29udGVudCAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7IHwgJXRhYmxlLnFuYW1lOyB8ICVmaWVsZHNldC5xbmFtZTspKiI+DQotPCFFTlRJVFkgJSB4aHRtbC10ZXh0Lm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgVGV4dCAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtdGV4dC0xLm1vZCI+DQotJXhodG1sLXRleHQubW9kOw0KLTwhRU5USVRZICUgeGh0bWwtaHlwZXJ0ZXh0Lm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgSHlwZXJ0ZXh0IDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1oeXBlcnRleHQtMS5tb2QiPg0KLSV4aHRtbC1oeXBlcnRleHQubW9kOw0KLTwhLS0gTGlzdCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtbGlzdC5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIExpc3RzIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1saXN0LTEubW9kIj4NCi0leGh0bWwtbGlzdC5tb2Q7DQotPCEtLSBFeHRlbmQgbGlzdHMgd2l0aCB2YWx1ZSBhbmQgc3RhcnQgYXR0cmlidXRlcyAtLT4gDQotPCFBVFRMSVNUICVsaS5xbmFtZTsNCi0gICAgICB2YWx1ZSAgICAgICAgJU51bWJlci5kYXRhdHlwZTsgICAgICAgICAjSU1QTElFRA0KLT4NCi08IUFUVExJU1QgJW9sLnFuYW1lOw0KLSAgICAgIHN0YXJ0ICAgICAgICAlTnVtYmVyLmRhdGF0eXBlOyAgICAgICAgI0lNUExJRUQNCi0+DQotPCEtLSBJbWFnZSBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtaW1hZ2UubW9kIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBJbWFnZXMgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWltYWdlLTEubW9kIj4NCi0leGh0bWwtaW1hZ2UubW9kOw0KLTwhLS0gUGFyYW0gRWxlbWVudCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLXBhcmFtLm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgUGFyYW0gRWxlbWVudCAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtcGFyYW0tMS5tb2QiPg0KLSV4aHRtbC1wYXJhbS5tb2Q7DQotPCEtLSBFbWJlZGRlZCBPYmplY3QgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtb2JqZWN0Lm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgRW1iZWRkZWQgT2JqZWN0IDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1vYmplY3QtMS5tb2QiPg0KLSV4aHRtbC1vYmplY3QubW9kOw0KLTwhLS0gVGFibGVzIE1vZHVsZSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLXRhYmxlLm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgQmFzaWMgVGFibGVzIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1iYXNpYy10YWJsZS0xLm1vZCI+DQotJXhodG1sLXRhYmxlLm1vZDsNCi08IS0tIEZvcm1zIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTEVNRU5UICVvcHRncm91cC5xbmFtZTsgKCVvcHRpb24ucW5hbWU7KSs+DQotPCFBVFRMSVNUICVvcHRncm91cC5xbmFtZTsNCi0JJUNvbW1vbi5hdHRyaWI7IAkNCi0JbGFiZWwgJVRleHQuZGF0YXR5cGU7ICNSRVFVSVJFRA0KLT4NCi08IUVOVElUWSAlIG9wdGlvbi5jb250ZW50ICIoICNQQ0RBVEEgfCAlb25ldmVudC5xbmFtZTt8ICVnZXR2YXIucW5hbWU7KSoiPg0KLTwhRU5USVRZICUgc2VsZWN0LmNvbnRlbnQgIiggJW9wdGdyb3VwLnFuYW1lOyB8ICVvcHRpb24ucW5hbWU7ICkrIj4NCi08IUVMRU1FTlQgJWZpZWxkc2V0LnFuYW1lOyAoI1BDREFUQSB8ICVGbG93Lm1peDspKj4NCi08IUFUVExJU1QgJWZpZWxkc2V0LnFuYW1lOw0KLQklQ29tbW9uLmF0dHJpYjsgDQotPg0KLTwhRU5USVRZICUgdGV4dGFyZWEuY29udGVudCAiKCAjUENEQVRBIHwgJWdldHZhci5xbmFtZTsgKSoiPg0KLTwhRU5USVRZICUgZm9ybS5jb250ZW50ICIoICVCbGtOb0Zvcm0ubWl4Ow0KLSAgICAgIHwgJWZpZWxkc2V0LnFuYW1lOyApKyI+DQotPCFFTlRJVFkgJSB4aHRtbC1iYXNpYy1mb3JtLm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgQmFzaWMgRm9ybXMgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWJhc2ljLWZvcm0tMS5tb2QiPg0KLSV4aHRtbC1iYXNpYy1mb3JtLm1vZDsNCi08IS0tIExpbmsgRWxlbWVudCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1saW5rLm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgTGluayBFbGVtZW50IDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1saW5rLTEubW9kIj4NCi0leGh0bWwtbGluay5tb2Q7DQotPCEtLSBEb2N1bWVudCBNZXRhaW5mb3JtYXRpb24gTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtbWV0YS5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIE1ldGFpbmZvcm1hdGlvbiAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtbWV0YS0xLm1vZCI+DQotJXhodG1sLW1ldGEubW9kOw0KLTwhLS0gQmFzZSBFbGVtZW50IE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLWJhc2UubW9kIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBCYXNlIEVsZW1lbnQgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWJhc2UtMS5tb2QiPg0KLSV4aHRtbC1iYXNlLm1vZDsNCi08IS0tIFN0eWxlc2hlZXRzIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1zdHlsZS5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIFN0eWxlIFNoZWV0cyAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtc3R5bGUtMS5tb2QiPg0KLSV4aHRtbC1zdHlsZS5tb2Q7DQotPCEtLSBEb2N1bWVudCBTdHJ1Y3R1cmUgTW9kdWxlIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgaHRtbC5jb250ZW50ICIoICVoZWFkLnFuYW1lOywgJVRlbXBsYXRlLm1peDssICglYm9keS5xbmFtZTsgfCAoJWNhcmQucW5hbWU7KykpKSI+DQotPCFFTlRJVFkgJSBib2R5LmNvbnRlbnQgIiglQ2FyZEJvZHkubWl4OykiPg0KLTwhRU5USVRZICUgeGh0bWwtc3RydWN0Lm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgRG9jdW1lbnQgU3RydWN0dXJlIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1zdHJ1Y3QtMS5tb2QiPg0KLSV4aHRtbC1zdHJ1Y3QubW9kOw0KLTwhLS0gQmxvY2sgUHJlc2VudGF0aW9uIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1ibGtwcmVzLm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgQmxvY2sgUHJlc2VudGF0aW9uIDEuMC8vRU4iDQotIAkJImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1ibGtwcmVzLTEubW9kIj4NCi0leGh0bWwtYmxrcHJlcy5tb2Q7DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tDQotCQlXTUwgRGVjbGFyYXRpb25zDQotLS0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tIFNwZWNpYWwgV01MIGVsZW1lbnRzLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHdtbC1zcGVjaWFsLm1vZCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9FTEVNRU5UUyBXTUwgU3BlY2lhbCAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sLXNwZWNpYWwtMS5tb2QiPg0KLSV3bWwtc3BlY2lhbC5tb2Q7DQotPCEtLSBEZXByZWNhdGVkIFdNTCBlbGVtZW50cy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB3bWwtZGVwcmVjYXRlZC5tb2QgUFVCTElDICItLy9XQVBGT1JVTS8vRUxFTUVOVFMgV01MIERlcHJlY2F0ZWQgMS4wLy9FTiINCi0gICAgICAgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWwtZGVwcmVjYXRlZC0xLm1vZCI+DQotJXdtbC1kZXByZWNhdGVkLm1vZDsNCi08IS0tIGVuZCBvZiBXTUwgMi4wIERURCAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08L1hNUD48L0JPRFk+PC9IVE1MPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL1hIVE1ML3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvWEhUTUwveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzMzIxYzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvWEhUTUwveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQKKysrIC9kZXYvbnVsbApAQCAtMSwxMTk2ICswLDAgQEAKLTwhLS0NCi0gICBFeHRlbnNpYmxlIEhUTUwgdmVyc2lvbiAxLjAgVHJhbnNpdGlvbmFsIERURA0KLQ0KLSAgIFRoaXMgaXMgdGhlIHNhbWUgYXMgSFRNTCA0LjAgVHJhbnNpdGlvbmFsIGV4Y2VwdCBmb3INCi0gICBjaGFuZ2VzIGR1ZSB0byB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBYTUwgYW5kIFNHTUwuDQotDQotICAgTmFtZXNwYWNlID0gaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbA0KLQ0KLSAgIEZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLCBzZWU6IGh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMQ0KLQ0KLSAgIENvcHlyaWdodCAoYykgMTk5OC0yMDAwIFczQyAoTUlULCBJTlJJQSwgS2VpbyksDQotICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4gDQotDQotICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iDQotICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIg0KLQ0KLSAgICRSZXZpc2lvbjogMS4xICQNCi0gICAkRGF0ZTogMjAwMC8wMS8yNiAxNDowODo1NiAkDQotDQotLS0+DQotDQotPCEtLT09PT09PT09PT09PT09PT0gQ2hhcmFjdGVyIG1uZW1vbmljIGVudGl0aWVzID09PT09PT09PT09PT09PT09PT09PT09PT0tLT4NCi0NCi08IUVOVElUWSAlIEhUTUxsYXQxIFBVQkxJQw0KLSAgICItLy9XM0MvL0VOVElUSUVTIExhdGluIDEgZm9yIFhIVE1MLy9FTiINCi0gICAieGh0bWwtbGF0MS5lbnQiPg0KLSVIVE1MbGF0MTsNCi0NCi08IUVOVElUWSAlIEhUTUxzeW1ib2wgUFVCTElDDQotICAgIi0vL1czQy8vRU5USVRJRVMgU3ltYm9scyBmb3IgWEhUTUwvL0VOIg0KLSAgICJ4aHRtbC1zeW1ib2wuZW50Ij4NCi0lSFRNTHN5bWJvbDsNCi0NCi08IUVOVElUWSAlIEhUTUxzcGVjaWFsIFBVQkxJQw0KLSAgICItLy9XM0MvL0VOVElUSUVTIFNwZWNpYWwgZm9yIFhIVE1MLy9FTiINCi0gICAieGh0bWwtc3BlY2lhbC5lbnQiPg0KLSVIVE1Mc3BlY2lhbDsNCi0NCi08IS0tPT09PT09PT09PT09PT09PT09IEltcG9ydGVkIE5hbWVzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPg0KLQ0KLTwhRU5USVRZICUgQ29udGVudFR5cGUgIkNEQVRBIj4NCi0gICAgPCEtLSBtZWRpYSB0eXBlLCBhcyBwZXIgW1JGQzIwNDVdIC0tPg0KLQ0KLTwhRU5USVRZICUgQ29udGVudFR5cGVzICJDREFUQSI+DQotICAgIDwhLS0gY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgbWVkaWEgdHlwZXMsIGFzIHBlciBbUkZDMjA0NV0gLS0+DQotDQotPCFFTlRJVFkgJSBDaGFyc2V0ICJDREFUQSI+DQotICAgIDwhLS0gYSBjaGFyYWN0ZXIgZW5jb2RpbmcsIGFzIHBlciBbUkZDMjA0NV0gLS0+DQotDQotPCFFTlRJVFkgJSBDaGFyc2V0cyAiQ0RBVEEiPg0KLSAgICA8IS0tIGEgc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgY2hhcmFjdGVyIGVuY29kaW5ncywgYXMgcGVyIFtSRkMyMDQ1XSAtLT4NCi0NCi08IUVOVElUWSAlIExhbmd1YWdlQ29kZSAiTk1UT0tFTiI+DQotICAgIDwhLS0gYSBsYW5ndWFnZSBjb2RlLCBhcyBwZXIgW1JGQzE3NjZdIC0tPg0KLQ0KLTwhRU5USVRZICUgQ2hhcmFjdGVyICJDREFUQSI+DQotICAgIDwhLS0gYSBzaW5nbGUgY2hhcmFjdGVyIGZyb20gW0lTTzEwNjQ2XSAtLT4NCi0NCi08IUVOVElUWSAlIE51bWJlciAiQ0RBVEEiPg0KLSAgICA8IS0tIG9uZSBvciBtb3JlIGRpZ2l0cyAtLT4NCi0NCi08IUVOVElUWSAlIExpbmtUeXBlcyAiQ0RBVEEiPg0KLSAgICA8IS0tIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIGxpbmsgdHlwZXMgLS0+DQotDQotPCFFTlRJVFkgJSBNZWRpYURlc2MgIkNEQVRBIj4NCi0gICAgPCEtLSBzaW5nbGUgb3IgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgbWVkaWEgZGVzY3JpcHRvcnMgLS0+DQotDQotPCFFTlRJVFkgJSBVUkkgIkNEQVRBIj4NCi0gICAgPCEtLSBhIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciwgc2VlIFtSRkMyMzk2XSAtLT4NCi0NCi08IUVOVElUWSAlIFVyaUxpc3QgIkNEQVRBIj4NCi0gICAgPCEtLSBhIHNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllcnMgLS0+DQotDQotPCFFTlRJVFkgJSBEYXRldGltZSAiQ0RBVEEiPg0KLSAgICA8IS0tIGRhdGUgYW5kIHRpbWUgaW5mb3JtYXRpb24uIElTTyBkYXRlIGZvcm1hdCAtLT4NCi0NCi08IUVOVElUWSAlIFNjcmlwdCAiQ0RBVEEiPg0KLSAgICA8IS0tIHNjcmlwdCBleHByZXNzaW9uIC0tPg0KLQ0KLTwhRU5USVRZICUgU3R5bGVTaGVldCAiQ0RBVEEiPg0KLSAgICA8IS0tIHN0eWxlIHNoZWV0IGRhdGEgLS0+DQotDQotPCFFTlRJVFkgJSBUZXh0ICJDREFUQSI+DQotICAgIDwhLS0gdXNlZCBmb3IgdGl0bGVzIGV0Yy4gLS0+DQotDQotPCFFTlRJVFkgJSBGcmFtZVRhcmdldCAiTk1UT0tFTiI+DQotICAgIDwhLS0gcmVuZGVyIGluIHRoaXMgZnJhbWUgLS0+DQotDQotPCFFTlRJVFkgJSBMZW5ndGggIkNEQVRBIj4NCi0gICAgPCEtLSBubiBmb3IgcGl4ZWxzIG9yIG5uJSBmb3IgcGVyY2VudGFnZSBsZW5ndGggLS0+DQotDQotPCFFTlRJVFkgJSBNdWx0aUxlbmd0aCAiQ0RBVEEiPg0KLSAgICA8IS0tIHBpeGVsLCBwZXJjZW50YWdlLCBvciByZWxhdGl2ZSAtLT4NCi0NCi08IUVOVElUWSAlIE11bHRpTGVuZ3RocyAiQ0RBVEEiPg0KLSAgICA8IS0tIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIE11bHRpTGVuZ3RoIC0tPg0KLQ0KLTwhRU5USVRZICUgUGl4ZWxzICJDREFUQSI+DQotICAgIDwhLS0gaW50ZWdlciByZXByZXNlbnRpbmcgbGVuZ3RoIGluIHBpeGVscyAtLT4NCi0NCi08IS0tIHRoZXNlIGFyZSB1c2VkIGZvciBpbWFnZSBtYXBzIC0tPg0KLQ0KLTwhRU5USVRZICUgU2hhcGUgIihyZWN0fGNpcmNsZXxwb2x5fGRlZmF1bHQpIj4NCi0NCi08IUVOVElUWSAlIENvb3JkcyAiQ0RBVEEiPg0KLSAgICA8IS0tIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGxlbmd0aHMgLS0+DQotDQotPCEtLSB1c2VkIGZvciBvYmplY3QsIGFwcGxldCwgaW1nLCBpbnB1dCBhbmQgaWZyYW1lIC0tPg0KLTwhRU5USVRZICUgSW1nQWxpZ24gIih0b3B8bWlkZGxlfGJvdHRvbXxsZWZ0fHJpZ2h0KSI+DQotDQotPCEtLSBhIGNvbG9yIHVzaW5nIHNSR0I6ICNSUkdHQkIgYXMgSGV4IHZhbHVlcyAtLT4NCi08IUVOVElUWSAlIENvbG9yICJDREFUQSI+DQotDQotPCEtLSBUaGVyZSBhcmUgYWxzbyAxNiB3aWRlbHkga25vd24gY29sb3IgbmFtZXMgd2l0aCB0aGVpciBzUkdCIHZhbHVlczoNCi0NCi0gICAgQmxhY2sgID0gIzAwMDAwMCAgICBHcmVlbiAgPSAjMDA4MDAwDQotICAgIFNpbHZlciA9ICNDMEMwQzAgICAgTGltZSAgID0gIzAwRkYwMA0KLSAgICBHcmF5ICAgPSAjODA4MDgwICAgIE9saXZlICA9ICM4MDgwMDANCi0gICAgV2hpdGUgID0gI0ZGRkZGRiAgICBZZWxsb3cgPSAjRkZGRjAwDQotICAgIE1hcm9vbiA9ICM4MDAwMDAgICAgTmF2eSAgID0gIzAwMDA4MA0KLSAgICBSZWQgICAgPSAjRkYwMDAwICAgIEJsdWUgICA9ICMwMDAwRkYNCi0gICAgUHVycGxlID0gIzgwMDA4MCAgICBUZWFsICAgPSAjMDA4MDgwDQotICAgIEZ1Y2hzaWE9ICNGRjAwRkYgICAgQXF1YSAgID0gIzAwRkZGRg0KLS0tPg0KLQ0KLTwhLS09PT09PT09PT09PT09PT09PT09IEdlbmVyaWMgQXR0cmlidXRlcyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+DQotDQotPCEtLSBjb3JlIGF0dHJpYnV0ZXMgY29tbW9uIHRvIG1vc3QgZWxlbWVudHMNCi0gIGlkICAgICAgIGRvY3VtZW50LXdpZGUgdW5pcXVlIGlkDQotICBjbGFzcyAgICBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBjbGFzc2VzDQotICBzdHlsZSAgICBhc3NvY2lhdGVkIHN0eWxlIGluZm8NCi0gIHRpdGxlICAgIGFkdmlzb3J5IHRpdGxlL2FtcGxpZmljYXRpb24NCi0tLT4NCi08IUVOVElUWSAlIGNvcmVhdHRycw0KLSAiaWQgICAgICAgICAgSUQgICAgICAgICAgICAgI0lNUExJRUQNCi0gIGNsYXNzICAgICAgIENEQVRBICAgICAgICAgICNJTVBMSUVEDQotICBzdHlsZSAgICAgICAlU3R5bGVTaGVldDsgICAjSU1QTElFRA0KLSAgdGl0bGUgICAgICAgJVRleHQ7ICAgICAgICAgI0lNUExJRUQiDQotICA+DQotDQotPCEtLSBpbnRlcm5hdGlvbmFsaXphdGlvbiBhdHRyaWJ1dGVzDQotICBsYW5nICAgICAgICBsYW5ndWFnZSBjb2RlIChiYWNrd2FyZHMgY29tcGF0aWJsZSkNCi0gIHhtbDpsYW5nICAgIGxhbmd1YWdlIGNvZGUgKGFzIHBlciBYTUwgMS4wIHNwZWMpDQotICBkaXIgICAgICAgICBkaXJlY3Rpb24gZm9yIHdlYWsvbmV1dHJhbCB0ZXh0DQotLS0+DQotPCFFTlRJVFkgJSBpMThuDQotICJsYW5nICAgICAgICAlTGFuZ3VhZ2VDb2RlOyAjSU1QTElFRA0KLSAgeG1sOmxhbmcgICAgJUxhbmd1YWdlQ29kZTsgI0lNUExJRUQNCi0gIGRpciAgICAgICAgIChsdHJ8cnRsKSAgICAgICNJTVBMSUVEIg0KLSAgPg0KLQ0KLTwhLS0gYXR0cmlidXRlcyBmb3IgY29tbW9uIFVJIGV2ZW50cw0KLSAgb25jbGljayAgICAgYSBwb2ludGVyIGJ1dHRvbiB3YXMgY2xpY2tlZA0KLSAgb25kYmxjbGljayAgYSBwb2ludGVyIGJ1dHRvbiB3YXMgZG91YmxlIGNsaWNrZWQNCi0gIG9ubW91c2Vkb3duIGEgcG9pbnRlciBidXR0b24gd2FzIHByZXNzZWQgZG93bg0KLSAgb25tb3VzZXVwICAgYSBwb2ludGVyIGJ1dHRvbiB3YXMgcmVsZWFzZWQNCi0gIG9ubW91c2Vtb3ZlIGEgcG9pbnRlciB3YXMgbW92ZWQgb250byB0aGUgZWxlbWVudA0KLSAgb25tb3VzZW91dCAgYSBwb2ludGVyIHdhcyBtb3ZlZCBhd2F5IGZyb20gdGhlIGVsZW1lbnQNCi0gIG9ua2V5cHJlc3MgIGEga2V5IHdhcyBwcmVzc2VkIGFuZCByZWxlYXNlZA0KLSAgb25rZXlkb3duICAgYSBrZXkgd2FzIHByZXNzZWQgZG93bg0KLSAgb25rZXl1cCAgICAgYSBrZXkgd2FzIHJlbGVhc2VkDQotLS0+DQotPCFFTlRJVFkgJSBldmVudHMNCi0gIm9uY2xpY2sgICAgICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEDQotICBvbmRibGNsaWNrICAlU2NyaXB0OyAgICAgICAjSU1QTElFRA0KLSAgb25tb3VzZWRvd24gJVNjcmlwdDsgICAgICAgI0lNUExJRUQNCi0gIG9ubW91c2V1cCAgICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEDQotICBvbm1vdXNlb3ZlciAlU2NyaXB0OyAgICAgICAjSU1QTElFRA0KLSAgb25tb3VzZW1vdmUgJVNjcmlwdDsgICAgICAgI0lNUExJRUQNCi0gIG9ubW91c2VvdXQgICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEDQotICBvbmtleXByZXNzICAlU2NyaXB0OyAgICAgICAjSU1QTElFRA0KLSAgb25rZXlkb3duICAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQNCi0gIG9ua2V5dXAgICAgICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEIg0KLSAgPg0KLQ0KLTwhLS0gYXR0cmlidXRlcyBmb3IgZWxlbWVudHMgdGhhdCBjYW4gZ2V0IHRoZSBmb2N1cw0KLSAgYWNjZXNza2V5ICAgYWNjZXNzaWJpbGl0eSBrZXkgY2hhcmFjdGVyDQotICB0YWJpbmRleCAgICBwb3NpdGlvbiBpbiB0YWJiaW5nIG9yZGVyDQotICBvbmZvY3VzICAgICB0aGUgZWxlbWVudCBnb3QgdGhlIGZvY3VzDQotICBvbmJsdXIgICAgICB0aGUgZWxlbWVudCBsb3N0IHRoZSBmb2N1cw0KLS0tPg0KLTwhRU5USVRZICUgZm9jdXMNCi0gImFjY2Vzc2tleSAgICVDaGFyYWN0ZXI7ICAgICNJTVBMSUVEDQotICB0YWJpbmRleCAgICAlTnVtYmVyOyAgICAgICAjSU1QTElFRA0KLSAgb25mb2N1cyAgICAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQNCi0gIG9uYmx1ciAgICAgICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEIg0KLSAgPg0KLQ0KLTwhRU5USVRZICUgYXR0cnMgIiVjb3JlYXR0cnM7ICVpMThuOyAlZXZlbnRzOyI+DQotDQotPCEtLSB0ZXh0IGFsaWdubWVudCBmb3IgcCwgZGl2LCBoMS1oNi4gVGhlIGRlZmF1bHQgaXMNCi0gICAgIGFsaWduPSJsZWZ0IiBmb3IgbHRyIGhlYWRpbmdzLCAicmlnaHQiIGZvciBydGwgLS0+DQotDQotPCFFTlRJVFkgJSBUZXh0QWxpZ24gImFsaWduIChsZWZ0fGNlbnRlcnxyaWdodCkgI0lNUExJRUQiPg0KLQ0KLTwhLS09PT09PT09PT09PT09PT09PT09IFRleHQgRWxlbWVudHMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+DQotDQotPCFFTlRJVFkgJSBzcGVjaWFsDQotICAgImJyIHwgc3BhbiB8IGJkbyB8IG9iamVjdCB8IGFwcGxldCB8IGltZyB8IG1hcCB8IGlmcmFtZSI+DQotDQotPCFFTlRJVFkgJSBmb250c3R5bGUgInR0IHwgaSB8IGIgfCBiaWcgfCBzbWFsbCB8IHUNCi0gICAgICAgICAgICAgICAgICAgICAgfCBzIHwgc3RyaWtlIHxmb250IHwgYmFzZWZvbnQiPg0KLQ0KLTwhRU5USVRZICUgcGhyYXNlICJlbSB8IHN0cm9uZyB8IGRmbiB8IGNvZGUgfCBxIHwgc3ViIHwgc3VwIHwNCi0gICAgICAgICAgICAgICAgICAgc2FtcCB8IGtiZCB8IHZhciB8IGNpdGUgfCBhYmJyIHwgYWNyb255bSI+DQotDQotPCFFTlRJVFkgJSBpbmxpbmUuZm9ybXMgImlucHV0IHwgc2VsZWN0IHwgdGV4dGFyZWEgfCBsYWJlbCB8IGJ1dHRvbiI+DQotDQotPCEtLSB0aGVzZSBjYW4gb2NjdXIgYXQgYmxvY2sgb3IgaW5saW5lIGxldmVsIC0tPg0KLTwhRU5USVRZICUgbWlzYyAiaW5zIHwgZGVsIHwgc2NyaXB0IHwgbm9zY3JpcHQiPg0KLQ0KLTwhRU5USVRZICUgaW5saW5lICJhIHwgJXNwZWNpYWw7IHwgJWZvbnRzdHlsZTsgfCAlcGhyYXNlOyB8ICVpbmxpbmUuZm9ybXM7Ij4NCi0NCi08IS0tICVJbmxpbmU7IGNvdmVycyBpbmxpbmUgb3IgInRleHQtbGV2ZWwiIGVsZW1lbnRzIC0tPg0KLTwhRU5USVRZICUgSW5saW5lICIoI1BDREFUQSB8ICVpbmxpbmU7IHwgJW1pc2M7KSoiPg0KLQ0KLTwhLS09PT09PT09PT09PT09PT09PT0gQmxvY2sgbGV2ZWwgZWxlbWVudHMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+DQotDQotPCFFTlRJVFkgJSBoZWFkaW5nICJoMXxoMnxoM3xoNHxoNXxoNiI+DQotPCFFTlRJVFkgJSBsaXN0cyAidWwgfCBvbCB8IGRsIHwgbWVudSB8IGRpciI+DQotPCFFTlRJVFkgJSBibG9ja3RleHQgInByZSB8IGhyIHwgYmxvY2txdW90ZSB8IGFkZHJlc3MgfCBjZW50ZXIgfCBub2ZyYW1lcyI+DQotDQotPCFFTlRJVFkgJSBibG9jaw0KLSAgICAicCB8ICVoZWFkaW5nOyB8IGRpdiB8ICVsaXN0czsgfCAlYmxvY2t0ZXh0OyB8IGlzaW5kZXggfGZpZWxkc2V0IHwgdGFibGUiPg0KLQ0KLTwhRU5USVRZICUgQmxvY2sgIiglYmxvY2s7IHwgZm9ybSB8ICVtaXNjOykqIj4NCi0NCi08IS0tICVGbG93OyBtaXhlcyBCbG9jayBhbmQgSW5saW5lIGFuZCBpcyB1c2VkIGZvciBsaXN0IGl0ZW1zIGV0Yy4gLS0+DQotPCFFTlRJVFkgJSBGbG93ICIoI1BDREFUQSB8ICVibG9jazsgfCBmb3JtIHwgJWlubGluZTsgfCAlbWlzYzspKiI+DQotDQotPCEtLT09PT09PT09PT09PT09PT09PSBDb250ZW50IG1vZGVscyBmb3IgZXhjbHVzaW9ucyA9PT09PT09PT09PT09PT09PT09PT0tLT4NCi0NCi08IS0tIGEgZWxlbWVudHMgdXNlICVJbmxpbmU7IGV4Y2x1ZGluZyBhIC0tPg0KLQ0KLTwhRU5USVRZICUgYS5jb250ZW50DQotICAgIigjUENEQVRBIHwgJXNwZWNpYWw7IHwgJWZvbnRzdHlsZTsgfCAlcGhyYXNlOyB8ICVpbmxpbmUuZm9ybXM7IHwgJW1pc2M7KSoiPg0KLQ0KLTwhLS0gcHJlIHVzZXMgJUlubGluZSBleGNsdWRpbmcgaW1nLCBvYmplY3QsIGFwcGxldCwgYmlnLCBzbWFsbCwNCi0gICAgIHN1Yiwgc3VwLCBmb250LCBvciBiYXNlZm9udCAtLT4NCi0NCi08IUVOVElUWSAlIHByZS5jb250ZW50DQotICAgIigjUENEQVRBIHwgYSB8IGJyIHwgc3BhbiB8IGJkbyB8IG1hcCB8IHR0IHwgaSB8IGIgfCB1IHwgcyB8DQotICAgICAgJXBocmFzZTsgfCAlaW5saW5lLmZvcm1zOykqIj4NCi0NCi08IS0tIGZvcm0gdXNlcyAlRmxvdzsgZXhjbHVkaW5nIGZvcm0gLS0+DQotDQotPCFFTlRJVFkgJSBmb3JtLmNvbnRlbnQgIigjUENEQVRBIHwgJWJsb2NrOyB8ICVpbmxpbmU7IHwgJW1pc2M7KSoiPg0KLQ0KLTwhLS0gYnV0dG9uIHVzZXMgJUZsb3c7IGJ1dCBleGNsdWRlcyBhLCBmb3JtLCBmb3JtIGNvbnRyb2xzLCBpZnJhbWUgLS0+DQotDQotPCFFTlRJVFkgJSBidXR0b24uY29udGVudA0KLSAgICIoI1BDREFUQSB8IHAgfCAlaGVhZGluZzsgfCBkaXYgfCAlbGlzdHM7IHwgJWJsb2NrdGV4dDsgfA0KLSAgICAgIHRhYmxlIHwgYnIgfCBzcGFuIHwgYmRvIHwgb2JqZWN0IHwgYXBwbGV0IHwgaW1nIHwgbWFwIHwNCi0gICAgICAlZm9udHN0eWxlOyB8ICVwaHJhc2U7IHwgJW1pc2M7KSoiPg0KLQ0KLTwhLS09PT09PT09PT09PT09PT09IERvY3VtZW50IFN0cnVjdHVyZSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+DQotDQotPCEtLSB0aGUgbmFtZXNwYWNlIFVSSSBkZXNpZ25hdGVzIHRoZSBkb2N1bWVudCBwcm9maWxlIC0tPg0KLQ0KLTwhRUxFTUVOVCBodG1sIChoZWFkLCBib2R5KT4NCi08IUFUVExJU1QgaHRtbA0KLSAgJWkxOG47DQotICB4bWxucyAgICAgICAlVVJJOyAgICAgICAgICAjRklYRUQgJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwnDQotICA+DQotDQotPCEtLT09PT09PT09PT09PT09PT0gRG9jdW1lbnQgSGVhZCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4NCi0NCi08IUVOVElUWSAlIGhlYWQubWlzYyAiKHNjcmlwdHxzdHlsZXxtZXRhfGxpbmt8b2JqZWN0fGlzaW5kZXgpKiI+DQotDQotPCEtLSBjb250ZW50IG1vZGVsIGlzICVoZWFkLm1pc2M7IGNvbWJpbmVkIHdpdGggYSBzaW5nbGUNCi0gICAgIHRpdGxlIGFuZCBhbiBvcHRpb25hbCBiYXNlIGVsZW1lbnQgaW4gYW55IG9yZGVyIC0tPg0KLQ0KLTwhRUxFTUVOVCBoZWFkICglaGVhZC5taXNjOywNCi0gICAgICgodGl0bGUsICVoZWFkLm1pc2M7LCAoYmFzZSwgJWhlYWQubWlzYzspPykgfA0KLSAgICAgIChiYXNlLCAlaGVhZC5taXNjOywgKHRpdGxlLCAlaGVhZC5taXNjOykpKSk+DQotDQotPCFBVFRMSVNUIGhlYWQNCi0gICVpMThuOw0KLSAgcHJvZmlsZSAgICAgJVVSSTsgICAgICAgICAgI0lNUExJRUQNCi0gID4NCi0NCi08IS0tIFRoZSB0aXRsZSBlbGVtZW50IGlzIG5vdCBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIGZsb3cgb2YgdGV4dC4NCi0gICAgICAgSXQgc2hvdWxkIGJlIGRpc3BsYXllZCwgZm9yIGV4YW1wbGUgYXMgdGhlIHBhZ2UgaGVhZGVyIG9yDQotICAgICAgIHdpbmRvdyB0aXRsZS4gRXhhY3RseSBvbmUgdGl0bGUgaXMgcmVxdWlyZWQgcGVyIGRvY3VtZW50Lg0KLSAgICAtLT4NCi08IUVMRU1FTlQgdGl0bGUgKCNQQ0RBVEEpPg0KLTwhQVRUTElTVCB0aXRsZSAlaTE4bjs+DQotDQotPCEtLSBkb2N1bWVudCBiYXNlIFVSSSAtLT4NCi0NCi08IUVMRU1FTlQgYmFzZSBFTVBUWT4NCi08IUFUVExJU1QgYmFzZQ0KLSAgaHJlZiAgICAgICAgJVVSSTsgICAgICAgICAgI0lNUExJRUQNCi0gIHRhcmdldCAgICAgICVGcmFtZVRhcmdldDsgICNJTVBMSUVEDQotICA+DQotDQotPCEtLSBnZW5lcmljIG1ldGFpbmZvcm1hdGlvbiAtLT4NCi08IUVMRU1FTlQgbWV0YSBFTVBUWT4NCi08IUFUVExJU1QgbWV0YQ0KLSAgJWkxOG47DQotICBodHRwLWVxdWl2ICBDREFUQSAgICAgICAgICAjSU1QTElFRA0KLSAgbmFtZSAgICAgICAgQ0RBVEEgICAgICAgICAgI0lNUExJRUQNCi0gIGNvbnRlbnQgICAgIENEQVRBICAgICAgICAgICNSRVFVSVJFRA0KLSAgc2NoZW1lICAgICAgQ0RBVEEgICAgICAgICAgI0lNUExJRUQNCi0gID4NCi0NCi08IS0tDQotICBSZWxhdGlvbnNoaXAgdmFsdWVzIGNhbiBiZSB1c2VkIGluIHByaW5jaXBsZToNCi0NCi0gICBhKSBmb3IgZG9jdW1lbnQgc3BlY2lmaWMgdG9vbGJhcnMvbWVudXMgd2hlbiB1c2VkDQotICAgICAgd2l0aCB0aGUgbGluayBlbGVtZW50IGluIGRvY3VtZW50IGhlYWQgZS5nLg0KLSAgICAgICAgc3RhcnQsIGNvbnRlbnRzLCBwcmV2aW91cywgbmV4dCwgaW5kZXgsIGVuZCwgaGVscA0KLSAgIGIpIHRvIGxpbmsgdG8gYSBzZXBhcmF0ZSBzdHlsZSBzaGVldCAocmVsPSJzdHlsZXNoZWV0IikNCi0gICBjKSB0byBtYWtlIGEgbGluayB0byBhIHNjcmlwdCAocmVsPSJzY3JpcHQiKQ0KLSAgIGQpIGJ5IHN0eWxlc2hlZXRzIHRvIGNvbnRyb2wgaG93IGNvbGxlY3Rpb25zIG9mDQotICAgICAgaHRtbCBub2RlcyBhcmUgcmVuZGVyZWQgaW50byBwcmludGVkIGRvY3VtZW50cw0KLSAgIGUpIHRvIG1ha2UgYSBsaW5rIHRvIGEgcHJpbnRhYmxlIHZlcnNpb24gb2YgdGhpcyBkb2N1bWVudA0KLSAgICAgIGUuZy4gYSBQb3N0U2NyaXB0IG9yIFBERiB2ZXJzaW9uIChyZWw9ImFsdGVybmF0ZSIgbWVkaWE9InByaW50IikNCi0tLT4NCi0NCi08IUVMRU1FTlQgbGluayBFTVBUWT4NCi08IUFUVExJU1QgbGluaw0KLSAgJWF0dHJzOw0KLSAgY2hhcnNldCAgICAgJUNoYXJzZXQ7ICAgICAgI0lNUExJRUQNCi0gIGhyZWYgICAgICAgICVVUkk7ICAgICAgICAgICNJTVBMSUVEDQotICBocmVmbGFuZyAgICAlTGFuZ3VhZ2VDb2RlOyAjSU1QTElFRA0KLSAgdHlwZSAgICAgICAgJUNvbnRlbnRUeXBlOyAgI0lNUExJRUQNCi0gIHJlbCAgICAgICAgICVMaW5rVHlwZXM7ICAgICNJTVBMSUVEDQotICByZXYgICAgICAgICAlTGlua1R5cGVzOyAgICAjSU1QTElFRA0KLSAgbWVkaWEgICAgICAgJU1lZGlhRGVzYzsgICAgI0lNUExJRUQNCi0gIHRhcmdldCAgICAgICVGcmFtZVRhcmdldDsgICNJTVBMSUVEDQotICA+DQotDQotPCEtLSBzdHlsZSBpbmZvLCB3aGljaCBtYXkgaW5jbHVkZSBDREFUQSBzZWN0aW9ucyAtLT4NCi08IUVMRU1FTlQgc3R5bGUgKCNQQ0RBVEEpPg0KLTwhQVRUTElTVCBzdHlsZQ0KLSAgJWkxOG47DQotICB0eXBlICAgICAgICAlQ29udGVudFR5cGU7ICAjUkVRVUlSRUQNCi0gIG1lZGlhICAgICAgICVNZWRpYURlc2M7ICAgICNJTVBMSUVEDQotICB0aXRsZSAgICAgICAlVGV4dDsgICAgICAgICAjSU1QTElFRA0KLSAgeG1sOnNwYWNlICAgKHByZXNlcnZlKSAgICAgI0ZJWEVEICdwcmVzZXJ2ZScNCi0gID4NCi0NCi08IS0tIHNjcmlwdCBzdGF0ZW1lbnRzLCB3aGljaCBtYXkgaW5jbHVkZSBDREFUQSBzZWN0aW9ucyAtLT4NCi08IUVMRU1FTlQgc2NyaXB0ICgjUENEQVRBKT4NCi08IUFUVExJU1Qgc2NyaXB0DQotICBjaGFyc2V0ICAgICAlQ2hhcnNldDsgICAgICAjSU1QTElFRA0KLSAgdHlwZSAgICAgICAgJUNvbnRlbnRUeXBlOyAgI1JFUVVJUkVEDQotICBsYW5ndWFnZSAgICBDREFUQSAgICAgICAgICAjSU1QTElFRA0KLSAgc3JjICAgICAgICAgJVVSSTsgICAgICAgICAgI0lNUExJRUQNCi0gIGRlZmVyICAgICAgIChkZWZlcikgICAgICAgICNJTVBMSUVEDQotICB4bWw6c3BhY2UgICAocHJlc2VydmUpICAgICAjRklYRUQgJ3ByZXNlcnZlJw0KLSAgPg0KLQ0KLTwhLS0gYWx0ZXJuYXRlIGNvbnRlbnQgY29udGFpbmVyIGZvciBub24gc2NyaXB0LWJhc2VkIHJlbmRlcmluZyAtLT4NCi0NCi08IUVMRU1FTlQgbm9zY3JpcHQgJUZsb3c7Pg0KLTwhQVRUTElTVCBub3NjcmlwdA0KLSAgJWF0dHJzOw0KLSAgPg0KLQ0KLTwhLS09PT09PT09PT09PT09PT09PT09PT09PSBGcmFtZXMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+DQotDQotPCEtLSBpbmxpbmUgc3Vid2luZG93IC0tPg0KLQ0KLTwhRUxFTUVOVCBpZnJhbWUgJUZsb3c7Pg0KLTwhQVRUTElTVCBpZnJhbWUNCi0gICVjb3JlYXR0cnM7DQotICBsb25nZGVzYyAgICAlVVJJOyAgICAgICAgICAjSU1QTElFRA0KLSAgbmFtZSAgICAgICAgTk1UT0tFTiAgICAgICAgI0lNUExJRUQNCi0gIHNyYyAgICAgICAgICVVUkk7ICAgICAgICAgICNJTVBMSUVEDQotICBmcmFtZWJvcmRlciAoMXwwKSAgICAgICAgICAiMSINCi0gIG1hcmdpbndpZHRoICVQaXhlbHM7ICAgICAgICNJTVBMSUVEDQotICBtYXJnaW5oZWlnaHQgJVBpeGVsczsgICAgICAjSU1QTElFRA0KLSAgc2Nyb2xsaW5nICAgKHllc3xub3xhdXRvKSAgImF1dG8iDQotICBhbGlnbiAgICAgICAlSW1nQWxpZ247ICAgICAjSU1QTElFRA0KLSAgaGVpZ2h0ICAgICAgJUxlbmd0aDsgICAgICAgI0lNUExJRUQNCi0gIHdpZHRoICAgICAgICVMZW5ndGg7ICAgICAgICNJTVBMSUVEDQotICA+DQotDQotPCEtLSBhbHRlcm5hdGUgY29udGVudCBjb250YWluZXIgZm9yIG5vbiBmcmFtZS1iYXNlZCByZW5kZXJpbmcgLS0+DQotDQotPCFFTEVNRU5UIG5vZnJhbWVzICVGbG93Oz4NCi08IUFUVExJU1Qgbm9mcmFtZXMNCi0gICVhdHRyczsNCi0gID4NCi0NCi08IS0tPT09PT09PT09PT09PT09PT09PSBEb2N1bWVudCBCb2R5ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPg0KLQ0KLTwhRUxFTUVOVCBib2R5ICVGbG93Oz4NCi08IUFUVExJU1QgYm9keQ0KLSAgJWF0dHJzOw0KLSAgb25sb2FkICAgICAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQNCi0gIG9udW5sb2FkICAgICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEDQotICBiYWNrZ3JvdW5kICAlVVJJOyAgICAgICAgICAjSU1QTElFRA0KLSAgYmdjb2xvciAgICAgJUNvbG9yOyAgICAgICAgI0lNUExJRUQNCi0gIHRleHQgICAgICAgICVDb2xvcjsgICAgICAgICNJTVBMSUVEDQotICBsaW5rICAgICAgICAlQ29sb3I7ICAgICAgICAjSU1QTElFRA0KLSAgdmxpbmsgICAgICAgJUNvbG9yOyAgICAgICAgI0lNUExJRUQNCi0gIGFsaW5rICAgICAgICVDb2xvcjsgICAgICAgICNJTVBMSUVEDQotICA+DQotDQotPCFFTEVNRU5UIGRpdiAlRmxvdzs+ICA8IS0tIGdlbmVyaWMgbGFuZ3VhZ2Uvc3R5bGUgY29udGFpbmVyIC0tPg0KLTwhQVRUTElTVCBkaXYNCi0gICVhdHRyczsNCi0gICVUZXh0QWxpZ247DQotICA+DQotDQotPCEtLT09PT09PT09PT09PT09PT09PT0gUGFyYWdyYXBocyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4NCi0NCi08IUVMRU1FTlQgcCAlSW5saW5lOz4NCi08IUFUVExJU1QgcA0KLSAgJWF0dHJzOw0KLSAgJVRleHRBbGlnbjsNCi0gID4NCi0NCi08IS0tPT09PT09PT09PT09PT09PT09PSBIZWFkaW5ncyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPg0KLQ0KLTwhLS0NCi0gIFRoZXJlIGFyZSBzaXggbGV2ZWxzIG9mIGhlYWRpbmdzIGZyb20gaDEgKHRoZSBtb3N0IGltcG9ydGFudCkNCi0gIHRvIGg2ICh0aGUgbGVhc3QgaW1wb3J0YW50KS4NCi0tLT4NCi0NCi08IUVMRU1FTlQgaDEgICVJbmxpbmU7Pg0KLTwhQVRUTElTVCBoMQ0KLSAgJWF0dHJzOw0KLSAgJVRleHRBbGlnbjsNCi0gID4NCi0NCi08IUVMRU1FTlQgaDIgJUlubGluZTs+DQotPCFBVFRMSVNUIGgyDQotICAlYXR0cnM7DQotICAlVGV4dEFsaWduOw0KLSAgPg0KLQ0KLTwhRUxFTUVOVCBoMyAlSW5saW5lOz4NCi08IUFUVExJU1QgaDMNCi0gICVhdHRyczsNCi0gICVUZXh0QWxpZ247DQotICA+DQotDQotPCFFTEVNRU5UIGg0ICVJbmxpbmU7Pg0KLTwhQVRUTElTVCBoNA0KLSAgJWF0dHJzOw0KLSAgJVRleHRBbGlnbjsNCi0gID4NCi0NCi08IUVMRU1FTlQgaDUgJUlubGluZTs+DQotPCFBVFRMSVNUIGg1DQotICAlYXR0cnM7DQotICAlVGV4dEFsaWduOw0KLSAgPg0KLQ0KLTwhRUxFTUVOVCBoNiAlSW5saW5lOz4NCi08IUFUVExJU1QgaDYNCi0gICVhdHRyczsNCi0gICVUZXh0QWxpZ247DQotICA+DQotDQotPCEtLT09PT09PT09PT09PT09PT09PT0gTGlzdHMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4NCi0NCi08IS0tIFVub3JkZXJlZCBsaXN0IGJ1bGxldCBzdHlsZXMgLS0+DQotDQotPCFFTlRJVFkgJSBVTFN0eWxlICIoZGlzY3xzcXVhcmV8Y2lyY2xlKSI+DQotDQotPCEtLSBVbm9yZGVyZWQgbGlzdCAtLT4NCi0NCi08IUVMRU1FTlQgdWwgKGxpKSs+DQotPCFBVFRMSVNUIHVsDQotICAlYXR0cnM7DQotICB0eXBlICAgICAgICAlVUxTdHlsZTsgICAgICNJTVBMSUVEDQotICBjb21wYWN0ICAgICAoY29tcGFjdCkgICAgICNJTVBMSUVEDQotICA+DQotDQotPCEtLSBPcmRlcmVkIGxpc3QgbnVtYmVyaW5nIHN0eWxlDQotDQotICAgIDEgICBhcmFiaWMgbnVtYmVycyAgICAgIDEsIDIsIDMsIC4uLg0KLSAgICBhICAgbG93ZXIgYWxwaGEgICAgICAgICBhLCBiLCBjLCAuLi4NCi0gICAgQSAgIHVwcGVyIGFscGhhICAgICAgICAgQSwgQiwgQywgLi4uDQotICAgIGkgICBsb3dlciByb21hbiAgICAgICAgIGksIGlpLCBpaWksIC4uLg0KLSAgICBJICAgdXBwZXIgcm9tYW4gICAgICAgICBJLCBJSSwgSUlJLCAuLi4NCi0NCi0gICAgVGhlIHN0eWxlIGlzIGFwcGxpZWQgdG8gdGhlIHNlcXVlbmNlIG51bWJlciB3aGljaCBieSBkZWZhdWx0DQotICAgIGlzIHJlc2V0IHRvIDEgZm9yIHRoZSBmaXJzdCBsaXN0IGl0ZW0gaW4gYW4gb3JkZXJlZCBsaXN0Lg0KLS0tPg0KLTwhRU5USVRZICUgT0xTdHlsZSAiQ0RBVEEiPg0KLQ0KLTwhLS0gT3JkZXJlZCAobnVtYmVyZWQpIGxpc3QgLS0+DQotDQotPCFFTEVNRU5UIG9sIChsaSkrPg0KLTwhQVRUTElTVCBvbA0KLSAgJWF0dHJzOw0KLSAgdHlwZSAgICAgICAgJU9MU3R5bGU7ICAgICAgI0lNUExJRUQNCi0gIGNvbXBhY3QgICAgIChjb21wYWN0KSAgICAgICNJTVBMSUVEDQotICBzdGFydCAgICAgICAlTnVtYmVyOyAgICAgICAjSU1QTElFRA0KLSAgPg0KLQ0KLTwhLS0gc2luZ2xlIGNvbHVtbiBsaXN0IChERVBSRUNBVEVEKSAtLT4gDQotPCFFTEVNRU5UIG1lbnUgKGxpKSs+DQotPCFBVFRMSVNUIG1lbnUNCi0gICVhdHRyczsNCi0gIGNvbXBhY3QgICAgIChjb21wYWN0KSAgICAgI0lNUExJRUQNCi0gID4NCi0NCi08IS0tIG11bHRpcGxlIGNvbHVtbiBsaXN0IChERVBSRUNBVEVEKSAtLT4gDQotPCFFTEVNRU5UIGRpciAobGkpKz4NCi08IUFUVExJU1QgZGlyDQotICAlYXR0cnM7DQotICBjb21wYWN0ICAgICAoY29tcGFjdCkgICAgICNJTVBMSUVEDQotICA+DQotDQotPCEtLSBMSVN0eWxlIGlzIGNvbnN0cmFpbmVkIHRvOiAiKCVVTFN0eWxlO3wlT0xTdHlsZTspIiAtLT4NCi08IUVOVElUWSAlIExJU3R5bGUgIkNEQVRBIj4NCi0NCi08IS0tIGxpc3QgaXRlbSAtLT4NCi0NCi08IUVMRU1FTlQgbGkgJUZsb3c7Pg0KLTwhQVRUTElTVCBsaQ0KLSAgJWF0dHJzOw0KLSAgdHlwZSAgICAgICAgJUxJU3R5bGU7ICAgICAgI0lNUExJRUQNCi0gIHZhbHVlICAgICAgICVOdW1iZXI7ICAgICAgICNJTVBMSUVEDQotICA+DQotDQotPCEtLSBkZWZpbml0aW9uIGxpc3RzIC0gZHQgZm9yIHRlcm0sIGRkIGZvciBpdHMgZGVmaW5pdGlvbiAtLT4NCi0NCi08IUVMRU1FTlQgZGwgKGR0fGRkKSs+DQotPCFBVFRMSVNUIGRsDQotICAlYXR0cnM7DQotICBjb21wYWN0ICAgICAoY29tcGFjdCkgICAgICAjSU1QTElFRA0KLSAgPg0KLQ0KLTwhRUxFTUVOVCBkdCAlSW5saW5lOz4NCi08IUFUVExJU1QgZHQNCi0gICVhdHRyczsNCi0gID4NCi0NCi08IUVMRU1FTlQgZGQgJUZsb3c7Pg0KLTwhQVRUTElTVCBkZA0KLSAgJWF0dHJzOw0KLSAgPg0KLQ0KLTwhLS09PT09PT09PT09PT09PT09PT09IEFkZHJlc3MgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+DQotDQotPCEtLSBpbmZvcm1hdGlvbiBvbiBhdXRob3IgLS0+DQotDQotPCFFTEVNRU5UIGFkZHJlc3MgJUlubGluZTs+DQotPCFBVFRMSVNUIGFkZHJlc3MNCi0gICVhdHRyczsNCi0gID4NCi0NCi08IS0tPT09PT09PT09PT09PT09PT09PSBIb3Jpem9udGFsIFJ1bGUgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPg0KLQ0KLTwhRUxFTUVOVCBociBFTVBUWT4NCi08IUFUVExJU1QgaHINCi0gICVhdHRyczsNCi0gIGFsaWduICAgICAgIChsZWZ0fGNlbnRlcnxyaWdodCkgI0lNUExJRUQNCi0gIG5vc2hhZGUgICAgIChub3NoYWRlKSAgICAgICNJTVBMSUVEDQotICBzaXplICAgICAgICAlUGl4ZWxzOyAgICAgICAjSU1QTElFRA0KLSAgd2lkdGggICAgICAgJUxlbmd0aDsgICAgICAgI0lNUExJRUQNCi0gID4NCi0NCi08IS0tPT09PT09PT09PT09PT09PT09PSBQcmVmb3JtYXR0ZWQgVGV4dCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPg0KLQ0KLTwhLS0gY29udGVudCBpcyAlSW5saW5lOyBleGNsdWRpbmcgDQotICAgICAgICAiaW1nfG9iamVjdHxhcHBsZXR8YmlnfHNtYWxsfHN1YnxzdXB8Zm9udHxiYXNlZm9udCIgLS0+DQotDQotPCFFTEVNRU5UIHByZSAlcHJlLmNvbnRlbnQ7Pg0KLTwhQVRUTElTVCBwcmUNCi0gICVhdHRyczsNCi0gIHdpZHRoICAgICAgICVOdW1iZXI7ICAgICAgI0lNUExJRUQNCi0gIHhtbDpzcGFjZSAgIChwcmVzZXJ2ZSkgICAgI0ZJWEVEICdwcmVzZXJ2ZScNCi0gID4NCi0NCi08IS0tPT09PT09PT09PT09PT09PT09PSBCbG9jay1saWtlIFF1b3RlcyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPg0KLQ0KLTwhRUxFTUVOVCBibG9ja3F1b3RlICVGbG93Oz4NCi08IUFUVExJU1QgYmxvY2txdW90ZQ0KLSAgJWF0dHJzOw0KLSAgY2l0ZSAgICAgICAgJVVSSTsgICAgICAgICAgI0lNUExJRUQNCi0gID4NCi0NCi08IS0tPT09PT09PT09PT09PT09PT09PSBUZXh0IGFsaWdubWVudCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPg0KLQ0KLTwhLS0gY2VudGVyIGNvbnRlbnQgLS0+DQotPCFFTEVNRU5UIGNlbnRlciAlRmxvdzs+DQotPCFBVFRMSVNUIGNlbnRlcg0KLSAgJWF0dHJzOw0KLSAgPg0KLQ0KLTwhLS09PT09PT09PT09PT09PT09PT09IEluc2VydGVkL0RlbGV0ZWQgVGV4dCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+DQotDQotPCEtLQ0KLSAgaW5zL2RlbCBhcmUgYWxsb3dlZCBpbiBibG9jayBhbmQgaW5saW5lIGNvbnRlbnQsIGJ1dCBpdHMNCi0gIGluYXBwcm9wcmlhdGUgdG8gaW5jbHVkZSBibG9jayBjb250ZW50IHdpdGhpbiBhbiBpbnMgZWxlbWVudA0KLSAgb2NjdXJyaW5nIGluIGlubGluZSBjb250ZW50Lg0KLS0tPg0KLTwhRUxFTUVOVCBpbnMgJUZsb3c7Pg0KLTwhQVRUTElTVCBpbnMNCi0gICVhdHRyczsNCi0gIGNpdGUgICAgICAgICVVUkk7ICAgICAgICAgICNJTVBMSUVEDQotICBkYXRldGltZSAgICAlRGF0ZXRpbWU7ICAgICAjSU1QTElFRA0KLSAgPg0KLQ0KLTwhRUxFTUVOVCBkZWwgJUZsb3c7Pg0KLTwhQVRUTElTVCBkZWwNCi0gICVhdHRyczsNCi0gIGNpdGUgICAgICAgICVVUkk7ICAgICAgICAgICNJTVBMSUVEDQotICBkYXRldGltZSAgICAlRGF0ZXRpbWU7ICAgICAjSU1QTElFRA0KLSAgPg0KLQ0KLTwhLS09PT09PT09PT09PT09PT09PT0gVGhlIEFuY2hvciBFbGVtZW50ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+DQotDQotPCEtLSBjb250ZW50IGlzICVJbmxpbmU7IGV4Y2VwdCB0aGF0IGFuY2hvcnMgc2hvdWxkbid0IGJlIG5lc3RlZCAtLT4NCi0NCi08IUVMRU1FTlQgYSAlYS5jb250ZW50Oz4NCi08IUFUVExJU1QgYQ0KLSAgJWF0dHJzOw0KLSAgY2hhcnNldCAgICAgJUNoYXJzZXQ7ICAgICAgI0lNUExJRUQNCi0gIHR5cGUgICAgICAgICVDb250ZW50VHlwZTsgICNJTVBMSUVEDQotICBuYW1lICAgICAgICBOTVRPS0VOICAgICAgICAjSU1QTElFRA0KLSAgaHJlZiAgICAgICAgJVVSSTsgICAgICAgICAgI0lNUExJRUQNCi0gIGhyZWZsYW5nICAgICVMYW5ndWFnZUNvZGU7ICNJTVBMSUVEDQotICByZWwgICAgICAgICAlTGlua1R5cGVzOyAgICAjSU1QTElFRA0KLSAgcmV2ICAgICAgICAgJUxpbmtUeXBlczsgICAgI0lNUExJRUQNCi0gIGFjY2Vzc2tleSAgICVDaGFyYWN0ZXI7ICAgICNJTVBMSUVEDQotICBzaGFwZSAgICAgICAlU2hhcGU7ICAgICAgICAicmVjdCINCi0gIGNvb3JkcyAgICAgICVDb29yZHM7ICAgICAgICNJTVBMSUVEDQotICB0YWJpbmRleCAgICAlTnVtYmVyOyAgICAgICAjSU1QTElFRA0KLSAgb25mb2N1cyAgICAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQNCi0gIG9uYmx1ciAgICAgICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEDQotICB0YXJnZXQgICAgICAlRnJhbWVUYXJnZXQ7ICAjSU1QTElFRA0KLSAgPg0KLQ0KLTwhLS09PT09PT09PT09PT09PT09PT09PT0gSW5saW5lIEVsZW1lbnRzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+DQotDQotPCFFTEVNRU5UIHNwYW4gJUlubGluZTs+IDwhLS0gZ2VuZXJpYyBsYW5ndWFnZS9zdHlsZSBjb250YWluZXIgLS0+DQotPCFBVFRMSVNUIHNwYW4NCi0gICVhdHRyczsNCi0gID4NCi0NCi08IUVMRU1FTlQgYmRvICVJbmxpbmU7PiAgPCEtLSBJMThOIEJpRGkgb3Zlci1yaWRlIC0tPg0KLTwhQVRUTElTVCBiZG8NCi0gICVjb3JlYXR0cnM7DQotICAlZXZlbnRzOw0KLSAgbGFuZyAgICAgICAgJUxhbmd1YWdlQ29kZTsgI0lNUExJRUQNCi0gIHhtbDpsYW5nICAgICVMYW5ndWFnZUNvZGU7ICNJTVBMSUVEDQotICBkaXIgICAgICAgICAobHRyfHJ0bCkgICAgICAjUkVRVUlSRUQNCi0gID4NCi0NCi08IUVMRU1FTlQgYnIgRU1QVFk+ICAgPCEtLSBmb3JjZWQgbGluZSBicmVhayAtLT4NCi08IUFUVExJU1QgYnINCi0gICVjb3JlYXR0cnM7DQotICBjbGVhciAgICAgICAobGVmdHxhbGx8cmlnaHR8bm9uZSkgIm5vbmUiDQotICA+DQotDQotPCFFTEVNRU5UIGVtICVJbmxpbmU7PiAgIDwhLS0gZW1waGFzaXMgLS0+DQotPCFBVFRMSVNUIGVtICVhdHRyczs+DQotDQotPCFFTEVNRU5UIHN0cm9uZyAlSW5saW5lOz4gICA8IS0tIHN0cm9uZyBlbXBoYXNpcyAtLT4NCi08IUFUVExJU1Qgc3Ryb25nICVhdHRyczs+DQotDQotPCFFTEVNRU5UIGRmbiAlSW5saW5lOz4gICA8IS0tIGRlZmluaXRpb25hbCAtLT4NCi08IUFUVExJU1QgZGZuICVhdHRyczs+DQotDQotPCFFTEVNRU5UIGNvZGUgJUlubGluZTs+ICAgPCEtLSBwcm9ncmFtIGNvZGUgLS0+DQotPCFBVFRMSVNUIGNvZGUgJWF0dHJzOz4NCi0NCi08IUVMRU1FTlQgc2FtcCAlSW5saW5lOz4gICA8IS0tIHNhbXBsZSAtLT4NCi08IUFUVExJU1Qgc2FtcCAlYXR0cnM7Pg0KLQ0KLTwhRUxFTUVOVCBrYmQgJUlubGluZTs+ICA8IS0tIHNvbWV0aGluZyB1c2VyIHdvdWxkIHR5cGUgLS0+DQotPCFBVFRMSVNUIGtiZCAlYXR0cnM7Pg0KLQ0KLTwhRUxFTUVOVCB2YXIgJUlubGluZTs+ICAgPCEtLSB2YXJpYWJsZSAtLT4NCi08IUFUVExJU1QgdmFyICVhdHRyczs+DQotDQotPCFFTEVNRU5UIGNpdGUgJUlubGluZTs+ICAgPCEtLSBjaXRhdGlvbiAtLT4NCi08IUFUVExJU1QgY2l0ZSAlYXR0cnM7Pg0KLQ0KLTwhRUxFTUVOVCBhYmJyICVJbmxpbmU7PiAgIDwhLS0gYWJicmV2aWF0aW9uIC0tPg0KLTwhQVRUTElTVCBhYmJyICVhdHRyczs+DQotDQotPCFFTEVNRU5UIGFjcm9ueW0gJUlubGluZTs+ICAgPCEtLSBhY3JvbnltIC0tPg0KLTwhQVRUTElTVCBhY3JvbnltICVhdHRyczs+DQotDQotPCFFTEVNRU5UIHEgJUlubGluZTs+ICAgPCEtLSBpbmxpbmVkIHF1b3RlIC0tPg0KLTwhQVRUTElTVCBxDQotICAlYXR0cnM7DQotICBjaXRlICAgICAgICAlVVJJOyAgICAgICAgICAjSU1QTElFRA0KLSAgPg0KLQ0KLTwhRUxFTUVOVCBzdWIgJUlubGluZTs+IDwhLS0gc3Vic2NyaXB0IC0tPg0KLTwhQVRUTElTVCBzdWIgJWF0dHJzOz4NCi0NCi08IUVMRU1FTlQgc3VwICVJbmxpbmU7PiA8IS0tIHN1cGVyc2NyaXB0IC0tPg0KLTwhQVRUTElTVCBzdXAgJWF0dHJzOz4NCi0NCi08IUVMRU1FTlQgdHQgJUlubGluZTs+ICAgPCEtLSBmaXhlZCBwaXRjaCBmb250IC0tPg0KLTwhQVRUTElTVCB0dCAlYXR0cnM7Pg0KLQ0KLTwhRUxFTUVOVCBpICVJbmxpbmU7PiAgIDwhLS0gaXRhbGljIGZvbnQgLS0+DQotPCFBVFRMSVNUIGkgJWF0dHJzOz4NCi0NCi08IUVMRU1FTlQgYiAlSW5saW5lOz4gICA8IS0tIGJvbGQgZm9udCAtLT4NCi08IUFUVExJU1QgYiAlYXR0cnM7Pg0KLQ0KLTwhRUxFTUVOVCBiaWcgJUlubGluZTs+ICAgPCEtLSBiaWdnZXIgZm9udCAtLT4NCi08IUFUVExJU1QgYmlnICVhdHRyczs+DQotDQotPCFFTEVNRU5UIHNtYWxsICVJbmxpbmU7PiAgIDwhLS0gc21hbGxlciBmb250IC0tPg0KLTwhQVRUTElTVCBzbWFsbCAlYXR0cnM7Pg0KLQ0KLTwhRUxFTUVOVCB1ICVJbmxpbmU7PiAgIDwhLS0gdW5kZXJsaW5lIC0tPg0KLTwhQVRUTElTVCB1ICVhdHRyczs+DQotDQotPCFFTEVNRU5UIHMgJUlubGluZTs+ICAgPCEtLSBzdHJpa2UtdGhyb3VnaCAtLT4NCi08IUFUVExJU1QgcyAlYXR0cnM7Pg0KLQ0KLTwhRUxFTUVOVCBzdHJpa2UgJUlubGluZTs+ICAgPCEtLSBzdHJpa2UtdGhyb3VnaCAtLT4NCi08IUFUVExJU1Qgc3RyaWtlICVhdHRyczs+DQotDQotPCFFTEVNRU5UIGJhc2Vmb250IEVNUFRZPiAgPCEtLSBiYXNlIGZvbnQgc2l6ZSAtLT4NCi08IUFUVExJU1QgYmFzZWZvbnQNCi0gIGlkICAgICAgICAgIElEICAgICAgICAgICAgICNJTVBMSUVEDQotICBzaXplICAgICAgICBDREFUQSAgICAgICAgICAjUkVRVUlSRUQNCi0gIGNvbG9yICAgICAgICVDb2xvcjsgICAgICAgICNJTVBMSUVEDQotICBmYWNlICAgICAgICBDREFUQSAgICAgICAgICAjSU1QTElFRA0KLSAgPg0KLQ0KLTwhRUxFTUVOVCBmb250ICVJbmxpbmU7PiA8IS0tIGxvY2FsIGNoYW5nZSB0byBmb250IC0tPg0KLTwhQVRUTElTVCBmb250DQotICAlY29yZWF0dHJzOw0KLSAgJWkxOG47DQotICBzaXplICAgICAgICBDREFUQSAgICAgICAgICAjSU1QTElFRA0KLSAgY29sb3IgICAgICAgJUNvbG9yOyAgICAgICAgI0lNUExJRUQNCi0gIGZhY2UgICAgICAgIENEQVRBICAgICAgICAgICNJTVBMSUVEDQotICA+DQotDQotPCEtLT09PT09PT09PT09PT09PT09PT09IE9iamVjdCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPg0KLTwhLS0NCi0gIG9iamVjdCBpcyB1c2VkIHRvIGVtYmVkIG9iamVjdHMgYXMgcGFydCBvZiBIVE1MIHBhZ2VzLg0KLSAgcGFyYW0gZWxlbWVudHMgc2hvdWxkIHByZWNlZGUgb3RoZXIgY29udGVudC4gUGFyYW1ldGVycw0KLSAgY2FuIGFsc28gYmUgZXhwcmVzc2VkIGFzIGF0dHJpYnV0ZS92YWx1ZSBwYWlycyBvbiB0aGUNCi0gIG9iamVjdCBlbGVtZW50IGl0c2VsZiB3aGVuIGJyZXZpdHkgaXMgZGVzaXJlZC4NCi0tLT4NCi0NCi08IUVMRU1FTlQgb2JqZWN0ICgjUENEQVRBIHwgcGFyYW0gfCAlYmxvY2s7IHwgZm9ybSB8ICVpbmxpbmU7IHwgJW1pc2M7KSo+DQotPCFBVFRMSVNUIG9iamVjdA0KLSAgJWF0dHJzOw0KLSAgZGVjbGFyZSAgICAgKGRlY2xhcmUpICAgICAgI0lNUExJRUQNCi0gIGNsYXNzaWQgICAgICVVUkk7ICAgICAgICAgICNJTVBMSUVEDQotICBjb2RlYmFzZSAgICAlVVJJOyAgICAgICAgICAjSU1QTElFRA0KLSAgZGF0YSAgICAgICAgJVVSSTsgICAgICAgICAgI0lNUExJRUQNCi0gIHR5cGUgICAgICAgICVDb250ZW50VHlwZTsgICNJTVBMSUVEDQotICBjb2RldHlwZSAgICAlQ29udGVudFR5cGU7ICAjSU1QTElFRA0KLSAgYXJjaGl2ZSAgICAgJVVyaUxpc3Q7ICAgICAgI0lNUExJRUQNCi0gIHN0YW5kYnkgICAgICVUZXh0OyAgICAgICAgICNJTVBMSUVEDQotICBoZWlnaHQgICAgICAlTGVuZ3RoOyAgICAgICAjSU1QTElFRA0KLSAgd2lkdGggICAgICAgJUxlbmd0aDsgICAgICAgI0lNUExJRUQNCi0gIHVzZW1hcCAgICAgICVVUkk7ICAgICAgICAgICNJTVBMSUVEDQotICBuYW1lICAgICAgICBOTVRPS0VOICAgICAgICAjSU1QTElFRA0KLSAgdGFiaW5kZXggICAgJU51bWJlcjsgICAgICAgI0lNUExJRUQNCi0gIGFsaWduICAgICAgICVJbWdBbGlnbjsgICAgICNJTVBMSUVEDQotICBib3JkZXIgICAgICAlUGl4ZWxzOyAgICAgICAjSU1QTElFRA0KLSAgaHNwYWNlICAgICAgJVBpeGVsczsgICAgICAgI0lNUExJRUQNCi0gIHZzcGFjZSAgICAgICVQaXhlbHM7ICAgICAgICNJTVBMSUVEDQotICA+DQotDQotPCEtLQ0KLSAgcGFyYW0gaXMgdXNlZCB0byBzdXBwbHkgYSBuYW1lZCBwcm9wZXJ0eSB2YWx1ZS4NCi0gIEluIFhNTCBpdCB3b3VsZCBzZWVtIG5hdHVyYWwgdG8gZm9sbG93IFJERiBhbmQgc3VwcG9ydCBhbg0KLSAgYWJicmV2aWF0ZWQgc3ludGF4IHdoZXJlIHRoZSBwYXJhbSBlbGVtZW50cyBhcmUgcmVwbGFjZWQNCi0gIGJ5IGF0dHJpYnV0ZSB2YWx1ZSBwYWlycyBvbiB0aGUgb2JqZWN0IHN0YXJ0IHRhZy4NCi0tLT4NCi08IUVMRU1FTlQgcGFyYW0gRU1QVFk+DQotPCFBVFRMSVNUIHBhcmFtDQotICBpZCAgICAgICAgICBJRCAgICAgICAgICAgICAjSU1QTElFRA0KLSAgbmFtZSAgICAgICAgQ0RBVEEgICAgICAgICAgI1JFUVVJUkVEDQotICB2YWx1ZSAgICAgICBDREFUQSAgICAgICAgICAjSU1QTElFRA0KLSAgdmFsdWV0eXBlICAgKGRhdGF8cmVmfG9iamVjdCkgImRhdGEiDQotICB0eXBlICAgICAgICAlQ29udGVudFR5cGU7ICAjSU1QTElFRA0KLSAgPg0KLQ0KLTwhLS09PT09PT09PT09PT09PT09PT09IEphdmEgYXBwbGV0ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4NCi08IS0tDQotICBPbmUgb2YgY29kZSBvciBvYmplY3QgYXR0cmlidXRlcyBtdXN0IGJlIHByZXNlbnQuDQotICBQbGFjZSBwYXJhbSBlbGVtZW50cyBiZWZvcmUgb3RoZXIgY29udGVudC4NCi0tLT4NCi08IUVMRU1FTlQgYXBwbGV0ICgjUENEQVRBIHwgcGFyYW0gfCAlYmxvY2s7IHwgZm9ybSB8ICVpbmxpbmU7IHwgJW1pc2M7KSo+DQotPCFBVFRMSVNUIGFwcGxldA0KLSAgJWNvcmVhdHRyczsNCi0gIGNvZGViYXNlICAgICVVUkk7ICAgICAgICAgICNJTVBMSUVEDQotICBhcmNoaXZlICAgICBDREFUQSAgICAgICAgICAjSU1QTElFRA0KLSAgY29kZSAgICAgICAgQ0RBVEEgICAgICAgICAgI0lNUExJRUQNCi0gIG9iamVjdCAgICAgIENEQVRBICAgICAgICAgICNJTVBMSUVEDQotICBhbHQgICAgICAgICAlVGV4dDsgICAgICAgICAjSU1QTElFRA0KLSAgbmFtZSAgICAgICAgTk1UT0tFTiAgICAgICAgI0lNUExJRUQNCi0gIHdpZHRoICAgICAgICVMZW5ndGg7ICAgICAgICNSRVFVSVJFRA0KLSAgaGVpZ2h0ICAgICAgJUxlbmd0aDsgICAgICAgI1JFUVVJUkVEDQotICBhbGlnbiAgICAgICAlSW1nQWxpZ247ICAgICAjSU1QTElFRA0KLSAgaHNwYWNlICAgICAgJVBpeGVsczsgICAgICAgI0lNUExJRUQNCi0gIHZzcGFjZSAgICAgICVQaXhlbHM7ICAgICAgICNJTVBMSUVEDQotICA+DQotDQotPCEtLT09PT09PT09PT09PT09PT09PT0gSW1hZ2VzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4NCi0NCi08IS0tDQotICAgVG8gYXZvaWQgYWNjZXNzaWJpbGl0eSBwcm9ibGVtcyBmb3IgcGVvcGxlIHdobyBhcmVuJ3QNCi0gICBhYmxlIHRvIHNlZSB0aGUgaW1hZ2UsIHlvdSBzaG91bGQgcHJvdmlkZSBhIHRleHQNCi0gICBkZXNjcmlwdGlvbiB1c2luZyB0aGUgYWx0IGFuZCBsb25nZGVzYyBhdHRyaWJ1dGVzLg0KLSAgIEluIGFkZGl0aW9uLCBhdm9pZCB0aGUgdXNlIG9mIHNlcnZlci1zaWRlIGltYWdlIG1hcHMuDQotLS0+DQotDQotPCFFTEVNRU5UIGltZyBFTVBUWT4NCi08IUFUVExJU1QgaW1nDQotICAlYXR0cnM7DQotICBzcmMgICAgICAgICAlVVJJOyAgICAgICAgICAjUkVRVUlSRUQNCi0gIGFsdCAgICAgICAgICVUZXh0OyAgICAgICAgICNSRVFVSVJFRA0KLSAgbmFtZSAgICAgICAgTk1UT0tFTiAgICAgICAgI0lNUExJRUQNCi0gIGxvbmdkZXNjICAgICVVUkk7ICAgICAgICAgICNJTVBMSUVEDQotICBoZWlnaHQgICAgICAlTGVuZ3RoOyAgICAgICAjSU1QTElFRA0KLSAgd2lkdGggICAgICAgJUxlbmd0aDsgICAgICAgI0lNUExJRUQNCi0gIHVzZW1hcCAgICAgICVVUkk7ICAgICAgICAgICNJTVBMSUVEDQotICBpc21hcCAgICAgICAoaXNtYXApICAgICAgICAjSU1QTElFRA0KLSAgYWxpZ24gICAgICAgJUltZ0FsaWduOyAgICAgI0lNUExJRUQNCi0gIGJvcmRlciAgICAgICVMZW5ndGg7ICAgICAgICNJTVBMSUVEDQotICBoc3BhY2UgICAgICAlUGl4ZWxzOyAgICAgICAjSU1QTElFRA0KLSAgdnNwYWNlICAgICAgJVBpeGVsczsgICAgICAgI0lNUExJRUQNCi0gID4NCi0NCi08IS0tIHVzZW1hcCBwb2ludHMgdG8gYSBtYXAgZWxlbWVudCB3aGljaCBtYXkgYmUgaW4gdGhpcyBkb2N1bWVudA0KLSAgb3IgYW4gZXh0ZXJuYWwgZG9jdW1lbnQsIGFsdGhvdWdoIHRoZSBsYXR0ZXIgaXMgbm90IHdpZGVseSBzdXBwb3J0ZWQgLS0+DQotDQotPCEtLT09PT09PT09PT09PT09PT09PSBDbGllbnQtc2lkZSBpbWFnZSBtYXBzID09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4NCi0NCi08IS0tIFRoZXNlIGNhbiBiZSBwbGFjZWQgaW4gdGhlIHNhbWUgZG9jdW1lbnQgb3IgZ3JvdXBlZCBpbiBhDQotICAgICBzZXBhcmF0ZSBkb2N1bWVudCBhbHRob3VnaCB0aGlzIGlzbid0IHlldCB3aWRlbHkgc3VwcG9ydGVkIC0tPg0KLQ0KLTwhRUxFTUVOVCBtYXAgKCglYmxvY2s7IHwgZm9ybSB8ICVtaXNjOykrIHwgYXJlYSspPg0KLTwhQVRUTElTVCBtYXANCi0gICVpMThuOw0KLSAgJWV2ZW50czsNCi0gIGlkICAgICAgICAgIElEICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgY2xhc3MgICAgICAgQ0RBVEEgICAgICAgICAgI0lNUExJRUQNCi0gIHN0eWxlICAgICAgICVTdHlsZVNoZWV0OyAgICNJTVBMSUVEDQotICB0aXRsZSAgICAgICAlVGV4dDsgICAgICAgICAjSU1QTElFRA0KLSAgbmFtZSAgICAgICAgQ0RBVEEgICAgICAgICAgI0lNUExJRUQNCi0gID4NCi0NCi08IUVMRU1FTlQgYXJlYSBFTVBUWT4NCi08IUFUVExJU1QgYXJlYQ0KLSAgJWF0dHJzOw0KLSAgc2hhcGUgICAgICAgJVNoYXBlOyAgICAgICAgInJlY3QiDQotICBjb29yZHMgICAgICAlQ29vcmRzOyAgICAgICAjSU1QTElFRA0KLSAgaHJlZiAgICAgICAgJVVSSTsgICAgICAgICAgI0lNUExJRUQNCi0gIG5vaHJlZiAgICAgIChub2hyZWYpICAgICAgICNJTVBMSUVEDQotICBhbHQgICAgICAgICAlVGV4dDsgICAgICAgICAjUkVRVUlSRUQNCi0gIHRhYmluZGV4ICAgICVOdW1iZXI7ICAgICAgICNJTVBMSUVEDQotICBhY2Nlc3NrZXkgICAlQ2hhcmFjdGVyOyAgICAjSU1QTElFRA0KLSAgb25mb2N1cyAgICAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQNCi0gIG9uYmx1ciAgICAgICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEDQotICB0YXJnZXQgICAgICAlRnJhbWVUYXJnZXQ7ICAjSU1QTElFRA0KLSAgPg0KLQ0KLTwhLS09PT09PT09PT09PT09PT09IEZvcm1zID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+DQotDQotPCFFTEVNRU5UIGZvcm0gJWZvcm0uY29udGVudDs+ICAgPCEtLSBmb3JtcyBzaG91bGRuJ3QgYmUgbmVzdGVkIC0tPg0KLQ0KLTwhQVRUTElTVCBmb3JtDQotICAlYXR0cnM7DQotICBhY3Rpb24gICAgICAlVVJJOyAgICAgICAgICAjUkVRVUlSRUQNCi0gIG1ldGhvZCAgICAgIChnZXR8cG9zdCkgICAgICJnZXQiDQotICBuYW1lICAgICAgICBOTVRPS0VOICAgICAgICAjSU1QTElFRA0KLSAgZW5jdHlwZSAgICAgJUNvbnRlbnRUeXBlOyAgImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCINCi0gIG9uc3VibWl0ICAgICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEDQotICBvbnJlc2V0ICAgICAlU2NyaXB0OyAgICAgICAjSU1QTElFRA0KLSAgYWNjZXB0ICAgICAgJUNvbnRlbnRUeXBlczsgI0lNUExJRUQNCi0gIGFjY2VwdC1jaGFyc2V0ICVDaGFyc2V0czsgICNJTVBMSUVEDQotICB0YXJnZXQgICAgICAlRnJhbWVUYXJnZXQ7ICAjSU1QTElFRA0KLSAgPg0KLQ0KLTwhLS0NCi0gIEVhY2ggbGFiZWwgbXVzdCBub3QgY29udGFpbiBtb3JlIHRoYW4gT05FIGZpZWxkDQotICBMYWJlbCBlbGVtZW50cyBzaG91bGRuJ3QgYmUgbmVzdGVkLg0KLS0tPg0KLTwhRUxFTUVOVCBsYWJlbCAlSW5saW5lOz4NCi08IUFUVExJU1QgbGFiZWwNCi0gICVhdHRyczsNCi0gIGZvciAgICAgICAgIElEUkVGICAgICAgICAgICNJTVBMSUVEDQotICBhY2Nlc3NrZXkgICAlQ2hhcmFjdGVyOyAgICAjSU1QTElFRA0KLSAgb25mb2N1cyAgICAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQNCi0gIG9uYmx1ciAgICAgICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEDQotICA+DQotDQotPCFFTlRJVFkgJSBJbnB1dFR5cGUNCi0gICIodGV4dCB8IHBhc3N3b3JkIHwgY2hlY2tib3ggfA0KLSAgICByYWRpbyB8IHN1Ym1pdCB8IHJlc2V0IHwNCi0gICAgZmlsZSB8IGhpZGRlbiB8IGltYWdlIHwgYnV0dG9uKSINCi0gICA+DQotDQotPCEtLSB0aGUgbmFtZSBhdHRyaWJ1dGUgaXMgcmVxdWlyZWQgZm9yIGFsbCBidXQgc3VibWl0ICYgcmVzZXQgLS0+DQotDQotPCFFTEVNRU5UIGlucHV0IEVNUFRZPiAgICAgPCEtLSBmb3JtIGNvbnRyb2wgLS0+DQotPCFBVFRMSVNUIGlucHV0DQotICAlYXR0cnM7DQotICB0eXBlICAgICAgICAlSW5wdXRUeXBlOyAgICAidGV4dCINCi0gIG5hbWUgICAgICAgIENEQVRBICAgICAgICAgICNJTVBMSUVEDQotICB2YWx1ZSAgICAgICBDREFUQSAgICAgICAgICAjSU1QTElFRA0KLSAgY2hlY2tlZCAgICAgKGNoZWNrZWQpICAgICAgI0lNUExJRUQNCi0gIGRpc2FibGVkICAgIChkaXNhYmxlZCkgICAgICNJTVBMSUVEDQotICByZWFkb25seSAgICAocmVhZG9ubHkpICAgICAjSU1QTElFRA0KLSAgc2l6ZSAgICAgICAgQ0RBVEEgICAgICAgICAgI0lNUExJRUQNCi0gIG1heGxlbmd0aCAgICVOdW1iZXI7ICAgICAgICNJTVBMSUVEDQotICBzcmMgICAgICAgICAlVVJJOyAgICAgICAgICAjSU1QTElFRA0KLSAgYWx0ICAgICAgICAgQ0RBVEEgICAgICAgICAgI0lNUExJRUQNCi0gIHVzZW1hcCAgICAgICVVUkk7ICAgICAgICAgICNJTVBMSUVEDQotICB0YWJpbmRleCAgICAlTnVtYmVyOyAgICAgICAjSU1QTElFRA0KLSAgYWNjZXNza2V5ICAgJUNoYXJhY3RlcjsgICAgI0lNUExJRUQNCi0gIG9uZm9jdXMgICAgICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEDQotICBvbmJsdXIgICAgICAlU2NyaXB0OyAgICAgICAjSU1QTElFRA0KLSAgb25zZWxlY3QgICAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQNCi0gIG9uY2hhbmdlICAgICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEDQotICBhY2NlcHQgICAgICAlQ29udGVudFR5cGVzOyAjSU1QTElFRA0KLSAgYWxpZ24gICAgICAgJUltZ0FsaWduOyAgICAgI0lNUExJRUQNCi0gID4NCi0NCi08IUVMRU1FTlQgc2VsZWN0IChvcHRncm91cHxvcHRpb24pKz4gIDwhLS0gb3B0aW9uIHNlbGVjdG9yIC0tPg0KLTwhQVRUTElTVCBzZWxlY3QNCi0gICVhdHRyczsNCi0gIG5hbWUgICAgICAgIENEQVRBICAgICAgICAgICNJTVBMSUVEDQotICBzaXplICAgICAgICAlTnVtYmVyOyAgICAgICAjSU1QTElFRA0KLSAgbXVsdGlwbGUgICAgKG11bHRpcGxlKSAgICAgI0lNUExJRUQNCi0gIGRpc2FibGVkICAgIChkaXNhYmxlZCkgICAgICNJTVBMSUVEDQotICB0YWJpbmRleCAgICAlTnVtYmVyOyAgICAgICAjSU1QTElFRA0KLSAgb25mb2N1cyAgICAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQNCi0gIG9uYmx1ciAgICAgICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEDQotICBvbmNoYW5nZSAgICAlU2NyaXB0OyAgICAgICAjSU1QTElFRA0KLSAgPg0KLQ0KLTwhRUxFTUVOVCBvcHRncm91cCAob3B0aW9uKSs+ICAgPCEtLSBvcHRpb24gZ3JvdXAgLS0+DQotPCFBVFRMSVNUIG9wdGdyb3VwDQotICAlYXR0cnM7DQotICBkaXNhYmxlZCAgICAoZGlzYWJsZWQpICAgICAjSU1QTElFRA0KLSAgbGFiZWwgICAgICAgJVRleHQ7ICAgICAgICAgI1JFUVVJUkVEDQotICA+DQotDQotPCFFTEVNRU5UIG9wdGlvbiAoI1BDREFUQSk+ICAgICA8IS0tIHNlbGVjdGFibGUgY2hvaWNlIC0tPg0KLTwhQVRUTElTVCBvcHRpb24NCi0gICVhdHRyczsNCi0gIHNlbGVjdGVkICAgIChzZWxlY3RlZCkgICAgICNJTVBMSUVEDQotICBkaXNhYmxlZCAgICAoZGlzYWJsZWQpICAgICAjSU1QTElFRA0KLSAgbGFiZWwgICAgICAgJVRleHQ7ICAgICAgICAgI0lNUExJRUQNCi0gIHZhbHVlICAgICAgIENEQVRBICAgICAgICAgICNJTVBMSUVEDQotICA+DQotDQotPCFFTEVNRU5UIHRleHRhcmVhICgjUENEQVRBKT4gICAgIDwhLS0gbXVsdGktbGluZSB0ZXh0IGZpZWxkIC0tPg0KLTwhQVRUTElTVCB0ZXh0YXJlYQ0KLSAgJWF0dHJzOw0KLSAgbmFtZSAgICAgICAgQ0RBVEEgICAgICAgICAgI0lNUExJRUQNCi0gIHJvd3MgICAgICAgICVOdW1iZXI7ICAgICAgICNSRVFVSVJFRA0KLSAgY29scyAgICAgICAgJU51bWJlcjsgICAgICAgI1JFUVVJUkVEDQotICBkaXNhYmxlZCAgICAoZGlzYWJsZWQpICAgICAjSU1QTElFRA0KLSAgcmVhZG9ubHkgICAgKHJlYWRvbmx5KSAgICAgI0lNUExJRUQNCi0gIHRhYmluZGV4ICAgICVOdW1iZXI7ICAgICAgICNJTVBMSUVEDQotICBhY2Nlc3NrZXkgICAlQ2hhcmFjdGVyOyAgICAjSU1QTElFRA0KLSAgb25mb2N1cyAgICAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQNCi0gIG9uYmx1ciAgICAgICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEDQotICBvbnNlbGVjdCAgICAlU2NyaXB0OyAgICAgICAjSU1QTElFRA0KLSAgb25jaGFuZ2UgICAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQNCi0gID4NCi0NCi08IS0tDQotICBUaGUgZmllbGRzZXQgZWxlbWVudCBpcyB1c2VkIHRvIGdyb3VwIGZvcm0gZmllbGRzLg0KLSAgT25seSBvbmUgbGVnZW5kIGVsZW1lbnQgc2hvdWxkIG9jY3VyIGluIHRoZSBjb250ZW50DQotICBhbmQgaWYgcHJlc2VudCBzaG91bGQgb25seSBiZSBwcmVjZWRlZCBieSB3aGl0ZXNwYWNlLg0KLS0tPg0KLTwhRUxFTUVOVCBmaWVsZHNldCAoI1BDREFUQSB8IGxlZ2VuZCB8ICVibG9jazsgfCBmb3JtIHwgJWlubGluZTsgfCAlbWlzYzspKj4NCi08IUFUVExJU1QgZmllbGRzZXQNCi0gICVhdHRyczsNCi0gID4NCi0NCi08IUVOVElUWSAlIExBbGlnbiAiKHRvcHxib3R0b218bGVmdHxyaWdodCkiPg0KLQ0KLTwhRUxFTUVOVCBsZWdlbmQgJUlubGluZTs+ICAgICA8IS0tIGZpZWxkc2V0IGxhYmVsIC0tPg0KLTwhQVRUTElTVCBsZWdlbmQNCi0gICVhdHRyczsNCi0gIGFjY2Vzc2tleSAgICVDaGFyYWN0ZXI7ICAgICNJTVBMSUVEDQotICBhbGlnbiAgICAgICAlTEFsaWduOyAgICAgICAjSU1QTElFRA0KLSAgPg0KLQ0KLTwhLS0NCi0gQ29udGVudCBpcyAlRmxvdzsgZXhjbHVkaW5nIGEsIGZvcm0sIGZvcm0gY29udHJvbHMsIGlmcmFtZQ0KLS0tPiANCi08IUVMRU1FTlQgYnV0dG9uICVidXR0b24uY29udGVudDs+ICA8IS0tIHB1c2ggYnV0dG9uIC0tPg0KLTwhQVRUTElTVCBidXR0b24NCi0gICVhdHRyczsNCi0gIG5hbWUgICAgICAgIENEQVRBICAgICAgICAgICNJTVBMSUVEDQotICB2YWx1ZSAgICAgICBDREFUQSAgICAgICAgICAjSU1QTElFRA0KLSAgdHlwZSAgICAgICAgKGJ1dHRvbnxzdWJtaXR8cmVzZXQpICJzdWJtaXQiDQotICBkaXNhYmxlZCAgICAoZGlzYWJsZWQpICAgICAjSU1QTElFRA0KLSAgdGFiaW5kZXggICAgJU51bWJlcjsgICAgICAgI0lNUExJRUQNCi0gIGFjY2Vzc2tleSAgICVDaGFyYWN0ZXI7ICAgICNJTVBMSUVEDQotICBvbmZvY3VzICAgICAlU2NyaXB0OyAgICAgICAjSU1QTElFRA0KLSAgb25ibHVyICAgICAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQNCi0gID4NCi0NCi08IS0tIHNpbmdsZS1saW5lIHRleHQgaW5wdXQgY29udHJvbCAoREVQUkVDQVRFRCkgLS0+DQotPCFFTEVNRU5UIGlzaW5kZXggRU1QVFk+DQotPCFBVFRMSVNUIGlzaW5kZXgNCi0gICVjb3JlYXR0cnM7DQotICAlaTE4bjsNCi0gIHByb21wdCAgICAgICVUZXh0OyAgICAgICAgICNJTVBMSUVEDQotICA+DQotDQotPCEtLT09PT09PT09PT09PT09PT09PT09PT09IFRhYmxlcyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4NCi0NCi08IS0tIERlcml2ZWQgZnJvbSBJRVRGIEhUTUwgdGFibGUgc3RhbmRhcmQsIHNlZSBbUkZDMTk0Ml0gLS0+DQotDQotPCEtLQ0KLSBUaGUgYm9yZGVyIGF0dHJpYnV0ZSBzZXRzIHRoZSB0aGlja25lc3Mgb2YgdGhlIGZyYW1lIGFyb3VuZCB0aGUNCi0gdGFibGUuIFRoZSBkZWZhdWx0IHVuaXRzIGFyZSBzY3JlZW4gcGl4ZWxzLg0KLQ0KLSBUaGUgZnJhbWUgYXR0cmlidXRlIHNwZWNpZmllcyB3aGljaCBwYXJ0cyBvZiB0aGUgZnJhbWUgYXJvdW5kDQotIHRoZSB0YWJsZSBzaG91bGQgYmUgcmVuZGVyZWQuIFRoZSB2YWx1ZXMgYXJlIG5vdCB0aGUgc2FtZSBhcw0KLSBDQUxTIHRvIGF2b2lkIGEgbmFtZSBjbGFzaCB3aXRoIHRoZSB2YWxpZ24gYXR0cmlidXRlLg0KLS0tPg0KLTwhRU5USVRZICUgVEZyYW1lICIodm9pZHxhYm92ZXxiZWxvd3xoc2lkZXN8bGhzfHJoc3x2c2lkZXN8Ym94fGJvcmRlcikiPg0KLQ0KLTwhLS0NCi0gVGhlIHJ1bGVzIGF0dHJpYnV0ZSBkZWZpbmVzIHdoaWNoIHJ1bGVzIHRvIGRyYXcgYmV0d2VlbiBjZWxsczoNCi0NCi0gSWYgcnVsZXMgaXMgYWJzZW50IHRoZW4gYXNzdW1lOg0KLSAgICAgIm5vbmUiIGlmIGJvcmRlciBpcyBhYnNlbnQgb3IgYm9yZGVyPSIwIiBvdGhlcndpc2UgImFsbCINCi0tLT4NCi0NCi08IUVOVElUWSAlIFRSdWxlcyAiKG5vbmUgfCBncm91cHMgfCByb3dzIHwgY29scyB8IGFsbCkiPg0KLSAgDQotPCEtLSBob3Jpem9udGFsIHBsYWNlbWVudCBvZiB0YWJsZSByZWxhdGl2ZSB0byBkb2N1bWVudCAtLT4NCi08IUVOVElUWSAlIFRBbGlnbiAiKGxlZnR8Y2VudGVyfHJpZ2h0KSI+DQotDQotPCEtLSBob3Jpem9udGFsIGFsaWdubWVudCBhdHRyaWJ1dGVzIGZvciBjZWxsIGNvbnRlbnRzDQotDQotICBjaGFyICAgICAgICBhbGlnbm1lbnQgY2hhciwgZS5nLiBjaGFyPSc6Jw0KLSAgY2hhcm9mZiAgICAgb2Zmc2V0IGZvciBhbGlnbm1lbnQgY2hhcg0KLS0tPg0KLTwhRU5USVRZICUgY2VsbGhhbGlnbg0KLSAgImFsaWduICAgICAgKGxlZnR8Y2VudGVyfHJpZ2h0fGp1c3RpZnl8Y2hhcikgI0lNUExJRUQNCi0gICBjaGFyICAgICAgICVDaGFyYWN0ZXI7ICAgICNJTVBMSUVEDQotICAgY2hhcm9mZiAgICAlTGVuZ3RoOyAgICAgICAjSU1QTElFRCINCi0gID4NCi0NCi08IS0tIHZlcnRpY2FsIGFsaWdubWVudCBhdHRyaWJ1dGVzIGZvciBjZWxsIGNvbnRlbnRzIC0tPg0KLTwhRU5USVRZICUgY2VsbHZhbGlnbg0KLSAgInZhbGlnbiAgICAgKHRvcHxtaWRkbGV8Ym90dG9tfGJhc2VsaW5lKSAjSU1QTElFRCINCi0gID4NCi0NCi08IUVMRU1FTlQgdGFibGUNCi0gICAgIChjYXB0aW9uPywgKGNvbCp8Y29sZ3JvdXAqKSwgdGhlYWQ/LCB0Zm9vdD8sICh0Ym9keSt8dHIrKSk+DQotPCFFTEVNRU5UIGNhcHRpb24gICVJbmxpbmU7Pg0KLTwhRUxFTUVOVCB0aGVhZCAgICAodHIpKz4NCi08IUVMRU1FTlQgdGZvb3QgICAgKHRyKSs+DQotPCFFTEVNRU5UIHRib2R5ICAgICh0cikrPg0KLTwhRUxFTUVOVCBjb2xncm91cCAoY29sKSo+DQotPCFFTEVNRU5UIGNvbCAgICAgIEVNUFRZPg0KLTwhRUxFTUVOVCB0ciAgICAgICAodGh8dGQpKz4NCi08IUVMRU1FTlQgdGggICAgICAgJUZsb3c7Pg0KLTwhRUxFTUVOVCB0ZCAgICAgICAlRmxvdzs+DQotDQotPCFBVFRMSVNUIHRhYmxlDQotICAlYXR0cnM7DQotICBzdW1tYXJ5ICAgICAlVGV4dDsgICAgICAgICAjSU1QTElFRA0KLSAgd2lkdGggICAgICAgJUxlbmd0aDsgICAgICAgI0lNUExJRUQNCi0gIGJvcmRlciAgICAgICVQaXhlbHM7ICAgICAgICNJTVBMSUVEDQotICBmcmFtZSAgICAgICAlVEZyYW1lOyAgICAgICAjSU1QTElFRA0KLSAgcnVsZXMgICAgICAgJVRSdWxlczsgICAgICAgI0lNUExJRUQNCi0gIGNlbGxzcGFjaW5nICVMZW5ndGg7ICAgICAgICNJTVBMSUVEDQotICBjZWxscGFkZGluZyAlTGVuZ3RoOyAgICAgICAjSU1QTElFRA0KLSAgYWxpZ24gICAgICAgJVRBbGlnbjsgICAgICAgI0lNUExJRUQNCi0gIGJnY29sb3IgICAgICVDb2xvcjsgICAgICAgICNJTVBMSUVEDQotICA+DQotDQotPCFFTlRJVFkgJSBDQWxpZ24gIih0b3B8Ym90dG9tfGxlZnR8cmlnaHQpIj4NCi0NCi08IUFUVExJU1QgY2FwdGlvbg0KLSAgJWF0dHJzOw0KLSAgYWxpZ24gICAgICAgJUNBbGlnbjsgICAgICAgI0lNUExJRUQNCi0gID4NCi0NCi08IS0tDQotY29sZ3JvdXAgZ3JvdXBzIGEgc2V0IG9mIGNvbCBlbGVtZW50cy4gSXQgYWxsb3dzIHlvdSB0byBncm91cA0KLXNldmVyYWwgc2VtYW50aWNhbGx5IHJlbGF0ZWQgY29sdW1ucyB0b2dldGhlci4NCi0tLT4NCi08IUFUVExJU1QgY29sZ3JvdXANCi0gICVhdHRyczsNCi0gIHNwYW4gICAgICAgICVOdW1iZXI7ICAgICAgICIxIg0KLSAgd2lkdGggICAgICAgJU11bHRpTGVuZ3RoOyAgI0lNUExJRUQNCi0gICVjZWxsaGFsaWduOw0KLSAgJWNlbGx2YWxpZ247DQotICA+DQotDQotPCEtLQ0KLSBjb2wgZWxlbWVudHMgZGVmaW5lIHRoZSBhbGlnbm1lbnQgcHJvcGVydGllcyBmb3IgY2VsbHMgaW4NCi0gb25lIG9yIG1vcmUgY29sdW1ucy4NCi0NCi0gVGhlIHdpZHRoIGF0dHJpYnV0ZSBzcGVjaWZpZXMgdGhlIHdpZHRoIG9mIHRoZSBjb2x1bW5zLCBlLmcuDQotDQotICAgICB3aWR0aD02NCAgICAgICAgd2lkdGggaW4gc2NyZWVuIHBpeGVscw0KLSAgICAgd2lkdGg9MC41KiAgICAgIHJlbGF0aXZlIHdpZHRoIG9mIDAuNQ0KLQ0KLSBUaGUgc3BhbiBhdHRyaWJ1dGUgY2F1c2VzIHRoZSBhdHRyaWJ1dGVzIG9mIG9uZQ0KLSBjb2wgZWxlbWVudCB0byBhcHBseSB0byBtb3JlIHRoYW4gb25lIGNvbHVtbi4NCi0tLT4NCi08IUFUVExJU1QgY29sDQotICAlYXR0cnM7DQotICBzcGFuICAgICAgICAlTnVtYmVyOyAgICAgICAiMSINCi0gIHdpZHRoICAgICAgICVNdWx0aUxlbmd0aDsgICNJTVBMSUVEDQotICAlY2VsbGhhbGlnbjsNCi0gICVjZWxsdmFsaWduOw0KLSAgPg0KLQ0KLTwhLS0NCi0gICAgVXNlIHRoZWFkIHRvIGR1cGxpY2F0ZSBoZWFkZXJzIHdoZW4gYnJlYWtpbmcgdGFibGUNCi0gICAgYWNyb3NzIHBhZ2UgYm91bmRhcmllcywgb3IgZm9yIHN0YXRpYyBoZWFkZXJzIHdoZW4NCi0gICAgdGJvZHkgc2VjdGlvbnMgYXJlIHJlbmRlcmVkIGluIHNjcm9sbGluZyBwYW5lbC4NCi0NCi0gICAgVXNlIHRmb290IHRvIGR1cGxpY2F0ZSBmb290ZXJzIHdoZW4gYnJlYWtpbmcgdGFibGUNCi0gICAgYWNyb3NzIHBhZ2UgYm91bmRhcmllcywgb3IgZm9yIHN0YXRpYyBmb290ZXJzIHdoZW4NCi0gICAgdGJvZHkgc2VjdGlvbnMgYXJlIHJlbmRlcmVkIGluIHNjcm9sbGluZyBwYW5lbC4NCi0NCi0gICAgVXNlIG11bHRpcGxlIHRib2R5IHNlY3Rpb25zIHdoZW4gcnVsZXMgYXJlIG5lZWRlZA0KLSAgICBiZXR3ZWVuIGdyb3VwcyBvZiB0YWJsZSByb3dzLg0KLS0tPg0KLTwhQVRUTElTVCB0aGVhZA0KLSAgJWF0dHJzOw0KLSAgJWNlbGxoYWxpZ247DQotICAlY2VsbHZhbGlnbjsNCi0gID4NCi0NCi08IUFUVExJU1QgdGZvb3QNCi0gICVhdHRyczsNCi0gICVjZWxsaGFsaWduOw0KLSAgJWNlbGx2YWxpZ247DQotICA+DQotDQotPCFBVFRMSVNUIHRib2R5DQotICAlYXR0cnM7DQotICAlY2VsbGhhbGlnbjsNCi0gICVjZWxsdmFsaWduOw0KLSAgPg0KLQ0KLTwhQVRUTElTVCB0cg0KLSAgJWF0dHJzOw0KLSAgJWNlbGxoYWxpZ247DQotICAlY2VsbHZhbGlnbjsNCi0gIGJnY29sb3IgICAgICVDb2xvcjsgICAgICAgICNJTVBMSUVEDQotICA+DQotDQotPCEtLSBTY29wZSBpcyBzaW1wbGVyIHRoYW4gaGVhZGVycyBhdHRyaWJ1dGUgZm9yIGNvbW1vbiB0YWJsZXMgLS0+DQotPCFFTlRJVFkgJSBTY29wZSAiKHJvd3xjb2x8cm93Z3JvdXB8Y29sZ3JvdXApIj4NCi0NCi08IS0tIHRoIGlzIGZvciBoZWFkZXJzLCB0ZCBmb3IgZGF0YSBhbmQgZm9yIGNlbGxzIGFjdGluZyBhcyBib3RoIC0tPg0KLQ0KLTwhQVRUTElTVCB0aA0KLSAgJWF0dHJzOw0KLSAgYWJiciAgICAgICAgJVRleHQ7ICAgICAgICAgI0lNUExJRUQNCi0gIGF4aXMgICAgICAgIENEQVRBICAgICAgICAgICNJTVBMSUVEDQotICBoZWFkZXJzICAgICBJRFJFRlMgICAgICAgICAjSU1QTElFRA0KLSAgc2NvcGUgICAgICAgJVNjb3BlOyAgICAgICAgI0lNUExJRUQNCi0gIHJvd3NwYW4gICAgICVOdW1iZXI7ICAgICAgICIxIg0KLSAgY29sc3BhbiAgICAgJU51bWJlcjsgICAgICAgIjEiDQotICAlY2VsbGhhbGlnbjsNCi0gICVjZWxsdmFsaWduOw0KLSAgbm93cmFwICAgICAgKG5vd3JhcCkgICAgICAgI0lNUExJRUQNCi0gIGJnY29sb3IgICAgICVDb2xvcjsgICAgICAgICNJTVBMSUVEDQotICB3aWR0aCAgICAgICAlUGl4ZWxzOyAgICAgICAjSU1QTElFRA0KLSAgaGVpZ2h0ICAgICAgJVBpeGVsczsgICAgICAgI0lNUExJRUQNCi0gID4NCi0NCi08IUFUVExJU1QgdGQNCi0gICVhdHRyczsNCi0gIGFiYnIgICAgICAgICVUZXh0OyAgICAgICAgICNJTVBMSUVEDQotICBheGlzICAgICAgICBDREFUQSAgICAgICAgICAjSU1QTElFRA0KLSAgaGVhZGVycyAgICAgSURSRUZTICAgICAgICAgI0lNUExJRUQNCi0gIHNjb3BlICAgICAgICVTY29wZTsgICAgICAgICNJTVBMSUVEDQotICByb3dzcGFuICAgICAlTnVtYmVyOyAgICAgICAiMSINCi0gIGNvbHNwYW4gICAgICVOdW1iZXI7ICAgICAgICIxIg0KLSAgJWNlbGxoYWxpZ247DQotICAlY2VsbHZhbGlnbjsNCi0gIG5vd3JhcCAgICAgIChub3dyYXApICAgICAgICNJTVBMSUVEDQotICBiZ2NvbG9yICAgICAlQ29sb3I7ICAgICAgICAjSU1QTElFRA0KLSAgd2lkdGggICAgICAgJVBpeGVsczsgICAgICAgI0lNUExJRUQNCi0gIGhlaWdodCAgICAgICVQaXhlbHM7ICAgICAgICNJTVBMSUVEDQotICA+DQotDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE0MzIwOS9XZWJDb250ZW50L01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE0MzIwOS9XZWJDb250ZW50L01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTQyNzJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL2J1Z18xNDMyMDkvV2ViQ29udGVudC9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1DbGFzcy1QYXRoOiAKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE0MzIwOS9XZWJDb250ZW50L1dFQi1JTkYvY2xhc3Nlcy8ua2VlcG1lIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE0MzIwOS9XZWJDb250ZW50L1dFQi1JTkYvY2xhc3Nlcy8ua2VlcG1lCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL2J1Z18xNDMyMDkvV2ViQ29udGVudC9XRUItSU5GL2NsYXNzZXMvLmtlZXBtZQorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTQzMjA5L1dlYkNvbnRlbnQvV0VCLUlORi9saWIvLmtlZXBtZSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL2J1Z18xNDMyMDkvV2ViQ29udGVudC9XRUItSU5GL2xpYi8ua2VlcG1lCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL2J1Z18xNDMyMDkvV2ViQ29udGVudC9XRUItSU5GL2xpYi8ua2VlcG1lCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL2J1Z18xNDMyMDkvV2ViQ29udGVudC9XRUItSU5GL3dlYi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTQzMjA5L1dlYkNvbnRlbnQvV0VCLUlORi93ZWIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTFkN2MwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL2J1Z18xNDMyMDkvV2ViQ29udGVudC9XRUItSU5GL3dlYi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdlYi1hcHAgaWQ9IldlYkFwcF9JRCIgdmVyc2lvbj0iMi40IiB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIj4KLQk8ZGlzcGxheS1uYW1lPmJ1Z18xNDMyMDk8L2Rpc3BsYXktbmFtZT4KLQk8d2VsY29tZS1maWxlLWxpc3Q+Ci0JCTx3ZWxjb21lLWZpbGU+aW5kZXguaHRtbDwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmluZGV4Lmh0bTwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmluZGV4LmpzcDwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmRlZmF1bHQuaHRtbDwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmRlZmF1bHQuaHRtPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5qc3A8L3dlbGNvbWUtZmlsZT4KLQk8L3dlbGNvbWUtZmlsZS1saXN0PgotPC93ZWItYXBwPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE0MzIwOS9XZWJDb250ZW50L2JhZGF0dHJpYnV0ZW5hbWVzLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL2J1Z18xNDMyMDkvV2ViQ29udGVudC9iYWRhdHRyaWJ1dGVuYW1lcy5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1MTU5NzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE0MzIwOS9XZWJDb250ZW50L2JhZGF0dHJpYnV0ZW5hbWVzLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08dGl0bGU+SW5zZXJ0IHRpdGxlIGhlcmU8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgZmFrZW5hbWU9IiI+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE0MzIwOS9XZWJDb250ZW50L3VzZWpzcGluYXR0cmlidXRlLmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTQzMjA5L1dlYkNvbnRlbnQvdXNlanNwaW5hdHRyaWJ1dGUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTViZDU2Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTQzMjA5L1dlYkNvbnRlbnQvdXNlanNwaW5hdHRyaWJ1dGUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPHRpdGxlPkluc2VydCB0aXRsZSBoZXJlPC90aXRsZT4KLTwvaGVhZD4KLTwhLS0ganNwIGV4cHJlc3Npb24gaW4gYXR0cmlidXRlIHZhbHVlIC0tPgotPGJvZHkgYmdjb2xvcj0iPCU9InJlZCIgJT4iPgotPCEtLSBqc3AgZXhwcmVzc2lvbiBpbiBhdHRyaWJ1dGUgbmFtZSAtLT4KLTxwIDwlPSJhbGlnbiIgJT49ImxlZnQiIC8+Ci08IS0tIGpzcCBleHByZXNzaW9uIGFzIGF0dHJpYnV0ZSBuYW1lICYgdmFsdWUgLS0+Ci08YSA8JT0iaHJlZj0naHR0cDovL3d3dy5lY2xpcHNlLm9yZyciICU+PkVjbGlwc2UgbGluazwvYT4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTQzMjA5L1dlYkNvbnRlbnQvdXNlanNwaW5hdHRyaWJ1dGUuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE0MzIwOS9XZWJDb250ZW50L3VzZWpzcGluYXR0cmlidXRlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTViZDU2Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTQzMjA5L1dlYkNvbnRlbnQvdXNlanNwaW5hdHRyaWJ1dGUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08dGl0bGU+SW5zZXJ0IHRpdGxlIGhlcmU8L3RpdGxlPgotPC9oZWFkPgotPCEtLSBqc3AgZXhwcmVzc2lvbiBpbiBhdHRyaWJ1dGUgdmFsdWUgLS0+Ci08Ym9keSBiZ2NvbG9yPSI8JT0icmVkIiAlPiI+Ci08IS0tIGpzcCBleHByZXNzaW9uIGluIGF0dHJpYnV0ZSBuYW1lIC0tPgotPHAgPCU9ImFsaWduIiAlPj0ibGVmdCIgLz4KLTwhLS0ganNwIGV4cHJlc3Npb24gYXMgYXR0cmlidXRlIG5hbWUgJiB2YWx1ZSAtLT4KLTxhIDwlPSJocmVmPSdodHRwOi8vd3d3LmVjbGlwc2Uub3JnJyIgJT4+RWNsaXBzZSBsaW5rPC9hPgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL2J1Z18xNDMyMDkvYnVpbGQvY2xhc3Nlcy8ua2VlcG1lIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE0MzIwOS9idWlsZC9jbGFzc2VzLy5rZWVwbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE0MzIwOS9idWlsZC9jbGFzc2VzLy5rZWVwbWUKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE0MzIwOS9zcmMvLmtlZXBtZSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL2J1Z18xNDMyMDkvc3JjLy5rZWVwbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE0MzIwOS9zcmMvLmtlZXBtZQorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9qc3Bmb3JtYXR0aW5nLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvanNwZm9ybWF0dGluZy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGFmMDA4Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9qc3Bmb3JtYXR0aW5nLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+anNwZm9ybWF0dGluZzwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLnZhbGlkYXRpb25idWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9qc3Bmb3JtYXR0aW5nL1dlYkNvbnRlbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9qc3Bmb3JtYXR0aW5nL1dlYkNvbnRlbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1NDI3MmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvanNwZm9ybWF0dGluZy9XZWJDb250ZW50L01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUNsYXNzLVBhdGg6IAotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9qc3Bmb3JtYXR0aW5nL1dlYkNvbnRlbnQvV0VCLUlORi9saWIvLmtlZXBtZSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL2pzcGZvcm1hdHRpbmcvV2ViQ29udGVudC9XRUItSU5GL2xpYi8ua2VlcG1lCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL2pzcGZvcm1hdHRpbmcvV2ViQ29udGVudC9XRUItSU5GL2xpYi8ua2VlcG1lCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL2pzcGZvcm1hdHRpbmcvV2ViQ29udGVudC9XRUItSU5GL3dlYi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9qc3Bmb3JtYXR0aW5nL1dlYkNvbnRlbnQvV0VCLUlORi93ZWIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMmI2ODNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL2pzcGZvcm1hdHRpbmcvV2ViQ29udGVudC9XRUItSU5GL3dlYi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdlYi1hcHAgaWQ9IldlYkFwcF9JRCIgdmVyc2lvbj0iMi40IiB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIj4KLQk8ZGlzcGxheS1uYW1lPmpzcGZvcm1hdHRpbmc8L2Rpc3BsYXktbmFtZT4KLQk8d2VsY29tZS1maWxlLWxpc3Q+Ci0JCTx3ZWxjb21lLWZpbGU+aW5kZXguaHRtbDwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmluZGV4Lmh0bTwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmluZGV4LmpzcDwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmRlZmF1bHQuaHRtbDwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmRlZmF1bHQuaHRtPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5qc3A8L3dlbGNvbWUtZmlsZT4KLQk8L3dlbGNvbWUtZmlsZS1saXN0PgotPC93ZWItYXBwPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvanNwZm9ybWF0dGluZy9XZWJDb250ZW50L2Zvcm1hdGJ1ZzEwMjQ5NS1mbXQuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvanNwZm9ybWF0dGluZy9XZWJDb250ZW50L2Zvcm1hdGJ1ZzEwMjQ5NS1mbXQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjI2YzkxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL2pzcGZvcm1hdHRpbmcvV2ViQ29udGVudC9mb3JtYXRidWcxMDI0OTUtZm10LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLTwlLS0ganNwIGRlY2xhcmF0aW9uIGZvciBTdHJpbmcgcGFsIHNob3VsZCBzdGF5IG9uIHNhbWUgbGluZS4gQWxsIG90aGVycyBzaG91bGQgbW92ZSB0byBuZXcgbGluZSAtLSU+Ci08JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIgotCXBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMSIlPjwlIVN0cmluZyBwYWwgPSAiZnJpZW5kIjslPgotPCUhU3RyaW5nIG1lc3NhZ2UgPSAiZnJpZW5kIjslPgotPCUhU3RyaW5nIGJ1ZGR5ID0gImZyaWVuZCI7JT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPHRpdGxlPkluc2VydCB0aXRsZSBoZXJlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotPCUtLSBqc3AgZXhwcmVzc2lvbiBtdXN0IGJlIGZvbGxvd2VkIGRpcmVjdGx5IGJ5ICEgYmVjYXVzZSBubyB3aGl0ZXNwYWNlIGV4aXN0cyBiZXR3ZWVuIC0tJT4KLVdlbGNvbWUgdG8gV1RQLAotPCU9bWVzc2FnZSU+IQotPHA+V2VsY29tZSB0byBXVFAsIDwlPXBhbCU+ITwvcD4KLTwlLS0ganNwIGV4cHJlc3Npb24gc2hvdWxkIGJlIHRyZWF0ZWQgbGlrZSBhbnkgb3RoZXIgYXR0cmlidXRlIC0tJT4KLTx0YWJsZSA8JT0iYWxpZ249J2xlZnQnIiU+PgotCTx0cj4KLQkJPCUtLSBubyB3aGl0ZXNwYWNlIGV4aXN0cyBiZWZvcmUvYWZ0ZXIganNwIHRhZyBzbyBrZWVwIGl0IHRoYXQgd2F5IC0tJT4KLQkJPHRoPkNvbHVtbjxqc3A6c2V0UHJvcGVydHkgbmFtZT0ibXluYW1lIiBwcm9wZXJ0eT0ibXlwcm9wZXJ0eSIgLz5IZWFkaW5nPC90aD4KLQkJPCUtLSB3aGl0ZXNwYWNlIGV4aXN0cyBiZWZvcmUvYWZ0ZXIganNwIHRhZyBzbyBuZXdsaW5lcyBhcmUgb2theSAtLSU+Ci0JCTx0aD5Db2x1bW4gPGpzcDpzZXRQcm9wZXJ0eSBuYW1lPSJteW5hbWUiIHByb3BlcnR5PSJteXByb3BlcnR5IiAvPgotCQlIZWFkaW5nPC90aD4KLQk8L3RyPgotCTx0cj4KLQkJPHRkPlJvdyAxOiBDb2wgMTwvdGQ+Ci0JCTx0ZD5Sb3cgMTogQ29sIDI8L3RkPgotCTwvdHI+Ci08L3RhYmxlPgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL2pzcGZvcm1hdHRpbmcvV2ViQ29udGVudC9mb3JtYXRidWcxMDI0OTUuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvanNwZm9ybWF0dGluZy9XZWJDb250ZW50L2Zvcm1hdGJ1ZzEwMjQ5NS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1NWYzNTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvanNwZm9ybWF0dGluZy9XZWJDb250ZW50L2Zvcm1hdGJ1ZzEwMjQ5NS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi08JS0tIGpzcCBkZWNsYXJhdGlvbiBmb3IgU3RyaW5nIHBhbCBzaG91bGQgc3RheSBvbiBzYW1lIGxpbmUuIEFsbCBvdGhlcnMgc2hvdWxkIG1vdmUgdG8gbmV3IGxpbmUgLS0lPgotPCVAIHBhZ2UgbGFuZ3VhZ2U9ImphdmEiIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIKLQlwYWdlRW5jb2Rpbmc9IklTTy04ODU5LTEiJT48JSEgU3RyaW5nIHBhbD0iZnJpZW5kIjsgJT4KLTwlISBTdHJpbmcgbWVzc2FnZT0iZnJpZW5kIjsgJT4gPCUhIFN0cmluZyBidWRkeT0iZnJpZW5kIjsgJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPHRpdGxlPkluc2VydCB0aXRsZSBoZXJlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotPCUtLSBqc3AgZXhwcmVzc2lvbiBtdXN0IGJlIGZvbGxvd2VkIGRpcmVjdGx5IGJ5ICEgYmVjYXVzZSBubyB3aGl0ZXNwYWNlIGV4aXN0cyBiZXR3ZWVuIC0tJT4KLVdlbGNvbWUgdG8gV1RQLCA8JT1tZXNzYWdlJT4hCi08cD5XZWxjb21lIHRvIFdUUCwgPCU9cGFsJT4hPC9wPgotPCUtLSBqc3AgZXhwcmVzc2lvbiBzaG91bGQgYmUgdHJlYXRlZCBsaWtlIGFueSBvdGhlciBhdHRyaWJ1dGUgLS0lPgotPHRhYmxlICAgICAgICAgICAgPCU9ImFsaWduPSdsZWZ0JyIlPj4KLQk8dHI+Ci0JCTwlLS0gbm8gd2hpdGVzcGFjZSBleGlzdHMgYmVmb3JlL2FmdGVyIGpzcCB0YWcgc28ga2VlcCBpdCB0aGF0IHdheSAtLSU+Ci0JCTx0aD5Db2x1bW48anNwOnNldFByb3BlcnR5IG5hbWU9Im15bmFtZSIgcHJvcGVydHk9Im15cHJvcGVydHkiLz5IZWFkaW5nPC90aD4KLQkJPCUtLSB3aGl0ZXNwYWNlIGV4aXN0cyBiZWZvcmUvYWZ0ZXIganNwIHRhZyBzbyBuZXdsaW5lcyBhcmUgb2theSAtLSU+Ci0JCTx0aD5Db2x1bW4gPGpzcDpzZXRQcm9wZXJ0eSBuYW1lPSJteW5hbWUiIHByb3BlcnR5PSJteXByb3BlcnR5Ii8+IEhlYWRpbmc8L3RoPgotCTwvdHI+Ci0JPHRyPgotCQk8dGQ+Um93IDE6IENvbCAxPC90ZD4KLQkJPHRkPlJvdyAxOiBDb2wgMjwvdGQ+Ci0JPC90cj4KLTwvdGFibGU+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvanNwZm9ybWF0dGluZy9XZWJDb250ZW50L2Zvcm1hdGJ1ZzEwMjQ5NV8xLWZtdC5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9qc3Bmb3JtYXR0aW5nL1dlYkNvbnRlbnQvZm9ybWF0YnVnMTAyNDk1XzEtZm10LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDg0NzlkMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9qc3Bmb3JtYXR0aW5nL1dlYkNvbnRlbnQvZm9ybWF0YnVnMTAyNDk1XzEtZm10LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLTwlLS0ganNwIGRlY2xhcmF0aW9uIGZvciBTdHJpbmcgcGFsIHNob3VsZCBzdGF5IG9uIHNhbWUgbGluZS4gQWxsIG90aGVycyBzaG91bGQgbW92ZSB0byBuZXcgbGluZSAtLSU+Ci08JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIgotCXBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMSIlPjwlIVN0cmluZyBwYWwgPSAiZnJpZW5kIjslPgotPCUhU3RyaW5nIG1lc3NhZ2UgPSAiZnJpZW5kIjslPgotPCUhU3RyaW5nIGJ1ZGR5ID0gImZyaWVuZCI7JT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPHRpdGxlPkluc2VydCB0aXRsZSBoZXJlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL2pzcGZvcm1hdHRpbmcvV2ViQ29udGVudC9mb3JtYXRidWcxMDI0OTVfMS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9qc3Bmb3JtYXR0aW5nL1dlYkNvbnRlbnQvZm9ybWF0YnVnMTAyNDk1XzEuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwM2VhYzQzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL2pzcGZvcm1hdHRpbmcvV2ViQ29udGVudC9mb3JtYXRidWcxMDI0OTVfMS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08JS0tIGpzcCBkZWNsYXJhdGlvbiBmb3IgU3RyaW5nIHBhbCBzaG91bGQgc3RheSBvbiBzYW1lIGxpbmUuIEFsbCBvdGhlcnMgc2hvdWxkIG1vdmUgdG8gbmV3IGxpbmUgLS0lPgotPCVAIHBhZ2UgbGFuZ3VhZ2U9ImphdmEiIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIKLQlwYWdlRW5jb2Rpbmc9IklTTy04ODU5LTEiJT48JSEgU3RyaW5nIHBhbD0iZnJpZW5kIjsgJT4KLTwlISBTdHJpbmcgbWVzc2FnZT0iZnJpZW5kIjsgJT4gPCUhIFN0cmluZyBidWRkeT0iZnJpZW5kIjsgJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPHRpdGxlPkluc2VydCB0aXRsZSBoZXJlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL2pzcGZvcm1hdHRpbmcvV2ViQ29udGVudC9mb3JtYXRidWcxMDI0OTVfMi1mbXQuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvanNwZm9ybWF0dGluZy9XZWJDb250ZW50L2Zvcm1hdGJ1ZzEwMjQ5NV8yLWZtdC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlMjE1OWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvanNwZm9ybWF0dGluZy9XZWJDb250ZW50L2Zvcm1hdGJ1ZzEwMjQ5NV8yLWZtdC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIgotCXBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMSIlPgotPCUhU3RyaW5nIHBhbCA9ICJmcmllbmQiOyU+Ci08JSFTdHJpbmcgbWVzc2FnZSA9ICJmcmllbmQiOyU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5JbnNlcnQgdGl0bGUgaGVyZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLTwlLS0ganNwIGV4cHJlc3Npb24gbXVzdCBiZSBmb2xsb3dlZCBkaXJlY3RseSBieSAhIGJlY2F1c2Ugbm8gd2hpdGVzcGFjZSBleGlzdHMgYmV0d2VlbiAtLSU+Ci1XZWxjb21lIHRvIFdUUCwKLTwlPW1lc3NhZ2UlPiEKLTxwPldlbGNvbWUgdG8gV1RQLCA8JT1wYWwlPiE8L3A+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvanNwZm9ybWF0dGluZy9XZWJDb250ZW50L2Zvcm1hdGJ1ZzEwMjQ5NV8yLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL2pzcGZvcm1hdHRpbmcvV2ViQ29udGVudC9mb3JtYXRidWcxMDI0OTVfMi5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxYjIwNGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvanNwZm9ybWF0dGluZy9XZWJDb250ZW50L2Zvcm1hdGJ1ZzEwMjQ5NV8yLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLTwlQCBwYWdlIGxhbmd1YWdlPSJqYXZhIiBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiCi0JcGFnZUVuY29kaW5nPSJJU08tODg1OS0xIiU+Ci08JSEgU3RyaW5nIHBhbD0iZnJpZW5kIjsgJT4KLTwlISBTdHJpbmcgbWVzc2FnZT0iZnJpZW5kIjsgJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPHRpdGxlPkluc2VydCB0aXRsZSBoZXJlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotPCUtLSBqc3AgZXhwcmVzc2lvbiBtdXN0IGJlIGZvbGxvd2VkIGRpcmVjdGx5IGJ5ICEgYmVjYXVzZSBubyB3aGl0ZXNwYWNlIGV4aXN0cyBiZXR3ZWVuIC0tJT4KLVdlbGNvbWUgdG8gV1RQLCA8JT1tZXNzYWdlJT4hCi08cD5XZWxjb21lIHRvIFdUUCwgPCU9cGFsJT4hPC9wPgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL2pzcGZvcm1hdHRpbmcvV2ViQ29udGVudC9mb3JtYXRidWcxMDI0OTVfMy1mbXQuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvanNwZm9ybWF0dGluZy9XZWJDb250ZW50L2Zvcm1hdGJ1ZzEwMjQ5NV8zLWZtdC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4N2Y4MDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvanNwZm9ybWF0dGluZy9XZWJDb250ZW50L2Zvcm1hdGJ1ZzEwMjQ5NV8zLWZtdC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi08JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIgotCXBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMSIlPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08dGl0bGU+SW5zZXJ0IHRpdGxlIGhlcmU8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci08JS0tIGpzcCBleHByZXNzaW9uIHNob3VsZCBiZSB0cmVhdGVkIGxpa2UgYW55IG90aGVyIGF0dHJpYnV0ZSAtLSU+Ci08dGFibGUgPCU9ImFsaWduPSdsZWZ0JyIlPj4KLTwvdGFibGU+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvanNwZm9ybWF0dGluZy9XZWJDb250ZW50L2Zvcm1hdGJ1ZzEwMjQ5NV8zLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL2pzcGZvcm1hdHRpbmcvV2ViQ29udGVudC9mb3JtYXRidWcxMDI0OTVfMy5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyNjMxOTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvanNwZm9ybWF0dGluZy9XZWJDb250ZW50L2Zvcm1hdGJ1ZzEwMjQ5NV8zLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLTwlQCBwYWdlIGxhbmd1YWdlPSJqYXZhIiBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiCi0JcGFnZUVuY29kaW5nPSJJU08tODg1OS0xIiU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5JbnNlcnQgdGl0bGUgaGVyZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLTwlLS0ganNwIGV4cHJlc3Npb24gc2hvdWxkIGJlIHRyZWF0ZWQgbGlrZSBhbnkgb3RoZXIgYXR0cmlidXRlIC0tJT4KLTx0YWJsZSAgICAgICAgICAgIDwlPSJhbGlnbj0nbGVmdCciJT4+Ci08L3RhYmxlPgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL2pzcGZvcm1hdHRpbmcvV2ViQ29udGVudC9mb3JtYXRidWcxMDI0OTVfNC1mbXQuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvanNwZm9ybWF0dGluZy9XZWJDb250ZW50L2Zvcm1hdGJ1ZzEwMjQ5NV80LWZtdC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1NGIzNjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvanNwZm9ybWF0dGluZy9XZWJDb250ZW50L2Zvcm1hdGJ1ZzEwMjQ5NV80LWZtdC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi08JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIgotCXBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMSIlPgotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08dGl0bGU+SW5zZXJ0IHRpdGxlIGhlcmU8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci08dGFibGU+Ci0JPHRyPgotCQk8JS0tIG5vIHdoaXRlc3BhY2UgZXhpc3RzIGJlZm9yZS9hZnRlciBqc3AgdGFnIHNvIGtlZXAgaXQgdGhhdCB3YXkgLS0lPgotCQk8dGg+Q29sdW1uPGpzcDpzZXRQcm9wZXJ0eSBuYW1lPSJteW5hbWUiIHByb3BlcnR5PSJteXByb3BlcnR5IiAvPkhlYWRpbmc8L3RoPgotCQk8JS0tIHdoaXRlc3BhY2UgZXhpc3RzIGJlZm9yZS9hZnRlciBqc3AgdGFnIHNvIG5ld2xpbmVzIGFyZSBva2F5IC0tJT4KLQkJPHRoPkNvbHVtbiA8anNwOnNldFByb3BlcnR5IG5hbWU9Im15bmFtZSIgcHJvcGVydHk9Im15cHJvcGVydHkiIC8+Ci0JCUhlYWRpbmc8L3RoPgotCTwvdHI+Ci0JPHRyPgotCQk8dGQ+Um93IDE6IENvbCAxPC90ZD4KLQkJPHRkPlJvdyAxOiBDb2wgMjwvdGQ+Ci0JPC90cj4KLTwvdGFibGU+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvanNwZm9ybWF0dGluZy9XZWJDb250ZW50L2Zvcm1hdGJ1ZzEwMjQ5NV80LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL2pzcGZvcm1hdHRpbmcvV2ViQ29udGVudC9mb3JtYXRidWcxMDI0OTVfNC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzNzQ3N2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvanNwZm9ybWF0dGluZy9XZWJDb250ZW50L2Zvcm1hdGJ1ZzEwMjQ5NV80LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLTwlQCBwYWdlIGxhbmd1YWdlPSJqYXZhIiBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiCi0JcGFnZUVuY29kaW5nPSJJU08tODg1OS0xIiU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5JbnNlcnQgdGl0bGUgaGVyZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLTx0YWJsZT4KLQk8dHI+Ci0JCTwlLS0gbm8gd2hpdGVzcGFjZSBleGlzdHMgYmVmb3JlL2FmdGVyIGpzcCB0YWcgc28ga2VlcCBpdCB0aGF0IHdheSAtLSU+Ci0JCTx0aD5Db2x1bW48anNwOnNldFByb3BlcnR5IG5hbWU9Im15bmFtZSIgcHJvcGVydHk9Im15cHJvcGVydHkiLz5IZWFkaW5nPC90aD4KLQkJPCUtLSB3aGl0ZXNwYWNlIGV4aXN0cyBiZWZvcmUvYWZ0ZXIganNwIHRhZyBzbyBuZXdsaW5lcyBhcmUgb2theSAtLSU+Ci0JCTx0aD5Db2x1bW4gPGpzcDpzZXRQcm9wZXJ0eSBuYW1lPSJteW5hbWUiIHByb3BlcnR5PSJteXByb3BlcnR5Ii8+IEhlYWRpbmc8L3RoPgotCTwvdHI+Ci0JPHRyPgotCQk8dGQ+Um93IDE6IENvbCAxPC90ZD4KLQkJPHRkPlJvdyAxOiBDb2wgMjwvdGQ+Ci0JPC90cj4KLTwvdGFibGU+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvanNwZm9ybWF0dGluZy9zcmMvLmtlZXBtZSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL2pzcGZvcm1hdHRpbmcvc3JjLy5rZWVwbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvanNwZm9ybWF0dGluZy9zcmMvLmtlZXBtZQorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTg2MGJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNCI+Ci0JCTxhY2Nlc3NydWxlcz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49Im9yZy93M2MvZG9tL2Nzcy8qKi8qIi8+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJvcmcvdzNjL2RvbS9zdHlsZXNoZWV0cy8qKi8qIi8+Ci0JCTwvYWNjZXNzcnVsZXM+Ci0JPC9jbGFzc3BhdGhlbnRyeT4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWU5ZWVkOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotYmluCi1idWlsZC54bWwKLWRldi5wcm9wZXJ0aWVzCi10ZW1wLmZvbGRlcgotY3NzY29yZXRlc3RzLmphcgotamF2YUNvbXBpbGVyLmNzc2NvcmV0ZXN0cy5qYXIuYXJncwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDc5N2RiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0czwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZhNWM5MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozMiBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWVuY29kaW5nLzxwcm9qZWN0Pj1JU08tODg1OS0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRkOGI1Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotI1N1biBBcHIgMTYgMTQ6Mzc6MjEgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmNsZWFuT3V0cHV0Rm9sZGVyPWNsZWFuCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmR1cGxpY2F0ZVJlc291cmNlVGFzaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmludmFsaWRDbGFzc3BhdGg9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLnJlc291cmNlQ29weUV4Y2x1c2lvbkZpbHRlcj0qLmxhdW5jaAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2lyY3VsYXJDbGFzc3BhdGg9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aC5leGNsdXNpb25QYXR0ZXJucz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGgubXVsdGlwbGVPdXRwdXRMb2NhdGlvbnM9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS40Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kb2MuY29tbWVudC5zdXBwb3J0PWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLm1heFByb2JsZW1QZXJVbml0PTEwMAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc0RlcHJlY2F0ZWRSZWY9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NOb3RWaXNpYmxlUmVmPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzVmlzaWJpbGl0eT1wcml2YXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzT3ZlcnJpZGluZz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNWaXNpYmlsaXR5PXB1YmxpYwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc092ZXJyaWRpbmc9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXByaXZhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnNhZmVUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExhYmVsPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS4zCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5pbmNvbXBhdGlibGVKREtMZXZlbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGxldGVDbGFzc3BhdGg9ZXJyb3IKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmMmFjNjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjM5IEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotaW50ZXJuYWwuZGVmYXVsdC5jb21wbGlhbmNlPWRlZmF1bHQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTkzNjhjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjMyIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcuZW5hYmxlLnByb2plY3QucmVmYWN0b3JpbmcuaGlzdG9yeT1mYWxzZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjcyNDk1OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLSNTdW4gQXByIDE2IDE0OjA1OjI5IEVEVCAyMDA2Ci1jb21waWxlcnMucC5idWlsZD0wCi1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLmlsbGVnYWwtYXR0LXZhbHVlPTAKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0wCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0wCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy5wLnVudXNlZC1lbGVtZW50LW9yLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGY4MjQ3OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUuMAotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzO3NpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4zMDAucXVhbGlmaWVyCi1CdW5kbGUtQ2xhc3NQYXRoOiBjc3Njb3JldGVzdHMuamFyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMuQ1NTQ29yZVRlc3RzUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvci4wCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMsCi0gb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLmZvcm1hdCwKLSBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMuZm9ybWF0LnRlc3RmaWxlcywKLSBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMubW9kZWwsCi0gb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLnNvdXJjZSwKLSBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMudGVzdGZpbGVzLAotIG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy50ZXN0ZmlsZXMucmVzdWx0cywKLSBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMudXRpbAotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZSwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLAotIG9yZy5qdW5pdDtidW5kbGUtdmVyc2lvbj0iWzMuOC4wLDQuMC4wKSIKLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCi1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9hYm91dC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTlkZjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlYWM3OWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1iaW4uaW5jbHVkZXMgPSB0ZXN0LnhtbCxcCi0gICAgICAgICAgICAgICBjc3Njb3JldGVzdHMuamFyLFwKLSAgICAgICAgICAgICAgIHNyYy8sXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMKLWphcnMuY29tcGlsZS5vcmRlciA9IGNzc2NvcmV0ZXN0cy5qYXIKLXNvdXJjZS5jc3Njb3JldGVzdHMuamFyID0gc3JjLwotb3V0cHV0LmNzc2NvcmV0ZXN0cy5qYXIgPSBiaW4vCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2ZjlhODEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBwcm9wZXJ0aWVzIGZpbGUgZm9yIG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cwotQnVuZGxlLVZlbmRvci4wID0gRWNsaXBzZS5vcmcKLUJ1bmRsZS1OYW1lLjAgPSBDU1MgQ29yZSBUZXN0cyBQbHVnLWluClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvQ1NTQWxsVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL0NTU0FsbFRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhNzYyZmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvQ1NTQWxsVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzCi0gKiBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zCi0gKiBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQKLSAqIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMuZm9ybWF0LlRlc3RDbGVhbnVwUHJvY2Vzc29yQ1NTOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5mb3JtYXQuVGVzdEZvcm1hdFByb2Nlc3NvckNTUzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMubW9kZWwuQ1NTQ2hhcnNldFJ1bGVUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5tb2RlbC5DU1NGb250RmFjZVJ1bGVUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5tb2RlbC5DU1NJbXBvcnRSdWxlVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMubW9kZWwuQ1NTTWVkaWFSdWxlVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMubW9kZWwuQ1NTUGFnZVJ1bGVUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5tb2RlbC5DU1NTdHlsZVJ1bGVUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5tb2RlbC5DU1NTdHlsZVNoZWV0VGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMubW9kZWwuVGVzdENTU0RlY2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLnNvdXJjZS5DU1NTZWxlY3RvclRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLnNvdXJjZS5DU1NTb3VyY2VQYXJzZXJUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5zb3VyY2UuQ1NTVGV4dFBhcnNlclRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLnNvdXJjZS5DU1NVcmxUZXN0OwotCi0KLXB1YmxpYyBjbGFzcyBDU1NBbGxUZXN0cyBleHRlbmRzIFRlc3RTdWl0ZSB7Ci0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgVGVzdFN1aXRlKCJTU0UgTW9kZWwgQ1NTIFRlc3RzIik7Ci0KLQkJYWRkU291cmNlVGVzdHMoc3VpdGUpOwotCQlhZGRNb2RlbFRlc3RzKHN1aXRlKTsKLQotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoQ1NTQ29yZVByZWZlcmVuY2VzVGVzdC5jbGFzcyk7Ci0JCXJldHVybiBzdWl0ZTsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyB2b2lkIGFkZFNvdXJjZVRlc3RzKFRlc3RTdWl0ZSBzdWl0ZSkgewotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoQ1NTU291cmNlUGFyc2VyVGVzdC5jbGFzcyk7Ci0JCXN1aXRlLmFkZFRlc3RTdWl0ZShDU1NUZXh0UGFyc2VyVGVzdC5jbGFzcyk7Ci0JCXN1aXRlLmFkZFRlc3RTdWl0ZShDU1NTZWxlY3RvclRlc3QuY2xhc3MpOwotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoQ1NTVXJsVGVzdC5jbGFzcyk7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBhZGRNb2RlbFRlc3RzKFRlc3RTdWl0ZSBzdWl0ZSkgewotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoQ1NTU3R5bGVTaGVldFRlc3QuY2xhc3MpOwotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoQ1NTQ2hhcnNldFJ1bGVUZXN0LmNsYXNzKTsKLQkJc3VpdGUuYWRkVGVzdFN1aXRlKENTU0ltcG9ydFJ1bGVUZXN0LmNsYXNzKTsKLQkJc3VpdGUuYWRkVGVzdFN1aXRlKENTU1N0eWxlUnVsZVRlc3QuY2xhc3MpOwotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoQ1NTTWVkaWFSdWxlVGVzdC5jbGFzcyk7Ci0JCXN1aXRlLmFkZFRlc3RTdWl0ZShDU1NQYWdlUnVsZVRlc3QuY2xhc3MpOwotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoQ1NTRm9udEZhY2VSdWxlVGVzdC5jbGFzcyk7Ci0JCXN1aXRlLmFkZFRlc3RTdWl0ZShUZXN0Rm9ybWF0UHJvY2Vzc29yQ1NTLmNsYXNzKTsKLQkJc3VpdGUuYWRkVGVzdFN1aXRlKFRlc3RDbGVhbnVwUHJvY2Vzc29yQ1NTLmNsYXNzKTsKLQkJc3VpdGUuYWRkVGVzdFN1aXRlKFRlc3RDU1NEZWNsLmNsYXNzKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvQ1NTQ29yZVByZWZlcmVuY2VzVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvQ1NTQ29yZVByZWZlcmVuY2VzVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NmFkNmI4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL0NTU0NvcmVQcmVmZXJlbmNlc1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5EZWZhdWx0U2NvcGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzLklFY2xpcHNlUHJlZmVyZW5jZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzLkluc3RhbmNlU2NvcGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLkNTU0NvcmVQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLmVuY29kaW5nLkNTU0RvY3VtZW50TG9hZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5DU1NDb3JlUHJlZmVyZW5jZU5hbWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9yQ1NTOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5Db21tb25FbmNvZGluZ1ByZWZlcmVuY2VOYW1lczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuQ29udGVudEJhc2VkUHJlZmVyZW5jZUdhdGV3YXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLkNvbnRlbnRUeXBlRW5jb2RpbmdQcmVmZXJlbmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSUVuY29kZWREb2N1bWVudDsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLm9zZ2kuc2VydmljZS5wcmVmcy5QcmVmZXJlbmNlczsKLQotLyoqCi0gKiBUaGUgcHVycG9zZSBvZiB0aGlzIHRlc3QgaXMgdG8gdmVyaWZ5IHRoZSB2YWxpZGl0eSBvZiB0aGUgWE1MIFNvdXJjZSBlZGl0b3IKLSAqIHByZWZlcmVuY2VzLiBUZXN0cyBpbmNsdWRlIHNldHRpbmcvZ2V0dGluZyBwcmVmZXJlbmNlcy4KLSAqIAotICogTk9URTogVGhpcyB0ZXN0IHNob3VsZCBiZSBwcmVmb3JtZWQgb24gYSBjbGVhbiB3b3Jrc3BhY2UuIElmIHBlcmZvcm1lZCBvbgotICogYW4gZXhpc3Rpbmcgd29ya3NwYWNlLCB0aGlzIHRlc3Qgd2lsbCBtYW5pcHVsYXRlIHByZWZlcmVuY2VzIGluIHRoZQotICogd29ya3NwYWNlLCB0aG91Z2ggYXR0ZW1wdHMgd2lsbCBiZSBtYWRlIHRvIHJlc3RvcmUgb3JpZ2luYWwgdmFsdWVzIGFmdGVyCi0gKiB0ZXN0aW5nLgotICovCi1wdWJsaWMgY2xhc3MgQ1NTQ29yZVByZWZlcmVuY2VzVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQkvKioKLQkgKiBUZXN0cyBleGlzdGFuY2Ugb2YgcHJlZmVyZW5jZSB2YWx1ZXMgd2hlbiBnZXR0aW5nIHByZWZlcmVuY2UgdmFsdWVzCi0JICogdGhyb3VnaCBQbGF0Zm9ybS5nZXRQcmVmZXJlbmNlc1NlcnZpY2UoKQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RCdW5kbGVHZXRQcmVmZXJlbmNlcygpIHsKLQkJZmluYWwgU3RyaW5nIGJ1bmRsZU5hbWUgPSAib3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlIjsKLQotCQkvLyBuZWVkIHRvIHN0YXJ0IHVwIGJ1bmRsZSBmb3IgZGVmYXVsdCB2YWx1ZXMgdG8gYmUgbG9hZGVkCi0JCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoYnVuZGxlTmFtZSk7Ci0JCXRyeSB7Ci0JCQlpZiAoYnVuZGxlICE9IG51bGwpCi0JCQkJYnVuZGxlLnN0YXJ0KCk7Ci0JCQllbHNlCi0JCQkJZmFpbCgiR2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIGJlY2F1c2UgY291bGQgbm90IGZpbmQgYnVuZGxlOiAiICsgYnVuZGxlTmFtZSk7Ci0JCX0KLQkJY2F0Y2ggKEJ1bmRsZUV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCJHZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgYmVjYXVzZSBvZiBleGNlcHRpb24gc3RhcnRpbmcgYnVuZGxlOiAiICsgYnVuZGxlTmFtZSArICIgZXhjZXB0aW9uOiAiICsgZSk7Ci0JCX0KLQotCQlidW5kbGVHZXRQcmVmZXJlbmNlKGJ1bmRsZU5hbWUsIENTU0NvcmVQcmVmZXJlbmNlTmFtZXMuSU5ERU5UQVRJT05fU0laRSk7Ci0JCWJ1bmRsZUdldFByZWZlcmVuY2UoYnVuZGxlTmFtZSwgQ1NTQ29yZVByZWZlcmVuY2VOYW1lcy5MSU5FX1dJRFRIKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgYnVuZGxlR2V0UHJlZmVyZW5jZShTdHJpbmcgYnVuZGxlTmFtZSwgU3RyaW5nIHByZWZLZXkpIHsKLQkJaW50IGRlZmF1bHRWYWx1ZSA9IC0xOwotCi0JCWludCB2YWx1ZSA9IFBsYXRmb3JtLmdldFByZWZlcmVuY2VzU2VydmljZSgpLmdldEludChidW5kbGVOYW1lLCBwcmVmS2V5LCBkZWZhdWx0VmFsdWUsIG51bGwpOwotCQlhc3NlcnRUcnVlKCJHZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgdXNpbmcgUGxhdGZvcm0uZ2V0UHJlZmVyZW5jZXNTZXJ2aWNlLiBLZXk6ICIgKyBwcmVmS2V5LCBkZWZhdWx0VmFsdWUgIT0gdmFsdWUpOwotCX0KLQotCS8qKgotCSAqIFRlc3RzIGRlZmF1bHQgdmFsdWVzIG9mIHByZWZlcmVuY2VzLgotCSAqIAotCSAqIE5PVEU6IEV4cGVjdGVkIGRlZmF1bHQgdmFsdWVzIGFyZSBoYXJkLWNvZGVkLCBzbyBpZiBkZWZhdWx0IHZhbHVlcyBkbwotCSAqIGdldCBjaGFuZ2VkLCBhc3NlcnRpb25zIG5lZWQgdG8gYmUgdXBkYXRlZCBhcyB3ZWxsCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFBsdWdpbkdldERlZmF1bHRQcmVmZXJlbmNlcygpIHsKLQkJSUVjbGlwc2VQcmVmZXJlbmNlcyBub2RlID0gbmV3IERlZmF1bHRTY29wZSgpLmdldE5vZGUoQ1NTQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCkpOwotCi0JCXBsdWdpbkdldERlZmF1bHRQcmVmZXJlbmNlKG5vZGUsIENTU0NvcmVQcmVmZXJlbmNlTmFtZXMuQ0FTRV9JREVOVElGSUVSLCAiMiIpOwotCQlwbHVnaW5HZXREZWZhdWx0UHJlZmVyZW5jZShub2RlLCBDU1NDb3JlUHJlZmVyZW5jZU5hbWVzLklOREVOVEFUSU9OX0NIQVIsIENTU0NvcmVQcmVmZXJlbmNlTmFtZXMuVEFCKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgcGx1Z2luR2V0RGVmYXVsdFByZWZlcmVuY2UoSUVjbGlwc2VQcmVmZXJlbmNlcyBub2RlLCBTdHJpbmcgcHJlZktleSwgU3RyaW5nIGV4cGVjdGVkKSB7Ci0JCVN0cmluZyBkZWZhdWx0VmFsdWUgPSBMb25nLnRvU3RyaW5nKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpKTsgLy8gcmFuZG9tCi0JCS8vIHN0cmluZwotCi0JCVN0cmluZyB0aGVEZWZhdWx0VmFsdWUgPSBub2RlLmdldChwcmVmS2V5LCBkZWZhdWx0VmFsdWUpOwotCQlhc3NlcnRFcXVhbHMoIkdldCBkZWZhdWx0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIHVzaW5nIHBsdWdpbi5nZXRQcmVmZXJlbmNlU3RvcmUuIEtleTogIiArIHByZWZLZXksIGV4cGVjdGVkLCB0aGVEZWZhdWx0VmFsdWUpOwotCX0KLQotCS8qKgotCSAqIFRlc3RzIHNldHRpbmcgcHJlZmVyZW5jZSB2YWx1ZXMgYnkgc2V0dGluZyBwcmVmZXJlbmNlIHZhbHVlIHRvIGJlIGEKLQkgKiBjZXJ0YWluIHZhbHVlLCB0aGVuIGdldHRpbmcgdGhlIHByZWZlcmVuY2UgdmFsdWUgdG8gdmVyaWZ5IGl0IHdhcyBzZXQuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFBsdWdpblNldFByZWZlcmVuY2VzKCkgewotCQlJRWNsaXBzZVByZWZlcmVuY2VzIG5vZGUgPSBuZXcgSW5zdGFuY2VTY29wZSgpLmdldE5vZGUoQ1NTQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCkpOwotCi0JCXBsdWdpblNldFByZWZlcmVuY2VCb29sZWFuKG5vZGUsIENTU0NvcmVQcmVmZXJlbmNlTmFtZXMuV1JBUFBJTkdfT05FX1BFUl9MSU5FKTsKLQkJcGx1Z2luU2V0UHJlZmVyZW5jZUludChub2RlLCBDU1NDb3JlUHJlZmVyZW5jZU5hbWVzLkNBU0VfUFJPUEVSVFlfTkFNRSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHBsdWdpblNldFByZWZlcmVuY2VCb29sZWFuKElFY2xpcHNlUHJlZmVyZW5jZXMgbm9kZSwgU3RyaW5nIHByZWZLZXkpIHsKLQkJYm9vbGVhbiBvcmlnaW5hbFZhbHVlID0gZmFsc2U7Ci0JCWJvb2xlYW4gZXhwZWN0ZWRWYWx1ZSA9IHRydWU7Ci0KLQkJU3RyaW5nIG9yaWdpbmFsU3RyaW5nID0gbm9kZS5nZXQocHJlZktleSwgImJvZ3VzIik7Ci0JCWlmICghImJvZ3VzIi5lcXVhbHMob3JpZ2luYWxTdHJpbmcpKSB7Ci0JCQlvcmlnaW5hbFZhbHVlID0gQm9vbGVhbi52YWx1ZU9mKG9yaWdpbmFsU3RyaW5nKS5ib29sZWFuVmFsdWUoKTsKLQkJCWV4cGVjdGVkVmFsdWUgPSAhb3JpZ2luYWxWYWx1ZTsKLQkJfQotCQlub2RlLnB1dEJvb2xlYW4ocHJlZktleSwgZXhwZWN0ZWRWYWx1ZSk7Ci0JCWJvb2xlYW4gZm91bmRWYWx1ZSA9IG5vZGUuZ2V0Qm9vbGVhbihwcmVmS2V5LCB0cnVlKTsKLQkJYXNzZXJ0RXF1YWxzKCJTZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgdXNpbmcgcGx1Z2luLmdldFByZWZlcmVuY2VTdG9yZS4gS2V5OiAiICsgcHJlZktleSArICIgIGV4cGVjdGVkOiAiICsgZXhwZWN0ZWRWYWx1ZSArICIgZm91bmQ6ICIgKyBmb3VuZFZhbHVlLCBleHBlY3RlZFZhbHVlLCBmb3VuZFZhbHVlKTsKLQotCQkvLyBhdHRlbXB0IHRvIHJlc3RvcmUgb3JpZ2luYWwgcHJlZmVyZW5jZSB2YWx1ZQotCQlpZiAoImJvZ3VzIi5lcXVhbHMob3JpZ2luYWxTdHJpbmcpKQotCQkJbm9kZS5yZW1vdmUocHJlZktleSk7Ci0JCWVsc2UKLQkJCW5vZGUucHV0KHByZWZLZXksIG9yaWdpbmFsU3RyaW5nKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgcGx1Z2luU2V0UHJlZmVyZW5jZUludChJRWNsaXBzZVByZWZlcmVuY2VzIG5vZGUsIFN0cmluZyBwcmVmS2V5KSB7Ci0JCWludCBvcmlnaW5hbFZhbHVlID0gbm9kZS5nZXRJbnQocHJlZktleSwgLTk5OSk7Ci0JCWludCBleHBlY3RlZFZhbHVlID0gLTg4ODsKLQkJbm9kZS5wdXRJbnQocHJlZktleSwgZXhwZWN0ZWRWYWx1ZSk7Ci0JCWludCBmb3VuZFZhbHVlID0gbm9kZS5nZXRJbnQocHJlZktleSwgLTk5OSk7Ci0JCWFzc2VydEVxdWFscygiU2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIHVzaW5nIHBsdWdpbi5nZXRQcmVmZXJlbmNlU3RvcmUuIEtleTogIiArIHByZWZLZXkgKyAiICBleHBlY3RlZDogIiArIGV4cGVjdGVkVmFsdWUgKyAiIGZvdW5kOiAiICsgZm91bmRWYWx1ZSwgZXhwZWN0ZWRWYWx1ZSwgZm91bmRWYWx1ZSk7Ci0KLQkJLy8gYXR0ZW1wdCB0byByZXN0b3JlIG9yaWdpbmFsIHByZWZlcmVuY2UgdmFsdWUKLQkJaWYgKG9yaWdpbmFsVmFsdWUgPT0gLTk5OSkKLQkJCW5vZGUucmVtb3ZlKHByZWZLZXkpOwotCQllbHNlCi0JCQlub2RlLnB1dEludChwcmVmS2V5LCBvcmlnaW5hbFZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0cyBsaW5lIGRlbGltaXRlciBwcmVmZXJlbmNlcyBieSBtYWtpbmcgc3VyZSBkb2N1bWVudCBjcmVhdGVkCi0JICogZm9sbG93cyBsaW5lIGRlbGltaXRlciBwcmVmZXJlbmNlLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3REZWxpbWl0ZXJQcmVmZXJlbmNlcygpIHsKLQkJLy8gY2hlY2sgaWYgY29udGVudCB0eXBlIHByZWZlcmVuY2VzIG1hdGNoCi0JCVN0cmluZyBwcmVmZXJyZWREZWxpbWl0ZXIgPSBDb250ZW50VHlwZUVuY29kaW5nUHJlZmVyZW5jZXMuZ2V0UHJlZmVycmVkTmV3TGluZURlbGltaXRlcihDb250ZW50VHlwZUlkRm9yQ1NTLkNvbnRlbnRUeXBlSURfQ1NTKTsKLQkJUHJlZmVyZW5jZXMgcHJlZnMgPSBDb250ZW50QmFzZWRQcmVmZXJlbmNlR2F0ZXdheS5nZXRQcmVmZXJlbmNlcyhDb250ZW50VHlwZUlkRm9yQ1NTLkNvbnRlbnRUeXBlSURfQ1NTKTsKLQkJU3RyaW5nIGdhdGV3YXlEZWxpbWl0ZXIgPSBwcmVmcy5nZXQoQ29tbW9uRW5jb2RpbmdQcmVmZXJlbmNlTmFtZXMuRU5EX09GX0xJTkVfQ09ERSwgbnVsbCk7Ci0JCWFzc2VydEVxdWFscygiQ29udGVudFR5cGVFbmNvZGluZ1ByZWZlcmVuY2VzIGFuZCBDb250ZW50QmFzZWRQcmVmZXJlbmNlR2F0ZXdheSBwcmVmZXJlbmNlcyBkbyBub3QgbWF0Y2giLCBnYXRld2F5RGVsaW1pdGVyLCBwcmVmZXJyZWREZWxpbWl0ZXIpOwotCi0JCS8vIHNldCBhIHBhcnRpY3VsYXIgbGluZSBkZWxpbWl0ZXIKLQkJcHJlZnMucHV0KENvbW1vbkVuY29kaW5nUHJlZmVyZW5jZU5hbWVzLkVORF9PRl9MSU5FX0NPREUsIENvbW1vbkVuY29kaW5nUHJlZmVyZW5jZU5hbWVzLkxGKTsKLQotCQkvLyBjcmVhdGUgZG9jdW1lbnQKLQkJQ1NTRG9jdW1lbnRMb2FkZXIgbG9hZGVyID0gbmV3IENTU0RvY3VtZW50TG9hZGVyKCk7Ci0JCUlFbmNvZGVkRG9jdW1lbnQgZG9jdW1lbnQgPSBsb2FkZXIuY3JlYXRlTmV3U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCVN0cmluZyBkb2N1bWVudERlbGltaXRlciA9IGRvY3VtZW50LmdldFByZWZlcnJlZExpbmVEZWxpbWl0ZXIoKTsKLQotCQkvLyB2ZXJpZnkgZGVsaW1pdGVyIGluIGRvY3VtZW50IG1hdGNoZXMgcHJlZmVyZW5jZQotCQlhc3NlcnRFcXVhbHMoIkRlbGltaXRlciBpbiBkb2N1bWVudCBkb2VzIG5vdCBtYXRjaCBwcmVmZXJlbmNlIiwgQ29tbW9uRW5jb2RpbmdQcmVmZXJlbmNlTmFtZXMuU1RSSU5HX0xGLCBkb2N1bWVudERlbGltaXRlcik7Ci0KLQkJLy8gcmV0dXJuIHRvIG9yaWdpbmFsIHByZWZlcmVuY2UKLQkJcHJlZnMucmVtb3ZlKENvbW1vbkVuY29kaW5nUHJlZmVyZW5jZU5hbWVzLkVORF9PRl9MSU5FX0NPREUpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL0NTU0NvcmVUZXN0U3VpdGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL0NTU0NvcmVUZXN0U3VpdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWRiNDdhMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9DU1NDb3JlVGVzdFN1aXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLQotLyoqCi0gKiBAYXV0aG9yIHBhdmVyeQotICovCi1wdWJsaWMgY2xhc3MgQ1NTQ29yZVRlc3RTdWl0ZSBleHRlbmRzIFRlc3RTdWl0ZSB7Ci0KLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgQ1NTQ29yZVRlc3RTdWl0ZSgpOwotCX0KLQotCXB1YmxpYyBDU1NDb3JlVGVzdFN1aXRlKCkgewotCQlzdXBlcigiQ1NTIENvcmUgVGVzdHMiKTsKLQotCQlhZGRUZXN0KENTU0FsbFRlc3RzLnN1aXRlKCkpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9DU1NDb3JlVGVzdHNQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL0NTU0NvcmVUZXN0c1BsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOWRjNTE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL0NTU0NvcmVUZXN0c1BsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci0KLS8qKgotICogVGhlIG1haW4gcGx1Z2luIGNsYXNzIHRvIGJlIHVzZWQgaW4gdGhlIGRlc2t0b3AuCi0gKi8KLXB1YmxpYyBjbGFzcyBDU1NDb3JlVGVzdHNQbHVnaW4gZXh0ZW5kcyBQbHVnaW4gewotCS8vIFRoZSBzaGFyZWQgaW5zdGFuY2UuCi0JcHJpdmF0ZSBzdGF0aWMgQ1NTQ29yZVRlc3RzUGx1Z2luIHBsdWdpbjsKLQkvLyBSZXNvdXJjZSBidW5kbGUuCi0JcHJpdmF0ZSBSZXNvdXJjZUJ1bmRsZSByZXNvdXJjZUJ1bmRsZTsKLQotCS8qKgotCSAqIFRoZSBjb25zdHJ1Y3Rvci4KLQkgKi8KLQlwdWJsaWMgQ1NTQ29yZVRlc3RzUGx1Z2luKCkgewotCQlzdXBlcigpOwotCQlwbHVnaW4gPSB0aGlzOwotCQl0cnkgewotCQkJcmVzb3VyY2VCdW5kbGUgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoIm9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5DU1NNb2RlbFRlc3RzUGx1Z2luUmVzb3VyY2VzIik7Ci0JCX0KLQkJY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiB4KSB7Ci0JCQlyZXNvdXJjZUJ1bmRsZSA9IG51bGw7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBDU1NDb3JlVGVzdHNQbHVnaW4gZ2V0RGVmYXVsdCgpIHsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzdHJpbmcgZnJvbSB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLCBvciAna2V5JyBpZiBub3QKLQkgKiBmb3VuZC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRSZXNvdXJjZVN0cmluZyhTdHJpbmcga2V5KSB7Ci0JCVJlc291cmNlQnVuZGxlIGJ1bmRsZSA9IENTU0NvcmVUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UmVzb3VyY2VCdW5kbGUoKTsKLQkJdHJ5IHsKLQkJCXJldHVybiAoYnVuZGxlICE9IG51bGwpID8gYnVuZGxlLmdldFN0cmluZyhrZXkpIDoga2V5OwotCQl9Ci0JCWNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgewotCQkJcmV0dXJuIGtleTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwKLQkgKi8KLQlwdWJsaWMgUmVzb3VyY2VCdW5kbGUgZ2V0UmVzb3VyY2VCdW5kbGUoKSB7Ci0JCXJldHVybiByZXNvdXJjZUJ1bmRsZTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L1Rlc3RDbGVhbnVwUHJvY2Vzc29yQ1NTLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvVGVzdENsZWFudXBQcm9jZXNzb3JDU1MuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWU1M2M3Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvVGVzdENsZWFudXBQcm9jZXNzb3JDU1MuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5mb3JtYXQ7Ci0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5DU1NDb3JlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5jbGVhbnVwLkNTU0NsZWFudXBTdHJhdGVneTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwuY2xlYW51cC5DU1NDbGVhbnVwU3RyYXRlZ3lJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5jbGVhbnVwLkNsZWFudXBQcm9jZXNzb3JDU1M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkNTU0NvcmVQcmVmZXJlbmNlTmFtZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLnV0aWwuU3RyaW5nQ29tcGFyZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0Q2xlYW51cFByb2Nlc3NvckNTUyBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVVRGXzggPSAiVVRGLTgiOwotCXByaXZhdGUgU3RyaW5nQ29tcGFyZVV0aWwgZlN0cmluZ0NvbXBhcmVVdGlsOwotCXByaXZhdGUgQ2xlYW51cFByb2Nlc3NvckNTUyBmQ2xlYW51cFByb2Nlc3NvcjsKLQotCXByaXZhdGUgYm9vbGVhbiBmT2xkQ2xlYXJCbGFua0xpbmVzUHJlZjsKLQlwcml2YXRlIGludCBmT2xkTWF4TGluZVdpZHRoUHJlZjsKLQlwcml2YXRlIFN0cmluZyBmT2xkSW5kZW50YXRpb25DaGFyUHJlZjsKLQlwcml2YXRlIGludCBmT2xkSW5kZW50YXRpb25TaXplUHJlZjsKLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vIHNldCB1cCBwcmVmZXJlbmNlcwotCQlQcmVmZXJlbmNlcyBwcmVmcyA9IENTU0NvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFBsdWdpblByZWZlcmVuY2VzKCk7Ci0JCWZPbGRDbGVhckJsYW5rTGluZXNQcmVmID0gcHJlZnMuZ2V0Qm9vbGVhbihDU1NDb3JlUHJlZmVyZW5jZU5hbWVzLkNMRUFSX0FMTF9CTEFOS19MSU5FUyk7Ci0JCWZPbGRNYXhMaW5lV2lkdGhQcmVmID0gcHJlZnMuZ2V0SW50KENTU0NvcmVQcmVmZXJlbmNlTmFtZXMuTElORV9XSURUSCk7Ci0JCWZPbGRJbmRlbnRhdGlvbkNoYXJQcmVmID0gcHJlZnMuZ2V0U3RyaW5nKENTU0NvcmVQcmVmZXJlbmNlTmFtZXMuSU5ERU5UQVRJT05fQ0hBUik7Ci0JCWZPbGRJbmRlbnRhdGlvblNpemVQcmVmID0gcHJlZnMuZ2V0SW50KENTU0NvcmVQcmVmZXJlbmNlTmFtZXMuSU5ERU5UQVRJT05fU0laRSk7Ci0KLQkJcHJlZnMuc2V0VmFsdWUoQ1NTQ29yZVByZWZlcmVuY2VOYW1lcy5DTEVBUl9BTExfQkxBTktfTElORVMsIGZhbHNlKTsKLQkJcHJlZnMuc2V0VmFsdWUoQ1NTQ29yZVByZWZlcmVuY2VOYW1lcy5MSU5FX1dJRFRILCA3Mik7Ci0JCXByZWZzLnNldFZhbHVlKENTU0NvcmVQcmVmZXJlbmNlTmFtZXMuSU5ERU5UQVRJT05fQ0hBUiwgQ1NTQ29yZVByZWZlcmVuY2VOYW1lcy5UQUIpOwotCQlwcmVmcy5zZXRWYWx1ZShDU1NDb3JlUHJlZmVyZW5jZU5hbWVzLklOREVOVEFUSU9OX1NJWkUsIDEpOwotCi0JCWZDbGVhbnVwUHJvY2Vzc29yID0gbmV3IENsZWFudXBQcm9jZXNzb3JDU1MoKTsKLQkJZlN0cmluZ0NvbXBhcmVVdGlsID0gbmV3IFN0cmluZ0NvbXBhcmVVdGlsKCk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLy8gcmVzdG9yZSBvbGQgcHJlZmVyZW5jZXMKLQkJUHJlZmVyZW5jZXMgcHJlZnMgPSBDU1NDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpOwotCQlwcmVmcy5zZXRWYWx1ZShDU1NDb3JlUHJlZmVyZW5jZU5hbWVzLkNMRUFSX0FMTF9CTEFOS19MSU5FUywgZk9sZENsZWFyQmxhbmtMaW5lc1ByZWYpOwotCQlwcmVmcy5zZXRWYWx1ZShDU1NDb3JlUHJlZmVyZW5jZU5hbWVzLkxJTkVfV0lEVEgsIGZPbGRNYXhMaW5lV2lkdGhQcmVmKTsKLQkJcHJlZnMuc2V0VmFsdWUoQ1NTQ29yZVByZWZlcmVuY2VOYW1lcy5JTkRFTlRBVElPTl9DSEFSLCBmT2xkSW5kZW50YXRpb25DaGFyUHJlZik7Ci0JCXByZWZzLnNldFZhbHVlKENTU0NvcmVQcmVmZXJlbmNlTmFtZXMuSU5ERU5UQVRJT05fU0laRSwgZk9sZEluZGVudGF0aW9uU2l6ZVByZWYpOwotCX0KLQotCS8qKgotCSAqIG11c3QgcmVsZWFzZSBtb2RlbCAoZnJvbSBlZGl0KSBhZnRlcgotCSAqIAotCSAqIEBwYXJhbSBmaWxlbmFtZQotCSAqICAgICAgICAgICAgcmVsYXRpdmUgdG8gdGhpcyBjbGFzcyAoVGVzdENsZWFudXBQcm9jZXNzb3JDU1MpCi0JICovCi0JcHJpdmF0ZSBJU3RydWN0dXJlZE1vZGVsIGdldE1vZGVsRm9yRWRpdChmaW5hbCBTdHJpbmcgZmlsZW5hbWUpIHsKLQotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJCUlucHV0U3RyZWFtIGluU3RyZWFtID0gZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKGZpbGVuYW1lKTsKLQkJCWlmIChpblN0cmVhbSA9PSBudWxsKQotCQkJCXRocm93IG5ldyBGaWxlTm90Rm91bmRFeGNlcHRpb24oIkNhbid0IGZpbGUgcmVzb3VyY2Ugc3RyZWFtICIgKyBmaWxlbmFtZSk7Ci0JCQlmaW5hbCBTdHJpbmcgYmFzZUZpbGUgPSBnZXRDbGFzcygpLmdldFJlc291cmNlKGZpbGVuYW1lKS50b1N0cmluZygpOwotCQkJbW9kZWwgPSBtb2RlbE1hbmFnZXIuZ2V0TW9kZWxGb3JFZGl0KGJhc2VGaWxlLCBpblN0cmVhbSwgbnVsbCk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGV4KSB7Ci0JCQlleC5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQlyZXR1cm4gbW9kZWw7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNsZWFudXBBbmRBc3NlcnRFcXVhbHMoU3RyaW5nIGJlZm9yZVBhdGgsIFN0cmluZyBhZnRlclBhdGgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgYmVmb3JlTW9kZWwgPSBudWxsLCBhZnRlck1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCWJlZm9yZU1vZGVsID0gZ2V0TW9kZWxGb3JFZGl0KGJlZm9yZVBhdGgpOwotCQkJYXNzZXJ0Tm90TnVsbCgiY291bGQgbm90IHJldHJpZXZlIHN0cnVjdHVyZWQgbW9kZWwgZm9yIDogIiArIGJlZm9yZVBhdGgsIGJlZm9yZU1vZGVsKTsKLQotCQkJYWZ0ZXJNb2RlbCA9IGdldE1vZGVsRm9yRWRpdChhZnRlclBhdGgpOwotCQkJYXNzZXJ0Tm90TnVsbCgiY291bGQgbm90IHJldHJpZXZlIHN0cnVjdHVyZWQgbW9kZWwgZm9yIDogIiArIGFmdGVyUGF0aCwgYWZ0ZXJNb2RlbCk7Ci0KLQkJCWZDbGVhbnVwUHJvY2Vzc29yLmNsZWFudXBNb2RlbChiZWZvcmVNb2RlbCk7Ci0KLQkJCUJ5dGVBcnJheU91dHB1dFN0cmVhbSBjbGVhbmVkdXBCeXRlcyA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKLQkJCWJlZm9yZU1vZGVsLnNhdmUoY2xlYW5lZHVwQnl0ZXMpOyAvLyAiYmVmb3JlTW9kZWwiIHNob3VsZCBub3cgYmUKLQkJCS8vIGFmdGVyIHRoZSBjbGVhbnVwIHByb2Nlc3NvcgotCi0JCQlCeXRlQXJyYXlPdXRwdXRTdHJlYW0gYWZ0ZXJCeXRlcyA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKLQkJCWFmdGVyTW9kZWwuc2F2ZShhZnRlckJ5dGVzKTsKLQotCQkJU3RyaW5nIGNsZWFuZWR1cENvbnRlbnRzID0gbmV3IFN0cmluZyhhZnRlckJ5dGVzLnRvQnl0ZUFycmF5KCksIFVURl84KTsKLQkJCVN0cmluZyBleHBlY3RlZENvbnRlbnRzID0gbmV3IFN0cmluZyhjbGVhbmVkdXBCeXRlcy50b0J5dGVBcnJheSgpLCBVVEZfOCk7Ci0JCQlhc3NlcnRUcnVlKCJDbGVhbnVwIGRvY3VtZW50IGRpZmZlcnMgZnJvbSB0aGUgZXhwZWN0ZWQiLCBmU3RyaW5nQ29tcGFyZVV0aWwuZXF1YWxzSWdub3JlTGluZVNlcGVyYXRvcihjbGVhbmVkdXBDb250ZW50cywgZXhwZWN0ZWRDb250ZW50cykpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKGJlZm9yZU1vZGVsICE9IG51bGwpCi0JCQkJYmVmb3JlTW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQlpZiAoYWZ0ZXJNb2RlbCAhPSBudWxsKQotCQkJCWFmdGVyTW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QlVHMTY2OTA5dXJsQ2FzZUNsZWFudXAoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQkvLyBzZXQgdXAgY2xlYW51cCBwcmVmZXJlbmNlcyBmb3IgdGhpcyB0ZXN0Ci0JCUNTU0NsZWFudXBTdHJhdGVneSBjdXJyZW50U3RyYXRlZ3kgPSBDU1NDbGVhbnVwU3RyYXRlZ3lJbXBsLmdldEluc3RhbmNlKCk7Ci0JCXNob3J0IG9sZENhc2VJZGVudGlmaWVyID0gY3VycmVudFN0cmF0ZWd5LmdldElkZW50Q2FzZSgpOwotCQlzaG9ydCBvbGRDYXNlUHJvcGVydHlOYW1lID0gY3VycmVudFN0cmF0ZWd5LmdldFByb3BOYW1lQ2FzZSgpOwotCQlzaG9ydCBvbGRDYXNlUHJvcGVydHlWYWx1ZSA9IGN1cnJlbnRTdHJhdGVneS5nZXRQcm9wVmFsdWVDYXNlKCk7Ci0JCXNob3J0IG9sZENhc2VTZWxlY3RvciA9IGN1cnJlbnRTdHJhdGVneS5nZXRTZWxlY3RvclRhZ0Nhc2UoKTsKLQkJYm9vbGVhbiBvbGRGb3JtYXRTb3VyY2UgPSBjdXJyZW50U3RyYXRlZ3kuaXNGb3JtYXRTb3VyY2UoKTsKLQkJYm9vbGVhbiBvbGRGb3JtYXRRdW90ZSA9IGN1cnJlbnRTdHJhdGVneS5pc1F1b3RlVmFsdWVzKCk7Ci0KLQkJY3VycmVudFN0cmF0ZWd5LnNldElkZW50Q2FzZShDU1NDbGVhbnVwU3RyYXRlZ3kuTE9XRVIpOwotCQljdXJyZW50U3RyYXRlZ3kuc2V0UHJvcE5hbWVDYXNlKENTU0NsZWFudXBTdHJhdGVneS5MT1dFUik7Ci0JCWN1cnJlbnRTdHJhdGVneS5zZXRQcm9wVmFsdWVDYXNlKENTU0NsZWFudXBTdHJhdGVneS5MT1dFUik7Ci0JCWN1cnJlbnRTdHJhdGVneS5zZXRTZWxlY3RvclRhZ0Nhc2UoQ1NTQ2xlYW51cFN0cmF0ZWd5LkxPV0VSKTsKLQkJY3VycmVudFN0cmF0ZWd5LnNldEZvcm1hdFNvdXJjZSh0cnVlKTsKLQkJY3VycmVudFN0cmF0ZWd5LnNldFF1b3RlVmFsdWVzKGZhbHNlKTsKLQotCQljbGVhbnVwQW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0ZmlsZXMvYnVnMTY2OTA5LXVybGNhc2UuY3NzIiwgInRlc3RmaWxlcy9idWcxNjY5MDktdXJsY2FzZS1jbGVhbmVkLmNzcyIpOwotCi0JCWN1cnJlbnRTdHJhdGVneS5zZXRJZGVudENhc2Uob2xkQ2FzZUlkZW50aWZpZXIpOwotCQljdXJyZW50U3RyYXRlZ3kuc2V0UHJvcE5hbWVDYXNlKG9sZENhc2VQcm9wZXJ0eU5hbWUpOwotCQljdXJyZW50U3RyYXRlZ3kuc2V0UHJvcFZhbHVlQ2FzZShvbGRDYXNlUHJvcGVydHlWYWx1ZSk7Ci0JCWN1cnJlbnRTdHJhdGVneS5zZXRTZWxlY3RvclRhZ0Nhc2Uob2xkQ2FzZVNlbGVjdG9yKTsKLQkJY3VycmVudFN0cmF0ZWd5LnNldEZvcm1hdFNvdXJjZShvbGRGb3JtYXRTb3VyY2UpOwotCQljdXJyZW50U3RyYXRlZ3kuc2V0UXVvdGVWYWx1ZXMob2xkRm9ybWF0UXVvdGUpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0QnVnMjE4OTkzTm9Gb3JtYXRDbGVhbnVwKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJLy8gc2V0IHVwIGNsZWFudXAgcHJlZmVyZW5jZXMgZm9yIHRoaXMgdGVzdAotCQlDU1NDbGVhbnVwU3RyYXRlZ3kgY3VycmVudFN0cmF0ZWd5ID0gQ1NTQ2xlYW51cFN0cmF0ZWd5SW1wbC5nZXRJbnN0YW5jZSgpOwotCQlzaG9ydCBvbGRDYXNlSWRlbnRpZmllciA9IGN1cnJlbnRTdHJhdGVneS5nZXRJZGVudENhc2UoKTsKLQkJc2hvcnQgb2xkQ2FzZVByb3BlcnR5TmFtZSA9IGN1cnJlbnRTdHJhdGVneS5nZXRQcm9wTmFtZUNhc2UoKTsKLQkJc2hvcnQgb2xkQ2FzZVByb3BlcnR5VmFsdWUgPSBjdXJyZW50U3RyYXRlZ3kuZ2V0UHJvcFZhbHVlQ2FzZSgpOwotCQlzaG9ydCBvbGRDYXNlU2VsZWN0b3IgPSBjdXJyZW50U3RyYXRlZ3kuZ2V0U2VsZWN0b3JUYWdDYXNlKCk7Ci0JCWJvb2xlYW4gb2xkRm9ybWF0U291cmNlID0gY3VycmVudFN0cmF0ZWd5LmlzRm9ybWF0U291cmNlKCk7Ci0JCWJvb2xlYW4gb2xkRm9ybWF0UXVvdGUgPSBjdXJyZW50U3RyYXRlZ3kuaXNRdW90ZVZhbHVlcygpOwotCi0JCWN1cnJlbnRTdHJhdGVneS5zZXRJZGVudENhc2UoQ1NTQ2xlYW51cFN0cmF0ZWd5LkxPV0VSKTsKLQkJY3VycmVudFN0cmF0ZWd5LnNldFByb3BOYW1lQ2FzZShDU1NDbGVhbnVwU3RyYXRlZ3kuTE9XRVIpOwotCQljdXJyZW50U3RyYXRlZ3kuc2V0UHJvcFZhbHVlQ2FzZShDU1NDbGVhbnVwU3RyYXRlZ3kuTE9XRVIpOwotCQljdXJyZW50U3RyYXRlZ3kuc2V0U2VsZWN0b3JUYWdDYXNlKENTU0NsZWFudXBTdHJhdGVneS5MT1dFUik7Ci0JCWN1cnJlbnRTdHJhdGVneS5zZXRGb3JtYXRTb3VyY2UoZmFsc2UpOwotCQljdXJyZW50U3RyYXRlZ3kuc2V0UXVvdGVWYWx1ZXMoZmFsc2UpOwotCi0JCWNsZWFudXBBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy9idWcyMTg5OTMtbm9mb3JtYXQuY3NzIiwgInRlc3RmaWxlcy9idWcyMTg5OTMtbm9mb3JtYXQtY2xlYW5lZC5jc3MiKTsKLQotCQljdXJyZW50U3RyYXRlZ3kuc2V0SWRlbnRDYXNlKG9sZENhc2VJZGVudGlmaWVyKTsKLQkJY3VycmVudFN0cmF0ZWd5LnNldFByb3BOYW1lQ2FzZShvbGRDYXNlUHJvcGVydHlOYW1lKTsKLQkJY3VycmVudFN0cmF0ZWd5LnNldFByb3BWYWx1ZUNhc2Uob2xkQ2FzZVByb3BlcnR5VmFsdWUpOwotCQljdXJyZW50U3RyYXRlZ3kuc2V0U2VsZWN0b3JUYWdDYXNlKG9sZENhc2VTZWxlY3Rvcik7Ci0JCWN1cnJlbnRTdHJhdGVneS5zZXRGb3JtYXRTb3VyY2Uob2xkRm9ybWF0U291cmNlKTsKLQkJY3VycmVudFN0cmF0ZWd5LnNldFF1b3RlVmFsdWVzKG9sZEZvcm1hdFF1b3RlKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvVGVzdEZvcm1hdFByb2Nlc3NvckNTUy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L1Rlc3RGb3JtYXRQcm9jZXNzb3JDU1MuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzk5Zjc3NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvVGVzdEZvcm1hdFByb2Nlc3NvckNTUy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTYwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLmZvcm1hdDsKLQotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUHJlZmVyZW5jZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLkNTU0NvcmVQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLmZvcm1hdC5Gb3JtYXRQcm9jZXNzb3JDU1M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkNTU0NvcmVQcmVmZXJlbmNlTmFtZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLnV0aWwuU3RyaW5nQ29tcGFyZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0Rm9ybWF0UHJvY2Vzc29yQ1NTIGV4dGVuZHMgVGVzdENhc2UgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBVVEZfOCA9ICJVVEYtOCI7Ci0JcHJpdmF0ZSBTdHJpbmdDb21wYXJlVXRpbCBmU3RyaW5nQ29tcGFyZVV0aWw7Ci0JcHJpdmF0ZSBGb3JtYXRQcm9jZXNzb3JDU1MgZm9ybWF0UHJvY2Vzc29yOwotCi0JcHJpdmF0ZSBib29sZWFuIGZPbGRDbGVhckJsYW5rTGluZXNQcmVmOwotCXByaXZhdGUgaW50IGZPbGRNYXhMaW5lV2lkdGhQcmVmOwotCXByaXZhdGUgU3RyaW5nIGZPbGRJbmRlbnRhdGlvbkNoYXJQcmVmOwotCXByaXZhdGUgaW50IGZPbGRJbmRlbnRhdGlvblNpemVQcmVmOwotCi0JcHVibGljIFRlc3RGb3JtYXRQcm9jZXNzb3JDU1MoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLy8gc2V0IHVwIHByZWZlcmVuY2VzCi0JCVByZWZlcmVuY2VzIHByZWZzID0gQ1NTQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKTsKLQkJZk9sZENsZWFyQmxhbmtMaW5lc1ByZWYgPSBwcmVmcy5nZXRCb29sZWFuKENTU0NvcmVQcmVmZXJlbmNlTmFtZXMuQ0xFQVJfQUxMX0JMQU5LX0xJTkVTKTsKLQkJZk9sZE1heExpbmVXaWR0aFByZWYgPSBwcmVmcy5nZXRJbnQoQ1NTQ29yZVByZWZlcmVuY2VOYW1lcy5MSU5FX1dJRFRIKTsKLQkJZk9sZEluZGVudGF0aW9uQ2hhclByZWYgPSBwcmVmcy5nZXRTdHJpbmcoQ1NTQ29yZVByZWZlcmVuY2VOYW1lcy5JTkRFTlRBVElPTl9DSEFSKTsKLQkJZk9sZEluZGVudGF0aW9uU2l6ZVByZWYgPSBwcmVmcy5nZXRJbnQoQ1NTQ29yZVByZWZlcmVuY2VOYW1lcy5JTkRFTlRBVElPTl9TSVpFKTsKLQotCQlwcmVmcy5zZXRWYWx1ZShDU1NDb3JlUHJlZmVyZW5jZU5hbWVzLkNMRUFSX0FMTF9CTEFOS19MSU5FUywgZmFsc2UpOwotCQlwcmVmcy5zZXRWYWx1ZShDU1NDb3JlUHJlZmVyZW5jZU5hbWVzLkxJTkVfV0lEVEgsIDcyKTsKLQkJcHJlZnMuc2V0VmFsdWUoQ1NTQ29yZVByZWZlcmVuY2VOYW1lcy5JTkRFTlRBVElPTl9DSEFSLCBDU1NDb3JlUHJlZmVyZW5jZU5hbWVzLlRBQik7Ci0JCXByZWZzLnNldFZhbHVlKENTU0NvcmVQcmVmZXJlbmNlTmFtZXMuSU5ERU5UQVRJT05fU0laRSwgMSk7Ci0KLQkJZm9ybWF0UHJvY2Vzc29yID0gbmV3IEZvcm1hdFByb2Nlc3NvckNTUygpOwotCQlmU3RyaW5nQ29tcGFyZVV0aWwgPSBuZXcgU3RyaW5nQ29tcGFyZVV0aWwoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyByZXN0b3JlIG9sZCBwcmVmZXJlbmNlcwotCQlQcmVmZXJlbmNlcyBwcmVmcyA9IENTU0NvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFBsdWdpblByZWZlcmVuY2VzKCk7Ci0JCXByZWZzLnNldFZhbHVlKENTU0NvcmVQcmVmZXJlbmNlTmFtZXMuQ0xFQVJfQUxMX0JMQU5LX0xJTkVTLCBmT2xkQ2xlYXJCbGFua0xpbmVzUHJlZik7Ci0JCXByZWZzLnNldFZhbHVlKENTU0NvcmVQcmVmZXJlbmNlTmFtZXMuTElORV9XSURUSCwgZk9sZE1heExpbmVXaWR0aFByZWYpOwotCQlwcmVmcy5zZXRWYWx1ZShDU1NDb3JlUHJlZmVyZW5jZU5hbWVzLklOREVOVEFUSU9OX0NIQVIsIGZPbGRJbmRlbnRhdGlvbkNoYXJQcmVmKTsKLQkJcHJlZnMuc2V0VmFsdWUoQ1NTQ29yZVByZWZlcmVuY2VOYW1lcy5JTkRFTlRBVElPTl9TSVpFLCBmT2xkSW5kZW50YXRpb25TaXplUHJlZik7Ci0JfQotCi0JLyoqCi0JICogbXVzdCByZWxlYXNlIG1vZGVsIChmcm9tIGVkaXQpIGFmdGVyCi0JICogCi0JICogQHBhcmFtIGZpbGVuYW1lCi0JICogICAgICAgICAgICByZWxhdGl2ZSB0byB0aGlzIGNsYXNzIChUZXN0Rm9ybWF0UHJvY2Vzc29yQ1NTKQotCSAqLwotCXByaXZhdGUgSVN0cnVjdHVyZWRNb2RlbCBnZXRNb2RlbEZvckVkaXQoZmluYWwgU3RyaW5nIGZpbGVuYW1lKSB7Ci0KLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCQlJbnB1dFN0cmVhbSBpblN0cmVhbSA9IGdldENsYXNzKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbShmaWxlbmFtZSk7Ci0JCQlpZiAoaW5TdHJlYW0gPT0gbnVsbCkKLQkJCQl0aHJvdyBuZXcgRmlsZU5vdEZvdW5kRXhjZXB0aW9uKCJDYW4ndCBmaWxlIHJlc291cmNlIHN0cmVhbSAiICsgZmlsZW5hbWUpOwotCQkJZmluYWwgU3RyaW5nIGJhc2VGaWxlID0gZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZShmaWxlbmFtZSkudG9TdHJpbmcoKTsKLQkJCW1vZGVsID0gbW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yRWRpdChiYXNlRmlsZSwgaW5TdHJlYW0sIG51bGwpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBleCkgewotCQkJZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJcmV0dXJuIG1vZGVsOwotCX0KLQotCXByaXZhdGUgdm9pZCBmb3JtYXRBbmRBc3NlcnRFcXVhbHMoU3RyaW5nIGJlZm9yZVBhdGgsIFN0cmluZyBhZnRlclBhdGgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgYmVmb3JlTW9kZWwgPSBudWxsLCBhZnRlck1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCWJlZm9yZU1vZGVsID0gZ2V0TW9kZWxGb3JFZGl0KGJlZm9yZVBhdGgpOwotCQkJYXNzZXJ0Tm90TnVsbCgiY291bGQgbm90IHJldHJpZXZlIHN0cnVjdHVyZWQgbW9kZWwgZm9yIDogIiArIGJlZm9yZVBhdGgsIGJlZm9yZU1vZGVsKTsKLQotCQkJYWZ0ZXJNb2RlbCA9IGdldE1vZGVsRm9yRWRpdChhZnRlclBhdGgpOwotCQkJYXNzZXJ0Tm90TnVsbCgiY291bGQgbm90IHJldHJpZXZlIHN0cnVjdHVyZWQgbW9kZWwgZm9yIDogIiArIGFmdGVyUGF0aCwgYWZ0ZXJNb2RlbCk7Ci0KLQkJCWZvcm1hdFByb2Nlc3Nvci5mb3JtYXRNb2RlbChiZWZvcmVNb2RlbCk7Ci0KLQkJCUJ5dGVBcnJheU91dHB1dFN0cmVhbSBmb3JtYXR0ZWRCeXRlcyA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKLQkJCWJlZm9yZU1vZGVsLnNhdmUoZm9ybWF0dGVkQnl0ZXMpOyAvLyAiYmVmb3JlTW9kZWwiIHNob3VsZCBub3cgYmUKLQkJCS8vIGFmdGVyIHRoZSBmb3JtYXR0ZXIKLQotCQkJQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGFmdGVyQnl0ZXMgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7Ci0JCQlhZnRlck1vZGVsLnNhdmUoYWZ0ZXJCeXRlcyk7Ci0KLQkJCVN0cmluZyBmb3JtYXR0ZWRDb250ZW50cyA9IG5ldyBTdHJpbmcoYWZ0ZXJCeXRlcy50b0J5dGVBcnJheSgpLCBVVEZfOCk7Ci0JCQlTdHJpbmcgZXhwZWN0ZWRDb250ZW50cyA9IG5ldyBTdHJpbmcoZm9ybWF0dGVkQnl0ZXMudG9CeXRlQXJyYXkoKSwgVVRGXzgpOwotCQkJYXNzZXJ0VHJ1ZSgiRm9ybWF0dGVkIGRvY3VtZW50IGRpZmZlcnMgZnJvbSB0aGUgZXhwZWN0ZWQiLCBmU3RyaW5nQ29tcGFyZVV0aWwuZXF1YWxzSWdub3JlTGluZVNlcGVyYXRvcihmb3JtYXR0ZWRDb250ZW50cywgZXhwZWN0ZWRDb250ZW50cykpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKGJlZm9yZU1vZGVsICE9IG51bGwpCi0JCQkJYmVmb3JlTW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQlpZiAoYWZ0ZXJNb2RlbCAhPSBudWxsKQotCQkJCWFmdGVyTW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QlVHNzM5OTBTZWxlY3RvckZvcm1hdCgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL0JVRzczOTkwX3NlbGVjdG9yX3VuZm9ybWF0dGVkLmNzcyIsICJ0ZXN0ZmlsZXMvQlVHNzM5OTBfc2VsZWN0b3JfZm9ybWF0dGVkLmNzcyIpOwotCX0KLQotCS8qKgotCSAqIFRlc3RzIGNhc2Ugd2hlbiBmb3JtYXQgd291bGQgaW5jb3JyZWN0bHkgYWRkIGV4dHJhIHNlbWljb2xvbnMuCi0JICogCi0JICogQHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RCVUcxMTE1NjlleHRyYVNlbWljb2xvbkZvcm1hdCgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL2J1ZzExMTU2OS1leHRyYXNlbWljb2xvbi5jc3MiLCAidGVzdGZpbGVzL2J1ZzExMTU2OS1leHRyYXNlbWljb2xvbi1mb3JtYXR0ZWQuY3NzIik7Ci0JfQotCi0JLyoqCi0JICogVGVzdHMgY2FzZSB3aGVuIGZvcm1hdCB3b3VsZCBpbmNvcnJlY3RseSBhZGQgc3BhY2UgYmV0d2VlbiBzZWxlY3RvciBhbmQKLQkgKiBhdHRyaWJ1dGUgc2VsZWN0b3JzIDxjb2RlPmlucHV0W3R5cGU9ImhpZGRlbiJdPC9jb2RlPiB3b3VsZCBiZQotCSAqIHdyb25nbHkgZm9ybWF0dGVkIGFzPGNvZGU+aW5wdXQgW3R5cGU9ImhpZGRlbiJdPC9jb2RlPiBpbnN0ZWFkIG9mCi0JICogYmVpbmcgbGVmdCBhbG9uZS4KLQkgKiAKLQkgKiBAdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24KLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCi0JICogQHRocm93cyBDb3JlRXhjZXB0aW9uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEJVRzE0NjE5OGF0dHJpYnV0ZVNwZWNpZmllckZvcm1hdCgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL2J1ZzE0NjE5OC1hdHRyaWJ1dGVzcGVjaWZpZXIuY3NzIiwgInRlc3RmaWxlcy9idWcxNDYxOTgtYXR0cmlidXRlc3BlY2lmaWVyLWZvcm1hdHRlZC5jc3MiKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEJVRzExMDUzOW11bHRpcGxlQ2xhc3NGb3JtYXQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy9idWcxMTA1MzktbXVsdGlwbGVjbGFzcy5jc3MiLCAidGVzdGZpbGVzL2J1ZzExMDUzOS1tdWx0aXBsZWNsYXNzLWZvcm1hdHRlZC5jc3MiKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEJVRzI0ODQ2NWNvbWJpbmVkUHNldWRvQ2xhc3MoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy9idWcyNDg0NjUtY29tYmluZWQtcHNldWRvLWNsYXNzZXMuY3NzIiwgInRlc3RmaWxlcy9idWcyNDg0NjUtY29tYmluZWQtcHNldWRvLWNsYXNzZXMtZm10LmNzcyIpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvQlVHNzM5OTBfc2VsZWN0b3JfZm9ybWF0dGVkLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvQlVHNzM5OTBfc2VsZWN0b3JfZm9ybWF0dGVkLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmRhNmZmNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL0JVRzczOTkwX3NlbGVjdG9yX2Zvcm1hdHRlZC5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi0vKiBDbGFzcyBhcyBzZWxlY3RvciAqLw0KLUgxLnBhc3RvcmFsIHsNCi0JY29sb3I6ICMwMEZGMDANCi19DQotDQotLyogSUQgYXMgc2VsZWN0b3IgKi8NCi0jejk4eSB7DQotCWxldHRlci1zcGFjaW5nOiAwLjNlbQ0KLX0NCi0NCi1IMSN6OTh5IHsNCi0JbGV0dGVyLXNwYWNpbmc6IDAuNWVtDQotfQ0KLQ0KLS8qIENvbnRleHR1YWwgc2VsZWN0b3JzICovDQotRElWIFAgew0KLQlmb250OiBzbWFsbCBzYW5zLXNlcmlmDQotfQ0KLQ0KLS5yZWRkaXNoIEgxIHsNCi0JY29sb3I6IHJlZA0KLX0NCi0NCi0jeDc4eSBDT0RFIHsNCi0JYmFja2dyb3VuZDogYmx1ZQ0KLX0NCi0NCi1ESVYuc2lkZW5vdGUgSDEgew0KLQlmb250LXNpemU6IGxhcmdlDQotfQ0KLQ0KLS8qIEFuY2hvciBwc2V1ZG8tY2xhc3NlcyAqLw0KLUE6bGluayB7DQotCWNvbG9yOiByZWQNCi19ICAvKiB1bnZpc2l0ZWQgbGluayAqLw0KLUE6dmlzaXRlZCB7DQotCWNvbG9yOiBibHVlDQotfSAgLyogdmlzaXRlZCBsaW5rcyAqLw0KLUE6YWN0aXZlIHsNCi0JY29sb3I6IGxpbWUNCi19ICAvKiBhY3RpdmUgbGlua3MgKi8gLyogUHNldWRvLWNsYXNzIGNvbWJpbmVkIHdpdGggbm9ybWFsIGNsYXNzICovDQotQS5leHRlcm5hbDp2aXNpdGVkIHsNCi0JY29sb3I6IGJsdWUNCi19DQotDQotLyogJ2ZpcnN0LWxpbmUnIHBzZXVkby1lbGVtZW50ICovDQotUDpmaXJzdC1saW5lIHsNCi0JZm9udC12YXJpYW50OiBzbWFsbC1jYXBzDQotfQ0KLQ0KLS8qICdmaXJzdC1sZXR0ZXInIHBzZXVkby1lbGVtZW50ICovDQotUDpmaXJzdC1sZXR0ZXIgew0KLQlmb250LXNpemU6IDIwMCU7DQotCWZsb2F0OiBsZWZ0DQotfQ0KLQ0KLS8qIFBzZXVkby1lbGVtZW50cyBpbiBzZWxlY3RvcnMgKi8NCi1CT0RZIFA6Zmlyc3QtbGV0dGVyIHsNCi0JY29sb3I6IHB1cnBsZQ0KLX0NCi0NCi1QLmluaXRpYWw6Zmlyc3QtbGV0dGVyIHsNCi0JY29sb3I6IHJlZA0KLX0NCi0NCi0vKiBNdWx0aXBsZSBwc2V1ZG8tZWxlbWVudHMgKi8NCi1QIHsNCi0JY29sb3I6IHJlZDsNCi0JZm9udC1zaXplOiAxMnB0DQotfQ0KLQ0KLVA6Zmlyc3QtbGV0dGVyIHsNCi0JY29sb3I6IGdyZWVuOw0KLQlmb250LXNpemU6IDIwMCUNCi19DQotDQotUDpmaXJzdC1saW5lIHsNCi0JY29sb3I6IGJsdWUNCi19DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9CVUc3Mzk5MF9zZWxlY3Rvcl91bmZvcm1hdHRlZC5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL0JVRzczOTkwX3NlbGVjdG9yX3VuZm9ybWF0dGVkLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQ1MmM5My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL0JVRzczOTkwX3NlbGVjdG9yX3VuZm9ybWF0dGVkLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qIENsYXNzIGFzIHNlbGVjdG9yICovDQotSDEucGFzdG9yYWwgeyBjb2xvcjogIzAwRkYwMCB9DQotDQotLyogSUQgYXMgc2VsZWN0b3IgKi8NCi0jejk4eSB7IGxldHRlci1zcGFjaW5nOiAwLjNlbSB9DQotSDEjejk4eSB7IGxldHRlci1zcGFjaW5nOiAwLjVlbSB9DQotDQotLyogQ29udGV4dHVhbCBzZWxlY3RvcnMgKi8NCi1ESVYgUCAgICAgICAgICAgeyBmb250OiBzbWFsbCBzYW5zLXNlcmlmIH0NCi0ucmVkZGlzaCBIMSAgICAgeyBjb2xvcjogcmVkIH0NCi0jeDc4eSBDT0RFICAgICAgeyBiYWNrZ3JvdW5kOiBibHVlIH0NCi1ESVYuc2lkZW5vdGUgSDEgeyBmb250LXNpemU6IGxhcmdlIH0NCi0NCi0vKiBBbmNob3IgcHNldWRvLWNsYXNzZXMgKi8NCi1BOmxpbmsgeyBjb2xvcjogcmVkIH0gICAgICAgLyogdW52aXNpdGVkIGxpbmsgKi8NCi1BOnZpc2l0ZWQgeyBjb2xvcjogYmx1ZSB9ICAgLyogdmlzaXRlZCBsaW5rcyAqLw0KLUE6YWN0aXZlIHsgY29sb3I6IGxpbWUgfSAgICAvKiBhY3RpdmUgbGlua3MgKi8NCi0NCi0vKiBQc2V1ZG8tY2xhc3MgY29tYmluZWQgd2l0aCBub3JtYWwgY2xhc3MgKi8gDQotQS5leHRlcm5hbDp2aXNpdGVkIHsgY29sb3I6IGJsdWUgfQ0KLQ0KLS8qICdmaXJzdC1saW5lJyBwc2V1ZG8tZWxlbWVudCAqLw0KLVA6Zmlyc3QtbGluZSB7IGZvbnQtdmFyaWFudDogc21hbGwtY2FwcyB9DQotDQotLyogJ2ZpcnN0LWxldHRlcicgcHNldWRvLWVsZW1lbnQgKi8NCi1QOmZpcnN0LWxldHRlciB7IGZvbnQtc2l6ZTogMjAwJTsgZmxvYXQ6IGxlZnQgfQ0KLQ0KLS8qIFBzZXVkby1lbGVtZW50cyBpbiBzZWxlY3RvcnMgKi8NCi1CT0RZIFA6Zmlyc3QtbGV0dGVyIHsgY29sb3I6IHB1cnBsZSB9DQotUC5pbml0aWFsOmZpcnN0LWxldHRlciB7IGNvbG9yOiByZWQgfQ0KLQ0KLS8qIE11bHRpcGxlIHBzZXVkby1lbGVtZW50cyAqLw0KLVAgeyBjb2xvcjogcmVkOyBmb250LXNpemU6IDEycHQgfQ0KLVA6Zmlyc3QtbGV0dGVyIHsgY29sb3I6IGdyZWVuOyBmb250LXNpemU6IDIwMCUgfQ0KLVA6Zmlyc3QtbGluZSB7IGNvbG9yOiBibHVlIH0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2J1ZzExMDUzOS1tdWx0aXBsZWNsYXNzLWZvcm1hdHRlZC5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2J1ZzExMDUzOS1tdWx0aXBsZWNsYXNzLWZvcm1hdHRlZC5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzN2U3YjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcxMTA1MzktbXVsdGlwbGVjbGFzcy1mb3JtYXR0ZWQuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotLyogMiBzZXBhcmF0ZSBjbGFzc2VzIC0geWVzIHNwYWNlICovDQotLmNsYXNzT25lIC5jbGFzc1R3byB7DQotCWNvbG9yOiByZWQ7DQotfQ0KLQ0KLS8qIG11bHRpcGxlIGNsYXNzZXMgLSBubyBzcGFjZSAqLw0KLS5jbGFzc09uZS5jbGFzc1R3byB7DQotCWNvbG9yOiBsaW1lOw0KLX0NCi0NCi0vKiBpZCBhbmQgY2xhc3MgLSB5ZXMgc3BhY2UgKi8NCi0jbXlpZCAubXljbGFzcyB7DQotCWJvcmRlci10b3A6IDBweDsNCi19DQotDQotLyogaWQgd2l0aCBjbGFzcyAtIG5vIHNwYWNlICovDQotI215aWQubXljbGFzcyB7DQotCWJvcmRlci10b3A6IDBweDsNCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcxMTA1MzktbXVsdGlwbGVjbGFzcy5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2J1ZzExMDUzOS1tdWx0aXBsZWNsYXNzLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmU1MDczZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2J1ZzExMDUzOS1tdWx0aXBsZWNsYXNzLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLS8qIDIgc2VwYXJhdGUgY2xhc3NlcyAtIHllcyBzcGFjZSAqLw0KLS5jbGFzc09uZSAuY2xhc3NUd28gew0KLWNvbG9yOiByZWQ7DQotfQ0KLQ0KLS8qIG11bHRpcGxlIGNsYXNzZXMgLSBubyBzcGFjZSAqLw0KLS5jbGFzc09uZS5jbGFzc1R3byB7DQotY29sb3I6IGxpbWU7DQotfQ0KLQ0KLS8qIGlkIGFuZCBjbGFzcyAtIHllcyBzcGFjZSAqLw0KLSNteWlkIC5teWNsYXNzIHsNCi1ib3JkZXItdG9wOiAwcHg7DQotfQ0KLQ0KLS8qIGlkIHdpdGggY2xhc3MgLSBubyBzcGFjZSAqLw0KLSNteWlkLm15Y2xhc3Mgew0KLWJvcmRlci10b3A6IDBweDsNCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcxMTE1NjktZXh0cmFzZW1pY29sb24tZm9ybWF0dGVkLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvYnVnMTExNTY5LWV4dHJhc2VtaWNvbG9uLWZvcm1hdHRlZC5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2NmU2ZTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcxMTE1NjktZXh0cmFzZW1pY29sb24tZm9ybWF0dGVkLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotLnNpdGVtYXBsZXYxIHsNCi0JZm9udC1mYW1pbHk6IFZlcmRhbmE7DQotCWZvbnQtc2l6ZTogMTJweDsNCi0JbGluZS1oZWlnaHQ6IDE3cHg7DQotCWNvbG9yOiAjNjY2NjY2Ow0KLQlmb250LXdlaWdodDogYm9sZDsNCi0JdGV4dC1kZWNvcmF0aW9uOiBub25lOw0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2J1ZzExMTU2OS1leHRyYXNlbWljb2xvbi5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2J1ZzExMTU2OS1leHRyYXNlbWljb2xvbi5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4ZTMwN2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcxMTE1NjktZXh0cmFzZW1pY29sb24uY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0uc2l0ZW1hcGxldjF7Zm9udC1mYW1pbHk6VmVyZGFuYTtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxN3B4Ow0KLWNvbG9yOiM2NjY2NjY7Zm9udC13ZWlnaHQ6Ym9sZDsNCi10ZXh0LWRlY29yYXRpb246bm9uZTt9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcxNDYxOTgtYXR0cmlidXRlc3BlY2lmaWVyLWZvcm1hdHRlZC5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2J1ZzE0NjE5OC1hdHRyaWJ1dGVzcGVjaWZpZXItZm9ybWF0dGVkLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTVhZDFjYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2J1ZzE0NjE5OC1hdHRyaWJ1dGVzcGVjaWZpZXItZm9ybWF0dGVkLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotaW5wdXRbdHlwZT0iaGlkZGVuIl0gew0KLQl3aWR0aDogOTglOw0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2J1ZzE0NjE5OC1hdHRyaWJ1dGVzcGVjaWZpZXIuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcxNDYxOTgtYXR0cmlidXRlc3BlY2lmaWVyLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzJjMWRiZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2J1ZzE0NjE5OC1hdHRyaWJ1dGVzcGVjaWZpZXIuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1pbnB1dFt0eXBlPSJoaWRkZW4iXSB7DQotd2lkdGg6IDk4JTsNCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcxNjY5MDktdXJsY2FzZS1jbGVhbmVkLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvYnVnMTY2OTA5LXVybGNhc2UtY2xlYW5lZC5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwZGVhNDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcxNjY5MDktdXJsY2FzZS1jbGVhbmVkLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI2RlbW8gew0KLQliYWNrZ3JvdW5kOiB1cmwobWl4ZWRDYXNlL3Byb2plY3RMb2dvLmdpZik7DQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvYnVnMTY2OTA5LXVybGNhc2UuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcxNjY5MDktdXJsY2FzZS5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmZDBhYWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcxNjY5MDktdXJsY2FzZS5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNkZW1vIHsNCi0JYmFja2dyb3VuZDogVVJMKG1peGVkQ2FzZS9wcm9qZWN0TG9nby5naWYpOw0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2J1ZzIxODk5My1ub2Zvcm1hdC1jbGVhbmVkLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvYnVnMjE4OTkzLW5vZm9ybWF0LWNsZWFuZWQuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZDhkOTVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvYnVnMjE4OTkzLW5vZm9ybWF0LWNsZWFuZWQuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotQGNoYXJzZXQgIklTTy04ODU5LTEiOwotCi0vKiBTb21lIGtpbmQgb2YgY29tbWVudCBiZWluZyBsZWZ0IHRvIHRoZQotCQotCSAJCQl1c2VyICovCi0JIAkJCQotCSAJCQkKLWggewotCXRleHQtYWxpZ246IGxlZnQ7Ci0Jei1pbmRleDogCQkJCTI7Ci19Ci0KLQotI2NvbnRleHQgewkJCQkJCi0JdGV4dC1hbGlnbjogbGVmdDsKLQlib3JkZXI6IDFweCBzb2xpZCBibGFjazsKLQkJCi0JCQotCQl9CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2J1ZzIxODk5My1ub2Zvcm1hdC5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2J1ZzIxODk5My1ub2Zvcm1hdC5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2NzY4MDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcyMTg5OTMtbm9mb3JtYXQuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotQENIQVJTRVQgIklTTy04ODU5LTEiOwotCi0vKiBTb21lIGtpbmQgb2YgY29tbWVudCBiZWluZyBsZWZ0IHRvIHRoZQotCQotCSAJCQl1c2VyICovCi0JIAkJCQotCSAJCQkKLWggewotCVRFWFQtQUxJR046IExFRlQ7Ci0Jei1pbmRleDogCQkJCTI7Ci19Ci0KLQotI0NPTlRFWFQgewkJCQkJCi0JdGV4dC1hbGlnbjogbGVmdDsKLQlib3JkZXI6IDFweCBzb2xpZCBibGFjazsKLQkJCi0JCQotCQl9CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2J1ZzI0ODQ2NS1jb21iaW5lZC1wc2V1ZG8tY2xhc3Nlcy1mbXQuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcyNDg0NjUtY29tYmluZWQtcHNldWRvLWNsYXNzZXMtZm10LmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzM2ZTZmNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2J1ZzI0ODQ2NS1jb21iaW5lZC1wc2V1ZG8tY2xhc3Nlcy1mbXQuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi1hOmZvY3VzOmhvdmVyLGRpdjpmb2N1czpob3ZlciB7DQotCWJhY2tncm91bmQ6IHdoaXRlOw0KLX0NCi0NCi1kaXYgYTpmb2N1czpob3ZlciB7DQotCWJhY2tncm91bmQ6IGJsdWU7DQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvYnVnMjQ4NDY1LWNvbWJpbmVkLXBzZXVkby1jbGFzc2VzLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvYnVnMjQ4NDY1LWNvbWJpbmVkLXBzZXVkby1jbGFzc2VzLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDAxZTA5Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2J1ZzI0ODQ2NS1jb21iaW5lZC1wc2V1ZG8tY2xhc3Nlcy5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLWE6Zm9jdXM6aG92ZXIsZGl2OmZvY3VzOmhvdmVyIHsNCi1iYWNrZ3JvdW5kOiB3aGl0ZTsNCi19DQotDQotZGl2IGE6Zm9jdXM6aG92ZXIgew0KLWJhY2tncm91bmQ6IGJsdWU7DQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL21vZGVsL0Fic3RyYWN0TW9kZWxUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9tb2RlbC9BYnN0cmFjdE1vZGVsVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzMzMzRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL21vZGVsL0Fic3RyYWN0TW9kZWxUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5tb2RlbDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QcmVmZXJlbmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwuQ1NTQ29yZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuQ1NTQ29yZVByZWZlcmVuY2VOYW1lczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSUNTU01vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JQ1NTU3R5bGVTaGVldDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMudXRpbC5GaWxlVXRpbDsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTUHJpbWl0aXZlVmFsdWU7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1ZhbHVlOwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5Db3VudGVyOwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5SR0JDb2xvcjsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuUmVjdDsKLQotcHVibGljIGNsYXNzIEFic3RyYWN0TW9kZWxUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCXByb3RlY3RlZCBJQ1NTTW9kZWwgZk1vZGVsID0gbnVsbDsKLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnNldFVwKCk7Ci0KLQkJUHJlZmVyZW5jZXMgcHJlZnMgPSBDU1NDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpOwotCQlwcmVmcy5zZXRWYWx1ZShDU1NDb3JlUHJlZmVyZW5jZU5hbWVzLkNBU0VfSURFTlRJRklFUiwgQ1NTQ29yZVByZWZlcmVuY2VOYW1lcy5MT1dFUik7Ci0JCXByZWZzLnNldFZhbHVlKENTU0NvcmVQcmVmZXJlbmNlTmFtZXMuQ0FTRV9QUk9QRVJUWV9OQU1FLCBDU1NDb3JlUHJlZmVyZW5jZU5hbWVzLkxPV0VSKTsKLQkJcHJlZnMuc2V0VmFsdWUoQ1NTQ29yZVByZWZlcmVuY2VOYW1lcy5DQVNFX1BST1BFUlRZX1ZBTFVFLCBDU1NDb3JlUHJlZmVyZW5jZU5hbWVzLkxPV0VSKTsKLQotCQlmTW9kZWwgPSBGaWxlVXRpbC5jcmVhdGVNb2RlbCgpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWlmIChmTW9kZWwgIT0gbnVsbCkgewotCQkJZk1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJZk1vZGVsID0gbnVsbDsKLQkJfQotCQlzdXBlci50ZWFyRG93bigpOwotCX0KLQotCXByb3RlY3RlZCBJQ1NTTW9kZWwgZ2V0TW9kZWwoKSB7Ci0JCXJldHVybiBmTW9kZWw7Ci0JfQotCi0JcHJvdGVjdGVkIElDU1NTdHlsZVNoZWV0IGdldFN0eWxlU2hlZXQoKSB7Ci0JCXJldHVybiAoSUNTU1N0eWxlU2hlZXQpIGZNb2RlbC5nZXREb2N1bWVudCgpOwotCX0KLQotCWNsYXNzIFByaW1pdGl2ZU51bWJlciB7Ci0JCXNob3J0IHR5cGU7Ci0JCWZsb2F0IHZhbHVlOwotCi0JCVByaW1pdGl2ZU51bWJlcihzaG9ydCBuZXdUeXBlLCBmbG9hdCBuZXdWYWx1ZSkgewotCQkJdHlwZSA9IG5ld1R5cGU7Ci0JCQl2YWx1ZSA9IG5ld1ZhbHVlOwotCQl9Ci0JfQotCi0JY2xhc3MgUHJpbWl0aXZlU3RyaW5nIHsKLQkJc2hvcnQgdHlwZTsKLQkJU3RyaW5nIHZhbHVlOwotCi0JCVByaW1pdGl2ZVN0cmluZyhzaG9ydCBuZXdUeXBlLCBTdHJpbmcgbmV3VmFsdWUpIHsKLQkJCXR5cGUgPSBuZXdUeXBlOwotCQkJdmFsdWUgPSBuZXdWYWx1ZTsKLQkJfQotCX0KLQotCS8qIGZvciBpbnQsIGZsb2F0ICovCi0JcHJvdGVjdGVkIHZvaWQgY2hlY2tQcmltaXRpdmVOdW1iZXIoQ1NTVmFsdWUgYWN0dWFsLCBQcmltaXRpdmVOdW1iZXIgZXhwZWN0ZWQpIHsKLQkJYXNzZXJ0VHJ1ZShhY3R1YWwgaW5zdGFuY2VvZiBDU1NQcmltaXRpdmVWYWx1ZSk7Ci0JCWFzc2VydEVxdWFscyhleHBlY3RlZC50eXBlLCAoKENTU1ByaW1pdGl2ZVZhbHVlKSBhY3R1YWwpLmdldFByaW1pdGl2ZVR5cGUoKSk7Ci0JCWFzc2VydEVxdWFscyhleHBlY3RlZC52YWx1ZSwgKChDU1NQcmltaXRpdmVWYWx1ZSkgYWN0dWFsKS5nZXRGbG9hdFZhbHVlKGV4cGVjdGVkLnR5cGUpLCAwKTsKLQl9Ci0KLQkvKiBmb3Igc3RyaW5nICovCi0JcHJvdGVjdGVkIHZvaWQgY2hlY2tQcmltaXRpdmVTdHJpbmcoQ1NTVmFsdWUgYWN0dWFsLCBQcmltaXRpdmVTdHJpbmcgZXhwZWN0ZWQpIHsKLQkJYXNzZXJ0VHJ1ZShhY3R1YWwgaW5zdGFuY2VvZiBDU1NQcmltaXRpdmVWYWx1ZSk7Ci0JCWFzc2VydEVxdWFscyhleHBlY3RlZC50eXBlLCAoKENTU1ByaW1pdGl2ZVZhbHVlKSBhY3R1YWwpLmdldFByaW1pdGl2ZVR5cGUoKSk7Ci0JCWFzc2VydEVxdWFscyhleHBlY3RlZC52YWx1ZSwgKChDU1NQcmltaXRpdmVWYWx1ZSkgYWN0dWFsKS5nZXRTdHJpbmdWYWx1ZSgpKTsKLQl9Ci0KLQkvKiBmb3IgY291bnRlciAqLwotCXByb3RlY3RlZCB2b2lkIGNoZWNrUHJpbWl0aXZlQ291bnRlcihDU1NWYWx1ZSBhY3R1YWwsIFN0cmluZyBpZGVudGlmaWVyLCBTdHJpbmcgbGlzdFN0eWxlLCBTdHJpbmcgc2VwYXJhdG9yKSB7Ci0JCWFzc2VydFRydWUoYWN0dWFsIGluc3RhbmNlb2YgQ1NTUHJpbWl0aXZlVmFsdWUpOwotCQlhc3NlcnRFcXVhbHMoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0NPVU5URVIsICgoQ1NTUHJpbWl0aXZlVmFsdWUpIGFjdHVhbCkuZ2V0UHJpbWl0aXZlVHlwZSgpKTsKLQkJQ291bnRlciBjb3VudGVyID0gKChDU1NQcmltaXRpdmVWYWx1ZSkgYWN0dWFsKS5nZXRDb3VudGVyVmFsdWUoKTsKLQkJYXNzZXJ0RXF1YWxzKGlkZW50aWZpZXIsIGNvdW50ZXIuZ2V0SWRlbnRpZmllcigpKTsKLQkJYXNzZXJ0RXF1YWxzKGxpc3RTdHlsZSwgY291bnRlci5nZXRMaXN0U3R5bGUoKSk7Ci0JCWFzc2VydEVxdWFscyhzZXBhcmF0b3IsIGNvdW50ZXIuZ2V0U2VwYXJhdG9yKCkpOwotCX0KLQotCS8qIGZvciByZWN0ICovCi0JcHJvdGVjdGVkIHZvaWQgY2hlY2tQcmltaXRpdmVSZWN0KENTU1ZhbHVlIGFjdHVhbCwgT2JqZWN0W10gZXhwZWN0ZWRBcnJheSkgewotCQlhc3NlcnRUcnVlKGFjdHVhbCBpbnN0YW5jZW9mIENTU1ByaW1pdGl2ZVZhbHVlKTsKLQkJYXNzZXJ0RXF1YWxzKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19SRUNULCAoKENTU1ByaW1pdGl2ZVZhbHVlKSBhY3R1YWwpLmdldFByaW1pdGl2ZVR5cGUoKSk7Ci0JCVJlY3QgcmVjdCA9ICgoQ1NTUHJpbWl0aXZlVmFsdWUpIGFjdHVhbCkuZ2V0UmVjdFZhbHVlKCk7Ci0JCUNTU1ByaW1pdGl2ZVZhbHVlIHZhbHVlOwotCQlPYmplY3QgZXhwZWN0ZWQ7Ci0JCXZhbHVlID0gcmVjdC5nZXRUb3AoKTsKLQkJZXhwZWN0ZWQgPSBleHBlY3RlZEFycmF5WzBdOwotCQlpZiAoZXhwZWN0ZWQgaW5zdGFuY2VvZiBQcmltaXRpdmVOdW1iZXIpIHsKLQkJCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlLCAoUHJpbWl0aXZlTnVtYmVyKSBleHBlY3RlZCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZSwgKFByaW1pdGl2ZVN0cmluZykgZXhwZWN0ZWQpOwotCQl9Ci0JCXZhbHVlID0gcmVjdC5nZXRSaWdodCgpOwotCQlleHBlY3RlZCA9IGV4cGVjdGVkQXJyYXlbMV07Ci0JCWlmIChleHBlY3RlZCBpbnN0YW5jZW9mIFByaW1pdGl2ZU51bWJlcikgewotCQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWUsIChQcmltaXRpdmVOdW1iZXIpIGV4cGVjdGVkKTsKLQkJfQotCQllbHNlIHsKLQkJCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlLCAoUHJpbWl0aXZlU3RyaW5nKSBleHBlY3RlZCk7Ci0JCX0KLQkJdmFsdWUgPSByZWN0LmdldEJvdHRvbSgpOwotCQlleHBlY3RlZCA9IGV4cGVjdGVkQXJyYXlbMl07Ci0JCWlmIChleHBlY3RlZCBpbnN0YW5jZW9mIFByaW1pdGl2ZU51bWJlcikgewotCQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWUsIChQcmltaXRpdmVOdW1iZXIpIGV4cGVjdGVkKTsKLQkJfQotCQllbHNlIHsKLQkJCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlLCAoUHJpbWl0aXZlU3RyaW5nKSBleHBlY3RlZCk7Ci0JCX0KLQkJdmFsdWUgPSByZWN0LmdldExlZnQoKTsKLQkJZXhwZWN0ZWQgPSBleHBlY3RlZEFycmF5WzNdOwotCQlpZiAoZXhwZWN0ZWQgaW5zdGFuY2VvZiBQcmltaXRpdmVOdW1iZXIpIHsKLQkJCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlLCAoUHJpbWl0aXZlTnVtYmVyKSBleHBlY3RlZCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZSwgKFByaW1pdGl2ZVN0cmluZykgZXhwZWN0ZWQpOwotCQl9Ci0JfQotCi0JLyogZm9yIHJnYiAqLwotCXByb3RlY3RlZCB2b2lkIGNoZWNrUHJpbWl0aXZlUmdiKENTU1ZhbHVlIGFjdHVhbCwgT2JqZWN0W10gZXhwZWN0ZWRBcnJheSkgewotCQlhc3NlcnRUcnVlKGFjdHVhbCBpbnN0YW5jZW9mIENTU1ByaW1pdGl2ZVZhbHVlKTsKLQkJYXNzZXJ0RXF1YWxzKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19SR0JDT0xPUiwgKChDU1NQcmltaXRpdmVWYWx1ZSkgYWN0dWFsKS5nZXRQcmltaXRpdmVUeXBlKCkpOwotCQlSR0JDb2xvciBjb2xvciA9ICgoQ1NTUHJpbWl0aXZlVmFsdWUpIGFjdHVhbCkuZ2V0UkdCQ29sb3JWYWx1ZSgpOwotCQlDU1NQcmltaXRpdmVWYWx1ZSB2YWx1ZTsKLQkJT2JqZWN0IGV4cGVjdGVkOwotCQl2YWx1ZSA9IGNvbG9yLmdldFJlZCgpOwotCQlleHBlY3RlZCA9IGV4cGVjdGVkQXJyYXlbMF07Ci0JCWlmIChleHBlY3RlZCBpbnN0YW5jZW9mIFByaW1pdGl2ZU51bWJlcikgewotCQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWUsIChQcmltaXRpdmVOdW1iZXIpIGV4cGVjdGVkKTsKLQkJfQotCQllbHNlIHsKLQkJCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlLCAoUHJpbWl0aXZlU3RyaW5nKSBleHBlY3RlZCk7Ci0JCX0KLQkJdmFsdWUgPSBjb2xvci5nZXRHcmVlbigpOwotCQlleHBlY3RlZCA9IGV4cGVjdGVkQXJyYXlbMV07Ci0JCWlmIChleHBlY3RlZCBpbnN0YW5jZW9mIFByaW1pdGl2ZU51bWJlcikgewotCQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWUsIChQcmltaXRpdmVOdW1iZXIpIGV4cGVjdGVkKTsKLQkJfQotCQllbHNlIHsKLQkJCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlLCAoUHJpbWl0aXZlU3RyaW5nKSBleHBlY3RlZCk7Ci0JCX0KLQkJdmFsdWUgPSBjb2xvci5nZXRCbHVlKCk7Ci0JCWV4cGVjdGVkID0gZXhwZWN0ZWRBcnJheVsyXTsKLQkJaWYgKGV4cGVjdGVkIGluc3RhbmNlb2YgUHJpbWl0aXZlTnVtYmVyKSB7Ci0JCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZSwgKFByaW1pdGl2ZU51bWJlcikgZXhwZWN0ZWQpOwotCQl9Ci0JCWVsc2UgewotCQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWUsIChQcmltaXRpdmVTdHJpbmcpIGV4cGVjdGVkKTsKLQkJfQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvbW9kZWwvQ1NTQ2hhcnNldFJ1bGVUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9tb2RlbC9DU1NDaGFyc2V0UnVsZVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGZiNGFiZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9tb2RlbC9DU1NDaGFyc2V0UnVsZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMubW9kZWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSUNTU0RvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JQ1NTU3R5bGVTaGVldDsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTQ2hhcnNldFJ1bGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1J1bGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1J1bGVMaXN0OwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NTdHlsZVNoZWV0OwotCi1wdWJsaWMgY2xhc3MgQ1NTQ2hhcnNldFJ1bGVUZXN0IGV4dGVuZHMgQWJzdHJhY3RNb2RlbFRlc3QgewotCXByaXZhdGUgZmluYWwgU3RyaW5nIFJVTEUgPSAiQGNoYXJzZXQgXCJpc28tODg1OS0xXCI7IjsKLQotCXB1YmxpYyB2b2lkIHRlc3RJbnNlcnRSdWxlKCkgewotCQlDU1NTdHlsZVNoZWV0IHNoZWV0ID0gZ2V0U3R5bGVTaGVldCgpOwotCi0JCWFzc2VydEVxdWFscygwLCBzaGVldC5pbnNlcnRSdWxlKFJVTEUsIDApKTsKLQotCQlDU1NSdWxlTGlzdCBydWxlTGlzdCA9IHNoZWV0LmdldENzc1J1bGVzKCk7Ci0JCUNTU1J1bGUgcnVsZSA9IHJ1bGVMaXN0Lml0ZW0oMCk7Ci0JCWFzc2VydFRydWUocnVsZSBpbnN0YW5jZW9mIENTU0NoYXJzZXRSdWxlKTsKLQkJQ1NTQ2hhcnNldFJ1bGUgY2hhcnNldFJ1bGUgPSAoQ1NTQ2hhcnNldFJ1bGUpIHJ1bGU7Ci0JCWFzc2VydEVxdWFscygiaXNvLTg4NTktMSIsIGNoYXJzZXRSdWxlLmdldEVuY29kaW5nKCkpOwotCQlhc3NlcnRFcXVhbHMoUlVMRSwgY2hhcnNldFJ1bGUuZ2V0Q3NzVGV4dCgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlUnVsZSgpIHsKLQkJSUNTU1N0eWxlU2hlZXQgc2hlZXQgPSBnZXRTdHlsZVNoZWV0KCk7Ci0JCUlDU1NEb2N1bWVudCBkb2MgPSBzaGVldDsKLQkJQ1NTQ2hhcnNldFJ1bGUgbmV3UnVsZSA9IGRvYy5jcmVhdGVDU1NDaGFyc2V0UnVsZSgpOwotCQluZXdSdWxlLnNldEVuY29kaW5nKCJpc28tODg1OS0xIik7Ci0JCXNoZWV0Lmluc2VydFJ1bGVCZWZvcmUobmV3UnVsZSwgbnVsbCk7Ci0KLQkJQ1NTUnVsZUxpc3QgcnVsZUxpc3QgPSBzaGVldC5nZXRDc3NSdWxlcygpOwotCQlDU1NSdWxlIHJ1bGUgPSBydWxlTGlzdC5pdGVtKDApOwotCQlhc3NlcnRUcnVlKHJ1bGUgaW5zdGFuY2VvZiBDU1NDaGFyc2V0UnVsZSk7Ci0JCUNTU0NoYXJzZXRSdWxlIGNoYXJzZXRSdWxlID0gKENTU0NoYXJzZXRSdWxlKSBydWxlOwotCQlhc3NlcnRFcXVhbHMoImlzby04ODU5LTEiLCBjaGFyc2V0UnVsZS5nZXRFbmNvZGluZygpKTsKLQkJYXNzZXJ0RXF1YWxzKFJVTEUsIGNoYXJzZXRSdWxlLmdldENzc1RleHQoKSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvbW9kZWwvQ1NTRm9udEZhY2VSdWxlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvbW9kZWwvQ1NTRm9udEZhY2VSdWxlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYWJmNzcyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL21vZGVsL0NTU0ZvbnRGYWNlUnVsZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLm1vZGVsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JQ1NTTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklDU1NQcmltaXRpdmVWYWx1ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMudXRpbC5GaWxlVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NGb250RmFjZVJ1bGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1ByaW1pdGl2ZVZhbHVlOwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NSdWxlOwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NSdWxlTGlzdDsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTU3R5bGVEZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTU3R5bGVTaGVldDsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTVmFsdWU7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1ZhbHVlTGlzdDsKLQotcHVibGljIGNsYXNzIENTU0ZvbnRGYWNlUnVsZVRlc3QgZXh0ZW5kcyBBYnN0cmFjdE1vZGVsVGVzdCB7Ci0JcHVibGljIHZvaWQgdGVzdEluc2VydFJ1bGUoKSB7Ci0JCWZpbmFsIFN0cmluZyBSVUxFID0gIkBmb250LWZhY2UgeyBmb250LWZhbWlseTogXCJTd2lzcyA3MjFcIjsgc3JjOiB1cmwoc3dpc3M3MjEucGZyKTsgLyogVGhlIGV4cGFuZGVkIFN3aXNzIDcyMSAqLyBmb250LXN0cmV0Y2g6IGV4cGFuZGVkOyB9IjsKLQkJQ1NTU3R5bGVTaGVldCBzaGVldCA9IGdldFN0eWxlU2hlZXQoKTsKLQkJYXNzZXJ0RXF1YWxzKDAsIHNoZWV0Lmluc2VydFJ1bGUoUlVMRSwgMCkpOwotCi0JCUNTU1J1bGVMaXN0IHJ1bGVMaXN0ID0gc2hlZXQuZ2V0Q3NzUnVsZXMoKTsKLQkJQ1NTUnVsZSBydWxlID0gcnVsZUxpc3QuaXRlbSgwKTsKLQkJYXNzZXJ0VHJ1ZShydWxlIGluc3RhbmNlb2YgQ1NTRm9udEZhY2VSdWxlKTsKLQotCQlDU1NTdHlsZURlY2xhcmF0aW9uIGRlY2xhcmF0aW9uID0gKChDU1NGb250RmFjZVJ1bGUpIHJ1bGUpLmdldFN0eWxlKCk7Ci0JCWFzc2VydEVxdWFscygzLCBkZWNsYXJhdGlvbi5nZXRMZW5ndGgoKSk7Ci0KLQkJQ1NTVmFsdWUgdmFsdWU7Ci0JCUNTU1ByaW1pdGl2ZVZhbHVlIHByaW1pdGl2ZVZhbHVlOwotCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiZm9udC1mYW1pbHkiKTsKLQkJYXNzZXJ0VHJ1ZSh2YWx1ZSBpbnN0YW5jZW9mIENTU1ByaW1pdGl2ZVZhbHVlKTsKLQotCQlwcmltaXRpdmVWYWx1ZSA9IChDU1NQcmltaXRpdmVWYWx1ZSkgdmFsdWU7Ci0JCWFzc2VydEVxdWFscyhDU1NQcmltaXRpdmVWYWx1ZS5DU1NfU1RSSU5HLCBwcmltaXRpdmVWYWx1ZS5nZXRQcmltaXRpdmVUeXBlKCkpOwotCQlhc3NlcnRFcXVhbHMoIlN3aXNzIDcyMSIsIHByaW1pdGl2ZVZhbHVlLmdldFN0cmluZ1ZhbHVlKCkpOwotCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgic3JjIik7Ci0JCWFzc2VydFRydWUodmFsdWUgaW5zdGFuY2VvZiBDU1NQcmltaXRpdmVWYWx1ZSk7Ci0KLQkJcHJpbWl0aXZlVmFsdWUgPSAoQ1NTUHJpbWl0aXZlVmFsdWUpIHZhbHVlOwotCQlhc3NlcnRFcXVhbHMoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX1VSSSwgcHJpbWl0aXZlVmFsdWUuZ2V0UHJpbWl0aXZlVHlwZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJzd2lzczcyMS5wZnIiLCBwcmltaXRpdmVWYWx1ZS5nZXRTdHJpbmdWYWx1ZSgpKTsKLQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoImZvbnQtc3RyZXRjaCIpOwotCQlhc3NlcnRUcnVlKHZhbHVlIGluc3RhbmNlb2YgQ1NTUHJpbWl0aXZlVmFsdWUpOwotCi0JCXByaW1pdGl2ZVZhbHVlID0gKENTU1ByaW1pdGl2ZVZhbHVlKSB2YWx1ZTsKLQkJYXNzZXJ0RXF1YWxzKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19JREVOVCwgcHJpbWl0aXZlVmFsdWUuZ2V0UHJpbWl0aXZlVHlwZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJleHBhbmRlZCIsIHByaW1pdGl2ZVZhbHVlLmdldFN0cmluZ1ZhbHVlKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIF90ZXN0SW5zZXJ0VGV4dDEoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlJQ1NTTW9kZWwgbW9kZWwgPSBnZXRNb2RlbCgpOwotCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQlzdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0KEZpbGVVdGlsLmNyZWF0ZVN0cmluZygic3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMiLCAiQ1NTRm9udEZhY2VSdWxlVGVzdC5jc3MiKSk7Ci0KLQkJQ1NTU3R5bGVTaGVldCBzaGVldCA9IChDU1NTdHlsZVNoZWV0KSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQlDU1NSdWxlTGlzdCBydWxlTGlzdCA9IHNoZWV0LmdldENzc1J1bGVzKCk7Ci0JCWFzc2VydEVxdWFscygzLCBydWxlTGlzdC5nZXRMZW5ndGgoKSk7Ci0KLQkJQ1NTUnVsZSBydWxlOwotCQlDU1NTdHlsZURlY2xhcmF0aW9uIGRlY2xhcmF0aW9uOwotCQlDU1NWYWx1ZSB2YWx1ZTsKLQkJQ1NTVmFsdWVMaXN0IHZhbHVlTGlzdDsKLQotCQkvLyBydWxlIDEKLQotCQlydWxlID0gcnVsZUxpc3QuaXRlbSgwKTsKLQkJYXNzZXJ0RXF1YWxzKENTU1J1bGUuRk9OVF9GQUNFX1JVTEUsIHJ1bGUuZ2V0VHlwZSgpKTsKLQkJYXNzZXJ0VHJ1ZShydWxlIGluc3RhbmNlb2YgQ1NTRm9udEZhY2VSdWxlKTsKLQotCQlkZWNsYXJhdGlvbiA9ICgoQ1NTRm9udEZhY2VSdWxlKSBydWxlKS5nZXRTdHlsZSgpOwotCQlhc3NlcnRFcXVhbHMoNCwgZGVjbGFyYXRpb24uZ2V0TGVuZ3RoKCkpOwotCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiZm9udC1mYW1pbHkiKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWUsIG5ldyBQcmltaXRpdmVTdHJpbmcoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX1NUUklORywgIlN3aXNzIDcyMSIpKTsKLQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoInNyYyIpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZSwgbmV3IFByaW1pdGl2ZVN0cmluZyhDU1NQcmltaXRpdmVWYWx1ZS5DU1NfVVJJLCAic3dpc3M3MjFibGsucGZyIikpOwotCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiZm9udC1zdHlsZSIpOwotCQlhc3NlcnRUcnVlKHZhbHVlIGluc3RhbmNlb2YgQ1NTVmFsdWVMaXN0KTsKLQotCQl2YWx1ZUxpc3QgPSAoQ1NTVmFsdWVMaXN0KSB2YWx1ZTsKLQkJYXNzZXJ0RXF1YWxzKDMsIHZhbHVlTGlzdC5nZXRMZW5ndGgoKSk7Ci0KLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWVMaXN0Lml0ZW0oMCksIG5ldyBQcmltaXRpdmVTdHJpbmcoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lERU5ULCAibm9ybWFsIikpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZUxpc3QuaXRlbSgxKSwgbmV3IFByaW1pdGl2ZVN0cmluZyhJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0NPTU1BLCAiLCIpKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWVMaXN0Lml0ZW0oMiksIG5ldyBQcmltaXRpdmVTdHJpbmcoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lERU5ULCAiaXRhbGljIikpOwotCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiZm9udC13ZWlnaHQiKTsKLQkJYXNzZXJ0VHJ1ZSh2YWx1ZSBpbnN0YW5jZW9mIENTU1ZhbHVlTGlzdCk7Ci0KLQkJdmFsdWVMaXN0ID0gKENTU1ZhbHVlTGlzdCkgdmFsdWU7Ci0JCWFzc2VydEVxdWFscygzLCB2YWx1ZUxpc3QuZ2V0TGVuZ3RoKCkpOwotCi0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlTGlzdC5pdGVtKDApLCBuZXcgUHJpbWl0aXZlTnVtYmVyKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSU5URUdFUiwgODAwKSk7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlTGlzdC5pdGVtKDEpLCBuZXcgUHJpbWl0aXZlU3RyaW5nKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfQ09NTUEsICIsIikpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZUxpc3QuaXRlbSgyKSwgbmV3IFByaW1pdGl2ZU51bWJlcihJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lOVEVHRVIsIDkwMCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIF90ZXN0SW5zZXJ0VGV4dDIoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlJQ1NTTW9kZWwgbW9kZWwgPSBnZXRNb2RlbCgpOwotCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQlzdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0KEZpbGVVdGlsLmNyZWF0ZVN0cmluZygic3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMiLCAiQ1NTRm9udEZhY2VSdWxlVGVzdC5jc3MiKSk7Ci0KLQkJQ1NTU3R5bGVTaGVldCBzaGVldCA9IChDU1NTdHlsZVNoZWV0KSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQlDU1NSdWxlTGlzdCBydWxlTGlzdCA9IHNoZWV0LmdldENzc1J1bGVzKCk7Ci0JCWFzc2VydEVxdWFscygzLCBydWxlTGlzdC5nZXRMZW5ndGgoKSk7Ci0KLQkJQ1NTUnVsZSBydWxlOwotCQlDU1NTdHlsZURlY2xhcmF0aW9uIGRlY2xhcmF0aW9uOwotCQlDU1NWYWx1ZSB2YWx1ZTsKLQkJQ1NTVmFsdWVMaXN0IHZhbHVlTGlzdDsKLQotCQkvLyBydWxlIDIKLQotCQlydWxlID0gcnVsZUxpc3QuaXRlbSgxKTsKLQkJYXNzZXJ0RXF1YWxzKENTU1J1bGUuRk9OVF9GQUNFX1JVTEUsIHJ1bGUuZ2V0VHlwZSgpKTsKLQkJYXNzZXJ0VHJ1ZShydWxlIGluc3RhbmNlb2YgQ1NTRm9udEZhY2VSdWxlKTsKLQotCQlkZWNsYXJhdGlvbiA9ICgoQ1NTRm9udEZhY2VSdWxlKSBydWxlKS5nZXRTdHlsZSgpOwotCQlhc3NlcnRFcXVhbHMoNiwgZGVjbGFyYXRpb24uZ2V0TGVuZ3RoKCkpOwotCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgic3JjIik7Ci0JCWFzc2VydFRydWUodmFsdWUgaW5zdGFuY2VvZiBDU1NWYWx1ZUxpc3QpOwotCi0JCXZhbHVlTGlzdCA9IChDU1NWYWx1ZUxpc3QpIHZhbHVlOwotCQlhc3NlcnRFcXVhbHMoOSwgdmFsdWVMaXN0LmdldExlbmd0aCgpKTsKLQotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZUxpc3QuaXRlbSgwKSwgbmV3IFByaW1pdGl2ZVN0cmluZyhJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0xPQ0FMLCAiUGFsYXRpbm8iKSk7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlTGlzdC5pdGVtKDEpLCBuZXcgUHJpbWl0aXZlU3RyaW5nKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfQ09NTUEsICIsIikpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZUxpc3QuaXRlbSgyKSwgbmV3IFByaW1pdGl2ZVN0cmluZyhJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0xPQ0FMLCAiVGltZXMgTmV3IFJvbWFuIikpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZUxpc3QuaXRlbSgzKSwgbmV3IFByaW1pdGl2ZVN0cmluZyhJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0NPTU1BLCAiLCIpKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWVMaXN0Lml0ZW0oNCksIG5ldyBQcmltaXRpdmVTdHJpbmcoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19MT0NBTCwgIk5ldyBZb3JrIikpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZUxpc3QuaXRlbSg1KSwgbmV3IFByaW1pdGl2ZVN0cmluZyhJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0NPTU1BLCAiLCIpKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWVMaXN0Lml0ZW0oNiksIG5ldyBQcmltaXRpdmVTdHJpbmcoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19MT0NBTCwgIlV0b3BpYSIpKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWVMaXN0Lml0ZW0oNyksIG5ldyBQcmltaXRpdmVTdHJpbmcoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19DT01NQSwgIiwiKSk7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlTGlzdC5pdGVtKDgpLCBuZXcgUHJpbWl0aXZlU3RyaW5nKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19VUkksICJodHRwOi8vc29tZXdoZXJlL2ZyZWUvZm9udCIpKTsKLQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoImZvbnQtZmFtaWx5Iik7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlLCBuZXcgUHJpbWl0aXZlU3RyaW5nKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19JREVOVCwgInNlcmlmIikpOwotCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiZm9udC13ZWlnaHQiKTsKLQkJYXNzZXJ0VHJ1ZSh2YWx1ZSBpbnN0YW5jZW9mIENTU1ZhbHVlTGlzdCk7Ci0KLQkJdmFsdWVMaXN0ID0gKENTU1ZhbHVlTGlzdCkgdmFsdWU7Ci0JCWFzc2VydEVxdWFscyg5LCB2YWx1ZUxpc3QuZ2V0TGVuZ3RoKCkpOwotCi0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlTGlzdC5pdGVtKDApLCBuZXcgUHJpbWl0aXZlTnVtYmVyKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSU5URUdFUiwgMTAwKSk7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlTGlzdC5pdGVtKDEpLCBuZXcgUHJpbWl0aXZlU3RyaW5nKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfQ09NTUEsICIsIikpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZUxpc3QuaXRlbSgyKSwgbmV3IFByaW1pdGl2ZU51bWJlcihJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lOVEVHRVIsIDIwMCkpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZUxpc3QuaXRlbSgzKSwgbmV3IFByaW1pdGl2ZVN0cmluZyhJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0NPTU1BLCAiLCIpKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWVMaXN0Lml0ZW0oNCksIG5ldyBQcmltaXRpdmVOdW1iZXIoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19JTlRFR0VSLCAzMDApKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWVMaXN0Lml0ZW0oNSksIG5ldyBQcmltaXRpdmVTdHJpbmcoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19DT01NQSwgIiwiKSk7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlTGlzdC5pdGVtKDYpLCBuZXcgUHJpbWl0aXZlTnVtYmVyKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSU5URUdFUiwgNDAwKSk7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlTGlzdC5pdGVtKDcpLCBuZXcgUHJpbWl0aXZlU3RyaW5nKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfQ09NTUEsICIsIikpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZUxpc3QuaXRlbSg4KSwgbmV3IFByaW1pdGl2ZU51bWJlcihJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lOVEVHRVIsIDUwMCkpOwotCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiZm9udC1zdHlsZSIpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZSwgbmV3IFByaW1pdGl2ZVN0cmluZyhDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSURFTlQsICJub3JtYWwiKSk7Ci0KLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJmb250LXZhcmlhbnQiKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWUsIG5ldyBQcmltaXRpdmVTdHJpbmcoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lERU5ULCAibm9ybWFsIikpOwotCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiZm9udC1zaXplIik7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlLCBuZXcgUHJpbWl0aXZlU3RyaW5nKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19JREVOVCwgImFsbCIpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBfdGVzdEluc2VydFRleHQzKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSUNTU01vZGVsIG1vZGVsID0gZ2V0TW9kZWwoKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJc3RydWN0dXJlZERvY3VtZW50LnNldChGaWxlVXRpbC5jcmVhdGVTdHJpbmcoInNyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzIiwgIkNTU0ZvbnRGYWNlUnVsZVRlc3QuY3NzIikpOwotCi0JCUNTU1N0eWxlU2hlZXQgc2hlZXQgPSAoQ1NTU3R5bGVTaGVldCkgbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJQ1NTUnVsZUxpc3QgcnVsZUxpc3QgPSBzaGVldC5nZXRDc3NSdWxlcygpOwotCQlhc3NlcnRFcXVhbHMoMywgcnVsZUxpc3QuZ2V0TGVuZ3RoKCkpOwotCi0JCUNTU1J1bGUgcnVsZTsKLQkJQ1NTU3R5bGVEZWNsYXJhdGlvbiBkZWNsYXJhdGlvbjsKLQkJQ1NTVmFsdWUgdmFsdWU7Ci0JCUNTU1ZhbHVlTGlzdCB2YWx1ZUxpc3Q7Ci0KLQkJLy8gcnVsZSAzCi0KLQkJcnVsZSA9IHJ1bGVMaXN0Lml0ZW0oMik7Ci0JCWFzc2VydEVxdWFscyhDU1NSdWxlLkZPTlRfRkFDRV9SVUxFLCBydWxlLmdldFR5cGUoKSk7Ci0JCWFzc2VydFRydWUocnVsZSBpbnN0YW5jZW9mIENTU0ZvbnRGYWNlUnVsZSk7Ci0KLQkJZGVjbGFyYXRpb24gPSAoKENTU0ZvbnRGYWNlUnVsZSkgcnVsZSkuZ2V0U3R5bGUoKTsKLQkJYXNzZXJ0RXF1YWxzKDUsIGRlY2xhcmF0aW9uLmdldExlbmd0aCgpKTsKLQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoInNyYyIpOwotCQlhc3NlcnRUcnVlKHZhbHVlIGluc3RhbmNlb2YgQ1NTVmFsdWVMaXN0KTsKLQotCQl2YWx1ZUxpc3QgPSAoQ1NTVmFsdWVMaXN0KSB2YWx1ZTsKLQkJYXNzZXJ0RXF1YWxzKDQsIHZhbHVlTGlzdC5nZXRMZW5ndGgoKSk7Ci0KLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWVMaXN0Lml0ZW0oMCksIG5ldyBQcmltaXRpdmVTdHJpbmcoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19MT0NBTCwgIkFsYWJhbWEgSXRhbGljIikpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZUxpc3QuaXRlbSgxKSwgbmV3IFByaW1pdGl2ZVN0cmluZyhJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0NPTU1BLCAiLCIpKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWVMaXN0Lml0ZW0oMiksIG5ldyBQcmltaXRpdmVTdHJpbmcoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX1VSSSwgImh0dHA6Ly93d3cuZm9udHMub3JnL0EvYWxhYmFtYS1pdGFsaWMiKSk7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlTGlzdC5pdGVtKDMpLCBuZXcgUHJpbWl0aXZlU3RyaW5nKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfRk9STUFULCAidHJ1ZXR5cGUiKSk7Ci0KLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJwYW5vc2UtMSIpOwotCQlhc3NlcnRUcnVlKHZhbHVlIGluc3RhbmNlb2YgQ1NTVmFsdWVMaXN0KTsKLQotCQl2YWx1ZUxpc3QgPSAoQ1NTVmFsdWVMaXN0KSB2YWx1ZTsKLQkJYXNzZXJ0RXF1YWxzKDEwLCB2YWx1ZUxpc3QuZ2V0TGVuZ3RoKCkpOwotCi0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlTGlzdC5pdGVtKDApLCBuZXcgUHJpbWl0aXZlTnVtYmVyKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSU5URUdFUiwgMikpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZUxpc3QuaXRlbSgxKSwgbmV3IFByaW1pdGl2ZU51bWJlcihJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lOVEVHRVIsIDQpKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWVMaXN0Lml0ZW0oMiksIG5ldyBQcmltaXRpdmVOdW1iZXIoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19JTlRFR0VSLCA1KSk7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlTGlzdC5pdGVtKDMpLCBuZXcgUHJpbWl0aXZlTnVtYmVyKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSU5URUdFUiwgMikpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZUxpc3QuaXRlbSg0KSwgbmV3IFByaW1pdGl2ZU51bWJlcihJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lOVEVHRVIsIDUpKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWVMaXN0Lml0ZW0oNSksIG5ldyBQcmltaXRpdmVOdW1iZXIoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19JTlRFR0VSLCA0KSk7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlTGlzdC5pdGVtKDYpLCBuZXcgUHJpbWl0aXZlTnVtYmVyKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSU5URUdFUiwgNSkpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZUxpc3QuaXRlbSg3KSwgbmV3IFByaW1pdGl2ZU51bWJlcihJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lOVEVHRVIsIDkpKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWVMaXN0Lml0ZW0oOCksIG5ldyBQcmltaXRpdmVOdW1iZXIoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19JTlRFR0VSLCAzKSk7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlTGlzdC5pdGVtKDkpLCBuZXcgUHJpbWl0aXZlTnVtYmVyKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSU5URUdFUiwgMykpOwotCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiZm9udC1mYW1pbHkiKTsKLQkJYXNzZXJ0VHJ1ZSh2YWx1ZSBpbnN0YW5jZW9mIENTU1ZhbHVlTGlzdCk7Ci0KLQkJdmFsdWVMaXN0ID0gKENTU1ZhbHVlTGlzdCkgdmFsdWU7Ci0JCWFzc2VydEVxdWFscygzLCB2YWx1ZUxpc3QuZ2V0TGVuZ3RoKCkpOwotCi0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlTGlzdC5pdGVtKDApLCBuZXcgUHJpbWl0aXZlU3RyaW5nKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19JREVOVCwgIkFsYWJhbWEiKSk7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlTGlzdC5pdGVtKDEpLCBuZXcgUHJpbWl0aXZlU3RyaW5nKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfQ09NTUEsICIsIikpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZUxpc3QuaXRlbSgyKSwgbmV3IFByaW1pdGl2ZVN0cmluZyhDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSURFTlQsICJzZXJpZiIpKTsKLQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoImZvbnQtd2VpZ2h0Iik7Ci0JCWFzc2VydFRydWUodmFsdWUgaW5zdGFuY2VvZiBDU1NWYWx1ZUxpc3QpOwotCi0JCXZhbHVlTGlzdCA9IChDU1NWYWx1ZUxpc3QpIHZhbHVlOwotCQlhc3NlcnRFcXVhbHMoNSwgdmFsdWVMaXN0LmdldExlbmd0aCgpKTsKLQotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZUxpc3QuaXRlbSgwKSwgbmV3IFByaW1pdGl2ZU51bWJlcihJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lOVEVHRVIsIDMwMCkpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZUxpc3QuaXRlbSgxKSwgbmV3IFByaW1pdGl2ZVN0cmluZyhJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0NPTU1BLCAiLCIpKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWVMaXN0Lml0ZW0oMiksIG5ldyBQcmltaXRpdmVOdW1iZXIoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19JTlRFR0VSLCA0MDApKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWVMaXN0Lml0ZW0oMyksIG5ldyBQcmltaXRpdmVTdHJpbmcoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19DT01NQSwgIiwiKSk7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlTGlzdC5pdGVtKDQpLCBuZXcgUHJpbWl0aXZlTnVtYmVyKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSU5URUdFUiwgNTAwKSk7Ci0KLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJmb250LXN0eWxlIik7Ci0JCWFzc2VydFRydWUodmFsdWUgaW5zdGFuY2VvZiBDU1NWYWx1ZUxpc3QpOwotCi0JCXZhbHVlTGlzdCA9IChDU1NWYWx1ZUxpc3QpIHZhbHVlOwotCQlhc3NlcnRFcXVhbHMoMywgdmFsdWVMaXN0LmdldExlbmd0aCgpKTsKLQotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZUxpc3QuaXRlbSgwKSwgbmV3IFByaW1pdGl2ZVN0cmluZyhDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSURFTlQsICJpdGFsaWMiKSk7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlTGlzdC5pdGVtKDEpLCBuZXcgUHJpbWl0aXZlU3RyaW5nKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfQ09NTUEsICIsIikpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZUxpc3QuaXRlbSgyKSwgbmV3IFByaW1pdGl2ZVN0cmluZyhDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSURFTlQsICJvYmxpcXVlIikpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL21vZGVsL0NTU0ltcG9ydFJ1bGVUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9tb2RlbC9DU1NJbXBvcnRSdWxlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjJlYjhkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL21vZGVsL0NTU0ltcG9ydFJ1bGVUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLm1vZGVsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklDU1NEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSUNTU0ltcG9ydFJ1bGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklDU1NTdHlsZVNoZWV0OwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NJbXBvcnRSdWxlOwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NSdWxlOwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NSdWxlTGlzdDsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTU3R5bGVTaGVldDsKLWltcG9ydCBvcmcudzNjLmRvbS5zdHlsZXNoZWV0cy5NZWRpYUxpc3Q7Ci0KLXB1YmxpYyBjbGFzcyBDU1NJbXBvcnRSdWxlVGVzdCBleHRlbmRzIEFic3RyYWN0TW9kZWxUZXN0IHsKLQotCXB1YmxpYyB2b2lkIHRlc3RJbnNlcnRSdWxlRG91YmxlUXVvdGUoKSB7Ci0JCWNoZWNrSW5zZXJ0KCJAaW1wb3J0IFwiZHVtbXkuY3NzXCI7IiwgImR1bW15LmNzcyIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RJbnNlcnRSdWxlU2luZ2xlUXVvdGUoKSB7Ci0JCWNoZWNrSW5zZXJ0KCJAaW1wb3J0IFwnZHVtbXkuY3NzXCc7IiwgImR1bW15LmNzcyIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RJbnNlcnRSdWxlVXJsTm9RdW90ZSgpIHsKLQkJY2hlY2tJbnNlcnQoIkBpbXBvcnQgdXJsKGR1bW15LmNzcyk7IiwgImR1bW15LmNzcyIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RJbnNlcnRSdWxlVXJsRG91YmxlUXVvdGUoKSB7Ci0JCWNoZWNrSW5zZXJ0KCJAaW1wb3J0IHVybChcImR1bW15LmNzc1wiKTsiLCAiZHVtbXkuY3NzIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEluc2VydFJ1bGVVcmxTaW5nbGVRdW90ZSgpIHsKLQkJY2hlY2tJbnNlcnQoIkBpbXBvcnQgdXJsKFwnZHVtbXkuY3NzXCcpOyIsICJkdW1teS5jc3MiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SW5zZXJ0UnVsZU1lZGlhMSgpIHsKLQkJY2hlY2tJbnNlcnQoIkBpbXBvcnQgdXJsKFwiZHVtbXkuY3NzXCIpIG1lZGlhMTsiLCAiZHVtbXkuY3NzIiwgbmV3IFN0cmluZ1tdeyJtZWRpYTEifSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEluc2VydFJ1bGVNZWRpYTIoKSB7Ci0JCWNoZWNrSW5zZXJ0KCJAaW1wb3J0IHVybChcJ2R1bW15LmNzc1wnKSBtZWRpYTEsIG1lZGlhMjsiLCAiZHVtbXkuY3NzIiwgbmV3IFN0cmluZ1tdeyJtZWRpYTEiLCAibWVkaWEyIn0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGVSdWxlKCkgewotCQlJQ1NTU3R5bGVTaGVldCBzaGVldCA9IGdldFN0eWxlU2hlZXQoKTsKLQkJSUNTU0RvY3VtZW50IGRvYyA9IHNoZWV0OwotCQlJQ1NTSW1wb3J0UnVsZSBuZXdSdWxlID0gZG9jLmNyZWF0ZUNTU0ltcG9ydFJ1bGUoKTsKLQkJbmV3UnVsZS5zZXRIcmVmKCJkdW1teS5jc3MiKTsKLQkJTWVkaWFMaXN0IG5ld0xpc3QgPSBuZXdSdWxlLmdldE1lZGlhKCk7Ci0JCW5ld0xpc3QuYXBwZW5kTWVkaXVtKCJtZWRpYTEiKTsKLQkJbmV3TGlzdC5hcHBlbmRNZWRpdW0oIm1lZGlhMiIpOwotCQlzaGVldC5pbnNlcnRSdWxlQmVmb3JlKG5ld1J1bGUsIG51bGwpOwotCi0JCUNTU1J1bGVMaXN0IHJ1bGVMaXN0ID0gc2hlZXQuZ2V0Q3NzUnVsZXMoKTsKLQkJQ1NTUnVsZSBydWxlID0gcnVsZUxpc3QuaXRlbSgwKTsKLQkJYXNzZXJ0VHJ1ZShydWxlIGluc3RhbmNlb2YgQ1NTSW1wb3J0UnVsZSk7Ci0JCUNTU0ltcG9ydFJ1bGUgaW1wb3J0UnVsZSA9IChDU1NJbXBvcnRSdWxlKSBydWxlOwotCQlhc3NlcnRFcXVhbHMoImR1bW15LmNzcyIsIGltcG9ydFJ1bGUuZ2V0SHJlZigpKTsKLQkJTWVkaWFMaXN0IG1lZGlhTGlzdCA9IGltcG9ydFJ1bGUuZ2V0TWVkaWEoKTsKLQkJYXNzZXJ0RXF1YWxzKDIsIG1lZGlhTGlzdC5nZXRMZW5ndGgoKSk7Ci0JCWFzc2VydEVxdWFscygibWVkaWExIiwgbWVkaWFMaXN0Lml0ZW0oMCkpOwotCQlhc3NlcnRFcXVhbHMoIm1lZGlhMiIsIG1lZGlhTGlzdC5pdGVtKDEpKTsKLQotCQlhc3NlcnRFcXVhbHMoIkBpbXBvcnQgdXJsKFwiZHVtbXkuY3NzXCIpIG1lZGlhMSwgbWVkaWEyOyIsIGltcG9ydFJ1bGUuZ2V0Q3NzVGV4dCgpKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgY2hlY2tJbnNlcnQoU3RyaW5nIHJ1bGVTdHJpbmcsIFN0cmluZyBocmVmLCBTdHJpbmdbXSBtZWRpYSkgewotCQlDU1NTdHlsZVNoZWV0IHNoZWV0ID0gZ2V0U3R5bGVTaGVldCgpOwotCi0JCWFzc2VydEVxdWFscygwLCBzaGVldC5pbnNlcnRSdWxlKHJ1bGVTdHJpbmcsIDApKTsKLQotCQlDU1NSdWxlTGlzdCBydWxlTGlzdCA9IHNoZWV0LmdldENzc1J1bGVzKCk7Ci0JCUNTU1J1bGUgcnVsZSA9IHJ1bGVMaXN0Lml0ZW0oMCk7Ci0JCWFzc2VydFRydWUocnVsZSBpbnN0YW5jZW9mIENTU0ltcG9ydFJ1bGUpOwotCi0JCUNTU0ltcG9ydFJ1bGUgaW1wb3J0UnVsZSA9IChDU1NJbXBvcnRSdWxlKSBydWxlOwotCQlhc3NlcnRFcXVhbHMoaHJlZiwgaW1wb3J0UnVsZS5nZXRIcmVmKCkpOwotCi0JCWlmIChtZWRpYSAhPSBudWxsKSB7Ci0JCQlhc3NlcnRFcXVhbHMobWVkaWEubGVuZ3RoLCBpbXBvcnRSdWxlLmdldE1lZGlhKCkuZ2V0TGVuZ3RoKCkpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBtZWRpYS5sZW5ndGg7IGkrKykgewotCQkJCWFzc2VydEVxdWFscyhtZWRpYVtpXSwgaW1wb3J0UnVsZS5nZXRNZWRpYSgpLml0ZW0oaSkpOwotCQkJfQotCQl9Ci0KLQkJYXNzZXJ0RXF1YWxzKHJ1bGVTdHJpbmcsIGltcG9ydFJ1bGUuZ2V0Q3NzVGV4dCgpKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9tb2RlbC9DU1NNZWRpYVJ1bGVUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9tb2RlbC9DU1NNZWRpYVJ1bGVUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4ZjI4NDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvbW9kZWwvQ1NTTWVkaWFSdWxlVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5tb2RlbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JQ1NTRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklDU1NNZWRpYVJ1bGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklDU1NTdHlsZVNoZWV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy51dGlsLkZpbGVVdGlsOwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NNZWRpYVJ1bGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1J1bGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1J1bGVMaXN0OwotaW1wb3J0IG9yZy53M2MuZG9tLnN0eWxlc2hlZXRzLk1lZGlhTGlzdDsKLQotcHVibGljIGNsYXNzIENTU01lZGlhUnVsZVRlc3QgZXh0ZW5kcyBBYnN0cmFjdE1vZGVsVGVzdCB7Ci0JcHVibGljIHZvaWQgdGVzdENyZWF0ZVJ1bGUoKSB7Ci0JCUlDU1NTdHlsZVNoZWV0IHNoZWV0ID0gZ2V0U3R5bGVTaGVldCgpOwotCQlJQ1NTRG9jdW1lbnQgZG9jID0gc2hlZXQ7Ci0JCUlDU1NNZWRpYVJ1bGUgbmV3UnVsZSA9IGRvYy5jcmVhdGVDU1NNZWRpYVJ1bGUoKTsKLQkJTWVkaWFMaXN0IG5ld0xpc3QgPSBuZXdSdWxlLmdldE1lZGlhKCk7Ci0JCW5ld0xpc3QuYXBwZW5kTWVkaXVtKCJtZWRpYTEiKTsKLQkJbmV3TGlzdC5hcHBlbmRNZWRpdW0oIm1lZGlhMiIpOwotCQlzaGVldC5pbnNlcnRSdWxlQmVmb3JlKG5ld1J1bGUsIG51bGwpOwotCi0JCUNTU1J1bGVMaXN0IHJ1bGVMaXN0ID0gc2hlZXQuZ2V0Q3NzUnVsZXMoKTsKLQkJQ1NTUnVsZSBydWxlID0gcnVsZUxpc3QuaXRlbSgwKTsKLQkJYXNzZXJ0VHJ1ZShydWxlIGluc3RhbmNlb2YgQ1NTTWVkaWFSdWxlKTsKLQkJQ1NTTWVkaWFSdWxlIG1lZGlhUnVsZSA9IChDU1NNZWRpYVJ1bGUpIHJ1bGU7Ci0KLQkJTWVkaWFMaXN0IG1lZGlhTGlzdCA9IG1lZGlhUnVsZS5nZXRNZWRpYSgpOwotCQlhc3NlcnRFcXVhbHMoMiwgbWVkaWFMaXN0LmdldExlbmd0aCgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJtZWRpYTEiLCBtZWRpYUxpc3QuaXRlbSgwKSk7Ci0JCWFzc2VydEVxdWFscygibWVkaWEyIiwgbWVkaWFMaXN0Lml0ZW0oMSkpOwotCi0JCWFzc2VydEVxdWFscygiQG1lZGlhIG1lZGlhMSwgbWVkaWEyIHsiICsgRmlsZVV0aWwuY29tbW9uRU9MICsgIn0iLCBtZWRpYVJ1bGUuZ2V0Q3NzVGV4dCgpKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9tb2RlbC9DU1NQYWdlUnVsZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL21vZGVsL0NTU1BhZ2VSdWxlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MjliYzAyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL21vZGVsL0NTU1BhZ2VSdWxlVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjE3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMubW9kZWw7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklDU1NNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMudXRpbC5GaWxlVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NQYWdlUnVsZTsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTUHJpbWl0aXZlVmFsdWU7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1J1bGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1J1bGVMaXN0OwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NTdHlsZURlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NTdHlsZVNoZWV0OwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NWYWx1ZTsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTVmFsdWVMaXN0OwotCi1wdWJsaWMgY2xhc3MgQ1NTUGFnZVJ1bGVUZXN0IGV4dGVuZHMgQWJzdHJhY3RNb2RlbFRlc3QgewotCXB1YmxpYyB2b2lkIHRlc3RJbnNlcnRUZXh0MSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUlDU1NNb2RlbCBtb2RlbCA9IGdldE1vZGVsKCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCXN0cnVjdHVyZWREb2N1bWVudC5zZXQoRmlsZVV0aWwuY3JlYXRlU3RyaW5nKCJzcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcyIsICJDU1NQYWdlUnVsZVRlc3QuY3NzIikpOwotCi0JCUNTU1N0eWxlU2hlZXQgc2hlZXQgPSAoQ1NTU3R5bGVTaGVldCkgbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJQ1NTUnVsZUxpc3QgcnVsZUxpc3QgPSBzaGVldC5nZXRDc3NSdWxlcygpOwotCQlhc3NlcnRFcXVhbHMoNiwgcnVsZUxpc3QuZ2V0TGVuZ3RoKCkpOwotCi0JCUNTU1J1bGUgcnVsZTsKLQkJQ1NTU3R5bGVEZWNsYXJhdGlvbiBkZWNsYXJhdGlvbjsKLQkJQ1NTVmFsdWUgdmFsdWU7Ci0JCUNTU1ZhbHVlTGlzdCB2YWx1ZUxpc3Q7Ci0KLQkJLy8gcnVsZSAxCi0KLQkJcnVsZSA9IHJ1bGVMaXN0Lml0ZW0oMCk7Ci0JCWFzc2VydEVxdWFscyhDU1NSdWxlLlBBR0VfUlVMRSwgcnVsZS5nZXRUeXBlKCkpOwotCQlhc3NlcnRUcnVlKHJ1bGUgaW5zdGFuY2VvZiBDU1NQYWdlUnVsZSk7Ci0KLQkJZGVjbGFyYXRpb24gPSAoKENTU1BhZ2VSdWxlKSBydWxlKS5nZXRTdHlsZSgpOwotCQlhc3NlcnRFcXVhbHMoMiwgZGVjbGFyYXRpb24uZ2V0TGVuZ3RoKCkpOwotCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgic2l6ZSIpOwotCQlhc3NlcnRUcnVlKHZhbHVlIGluc3RhbmNlb2YgQ1NTVmFsdWVMaXN0KTsKLQotCQl2YWx1ZUxpc3QgPSAoQ1NTVmFsdWVMaXN0KSB2YWx1ZTsKLQkJYXNzZXJ0RXF1YWxzKDIsIHZhbHVlTGlzdC5nZXRMZW5ndGgoKSk7Ci0KLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWVMaXN0Lml0ZW0oMCksIG5ldyBQcmltaXRpdmVOdW1iZXIoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lOLCAoZmxvYXQpIDguNSkpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZUxpc3QuaXRlbSgxKSwgbmV3IFByaW1pdGl2ZU51bWJlcihDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSU4sIDExKSk7Ci0KLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJtYXJnaW4iKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWUsIG5ldyBQcmltaXRpdmVOdW1iZXIoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0NNLCAyKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEluc2VydFRleHQyKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSUNTU01vZGVsIG1vZGVsID0gZ2V0TW9kZWwoKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJc3RydWN0dXJlZERvY3VtZW50LnNldChGaWxlVXRpbC5jcmVhdGVTdHJpbmcoInNyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzIiwgIkNTU1BhZ2VSdWxlVGVzdC5jc3MiKSk7Ci0KLQkJQ1NTU3R5bGVTaGVldCBzaGVldCA9IChDU1NTdHlsZVNoZWV0KSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQlDU1NSdWxlTGlzdCBydWxlTGlzdCA9IHNoZWV0LmdldENzc1J1bGVzKCk7Ci0JCWFzc2VydEVxdWFscyg2LCBydWxlTGlzdC5nZXRMZW5ndGgoKSk7Ci0KLQkJQ1NTUnVsZSBydWxlOwotCQlDU1NTdHlsZURlY2xhcmF0aW9uIGRlY2xhcmF0aW9uOwotCQlDU1NWYWx1ZSB2YWx1ZTsKLQotCQkvLyBydWxlIDIKLQotCQlydWxlID0gcnVsZUxpc3QuaXRlbSgxKTsKLQkJYXNzZXJ0RXF1YWxzKENTU1J1bGUuUEFHRV9SVUxFLCBydWxlLmdldFR5cGUoKSk7Ci0JCWFzc2VydFRydWUocnVsZSBpbnN0YW5jZW9mIENTU1BhZ2VSdWxlKTsKLQotCQlkZWNsYXJhdGlvbiA9ICgoQ1NTUGFnZVJ1bGUpIHJ1bGUpLmdldFN0eWxlKCk7Ci0JCWFzc2VydEVxdWFscygyLCBkZWNsYXJhdGlvbi5nZXRMZW5ndGgoKSk7Ci0KLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJzaXplIik7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlLCBuZXcgUHJpbWl0aXZlU3RyaW5nKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19JREVOVCwgImF1dG8iKSk7Ci0KLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJtYXJnaW4iKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWUsIG5ldyBQcmltaXRpdmVOdW1iZXIoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX1BFUkNFTlRBR0UsIDEwKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEluc2VydFRleHQzKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSUNTU01vZGVsIG1vZGVsID0gZ2V0TW9kZWwoKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJc3RydWN0dXJlZERvY3VtZW50LnNldChGaWxlVXRpbC5jcmVhdGVTdHJpbmcoInNyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzIiwgIkNTU1BhZ2VSdWxlVGVzdC5jc3MiKSk7Ci0KLQkJQ1NTU3R5bGVTaGVldCBzaGVldCA9IChDU1NTdHlsZVNoZWV0KSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQlDU1NSdWxlTGlzdCBydWxlTGlzdCA9IHNoZWV0LmdldENzc1J1bGVzKCk7Ci0JCWFzc2VydEVxdWFscyg2LCBydWxlTGlzdC5nZXRMZW5ndGgoKSk7Ci0KLQkJQ1NTUnVsZSBydWxlOwotCQlDU1NTdHlsZURlY2xhcmF0aW9uIGRlY2xhcmF0aW9uOwotCQlDU1NWYWx1ZSB2YWx1ZTsKLQotCQkvLyBydWxlIDMKLQotCQlydWxlID0gcnVsZUxpc3QuaXRlbSgyKTsKLQkJYXNzZXJ0RXF1YWxzKENTU1J1bGUuUEFHRV9SVUxFLCBydWxlLmdldFR5cGUoKSk7Ci0JCWFzc2VydFRydWUocnVsZSBpbnN0YW5jZW9mIENTU1BhZ2VSdWxlKTsKLQotCQlhc3NlcnRFcXVhbHMoIjpsZWZ0IiwgKChDU1NQYWdlUnVsZSkgcnVsZSkuZ2V0U2VsZWN0b3JUZXh0KCkpOwotCi0JCWRlY2xhcmF0aW9uID0gKChDU1NQYWdlUnVsZSkgcnVsZSkuZ2V0U3R5bGUoKTsKLQkJYXNzZXJ0RXF1YWxzKDIsIGRlY2xhcmF0aW9uLmdldExlbmd0aCgpKTsKLQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIm1hcmdpbi1sZWZ0Iik7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlLCBuZXcgUHJpbWl0aXZlTnVtYmVyKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19DTSwgNCkpOwotCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgibWFyZ2luLXJpZ2h0Iik7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlLCBuZXcgUHJpbWl0aXZlTnVtYmVyKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19DTSwgMykpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RJbnNlcnRUZXh0NCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUlDU1NNb2RlbCBtb2RlbCA9IGdldE1vZGVsKCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCXN0cnVjdHVyZWREb2N1bWVudC5zZXQoRmlsZVV0aWwuY3JlYXRlU3RyaW5nKCJzcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcyIsICJDU1NQYWdlUnVsZVRlc3QuY3NzIikpOwotCi0JCUNTU1N0eWxlU2hlZXQgc2hlZXQgPSAoQ1NTU3R5bGVTaGVldCkgbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJQ1NTUnVsZUxpc3QgcnVsZUxpc3QgPSBzaGVldC5nZXRDc3NSdWxlcygpOwotCQlhc3NlcnRFcXVhbHMoNiwgcnVsZUxpc3QuZ2V0TGVuZ3RoKCkpOwotCi0JCUNTU1J1bGUgcnVsZTsKLQkJQ1NTU3R5bGVEZWNsYXJhdGlvbiBkZWNsYXJhdGlvbjsKLQkJQ1NTVmFsdWUgdmFsdWU7Ci0KLQkJLy8gcnVsZSA0Ci0KLQkJcnVsZSA9IHJ1bGVMaXN0Lml0ZW0oMyk7Ci0JCWFzc2VydEVxdWFscyhDU1NSdWxlLlBBR0VfUlVMRSwgcnVsZS5nZXRUeXBlKCkpOwotCQlhc3NlcnRUcnVlKHJ1bGUgaW5zdGFuY2VvZiBDU1NQYWdlUnVsZSk7Ci0KLQkJYXNzZXJ0RXF1YWxzKCI6cmlnaHQiLCAoKENTU1BhZ2VSdWxlKSBydWxlKS5nZXRTZWxlY3RvclRleHQoKSk7Ci0KLQkJZGVjbGFyYXRpb24gPSAoKENTU1BhZ2VSdWxlKSBydWxlKS5nZXRTdHlsZSgpOwotCQlhc3NlcnRFcXVhbHMoMiwgZGVjbGFyYXRpb24uZ2V0TGVuZ3RoKCkpOwotCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgibWFyZ2luLWxlZnQiKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWUsIG5ldyBQcmltaXRpdmVOdW1iZXIoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0NNLCAzKSk7Ci0KLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJtYXJnaW4tcmlnaHQiKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWUsIG5ldyBQcmltaXRpdmVOdW1iZXIoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0NNLCA0KSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEluc2VydFRleHQ1KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSUNTU01vZGVsIG1vZGVsID0gZ2V0TW9kZWwoKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJc3RydWN0dXJlZERvY3VtZW50LnNldChGaWxlVXRpbC5jcmVhdGVTdHJpbmcoInNyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzIiwgIkNTU1BhZ2VSdWxlVGVzdC5jc3MiKSk7Ci0KLQkJQ1NTU3R5bGVTaGVldCBzaGVldCA9IChDU1NTdHlsZVNoZWV0KSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQlDU1NSdWxlTGlzdCBydWxlTGlzdCA9IHNoZWV0LmdldENzc1J1bGVzKCk7Ci0JCWFzc2VydEVxdWFscyg2LCBydWxlTGlzdC5nZXRMZW5ndGgoKSk7Ci0KLQkJQ1NTUnVsZSBydWxlOwotCQlDU1NTdHlsZURlY2xhcmF0aW9uIGRlY2xhcmF0aW9uOwotCQlDU1NWYWx1ZSB2YWx1ZTsKLQkJQ1NTVmFsdWVMaXN0IHZhbHVlTGlzdDsKLQotCQkvLyBydWxlIDUKLQotCQlydWxlID0gcnVsZUxpc3QuaXRlbSg0KTsKLQkJYXNzZXJ0RXF1YWxzKENTU1J1bGUuUEFHRV9SVUxFLCBydWxlLmdldFR5cGUoKSk7Ci0JCWFzc2VydFRydWUocnVsZSBpbnN0YW5jZW9mIENTU1BhZ2VSdWxlKTsKLQotCQlhc3NlcnRFcXVhbHMoIm5hcnJvdyIsICgoQ1NTUGFnZVJ1bGUpIHJ1bGUpLmdldFNlbGVjdG9yVGV4dCgpKTsKLQotCQlkZWNsYXJhdGlvbiA9ICgoQ1NTUGFnZVJ1bGUpIHJ1bGUpLmdldFN0eWxlKCk7Ci0JCWFzc2VydEVxdWFscygxLCBkZWNsYXJhdGlvbi5nZXRMZW5ndGgoKSk7Ci0KLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJzaXplIik7Ci0JCWFzc2VydFRydWUodmFsdWUgaW5zdGFuY2VvZiBDU1NWYWx1ZUxpc3QpOwotCi0JCXZhbHVlTGlzdCA9IChDU1NWYWx1ZUxpc3QpIHZhbHVlOwotCQlhc3NlcnRFcXVhbHMoMiwgdmFsdWVMaXN0LmdldExlbmd0aCgpKTsKLQotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZUxpc3QuaXRlbSgwKSwgbmV3IFByaW1pdGl2ZU51bWJlcihDU1NQcmltaXRpdmVWYWx1ZS5DU1NfQ00sIDkpKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWVMaXN0Lml0ZW0oMSksIG5ldyBQcmltaXRpdmVOdW1iZXIoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0NNLCAxOCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RJbnNlcnRUZXh0NigpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUlDU1NNb2RlbCBtb2RlbCA9IGdldE1vZGVsKCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCXN0cnVjdHVyZWREb2N1bWVudC5zZXQoRmlsZVV0aWwuY3JlYXRlU3RyaW5nKCJzcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcyIsICJDU1NQYWdlUnVsZVRlc3QuY3NzIikpOwotCi0JCUNTU1N0eWxlU2hlZXQgc2hlZXQgPSAoQ1NTU3R5bGVTaGVldCkgbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJQ1NTUnVsZUxpc3QgcnVsZUxpc3QgPSBzaGVldC5nZXRDc3NSdWxlcygpOwotCQlhc3NlcnRFcXVhbHMoNiwgcnVsZUxpc3QuZ2V0TGVuZ3RoKCkpOwotCi0JCUNTU1J1bGUgcnVsZTsKLQkJQ1NTU3R5bGVEZWNsYXJhdGlvbiBkZWNsYXJhdGlvbjsKLQkJQ1NTVmFsdWUgdmFsdWU7Ci0KLQkJLy8gcnVsZSA2Ci0KLQkJcnVsZSA9IHJ1bGVMaXN0Lml0ZW0oNSk7Ci0JCWFzc2VydEVxdWFscyhDU1NSdWxlLlBBR0VfUlVMRSwgcnVsZS5nZXRUeXBlKCkpOwotCQlhc3NlcnRUcnVlKHJ1bGUgaW5zdGFuY2VvZiBDU1NQYWdlUnVsZSk7Ci0KLQkJYXNzZXJ0RXF1YWxzKCJyb3RhdGVkIiwgKChDU1NQYWdlUnVsZSkgcnVsZSkuZ2V0U2VsZWN0b3JUZXh0KCkpOwotCi0JCWRlY2xhcmF0aW9uID0gKChDU1NQYWdlUnVsZSkgcnVsZSkuZ2V0U3R5bGUoKTsKLQkJYXNzZXJ0RXF1YWxzKDEsIGRlY2xhcmF0aW9uLmdldExlbmd0aCgpKTsKLQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoInNpemUiKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWUsIG5ldyBQcmltaXRpdmVTdHJpbmcoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lERU5ULCAibGFuZHNjYXBlIikpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL21vZGVsL0NTU1N0eWxlUnVsZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL21vZGVsL0NTU1N0eWxlUnVsZVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTg5NjYyZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9tb2RlbC9DU1NTdHlsZVJ1bGVUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5tb2RlbDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSUNTU01vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JQ1NTUHJpbWl0aXZlVmFsdWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLnV0aWwuRmlsZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTUHJpbWl0aXZlVmFsdWU7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1J1bGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1J1bGVMaXN0OwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NTdHlsZURlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NTdHlsZVJ1bGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1N0eWxlU2hlZXQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1ZhbHVlOwotCi1wdWJsaWMgY2xhc3MgQ1NTU3R5bGVSdWxlVGVzdCBleHRlbmRzIEFic3RyYWN0TW9kZWxUZXN0IHsKLQlwdWJsaWMgdm9pZCB0ZXN0SW5zZXJ0VGV4dE51bWJlcnMoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlJQ1NTTW9kZWwgbW9kZWwgPSBnZXRNb2RlbCgpOwotCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQlzdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0KEZpbGVVdGlsLmNyZWF0ZVN0cmluZygic3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMiLCAiQ1NTU3R5bGVSdWxlVGVzdC5jc3MiKSk7Ci0KLQkJQ1NTU3R5bGVTaGVldCBzaGVldCA9IChDU1NTdHlsZVNoZWV0KSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQlDU1NSdWxlTGlzdCBydWxlTGlzdCA9IHNoZWV0LmdldENzc1J1bGVzKCk7Ci0JCWFzc2VydEVxdWFscygzLCBydWxlTGlzdC5nZXRMZW5ndGgoKSk7Ci0KLQkJQ1NTUnVsZSBydWxlOwotCQlDU1NTdHlsZURlY2xhcmF0aW9uIGRlY2xhcmF0aW9uOwotCQlDU1NWYWx1ZSB2YWx1ZTsKLQotCQlydWxlID0gcnVsZUxpc3QuaXRlbSgwKTsKLQkJYXNzZXJ0RXF1YWxzKENTU1J1bGUuU1RZTEVfUlVMRSwgcnVsZS5nZXRUeXBlKCkpOwotCQlhc3NlcnRUcnVlKHJ1bGUgaW5zdGFuY2VvZiBDU1NTdHlsZVJ1bGUpOwotCi0JCWRlY2xhcmF0aW9uID0gKChDU1NTdHlsZVJ1bGUpIHJ1bGUpLmdldFN0eWxlKCk7Ci0JCWFzc2VydEVxdWFscygyMCwgZGVjbGFyYXRpb24uZ2V0TGVuZ3RoKCkpOwotCi0JCS8vIDAxCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiTlVNQkVSIik7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlLCBuZXcgUHJpbWl0aXZlTnVtYmVyKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19OVU1CRVIsIDEyMy40NTZmKSk7Ci0KLQkJLy8gMDIKLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJQRVJDRU5UQUdFIik7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlLCBuZXcgUHJpbWl0aXZlTnVtYmVyKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19QRVJDRU5UQUdFLCAxMjMuNDU2ZikpOwotCi0JCS8vIDAzCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiRU1TIik7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlLCBuZXcgUHJpbWl0aXZlTnVtYmVyKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19FTVMsIDEyMy40NTZmKSk7Ci0KLQkJLy8gMDQKLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJFWFMiKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWUsIG5ldyBQcmltaXRpdmVOdW1iZXIoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0VYUywgMTIzLjQ1NmYpKTsKLQotCQkvLyAwNQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIlBYIik7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlLCBuZXcgUHJpbWl0aXZlTnVtYmVyKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19QWCwgKzEyMy40NTZmKSk7Ci0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiUFgyIik7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlLCBuZXcgUHJpbWl0aXZlTnVtYmVyKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19QWCwgLTEyM2YpKTsKLQotCi0JCQotCQkvLyAwNgotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIkNNIik7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlLCBuZXcgUHJpbWl0aXZlTnVtYmVyKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19DTSwgMTIzLjQ1NmYpKTsKLQotCQkvLyAwNwotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIk1NIik7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlLCBuZXcgUHJpbWl0aXZlTnVtYmVyKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19NTSwgMTIzLjQ1NmYpKTsKLQotCQkvLyAwOAotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIklOIik7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlLCBuZXcgUHJpbWl0aXZlTnVtYmVyKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19JTiwgMTIzLjQ1NmYpKTsKLQotCQkvLyAwOQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIlBUIik7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlLCBuZXcgUHJpbWl0aXZlTnVtYmVyKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19QVCwgMTIzLjQ1NmYpKTsKLQotCQkvLyAxMAotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIlBDIik7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlLCBuZXcgUHJpbWl0aXZlTnVtYmVyKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19QQywgMTIzLjQ1NmYpKTsKLQotCQkvLyAxMQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIkRFRyIpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZSwgbmV3IFByaW1pdGl2ZU51bWJlcihDU1NQcmltaXRpdmVWYWx1ZS5DU1NfREVHLCAtMTIzLjQ1NmYpKTsKLQotCQkvLyAxMgotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIlJBRCIpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZSwgbmV3IFByaW1pdGl2ZU51bWJlcihDU1NQcmltaXRpdmVWYWx1ZS5DU1NfUkFELCAxMjMuNDU2ZikpOwotCi0JCS8vIDEzCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiR1JBRCIpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZSwgbmV3IFByaW1pdGl2ZU51bWJlcihDU1NQcmltaXRpdmVWYWx1ZS5DU1NfR1JBRCwgMTIzLjQ1NmYpKTsKLQotCQkvLyAxNAotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIk1TIik7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlLCBuZXcgUHJpbWl0aXZlTnVtYmVyKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19NUywgMTIzLjQ1NmYpKTsKLQotCQkvLyAxNQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIlMiKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWUsIG5ldyBQcmltaXRpdmVOdW1iZXIoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX1MsIDEyMy40NTZmKSk7Ci0KLQkJLy8gMTYKLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJIWiIpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZSwgbmV3IFByaW1pdGl2ZU51bWJlcihDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSFosIDEyMy40NTZmKSk7Ci0KLQkJLy8gMTcKLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJLSFoiKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWUsIG5ldyBQcmltaXRpdmVOdW1iZXIoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0tIWiwgMTIzLjQ1NmYpKTsKLQotCQkvLyAxOAotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIkRJTUVOU0lPTiIpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZSwgbmV3IFByaW1pdGl2ZU51bWJlcihDU1NQcmltaXRpdmVWYWx1ZS5DU1NfRElNRU5TSU9OLCAtMTIzLjQ1NmYpKTsKLQotCQkvLyAxOQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIklOVEVHRVIiKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWUsIG5ldyBQcmltaXRpdmVOdW1iZXIoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19JTlRFR0VSLCAxMjMpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SW5zZXJ0VGV4dFN0cmluZ3MoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlJQ1NTTW9kZWwgbW9kZWwgPSBnZXRNb2RlbCgpOwotCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQlzdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0KEZpbGVVdGlsLmNyZWF0ZVN0cmluZygic3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMiLCAiQ1NTU3R5bGVSdWxlVGVzdC5jc3MiKSk7Ci0KLQkJQ1NTU3R5bGVTaGVldCBzaGVldCA9IChDU1NTdHlsZVNoZWV0KSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQlDU1NSdWxlTGlzdCBydWxlTGlzdCA9IHNoZWV0LmdldENzc1J1bGVzKCk7Ci0JCWFzc2VydEVxdWFscygzLCBydWxlTGlzdC5nZXRMZW5ndGgoKSk7Ci0KLQkJQ1NTUnVsZSBydWxlOwotCQlDU1NTdHlsZURlY2xhcmF0aW9uIGRlY2xhcmF0aW9uOwotCQlDU1NWYWx1ZSB2YWx1ZTsKLQotCQlydWxlID0gcnVsZUxpc3QuaXRlbSgxKTsKLQkJYXNzZXJ0RXF1YWxzKENTU1J1bGUuU1RZTEVfUlVMRSwgcnVsZS5nZXRUeXBlKCkpOwotCQlhc3NlcnRUcnVlKHJ1bGUgaW5zdGFuY2VvZiBDU1NTdHlsZVJ1bGUpOwotCi0JCWRlY2xhcmF0aW9uID0gKChDU1NTdHlsZVJ1bGUpIHJ1bGUpLmdldFN0eWxlKCk7Ci0JCWFzc2VydEVxdWFscygxMSwgZGVjbGFyYXRpb24uZ2V0TGVuZ3RoKCkpOwotCi0JCS8vIDAxCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiU1RSSU5HIik7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlLCBuZXcgUHJpbWl0aXZlU3RyaW5nKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19TVFJJTkcsICJzdHJpbmciKSk7Ci0KLQkJLy8gMDIKLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJVUkkiKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWUsIG5ldyBQcmltaXRpdmVTdHJpbmcoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX1VSSSwgImh0dHA6Ly93d3cuaWJtLmNvbS8iKSk7Ci0KLQkJLy8gMDMKLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJJREVOVCIpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZSwgbmV3IFByaW1pdGl2ZVN0cmluZyhDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSURFTlQsICJsZWZ0IikpOwotCi0JCS8vIDA0Ci0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiSEFTSCIpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZSwgbmV3IFByaW1pdGl2ZVN0cmluZyhJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0hBU0gsICIjYWJjZGVmIikpOwotCi0JCS8vIDA1Ci0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiVVJBTkdFIik7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlLCBuZXcgUHJpbWl0aXZlU3RyaW5nKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfVVJBTkdFLCAiVSsyMEE3IikpOwotCi0JCS8vIDA2Ci0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiU0xBU0giKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWUsIG5ldyBQcmltaXRpdmVTdHJpbmcoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19TTEFTSCwgIi8iKSk7Ci0KLQkJLy8gMDcKLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJDT01NQSIpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZSwgbmV3IFByaW1pdGl2ZVN0cmluZyhJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0NPTU1BLCAiLCIpKTsKLQotCQkvLyAwOAotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIklOSEVSSVRfUFJJTUlUSVZFIik7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlLCBuZXcgUHJpbWl0aXZlU3RyaW5nKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSU5IRVJJVF9QUklNSVRJVkUsICJpbmhlcml0IikpOwotCi0JCS8vIDA5Ci0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiQVRUUiIpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZSwgbmV3IFByaW1pdGl2ZVN0cmluZyhDU1NQcmltaXRpdmVWYWx1ZS5DU1NfQVRUUiwgIktFWSIpKTsKLQotCQkvLyAxMAotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIkZPUk1BVCIpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZSwgbmV3IFByaW1pdGl2ZVN0cmluZyhJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0ZPUk1BVCwgInRydWVkb2MiKSk7Ci0KLQkJLy8gMTEKLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJMT0NBTCIpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZSwgbmV3IFByaW1pdGl2ZVN0cmluZyhJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0xPQ0FMLCAiRXhjZWxzaW9yIFJvbWFuIikpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RJbnNlcnRUZXh0RnVuY3Rpb25zKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSUNTU01vZGVsIG1vZGVsID0gZ2V0TW9kZWwoKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJc3RydWN0dXJlZERvY3VtZW50LnNldChGaWxlVXRpbC5jcmVhdGVTdHJpbmcoInNyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzIiwgIkNTU1N0eWxlUnVsZVRlc3QuY3NzIikpOwotCi0JCUNTU1N0eWxlU2hlZXQgc2hlZXQgPSAoQ1NTU3R5bGVTaGVldCkgbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJQ1NTUnVsZUxpc3QgcnVsZUxpc3QgPSBzaGVldC5nZXRDc3NSdWxlcygpOwotCQlhc3NlcnRFcXVhbHMoMywgcnVsZUxpc3QuZ2V0TGVuZ3RoKCkpOwotCi0JCUNTU1J1bGUgcnVsZTsKLQkJQ1NTU3R5bGVEZWNsYXJhdGlvbiBkZWNsYXJhdGlvbjsKLQkJQ1NTVmFsdWUgdmFsdWU7Ci0KLQkJcnVsZSA9IHJ1bGVMaXN0Lml0ZW0oMik7Ci0JCWFzc2VydEVxdWFscyhDU1NSdWxlLlNUWUxFX1JVTEUsIHJ1bGUuZ2V0VHlwZSgpKTsKLQkJYXNzZXJ0VHJ1ZShydWxlIGluc3RhbmNlb2YgQ1NTU3R5bGVSdWxlKTsKLQotCQlkZWNsYXJhdGlvbiA9ICgoQ1NTU3R5bGVSdWxlKSBydWxlKS5nZXRTdHlsZSgpOwotCQlhc3NlcnRFcXVhbHMoMywgZGVjbGFyYXRpb24uZ2V0TGVuZ3RoKCkpOwotCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiQ09VTlRFUiIpOwotCQljaGVja1ByaW1pdGl2ZUNvdW50ZXIodmFsdWUsICJwYXItbnVtIiwgInVwcGVyLXJvbWFuIiwgbnVsbCk7Ci0KLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJSRUNUIik7Ci0JCWNoZWNrUHJpbWl0aXZlUmVjdCh2YWx1ZSwgbmV3IE9iamVjdFtde25ldyBQcmltaXRpdmVOdW1iZXIoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19JTlRFR0VSLCAxMiksIG5ldyBQcmltaXRpdmVOdW1iZXIoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19JTlRFR0VSLCAzNCksIG5ldyBQcmltaXRpdmVOdW1iZXIoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19JTlRFR0VSLCA1NiksIG5ldyBQcmltaXRpdmVOdW1iZXIoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19JTlRFR0VSLCA3OCl9KTsKLQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIlJHQkNPTE9SIik7Ci0JCWNoZWNrUHJpbWl0aXZlUmdiKHZhbHVlLCBuZXcgT2JqZWN0W117bmV3IFByaW1pdGl2ZU51bWJlcihJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lOVEVHRVIsIDI1NSksIG5ldyBQcmltaXRpdmVOdW1iZXIoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19JTlRFR0VSLCAxMjgpLCBuZXcgUHJpbWl0aXZlTnVtYmVyKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSU5URUdFUiwgMCl9KTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL21vZGVsL0NTU1N0eWxlU2hlZXRUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9tb2RlbC9DU1NTdHlsZVNoZWV0VGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjNjZWI0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL21vZGVsL0NTU1N0eWxlU2hlZXRUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcwotICogcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcwotICogb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kCi0gKiBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMubW9kZWw7Ci0KLWltcG9ydCBvcmcudzNjLmRvbS5ET01FeGNlcHRpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1J1bGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1J1bGVMaXN0OwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NTdHlsZVNoZWV0OwotCi0KLXB1YmxpYyBjbGFzcyBDU1NTdHlsZVNoZWV0VGVzdCBleHRlbmRzIEFic3RyYWN0TW9kZWxUZXN0IHsKLQlwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgUlVMRV9IMSA9ICJIMSB7IGNvbG9yIDogcmVkOyB9IjsKLQlwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgUlVMRV9IMiA9ICJIMiB7IGNvbG9yIDogcmVkOyB9IjsKLQlwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgUlVMRV9IMyA9ICJIMyB7IGNvbG9yIDogcmVkOyB9IjsKLQotCXB1YmxpYyB2b2lkIHRlc3RJbnNlcnRSdWxlKCkgewotCQlDU1NTdHlsZVNoZWV0IHNoZWV0ID0gZ2V0U3R5bGVTaGVldCgpOwotCi0JCWFzc2VydEVxdWFscygwLCBzaGVldC5pbnNlcnRSdWxlKFJVTEVfSDMsIDApKTsKLQkJYXNzZXJ0RXF1YWxzKDAsIHNoZWV0Lmluc2VydFJ1bGUoUlVMRV9IMSwgMCkpOwotCQlhc3NlcnRFcXVhbHMoMSwgc2hlZXQuaW5zZXJ0UnVsZShSVUxFX0gyLCAxKSk7Ci0KLQkJQ1NTUnVsZUxpc3QgcnVsZUxpc3QgPSBzaGVldC5nZXRDc3NSdWxlcygpOwotCQlDU1NSdWxlIHJ1bGU7Ci0KLQkJcnVsZSA9IHJ1bGVMaXN0Lml0ZW0oMCk7Ci0JCWFzc2VydEVxdWFscyhSVUxFX0gxLCBydWxlLmdldENzc1RleHQoKSk7Ci0JCXJ1bGUgPSBydWxlTGlzdC5pdGVtKDEpOwotCQlhc3NlcnRFcXVhbHMoUlVMRV9IMiwgcnVsZS5nZXRDc3NUZXh0KCkpOwotCQlydWxlID0gcnVsZUxpc3QuaXRlbSgyKTsKLQkJYXNzZXJ0RXF1YWxzKFJVTEVfSDMsIHJ1bGUuZ2V0Q3NzVGV4dCgpKTsKLQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3REZWxldGVSdWxlKCkgewotCQlDU1NTdHlsZVNoZWV0IHNoZWV0ID0gZ2V0U3R5bGVTaGVldCgpOwotCi0JCWFzc2VydEVxdWFscygwLCBzaGVldC5pbnNlcnRSdWxlKFJVTEVfSDMsIDApKTsKLQkJYXNzZXJ0RXF1YWxzKDAsIHNoZWV0Lmluc2VydFJ1bGUoUlVMRV9IMSwgMCkpOwotCQlhc3NlcnRFcXVhbHMoMSwgc2hlZXQuaW5zZXJ0UnVsZShSVUxFX0gyLCAxKSk7Ci0KLQkJQ1NTUnVsZUxpc3QgcnVsZUxpc3Q7Ci0JCUNTU1J1bGUgcnVsZTsKLQotCQlzaGVldC5kZWxldGVSdWxlKDEpOwotCQlydWxlTGlzdCA9IHNoZWV0LmdldENzc1J1bGVzKCk7Ci0KLQkJcnVsZSA9IHJ1bGVMaXN0Lml0ZW0oMCk7Ci0JCWFzc2VydEVxdWFscyhSVUxFX0gxLCBydWxlLmdldENzc1RleHQoKSk7Ci0JCXJ1bGUgPSBydWxlTGlzdC5pdGVtKDEpOwotCQlhc3NlcnRFcXVhbHMoUlVMRV9IMywgcnVsZS5nZXRDc3NUZXh0KCkpOwotCi0JCXNoZWV0LmRlbGV0ZVJ1bGUoMSk7Ci0JCXJ1bGVMaXN0ID0gc2hlZXQuZ2V0Q3NzUnVsZXMoKTsKLQotCQlydWxlID0gcnVsZUxpc3QuaXRlbSgwKTsKLQkJYXNzZXJ0RXF1YWxzKFJVTEVfSDEsIHJ1bGUuZ2V0Q3NzVGV4dCgpKTsKLQotCQlzaGVldC5kZWxldGVSdWxlKDApOwotCi0JCXRyeSB7Ci0JCQlzaGVldC5kZWxldGVSdWxlKDApOwotCQl9Ci0JCWNhdGNoIChET01FeGNlcHRpb24gZSkgewotCQkJYXNzZXJ0RXF1YWxzKERPTUV4Y2VwdGlvbi5JTkRFWF9TSVpFX0VSUiwgZS5jb2RlKTsKLQkJfQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9tb2RlbC9UZXN0Q1NTRGVjbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvbW9kZWwvVGVzdENTU0RlY2wuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzY3ZGQ1Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9tb2RlbC9UZXN0Q1NTRGVjbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjAxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5tb2RlbDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5DU1NEb2N1bWVudExvYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucGFyc2VyLkNTU1NvdXJjZVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSUNTU01vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JQ1NTU3R5bGVEZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwudXRpbC5DU1NTdHlsZURlY2xhcmF0aW9uRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwudXRpbC5kZWNsYXJhdGlvbi5DU1NQcm9wZXJ0eUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLnV0aWwuRmlsZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmRvY3VtZW50LklEb2N1bWVudExvYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb247Ci0KLXB1YmxpYyBjbGFzcyBUZXN0Q1NTRGVjbCBleHRlbmRzIFRlc3RDYXNlIHsKLQkvLyBjb21tZW50aW5nIG91dCB0aGlzIHRlc3QgYmVjYXVzZSBkZWNsLnNldENzc1RleHQoKSBpcyBub3QgYW4gaW1wbGVtZW50ZWQgbWV0aG9kCi0vLwlwdWJsaWMgdm9pZCB0ZXN0RGVjbCgpIHsKLS8vCQlDU1NQcm9wZXJ0eUNvbnRleHQgY29udGV4dCA9IG5ldyBDU1NQcm9wZXJ0eUNvbnRleHQoKTsKLS8vCQlJQ1NTU3R5bGVEZWNsYXJhdGlvbiBkZWNsID0gQ1NTU3R5bGVEZWNsYXJhdGlvbkZhY3RvcnkuZ2V0SW5zdGFuY2UoKS5jcmVhdGVTdHlsZURlY2xhcmF0aW9uKCk7Ci0vLwkJY29udGV4dC5pbml0aWFsaXplKGRlY2wpOwotLy8JCWRlY2wuc2V0Q3NzVGV4dChnZXRTdHJpbmcoKSAhPSBudWxsID8gZ2V0U3RyaW5nKCkgOiAiIik7Ly8kTk9OLU5MUy0xJAotLy8JfQotLy8JcHJpdmF0ZSBTdHJpbmcgZ2V0U3RyaW5nKCkgewotLy8JCXJldHVybiAiYm9keSB7fSI7Ci0vLwl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFN0YW5kYWxvbmVDU1NEZWNsKCkgewotCQkvLyBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MjAyNjE1Ci0JCUNTU1Byb3BlcnR5Q29udGV4dCBjb250ZXh0ID0gbmV3IENTU1Byb3BlcnR5Q29udGV4dCgpOwotCQlJQ1NTU3R5bGVEZWNsYXJhdGlvbiBkZWNsID0gQ1NTU3R5bGVEZWNsYXJhdGlvbkZhY3RvcnkuZ2V0SW5zdGFuY2UoKS5jcmVhdGVTdHlsZURlY2xhcmF0aW9uKCk7Ci0JCWNvbnRleHQuaW5pdGlhbGl6ZShkZWNsKTsKLQkJU3RyaW5nIGNzc1RleHQgPSBkZWNsLmdldENzc1RleHQoKTsKLQkJYXNzZXJ0RXF1YWxzKCJzdGFuZGFsb25lIGNzcyBub2RlIHdhcyBub3QgaW5pdGlhbGl6ZWQiLCAiIiwgY3NzVGV4dCk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCi0JCWNvbnRleHQuc2V0TWFyZ2luKCJhdXRvIik7IC8vJE5PTi1OTFMtMSQKLQkJY29udGV4dC5zZXRDb2xvcigicmVkIik7IC8vJE5PTi1OTFMtMSQKLQkJY29udGV4dC5zZXRCb3JkZXIoInRoaWNrIik7IC8vJE5PTi1OTFMtMSQKLQkJY29udGV4dC5hcHBseUZ1bGwoZGVjbCk7Ci0JCWNzc1RleHQgPSBkZWNsLmdldENzc1RleHQoKTsKLQkJU3RyaW5nIGV4cGVjdGVkID0gImNvbG9yOiByZWQ7IGJvcmRlcjogdGhpY2s7IG1hcmdpbjogYXV0byI7IC8vJE5PTi1OTFMtMSQKLQkJYXNzZXJ0RXF1YWxzKCJzdGFuZGFsb25lIGNzcyBub2RlJ3MgcHJvcGVydGllcyB3ZXJlIG5vdCBzZXQgYXMgZXhwZWN0ZWQiLCBleHBlY3RlZCwgY3NzVGV4dCk7ICAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdENTU1N0eWxlRGVjbEl0ZW0oKSB7Ci0JCVN0cmluZyB2YWx1ZSA9ICJjb2xvcjogYmx1ZTsiOwotCQlJRG9jdW1lbnRMb2FkZXIgbG9hZGVyID0gbmV3IENTU0RvY3VtZW50TG9hZGVyKCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc2hhcmVkU3RydWN0dXJlZERvY3VtZW50ID0gKElTdHJ1Y3R1cmVkRG9jdW1lbnQpIGxvYWRlci5jcmVhdGVOZXdTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJKChDU1NTb3VyY2VQYXJzZXIpIHNoYXJlZFN0cnVjdHVyZWREb2N1bWVudC5nZXRQYXJzZXIoKSkuc2V0UGFyc2VyTW9kZShDU1NTb3VyY2VQYXJzZXIuTU9ERV9ERUNMQVJBVElPTl9WQUxVRSk7Ci0KLQkJc2hhcmVkU3RydWN0dXJlZERvY3VtZW50LnNldCh2YWx1ZSk7Ci0KLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiByZWdpb24gPSBzaGFyZWRTdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0Rmlyc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKTsKLQkJYXNzZXJ0Tm90TnVsbChyZWdpb24pOwotCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdENTU1N0eWxlRGVjbEl0ZW1NT0RFX0RFQ0xBUkFUSU9OKCkgewotCQlTdHJpbmcgdmFsdWUgPSAiY29sb3I6IGJsdWU7IjsKLQkJSURvY3VtZW50TG9hZGVyIGxvYWRlciA9IG5ldyBDU1NEb2N1bWVudExvYWRlcigpOwotCQlJU3RydWN0dXJlZERvY3VtZW50IHNoYXJlZFN0cnVjdHVyZWREb2N1bWVudCA9IChJU3RydWN0dXJlZERvY3VtZW50KSBsb2FkZXIuY3JlYXRlTmV3U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCSgoQ1NTU291cmNlUGFyc2VyKSBzaGFyZWRTdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0UGFyc2VyKCkpLnNldFBhcnNlck1vZGUoQ1NTU291cmNlUGFyc2VyLk1PREVfREVDTEFSQVRJT04pOwotCi0JCXNoYXJlZFN0cnVjdHVyZWREb2N1bWVudC5zZXQodmFsdWUpOwotCi0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gcmVnaW9uID0gc2hhcmVkU3RydWN0dXJlZERvY3VtZW50LmdldEZpcnN0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCk7Ci0JCWFzc2VydE5vdE51bGwocmVnaW9uKTsKLQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDU1NTdHlsZURlY2xJdGVtU1RZTEVfU0hFRVQoKSB7Ci0JCVN0cmluZyB2YWx1ZSA9ICJjb2xvcjogYmx1ZTsiOwotCQlJRG9jdW1lbnRMb2FkZXIgbG9hZGVyID0gbmV3IENTU0RvY3VtZW50TG9hZGVyKCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc2hhcmVkU3RydWN0dXJlZERvY3VtZW50ID0gKElTdHJ1Y3R1cmVkRG9jdW1lbnQpIGxvYWRlci5jcmVhdGVOZXdTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJKChDU1NTb3VyY2VQYXJzZXIpIHNoYXJlZFN0cnVjdHVyZWREb2N1bWVudC5nZXRQYXJzZXIoKSkuc2V0UGFyc2VyTW9kZShDU1NTb3VyY2VQYXJzZXIuTU9ERV9TVFlMRVNIRUVUKTsKLQotCQlzaGFyZWRTdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0KHZhbHVlKTsKLQotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHJlZ2lvbiA9IHNoYXJlZFN0cnVjdHVyZWREb2N1bWVudC5nZXRGaXJzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbigpOwotCQlhc3NlcnROb3ROdWxsKHJlZ2lvbik7Ci0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q1NTTW9kZWwoKSB7Ci0KLQkJSUNTU01vZGVsIG1vZGVsID0gRmlsZVV0aWwuY3JlYXRlTW9kZWwoKTsKLQotCQl0cnkgewotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCXN0cnVjdHVyZWREb2N1bWVudC5zZXQoZ2V0SFRNTERvY3VtZW50VGV4dCgpKTsKLQotCQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiByZWdpb24gPSBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0Rmlyc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKTsKLQkJCWFzc2VydE5vdE51bGwocmVnaW9uKTsKLQkJfSBmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQotCX0KLQotCXByaXZhdGUgU3RyaW5nIGdldEhUTUxEb2N1bWVudFRleHQoKSB7Ci0JCVN0cmluZyB0ZXh0ID0gIjwhRE9DVFlQRSBIVE1MIFBVQkxJQyBcIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOXCI+XHJcbiIgKyAKLQkJCQkiPEhUTUw+PEhFQUQ+XHJcbiIgKyAKLQkJCQkiPE1FVEEgaHR0cC1lcXVpdj1cIkNvbnRlbnQtVHlwZVwiIGNvbnRlbnQ9XCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMVwiPlxyXG4iICsgCi0JCQkJIjxNRVRBIGh0dHAtZXF1aXY9XCJDb250ZW50LVN0eWxlLVR5cGVcIiBjb250ZW50PVwidGV4dC9jc3NcIj5cclxuIiArIAotCQkJCSI8VElUTEU+PC9USVRMRT5cclxuIiArIAotCQkJCSI8U1RZTEUgdHlwZT1cInRleHQvY3NzXCI+XHJcbiIgKyAKLQkJCQkiPCEtLVxyXG4iICsgCi0JCQkJIkJPRFl7XHJcbiIgKyAKLQkJCQkiICBjb2xvciA6IHRlYWw7XHJcbiIgKyAKLQkJCQkiICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRjk5O1xyXG4iICsgCi0JCQkJIn1cclxuIiArIAotCQkJCSJIMXtcclxuIiArIAotCQkJCSIgIGNvbG9yIDogdGVhbDtcclxuIiArIAotCQkJCSIgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuIiArIAotCQkJCSIgIHBhZGRpbmctdG9wOiAxMHB4O1xyXG4iICsgCi0JCQkJIiAgcGFkZGluZy1yaWdodDogMHB4O1xyXG4iICsgCi0JCQkJIiAgcGFkZGluZy1ib3R0b206IDEwcHg7XHJcbiIgKyAKLQkJCQkiICBwYWRkaW5nLWxlZnQ6IDBweDtcclxuIiArIAotCQkJCSIgIGJvcmRlci10b3Atc3R5bGUgOiBzb2xpZDtcclxuIiArIAotCQkJCSIgIGJvcmRlci10b3AtY29sb3IgOiB0ZWFsO1xyXG4iICsgCi0JCQkJIn1cclxuIiArIAotCQkJCSJIMntcclxuIiArIAotCQkJCSIgIGNvbG9yIDogdGVhbDtcclxuIiArIAotCQkJCSIgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuIiArIAotCQkJCSIgIHBhZGRpbmctdG9wOiA3cHg7XHJcbiIgKyAKLQkJCQkiICBwYWRkaW5nLXJpZ2h0OiAwcHg7XHJcbiIgKyAKLQkJCQkiICBwYWRkaW5nLWJvdHRvbTogN3B4O1xyXG4iICsgCi0JCQkJIiAgcGFkZGluZy1sZWZ0OiAwcHg7XHJcbiIgKyAKLQkJCQkiICBib3JkZXItdG9wLXN0eWxlIDogc29saWQ7XHJcbiIgKyAKLQkJCQkiICBib3JkZXItdG9wLWNvbG9yIDogdGVhbDtcclxuIiArIAotCQkJCSJ9XHJcbiIgKyAKLQkJCQkiSDN7XHJcbiIgKyAKLQkJCQkiICBjb2xvciA6IHRlYWw7XHJcbiIgKyAKLQkJCQkiICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiIgKyAKLQkJCQkiICBwYWRkaW5nLXRvcDogNHB4O1xyXG4iICsgCi0JCQkJIiAgcGFkZGluZy1yaWdodDogMHB4O1xyXG4iICsgCi0JCQkJIiAgcGFkZGluZy1ib3R0b206IDRweDtcclxuIiArIAotCQkJCSIgIHBhZGRpbmctbGVmdDogMHB4O1xyXG4iICsgCi0JCQkJIiAgYm9yZGVyLXRvcC1zdHlsZSA6IHNvbGlkO1xyXG4iICsgCi0JCQkJIiAgYm9yZGVyLXRvcC1jb2xvciA6IHRlYWw7XHJcbiIgKyAKLQkJCQkifVxyXG4iICsgCi0JCQkJIkhSe1xyXG4iICsgCi0JCQkJIiAgY29sb3IgOiB0ZWFsO1xyXG4iICsgCi0JCQkJIiAgaGVpZ2h0OiAzcHg7XHJcbiIgKyAKLQkJCQkifVxyXG4iICsgCi0JCQkJIlB7XHJcbiIgKyAKLQkJCQkiICBjb2xvciA6IHRlYWw7XHJcbiIgKyAKLQkJCQkifVxyXG4iICsgCi0JCQkJIlRIe1xyXG4iICsgCi0JCQkJIiAgY29sb3I6ICNGRkZGQ0M7XHJcbiIgKyAKLQkJCQkiICBiYWNrZ3JvdW5kLWNvbG9yIDogdGVhbDtcclxuIiArIAotCQkJCSJ9XHJcbiIgKyAKLQkJCQkiVER7XHJcbiIgKyAKLQkJCQkiICBjb2xvciA6IGJsYWNrO1xyXG4iICsgCi0JCQkJIiAgYmFja2dyb3VuZC1jb2xvciA6IHdoaXRlO1xyXG4iICsgCi0JCQkJIn1cclxuIiArIAotCQkJCSItLT5cclxuIiArIAotCQkJCSI8L1NUWUxFPlxyXG4iICsgCi0JCQkJIjwvSEVBRD48Qk9EWT5cclxuIiArIAotCQkJCSI8SDE+SGVhZGluZyAxIEhlYWRpbmcgMTwvSDE+XHJcbiIgKyAKLQkJCQkiPEgyPkhlYWRpbmcgMiBIZWFkaW5nIDI8L0gyPlxyXG4iICsgCi0JCQkJIjxIMz5IZWFkaW5nIDMgSGVhZGluZyAzPC9IMz5cclxuIiArIAotCQkJCSI8SFI+XHJcbiIgKyAKLQkJCQkiPFA+Tm9ybWFsIFRleHQ8L1A+XHJcbiIgKyAKLQkJCQkiPFAgc3R5bGU9XCJjb2xvciA6IHdoaXRlOyBiYWNrZ3JvdW5kLWNvbG9yIDogdGVhbDtcIj5Ob3JtYWwgVGV4dCB3aXRoIGlubGluZSBzdHlsZTwvUD5cclxuIiArIAotCQkJCSI8SFI+XHJcbiIgKyAKLQkJCQkiPFRBQkxFIGJvcmRlcj1cIjFcIj5cclxuIiArIAotCQkJCSIgIDxUQk9EWT5cclxuIiArIAotCQkJCSIgICAgPFRSPlxyXG4iICsgCi0JCQkJIiAgICAgIDxUSCBjb2xzcGFuPVwiM1wiPkhlYWRlciBDZWxsIG9mIFRhYmxlPC9USD5cclxuIiArIAotCQkJCSIgICAgPC9UUj5cclxuIiArIAotCQkJCSIgICAgPFRSPlxyXG4iICsgCi0JCQkJIiAgICAgIDxURD5EYXRhIENlbGwgb2YgVGFibGU8L1REPlxyXG4iICsgCi0JCQkJIiAgICAgIDxURD5EYXRhIENlbGwgb2YgVGFibGU8L1REPlxyXG4iICsgCi0JCQkJIiAgICAgIDxURD5EYXRhIENlbGwgb2YgVGFibGU8L1REPlxyXG4iICsgCi0JCQkJIiAgICA8L1RSPlxyXG4iICsgCi0JCQkJIiAgICA8VFI+XHJcbiIgKyAKLQkJCQkiICAgICAgPFREPkRhdGEgQ2VsbCBvZiBUYWJsZTwvVEQ+XHJcbiIgKyAKLQkJCQkiICAgICAgPFREPkRhdGEgQ2VsbCBvZiBUYWJsZTwvVEQ+XHJcbiIgKyAKLQkJCQkiICAgICAgPFREPkRhdGEgQ2VsbCBvZiBUYWJsZTwvVEQ+XHJcbiIgKyAKLQkJCQkiICAgIDwvVFI+XHJcbiIgKyAKLQkJCQkiICA8L1RCT0RZPlxyXG4iICsgCi0JCQkJIjwvVEFCTEU+XHJcbiIgKyAKLQkJCQkiPC9CT0RZPjwvSFRNTD4iOwotCQlyZXR1cm4gdGV4dDsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9zb3VyY2UvQ1NTU2VsZWN0b3JUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9zb3VyY2UvQ1NTU2VsZWN0b3JUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkNjQzZDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvc291cmNlL0NTU1NlbGVjdG9yVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODU4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMuc291cmNlOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLmRvY3VtZW50LkNTU1NlbGVjdG9yTGlzdEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklDU1NTZWxlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSUNTU1NlbGVjdG9yQ29tYmluYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSUNTU1NlbGVjdG9ySXRlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSUNTU1NlbGVjdG9yTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSUNTU1NpbXBsZVNlbGVjdG9yOwotCi0KLXB1YmxpYyBjbGFzcyBDU1NTZWxlY3RvclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMDEoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiSDEsIEgyLCBIMyIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiSDEsIEgyLCBIMyIsIDMsIDApOwotCi0JCUlDU1NTZWxlY3RvciBzZWxlY3RvcjsKLQkJSUNTU1NlbGVjdG9ySXRlbSBpdGVtOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigwKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIkgxIiwgMSwgMSwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIkgxIiwgZmFsc2UsIDAsIDAsIDAsIDApOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigxKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIkgyIiwgMSwgMSwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIkgyIiwgZmFsc2UsIDAsIDAsIDAsIDApOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigyKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIkgzIiwgMSwgMSwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIkgzIiwgZmFsc2UsIDAsIDAsIDAsIDApOwotCX0KLQotCS8vIHNlZSAyMTQ0MTYgRG90IGNoYXIgaXMgbm90IGVzY2FwZWQgaW4gWE1MMTBOYW1lcy5qRmxleAotCS8vIGZvciBjb21wbGljYXRpb25zIGxlYWRpbmcgdG8gdGhpcyB0ZXN0IGJlaW5nIGNoYW5nZWQuCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMDIoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiSFxcXFwsIEhcXDEsIEgzIik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICJIXFxcXCwgSFxcMSwgSDMiLCAzLCAyKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICJIXFxcXCIsIDEsIDEsIDEpOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJIXFxcXCIsIGZhbHNlLCAwLCAwLCAwLCAwKTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMSk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICJIXFwxIiwgMSwgMSwgMSk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIkhcXDEiLCBmYWxzZSwgMCwgMCwgMCwgMCk7Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDIpOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiSDMiLCAxLCAxLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiSDMiLCBmYWxzZSwgMCwgMCwgMCwgMCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMDMoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiSDEucGFzdG9yYWwiKTsKLQkJY2hlY2tTZWxlY3Rvckxpc3QobGlzdCwgIkgxLnBhc3RvcmFsIiwgMSwgMCk7Ci0KLQkJSUNTU1NlbGVjdG9yIHNlbGVjdG9yOwotCQlJQ1NTU2VsZWN0b3JJdGVtIGl0ZW07Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDApOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiSDEucGFzdG9yYWwiLCAxLCAxMDEsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJIMSIsIGZhbHNlLCAwLCAxLCAwLCAwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvckNsYXNzZXMoaXRlbSwgbmV3IFN0cmluZ1tdeyJwYXN0b3JhbCJ9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IwNCgpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCJQLnBhc3RvcmFsLm1hcmluZSIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiUC5wYXN0b3JhbC5tYXJpbmUiLCAxLCAwKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICJQLnBhc3RvcmFsLm1hcmluZSIsIDEsIDIwMSwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIlAiLCBmYWxzZSwgMCwgMiwgMCwgMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JDbGFzc2VzKGl0ZW0sIG5ldyBTdHJpbmdbXXsicGFzdG9yYWwiLCAibWFyaW5lIn0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWxlY3RvcjA1KCkgewotCQlJQ1NTU2VsZWN0b3JMaXN0IGxpc3QgPSBjcmVhdGVTZWxlY3Rvckxpc3QoIioud2FybmluZyIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiKi53YXJuaW5nIiwgMSwgMCk7Ci0KLQkJSUNTU1NlbGVjdG9yIHNlbGVjdG9yOwotCQlJQ1NTU2VsZWN0b3JJdGVtIGl0ZW07Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDApOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiKi53YXJuaW5nIiwgMSwgMTAwLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiKiIsIHRydWUsIDAsIDEsIDAsIDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yQ2xhc3NlcyhpdGVtLCBuZXcgU3RyaW5nW117Indhcm5pbmcifSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMDYoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiLndhcm5pbmciKTsKLQkJY2hlY2tTZWxlY3Rvckxpc3QobGlzdCwgIi53YXJuaW5nIiwgMSwgMCk7Ci0KLQkJSUNTU1NlbGVjdG9yIHNlbGVjdG9yOwotCQlJQ1NTU2VsZWN0b3JJdGVtIGl0ZW07Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDApOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiLndhcm5pbmciLCAxLCAxMDAsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICIiLCB0cnVlLCAwLCAxLCAwLCAwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvckNsYXNzZXMoaXRlbSwgbmV3IFN0cmluZ1tdeyJ3YXJuaW5nIn0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWxlY3RvcjA3KCkgewotCQlJQ1NTU2VsZWN0b3JMaXN0IGxpc3QgPSBjcmVhdGVTZWxlY3Rvckxpc3QoIipbbGFuZz1mcl0iKTsKLQkJY2hlY2tTZWxlY3Rvckxpc3QobGlzdCwgIipbbGFuZz1mcl0iLCAxLCAwKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICIqW2xhbmc9ZnJdIiwgMSwgMTAwLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiKiIsIHRydWUsIDEsIDAsIDAsIDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yQXR0cmlidXRlcyhpdGVtLCBuZXcgU3RyaW5nW117Imxhbmc9ZnIifSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMDgoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiW2xhbmc9ZnJdIik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICJbbGFuZz1mcl0iLCAxLCAwKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICJbbGFuZz1mcl0iLCAxLCAxMDAsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICIiLCB0cnVlLCAxLCAwLCAwLCAwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvckF0dHJpYnV0ZXMoaXRlbSwgbmV3IFN0cmluZ1tdeyJsYW5nPWZyIn0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWxlY3RvcjA5KCkgewotCQlJQ1NTU2VsZWN0b3JMaXN0IGxpc3QgPSBjcmVhdGVTZWxlY3Rvckxpc3QoIiojbXlpZCIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiKiNteWlkIiwgMSwgMCk7Ci0KLQkJSUNTU1NlbGVjdG9yIHNlbGVjdG9yOwotCQlJQ1NTU2VsZWN0b3JJdGVtIGl0ZW07Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDApOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiKiNteWlkIiwgMSwgMTAwMDAsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICIqIiwgdHJ1ZSwgMCwgMCwgMSwgMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JJRHMoaXRlbSwgbmV3IFN0cmluZ1tdeyJteWlkIn0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWxlY3RvcjEwKCkgewotCQlJQ1NTU2VsZWN0b3JMaXN0IGxpc3QgPSBjcmVhdGVTZWxlY3Rvckxpc3QoIiNteWlkIik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICIjbXlpZCIsIDEsIDApOwotCi0JCUlDU1NTZWxlY3RvciBzZWxlY3RvcjsKLQkJSUNTU1NlbGVjdG9ySXRlbSBpdGVtOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigwKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIiNteWlkIiwgMSwgMTAwMDAsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICIiLCB0cnVlLCAwLCAwLCAxLCAwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcklEcyhpdGVtLCBuZXcgU3RyaW5nW117Im15aWQifSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMTEoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiSDEjejk4eSIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiSDEjejk4eSIsIDEsIDApOwotCi0JCUlDU1NTZWxlY3RvciBzZWxlY3RvcjsKLQkJSUNTU1NlbGVjdG9ySXRlbSBpdGVtOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigwKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIkgxI3o5OHkiLCAxLCAxMDAwMSwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIkgxIiwgZmFsc2UsIDAsIDAsIDEsIDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9ySURzKGl0ZW0sIG5ldyBTdHJpbmdbXXsiejk4eSJ9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IxMigpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCJIMSBFTSIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiSDEgRU0iLCAxLCAwKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICJIMSBFTSIsIDMsIDIsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJIMSIsIGZhbHNlLCAwLCAwLCAwLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgxKTsKLQkJY2hlY2tTZWxlY3RvckNvbWJpbmF0b3IoaXRlbSwgIiAiLCBJQ1NTU2VsZWN0b3JDb21iaW5hdG9yLkRFU0NFTkRBTlQpOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDIpOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJFTSIsIGZhbHNlLCAwLCAwLCAwLCAwKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IxMygpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCJESVYgKiBQIik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICJESVYgKiBQIiwgMSwgMCk7Ci0KLQkJSUNTU1NlbGVjdG9yIHNlbGVjdG9yOwotCQlJQ1NTU2VsZWN0b3JJdGVtIGl0ZW07Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDApOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiRElWICogUCIsIDUsIDIsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJESVYiLCBmYWxzZSwgMCwgMCwgMCwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMSk7Ci0JCWNoZWNrU2VsZWN0b3JDb21iaW5hdG9yKGl0ZW0sICIgIiwgSUNTU1NlbGVjdG9yQ29tYmluYXRvci5ERVNDRU5EQU5UKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgyKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiKiIsIHRydWUsIDAsIDAsIDAsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDMpOwotCQljaGVja1NlbGVjdG9yQ29tYmluYXRvcihpdGVtLCAiICIsIElDU1NTZWxlY3RvckNvbWJpbmF0b3IuREVTQ0VOREFOVCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oNCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIlAiLCBmYWxzZSwgMCwgMCwgMCwgMCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMTQoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiRElWIFAgKltocmVmXSIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiRElWIFAgKltocmVmXSIsIDEsIDApOwotCi0JCUlDU1NTZWxlY3RvciBzZWxlY3RvcjsKLQkJSUNTU1NlbGVjdG9ySXRlbSBpdGVtOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigwKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIkRJViBQICpbaHJlZl0iLCA1LCAxMDIsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJESVYiLCBmYWxzZSwgMCwgMCwgMCwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMSk7Ci0JCWNoZWNrU2VsZWN0b3JDb21iaW5hdG9yKGl0ZW0sICIgIiwgSUNTU1NlbGVjdG9yQ29tYmluYXRvci5ERVNDRU5EQU5UKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgyKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiUCIsIGZhbHNlLCAwLCAwLCAwLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgzKTsKLQkJY2hlY2tTZWxlY3RvckNvbWJpbmF0b3IoaXRlbSwgIiAiLCBJQ1NTU2VsZWN0b3JDb21iaW5hdG9yLkRFU0NFTkRBTlQpOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDQpOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICIqIiwgdHJ1ZSwgMSwgMCwgMCwgMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JBdHRyaWJ1dGVzKGl0ZW0sIG5ldyBTdHJpbmdbXXsiaHJlZiJ9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IxNSgpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCJCT0RZID4gUCIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiQk9EWSA+IFAiLCAxLCAwKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICJCT0RZID4gUCIsIDMsIDIsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJCT0RZIiwgZmFsc2UsIDAsIDAsIDAsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDEpOwotCQljaGVja1NlbGVjdG9yQ29tYmluYXRvcihpdGVtLCAiPiIsIElDU1NTZWxlY3RvckNvbWJpbmF0b3IuQ0hJTEQpOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDIpOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJQIiwgZmFsc2UsIDAsIDAsIDAsIDApOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWxlY3RvcjE2KCkgewotCQlJQ1NTU2VsZWN0b3JMaXN0IGxpc3QgPSBjcmVhdGVTZWxlY3Rvckxpc3QoIkRJViBPTD5MSSBQIik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICJESVYgT0wgPiBMSSBQIiwgMSwgMCk7Ci0KLQkJSUNTU1NlbGVjdG9yIHNlbGVjdG9yOwotCQlJQ1NTU2VsZWN0b3JJdGVtIGl0ZW07Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDApOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiRElWIE9MID4gTEkgUCIsIDcsIDQsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJESVYiLCBmYWxzZSwgMCwgMCwgMCwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMSk7Ci0JCWNoZWNrU2VsZWN0b3JDb21iaW5hdG9yKGl0ZW0sICIgIiwgSUNTU1NlbGVjdG9yQ29tYmluYXRvci5ERVNDRU5EQU5UKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgyKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiT0wiLCBmYWxzZSwgMCwgMCwgMCwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMyk7Ci0JCWNoZWNrU2VsZWN0b3JDb21iaW5hdG9yKGl0ZW0sICI+IiwgSUNTU1NlbGVjdG9yQ29tYmluYXRvci5DSElMRCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oNCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIkxJIiwgZmFsc2UsIDAsIDAsIDAsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDUpOwotCQljaGVja1NlbGVjdG9yQ29tYmluYXRvcihpdGVtLCAiICIsIElDU1NTZWxlY3RvckNvbWJpbmF0b3IuREVTQ0VOREFOVCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oNik7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIlAiLCBmYWxzZSwgMCwgMCwgMCwgMCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMTcoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiTUFUSCArIFAiKTsKLQkJY2hlY2tTZWxlY3Rvckxpc3QobGlzdCwgIk1BVEggKyBQIiwgMSwgMCk7Ci0KLQkJSUNTU1NlbGVjdG9yIHNlbGVjdG9yOwotCQlJQ1NTU2VsZWN0b3JJdGVtIGl0ZW07Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDApOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiTUFUSCArIFAiLCAzLCAyLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiTUFUSCIsIGZhbHNlLCAwLCAwLCAwLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgxKTsKLQkJY2hlY2tTZWxlY3RvckNvbWJpbmF0b3IoaXRlbSwgIisiLCBJQ1NTU2VsZWN0b3JDb21iaW5hdG9yLkFESkFDRU5UKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgyKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiUCIsIGZhbHNlLCAwLCAwLCAwLCAwKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IxOCgpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCJIMS5vcGVuZXIgKyBIMiIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiSDEub3BlbmVyICsgSDIiLCAxLCAwKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICJIMS5vcGVuZXIgKyBIMiIsIDMsIDEwMiwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIkgxIiwgZmFsc2UsIDAsIDEsIDAsIDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yQ2xhc3NlcyhpdGVtLCBuZXcgU3RyaW5nW117Im9wZW5lciJ9KTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgxKTsKLQkJY2hlY2tTZWxlY3RvckNvbWJpbmF0b3IoaXRlbSwgIisiLCBJQ1NTU2VsZWN0b3JDb21iaW5hdG9yLkFESkFDRU5UKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgyKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiSDIiLCBmYWxzZSwgMCwgMCwgMCwgMCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMTkoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiRVhBTVBMRVtub3RhdGlvbj1kZWNpbWFsXSIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiRVhBTVBMRVtub3RhdGlvbj1kZWNpbWFsXSIsIDEsIDApOwotCi0JCUlDU1NTZWxlY3RvciBzZWxlY3RvcjsKLQkJSUNTU1NlbGVjdG9ySXRlbSBpdGVtOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigwKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIkVYQU1QTEVbbm90YXRpb249ZGVjaW1hbF0iLCAxLCAxMDEsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJFWEFNUExFIiwgZmFsc2UsIDEsIDAsIDAsIDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yQXR0cmlidXRlcyhpdGVtLCBuZXcgU3RyaW5nW117Im5vdGF0aW9uPWRlY2ltYWwifSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMjAoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiU1BBTltoZWxsbz1cIkNsZXZlbGFuZFwiXVtnb29kYnllPVwiQ29sdW1idXNcIl0iKTsKLQkJY2hlY2tTZWxlY3Rvckxpc3QobGlzdCwgIlNQQU5baGVsbG89XCJDbGV2ZWxhbmRcIl1bZ29vZGJ5ZT1cIkNvbHVtYnVzXCJdIiwgMSwgMCk7Ci0KLQkJSUNTU1NlbGVjdG9yIHNlbGVjdG9yOwotCQlJQ1NTU2VsZWN0b3JJdGVtIGl0ZW07Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDApOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiU1BBTltoZWxsbz1cIkNsZXZlbGFuZFwiXVtnb29kYnllPVwiQ29sdW1idXNcIl0iLCAxLCAyMDEsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJTUEFOIiwgZmFsc2UsIDIsIDAsIDAsIDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yQXR0cmlidXRlcyhpdGVtLCBuZXcgU3RyaW5nW117ImhlbGxvPVwiQ2xldmVsYW5kXCIiLCAiZ29vZGJ5ZT1cIkNvbHVtYnVzXCIifSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMjEoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiRElWID4gUDpmaXJzdC1jaGlsZCIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiRElWID4gUDpmaXJzdC1jaGlsZCIsIDEsIDApOwotCi0JCUlDU1NTZWxlY3RvciBzZWxlY3RvcjsKLQkJSUNTU1NlbGVjdG9ySXRlbSBpdGVtOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigwKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIkRJViA+IFA6Zmlyc3QtY2hpbGQiLCAzLCAxMDIsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJESVYiLCBmYWxzZSwgMCwgMCwgMCwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMSk7Ci0JCWNoZWNrU2VsZWN0b3JDb21iaW5hdG9yKGl0ZW0sICI+IiwgSUNTU1NlbGVjdG9yQ29tYmluYXRvci5DSElMRCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMik7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIlAiLCBmYWxzZSwgMCwgMCwgMCwgMSk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JQc2V1ZG9OYW1lcyhpdGVtLCBuZXcgU3RyaW5nW117ImZpcnN0LWNoaWxkIn0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWxlY3RvcjIyKCkgewotCQlJQ1NTU2VsZWN0b3JMaXN0IGxpc3QgPSBjcmVhdGVTZWxlY3Rvckxpc3QoIlA6Zmlyc3QtY2hpbGQgRU0iKTsKLQkJY2hlY2tTZWxlY3Rvckxpc3QobGlzdCwgIlA6Zmlyc3QtY2hpbGQgRU0iLCAxLCAwKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICJQOmZpcnN0LWNoaWxkIEVNIiwgMywgMTAyLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiUCIsIGZhbHNlLCAwLCAwLCAwLCAxKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvclBzZXVkb05hbWVzKGl0ZW0sIG5ldyBTdHJpbmdbXXsiZmlyc3QtY2hpbGQifSk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMSk7Ci0JCWNoZWNrU2VsZWN0b3JDb21iaW5hdG9yKGl0ZW0sICIgIiwgSUNTU1NlbGVjdG9yQ29tYmluYXRvci5ERVNDRU5EQU5UKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgyKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiRU0iLCBmYWxzZSwgMCwgMCwgMCwgMCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMjMoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiKiA+IEE6Zmlyc3QtY2hpbGQiKTsKLQkJY2hlY2tTZWxlY3Rvckxpc3QobGlzdCwgIiogPiBBOmZpcnN0LWNoaWxkIiwgMSwgMCk7Ci0KLQkJSUNTU1NlbGVjdG9yIHNlbGVjdG9yOwotCQlJQ1NTU2VsZWN0b3JJdGVtIGl0ZW07Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDApOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiKiA+IEE6Zmlyc3QtY2hpbGQiLCAzLCAxMDEsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICIqIiwgdHJ1ZSwgMCwgMCwgMCwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMSk7Ci0JCWNoZWNrU2VsZWN0b3JDb21iaW5hdG9yKGl0ZW0sICI+IiwgSUNTU1NlbGVjdG9yQ29tYmluYXRvci5DSElMRCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMik7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIkEiLCBmYWxzZSwgMCwgMCwgMCwgMSk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JQc2V1ZG9OYW1lcyhpdGVtLCBuZXcgU3RyaW5nW117ImZpcnN0LWNoaWxkIn0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWxlY3RvcjI0KCkgewotCQlJQ1NTU2VsZWN0b3JMaXN0IGxpc3QgPSBjcmVhdGVTZWxlY3Rvckxpc3QoIkE6bGluayIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiQTpsaW5rIiwgMSwgMCk7Ci0KLQkJSUNTU1NlbGVjdG9yIHNlbGVjdG9yOwotCQlJQ1NTU2VsZWN0b3JJdGVtIGl0ZW07Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDApOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiQTpsaW5rIiwgMSwgMTAxLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiQSIsIGZhbHNlLCAwLCAwLCAwLCAxKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvclBzZXVkb05hbWVzKGl0ZW0sIG5ldyBTdHJpbmdbXXsibGluayJ9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IyNSgpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCI6bGluayIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiOmxpbmsiLCAxLCAwKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICI6bGluayIsIDEsIDEwMCwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIiIsIHRydWUsIDAsIDAsIDAsIDEpOwotCQljaGVja1NpbXBsZVNlbGVjdG9yUHNldWRvTmFtZXMoaXRlbSwgbmV3IFN0cmluZ1tdeyJsaW5rIn0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWxlY3RvcjI2KCkgewotCQlJQ1NTU2VsZWN0b3JMaXN0IGxpc3QgPSBjcmVhdGVTZWxlY3Rvckxpc3QoIkE6Zm9jdXM6aG92ZXIiKTsKLQkJY2hlY2tTZWxlY3Rvckxpc3QobGlzdCwgIkE6Zm9jdXM6aG92ZXIiLCAxLCAwKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICJBOmZvY3VzOmhvdmVyIiwgMSwgMjAxLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiQSIsIGZhbHNlLCAwLCAwLCAwLCAyKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvclBzZXVkb05hbWVzKGl0ZW0sIG5ldyBTdHJpbmdbXXsiZm9jdXMiLCAiaG92ZXIifSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMjcoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiSFRNTDpsYW5nKGRlKSA+IFEiKTsKLQkJY2hlY2tTZWxlY3Rvckxpc3QobGlzdCwgIkhUTUw6bGFuZyhkZSkgPiBRIiwgMSwgMCk7Ci0KLQkJSUNTU1NlbGVjdG9yIHNlbGVjdG9yOwotCQlJQ1NTU2VsZWN0b3JJdGVtIGl0ZW07Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDApOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiSFRNTDpsYW5nKGRlKSA+IFEiLCAzLCAxMDIsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJIVE1MIiwgZmFsc2UsIDAsIDAsIDAsIDEpOwotCQljaGVja1NpbXBsZVNlbGVjdG9yUHNldWRvTmFtZXMoaXRlbSwgbmV3IFN0cmluZ1tdeyJsYW5nKGRlKSJ9KTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgxKTsKLQkJY2hlY2tTZWxlY3RvckNvbWJpbmF0b3IoaXRlbSwgIj4iLCBJQ1NTU2VsZWN0b3JDb21iaW5hdG9yLkNISUxEKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgyKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiUSIsIGZhbHNlLCAwLCAwLCAwLCAwKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IyOCgpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCJQID4gQTpsaW5rLCBBLmV4dGVybmFsOnZpc2l0ZWQiKTsKLQkJY2hlY2tTZWxlY3Rvckxpc3QobGlzdCwgIlAgPiBBOmxpbmssIEEuZXh0ZXJuYWw6dmlzaXRlZCIsIDIsIDApOwotCi0JCUlDU1NTZWxlY3RvciBzZWxlY3RvcjsKLQkJSUNTU1NlbGVjdG9ySXRlbSBpdGVtOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigwKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIlAgPiBBOmxpbmsiLCAzLCAxMDIsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJQIiwgZmFsc2UsIDAsIDAsIDAsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDEpOwotCQljaGVja1NlbGVjdG9yQ29tYmluYXRvcihpdGVtLCAiPiIsIElDU1NTZWxlY3RvckNvbWJpbmF0b3IuQ0hJTEQpOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDIpOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJBIiwgZmFsc2UsIDAsIDAsIDAsIDEpOwotCQljaGVja1NpbXBsZVNlbGVjdG9yUHNldWRvTmFtZXMoaXRlbSwgbmV3IFN0cmluZ1tdeyJsaW5rIn0pOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigxKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIkEuZXh0ZXJuYWw6dmlzaXRlZCIsIDEsIDIwMSwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIkEiLCBmYWxzZSwgMCwgMSwgMCwgMSk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JDbGFzc2VzKGl0ZW0sIG5ldyBTdHJpbmdbXXsiZXh0ZXJuYWwifSk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JQc2V1ZG9OYW1lcyhpdGVtLCBuZXcgU3RyaW5nW117InZpc2l0ZWQifSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMjkoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiUCNob2dlOTggKyAqOmhvdmVyID4gQTpsaW5rLCBBLmV4dGVybmFsOnZpc2l0ZWQiKTsKLQkJY2hlY2tTZWxlY3Rvckxpc3QobGlzdCwgIlAjaG9nZTk4ICsgKjpob3ZlciA+IEE6bGluaywgQS5leHRlcm5hbDp2aXNpdGVkIiwgMiwgMCk7Ci0KLQkJSUNTU1NlbGVjdG9yIHNlbGVjdG9yOwotCQlJQ1NTU2VsZWN0b3JJdGVtIGl0ZW07Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDApOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiUCNob2dlOTggKyAqOmhvdmVyID4gQTpsaW5rIiwgNSwgMTAyMDIsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJQIiwgZmFsc2UsIDAsIDAsIDEsIDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9ySURzKGl0ZW0sIG5ldyBTdHJpbmdbXXsiaG9nZTk4In0pOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDEpOwotCQljaGVja1NlbGVjdG9yQ29tYmluYXRvcihpdGVtLCAiKyIsIElDU1NTZWxlY3RvckNvbWJpbmF0b3IuQURKQUNFTlQpOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDIpOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICIqIiwgdHJ1ZSwgMCwgMCwgMCwgMSk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JQc2V1ZG9OYW1lcyhpdGVtLCBuZXcgU3RyaW5nW117ImhvdmVyIn0pOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDMpOwotCQljaGVja1NlbGVjdG9yQ29tYmluYXRvcihpdGVtLCAiPiIsIElDU1NTZWxlY3RvckNvbWJpbmF0b3IuQ0hJTEQpOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDQpOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJBIiwgZmFsc2UsIDAsIDAsIDAsIDEpOwotCQljaGVja1NpbXBsZVNlbGVjdG9yUHNldWRvTmFtZXMoaXRlbSwgbmV3IFN0cmluZ1tdeyJsaW5rIn0pOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigxKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIkEuZXh0ZXJuYWw6dmlzaXRlZCIsIDEsIDIwMSwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIkEiLCBmYWxzZSwgMCwgMSwgMCwgMSk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JDbGFzc2VzKGl0ZW0sIG5ldyBTdHJpbmdbXXsiZXh0ZXJuYWwifSk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JQc2V1ZG9OYW1lcyhpdGVtLCBuZXcgU3RyaW5nW117InZpc2l0ZWQifSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMzAoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiSDEuMTIzIik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICJIMS4xMjMiLCAxLCAxKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICJIMS4xMjMiLCAxLCAxMDEsIDEpOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJIMSIsIGZhbHNlLCAwLCAxLCAwLCAwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvckNsYXNzZXMoaXRlbSwgbmV3IFN0cmluZ1tdeyIxMjMifSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMzEoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiUC4xMjMuNDU2Iik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICJQLjEyMy40NTYiLCAxLCAyKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICJQLjEyMy40NTYiLCAxLCAyMDEsIDIpOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJQIiwgZmFsc2UsIDAsIDIsIDAsIDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yQ2xhc3NlcyhpdGVtLCBuZXcgU3RyaW5nW117IjEyMyIsICI0NTYifSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMzIoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiKi4xMjMiKTsKLQkJY2hlY2tTZWxlY3Rvckxpc3QobGlzdCwgIiouMTIzIiwgMSwgMSk7Ci0KLQkJSUNTU1NlbGVjdG9yIHNlbGVjdG9yOwotCQlJQ1NTU2VsZWN0b3JJdGVtIGl0ZW07Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDApOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiKi4xMjMiLCAxLCAxMDAsIDEpOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICIqIiwgdHJ1ZSwgMCwgMSwgMCwgMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JDbGFzc2VzKGl0ZW0sIG5ldyBTdHJpbmdbXXsiMTIzIn0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWxlY3RvcjMzKCkgewotCQlJQ1NTU2VsZWN0b3JMaXN0IGxpc3QgPSBjcmVhdGVTZWxlY3Rvckxpc3QoIi4xMjMiKTsKLQkJY2hlY2tTZWxlY3Rvckxpc3QobGlzdCwgIi4xMjMiLCAxLCAxKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICIuMTIzIiwgMSwgMTAwLCAxKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiIiwgdHJ1ZSwgMCwgMSwgMCwgMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JDbGFzc2VzKGl0ZW0sIG5ldyBTdHJpbmdbXXsiMTIzIn0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWxlY3RvcjM0KCkgewotCQlJQ1NTU2VsZWN0b3JMaXN0IGxpc3QgPSBjcmVhdGVTZWxlY3Rvckxpc3QoIkgxLjF4MyIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiSDEuMXgzIiwgMSwgMSk7Ci0KLQkJSUNTU1NlbGVjdG9yIHNlbGVjdG9yOwotCQlJQ1NTU2VsZWN0b3JJdGVtIGl0ZW07Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDApOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiSDEuMXgzIiwgMSwgMTAxLCAxKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiSDEiLCBmYWxzZSwgMCwgMSwgMCwgMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JDbGFzc2VzKGl0ZW0sIG5ldyBTdHJpbmdbXXsiMXgzIn0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWxlY3RvcjM1KCkgewotCQlJQ1NTU2VsZWN0b3JMaXN0IGxpc3QgPSBjcmVhdGVTZWxlY3Rvckxpc3QoIkgyLjEyMyM0NiIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiSDIuMTIzIzQ2IiwgMSwgMSk7Ci0KLQkJSUNTU1NlbGVjdG9yIHNlbGVjdG9yOwotCQlJQ1NTU2VsZWN0b3JJdGVtIGl0ZW07Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDApOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiSDIuMTIzIzQ2IiwgMSwgMTAxMDEsIDEpOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJIMiIsIGZhbHNlLCAwLCAxLCAxLCAwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvckNsYXNzZXMoaXRlbSwgbmV3IFN0cmluZ1tdeyIxMjMifSk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JJRHMoaXRlbSwgbmV3IFN0cmluZ1tdeyI0NiJ9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IzNigpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCJIMy4xeDMjNHQyIik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICJIMy4xeDMjNHQyIiwgMSwgMSk7Ci0KLQkJSUNTU1NlbGVjdG9yIHNlbGVjdG9yOwotCQlJQ1NTU2VsZWN0b3JJdGVtIGl0ZW07Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDApOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiSDMuMXgzIzR0MiIsIDEsIDEwMTAxLCAxKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiSDMiLCBmYWxzZSwgMCwgMSwgMSwgMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JDbGFzc2VzKGl0ZW0sIG5ldyBTdHJpbmdbXXsiMXgzIn0pOwotCQljaGVja1NpbXBsZVNlbGVjdG9ySURzKGl0ZW0sIG5ldyBTdHJpbmdbXXsiNHQyIn0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWxlY3RvcjM3KCkgewotCQlJQ1NTU2VsZWN0b3JMaXN0IGxpc3QgPSBjcmVhdGVTZWxlY3Rvckxpc3QoIiouMTIzIik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICIqLjEyMyIsIDEsIDEpOwotCi0JCUlDU1NTZWxlY3RvciBzZWxlY3RvcjsKLQkJSUNTU1NlbGVjdG9ySXRlbSBpdGVtOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigwKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIiouMTIzIiwgMSwgMTAwLCAxKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiKiIsIHRydWUsIDAsIDEsIDAsIDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yQ2xhc3NlcyhpdGVtLCBuZXcgU3RyaW5nW117IjEyMyJ9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IzOCgpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCIuMTIzIik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICIuMTIzIiwgMSwgMSk7Ci0KLQkJSUNTU1NlbGVjdG9yIHNlbGVjdG9yOwotCQlJQ1NTU2VsZWN0b3JJdGVtIGl0ZW07Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDApOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiLjEyMyIsIDEsIDEwMCwgMSk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIiIsIHRydWUsIDAsIDEsIDAsIDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yQ2xhc3NlcyhpdGVtLCBuZXcgU3RyaW5nW117IjEyMyJ9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IzOSgpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCIuMTIzZjU2NyIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiLjEyM2Y1NjciLCAxLCAxKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICIuMTIzZjU2NyIsIDEsIDEwMCwgMSk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIiIsIHRydWUsIDAsIDEsIDAsIDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yQ2xhc3NlcyhpdGVtLCBuZXcgU3RyaW5nW117IjEyM2Y1NjcifSk7Ci0JfQotCi0JLy8gQnVnIDIyMTUwNDogd2hpdGVzcGFjZSBwcmVjZWRpbmcgYSBzZWxlY3RvciBzZXBhcmF0b3Igd2FzIGNhdXNpbmcgc2VsZWN0b3JzCi0JLy8gdG8gYmUgbWVyZ2VkCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yNDAoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiaDEuZml4ICwgaDIuZml4LCBoMy5maXggLCBkaXYjY29udGFpbmVyIik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICJoMS5maXgsIGgyLmZpeCwgaDMuZml4LCBkaXYjY29udGFpbmVyIiwgNCwgMCk7Ci0JCQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQkJCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigwKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgImgxLmZpeCIsIDEsIDEwMSwgMCk7Ci0JCQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiaDEiLCBmYWxzZSwgMCwgMSwgMCwgMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JDbGFzc2VzKGl0ZW0sIG5ldyBTdHJpbmdbXSB7ImZpeCJ9KTsKLQkJCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigxKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgImgyLmZpeCIsIDEsIDEwMSwgMCk7Ci0JCQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiaDIiLCBmYWxzZSwgMCwgMSwgMCwgMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JDbGFzc2VzKGl0ZW0sIG5ldyBTdHJpbmdbXSB7ImZpeCJ9KTsKLQkJCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigyKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgImgzLmZpeCIsIDEsIDEwMSwgMCk7Ci0JCQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiaDMiLCBmYWxzZSwgMCwgMSwgMCwgMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JDbGFzc2VzKGl0ZW0sIG5ldyBTdHJpbmdbXSB7ImZpeCJ9KTsKLQkJCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigzKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgImRpdiNjb250YWluZXIiLCAxLCAxMDAwMSwgMCk7Ci0JCQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiZGl2IiwgZmFsc2UsIDAsIDAsIDEsIDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9ySURzKGl0ZW0sIG5ldyBTdHJpbmdbXSB7ImNvbnRhaW5lciJ9KTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgY2hlY2tTZWxlY3Rvckxpc3QoSUNTU1NlbGVjdG9yTGlzdCBsaXN0LCBTdHJpbmcgZm9ybWF0dGVkU291cmNlLCBpbnQgblNlbGVjdG9ycywgaW50IG5FcnJvcnMpIHsKLQkJYXNzZXJ0RXF1YWxzKGZvcm1hdHRlZFNvdXJjZSwgbGlzdC5nZXRTdHJpbmcoKSk7Ci0JCWFzc2VydEVxdWFscyhuU2VsZWN0b3JzLCBsaXN0LmdldExlbmd0aCgpKTsKLQkJYXNzZXJ0RXF1YWxzKG5FcnJvcnMsIGxpc3QuZ2V0RXJyb3JDb3VudCgpKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgY2hlY2tTZWxlY3RvcihJQ1NTU2VsZWN0b3Igc2VsZWN0b3IsIFN0cmluZyBmb3JtYXR0ZWRTb3VyY2UsIGludCBpdGVtcywgaW50IHNwZWNpZmljaXR5LCBpbnQgbkVycm9ycykgewotCQlhc3NlcnRFcXVhbHMoZm9ybWF0dGVkU291cmNlLCBzZWxlY3Rvci5nZXRTdHJpbmcoKSk7Ci0JCWFzc2VydEVxdWFscyhpdGVtcywgc2VsZWN0b3IuZ2V0TGVuZ3RoKCkpOwotCQlhc3NlcnRFcXVhbHMoc3BlY2lmaWNpdHksIHNlbGVjdG9yLmdldFNwZWNpZmljaXR5KCkpOwotCQlhc3NlcnRFcXVhbHMobkVycm9ycywgc2VsZWN0b3IuZ2V0RXJyb3JDb3VudCgpKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgY2hlY2tTaW1wbGVTZWxlY3RvcihJQ1NTU2VsZWN0b3JJdGVtIHNlbGVjdG9yLCBTdHJpbmcgZm9ybWF0dGVkU291cmNlLCBib29sZWFuIGlzVW5pdmVyc2FsLCBpbnQgbkF0dHJpYnV0ZXMsIGludCBuQ2xhc3NlcywgaW50IG5JZHMsIGludCBuUHNldWRvTmFtZXMpIHsKLQkJYXNzZXJ0VHJ1ZShzZWxlY3RvciBpbnN0YW5jZW9mIElDU1NTaW1wbGVTZWxlY3Rvcik7Ci0JCWFzc2VydEVxdWFscyhmb3JtYXR0ZWRTb3VyY2UsICgoSUNTU1NpbXBsZVNlbGVjdG9yKSBzZWxlY3RvcikuZ2V0TmFtZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKGlzVW5pdmVyc2FsLCAoKElDU1NTaW1wbGVTZWxlY3Rvcikgc2VsZWN0b3IpLmlzVW5pdmVyc2FsKCkpOwotCQlhc3NlcnRFcXVhbHMobkF0dHJpYnV0ZXMsICgoSUNTU1NpbXBsZVNlbGVjdG9yKSBzZWxlY3RvcikuZ2V0TnVtT2ZBdHRyaWJ1dGVzKCkpOwotCQlhc3NlcnRFcXVhbHMobkNsYXNzZXMsICgoSUNTU1NpbXBsZVNlbGVjdG9yKSBzZWxlY3RvcikuZ2V0TnVtT2ZDbGFzc2VzKCkpOwotCQlhc3NlcnRFcXVhbHMobklkcywgKChJQ1NTU2ltcGxlU2VsZWN0b3IpIHNlbGVjdG9yKS5nZXROdW1PZklEcygpKTsKLQkJYXNzZXJ0RXF1YWxzKG5Qc2V1ZG9OYW1lcywgKChJQ1NTU2ltcGxlU2VsZWN0b3IpIHNlbGVjdG9yKS5nZXROdW1PZlBzZXVkb05hbWVzKCkpOwotCX0KLQotCXByaXZhdGUgdm9pZCBjaGVja1NpbXBsZVNlbGVjdG9yQXR0cmlidXRlcyhJQ1NTU2VsZWN0b3JJdGVtIHNlbGVjdG9yLCBTdHJpbmdbXSBpdGVtcykgewotCQlpbnQgbkl0ZW1zID0gKChJQ1NTU2ltcGxlU2VsZWN0b3IpIHNlbGVjdG9yKS5nZXROdW1PZkF0dHJpYnV0ZXMoKTsKLQkJYXNzZXJ0RXF1YWxzKGl0ZW1zLmxlbmd0aCwgbkl0ZW1zKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBuSXRlbXM7IGkrKykgewotCQkJYXNzZXJ0RXF1YWxzKGl0ZW1zW2ldLCAoKElDU1NTaW1wbGVTZWxlY3Rvcikgc2VsZWN0b3IpLmdldEF0dHJpYnV0ZShpKSk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgY2hlY2tTaW1wbGVTZWxlY3RvckNsYXNzZXMoSUNTU1NlbGVjdG9ySXRlbSBzZWxlY3RvciwgU3RyaW5nW10gaXRlbXMpIHsKLQkJaW50IG5JdGVtcyA9ICgoSUNTU1NpbXBsZVNlbGVjdG9yKSBzZWxlY3RvcikuZ2V0TnVtT2ZDbGFzc2VzKCk7Ci0JCWFzc2VydEVxdWFscyhpdGVtcy5sZW5ndGgsIG5JdGVtcyk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgbkl0ZW1zOyBpKyspIHsKLQkJCWFzc2VydEVxdWFscyhpdGVtc1tpXSwgKChJQ1NTU2ltcGxlU2VsZWN0b3IpIHNlbGVjdG9yKS5nZXRDbGFzcyhpKSk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgY2hlY2tTaW1wbGVTZWxlY3RvcklEcyhJQ1NTU2VsZWN0b3JJdGVtIHNlbGVjdG9yLCBTdHJpbmdbXSBpdGVtcykgewotCQlpbnQgbkl0ZW1zID0gKChJQ1NTU2ltcGxlU2VsZWN0b3IpIHNlbGVjdG9yKS5nZXROdW1PZklEcygpOwotCQlhc3NlcnRFcXVhbHMoaXRlbXMubGVuZ3RoLCBuSXRlbXMpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IG5JdGVtczsgaSsrKSB7Ci0JCQlhc3NlcnRFcXVhbHMoaXRlbXNbaV0sICgoSUNTU1NpbXBsZVNlbGVjdG9yKSBzZWxlY3RvcikuZ2V0SUQoaSkpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNoZWNrU2ltcGxlU2VsZWN0b3JQc2V1ZG9OYW1lcyhJQ1NTU2VsZWN0b3JJdGVtIHNlbGVjdG9yLCBTdHJpbmdbXSBpdGVtcykgewotCQlpbnQgbkl0ZW1zID0gKChJQ1NTU2ltcGxlU2VsZWN0b3IpIHNlbGVjdG9yKS5nZXROdW1PZlBzZXVkb05hbWVzKCk7Ci0JCWFzc2VydEVxdWFscyhpdGVtcy5sZW5ndGgsIG5JdGVtcyk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgbkl0ZW1zOyBpKyspIHsKLQkJCWFzc2VydEVxdWFscyhpdGVtc1tpXSwgKChJQ1NTU2ltcGxlU2VsZWN0b3IpIHNlbGVjdG9yKS5nZXRQc2V1ZG9OYW1lKGkpKTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBjaGVja1NlbGVjdG9yQ29tYmluYXRvcihJQ1NTU2VsZWN0b3JJdGVtIGNvbWJpbmF0b3IsIFN0cmluZyBmb3JtYXR0ZWRTb3VyY2UsIGludCBjb21iaW5hdG9yVHlwZSkgewotCQlhc3NlcnRUcnVlKGNvbWJpbmF0b3IgaW5zdGFuY2VvZiBJQ1NTU2VsZWN0b3JDb21iaW5hdG9yKTsKLQkJYXNzZXJ0RXF1YWxzKGZvcm1hdHRlZFNvdXJjZSwgKChJQ1NTU2VsZWN0b3JDb21iaW5hdG9yKSBjb21iaW5hdG9yKS5nZXRTdHJpbmcoKSk7Ci0JCWFzc2VydEVxdWFscyhjb21iaW5hdG9yVHlwZSwgKChJQ1NTU2VsZWN0b3JDb21iaW5hdG9yKSBjb21iaW5hdG9yKS5nZXRDb21iaW5hdG9yVHlwZSgpKTsKLQl9Ci0KLQlwcml2YXRlIElDU1NTZWxlY3Rvckxpc3QgY3JlYXRlU2VsZWN0b3JMaXN0KFN0cmluZyBzdHIpIHsKLQkJcmV0dXJuIG5ldyBDU1NTZWxlY3Rvckxpc3RJbXBsKHN0cik7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvc291cmNlL0NTU1NvdXJjZVBhcnNlclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3NvdXJjZS9DU1NTb3VyY2VQYXJzZXJUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjMWU1OGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvc291cmNlL0NTU1NvdXJjZVBhcnNlclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLnNvdXJjZTsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklDU1NNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMudXRpbC5GaWxlVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVRleHRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVRleHRSZWdpb25MaXN0OwotCi0vKioKLSAqIAotICovCi1wdWJsaWMgY2xhc3MgQ1NTU291cmNlUGFyc2VyVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlT3BlbjEoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwMS5jc3MiLCBNT0RFX09QRU4pOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZU9wZW4yKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDIuY3NzIiwgTU9ERV9PUEVOKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VPcGVuMygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTAzLmNzcyIsIE1PREVfT1BFTik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlT3BlbjQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwNC5jc3MiLCBNT0RFX09QRU4pOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZU9wZW41KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDUuY3NzIiwgTU9ERV9PUEVOKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VPcGVuNigpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTA2LmNzcyIsIE1PREVfT1BFTik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlT3BlbjcoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwNy5jc3MiLCBNT0RFX09QRU4pOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VPcGVuOCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTA4LmNzcyIsIE1PREVfT1BFTik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlQXBwZW5kMSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTAxLmNzcyIsIE1PREVfQVBQRU5EKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VBcHBlbmQyKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDIuY3NzIiwgTU9ERV9BUFBFTkQpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZUFwcGVuZDMoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwMy5jc3MiLCBNT0RFX0FQUEVORCk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlQXBwZW5kNCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTA0LmNzcyIsIE1PREVfQVBQRU5EKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VBcHBlbmQ1KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDUuY3NzIiwgTU9ERV9BUFBFTkQpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZUFwcGVuZDYoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwNi5jc3MiLCBNT0RFX0FQUEVORCk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlQXBwZW5kNygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTA3LmNzcyIsIE1PREVfQVBQRU5EKTsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlQXBwZW5kOCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTA4LmNzcyIsIE1PREVfQVBQRU5EKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VJbnNlcnQxKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDEuY3NzIiwgTU9ERV9JTlNFUlQpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZUluc2VydDIoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwMi5jc3MiLCBNT0RFX0lOU0VSVCk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlSW5zZXJ0MygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTAzLmNzcyIsIE1PREVfSU5TRVJUKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VJbnNlcnQ0KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDQuY3NzIiwgTU9ERV9JTlNFUlQpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZUluc2VydDUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwNS5jc3MiLCBNT0RFX0lOU0VSVCk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlSW5zZXJ0NigpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTA2LmNzcyIsIE1PREVfSU5TRVJUKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VJbnNlcnQ3KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDcuY3NzIiwgTU9ERV9JTlNFUlQpOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VJbnNlcnQ4KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDguY3NzIiwgTU9ERV9JTlNFUlQpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHJpdmF0ZSB2b2lkIHNvdXJjZVBhcnNlclRlc3QoU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgbW9kZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSUNTU01vZGVsIG1vZGVsID0gbnVsbDsKLQkJaWYgKG1vZGUuZXF1YWxzKE1PREVfT1BFTikpIHsKLQkJCW1vZGVsID0gcmVhZE1vZGVsT3BlbihmaWxlbmFtZSk7Ci0JCX0KLQkJZWxzZSBpZiAobW9kZS5lcXVhbHMoTU9ERV9BUFBFTkQpKSB7Ci0JCQltb2RlbCA9IHJlYWRNb2RlbEFwcGVuZChmaWxlbmFtZSk7Ci0JCX0KLQkJZWxzZSBpZiAobW9kZS5lcXVhbHMoTU9ERV9JTlNFUlQpKSB7Ci0JCQltb2RlbCA9IHJlYWRNb2RlbEluc2VydChmaWxlbmFtZSk7Ci0JCX0KLQkJU3RyaW5nIHJlc3VsdCA9IGR1bXBSZWdpb25zKG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpKTsKLQkJY29tcGFyZVJlc3VsdChyZXN1bHQsICJDU1NTb3VyY2VQYXJzZXJUZXN0LSIgKyBmaWxlbmFtZSk7IC8vJE5PTi1OTFMtMSQKLQkJY2xvc2VNb2RlbChtb2RlbCk7Ci0JfQotCi0JcHJpdmF0ZSBJQ1NTTW9kZWwgcmVhZE1vZGVsT3BlbihTdHJpbmcgZmlsZW5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBzb3VyY2UgPSBGaWxlVXRpbC5jcmVhdGVTdHJpbmcoRklMRVNfRElSLCBmaWxlbmFtZSk7Ci0JCUlDU1NNb2RlbCBtb2RlbCA9IEZpbGVVdGlsLmNyZWF0ZU1vZGVsKCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJZG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgMCwgMCwgc291cmNlKTsKLQotCQlyZXR1cm4gbW9kZWw7Ci0JfQotCi0JcHJpdmF0ZSBJQ1NTTW9kZWwgcmVhZE1vZGVsQXBwZW5kKFN0cmluZyBmaWxlbmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIHNvdXJjZSA9IEZpbGVVdGlsLmNyZWF0ZVN0cmluZyhGSUxFU19ESVIsIGZpbGVuYW1lKTsKLQkJSUNTU01vZGVsIG1vZGVsID0gRmlsZVV0aWwuY3JlYXRlTW9kZWwoKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHNvdXJjZS5sZW5ndGgoKTsgaSsrKSB7Ci0JCQlkb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCBpLCAwLCBzb3VyY2Uuc3Vic3RyaW5nKGksIGkgKyAxKSk7Ci0JCX0KLQotCQlyZXR1cm4gbW9kZWw7Ci0JfQotCi0JcHJpdmF0ZSBJQ1NTTW9kZWwgcmVhZE1vZGVsSW5zZXJ0KFN0cmluZyBmaWxlbmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIHNvdXJjZSA9IEZpbGVVdGlsLmNyZWF0ZVN0cmluZyhGSUxFU19ESVIsIGZpbGVuYW1lKTsKLQkJSUNTU01vZGVsIG1vZGVsID0gRmlsZVV0aWwuY3JlYXRlTW9kZWwoKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHNvdXJjZS5sZW5ndGgoKTsgaSsrKSB7Ci0JCQlpbnQgdGV4dEluZGV4ID0gc291cmNlLmxlbmd0aCgpIC0gaSAtIDE7Ci0JCQlkb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCAwLCAwLCBzb3VyY2Uuc3Vic3RyaW5nKHRleHRJbmRleCwgdGV4dEluZGV4ICsgMSkpOwotCQl9Ci0KLQkJcmV0dXJuIG1vZGVsOwotCX0KLQotCXByaXZhdGUgdm9pZCBjbG9zZU1vZGVsKElDU1NNb2RlbCBtb2RlbCkgewotCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQl9Ci0KLQlwcml2YXRlIFN0cmluZyBkdW1wUmVnaW9ucyhJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50KSB7Ci0JCVN0cmluZ0J1ZmZlciBidWYgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWJ1Zi5hcHBlbmQoZHVtcFJlZ2lvbnMoZG9jdW1lbnQuZ2V0Rmlyc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKSkpOwotCQlyZXR1cm4gYnVmLnRvU3RyaW5nKCk7Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgZHVtcFJlZ2lvbnMoSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiByZWdpb24pIHsKLQkJU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJZG8gewotCQkJYnVmLmFwcGVuZChkdW1wT25lUmVnaW9uKHJlZ2lvbikpOwotCQkJcmVnaW9uID0gcmVnaW9uLmdldE5leHQoKTsKLQkJfQotCQl3aGlsZSAocmVnaW9uICE9IG51bGwpOwotCi0JCWJ1Zi5hcHBlbmQoRmlsZVV0aWwuY29tbW9uRU9MICsgIi0tLS0tLS0iICsgRmlsZVV0aWwuY29tbW9uRU9MKTsgLy8kTk9OLU5MUy0xJAotCi0JCXJldHVybiBidWYudG9TdHJpbmcoKTsKLQl9Ci0KLQlwcml2YXRlIFN0cmluZyBkdW1wT25lUmVnaW9uKElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gZG9jdW1lbnRSZWdpb24pIHsKLQkJU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJYnVmLmFwcGVuZChkb2N1bWVudFJlZ2lvbi50b1N0cmluZygpKTsKLQkJYnVmLmFwcGVuZChGaWxlVXRpbC5jb21tb25FT0wgKyAiICAgICIpOyAvLyROT04tTkxTLTEkCi0KLQkJSVRleHRSZWdpb25MaXN0IHJlZ2lvbkxpc3QgPSBkb2N1bWVudFJlZ2lvbi5nZXRSZWdpb25zKCk7Ci0JCUl0ZXJhdG9yIGkgPSByZWdpb25MaXN0Lml0ZXJhdG9yKCk7Ci0JCXdoaWxlIChpLmhhc05leHQoKSkgewotCQkJSVRleHRSZWdpb24gdGV4dFJlZ2lvbiA9IChJVGV4dFJlZ2lvbikgaS5uZXh0KCk7Ci0JCQlidWYuYXBwZW5kKHRleHRSZWdpb24udG9TdHJpbmcoKSk7Ci0JCQlidWYuYXBwZW5kKCIsICIpOyAvLyROT04tTkxTLTEkCi0JCX0KLQkJYnVmLmFwcGVuZChGaWxlVXRpbC5jb21tb25FT0wpOyAvLyROT04tTkxTLTEkCi0JCXJldHVybiBidWYudG9TdHJpbmcoKTsKLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gZkR1bXAgPSBmYWxzZTsKLQotCXByaXZhdGUgdm9pZCBjb21wYXJlUmVzdWx0KFN0cmluZyBhY3R1YWwsIFN0cmluZyBmaWxlbmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJaWYgKGZEdW1wKSB7Ci0JCQlGaWxlVXRpbC5kdW1wU3RyaW5nKGFjdHVhbCwgUkVTVUxUU19ESVIsIGZpbGVuYW1lKTsKLQkJfQotCQllbHNlIHsKLQkJCVN0cmluZyByZXN1bHQgPSBGaWxlVXRpbC5jcmVhdGVTdHJpbmcoUkVTVUxUU19ESVIsIGZpbGVuYW1lKTsKLQkJCWFzc2VydEVxdWFscyhyZXN1bHQsIGFjdHVhbCk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRklMRVNfRElSID0gInNyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBSRVNVTFRTX0RJUiA9ICJzcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBNT0RFX09QRU4gPSAiTU9ERV9PUEVOIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBNT0RFX0FQUEVORCA9ICJNT0RFX0FQUEVORCI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTU9ERV9JTlNFUlQgPSAiTU9ERV9JTlNFUlQiOyAvLyROT04tTkxTLTEkCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9zb3VyY2UvQ1NTVGV4dFBhcnNlclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3NvdXJjZS9DU1NUZXh0UGFyc2VyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMTk1NDZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3NvdXJjZS9DU1NUZXh0UGFyc2VyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTExICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMuc291cmNlOwotCi1pbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucGFyc2Vyei5DU1NUZXh0UGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wYXJzZXJ6LkNTU1RleHRUb2tlbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMudXRpbC5GaWxlVXRpbDsKLQotCi1wdWJsaWMgY2xhc3MgQ1NTVGV4dFBhcnNlclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHVibGljIHZvaWQgdGVzdFRleHQxKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJdGV4dFBhcnNlclRlc3QoInNhbXBsZTAxLmNzcyIpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFRleHQyKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJdGV4dFBhcnNlclRlc3QoInNhbXBsZTAyLmNzcyIpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFRleHQzKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJdGV4dFBhcnNlclRlc3QoInNhbXBsZTAzLmNzcyIpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFRleHQ0KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJdGV4dFBhcnNlclRlc3QoInNhbXBsZTA0LmNzcyIpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFRleHQ1KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJdGV4dFBhcnNlclRlc3QoInNhbXBsZTA1LmNzcyIpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFRleHQ2KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJdGV4dFBhcnNlclRlc3QoInNhbXBsZTA2LmNzcyIpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFRleHQ3KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJdGV4dFBhcnNlclRlc3QoInNhbXBsZTA3LmNzcyIpOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RUZXh0OCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXRleHRQYXJzZXJUZXN0KCJzYW1wbGUwOC5jc3MiKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXByaXZhdGUgdm9pZCB0ZXh0UGFyc2VyVGVzdChTdHJpbmcgZmlsZW5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBzb3VyY2UgPSBjcmVhdGVTdHJpbmcoZmlsZW5hbWUpOyAvLyROT04tTkxTLTEkCi0JCUNTU1RleHRQYXJzZXIgcGFyc2VyID0gbmV3IENTU1RleHRQYXJzZXIoQ1NTVGV4dFBhcnNlci5NT0RFX1NUWUxFU0hFRVQsIHNvdXJjZSk7Ci0JCVN0cmluZyByZXN1bHQgPSBkdW1wUmVnaW9ucyhwYXJzZXIuZ2V0VG9rZW5MaXN0KCkpOwotCQljb21wYXJlUmVzdWx0KHJlc3VsdCwgIkNTU1RleHRQYXJzZXJUZXN0LSIgKyBmaWxlbmFtZSk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwcml2YXRlIFN0cmluZyBjcmVhdGVTdHJpbmcoU3RyaW5nIGZpbGVuYW1lKSB0aHJvd3MgRmlsZU5vdEZvdW5kRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCXJldHVybiBGaWxlVXRpbC5jcmVhdGVTdHJpbmcoRklMRVNfRElSLCBmaWxlbmFtZSk7Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgZHVtcFJlZ2lvbnMoTGlzdCB0b2tlbnMpIHsKLQkJU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJSXRlcmF0b3IgaSA9IHRva2Vucy5pdGVyYXRvcigpOwotCQl3aGlsZSAoaS5oYXNOZXh0KCkpIHsKLQkJCWJ1Zi5hcHBlbmQoZHVtcE9uZVJlZ2lvbigoQ1NTVGV4dFRva2VuKSBpLm5leHQoKSkpOwotCQl9Ci0KLQkJYnVmLmFwcGVuZChGaWxlVXRpbC5jb21tb25FT0wgKyAiLS0tLS0tLSIgKyBGaWxlVXRpbC5jb21tb25FT0wpOyAvLyROT04tTkxTLTEkCi0KLQkJcmV0dXJuIGJ1Zi50b1N0cmluZygpOwotCX0KLQotCXByaXZhdGUgU3RyaW5nIGR1bXBPbmVSZWdpb24oQ1NTVGV4dFRva2VuIHRva2VuKSB7Ci0JCVN0cmluZ0J1ZmZlciBidWYgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0KLQkJYnVmLmFwcGVuZCgiWyIpOyAvLyROT04tTkxTLTEkCi0JCWJ1Zi5hcHBlbmQodG9rZW4uaW1hZ2UpOwotCQlidWYuYXBwZW5kKCJdICIpOyAvLyROT04tTkxTLTEkCi0JCWJ1Zi5hcHBlbmQodG9rZW4ua2luZCk7Ci0JCWJ1Zi5hcHBlbmQoIiAtICIpOyAvLyROT04tTkxTLTEkCi0JCWJ1Zi5hcHBlbmQodG9rZW4uc3RhcnQpOwotCQlidWYuYXBwZW5kKCIsICIpOyAvLyROT04tTkxTLTEkCi0JCWJ1Zi5hcHBlbmQodG9rZW4ubGVuZ3RoKTsKLQotCQlidWYuYXBwZW5kKEZpbGVVdGlsLmNvbW1vbkVPTCk7IC8vJE5PTi1OTFMtMSQKLQkJcmV0dXJuIGJ1Zi50b1N0cmluZygpOwotCX0KLQotCXByaXZhdGUgYm9vbGVhbiBmRHVtcCA9IGZhbHNlOwotCi0JcHJpdmF0ZSB2b2lkIGNvbXBhcmVSZXN1bHQoU3RyaW5nIGFjdHVhbCwgU3RyaW5nIGZpbGVuYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlpZiAoZkR1bXApIHsKLQkJCUZpbGVVdGlsLmR1bXBTdHJpbmcoYWN0dWFsLCBSRVNVTFRTX0RJUiwgZmlsZW5hbWUpOwotCQl9Ci0JCWVsc2UgewotCQkJU3RyaW5nIHJlc3VsdCA9IEZpbGVVdGlsLmNyZWF0ZVN0cmluZyhSRVNVTFRTX0RJUiwgZmlsZW5hbWUpOwotCQkJYXNzZXJ0RXF1YWxzKHJlc3VsdCwgYWN0dWFsKTsKLQkJfQotCX0KLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBGSUxFU19ESVIgPSAic3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFJFU1VMVFNfRElSID0gInNyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMiOwotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvc291cmNlL0NTU1VybFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3NvdXJjZS9DU1NVcmxUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlMjgyNTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvc291cmNlL0NTU1VybFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLnNvdXJjZTsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnBhcnNlci5DU1NTb3VyY2VQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnBhcnNlcnouQ1NTUmVnaW9uQ29udGV4dHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklDU1NNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwudXRpbC5DU1NVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy51dGlsLkZpbGVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JVGV4dFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JVGV4dFJlZ2lvbkxpc3Q7Ci0KLXB1YmxpYyBjbGFzcyBDU1NVcmxUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCi0JLyoqCi0JICogRGVjbGFyYXRpb246IHdpdGhvdXQgcXVvdGVzCi0JICovCi0JcHVibGljIHZvaWQgdGVzdERlY2xhcmF0aW9uMSgpIHsKLQkJSUNTU01vZGVsIG1vZGVsID0gRmlsZVV0aWwuY3JlYXRlTW9kZWwoKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkoKENTU1NvdXJjZVBhcnNlcikgZG9jdW1lbnQuZ2V0UGFyc2VyKCkpLnNldFBhcnNlck1vZGUoQ1NTU291cmNlUGFyc2VyLk1PREVfREVDTEFSQVRJT05fVkFMVUUpOwotCQlkb2N1bWVudC5zZXQoImJhY2tncm91bmQtaW1hZ2U6IHVybCh3aGl0ZSBzcGFjZS5naWYpOyIpOyAvLyROT04tTkxTLTEkCi0JCVVybEluZm9bXSB1cmxzID0gcGlja3VwVXJsKGRvY3VtZW50KTsKLQotCQlhc3NlcnRFcXVhbHMoMSwgdXJscy5sZW5ndGgpOwotCQlhc3NlcnRFcXVhbHMoQ1NTUmVnaW9uQ29udGV4dHMuQ1NTX0RFQ0xBUkFUSU9OX1ZBTFVFX1VSSSwgdXJsc1swXS5nZXRUeXBlKCkpOwotCQlhc3NlcnRFcXVhbHMoIndoaXRlIHNwYWNlLmdpZiIsIHVybHNbMF0uZ2V0VXJsKCkpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JLyoqCi0JICogRGVjbGFyYXRpb246IHdpdGhvdXQgcXVvdGVzLCB3aXRoIHN1cnJvdW5kZWQgc3BhY2UKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0RGVjbGFyYXRpb24yKCkgewotCQlJQ1NTTW9kZWwgbW9kZWwgPSBGaWxlVXRpbC5jcmVhdGVNb2RlbCgpOwotCQlJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCSgoQ1NTU291cmNlUGFyc2VyKSBkb2N1bWVudC5nZXRQYXJzZXIoKSkuc2V0UGFyc2VyTW9kZShDU1NTb3VyY2VQYXJzZXIuTU9ERV9ERUNMQVJBVElPTl9WQUxVRSk7Ci0JCWRvY3VtZW50LnNldCgiYmFja2dyb3VuZC1pbWFnZTogdXJsKCAgd2hpdGUgc3BhY2UuZ2lmICApOyIpOyAvLyROT04tTkxTLTEkCi0JCVVybEluZm9bXSB1cmxzID0gcGlja3VwVXJsKGRvY3VtZW50KTsKLQotCQlhc3NlcnRFcXVhbHMoMSwgdXJscy5sZW5ndGgpOwotCQlhc3NlcnRFcXVhbHMoQ1NTUmVnaW9uQ29udGV4dHMuQ1NTX0RFQ0xBUkFUSU9OX1ZBTFVFX1VSSSwgdXJsc1swXS5nZXRUeXBlKCkpOwotCQlhc3NlcnRFcXVhbHMoIndoaXRlIHNwYWNlLmdpZiIsIHVybHNbMF0uZ2V0VXJsKCkpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JLyoqCi0JICogRGVjbGFyYXRpb246IHdpdGggc2luZ2xlIHF1b3RlCi0JICovCi0JcHVibGljIHZvaWQgdGVzdERlY2xhcmF0aW9uMygpIHsKLQkJSUNTU01vZGVsIG1vZGVsID0gRmlsZVV0aWwuY3JlYXRlTW9kZWwoKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkoKENTU1NvdXJjZVBhcnNlcikgZG9jdW1lbnQuZ2V0UGFyc2VyKCkpLnNldFBhcnNlck1vZGUoQ1NTU291cmNlUGFyc2VyLk1PREVfREVDTEFSQVRJT05fVkFMVUUpOwotCQlkb2N1bWVudC5zZXQoImJhY2tncm91bmQtaW1hZ2U6IHVybChcJ3doaXRlIHNwYWNlLmdpZlwnKTsiKTsgLy8kTk9OLU5MUy0xJAotCQlVcmxJbmZvW10gdXJscyA9IHBpY2t1cFVybChkb2N1bWVudCk7Ci0KLQkJYXNzZXJ0RXF1YWxzKDEsIHVybHMubGVuZ3RoKTsKLQkJYXNzZXJ0RXF1YWxzKENTU1JlZ2lvbkNvbnRleHRzLkNTU19ERUNMQVJBVElPTl9WQUxVRV9VUkksIHVybHNbMF0uZ2V0VHlwZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3aGl0ZSBzcGFjZS5naWYiLCB1cmxzWzBdLmdldFVybCgpKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCS8qKgotCSAqIERlY2xhcmF0aW9uOiB3aXRoIGRvdWJsZSBxdW90ZQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3REZWNsYXJhdGlvbjQoKSB7Ci0JCUlDU1NNb2RlbCBtb2RlbCA9IEZpbGVVdGlsLmNyZWF0ZU1vZGVsKCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJKChDU1NTb3VyY2VQYXJzZXIpIGRvY3VtZW50LmdldFBhcnNlcigpKS5zZXRQYXJzZXJNb2RlKENTU1NvdXJjZVBhcnNlci5NT0RFX0RFQ0xBUkFUSU9OX1ZBTFVFKTsKLQkJZG9jdW1lbnQuc2V0KCJiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJ3aGl0ZSBzcGFjZS5naWZcIik7Iik7IC8vJE5PTi1OTFMtMSQKLQkJVXJsSW5mb1tdIHVybHMgPSBwaWNrdXBVcmwoZG9jdW1lbnQpOwotCi0JCWFzc2VydEVxdWFscygxLCB1cmxzLmxlbmd0aCk7Ci0JCWFzc2VydEVxdWFscyhDU1NSZWdpb25Db250ZXh0cy5DU1NfREVDTEFSQVRJT05fVkFMVUVfVVJJLCB1cmxzWzBdLmdldFR5cGUoKSk7Ci0JCWFzc2VydEVxdWFscygid2hpdGUgc3BhY2UuZ2lmIiwgdXJsc1swXS5nZXRVcmwoKSk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQkvKioKLQkgKiBEZWNsYXJhdGlvbjogdHdvIHVybHMKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0RGVjbGFyYXRpb241KCkgewotCQlJQ1NTTW9kZWwgbW9kZWwgPSBGaWxlVXRpbC5jcmVhdGVNb2RlbCgpOwotCQlJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCSgoQ1NTU291cmNlUGFyc2VyKSBkb2N1bWVudC5nZXRQYXJzZXIoKSkuc2V0UGFyc2VyTW9kZShDU1NTb3VyY2VQYXJzZXIuTU9ERV9ERUNMQVJBVElPTl9WQUxVRSk7Ci0JCWRvY3VtZW50LnNldCgiYmFja2dyb3VuZC1pbWFnZTogdXJsKHdoaXRlIHNwYWNlLmdpZik7IGxpc3Qtc3R5bGUtaW1hZ2U6IHVybChzdHlsZSBpbWFnZS5naWYpOyIpOyAvLyROT04tTkxTLTEkCi0JCVVybEluZm9bXSB1cmxzID0gcGlja3VwVXJsKGRvY3VtZW50KTsKLQotCQlhc3NlcnRFcXVhbHMoMiwgdXJscy5sZW5ndGgpOwotCQlhc3NlcnRFcXVhbHMoQ1NTUmVnaW9uQ29udGV4dHMuQ1NTX0RFQ0xBUkFUSU9OX1ZBTFVFX1VSSSwgdXJsc1swXS5nZXRUeXBlKCkpOwotCQlhc3NlcnRFcXVhbHMoIndoaXRlIHNwYWNlLmdpZiIsIHVybHNbMF0uZ2V0VXJsKCkpOyAvLyROT04tTkxTLTEkCi0JCWFzc2VydEVxdWFscyhDU1NSZWdpb25Db250ZXh0cy5DU1NfREVDTEFSQVRJT05fVkFMVUVfVVJJLCB1cmxzWzFdLmdldFR5cGUoKSk7Ci0JCWFzc2VydEVxdWFscygic3R5bGUgaW1hZ2UuZ2lmIiwgdXJsc1sxXS5nZXRVcmwoKSk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQkvKioKLQkgKiBTdHlsZSBydWxlOiB0d28gdXJscwotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RTdHlsZVJ1bGUxKCkgewotCQlJQ1NTTW9kZWwgbW9kZWwgPSBGaWxlVXRpbC5jcmVhdGVNb2RlbCgpOwotCQlJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCWRvY3VtZW50LnNldCgiTEkgeyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwod2hpdGUgc3BhY2UuZ2lmKTtcclxubGlzdC1zdHlsZS1pbWFnZTogdXJsKHN0eWxlIGltYWdlLmdpZik7IH0iKTsgLy8kTk9OLU5MUy0xJAotCQlVcmxJbmZvW10gdXJscyA9IHBpY2t1cFVybChkb2N1bWVudCk7Ci0KLQkJYXNzZXJ0RXF1YWxzKDIsIHVybHMubGVuZ3RoKTsKLQkJYXNzZXJ0RXF1YWxzKENTU1JlZ2lvbkNvbnRleHRzLkNTU19ERUNMQVJBVElPTl9WQUxVRV9VUkksIHVybHNbMF0uZ2V0VHlwZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3aGl0ZSBzcGFjZS5naWYiLCB1cmxzWzBdLmdldFVybCgpKTsgLy8kTk9OLU5MUy0xJAotCQlhc3NlcnRFcXVhbHMoQ1NTUmVnaW9uQ29udGV4dHMuQ1NTX0RFQ0xBUkFUSU9OX1ZBTFVFX1VSSSwgdXJsc1sxXS5nZXRUeXBlKCkpOwotCQlhc3NlcnRFcXVhbHMoInN0eWxlIGltYWdlLmdpZiIsIHVybHNbMV0uZ2V0VXJsKCkpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JLyoqCi0JICogSW1wb3J0IHJ1bGUgYW5kIHN0eWxlIHJ1bGU6IHdpdGhvdXQgcXVvdGVzCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFNvbWVSdWxlczEoKSB7Ci0JCUlDU1NNb2RlbCBtb2RlbCA9IEZpbGVVdGlsLmNyZWF0ZU1vZGVsKCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJZG9jdW1lbnQuc2V0KCJAaW1wb3J0IHVybCh3aGl0ZSBzcGFjZS5jc3MpO0xJIHsgYmFja2dyb3VuZC1pbWFnZTogdXJsKHdoaXRlIHNwYWNlLmdpZik7bGlzdC1zdHlsZS1pbWFnZTogdXJsKHN0eWxlIGltYWdlLmdpZik7IH0iKTsgLy8kTk9OLU5MUy0xJAotCQlVcmxJbmZvW10gdXJscyA9IHBpY2t1cFVybChkb2N1bWVudCk7Ci0KLQkJYXNzZXJ0RXF1YWxzKDMsIHVybHMubGVuZ3RoKTsKLQkJYXNzZXJ0RXF1YWxzKENTU1JlZ2lvbkNvbnRleHRzLkNTU19VUkksIHVybHNbMF0uZ2V0VHlwZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3aGl0ZSBzcGFjZS5jc3MiLCB1cmxzWzBdLmdldFVybCgpKTsgLy8kTk9OLU5MUy0xJAotCQlhc3NlcnRFcXVhbHMoQ1NTUmVnaW9uQ29udGV4dHMuQ1NTX0RFQ0xBUkFUSU9OX1ZBTFVFX1VSSSwgdXJsc1sxXS5nZXRUeXBlKCkpOwotCQlhc3NlcnRFcXVhbHMoIndoaXRlIHNwYWNlLmdpZiIsIHVybHNbMV0uZ2V0VXJsKCkpOyAvLyROT04tTkxTLTEkCi0JCWFzc2VydEVxdWFscyhDU1NSZWdpb25Db250ZXh0cy5DU1NfREVDTEFSQVRJT05fVkFMVUVfVVJJLCB1cmxzWzJdLmdldFR5cGUoKSk7Ci0JCWFzc2VydEVxdWFscygic3R5bGUgaW1hZ2UuZ2lmIiwgdXJsc1syXS5nZXRVcmwoKSk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQkvKioKLQkgKiBEZWNsYXJhdGlvbjogVHdvIHVybHMgYnV0IHBhcmVudGhlc2lzIGFyZSBtaXNzZWQsIHNvIGNvbmNhdGVuYXRlZCB1cmwKLQkgKiBpcyBpZGVudGlmaWVkLiBCeSBhZGRpbmcgcGFyZW50aGVzaXMsIHVybHMgYXJlIGNvcnJlY3RlZC4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Rml4RXJyb3IxKCkgewotCQlJQ1NTTW9kZWwgbW9kZWwgPSBGaWxlVXRpbC5jcmVhdGVNb2RlbCgpOwotCQlJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCSgoQ1NTU291cmNlUGFyc2VyKSBkb2N1bWVudC5nZXRQYXJzZXIoKSkuc2V0UGFyc2VyTW9kZShDU1NTb3VyY2VQYXJzZXIuTU9ERV9ERUNMQVJBVElPTl9WQUxVRSk7Ci0JCS8vIF9fX19fX19fX19fXzAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5Ci0JCWRvY3VtZW50LnNldCgiYmFja2dyb3VuZC1pbWFnZTogdXJsKHdoaXRlIHNwYWNlLmdpZjsgbGlzdC1zdHlsZS1pbWFnZTogdXJsc3R5bGUgaW1hZ2UuZ2lmKTsiKTsgLy8kTk9OLU5MUy0xJAotCQlVcmxJbmZvW10gdXJscyA9IHBpY2t1cFVybChkb2N1bWVudCk7Ci0JCWFzc2VydEVxdWFscygxLCB1cmxzLmxlbmd0aCk7Ci0JCWFzc2VydEVxdWFscyhDU1NSZWdpb25Db250ZXh0cy5DU1NfREVDTEFSQVRJT05fVkFMVUVfVVJJLCB1cmxzWzBdLmdldFR5cGUoKSk7Ci0JCWFzc2VydEVxdWFscygid2hpdGUgc3BhY2UuZ2lmOyBsaXN0LXN0eWxlLWltYWdlOiB1cmxzdHlsZSBpbWFnZS5naWYiLCB1cmxzWzBdLmdldFVybCgpKTsgLy8kTk9OLU5MUy0xJAotCi0JCS8vIGNvcnJlY3QgZmlyc3QgdXJsCi0JCWRvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIDM3LCAwLCAiKSIpOyAvLyROT04tTkxTLTEkCi0JCXVybHMgPSBwaWNrdXBVcmwoZG9jdW1lbnQpOwotCQlhc3NlcnRFcXVhbHMoMSwgdXJscy5sZW5ndGgpOwotCQlhc3NlcnRFcXVhbHMoQ1NTUmVnaW9uQ29udGV4dHMuQ1NTX0RFQ0xBUkFUSU9OX1ZBTFVFX1VSSSwgdXJsc1swXS5nZXRUeXBlKCkpOwotCQlhc3NlcnRFcXVhbHMoIndoaXRlIHNwYWNlLmdpZiIsIHVybHNbMF0uZ2V0VXJsKCkpOyAvLyROT04tTkxTLTEkCi0KLQkJLy8gY29ycmVjdCBzZWNvbmQgdXJsCi0JCWRvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIDYxLCAwLCAiKCIpOyAvLyROT04tTkxTLTEkCi0JCXVybHMgPSBwaWNrdXBVcmwoZG9jdW1lbnQpOwotCQlhc3NlcnRFcXVhbHMoMiwgdXJscy5sZW5ndGgpOwotCQlhc3NlcnRFcXVhbHMoQ1NTUmVnaW9uQ29udGV4dHMuQ1NTX0RFQ0xBUkFUSU9OX1ZBTFVFX1VSSSwgdXJsc1swXS5nZXRUeXBlKCkpOwotCQlhc3NlcnRFcXVhbHMoIndoaXRlIHNwYWNlLmdpZiIsIHVybHNbMF0uZ2V0VXJsKCkpOyAvLyROT04tTkxTLTEkCi0JCWFzc2VydEVxdWFscyhDU1NSZWdpb25Db250ZXh0cy5DU1NfREVDTEFSQVRJT05fVkFMVUVfVVJJLCB1cmxzWzFdLmdldFR5cGUoKSk7Ci0JCWFzc2VydEVxdWFscygic3R5bGUgaW1hZ2UuZ2lmIiwgdXJsc1sxXS5nZXRVcmwoKSk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQkvKioKLQkgKiBJbXBvcnQgcnVsZSBhbmQgc3R5bGUgcnVsZTogVHdvIHVybHMgYnV0IHBhcmVudGhlc2lzIGFyZSBtaXNzZWQsIHNvCi0JICogY29uY2F0ZW5hdGVkIHVybCBpcyBpZGVudGlmaWVkLiBCeSBhZGRpbmcgcGFyZW50aGVzaXMsIHVybHMgYXJlCi0JICogY29ycmVjdGVkLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RGaXhFcnJvcjIoKSB7Ci0JCUlDU1NNb2RlbCBtb2RlbCA9IEZpbGVVdGlsLmNyZWF0ZU1vZGVsKCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJLy8gX19fX19fX19fX19fMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkKLQkJZG9jdW1lbnQuc2V0KCJAaW1wb3J0IHVybCh3aGl0ZSBzcGFjZS5jc3M7TEkgeyBiYWNrZ3JvdW5kLWltYWdlOiB1cmx3aGl0ZSBzcGFjZS5naWYpOyB9Iik7IC8vJE5PTi1OTFMtMSQJCQotCQlVcmxJbmZvW10gdXJscyA9IHBpY2t1cFVybChkb2N1bWVudCk7Ci0JCWFzc2VydEVxdWFscygxLCB1cmxzLmxlbmd0aCk7Ci0JCWFzc2VydEVxdWFscyhDU1NSZWdpb25Db250ZXh0cy5DU1NfVVJJLCB1cmxzWzBdLmdldFR5cGUoKSk7Ci0JCWFzc2VydEVxdWFscygid2hpdGUgc3BhY2UuY3NzO0xJIHsgYmFja2dyb3VuZC1pbWFnZTogdXJsd2hpdGUgc3BhY2UuZ2lmIiwgdXJsc1swXS5nZXRVcmwoKSk7IC8vJE5PTi1OTFMtMSQKLQotCQkvLyBjb3JyZWN0IGZpcnN0IHVybAotCQlkb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCAyNywgMCwgIikiKTsgLy8kTk9OLU5MUy0xJAotCQl1cmxzID0gcGlja3VwVXJsKGRvY3VtZW50KTsKLQkJYXNzZXJ0RXF1YWxzKDEsIHVybHMubGVuZ3RoKTsKLQkJYXNzZXJ0RXF1YWxzKENTU1JlZ2lvbkNvbnRleHRzLkNTU19VUkksIHVybHNbMF0uZ2V0VHlwZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3aGl0ZSBzcGFjZS5jc3MiLCB1cmxzWzBdLmdldFVybCgpKTsgLy8kTk9OLU5MUy0xJAotCi0JCS8vIGNvcnJlY3Qgc2Vjb25kIHVybAotCQlkb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCA1NSwgMCwgIigiKTsgLy8kTk9OLU5MUy0xJAotCQl1cmxzID0gcGlja3VwVXJsKGRvY3VtZW50KTsKLQkJYXNzZXJ0RXF1YWxzKDIsIHVybHMubGVuZ3RoKTsKLQkJYXNzZXJ0RXF1YWxzKENTU1JlZ2lvbkNvbnRleHRzLkNTU19VUkksIHVybHNbMF0uZ2V0VHlwZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3aGl0ZSBzcGFjZS5jc3MiLCB1cmxzWzBdLmdldFVybCgpKTsgLy8kTk9OLU5MUy0xJAotCQlhc3NlcnRFcXVhbHMoQ1NTUmVnaW9uQ29udGV4dHMuQ1NTX0RFQ0xBUkFUSU9OX1ZBTFVFX1VSSSwgdXJsc1sxXS5nZXRUeXBlKCkpOwotCQlhc3NlcnRFcXVhbHMoIndoaXRlIHNwYWNlLmdpZiIsIHVybHNbMV0uZ2V0VXJsKCkpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JLyoqCi0JICogSW1wb3J0IHJ1bGU6IFVybCBoYXMgb25seSBvbmUgcXVvdGUsIHNvIGl0IGlzIG5vdCBpZGVudGlmaWVkIGFzIHVybC4gQnkKLQkgKiByZW1vdmluZyBxdW90ZSwgdXJsIGlzIGNvcnJlY3RlZC4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Rml4RXJyb3IzKCkgewotCQlJQ1NTTW9kZWwgbW9kZWwgPSBGaWxlVXRpbC5jcmVhdGVNb2RlbCgpOwotCQlJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCS8vIF9fX19fX19fX19fXzAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAKLQkJZG9jdW1lbnQuc2V0KCJAaW1wb3J0IHVybCh3aGl0ZSBzcGFjZS5jc3NcIik7Iik7IC8vJE5PTi1OTFMtMSQJCQotCQlVcmxJbmZvW10gdXJscyA9IHBpY2t1cFVybChkb2N1bWVudCk7Ci0JCWFzc2VydEVxdWFscygwLCB1cmxzLmxlbmd0aCk7Ci0KLQkJLy8gY29ycmVjdCB1cmwKLQkJZG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgMjcsIDEsICIiKTsgLy8kTk9OLU5MUy0xJAotCQl1cmxzID0gcGlja3VwVXJsKGRvY3VtZW50KTsKLQkJYXNzZXJ0RXF1YWxzKDEsIHVybHMubGVuZ3RoKTsKLQkJYXNzZXJ0RXF1YWxzKENTU1JlZ2lvbkNvbnRleHRzLkNTU19VUkksIHVybHNbMF0uZ2V0VHlwZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3aGl0ZSBzcGFjZS5jc3MiLCB1cmxzWzBdLmdldFVybCgpKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCi0JcHJpdmF0ZSBVcmxJbmZvW10gcGlja3VwVXJsKElTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQpIHsKLQkJTGlzdCB1cmxzID0gbmV3IEFycmF5TGlzdCgpOwotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGRvY3VtZW50UmVnaW9uID0gZG9jdW1lbnQuZ2V0Rmlyc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKTsKLQkJd2hpbGUgKGRvY3VtZW50UmVnaW9uICE9IG51bGwpIHsKLQkJCUlUZXh0UmVnaW9uTGlzdCByZWdpb25MaXN0ID0gZG9jdW1lbnRSZWdpb24uZ2V0UmVnaW9ucygpOwotCQkJSXRlcmF0b3IgaSA9IHJlZ2lvbkxpc3QuaXRlcmF0b3IoKTsKLQkJCXdoaWxlIChpLmhhc05leHQoKSkgewotCQkJCUlUZXh0UmVnaW9uIHRleHRSZWdpb24gPSAoSVRleHRSZWdpb24pIGkubmV4dCgpOwotCQkJCVN0cmluZyB0eXBlID0gdGV4dFJlZ2lvbi5nZXRUeXBlKCk7Ci0JCQkJaWYgKHR5cGUuZXF1YWxzKENTU1JlZ2lvbkNvbnRleHRzLkNTU19VUkkpIHx8IHR5cGUuZXF1YWxzKENTU1JlZ2lvbkNvbnRleHRzLkNTU19ERUNMQVJBVElPTl9WQUxVRV9VUkkpKSB7Ci0JCQkJCXVybHMuYWRkKG5ldyBVcmxJbmZvKHR5cGUsIGRvY3VtZW50UmVnaW9uLmdldEZ1bGxUZXh0KHRleHRSZWdpb24pKSk7Ci0JCQkJfQotCQkJfQotCQkJZG9jdW1lbnRSZWdpb24gPSBkb2N1bWVudFJlZ2lvbi5nZXROZXh0KCk7Ci0JCX0KLQkJcmV0dXJuIChVcmxJbmZvW10pIHVybHMudG9BcnJheShuZXcgVXJsSW5mb1t1cmxzLnNpemUoKV0pOwotCX0KLQotCXByaXZhdGUgY2xhc3MgVXJsSW5mbyB7Ci0JCVVybEluZm8oU3RyaW5nIHR5cGUsIFN0cmluZyB1cmwpIHsKLQkJCWZUeXBlID0gdHlwZTsKLQkJCWZVcmwgPSBDU1NVdGlsLmV4dHJhY3RVcmlDb250ZW50cyh1cmwpOwotCQl9Ci0KLQkJU3RyaW5nIGdldFR5cGUoKSB7Ci0JCQlyZXR1cm4gZlR5cGU7Ci0JCX0KLQotCQlTdHJpbmcgZ2V0VXJsKCkgewotCQkJcmV0dXJuIGZVcmw7Ci0JCX0KLQotCQlwcml2YXRlIFN0cmluZyBmVHlwZTsKLQkJcHJpdmF0ZSBTdHJpbmcgZlVybDsKLQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9DU1NGb250RmFjZVJ1bGVUZXN0LmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9DU1NGb250RmFjZVJ1bGVUZXN0LmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDliZDA3Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvQ1NTRm9udEZhY2VSdWxlVGVzdC5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi1AZm9udC1mYWNlIHsNCi0JZm9udC1mYW1pbHk6ICJTd2lzcyA3MjEiOw0KLQlzcmM6IHVybCgic3dpc3M3MjFibGsucGZyIik7IC8qIFN3aXNzIDcyMSBibGFjayAqLw0KLQlmb250LXN0eWxlOiBub3JtYWwsIGl0YWxpYzsNCi0JZm9udC13ZWlnaHQ6IDgwMCw5MDA7IC8qIG5vdGUgdGhlIGludGVyZXN0aW5nIHByb2JsZW0gdGhhdA0KLQl0aGUgOTAwIHdlaWdodCBpdGFsaWMgZG9lc26BZnQgZXhpc3QgKi8NCi19DQotDQotQGZvbnQtZmFjZSB7DQotCXNyYzogbG9jYWwoIlBhbGF0aW5vIiksDQotCQlsb2NhbCgiVGltZXMgTmV3IFJvbWFuIiksDQotCQlsb2NhbCgiTmV3IFlvcmsiKSwNCi0JCWxvY2FsKCJVdG9waWEiKSwNCi0JCXVybCgiaHR0cDovL3NvbWV3aGVyZS9mcmVlL2ZvbnQiKTsNCi0JZm9udC1mYW1pbHk6IHNlcmlmOw0KLQlmb250LXdlaWdodDogMTAwLCAyMDAsIDMwMCwgNDAwLCA1MDA7DQotCWZvbnQtc3R5bGU6IG5vcm1hbDsNCi0JZm9udC12YXJpYW50OiBub3JtYWw7DQotCWZvbnQtc2l6ZTogYWxsDQotfQ0KLQ0KLUBmb250LWZhY2Ugew0KLQlzcmM6IGxvY2FsKCJBbGFiYW1hIEl0YWxpYyIpLA0KLQl1cmwoaHR0cDovL3d3dy5mb250cy5vcmcvQS9hbGFiYW1hLWl0YWxpYykgZm9ybWF0KCJ0cnVldHlwZSIpOw0KLQlwYW5vc2UtMTogMiA0IDUgMiA1IDQgNSA5IDMgMzsNCi0JZm9udC1mYW1pbHk6IEFsYWJhbWEsIHNlcmlmOw0KLQlmb250LXdlaWdodDogMzAwLCA0MDAsIDUwMDsNCi0JZm9udC1zdHlsZTogaXRhbGljLCBvYmxpcXVlOw0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvQ1NTUGFnZVJ1bGVUZXN0LmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9DU1NQYWdlUnVsZVRlc3QuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOTc3ZjJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9DU1NQYWdlUnVsZVRlc3QuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotQHBhZ2Uge3NpemU6IDguNWluIDExaW47bWFyZ2luOiAyY219DQotDQotQHBhZ2Ugew0KLQlzaXplOiBhdXRvOyAvKiBhdXRvIGlzIHRoZSBpbml0aWFsIHZhbHVlICovDQotCW1hcmdpbjogMTAlOw0KLX0NCi0NCi1AcGFnZSA6bGVmdCB7DQotCW1hcmdpbi1sZWZ0OiA0Y207DQotCW1hcmdpbi1yaWdodDogM2NtOw0KLX0NCi1AcGFnZSA6cmlnaHQgew0KLQltYXJnaW4tbGVmdDogM2NtOw0KLQltYXJnaW4tcmlnaHQ6IDRjbTsNCi19DQotDQotQHBhZ2UgbmFycm93IHtzaXplOiA5Y20gMThjbX1AcGFnZSByb3RhdGVkIHtzaXplOiBsYW5kc2NhcGV9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL0NTU1N0eWxlUnVsZVRlc3QuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL0NTU1N0eWxlUnVsZVRlc3QuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDIwNWEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9DU1NTdHlsZVJ1bGVUZXN0LmNzcworKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8qIHByaW1pdGl2ZSB2YWx1ZXMgKi8NCi1OVU1CRVJTIHsNCi0gICAgTlVNQkVSOiAxMjMuNDU2Ow0KLSAgICBQRVJDRU5UQUdFOiAxMjMuNDU2JTsNCi0gICAgRU1TOiAxMjMuNDU2ZW07DQotICAgIEVYUzogMTIzLjQ1NmV4Ow0KLSAgICBQWDogMTIzLjQ1NnB4Ow0KLSAgICBQWDI6IC0xMjNweDsNCi0gICAgQ006IDEyMy40NTZjbTsNCi0gICAgTU06IDEyMy40NTZtbTsNCi0gICAgSU46IDEyMy40NTZpbjsNCi0gICAgUFQ6IDEyMy40NTZwdDsNCi0gICAgUEM6IDEyMy40NTZwYzsNCi0gICAgREVHOiAtMTIzLjQ1NmRlZzsNCi0gICAgUkFEOiAxMjMuNDU2cmFkOw0KLSAgICBHUkFEOiAxMjMuNDU2Z3JhZDsNCi0gICAgTVM6IDEyMy40NTZtczsNCi0gICAgUzogMTIzLjQ1NnM7DQotICAgIEhaOiAxMjMuNDU2SHo7DQotICAgIEtIWjogMTIzLjQ1NmtIejsNCi0gICAgRElNRU5TSU9OOiAtMTIzLjQ1Nnp6ejsNCi0gICAgSU5URUdFUjogMTIzOw0KLX0NCi0NCi1TVFJJTkdTIHsNCi0gICAgU1RSSU5HOiAic3RyaW5nIjsNCi0gICAgVVJJOiBVUkwoImh0dHA6Ly93d3cuaWJtLmNvbS8iKTsNCi0gICAgSURFTlQ6IGxlZnQ7DQotICAgIEhBU0g6ICNhYmNkZWY7DQotICAgIFVSQU5HRTogVSsyMEE3Ow0KLSAgICBTTEFTSDogLzsNCi0gICAgQ09NTUE6ICw7DQotICAgIElOSEVSSVRfUFJJTUlUSVZFOiBpbmhlcml0Ow0KLSAgICBBVFRSOiBhdHRyKEtFWSk7DQotICAgIEZPUk1BVDogZm9ybWF0KCJ0cnVlZG9jIik7DQotICAgIExPQ0FMOiBsb2NhbCgiRXhjZWxzaW9yIFJvbWFuIik7DQotfQ0KLQ0KLUZVTkNUSU9OUyB7DQotICAgIENPVU5URVI6IGNvdW50ZXIocGFyLW51bSwgdXBwZXItcm9tYW4pOw0KLSAgICBSRUNUOiByZWN0KDEyLCAzNCwgNTYsIDc4KTsNCi0gICAgUkdCQ09MT1I6IHJnYigyNTUsIDEyOCwgMCk7DQotfQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDEuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwMS5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxYWMyZjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwMS5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi1bMCwgM10gKEgxICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtMi8zLCANCi1bMywgOV0gKHsNCi0NCi0JKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzYsIA0KLVs5LCAyMV0gKGNvbG9yOiB3aGl0ZSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNS02LzcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDctMTIsIA0KLVsyMSwgMjRdICgNCi0JKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMywgDQotWzI0LCAyNV0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVsyNSwgMzBdICgNCi0NCi0JKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNSwgDQotWzMwLCA1NF0gKGJhY2tncm91bmQtY29sb3IgOiBibGFjaykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xNi8xNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDE3LTE4LzE5LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAxOS0yNCwgDQotWzU0LCA1OV0gKA0KLQkNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC01LCANCi1bNTksIDYwXSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzYwLCA2Ml0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLQ0KLS0tLS0tLS0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTAyLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDIuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODY3Yzk4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDIuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotWzAsIDIzXSAoQGltcG9ydCB1cmwoImhvZ2UuY3NzIikpDQotICAgIENvbnRleHRSZWdpb24tLT4gSU1QT1JUOiAwLTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBVUkk6IDgtMjMsIA0KLVsyMywgMjRdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFTElNSVRFUjogMC0xLCANCi1bMjQsIDI2XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzI2LCA2MV0gKEBpbXBvcnQgLyogY29tbWVudCAqLyB1cmwoaG9nZS5jc3MpKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IElNUE9SVDogMC03LzgsIENvbnRleHRSZWdpb24tLT4gQ09NTUVOVDogOC0yMS8yMiwgQ29udGV4dFJlZ2lvbi0tPiBVUkk6IDIyLTM1LCANCi1bNjEsIDYyXSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUxJTUlURVI6IDAtMSwgDQotWzYyLCA2NF0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs2NCwgOTZdIChAaW1wb3J0ICJob2dlLmNzcyIgLyogY29tbWVudCAqLykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBJTVBPUlQ6IDAtNy84LCBDb250ZXh0UmVnaW9uLS0+IFNUUklORzogOC0xOC8xOSwgQ29udGV4dFJlZ2lvbi0tPiBDT01NRU5UOiAxOS0zMiwgDQotWzk2LCA5N10gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVMSU1JVEVSOiAwLTEsIA0KLVs5NywgOTldICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bOTksIDE1NV0gKEBJTVBPUlQgJ2hvZ2UuY3NzJyAsbWVkaWExLG1lZGlhMiwsbWVkaWEzIG1lZGlhNCxtZWRpYTUgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IElNUE9SVDogMC03LzgsIENvbnRleHRSZWdpb24tLT4gU1RSSU5HOiA4LTE4LzE5LCBDb250ZXh0UmVnaW9uLS0+IFVOS05PV046IDE5LTIwLCBDb250ZXh0UmVnaW9uLS0+IE1FRElVTTogMjAtMjYsIENvbnRleHRSZWdpb24tLT4gTUVESUFfU0VQQVJBVE9SOiAyNi0yNywgQ29udGV4dFJlZ2lvbi0tPiBNRURJVU06IDI3LTMzLCBDb250ZXh0UmVnaW9uLS0+IE1FRElBX1NFUEFSQVRPUjogMzMtMzQsIENvbnRleHRSZWdpb24tLT4gVU5LTk9XTjogMzQtMzUsIENvbnRleHRSZWdpb24tLT4gTUVESVVNOiAzNS00MS80MiwgQ29udGV4dFJlZ2lvbi0tPiBVTktOT1dOOiA0Mi00OCwgQ29udGV4dFJlZ2lvbi0tPiBNRURJQV9TRVBBUkFUT1I6IDQ4LTQ5LCBDb250ZXh0UmVnaW9uLS0+IE1FRElVTTogNDktNTUvNTYsIA0KLVsxNTUsIDE2OV0gKEBpbXBvcnQgbWVkaWE2KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IElNUE9SVDogMC03LzgsIENvbnRleHRSZWdpb24tLT4gVU5LTk9XTjogOC0xNCwgDQotWzE2OSwgMTcwXSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUxJTUlURVI6IDAtMSwgDQotWzE3MCwgMjIxXSAoDQotDQotPCEtLSAvKiBob2dlaG9nZSAqLw0KLQ0KLS0tPg0KLQ0KLS8qIGNvbW1lbnQgMiAqLw0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTQsIENvbnRleHRSZWdpb24tLT4gQ0RPOiA0LTgvOSwgQ29udGV4dFJlZ2lvbi0tPiBDT01NRU5UOiA5LTIzLzI3LCBDb250ZXh0UmVnaW9uLS0+IENEQzogMjctMzAvMzQsIENvbnRleHRSZWdpb24tLT4gQ09NTUVOVDogMzQtNDkvNTEsIA0KLVsyMjEsIDIyN10gKGt1c28NCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTQvNiwgDQotDQotLS0tLS0tLQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDMuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwMy5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwNTcxMTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwMy5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAotWzAsIDI5XSAoQGltcG9ydCB1cmwoIi4uL3NhbXBsZTIuY3NzIikpDQotICAgIENvbnRleHRSZWdpb24tLT4gSU1QT1JUOiAwLTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBVUkk6IDgtMjksIA0KLVsyOSwgMzBdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFTElNSVRFUjogMC0xLCANCi1bMzAsIDU3XSAoDQotDQotLyogU2FtcGxlIFN0eWxlcyAqLw0KLQ0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTQsIENvbnRleHRSZWdpb24tLT4gQ09NTUVOVDogNC0yMy8yNywgDQotWzU3LCA2Ml0gKEJPRFkgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC00LzUsIA0KLVs2MiwgNjZdICh7DQotCSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS80LCANCi1bNjYsIDc5XSAoY29sb3IgOiBibGFjaykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LzYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA2LTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogOC0xMywgDQotWzc5LCA4MF0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVs4MCwgODNdICgNCi0JKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMywgDQotWzgzLCAxMjBdIChiYWNrZ3JvdW5kLWNvbG9yIDogcmdiKDE4MSwgMjUzLCAyMTEpKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTE2LzE3LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTctMTgvMTksIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRlVOQ1RJT046IDE5LTIzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUjogMjMtMjYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1I6IDI2LTI3LzI4LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUjogMjgtMzEsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1I6IDMxLTMyLzMzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUjogMzMtMzYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfUEFSRU5USEVTSVNfQ0xPU0U6IDM2LTM3LCANCi1bMTIwLCAxMjFdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bMTIxLCAxMjRdICgNCi0JKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMywgDQotWzEyNCwgMTQzXSAodGV4dC1hbGlnbiA6IGNlbnRlcikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMC8xMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDExLTEyLzEzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAxMy0xOSwgDQotWzE0MywgMTQ0XSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzE0NCwgMTQ3XSAoDQotCSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTMsIA0KLVsxNDcsIDE4Nl0gKGZvbnQtZmFtaWx5IDogIkhlaXNlaSBNaW5jaG8gVzMiLCBzZXJpZikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMS8xMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDEyLTEzLzE0LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORzogMTQtMzIsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1I6IDMyLTMzLzM0LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAzNC0zOSwgDQotWzE4NiwgMTg4XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzE4OCwgMTg5XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzE4OSwgMTkzXSAoDQotDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNCwgDQotWzE5MywgMjA1XSAoQHBhZ2UgOmxlZnQgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFBBR0U6IDAtNS82LCBDb250ZXh0UmVnaW9uLS0+IENTU19QQUdFX1NFTEVDVE9SOiA2LTExLzEyLCANCi1bMjA1LCAyMDddICh7ICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8yLCANCi1bMjA3LCAyMjRdIChtYXJnaW4tbGVmdCA6IDRjbSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMS8xMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDEyLTEzLzE0LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTjogMTQtMTcsIA0KLVsyMjQsIDIyNV0gKCApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0xLCANCi1bMjI1LCAyMjZdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMjI2LCAyMzBdICgNCi0NCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC00LCANCi1bMjMwLCAyNDNdIChAbWVkaWEgYXVyYWwgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IE1FRElBOiAwLTYvNywgQ29udGV4dFJlZ2lvbi0tPiBNRURJVU06IDctMTIvMTMsIA0KLVsyNDMsIDI0N10gKHsNCi0JKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzQsIA0KLVsyNDcsIDI1NV0gKFAuaGVpZGkgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0xLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NMQVNTOiAxLTcvOCwgDQotWzI1NSwgMjYwXSAoew0KLQkJKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzUsIA0KLVsyNjAsIDI4MV0gKGF6aW11dGggOiBjZW50ZXItbGVmdCkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC03LzgsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA4LTkvMTAsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDEwLTIxLCANCi1bMjgxLCAyODJdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bMjgyLCAyODZdICgNCi0JCSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTQsIA0KLVsyODYsIDMwNV0gKGVsZXZhdGlvbiA6IDEyLjNkZWcpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtOS8xMCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDEwLTExLzEyLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTjogMTItMTksIA0KLVszMDUsIDMwNl0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVszMDYsIDMxMF0gKA0KLQkJKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNCwgDQotWzMxMCwgMzI3XSAocGF1c2UgOiAzMG1zIDEuNnMpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNS82LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNi03LzgsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OOiA4LTEyLzEzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTjogMTMtMTcsIA0KLVszMjcsIDMzMF0gKA0KLQkpDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0zLCANCi1bMzMwLCAzMzFdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMzMxLCAzMzNdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMzMzLCAzMzRdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMzM0LCAzMzZdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi0NCi0tLS0tLS0tDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwNC5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTA0LmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmRjMzZiZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTA0LmNzcworKysgL2Rldi9udWxsCkBAIC0xLDU1NCArMCwwIEBACi1bMCwgMjFdIChAY2hhcnNldCAiSVNPLTg4NTktMSIpDQotICAgIENvbnRleHRSZWdpb24tLT4gQ0hBUlNFVDogMC04LzksIENvbnRleHRSZWdpb24tLT4gU1RSSU5HOiA5LTIxLCANCi1bMjEsIDIyXSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUxJTUlURVI6IDAtMSwgDQotWzIyLCAyNl0gKA0KLQ0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTQsIA0KLVsyNiwgNDldIChAaW1wb3J0IHVybCgiaG9nZS5jc3MiKSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBJTVBPUlQ6IDAtNy84LCBDb250ZXh0UmVnaW9uLS0+IFVSSTogOC0yMywgDQotWzQ5LCA1MF0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVMSU1JVEVSOiAwLTEsIA0KLVs1MCwgNTJdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bNTIsIDg3XSAoQGltcG9ydCAvKiBjb21tZW50ICovIHVybChob2dlLmNzcykpDQotICAgIENvbnRleHRSZWdpb24tLT4gSU1QT1JUOiAwLTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBDT01NRU5UOiA4LTIxLzIyLCBDb250ZXh0UmVnaW9uLS0+IFVSSTogMjItMzUsIA0KLVs4NywgODhdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFTElNSVRFUjogMC0xLCANCi1bODgsIDkwXSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzkwLCAxMjJdIChAaW1wb3J0ICJob2dlLmNzcyIgLyogY29tbWVudCAqLykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBJTVBPUlQ6IDAtNy84LCBDb250ZXh0UmVnaW9uLS0+IFNUUklORzogOC0xOC8xOSwgQ29udGV4dFJlZ2lvbi0tPiBDT01NRU5UOiAxOS0zMiwgDQotWzEyMiwgMTIzXSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUxJTUlURVI6IDAtMSwgDQotWzEyMywgMTI1XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzEyNSwgMTY2XSAoQElNUE9SVCAnaG9nZS5jc3MnIG1lZGlhMSxtZWRpYTIgLCBtZWRpYTMpDQotICAgIENvbnRleHRSZWdpb24tLT4gSU1QT1JUOiAwLTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBTVFJJTkc6IDgtMTgvMTksIENvbnRleHRSZWdpb24tLT4gTUVESVVNOiAxOS0yNSwgQ29udGV4dFJlZ2lvbi0tPiBNRURJQV9TRVBBUkFUT1I6IDI1LTI2LCBDb250ZXh0UmVnaW9uLS0+IE1FRElVTTogMjYtMzIvMzMsIENvbnRleHRSZWdpb24tLT4gTUVESUFfU0VQQVJBVE9SOiAzMy0zNC8zNSwgQ29udGV4dFJlZ2lvbi0tPiBNRURJVU06IDM1LTQxLCANCi1bMTY2LCAxNjddICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFTElNSVRFUjogMC0xLCANCi1bMTY3LCAxNzFdICgNCi0NCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC00LCANCi1bMTcxLCAxODRdIChAbWVkaWEgcHJpbnQgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IE1FRElBOiAwLTYvNywgQ29udGV4dFJlZ2lvbi0tPiBNRURJVU06IDctMTIvMTMsIA0KLVsxODQsIDE4OV0gKHsNCi0NCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvNSwgDQotWzE4OSwgMTkwXSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzE5MCwgMTk0XSAoDQotDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNCwgDQotWzE5NCwgMjA2XSAoQHBhZ2UgOmxlZnQgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFBBR0U6IDAtNS82LCBDb250ZXh0UmVnaW9uLS0+IENTU19QQUdFX1NFTEVDVE9SOiA2LTExLzEyLCANCi1bMjA2LCAyMTFdICh7DQotDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzUsIA0KLVsyMTEsIDIxMl0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsyMTIsIDIxNl0gKA0KLQ0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTQsIA0KLVsyMTYsIDIyN10gKGgxLCBoMiwgaDMgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0yLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1NFUEFSQVRPUjogMi0zLzQsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiA0LTYsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfU0VQQVJBVE9SOiA2LTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDgtMTAvMTEsIA0KLVsyMjcsIDIzMF0gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bMjMwLCAyNTNdIChmb250LWZhbWlseTogc2Fucy1zZXJpZikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDExLTEyLzEzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAxMy0yMywgDQotWzI1MywgMjU1XSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMjU1LCAyNTZdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMjU2LCAyNThdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMjU4LCAyNjRdIChoMSBlbSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ09NQklOQVRPUjogMi0zLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMy01LzYsIA0KLVsyNjQsIDI2N10gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bMjY3LCAyNzhdIChjb2xvcjogYmx1ZSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNS02LzcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDctMTEsIA0KLVsyNzgsIDI4MF0gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzI4MCwgMjgxXSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzI4MSwgMjgzXSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzI4MywgMjk3XSAoZGl2IHAgKltocmVmXSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTMsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ09NQklOQVRPUjogMy00LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogNC01LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NPTUJJTkFUT1I6IDUtNiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9VTklWRVJTQUw6IDYtNywgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfU1RBUlQ6IDctOCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfTkFNRTogOC0xMiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EOiAxMi0xMy8xNCwgDQotWzI5NywgMzAwXSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVszMDAsIDMxMV0gKGNvbG9yOiBibHVlKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTUsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA1LTYvNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogNy0xMSwgDQotWzMxMSwgMzEzXSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMzEzLCAzMTRdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMzE0LCAzMTZdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMzE2LCAzMjVdIChib2R5ID4gUCApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTQvNSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DT01CSU5BVE9SOiA1LTYvNywgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDctOC85LCANCi1bMzI1LCAzMjhdICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzMyOCwgMzQ0XSAobGluZS1oZWlnaHQ6IDEuMykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDExLTEyLzEzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUjogMTMtMTYsIA0KLVszNDQsIDM0Nl0gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzM0NiwgMzQ3XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzM0NywgMzQ5XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzM0OSwgMzYxXSAoZGl2IG9sPmxpIHAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0zLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NPTUJJTkFUT1I6IDMtNCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDQtNiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DT01CSU5BVE9SOiA2LTcsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiA3LTksIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ09NQklOQVRPUjogOS0xMCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDEwLTExLzEyLCANCi1bMzYxLCAzNjNdICh7ICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8yLCANCi1bMzYzLCAzNjRdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMzY0LCAzNjZdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMzY2LCAzNzVdIChtYXRoICsgcCApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTQvNSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DT01CSU5BVE9SOiA1LTYvNywgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDctOC85LCANCi1bMzc1LCAzNzhdICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzM3OCwgMzkyXSAodGV4dC1pbmRlbnQ6IDApDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTEsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxMS0xMi8xMywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVI6IDEzLTE0LCANCi1bMzkyLCAzOTRdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVszOTQsIDM5NV0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVszOTUsIDM5N10gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVszOTcsIDQxMl0gKGgxLm9wZW5lciArIGgyICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtMiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DTEFTUzogMi05LzEwLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NPTUJJTkFUT1I6IDEwLTExLzEyLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMTItMTQvMTUsIA0KLVs0MTIsIDQxNV0gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bNDE1LCA0MzFdIChtYXJnaW4tdG9wOiAtNW1tKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTEwLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTAtMTEvMTIsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OOiAxMi0xNiwgDQotWzQzMSwgNDMzXSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bNDMzLCA0MzRdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bNDM0LCA0MzZdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bNDM2LCA0NDZdIChoMVt0aXRsZV0gKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0yLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9TVEFSVDogMi0zLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FOiAzLTgsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX0VORDogOC05LzEwLCANCi1bNDQ2LCA0NDldICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzQ0OSwgNDYwXSAoY29sb3I6IGJsdWUpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDUtNi83LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiA3LTExLCANCi1bNDYwLCA0NjFdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bNDYxLCA0NjNdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs0NjMsIDQ2NF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVs0NjQsIDQ2Nl0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs0NjYsIDQ4Nl0gKHNwYW5bY2xhc3M9ZXhhbXBsZV0gKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC00LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9TVEFSVDogNC01LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FOiA1LTEwLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9PUEVSQVRPUjogMTAtMTEsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX1ZBTFVFOiAxMS0xOCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EOiAxOC0xOS8yMCwgDQotWzQ4NiwgNDg5XSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVs0ODksIDUwMF0gKGNvbG9yOiBibHVlKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTUsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA1LTYvNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogNy0xMSwgDQotWzUwMCwgNTAxXSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzUwMSwgNTAzXSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bNTAzLCA1MDRdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bNTA0LCA1MDZdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bNTA2LCA1NTBdIChzcGFuW2hlbGxvPSJDbGV2ZWxhbmQiXVtnb29kYnllPSJDb2x1bWJ1cyJdICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtNCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfU1RBUlQ6IDQtNSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfTkFNRTogNS0xMCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfT1BFUkFUT1I6IDEwLTExLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9WQUxVRTogMTEtMjIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX0VORDogMjItMjMsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUOiAyMy0yNCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfTkFNRTogMjQtMzEsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX09QRVJBVE9SOiAzMS0zMiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfVkFMVUU6IDMyLTQyLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9FTkQ6IDQyLTQzLzQ0LCANCi1bNTUwLCA1NTNdICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzU1MywgNTY0XSAoY29sb3I6IGJsdWUpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDUtNi83LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiA3LTExLCANCi1bNTY0LCA1NjVdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bNTY1LCA1NjddICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs1NjcsIDU2OF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVs1NjgsIDU3MF0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs1NzAsIDU5MF0gKGFbcmVsfj0iY29weXJpZ2h0Il0gKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0xLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9TVEFSVDogMS0yLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FOiAyLTUsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX09QRVJBVE9SOiA1LTcsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX1ZBTFVFOiA3LTE4LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9FTkQ6IDE4LTE5LzIwLCANCi1bNTkwLCA1OTNdICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzU5MywgNjA0XSAoY29sb3I6IGJsdWUpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDUtNi83LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiA3LTExLCANCi1bNjA0LCA2MDZdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs2MDYsIDYwN10gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVs2MDcsIDYwOV0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs2MDksIDYzOF0gKGFbaHJlZj0iaHR0cDovL3d3dy53My5vcmcvIl0gKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0xLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9TVEFSVDogMS0yLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FOiAyLTYsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX09QRVJBVE9SOiA2LTcsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX1ZBTFVFOiA3LTI3LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9FTkQ6IDI3LTI4LzI5LCANCi1bNjM4LCA2NDFdICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzY0MSwgNjUyXSAoY29sb3I6IGJsdWUpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDUtNi83LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiA3LTExLCANCi1bNjUyLCA2NTRdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs2NTQsIDY1NV0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVs2NTUsIDY1N10gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs2NTcsIDY2OF0gKCpbbGFuZz1mcl0gKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1VOSVZFUlNBTDogMC0xLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9TVEFSVDogMS0yLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FOiAyLTYsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX09QRVJBVE9SOiA2LTcsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX1ZBTFVFOiA3LTksIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX0VORDogOS0xMC8xMSwgDQotWzY2OCwgNjcxXSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVs2NzEsIDY4NV0gKGRpc3BsYXkgOiBub25lKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDgtOS8xMCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMTAtMTQsIA0KLVs2ODUsIDY4N10gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzY4NywgNjg4XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzY4OCwgNjkwXSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzY5MCwgNzA0XSAoKltsYW5nfD0iZW4iXSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfVU5JVkVSU0FMOiAwLTEsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUOiAxLTIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX05BTUU6IDItNiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfT1BFUkFUT1I6IDYtOCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfVkFMVUU6IDgtMTIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX0VORDogMTItMTMvMTQsIA0KLVs3MDQsIDcwN10gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bNzA3LCA3MThdIChjb2xvciA6IHJlZCkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LzYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA2LTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogOC0xMSwgDQotWzcxOCwgNzIwXSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bNzIwLCA3MjFdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bNzIxLCA3MjNdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bNzIzLCA3NTBdIChESUFMT0dVRVtjaGFyYWN0ZXI9cm9tZW9dDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC04LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9TVEFSVDogOC05LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FOiA5LTE4LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9PUEVSQVRPUjogMTgtMTksIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX1ZBTFVFOiAxOS0yNCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EOiAyNC0yNS8yNywgDQotWzc1MCwgNzUzXSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVs3NTMsIDgwMF0gKHZvaWNlLWZhbWlseTogIkxhd3JlbmNlIE9saXZpZXIiLCBjaGFybGVzLCBtYWxlKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTEyLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTItMTMvMTQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiAxNC0zMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMzItMzMvMzQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDM0LTQxLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiA0MS00Mi80MywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogNDMtNDcsIA0KLVs4MDAsIDgwMl0gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzgwMiwgODAzXSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzgwMywgODA1XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzgwNSwgODM3XSAoRElBTE9HVUVbIGNoYXJhY3RlciA9IGp1bGlldCBdDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC04LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9TVEFSVDogOC05LzEwLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FOiAxMC0xOS8yMCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfT1BFUkFUT1I6IDIwLTIxLzIyLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9WQUxVRTogMjItMjgvMjksIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX0VORDogMjktMzAvMzIsIA0KLVs4MzcsIDg0MF0gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bODQwLCA4ODZdICh2b2ljZS1mYW1pbHk6ICJWaXZpZW4gTGVpZ2giLCB2aWN0b3JpYSwgZmVtYWxlKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTEyLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTItMTMvMTQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiAxNC0yOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMjgtMjkvMzAsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDMwLTM4LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiAzOC0zOS80MCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogNDAtNDYsIA0KLVs4ODYsIDg4OF0gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzg4OCwgODg5XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzg4OSwgODkxXSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzg5MSwgOTAyXSAoKi5wYXN0b3JhbCApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfVU5JVkVSU0FMOiAwLTEsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ0xBU1M6IDEtMTAvMTEsIA0KLVs5MDIsIDkwNV0gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bOTA1LCA5MTddIChjb2xvcjogZ3JlZW4pDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDUtNi83LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiA3LTEyLCANCi1bOTE3LCA5MTldICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs5MTksIDkyMF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVs5MjAsIDkyMl0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs5MjIsIDkzMl0gKC5wYXN0b3JhbCApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ0xBU1M6IDAtOS8xMCwgDQotWzkzMiwgOTM1XSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVs5MzUsIDk0N10gKGNvbG9yOiBncmVlbikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNS02LzcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDctMTIsIA0KLVs5NDcsIDk0OV0gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzk0OSwgOTUwXSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzk1MCwgOTUyXSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzk1MiwgOTY0XSAoSDEucGFzdG9yYWwgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0yLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NMQVNTOiAyLTExLzEyLCANCi1bOTY0LCA5NjddICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzk2NywgOTc5XSAoY29sb3I6IGdyZWVuKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTUsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA1LTYvNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogNy0xMiwgDQotWzk3OSwgOTgxXSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bOTgxLCA5ODJdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bOTgyLCA5ODRdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bOTg0LCAxMDAyXSAocC5wYXN0b3JhbC5tYXJpbmUgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0xLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NMQVNTOiAxLTEwLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NMQVNTOiAxMC0xNy8xOCwgDQotWzEwMDIsIDEwMDVdICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzEwMDUsIDEwMTddIChjb2xvcjogZ3JlZW4pDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDUtNi83LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiA3LTEyLCANCi1bMTAxNywgMTAxOV0gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzEwMTksIDEwMjBdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTAyMCwgMTAyMl0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxMDIyLCAxMDM0XSAoaDEjY2hhcHRlcjEgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0yLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0lEOiAyLTExLzEyLCANCi1bMTAzNCwgMTAzN10gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bMTAzNywgMTA1NV0gKHRleHQtYWxpZ246IGNlbnRlcikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDEwLTExLzEyLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAxMi0xOCwgDQotWzEwNTUsIDEwNTddICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxMDU3LCAxMDU4XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzEwNTgsIDEwNjBdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTA2MCwgMTA4MF0gKGRpdiA+IHA6Zmlyc3QtY2hpbGQgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0zLzQsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ09NQklOQVRPUjogNC01LzYsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiA2LTcsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfUFNFVURPOiA3LTE5LzIwLCANCi1bMTA4MCwgMTA4M10gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bMTA4MywgMTA5N10gKHRleHQtaW5kZW50OiAwKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTExLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTEtMTIvMTMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSOiAxMy0xNCwgDQotWzEwOTcsIDEwOTldICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxMDk5LCAxMTAwXSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzExMDAsIDExMDJdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTEwMiwgMTExOV0gKHA6Zmlyc3QtY2hpbGQgZW0gKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0xLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1BTRVVETzogMS0xMywgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DT01CSU5BVE9SOiAxMy0xNCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDE0LTE2LzE3LCANCi1bMTExOSwgMTEyMl0gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bMTEyMiwgMTE0MF0gKGZvbnQtd2VpZ2h0IDogYm9sZCkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMS8xMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDEyLTEzLzE0LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAxNC0xOCwgDQotWzExNDAsIDExNDJdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxMTQyLCAxMTQzXSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzExNDMsIDExNDVdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTE0NSwgMTE2M10gKCogPiBhOmZpcnN0LWNoaWxkICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9VTklWRVJTQUw6IDAtMS8yLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NPTUJJTkFUT1I6IDItMy80LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogNC01LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1BTRVVETzogNS0xNy8xOCwgDQotWzExNjMsIDExNjZdICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzExNjYsIDExODRdIChmb250LXdlaWdodCA6IGJvbGQpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTEvMTIsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxMi0xMy8xNCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMTQtMTgsIA0KLVsxMTg0LCAxMTg2XSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTE4NiwgMTE4N10gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsxMTg3LCAxMTg5XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzExODksIDEyMDNdIChhOmZpcnN0LWNoaWxkICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtMSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9QU0VVRE86IDEtMTMvMTQsIA0KLVsxMjAzLCAxMjA2XSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVsxMjA2LCAxMjI0XSAoZm9udC13ZWlnaHQgOiBib2xkKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTExLzEyLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTItMTMvMTQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDE0LTE4LCANCi1bMTIyNCwgMTIyNl0gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzEyMjYsIDEyMjddICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTIyNywgMTIyOV0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxMjI5LCAxMjQ4XSAoYS5leHRlcm5hbDp2aXNpdGVkICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtMSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DTEFTUzogMS0xMCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9QU0VVRE86IDEwLTE4LzE5LCANCi1bMTI0OCwgMTI1MV0gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bMTI1MSwgMTI2Ml0gKGNvbG9yOiBibHVlKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTUsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA1LTYvNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogNy0xMSwgDQotWzEyNjIsIDEyNjRdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxMjY0LCAxMjY1XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzEyNjUsIDEyNjddICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTI2NywgMTI4MV0gKGE6Zm9jdXM6aG92ZXIgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0xLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1BTRVVETzogMS03LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1BTRVVETzogNy0xMy8xNCwgDQotWzEyODEsIDEyODRdICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzEyODQsIDEzMDFdIChiYWNrZ3JvdW5kOiB3aGl0ZSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDEwLTExLzEyLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAxMi0xNywgDQotWzEzMDEsIDEzMDNdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxMzAzLCAxMzA0XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzEzMDQsIDEzMDZdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTMwNiwgMTMyMF0gKGh0bWw6bGFuZyhmcikgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC00LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1BTRVVETzogNC0xMy8xNCwgDQotWzEzMjAsIDEzMjNdICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzEzMjMsIDEzNDBdIChxdW90ZXM6ICc8PCcgJz4+JykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC02LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNi03LzgsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiA4LTEyLzEzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORzogMTMtMTcsIA0KLVsxMzQwLCAxMzQyXSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTM0MiwgMTM0M10gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsxMzQzLCAxMzQ1XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzEzNDUsIDEzNTldIChodG1sOmxhbmcoZGUpICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtNCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9QU0VVRE86IDQtMTMvMTQsIA0KLVsxMzU5LCAxMzYyXSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVsxMzYyLCAxMzk1XSAocXVvdGVzOiAnPj4nICc8PCcgJ1wyMDM5JyAnXDIwM0EnKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA2LTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkc6IDgtMTIvMTMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiAxMy0xNy8xOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkc6IDE4LTI1LzI2LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORzogMjYtMzMsIA0KLVsxMzk1LCAxMzk3XSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTM5NywgMTM5OF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsxMzk4LCAxNDAwXSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzE0MDAsIDE0MTRdICg6bGFuZyhmcikgPiBRICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9QU0VVRE86IDAtOS8xMCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DT01CSU5BVE9SOiAxMC0xMS8xMiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDEyLTEzLzE0LCANCi1bMTQxNCwgMTQxN10gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bMTQxNywgMTQzNF0gKHF1b3RlczogJzw8JyAnPj4nKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA2LTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkc6IDgtMTIvMTMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiAxMy0xNywgDQotWzE0MzQsIDE0MzZdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxNDM2LCAxNDM3XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzE0MzcsIDE0MzldICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTQzOSwgMTQ1M10gKDpsYW5nKGRlKSA+IFEgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1BTRVVETzogMC05LzEwLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NPTUJJTkFUT1I6IDEwLTExLzEyLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMTItMTMvMTQsIA0KLVsxNDUzLCAxNDU2XSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVsxNDU2LCAxNDg5XSAocXVvdGVzOiAnPj4nICc8PCcgJ1wyMDM5JyAnXDIwM0EnKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA2LTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkc6IDgtMTIvMTMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiAxMy0xNy8xOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkc6IDE4LTI1LzI2LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORzogMjYtMzMsIA0KLVsxNDg5LCAxNDkxXSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTQ5MSwgMTQ5Ml0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsxNDkyLCAxNDk0XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzE0OTQsIDE1MDldIChwOmZpcnN0LWxldHRlciApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTEsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfUFNFVURPOiAxLTE0LzE1LCANCi1bMTUwOSwgMTUxMl0gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bMTUxMiwgMTUyNl0gKGZvbnQtc2l6ZTogM2VtKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTksIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA5LTEwLzExLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTjogMTEtMTQsIA0KLVsxNTI2LCAxNTI3XSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzE1MjcsIDE1MjhdICggKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMSwgDQotWzE1MjgsIDE1NDddIChmb250LXdlaWdodDogbm9ybWFsKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTExLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTEtMTIvMTMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDEzLTE5LCANCi1bMTU0NywgMTU0OV0gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzE1NDksIDE1NTBdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTU1MCwgMTU1Ml0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxNTUyLCAxNTY5XSAocC5zcGVjaWFsOmJlZm9yZSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTEsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ0xBU1M6IDEtOSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9QU0VVRE86IDktMTYvMTcsIA0KLVsxNTY5LCAxNTcxXSAoeyApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMiwgDQotWzE1NzEsIDE1OTFdIChjb250ZW50OiAiU3BlY2lhbCEgIikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC03LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNy04LzksIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiA5LTIwLCANCi1bMTU5MSwgMTU5Ml0gKCApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0xLCANCi1bMTU5MiwgMTU5M10gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsxNTkzLCAxNTk1XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzE1OTUsIDE2MThdIChwLnNwZWNpYWw6Zmlyc3QtbGV0dGVyICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtMSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DTEFTUzogMS05LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1BTRVVETzogOS0yMi8yMywgDQotWzE2MTgsIDE2MjBdICh7ICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8yLCANCi1bMTYyMCwgMTYzNF0gKGNvbG9yOiAjZmZkODAwKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTUsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA1LTYvNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9IQVNIOiA3LTE0LCANCi1bMTYzNCwgMTYzNV0gKCApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0xLCANCi1bMTYzNSwgMTYzNl0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsxNjM2LCAxNjM4XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzE2MzgsIDE2NDNdIChCT0RZICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtNC81LCANCi1bMTY0MywgMTY0NV0gKHsgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzIsIA0KLVsxNjQ1LCAxNzAzXSAoZm9udC1mYW1pbHk6IEJhc2tlcnZpbGxlLCAiSGVpc2kgTWluY2hvIFczIiwgU3ltYm9sLCBzZXJpZikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDExLTEyLzEzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAxMy0yNCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMjQtMjUvMjYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiAyNi00MywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogNDMtNDQvNDUsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDQ1LTUxLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiA1MS01Mi81MywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogNTMtNTgsIA0KLVsxNzAzLCAxNzA0XSAoICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTEsIA0KLVsxNzA0LCAxNzA1XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzE3MDUsIDE3MDddICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTcwNywgMTcyMV0gKCo6bGFuZyhqYS1qcCkgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1VOSVZFUlNBTDogMC0xLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1BTRVVETzogMS0xMy8xNCwgDQotWzE3MjEsIDE3MjNdICh7ICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8yLCANCi1bMTcyMywgMTc2OF0gKGZvbnQ6IDkwMCAxNHB0LzE2cHQgIkhlaXNlaSBNaW5jaG8gVzkiLCBzZXJpZikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC00LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNC01LzYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSOiA2LTkvMTAsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OOiAxMC0xNCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMTQtMTUsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OOiAxNS0xOS8yMCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkc6IDIwLTM4LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiAzOC0zOS80MCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogNDAtNDUsIA0KLVsxNzY4LCAxNzY5XSAoICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTEsIA0KLVsxNzY5LCAxNzcwXSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzE3NzAsIDE3NzJdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTc3MiwgMTc4Nl0gKCo6bGFuZyh6aC10dykgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1VOSVZFUlNBTDogMC0xLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1BTRVVETzogMS0xMy8xNCwgDQotWzE3ODYsIDE3ODhdICh7ICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8yLCANCi1bMTc4OCwgMTgyNl0gKGZvbnQ6IDgwMCAxNHB0LzE2LjVwdCAiTGkgU3VuZyIsIHNlcmlmKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA0LTUvNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVI6IDYtOS8xMCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT046IDEwLTE0LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiAxNC0xNSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT046IDE1LTIxLzIyLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORzogMjItMzEsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1I6IDMxLTMyLzMzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAzMy0zOCwgDQotWzE4MjYsIDE4MjddICggKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMSwgDQotWzE4MjcsIDE4MjhdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTgyOCwgMTgzMF0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLQ0KLS0tLS0tLS0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTA1LmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDUuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZGMzNmJmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDUuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNTU0ICswLDAgQEAKLVswLCAyMV0gKEBjaGFyc2V0ICJJU08tODg1OS0xIikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBDSEFSU0VUOiAwLTgvOSwgQ29udGV4dFJlZ2lvbi0tPiBTVFJJTkc6IDktMjEsIA0KLVsyMSwgMjJdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFTElNSVRFUjogMC0xLCANCi1bMjIsIDI2XSAoDQotDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNCwgDQotWzI2LCA0OV0gKEBpbXBvcnQgdXJsKCJob2dlLmNzcyIpKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IElNUE9SVDogMC03LzgsIENvbnRleHRSZWdpb24tLT4gVVJJOiA4LTIzLCANCi1bNDksIDUwXSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUxJTUlURVI6IDAtMSwgDQotWzUwLCA1Ml0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs1MiwgODddIChAaW1wb3J0IC8qIGNvbW1lbnQgKi8gdXJsKGhvZ2UuY3NzKSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBJTVBPUlQ6IDAtNy84LCBDb250ZXh0UmVnaW9uLS0+IENPTU1FTlQ6IDgtMjEvMjIsIENvbnRleHRSZWdpb24tLT4gVVJJOiAyMi0zNSwgDQotWzg3LCA4OF0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVMSU1JVEVSOiAwLTEsIA0KLVs4OCwgOTBdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bOTAsIDEyMl0gKEBpbXBvcnQgImhvZ2UuY3NzIiAvKiBjb21tZW50ICovKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IElNUE9SVDogMC03LzgsIENvbnRleHRSZWdpb24tLT4gU1RSSU5HOiA4LTE4LzE5LCBDb250ZXh0UmVnaW9uLS0+IENPTU1FTlQ6IDE5LTMyLCANCi1bMTIyLCAxMjNdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFTElNSVRFUjogMC0xLCANCi1bMTIzLCAxMjVdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTI1LCAxNjZdIChASU1QT1JUICdob2dlLmNzcycgbWVkaWExLG1lZGlhMiAsIG1lZGlhMykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBJTVBPUlQ6IDAtNy84LCBDb250ZXh0UmVnaW9uLS0+IFNUUklORzogOC0xOC8xOSwgQ29udGV4dFJlZ2lvbi0tPiBNRURJVU06IDE5LTI1LCBDb250ZXh0UmVnaW9uLS0+IE1FRElBX1NFUEFSQVRPUjogMjUtMjYsIENvbnRleHRSZWdpb24tLT4gTUVESVVNOiAyNi0zMi8zMywgQ29udGV4dFJlZ2lvbi0tPiBNRURJQV9TRVBBUkFUT1I6IDMzLTM0LzM1LCBDb250ZXh0UmVnaW9uLS0+IE1FRElVTTogMzUtNDEsIA0KLVsxNjYsIDE2N10gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVMSU1JVEVSOiAwLTEsIA0KLVsxNjcsIDE3MV0gKA0KLQ0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTQsIA0KLVsxNzEsIDE4NF0gKEBtZWRpYSBwcmludCApDQotICAgIENvbnRleHRSZWdpb24tLT4gTUVESUE6IDAtNi83LCBDb250ZXh0UmVnaW9uLS0+IE1FRElVTTogNy0xMi8xMywgDQotWzE4NCwgMTg5XSAoew0KLQ0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS81LCANCi1bMTg5LCAxOTBdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTkwLCAxOTRdICgNCi0NCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC00LCANCi1bMTk0LCAyMDZdIChAcGFnZSA6bGVmdCApDQotICAgIENvbnRleHRSZWdpb24tLT4gUEFHRTogMC01LzYsIENvbnRleHRSZWdpb24tLT4gQ1NTX1BBR0VfU0VMRUNUT1I6IDYtMTEvMTIsIA0KLVsyMDYsIDIxMV0gKHsNCi0NCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvNSwgDQotWzIxMSwgMjEyXSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzIxMiwgMjE2XSAoDQotDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNCwgDQotWzIxNiwgMjI3XSAoaDEsIGgyLCBoMyApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfU0VQQVJBVE9SOiAyLTMvNCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDQtNiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9TRVBBUkFUT1I6IDYtNy84LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogOC0xMC8xMSwgDQotWzIyNywgMjMwXSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVsyMzAsIDI1M10gKGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTExLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTEtMTIvMTMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDEzLTIzLCANCi1bMjUzLCAyNTVdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsyNTUsIDI1Nl0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsyNTYsIDI1OF0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsyNTgsIDI2NF0gKGgxIGVtICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtMiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DT01CSU5BVE9SOiAyLTMsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAzLTUvNiwgDQotWzI2NCwgMjY3XSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVsyNjcsIDI3OF0gKGNvbG9yOiBibHVlKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTUsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA1LTYvNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogNy0xMSwgDQotWzI3OCwgMjgwXSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMjgwLCAyODFdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMjgxLCAyODNdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMjgzLCAyOTddIChkaXYgcCAqW2hyZWZdICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtMywgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DT01CSU5BVE9SOiAzLTQsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiA0LTUsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ09NQklOQVRPUjogNS02LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1VOSVZFUlNBTDogNi03LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9TVEFSVDogNy04LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FOiA4LTEyLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9FTkQ6IDEyLTEzLzE0LCANCi1bMjk3LCAzMDBdICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzMwMCwgMzExXSAoY29sb3I6IGJsdWUpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDUtNi83LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiA3LTExLCANCi1bMzExLCAzMTNdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVszMTMsIDMxNF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVszMTQsIDMxNl0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVszMTYsIDMyNV0gKGJvZHkgPiBQICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtNC81LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NPTUJJTkFUT1I6IDUtNi83LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogNy04LzksIA0KLVszMjUsIDMyOF0gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bMzI4LCAzNDRdIChsaW5lLWhlaWdodDogMS4zKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTExLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTEtMTIvMTMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSOiAxMy0xNiwgDQotWzM0NCwgMzQ2XSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMzQ2LCAzNDddICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMzQ3LCAzNDldICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMzQ5LCAzNjFdIChkaXYgb2w+bGkgcCApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTMsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ09NQklOQVRPUjogMy00LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogNC02LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NPTUJJTkFUT1I6IDYtNywgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDctOSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DT01CSU5BVE9SOiA5LTEwLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMTAtMTEvMTIsIA0KLVszNjEsIDM2M10gKHsgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzIsIA0KLVszNjMsIDM2NF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVszNjQsIDM2Nl0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVszNjYsIDM3NV0gKG1hdGggKyBwICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtNC81LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NPTUJJTkFUT1I6IDUtNi83LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogNy04LzksIA0KLVszNzUsIDM3OF0gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bMzc4LCAzOTJdICh0ZXh0LWluZGVudDogMCkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDExLTEyLzEzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUjogMTMtMTQsIA0KLVszOTIsIDM5NF0gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzM5NCwgMzk1XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzM5NSwgMzk3XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzM5NywgNDEyXSAoaDEub3BlbmVyICsgaDIgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0yLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NMQVNTOiAyLTkvMTAsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ09NQklOQVRPUjogMTAtMTEvMTIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAxMi0xNC8xNSwgDQotWzQxMiwgNDE1XSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVs0MTUsIDQzMV0gKG1hcmdpbi10b3A6IC01bW0pDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTAsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxMC0xMS8xMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT046IDEyLTE2LCANCi1bNDMxLCA0MzNdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs0MzMsIDQzNF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVs0MzQsIDQzNl0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs0MzYsIDQ0Nl0gKGgxW3RpdGxlXSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUOiAyLTMsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX05BTUU6IDMtOCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EOiA4LTkvMTAsIA0KLVs0NDYsIDQ0OV0gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bNDQ5LCA0NjBdIChjb2xvcjogYmx1ZSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNS02LzcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDctMTEsIA0KLVs0NjAsIDQ2MV0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVs0NjEsIDQ2M10gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzQ2MywgNDY0XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzQ2NCwgNDY2XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzQ2NiwgNDg2XSAoc3BhbltjbGFzcz1leGFtcGxlXSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTQsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUOiA0LTUsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX05BTUU6IDUtMTAsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX09QRVJBVE9SOiAxMC0xMSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfVkFMVUU6IDExLTE4LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9FTkQ6IDE4LTE5LzIwLCANCi1bNDg2LCA0ODldICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzQ4OSwgNTAwXSAoY29sb3I6IGJsdWUpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDUtNi83LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiA3LTExLCANCi1bNTAwLCA1MDFdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bNTAxLCA1MDNdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs1MDMsIDUwNF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVs1MDQsIDUwNl0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs1MDYsIDU1MF0gKHNwYW5baGVsbG89IkNsZXZlbGFuZCJdW2dvb2RieWU9IkNvbHVtYnVzIl0gKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC00LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9TVEFSVDogNC01LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FOiA1LTEwLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9PUEVSQVRPUjogMTAtMTEsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX1ZBTFVFOiAxMS0yMiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EOiAyMi0yMywgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfU1RBUlQ6IDIzLTI0LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FOiAyNC0zMSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfT1BFUkFUT1I6IDMxLTMyLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9WQUxVRTogMzItNDIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX0VORDogNDItNDMvNDQsIA0KLVs1NTAsIDU1M10gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bNTUzLCA1NjRdIChjb2xvcjogYmx1ZSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNS02LzcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDctMTEsIA0KLVs1NjQsIDU2NV0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVs1NjUsIDU2N10gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzU2NywgNTY4XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzU2OCwgNTcwXSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzU3MCwgNTkwXSAoYVtyZWx+PSJjb3B5cmlnaHQiXSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTEsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUOiAxLTIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX05BTUU6IDItNSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfT1BFUkFUT1I6IDUtNywgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfVkFMVUU6IDctMTgsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX0VORDogMTgtMTkvMjAsIA0KLVs1OTAsIDU5M10gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bNTkzLCA2MDRdIChjb2xvcjogYmx1ZSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNS02LzcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDctMTEsIA0KLVs2MDQsIDYwNl0gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzYwNiwgNjA3XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzYwNywgNjA5XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzYwOSwgNjM4XSAoYVtocmVmPSJodHRwOi8vd3d3LnczLm9yZy8iXSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTEsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUOiAxLTIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX05BTUU6IDItNiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfT1BFUkFUT1I6IDYtNywgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfVkFMVUU6IDctMjcsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX0VORDogMjctMjgvMjksIA0KLVs2MzgsIDY0MV0gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bNjQxLCA2NTJdIChjb2xvcjogYmx1ZSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNS02LzcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDctMTEsIA0KLVs2NTIsIDY1NF0gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzY1NCwgNjU1XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzY1NSwgNjU3XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzY1NywgNjY4XSAoKltsYW5nPWZyXSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfVU5JVkVSU0FMOiAwLTEsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUOiAxLTIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX05BTUU6IDItNiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfT1BFUkFUT1I6IDYtNywgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfVkFMVUU6IDctOSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EOiA5LTEwLzExLCANCi1bNjY4LCA2NzFdICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzY3MSwgNjg1XSAoZGlzcGxheSA6IG5vbmUpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNy84LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogOC05LzEwLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAxMC0xNCwgDQotWzY4NSwgNjg3XSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bNjg3LCA2ODhdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bNjg4LCA2OTBdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bNjkwLCA3MDRdICgqW2xhbmd8PSJlbiJdICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9VTklWRVJTQUw6IDAtMSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfU1RBUlQ6IDEtMiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfTkFNRTogMi02LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9PUEVSQVRPUjogNi04LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9WQUxVRTogOC0xMiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EOiAxMi0xMy8xNCwgDQotWzcwNCwgNzA3XSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVs3MDcsIDcxOF0gKGNvbG9yIDogcmVkKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTUvNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDYtNy84LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiA4LTExLCANCi1bNzE4LCA3MjBdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs3MjAsIDcyMV0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVs3MjEsIDcyM10gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs3MjMsIDc1MF0gKERJQUxPR1VFW2NoYXJhY3Rlcj1yb21lb10NCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTgsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUOiA4LTksIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX05BTUU6IDktMTgsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX09QRVJBVE9SOiAxOC0xOSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfVkFMVUU6IDE5LTI0LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9FTkQ6IDI0LTI1LzI3LCANCi1bNzUwLCA3NTNdICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzc1MywgODAwXSAodm9pY2UtZmFtaWx5OiAiTGF3cmVuY2UgT2xpdmllciIsIGNoYXJsZXMsIG1hbGUpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTIsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxMi0xMy8xNCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkc6IDE0LTMyLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiAzMi0zMy8zNCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMzQtNDEsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1I6IDQxLTQyLzQzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiA0My00NywgDQotWzgwMCwgODAyXSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bODAyLCA4MDNdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bODAzLCA4MDVdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bODA1LCA4MzddIChESUFMT0dVRVsgY2hhcmFjdGVyID0ganVsaWV0IF0NCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTgsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUOiA4LTkvMTAsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX05BTUU6IDEwLTE5LzIwLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9PUEVSQVRPUjogMjAtMjEvMjIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX1ZBTFVFOiAyMi0yOC8yOSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EOiAyOS0zMC8zMiwgDQotWzgzNywgODQwXSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVs4NDAsIDg4Nl0gKHZvaWNlLWZhbWlseTogIlZpdmllbiBMZWlnaCIsIHZpY3RvcmlhLCBmZW1hbGUpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTIsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxMi0xMy8xNCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkc6IDE0LTI4LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiAyOC0yOS8zMCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMzAtMzgsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1I6IDM4LTM5LzQwLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiA0MC00NiwgDQotWzg4NiwgODg4XSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bODg4LCA4ODldICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bODg5LCA4OTFdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bODkxLCA5MDJdICgqLnBhc3RvcmFsICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9VTklWRVJTQUw6IDAtMSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DTEFTUzogMS0xMC8xMSwgDQotWzkwMiwgOTA1XSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVs5MDUsIDkxN10gKGNvbG9yOiBncmVlbikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNS02LzcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDctMTIsIA0KLVs5MTcsIDkxOV0gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzkxOSwgOTIwXSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzkyMCwgOTIyXSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzkyMiwgOTMyXSAoLnBhc3RvcmFsICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DTEFTUzogMC05LzEwLCANCi1bOTMyLCA5MzVdICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzkzNSwgOTQ3XSAoY29sb3I6IGdyZWVuKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTUsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA1LTYvNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogNy0xMiwgDQotWzk0NywgOTQ5XSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bOTQ5LCA5NTBdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bOTUwLCA5NTJdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bOTUyLCA5NjRdIChIMS5wYXN0b3JhbCApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ0xBU1M6IDItMTEvMTIsIA0KLVs5NjQsIDk2N10gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bOTY3LCA5NzldIChjb2xvcjogZ3JlZW4pDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDUtNi83LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiA3LTEyLCANCi1bOTc5LCA5ODFdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs5ODEsIDk4Ml0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVs5ODIsIDk4NF0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs5ODQsIDEwMDJdIChwLnBhc3RvcmFsLm1hcmluZSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTEsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ0xBU1M6IDEtMTAsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ0xBU1M6IDEwLTE3LzE4LCANCi1bMTAwMiwgMTAwNV0gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bMTAwNSwgMTAxN10gKGNvbG9yOiBncmVlbikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNS02LzcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDctMTIsIA0KLVsxMDE3LCAxMDE5XSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTAxOSwgMTAyMF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsxMDIwLCAxMDIyXSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzEwMjIsIDEwMzRdIChoMSNjaGFwdGVyMSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfSUQ6IDItMTEvMTIsIA0KLVsxMDM0LCAxMDM3XSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVsxMDM3LCAxMDU1XSAodGV4dC1hbGlnbjogY2VudGVyKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTEwLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTAtMTEvMTIsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDEyLTE4LCANCi1bMTA1NSwgMTA1N10gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzEwNTcsIDEwNThdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTA1OCwgMTA2MF0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxMDYwLCAxMDgwXSAoZGl2ID4gcDpmaXJzdC1jaGlsZCApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTMvNCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DT01CSU5BVE9SOiA0LTUvNiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDYtNywgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9QU0VVRE86IDctMTkvMjAsIA0KLVsxMDgwLCAxMDgzXSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVsxMDgzLCAxMDk3XSAodGV4dC1pbmRlbnQ6IDApDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTEsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxMS0xMi8xMywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVI6IDEzLTE0LCANCi1bMTA5NywgMTA5OV0gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzEwOTksIDExMDBdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTEwMCwgMTEwMl0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxMTAyLCAxMTE5XSAocDpmaXJzdC1jaGlsZCBlbSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTEsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfUFNFVURPOiAxLTEzLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NPTUJJTkFUT1I6IDEzLTE0LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMTQtMTYvMTcsIA0KLVsxMTE5LCAxMTIyXSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVsxMTIyLCAxMTQwXSAoZm9udC13ZWlnaHQgOiBib2xkKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTExLzEyLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTItMTMvMTQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDE0LTE4LCANCi1bMTE0MCwgMTE0Ml0gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzExNDIsIDExNDNdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTE0MywgMTE0NV0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxMTQ1LCAxMTYzXSAoKiA+IGE6Zmlyc3QtY2hpbGQgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1VOSVZFUlNBTDogMC0xLzIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ09NQklOQVRPUjogMi0zLzQsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiA0LTUsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfUFNFVURPOiA1LTE3LzE4LCANCi1bMTE2MywgMTE2Nl0gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bMTE2NiwgMTE4NF0gKGZvbnQtd2VpZ2h0IDogYm9sZCkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMS8xMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDEyLTEzLzE0LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAxNC0xOCwgDQotWzExODQsIDExODZdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxMTg2LCAxMTg3XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzExODcsIDExODldICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTE4OSwgMTIwM10gKGE6Zmlyc3QtY2hpbGQgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0xLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1BTRVVETzogMS0xMy8xNCwgDQotWzEyMDMsIDEyMDZdICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzEyMDYsIDEyMjRdIChmb250LXdlaWdodCA6IGJvbGQpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTEvMTIsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxMi0xMy8xNCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMTQtMTgsIA0KLVsxMjI0LCAxMjI2XSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTIyNiwgMTIyN10gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsxMjI3LCAxMjI5XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzEyMjksIDEyNDhdIChhLmV4dGVybmFsOnZpc2l0ZWQgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0xLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NMQVNTOiAxLTEwLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1BTRVVETzogMTAtMTgvMTksIA0KLVsxMjQ4LCAxMjUxXSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVsxMjUxLCAxMjYyXSAoY29sb3I6IGJsdWUpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDUtNi83LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiA3LTExLCANCi1bMTI2MiwgMTI2NF0gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzEyNjQsIDEyNjVdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTI2NSwgMTI2N10gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxMjY3LCAxMjgxXSAoYTpmb2N1czpob3ZlciApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTEsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfUFNFVURPOiAxLTcsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfUFNFVURPOiA3LTEzLzE0LCANCi1bMTI4MSwgMTI4NF0gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bMTI4NCwgMTMwMV0gKGJhY2tncm91bmQ6IHdoaXRlKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTEwLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTAtMTEvMTIsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDEyLTE3LCANCi1bMTMwMSwgMTMwM10gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzEzMDMsIDEzMDRdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTMwNCwgMTMwNl0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxMzA2LCAxMzIwXSAoaHRtbDpsYW5nKGZyKSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTQsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfUFNFVURPOiA0LTEzLzE0LCANCi1bMTMyMCwgMTMyM10gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bMTMyMywgMTM0MF0gKHF1b3RlczogJzw8JyAnPj4nKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA2LTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkc6IDgtMTIvMTMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiAxMy0xNywgDQotWzEzNDAsIDEzNDJdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxMzQyLCAxMzQzXSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzEzNDMsIDEzNDVdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTM0NSwgMTM1OV0gKGh0bWw6bGFuZyhkZSkgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC00LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1BTRVVETzogNC0xMy8xNCwgDQotWzEzNTksIDEzNjJdICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzEzNjIsIDEzOTVdIChxdW90ZXM6ICc+PicgJzw8JyAnXDIwMzknICdcMjAzQScpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDYtNy84LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORzogOC0xMi8xMywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkc6IDEzLTE3LzE4LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORzogMTgtMjUvMjYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiAyNi0zMywgDQotWzEzOTUsIDEzOTddICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxMzk3LCAxMzk4XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzEzOTgsIDE0MDBdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTQwMCwgMTQxNF0gKDpsYW5nKGZyKSA+IFEgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1BTRVVETzogMC05LzEwLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NPTUJJTkFUT1I6IDEwLTExLzEyLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMTItMTMvMTQsIA0KLVsxNDE0LCAxNDE3XSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVsxNDE3LCAxNDM0XSAocXVvdGVzOiAnPDwnICc+PicpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDYtNy84LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORzogOC0xMi8xMywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkc6IDEzLTE3LCANCi1bMTQzNCwgMTQzNl0gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzE0MzYsIDE0MzddICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTQzNywgMTQzOV0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxNDM5LCAxNDUzXSAoOmxhbmcoZGUpID4gUSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfUFNFVURPOiAwLTkvMTAsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ09NQklOQVRPUjogMTAtMTEvMTIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAxMi0xMy8xNCwgDQotWzE0NTMsIDE0NTZdICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzE0NTYsIDE0ODldIChxdW90ZXM6ICc+PicgJzw8JyAnXDIwMzknICdcMjAzQScpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDYtNy84LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORzogOC0xMi8xMywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkc6IDEzLTE3LzE4LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORzogMTgtMjUvMjYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiAyNi0zMywgDQotWzE0ODksIDE0OTFdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxNDkxLCAxNDkyXSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzE0OTIsIDE0OTRdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTQ5NCwgMTUwOV0gKHA6Zmlyc3QtbGV0dGVyICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtMSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9QU0VVRE86IDEtMTQvMTUsIA0KLVsxNTA5LCAxNTEyXSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVsxNTEyLCAxNTI2XSAoZm9udC1zaXplOiAzZW0pDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtOSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDktMTAvMTEsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OOiAxMS0xNCwgDQotWzE1MjYsIDE1MjddICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bMTUyNywgMTUyOF0gKCApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0xLCANCi1bMTUyOCwgMTU0N10gKGZvbnQtd2VpZ2h0OiBub3JtYWwpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTEsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxMS0xMi8xMywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMTMtMTksIA0KLVsxNTQ3LCAxNTQ5XSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTU0OSwgMTU1MF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsxNTUwLCAxNTUyXSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzE1NTIsIDE1NjldIChwLnNwZWNpYWw6YmVmb3JlICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtMSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DTEFTUzogMS05LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1BTRVVETzogOS0xNi8xNywgDQotWzE1NjksIDE1NzFdICh7ICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8yLCANCi1bMTU3MSwgMTU5MV0gKGNvbnRlbnQ6ICJTcGVjaWFsISAiKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA3LTgvOSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkc6IDktMjAsIA0KLVsxNTkxLCAxNTkyXSAoICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTEsIA0KLVsxNTkyLCAxNTkzXSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzE1OTMsIDE1OTVdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTU5NSwgMTYxOF0gKHAuc3BlY2lhbDpmaXJzdC1sZXR0ZXIgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0xLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NMQVNTOiAxLTksIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfUFNFVURPOiA5LTIyLzIzLCANCi1bMTYxOCwgMTYyMF0gKHsgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzIsIA0KLVsxNjIwLCAxNjM0XSAoY29sb3I6ICNmZmQ4MDApDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDUtNi83LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0hBU0g6IDctMTQsIA0KLVsxNjM0LCAxNjM1XSAoICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTEsIA0KLVsxNjM1LCAxNjM2XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzE2MzYsIDE2MzhdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTYzOCwgMTY0M10gKEJPRFkgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC00LzUsIA0KLVsxNjQzLCAxNjQ1XSAoeyApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMiwgDQotWzE2NDUsIDE3MDNdIChmb250LWZhbWlseTogQmFza2VydmlsbGUsICJIZWlzaSBNaW5jaG8gVzMiLCBTeW1ib2wsIHNlcmlmKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTExLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTEtMTIvMTMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDEzLTI0LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiAyNC0yNS8yNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkc6IDI2LTQzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiA0My00NC80NSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogNDUtNTEsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1I6IDUxLTUyLzUzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiA1My01OCwgDQotWzE3MDMsIDE3MDRdICggKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMSwgDQotWzE3MDQsIDE3MDVdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTcwNSwgMTcwN10gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxNzA3LCAxNzIxXSAoKjpsYW5nKGphLWpwKSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfVU5JVkVSU0FMOiAwLTEsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfUFNFVURPOiAxLTEzLzE0LCANCi1bMTcyMSwgMTcyM10gKHsgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzIsIA0KLVsxNzIzLCAxNzY4XSAoZm9udDogOTAwIDE0cHQvMTZwdCAiSGVpc2VpIE1pbmNobyBXOSIsIHNlcmlmKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA0LTUvNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVI6IDYtOS8xMCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT046IDEwLTE0LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiAxNC0xNSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT046IDE1LTE5LzIwLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORzogMjAtMzgsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1I6IDM4LTM5LzQwLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiA0MC00NSwgDQotWzE3NjgsIDE3NjldICggKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMSwgDQotWzE3NjksIDE3NzBdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTc3MCwgMTc3Ml0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxNzcyLCAxNzg2XSAoKjpsYW5nKHpoLXR3KSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfVU5JVkVSU0FMOiAwLTEsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfUFNFVURPOiAxLTEzLzE0LCANCi1bMTc4NiwgMTc4OF0gKHsgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzIsIA0KLVsxNzg4LCAxODI2XSAoZm9udDogODAwIDE0cHQvMTYuNXB0ICJMaSBTdW5nIiwgc2VyaWYpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDQtNS82LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUjogNi05LzEwLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTjogMTAtMTQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1I6IDE0LTE1LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTjogMTUtMjEvMjIsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiAyMi0zMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMzEtMzIvMzMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDMzLTM4LCANCi1bMTgyNiwgMTgyN10gKCApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0xLCANCi1bMTgyNywgMTgyOF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsxODI4LCAxODMwXSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotDQotLS0tLS0tLQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDYuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwNi5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0NzdjYjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwNi5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi1bMCwgMTJdIChkZWNsYXJhdGlvbiApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTExLzEyLCANCi1bMTIsIDE2XSAoew0KLQkpDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvNCwgDQotWzE2LCAzM10gKGRpbWVuc2lvbiA6IDEwMGV4KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTkvMTAsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxMC0xMS8xMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT046IDEyLTE3LCANCi1bMzMsIDM0XSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzM0LCAzN10gKA0KLQkpDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0zLCANCi1bMzcsIDEzM10gKGZ1bmN0aW9uIDogcmVjdCgxMDAsIDIwMCwgMzAwLCA0MDApLCBmb3JtYXQoImludGVsbGlmb250IiksIGxvY2FsKCJFeGNlbHNpb3IgQ3lyaWxsbGljIFVwcmlnaHQiKSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC04LzksIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA5LTEwLzExLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0ZVTkNUSU9OOiAxMS0xNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVI6IDE2LTE5LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiAxOS0yMC8yMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVI6IDIxLTI0LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiAyNC0yNS8yNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVI6IDI2LTI5LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiAyOS0zMC8zMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVI6IDMxLTM0LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1BBUkVOVEhFU0lTX0NMT1NFOiAzNC0zNSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMzUtMzYvMzcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRlVOQ1RJT046IDM3LTQ0LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORzogNDQtNTcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfUEFSRU5USEVTSVNfQ0xPU0U6IDU3LTU4LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiA1OC01OS82MCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9GVU5DVElPTjogNjAtNjYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiA2Ni05NSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9QQVJFTlRIRVNJU19DTE9TRTogOTUtOTYsIA0KLVsxMzMsIDEzNF0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVsxMzQsIDEzN10gKA0KLQkpDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0zLCANCi1bMTM3LCAxNTFdIChoYXNoIDogI2FhYmJjYykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC00LzUsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA1LTYvNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9IQVNIOiA3LTE0LCANCi1bMTUxLCAxNTJdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bMTUyLCAxNTVdICgNCi0JKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMywgDQotWzE1NSwgMTY2XSAoaWRlbnQgOiBhbnkpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNS82LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNi03LzgsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDgtMTEsIA0KLVsxNjYsIDE2N10gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVsxNjcsIDE3MF0gKA0KLQkpDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0zLCANCi1bMTcwLCAxODRdIChudW1iZXIgOiA5OTk5OSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC02LzcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA3LTgvOSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVI6IDktMTQsIA0KLVsxODQsIDE4NV0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVsxODUsIDE4OF0gKA0KLQkpDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0zLCANCi1bMTg4LCAyMDVdIChwZXJjZW50YWdlIDogMTAwJSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMC8xMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDExLTEyLzEzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1BFUkNFTlRBR0U6IDEzLTE3LCANCi1bMjA1LCAyMDZdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bMjA2LCAyMDldICgNCi0JKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMywgDQotWzIwOSwgMjI2XSAoc3RyaW5nIDogInN0cmluZyIpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNi83LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNy04LzksIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiA5LTE3LCANCi1bMjI2LCAyMjddICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bMjI3LCAyMzBdICgNCi0JKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMywgDQotWzIzMCwgMjY4XSAodW5pY29kZS1yYW5nZSA6IFUrPz8sIFUrMTAwLTIyMCwgVSs0Pz8pDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTMvMTQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxNC0xNS8xNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9VTklDT0RFX1JBTkdFOiAxNi0yMCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMjAtMjEvMjIsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfVU5JQ09ERV9SQU5HRTogMjItMzEsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1I6IDMxLTMyLzMzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1VOSUNPREVfUkFOR0U6IDMzLTM4LCANCi1bMjY4LCAyNjldICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bMjY5LCAyNzFdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMjcxLCAyNzJdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMjcyLCAyNzRdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi0NCi0tLS0tLS0tDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwNy5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTA3LmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQ4NzlhOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTA3LmNzcworKysgL2Rldi9udWxsCkBAIC0xLDQ1NCArMCwwIEBACi1bMCwgMjFdIChAY2hhcnNldCAiSVNPLTg4NTktMSIpDQotICAgIENvbnRleHRSZWdpb24tLT4gQ0hBUlNFVDogMC04LzksIENvbnRleHRSZWdpb24tLT4gU1RSSU5HOiA5LTIxLCANCi1bMjEsIDIyXSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUxJTUlURVI6IDAtMSwgDQotWzIyLCAyNl0gKA0KLQ0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTQsIA0KLVsyNiwgNzBdIChAaW1wb3J0IHVybCgiLi4vc2FtcGxlMi5jc3MiKSBwcm9qZWN0aW9uLCB0dikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBJTVBPUlQ6IDAtNy84LCBDb250ZXh0UmVnaW9uLS0+IFVSSTogOC0yOS8zMCwgQ29udGV4dFJlZ2lvbi0tPiBNRURJVU06IDMwLTQwLCBDb250ZXh0UmVnaW9uLS0+IE1FRElBX1NFUEFSQVRPUjogNDAtNDEvNDIsIENvbnRleHRSZWdpb24tLT4gTUVESVVNOiA0Mi00NCwgDQotWzcwLCA3MV0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVMSU1JVEVSOiAwLTEsIA0KLVs3MSwgNzVdICgNCi0NCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC00LCANCi1bNzUsIDgwXSAoQk9EWSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTQvNSwgDQotWzgwLCA4N10gKHsNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzcsIA0KLVs4NywgMTAwXSAoY29sb3IgOiBibGFjaykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LzYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA2LTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogOC0xMywgDQotWzEwMCwgMTAxXSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzEwMSwgMTA3XSAoDQotICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTYsIA0KLVsxMDcsIDEyNl0gKHRleHQtYWxpZ24gOiBjZW50ZXIpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTAvMTEsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxMS0xMi8xMywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMTMtMTksIA0KLVsxMjYsIDEyN10gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVsxMjcsIDEzM10gKA0KLSAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC02LCANCi1bMTMzLCAxNzJdIChiYWNrZ3JvdW5kLWNvbG9yIDogcmdiKCAxODEsIDI1MywgMjExICkpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTYvMTcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxNy0xOC8xOSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9GVU5DVElPTjogMTktMjMvMjQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSOiAyNC0yNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMjctMjgvMjksIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSOiAyOS0zMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMzItMzMvMzQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSOiAzNC0zNy8zOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9QQVJFTlRIRVNJU19DTE9TRTogMzgtMzksIA0KLVsxNzIsIDE3NF0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxNzQsIDE3NV0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsxNzUsIDE3OV0gKA0KLQ0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTQsIA0KLVsxNzksIDE4Ml0gKFVMICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtMi8zLCANCi1bMTgyLCAxODldICh7DQotICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS83LCANCi1bMTg5LCAyMDJdIChjb2xvciA6IGJsYWNrKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTUvNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDYtNy84LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiA4LTEzLCANCi1bMjAyLCAyMDNdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bMjAzLCAyMDldICgNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNiwgDQotWzIwOSwgMjUxXSAobGlzdC1zdHlsZS1pbWFnZSA6IHVybCgiaW1hZ2VzL2xfYTAxLmdpZiIpKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTE2LzE3LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTctMTgvMTksIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfVVJJOiAxOS00MiwgDQotWzI1MSwgMjUyXSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzI1MiwgMjU4XSAoDQotICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTYsIA0KLVsyNTgsIDI4N10gKGxpc3Qtc3R5bGUtcG9zaXRpb24gOiBvdXRzaWRlKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTE5LzIwLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMjAtMjEvMjIsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDIyLTI5LCANCi1bMjg3LCAyODldICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMjg5LCAyOTBdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMjkwLCAyOTRdICgNCi0NCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC00LCANCi1bMjk0LCAyOTddIChIMSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTIvMywgDQotWzI5NywgMzA0XSAoew0KLSAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvNywgDQotWzMwNCwgMzE3XSAoY29sb3IgOiB3aGl0ZSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LzYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA2LTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogOC0xMywgDQotWzMxNywgMzE4XSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzMxOCwgMzI0XSAoDQotICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTYsIA0KLVszMjQsIDM0M10gKHRleHQtYWxpZ24gOiBjZW50ZXIpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTAvMTEsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxMS0xMi8xMywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMTMtMTksIA0KLVszNDMsIDM0NF0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVszNDQsIDM1MF0gKA0KLSAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC02LCANCi1bMzUwLCAzNzddIChib3JkZXItbGVmdC1jb2xvciA6ICM5OTY2NjYpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTcvMTgsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxOC0xOS8yMCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9IQVNIOiAyMC0yNywgDQotWzM3NywgMzc4XSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzM3OCwgMzg0XSAoDQotICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTYsIA0KLVszODQsIDQwMV0gKHBhZGRpbmctdG9wIDogMHB4KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTExLzEyLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTItMTMvMTQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OOiAxNC0xNywgDQotWzQwMSwgNDAyXSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzQwMiwgNDA4XSAoDQotICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTYsIA0KLVs0MDgsIDQyN10gKHBhZGRpbmctcmlnaHQgOiAxY20pDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTMvMTQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxNC0xNS8xNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT046IDE2LTE5LCANCi1bNDI3LCA0MjhdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bNDI4LCA0MzRdICgNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNiwgDQotWzQzNCwgNDUyXSAocGFkZGluZy1ib3R0b20gOiAyKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTE0LzE1LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTUtMTYvMTcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSOiAxNy0xOCwgDQotWzQ1MiwgNDUzXSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzQ1MywgNDU5XSAoDQotICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTYsIA0KLVs0NTksIDQ3N10gKHBhZGRpbmctbGVmdCA6IDNlbSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMi8xMywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDEzLTE0LzE1LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTjogMTUtMTgsIA0KLVs0NzcsIDQ3OF0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVs0NzgsIDQ4NF0gKA0KLSAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC02LCANCi1bNDg0LCA1MDRdIChib3JkZXItc3R5bGUgOiBzb2xpZCkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMi8xMywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDEzLTE0LzE1LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAxNS0yMCwgDQotWzUwNCwgNTA1XSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzUwNSwgNTExXSAoDQotICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTYsIA0KLVs1MTEsIDUzNV0gKGJvcmRlci10b3Atd2lkdGggOiA0LjVleCkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xNi8xNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDE3LTE4LzE5LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTjogMTktMjQsIA0KLVs1MzUsIDUzNl0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVs1MzYsIDU0Ml0gKA0KLSAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC02LCANCi1bNTQyLCA1NjZdIChib3JkZXItcmlnaHQtd2lkdGggOiA1aW4pDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTgvMTksIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxOS0yMC8yMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT046IDIxLTI0LCANCi1bNTY2LCA1NjddICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bNTY3LCA1NzNdICgNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNiwgDQotWzU3MywgNjAxXSAoYm9yZGVyLWJvdHRvbS13aWR0aCA6IDYuMDJtbSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xOS8yMCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDIwLTIxLzIyLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTjogMjItMjgsIA0KLVs2MDEsIDYwMl0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVs2MDIsIDYwOF0gKA0KLSAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC02LCANCi1bNjA4LCA2MjldIChib3JkZXItbGVmdC13aWR0aCA6IDcpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTcvMTgsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxOC0xOS8yMCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVI6IDIwLTIxLCANCi1bNjI5LCA2MzFdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bNjMxLCA2MzJdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bNjMyLCA2MzZdICgNCi0NCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC00LCANCi1bNjM2LCA2NDZdIChIMTpiZWZvcmUgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0yLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1BTRVVETzogMi05LzEwLCANCi1bNjQ2LCA2NTNdICh7DQotICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS83LCANCi1bNjUzLCA2OTddIChjb250ZW50IDogIkNoYXB0ZXIgIiBjb3VudGVyKCBjaGFwdGVyICkgIi4gIikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC03LzgsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA4LTkvMTAsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiAxMC0yMC8yMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9GVU5DVElPTjogMjEtMjkvMzAsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDMwLTM3LzM4LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1BBUkVOVEhFU0lTX0NMT1NFOiAzOC0zOS80MCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkc6IDQwLTQ0LCANCi1bNjk3LCA2OThdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bNjk4LCA3MDRdICgNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNiwgDQotWzcwNCwgNzMxXSAoY291bnRlci1pbmNyZW1lbnQgOiBjaGFwdGVyKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTE3LzE4LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTgtMTkvMjAsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDIwLTI3LCANCi1bNzMxLCA3MzJdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bNzMyLCA3MzhdICgNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNiwgDQotWzczOCwgNzYxXSAoY291bnRlci1yZXNldCA6IHNlY3Rpb24pDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTMvMTQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxNC0xNS8xNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMTYtMjMsIA0KLVs3NjEsIDc2M10gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs3NjMsIDc2NF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVs3NjQsIDc2OF0gKA0KLQ0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTQsIA0KLVs3NjgsIDc3OV0gKElNRzpiZWZvcmUgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0zLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1BTRVVETzogMy0xMC8xMSwgDQotWzc3OSwgNzgwXSAoeykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMSwgDQotWzc4MCwgNzk5XSAoY29udGVudCA6IGF0dHIoYWx0KSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC03LzgsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA4LTkvMTAsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRlVOQ1RJT046IDEwLTE1LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAxNS0xOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9QQVJFTlRIRVNJU19DTE9TRTogMTgtMTksIA0KLVs3OTksIDgwMF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVs4MDAsIDgwNF0gKA0KLQ0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTQsIA0KLVs4MDQsIDgxNV0gKERJVi5zYW1wbGUgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0zLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NMQVNTOiAzLTEwLzExLCANCi1bODE1LCA4MjJdICh7DQotICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS83LCANCi1bODIyLCA4NjNdIChmb250LWZhbWlseSA6ICJSb2Jzb24gQ2VsdGljIiwgc2Fucy1zZXJpZikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMS8xMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDEyLTEzLzE0LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORzogMTQtMjksIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1I6IDI5LTMwLzMxLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAzMS00MSwgDQotWzg2MywgODY0XSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzg2NCwgODcwXSAoDQotICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTYsIA0KLVs4NzAsIDg4OV0gKHBvc2l0aW9uIDogYWJzb2x1dGUpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtOC85LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogOS0xMC8xMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMTEtMTksIA0KLVs4ODksIDg5MF0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVs4OTAsIDg5Nl0gKA0KLSAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC02LCANCi1bODk2LCA5MTBdIChsZWZ0IDogODMzLjVwYykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC00LzUsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA1LTYvNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT046IDctMTQsIA0KLVs5MTAsIDkxMV0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVs5MTEsIDkxN10gKA0KLSAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC02LCANCi1bOTE3LCA5MjZdICh0b3AgOiA5MCUpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMy80LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNC01LzYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfUEVSQ0VOVEFHRTogNi05LCANCi1bOTI2LCA5MjddICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bOTI3LCA5MzNdICgNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNiwgDQotWzkzMywgOTQ2XSAod2lkdGggOiAxMDBwdCkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LzYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA2LTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT046IDgtMTMsIA0KLVs5NDYsIDk0N10gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVs5NDcsIDk1M10gKA0KLSAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC02LCANCi1bOTUzLCA5NzFdIChoZWlnaHQgOiAxMTAuNzc3cHgpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNi83LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNy04LzksIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OOiA5LTE4LCANCi1bOTcxLCA5NzJdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bOTcyLCA5NzhdICgNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNiwgDQotWzk3OCwgMTAxNV0gKGNsaXAgOiByZWN0KCAtNXB4LCA4MHB4LCAxMzBweCwgMHB4ICkpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNC81LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNS02LzcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRlVOQ1RJT046IDctMTIvMTMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OOiAxMy0xNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMTctMTgvMTksIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OOiAxOS0yMywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMjMtMjQvMjUsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OOiAyNS0zMCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMzAtMzEvMzIsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OOiAzMi0zNS8zNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9QQVJFTlRIRVNJU19DTE9TRTogMzYtMzcsIA0KLVsxMDE1LCAxMDE3XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzEwMTcsIDEwMThdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTAxOCwgMTAyMl0gKA0KLQ0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTQsIA0KLVsxMDIyLCAxMDMzXSAoQGZvbnQtZmFjZSApDQotICAgIENvbnRleHRSZWdpb24tLT4gRk9OVF9GQUNFOiAwLTEwLzExLCANCi1bMTAzMywgMTA0MF0gKHsNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzcsIA0KLVsxMDQwLCAxMDY1XSAoZm9udC1mYW1pbHkgOiAiU3dpc3MgNzIxIikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMS8xMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDEyLTEzLzE0LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORzogMTQtMjUsIA0KLVsxMDY1LCAxMDY2XSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzEwNjYsIDEwNzJdICgNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNiwgDQotWzEwNzIsIDExNThdIChzcmMgOiB1cmwoInN3aXNzNzIxdC5wZnIiKSBmb3JtYXQoImludGVsbGlmb250IiksIGxvY2FsKCJFeGNlbHNpb3IgQ3lyaWxsbGljIFVwcmlnaHQiKSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0zLzQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA0LTUvNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9VUkk6IDYtMjYvMjcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRlVOQ1RJT046IDI3LTM0LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORzogMzQtNDcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfUEFSRU5USEVTSVNfQ0xPU0U6IDQ3LTQ4LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiA0OC00OS81MCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9GVU5DVElPTjogNTAtNTYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiA1Ni04NSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9QQVJFTlRIRVNJU19DTE9TRTogODUtODYsIA0KLVsxMTU4LCAxMTU5XSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzExNTksIDExNjVdICgNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNiwgDQotWzExNjUsIDEyMDNdICh1bmljb2RlLXJhbmdlIDogVSs/PywgVSsxMDAtMjIwLCBVKzQ/PykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMy8xNCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDE0LTE1LzE2LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1VOSUNPREVfUkFOR0U6IDE2LTIwLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiAyMC0yMS8yMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9VTklDT0RFX1JBTkdFOiAyMi0zMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMzEtMzIvMzMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfVU5JQ09ERV9SQU5HRTogMzMtMzgsIA0KLVsxMjAzLCAxMjA0XSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzEyMDQsIDEyMTBdICgNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNiwgDQotWzEyMTAsIDEyNDddIChmb250LXdlaWdodCA6IDEwMCwgMjAwLCAzMDAsIDQwMCwgNTAwKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTExLzEyLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTItMTMvMTQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSOiAxNC0xNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMTctMTgvMTksIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSOiAxOS0yMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMjItMjMvMjQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSOiAyNC0yNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMjctMjgvMjksIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSOiAyOS0zMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMzItMzMvMzQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSOiAzNC0zNywgDQotWzEyNDcsIDEyNDldICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTI0OSwgMTI1MF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsxMjUwLCAxMjU0XSAoDQotDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNCwgDQotWzEyNTQsIDEyNjZdIChAcGFnZSA6bGVmdCApDQotICAgIENvbnRleHRSZWdpb24tLT4gUEFHRTogMC01LzYsIENvbnRleHRSZWdpb24tLT4gQ1NTX1BBR0VfU0VMRUNUT1I6IDYtMTEvMTIsIA0KLVsxMjY2LCAxMjY3XSAoeykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMSwgDQotWzEyNjcsIDEyODRdIChtYXJnaW4tbGVmdCA6IDRjbSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMS8xMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDEyLTEzLzE0LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTjogMTQtMTcsIA0KLVsxMjg0LCAxMjg1XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzEyODUsIDEyODldICgNCi0NCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC00LCANCi1bMTI4OSwgMTMwMl0gKEBtZWRpYSBhdXJhbCApDQotICAgIENvbnRleHRSZWdpb24tLT4gTUVESUE6IDAtNi83LCBDb250ZXh0UmVnaW9uLS0+IE1FRElVTTogNy0xMi8xMywgDQotWzEzMDIsIDEzMDldICh7DQotICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS83LCANCi1bMTMwOSwgMTMzMl0gKEgxLCBIMiwgSDMsIEg0LCBINSwgSDYgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0yLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1NFUEFSQVRPUjogMi0zLzQsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiA0LTYsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfU0VQQVJBVE9SOiA2LTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDgtMTAsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfU0VQQVJBVE9SOiAxMC0xMS8xMiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDEyLTE0LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1NFUEFSQVRPUjogMTQtMTUvMTYsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAxNi0xOCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9TRVBBUkFUT1I6IDE4LTE5LzIwLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMjAtMjIvMjMsIA0KLVsxMzMyLCAxMzQzXSAoew0KLSAgICAgICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzExLCANCi1bMTM0MywgMTM2OV0gKHZvaWNlLWZhbWlseSA6IHBhdWwsIGNoaWxkKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTEyLzEzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTMtMTQvMTUsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDE1LTE5LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiAxOS0yMC8yMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMjEtMjYsIA0KLVsxMzY5LCAxMzcwXSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzEzNzAsIDEzODBdICgNCi0gICAgICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTEwLCANCi1bMTM4MCwgMTM5MV0gKHN0cmVzcyA6IDIwKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTYvNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDctOC85LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUjogOS0xMSwgDQotWzEzOTEsIDEzOTJdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bMTM5MiwgMTQwMl0gKA0KLSAgICAgICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMTAsIA0KLVsxNDAyLCAxNDE1XSAocmljaG5lc3MgOiA5MCkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC04LzksIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA5LTEwLzExLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUjogMTEtMTMsIA0KLVsxNDE1LCAxNDE2XSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzE0MTYsIDE0MjZdICgNCi0gICAgICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTEwLCANCi1bMTQyNiwgMTQ1M10gKGN1ZS1iZWZvcmUgOiB1cmwoInBpbmcuYXUiKSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMC8xMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDExLTEyLzEzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1VSSTogMTMtMjcsIA0KLVsxNDUzLCAxNDU5XSAoDQotICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTYsIA0KLVsxNDU5LCAxNDYwXSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzE0NjAsIDE0NjZdICgNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNiwgDQotWzE0NjYsIDE0NzRdIChQLmhlaWRpICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtMSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DTEFTUzogMS03LzgsIA0KLVsxNDc0LCAxNDg1XSAoew0KLSAgICAgICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzExLCANCi1bMTQ4NSwgMTUwNl0gKGF6aW11dGggOiBjZW50ZXItbGVmdCkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC03LzgsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA4LTkvMTAsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDEwLTIxLCANCi1bMTUwNiwgMTUwN10gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVsxNTA3LCAxNTE3XSAoDQotICAgICAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0xMCwgDQotWzE1MTcsIDE1MzZdIChlbGV2YXRpb24gOiAxMi4zZGVnKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTkvMTAsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxMC0xMS8xMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT046IDEyLTE5LCANCi1bMTUzNiwgMTUzN10gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVsxNTM3LCAxNTQ3XSAoDQotICAgICAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0xMCwgDQotWzE1NDcsIDE1NjRdIChwYXVzZSA6IDMwbXMgMS42cykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LzYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA2LTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT046IDgtMTIvMTMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OOiAxMy0xNywgDQotWzE1NjQsIDE1NzBdICgNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNiwgDQotWzE1NzAsIDE1NzFdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTU3MSwgMTU3N10gKA0KLSAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC02LCANCi1bMTU3NywgMTU4NV0gKFAucGV0ZXIgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0xLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NMQVNTOiAxLTcvOCwgDQotWzE1ODUsIDE1OTZdICh7DQotICAgICAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMTEsIA0KLVsxNTk2LCAxNjExXSAoYXppbXV0aCA6IHJpZ2h0KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDgtOS8xMCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMTAtMTUsIA0KLVsxNjExLCAxNjEyXSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzE2MTIsIDE2MjJdICgNCi0gICAgICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTEwLCANCi1bMTYyMiwgMTY0Ml0gKGVsZXZhdGlvbiA6IC0wLjM2cmFkKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTkvMTAsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxMC0xMS8xMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT046IDEyLTIwLCANCi1bMTY0MiwgMTY0M10gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVsxNjQzLCAxNjUzXSAoDQotICAgICAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0xMCwgDQotWzE2NTMsIDE2NjZdIChwaXRjaCA6IDIxMEh6KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTUvNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDYtNy84LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTjogOC0xMywgDQotWzE2NjYsIDE2NzJdICgNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNiwgDQotWzE2NzIsIDE2NzNdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTY3MywgMTY3OV0gKA0KLSAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC02LCANCi1bMTY3OSwgMTY4Nl0gKFAuZ29hdCApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTEsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ0xBU1M6IDEtNi83LCANCi1bMTY4NiwgMTY5N10gKHsNCi0gICAgICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8xMSwgDQotWzE2OTcsIDE3MTJdICh2b2x1bWUgOiB4LXNvZnQpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNi83LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNy04LzksIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDktMTUsIA0KLVsxNzEyLCAxNzEzXSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzE3MTMsIDE3MjNdICgNCi0gICAgICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTEwLCANCi1bMTcyMywgMTc0MV0gKGVsZXZhdGlvbiA6IDY2Z3JhZCkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC05LzEwLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTAtMTEvMTIsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OOiAxMi0xOCwgDQotWzE3NDEsIDE3NDJdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bMTc0MiwgMTc1Ml0gKA0KLSAgICAgICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMTAsIA0KLVsxNzUyLCAxNzY3XSAocGl0Y2ggOiAwLjE3a0h6KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTUvNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDYtNy84LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTjogOC0xNSwgDQotWzE3NjcsIDE3NzNdICgNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNiwgDQotWzE3NzMsIDE3NzRdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTc3NCwgMTc3Nl0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxNzc2LCAxNzc3XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzE3NzcsIDE3ODFdICgNCi0NCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC00LCANCi0NCi0tLS0tLS0tDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwOC5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTA4LmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWZmMzA5My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTA4LmNzcworKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLVswLCAxOF0gKGEubmV3V2luZG93IC8qICovICkKLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0xLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NMQVNTOiAxLTExLzEyLCBDb250ZXh0UmVnaW9uLS0+IENPTU1FTlQ6IDEyLTE3LzE4LCAKLVsxOCwgMjVdICh7Ci0gICAgKQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvNywgCi1bMjUsIDc3XSAoYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2ltYWdlcy90ZXN0LnBuZykgIWltcG9ydGFudCkKLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTE2LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTYtMTcvMTgsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfVVJJOiAxOC00MS80MiwgQ29udGV4dFJlZ2lvbi0tPiBDU1NfREVDTEFSQVRJT05fVkFMVUVfSU1QT1JUQU5UOiA0Mi01MiwgCi1bNzcsIDc4XSAoOykKLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCAKLVs3OCwgODBdICgKLSkKLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgCi1bODAsIDgxXSAofSkKLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCAKLVs4MSwgODNdICgKLSkKLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgCi0KLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1RleHRQYXJzZXJUZXN0LXNhbXBsZTAxLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1RleHRQYXJzZXJUZXN0LXNhbXBsZTAxLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDAzYTQzNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NUZXh0UGFyc2VyVGVzdC1zYW1wbGUwMS5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi1bSDFdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDAsIDINCi1bIF0gUyAtIDIsIDENCi1be10gTEJSQUNFIC0gMywgMQ0KLVsNCi0NCi0JXSBTIC0gNCwgNQ0KLVtjb2xvcl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA5LCA1DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDE0LCAxDQotWyBdIFMgLSAxNSwgMQ0KLVt3aGl0ZV0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAxNiwgNQ0KLVsNCi0JXSBTIC0gMjEsIDMNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gMjQsIDENCi1bDQotDQotCV0gUyAtIDI1LCA1DQotW2JhY2tncm91bmQtY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMzAsIDE2DQotWyBdIFMgLSA0NiwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA0NywgMQ0KLVsgXSBTIC0gNDgsIDENCi1bYmxhY2tdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gNDksIDUNCi1bDQotCQ0KLV0gUyAtIDU0LCA1DQotW31dIFJCUkFDRSAtIDU5LCAxDQotWw0KLV0gUyAtIDYwLCAyDQotDQotLS0tLS0tLQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1RleHRQYXJzZXJUZXN0LXNhbXBsZTAyLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1RleHRQYXJzZXJUZXN0LXNhbXBsZTAyLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzRmNjA0Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NUZXh0UGFyc2VyVGVzdC1zYW1wbGUwMi5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi1bQGltcG9ydF0gSU1QT1JUIC0gMCwgNw0KLVsgXSBTIC0gNywgMQ0KLVt1cmwoImhvZ2UuY3NzIildIFVSSSAtIDgsIDE1DQotWztdIERFTElNSVRFUiAtIDIzLCAxDQotWw0KLV0gUyAtIDI0LCAyDQotW0BpbXBvcnRdIElNUE9SVCAtIDI2LCA3DQotWyBdIFMgLSAzMywgMQ0KLVsvKiBjb21tZW50ICovXSBDT01NRU5UIC0gMzQsIDEzDQotWyBdIFMgLSA0NywgMQ0KLVt1cmwoaG9nZS5jc3MpXSBVUkkgLSA0OCwgMTMNCi1bO10gREVMSU1JVEVSIC0gNjEsIDENCi1bDQotXSBTIC0gNjIsIDINCi1bQGltcG9ydF0gSU1QT1JUIC0gNjQsIDcNCi1bIF0gUyAtIDcxLCAxDQotWyJob2dlLmNzcyJdIFNUUklORyAtIDcyLCAxMA0KLVsgXSBTIC0gODIsIDENCi1bLyogY29tbWVudCAqL10gQ09NTUVOVCAtIDgzLCAxMw0KLVs7XSBERUxJTUlURVIgLSA5NiwgMQ0KLVsNCi1dIFMgLSA5NywgMg0KLVtASU1QT1JUXSBJTVBPUlQgLSA5OSwgNw0KLVsgXSBTIC0gMTA2LCAxDQotWydob2dlLmNzcyddIFNUUklORyAtIDEwNywgMTANCi1bIF0gUyAtIDExNywgMQ0KLVssXSB1bmRlZmluZWQgLSAxMTgsIDENCi1bbWVkaWExXSBNRURJVU0gLSAxMTksIDYNCi1bLF0gTUVESUFfU0VQQVJBVE9SIC0gMTI1LCAxDQotW21lZGlhMl0gTUVESVVNIC0gMTI2LCA2DQotWyxdIE1FRElBX1NFUEFSQVRPUiAtIDEzMiwgMQ0KLVssXSB1bmRlZmluZWQgLSAxMzMsIDENCi1bbWVkaWEzXSBNRURJVU0gLSAxMzQsIDYNCi1bIF0gUyAtIDE0MCwgMQ0KLVttXSB1bmRlZmluZWQgLSAxNDEsIDENCi1bZV0gdW5kZWZpbmVkIC0gMTQyLCAxDQotW2RdIHVuZGVmaW5lZCAtIDE0MywgMQ0KLVtpXSB1bmRlZmluZWQgLSAxNDQsIDENCi1bYV0gdW5kZWZpbmVkIC0gMTQ1LCAxDQotWzRdIHVuZGVmaW5lZCAtIDE0NiwgMQ0KLVssXSBNRURJQV9TRVBBUkFUT1IgLSAxNDcsIDENCi1bbWVkaWE1XSBNRURJVU0gLSAxNDgsIDYNCi1bIF0gUyAtIDE1NCwgMQ0KLVtAaW1wb3J0XSBJTVBPUlQgLSAxNTUsIDcNCi1bIF0gUyAtIDE2MiwgMQ0KLVttXSB1bmRlZmluZWQgLSAxNjMsIDENCi1bZV0gdW5kZWZpbmVkIC0gMTY0LCAxDQotW2RdIHVuZGVmaW5lZCAtIDE2NSwgMQ0KLVtpXSB1bmRlZmluZWQgLSAxNjYsIDENCi1bYV0gdW5kZWZpbmVkIC0gMTY3LCAxDQotWzZdIHVuZGVmaW5lZCAtIDE2OCwgMQ0KLVs7XSBERUxJTUlURVIgLSAxNjksIDENCi1bDQotDQotXSBTIC0gMTcwLCA0DQotWzwhLS1dIENETyAtIDE3NCwgNA0KLVsgXSBTIC0gMTc4LCAxDQotWy8qIGhvZ2Vob2dlICovXSBDT01NRU5UIC0gMTc5LCAxNA0KLVsNCi0NCi1dIFMgLSAxOTMsIDQNCi1bLS0+XSBDREMgLSAxOTcsIDMNCi1bDQotDQotXSBTIC0gMjAwLCA0DQotWy8qIGNvbW1lbnQgMiAqL10gQ09NTUVOVCAtIDIwNCwgMTUNCi1bDQotXSBTIC0gMjE5LCAyDQotW2t1c29dIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDIyMSwgNA0KLVsNCi1dIFMgLSAyMjUsIDINCi0NCi0tLS0tLS0tDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTVGV4dFBhcnNlclRlc3Qtc2FtcGxlMDMuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTVGV4dFBhcnNlclRlc3Qtc2FtcGxlMDMuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTNlMTFjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1RleHRQYXJzZXJUZXN0LXNhbXBsZTAzLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDEyNCArMCwwIEBACi1bQGltcG9ydF0gSU1QT1JUIC0gMCwgNw0KLVsgXSBTIC0gNywgMQ0KLVt1cmwoIi4uL3NhbXBsZTIuY3NzIildIFVSSSAtIDgsIDIxDQotWztdIERFTElNSVRFUiAtIDI5LCAxDQotWw0KLQ0KLV0gUyAtIDMwLCA0DQotWy8qIFNhbXBsZSBTdHlsZXMgKi9dIENPTU1FTlQgLSAzNCwgMTkNCi1bDQotDQotXSBTIC0gNTMsIDQNCi1bQk9EWV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gNTcsIDQNCi1bIF0gUyAtIDYxLCAxDQotW3tdIExCUkFDRSAtIDYyLCAxDQotWw0KLQldIFMgLSA2MywgMw0KLVtjb2xvcl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA2NiwgNQ0KLVsgXSBTIC0gNzEsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gNzIsIDENCi1bIF0gUyAtIDczLCAxDQotW2JsYWNrXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDc0LCA1DQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDc5LCAxDQotWw0KLQldIFMgLSA4MCwgMw0KLVtiYWNrZ3JvdW5kLWNvbG9yXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDgzLCAxNg0KLVsgXSBTIC0gOTksIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTAwLCAxDQotWyBdIFMgLSAxMDEsIDENCi1bcmdiKF0gREVDTEFSQVRJT05fVkFMVUVfRlVOQ1RJT04gLSAxMDIsIDQNCi1bMTgxXSBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVIgLSAxMDYsIDMNCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSAxMDksIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDExMCwgMQ0KLVsyNTNdIERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUiAtIDExMSwgMw0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDExNCwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTE1LCAxDQotWzIxMV0gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSIC0gMTE2LCAzDQotWyldIERFQ0xBUkFUSU9OX1ZBTFVFX1BBUkVOVEhFU0lTX0NMT1NFIC0gMTE5LCAxDQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDEyMCwgMQ0KLVsNCi0JXSBTIC0gMTIxLCAzDQotW3RleHQtYWxpZ25dIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTI0LCAxMA0KLVsgXSBTIC0gMTM0LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDEzNSwgMQ0KLVsgXSBTIC0gMTM2LCAxDQotW2NlbnRlcl0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAxMzcsIDYNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gMTQzLCAxDQotWw0KLQldIFMgLSAxNDQsIDMNCi1bZm9udC1mYW1pbHldIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTQ3LCAxMQ0KLVsgXSBTIC0gMTU4LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDE1OSwgMQ0KLVsgXSBTIC0gMTYwLCAxDQotWyJIZWlzZWkgTWluY2hvIFczIl0gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gMTYxLCAxOA0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDE3OSwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTgwLCAxDQotW3NlcmlmXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDE4MSwgNQ0KLVsNCi1dIFMgLSAxODYsIDINCi1bfV0gUkJSQUNFIC0gMTg4LCAxDQotWw0KLQ0KLV0gUyAtIDE4OSwgNA0KLVtAcGFnZV0gUEFHRSAtIDE5MywgNQ0KLVsgXSBTIC0gMTk4LCAxDQotWzpsZWZ0XSBDU1NfUEFHRV9TRUxFQ1RPUiAtIDE5OSwgNQ0KLVsgXSBTIC0gMjA0LCAxDQotW3tdIExCUkFDRSAtIDIwNSwgMQ0KLVsgXSBTIC0gMjA2LCAxDQotW21hcmdpbi1sZWZ0XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDIwNywgMTENCi1bIF0gUyAtIDIxOCwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAyMTksIDENCi1bIF0gUyAtIDIyMCwgMQ0KLVs0Y21dIERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTiAtIDIyMSwgMw0KLVsgXSBTIC0gMjI0LCAxDQotW31dIFJCUkFDRSAtIDIyNSwgMQ0KLVsNCi0NCi1dIFMgLSAyMjYsIDQNCi1bQG1lZGlhXSBNRURJQSAtIDIzMCwgNg0KLVsgXSBTIC0gMjM2LCAxDQotW2F1cmFsXSBNRURJVU0gLSAyMzcsIDUNCi1bIF0gUyAtIDI0MiwgMQ0KLVt7XSBMQlJBQ0UgLSAyNDMsIDENCi1bDQotCV0gUyAtIDI0NCwgMw0KLVtQXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAyNDcsIDENCi1bLmhlaWRpXSBTRUxFQ1RPUl9DTEFTUyAtIDI0OCwgNg0KLVsgXSBTIC0gMjU0LCAxDQotW3tdIExCUkFDRSAtIDI1NSwgMQ0KLVsNCi0JCV0gUyAtIDI1NiwgNA0KLVthemltdXRoXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDI2MCwgNw0KLVsgXSBTIC0gMjY3LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDI2OCwgMQ0KLVsgXSBTIC0gMjY5LCAxDQotW2NlbnRlci1sZWZ0XSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDI3MCwgMTENCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gMjgxLCAxDQotWw0KLQkJXSBTIC0gMjgyLCA0DQotW2VsZXZhdGlvbl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAyODYsIDkNCi1bIF0gUyAtIDI5NSwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAyOTYsIDENCi1bIF0gUyAtIDI5NywgMQ0KLVsxMi4zZGVnXSBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT04gLSAyOTgsIDcNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gMzA1LCAxDQotWw0KLQkJXSBTIC0gMzA2LCA0DQotW3BhdXNlXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDMxMCwgNQ0KLVsgXSBTIC0gMzE1LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDMxNiwgMQ0KLVsgXSBTIC0gMzE3LCAxDQotWzMwbXNdIERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTiAtIDMxOCwgNA0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMzIyLCAxDQotWzEuNnNdIERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTiAtIDMyMywgNA0KLVsNCi0JXSBTIC0gMzI3LCAzDQotW31dIFJCUkFDRSAtIDMzMCwgMQ0KLVsNCi1dIFMgLSAzMzEsIDINCi1bfV0gUkJSQUNFIC0gMzMzLCAxDQotWw0KLV0gUyAtIDMzNCwgMg0KLQ0KLS0tLS0tLS0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NUZXh0UGFyc2VyVGVzdC1zYW1wbGUwNC5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NUZXh0UGFyc2VyVGVzdC1zYW1wbGUwNC5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkNWQyZTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTVGV4dFBhcnNlclRlc3Qtc2FtcGxlMDQuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNzA2ICswLDAgQEAKLVtAY2hhcnNldF0gQ0hBUlNFVCAtIDAsIDgNCi1bIF0gUyAtIDgsIDENCi1bIklTTy04ODU5LTEiXSBTVFJJTkcgLSA5LCAxMg0KLVs7XSBERUxJTUlURVIgLSAyMSwgMQ0KLVsNCi0NCi1dIFMgLSAyMiwgNA0KLVtAaW1wb3J0XSBJTVBPUlQgLSAyNiwgNw0KLVsgXSBTIC0gMzMsIDENCi1bdXJsKCJob2dlLmNzcyIpXSBVUkkgLSAzNCwgMTUNCi1bO10gREVMSU1JVEVSIC0gNDksIDENCi1bDQotXSBTIC0gNTAsIDINCi1bQGltcG9ydF0gSU1QT1JUIC0gNTIsIDcNCi1bIF0gUyAtIDU5LCAxDQotWy8qIGNvbW1lbnQgKi9dIENPTU1FTlQgLSA2MCwgMTMNCi1bIF0gUyAtIDczLCAxDQotW3VybChob2dlLmNzcyldIFVSSSAtIDc0LCAxMw0KLVs7XSBERUxJTUlURVIgLSA4NywgMQ0KLVsNCi1dIFMgLSA4OCwgMg0KLVtAaW1wb3J0XSBJTVBPUlQgLSA5MCwgNw0KLVsgXSBTIC0gOTcsIDENCi1bImhvZ2UuY3NzIl0gU1RSSU5HIC0gOTgsIDEwDQotWyBdIFMgLSAxMDgsIDENCi1bLyogY29tbWVudCAqL10gQ09NTUVOVCAtIDEwOSwgMTMNCi1bO10gREVMSU1JVEVSIC0gMTIyLCAxDQotWw0KLV0gUyAtIDEyMywgMg0KLVtASU1QT1JUXSBJTVBPUlQgLSAxMjUsIDcNCi1bIF0gUyAtIDEzMiwgMQ0KLVsnaG9nZS5jc3MnXSBTVFJJTkcgLSAxMzMsIDEwDQotWyBdIFMgLSAxNDMsIDENCi1bbWVkaWExXSBNRURJVU0gLSAxNDQsIDYNCi1bLF0gTUVESUFfU0VQQVJBVE9SIC0gMTUwLCAxDQotW21lZGlhMl0gTUVESVVNIC0gMTUxLCA2DQotWyBdIFMgLSAxNTcsIDENCi1bLF0gTUVESUFfU0VQQVJBVE9SIC0gMTU4LCAxDQotWyBdIFMgLSAxNTksIDENCi1bbWVkaWEzXSBNRURJVU0gLSAxNjAsIDYNCi1bO10gREVMSU1JVEVSIC0gMTY2LCAxDQotWw0KLQ0KLV0gUyAtIDE2NywgNA0KLVtAbWVkaWFdIE1FRElBIC0gMTcxLCA2DQotWyBdIFMgLSAxNzcsIDENCi1bcHJpbnRdIE1FRElVTSAtIDE3OCwgNQ0KLVsgXSBTIC0gMTgzLCAxDQotW3tdIExCUkFDRSAtIDE4NCwgMQ0KLVsNCi0NCi1dIFMgLSAxODUsIDQNCi1bfV0gUkJSQUNFIC0gMTg5LCAxDQotWw0KLQ0KLV0gUyAtIDE5MCwgNA0KLVtAcGFnZV0gUEFHRSAtIDE5NCwgNQ0KLVsgXSBTIC0gMTk5LCAxDQotWzpsZWZ0XSBDU1NfUEFHRV9TRUxFQ1RPUiAtIDIwMCwgNQ0KLVsgXSBTIC0gMjA1LCAxDQotW3tdIExCUkFDRSAtIDIwNiwgMQ0KLVsNCi0NCi1dIFMgLSAyMDcsIDQNCi1bfV0gUkJSQUNFIC0gMjExLCAxDQotWw0KLQ0KLV0gUyAtIDIxMiwgNA0KLVtoMV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMjE2LCAyDQotWyxdIFNFTEVDVE9SX1NFUEFSQVRPUiAtIDIxOCwgMQ0KLVsgXSBTIC0gMjE5LCAxDQotW2gyXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAyMjAsIDINCi1bLF0gU0VMRUNUT1JfU0VQQVJBVE9SIC0gMjIyLCAxDQotWyBdIFMgLSAyMjMsIDENCi1baDNdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDIyNCwgMg0KLVsgXSBTIC0gMjI2LCAxDQotW3tdIExCUkFDRSAtIDIyNywgMQ0KLVsgIF0gUyAtIDIyOCwgMg0KLVtmb250LWZhbWlseV0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAyMzAsIDExDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDI0MSwgMQ0KLVsgXSBTIC0gMjQyLCAxDQotW3NhbnMtc2VyaWZdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMjQzLCAxMA0KLVsgIF0gUyAtIDI1MywgMg0KLVt9XSBSQlJBQ0UgLSAyNTUsIDENCi1bDQotXSBTIC0gMjU2LCAyDQotW2gxXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAyNTgsIDINCi1bIF0gU0VMRUNUT1JfQ09NQklOQVRPUiAtIDI2MCwgMQ0KLVtlbV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMjYxLCAyDQotWyBdIFMgLSAyNjMsIDENCi1be10gTEJSQUNFIC0gMjY0LCAxDQotWyAgXSBTIC0gMjY1LCAyDQotW2NvbG9yXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDI2NywgNQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAyNzIsIDENCi1bIF0gUyAtIDI3MywgMQ0KLVtibHVlXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDI3NCwgNA0KLVsgIF0gUyAtIDI3OCwgMg0KLVt9XSBSQlJBQ0UgLSAyODAsIDENCi1bDQotXSBTIC0gMjgxLCAyDQotW2Rpdl0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMjgzLCAzDQotWyBdIFNFTEVDVE9SX0NPTUJJTkFUT1IgLSAyODYsIDENCi1bcF0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMjg3LCAxDQotWyBdIFNFTEVDVE9SX0NPTUJJTkFUT1IgLSAyODgsIDENCi1bKl0gU0VMRUNUT1JfVU5JVkVSU0FMIC0gMjg5LCAxDQotW1tdIFNFTEVDVE9SX0FUVFJJQlVURV9TVEFSVCAtIDI5MCwgMQ0KLVtocmVmXSBTRUxFQ1RPUl9BVFRSSUJVVEVfTkFNRSAtIDI5MSwgNA0KLVtdXSBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EIC0gMjk1LCAxDQotWyBdIFMgLSAyOTYsIDENCi1be10gTEJSQUNFIC0gMjk3LCAxDQotWyAgXSBTIC0gMjk4LCAyDQotW2NvbG9yXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDMwMCwgNQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAzMDUsIDENCi1bIF0gUyAtIDMwNiwgMQ0KLVtibHVlXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDMwNywgNA0KLVsgIF0gUyAtIDMxMSwgMg0KLVt9XSBSQlJBQ0UgLSAzMTMsIDENCi1bDQotXSBTIC0gMzE0LCAyDQotW2JvZHldIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDMxNiwgNA0KLVsgXSBTIC0gMzIwLCAxDQotWz5dIFNFTEVDVE9SX0NPTUJJTkFUT1IgLSAzMjEsIDENCi1bIF0gUyAtIDMyMiwgMQ0KLVtQXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAzMjMsIDENCi1bIF0gUyAtIDMyNCwgMQ0KLVt7XSBMQlJBQ0UgLSAzMjUsIDENCi1bICBdIFMgLSAzMjYsIDINCi1bbGluZS1oZWlnaHRdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMzI4LCAxMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAzMzksIDENCi1bIF0gUyAtIDM0MCwgMQ0KLVsxLjNdIERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUiAtIDM0MSwgMw0KLVsgIF0gUyAtIDM0NCwgMg0KLVt9XSBSQlJBQ0UgLSAzNDYsIDENCi1bDQotXSBTIC0gMzQ3LCAyDQotW2Rpdl0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMzQ5LCAzDQotWyBdIFNFTEVDVE9SX0NPTUJJTkFUT1IgLSAzNTIsIDENCi1bb2xdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDM1MywgMg0KLVs+XSBTRUxFQ1RPUl9DT01CSU5BVE9SIC0gMzU1LCAxDQotW2xpXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAzNTYsIDINCi1bIF0gU0VMRUNUT1JfQ09NQklOQVRPUiAtIDM1OCwgMQ0KLVtwXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAzNTksIDENCi1bIF0gUyAtIDM2MCwgMQ0KLVt7XSBMQlJBQ0UgLSAzNjEsIDENCi1bIF0gUyAtIDM2MiwgMQ0KLVt9XSBSQlJBQ0UgLSAzNjMsIDENCi1bDQotXSBTIC0gMzY0LCAyDQotW21hdGhdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDM2NiwgNA0KLVsgXSBTIC0gMzcwLCAxDQotWytdIFNFTEVDVE9SX0NPTUJJTkFUT1IgLSAzNzEsIDENCi1bIF0gUyAtIDM3MiwgMQ0KLVtwXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAzNzMsIDENCi1bIF0gUyAtIDM3NCwgMQ0KLVt7XSBMQlJBQ0UgLSAzNzUsIDENCi1bICBdIFMgLSAzNzYsIDINCi1bdGV4dC1pbmRlbnRdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMzc4LCAxMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAzODksIDENCi1bIF0gUyAtIDM5MCwgMQ0KLVswXSBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVIgLSAzOTEsIDENCi1bICBdIFMgLSAzOTIsIDINCi1bfV0gUkJSQUNFIC0gMzk0LCAxDQotWw0KLV0gUyAtIDM5NSwgMg0KLVtoMV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMzk3LCAyDQotWy5vcGVuZXJdIFNFTEVDVE9SX0NMQVNTIC0gMzk5LCA3DQotWyBdIFMgLSA0MDYsIDENCi1bK10gU0VMRUNUT1JfQ09NQklOQVRPUiAtIDQwNywgMQ0KLVsgXSBTIC0gNDA4LCAxDQotW2gyXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSA0MDksIDINCi1bIF0gUyAtIDQxMSwgMQ0KLVt7XSBMQlJBQ0UgLSA0MTIsIDENCi1bICBdIFMgLSA0MTMsIDINCi1bbWFyZ2luLXRvcF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA0MTUsIDEwDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDQyNSwgMQ0KLVsgXSBTIC0gNDI2LCAxDQotWy01bW1dIERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTiAtIDQyNywgNA0KLVsgIF0gUyAtIDQzMSwgMg0KLVt9XSBSQlJBQ0UgLSA0MzMsIDENCi1bDQotXSBTIC0gNDM0LCAyDQotW2gxXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSA0MzYsIDINCi1bW10gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUIC0gNDM4LCAxDQotW3RpdGxlXSBTRUxFQ1RPUl9BVFRSSUJVVEVfTkFNRSAtIDQzOSwgNQ0KLVtdXSBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EIC0gNDQ0LCAxDQotWyBdIFMgLSA0NDUsIDENCi1be10gTEJSQUNFIC0gNDQ2LCAxDQotWyAgXSBTIC0gNDQ3LCAyDQotW2NvbG9yXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDQ0OSwgNQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA0NTQsIDENCi1bIF0gUyAtIDQ1NSwgMQ0KLVtibHVlXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDQ1NiwgNA0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSA0NjAsIDENCi1bICBdIFMgLSA0NjEsIDINCi1bfV0gUkJSQUNFIC0gNDYzLCAxDQotWw0KLV0gUyAtIDQ2NCwgMg0KLVtzcGFuXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSA0NjYsIDQNCi1bW10gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUIC0gNDcwLCAxDQotW2NsYXNzXSBTRUxFQ1RPUl9BVFRSSUJVVEVfTkFNRSAtIDQ3MSwgNQ0KLVs9XSBTRUxFQ1RPUl9BVFRSSUJVVEVfT1BFUkFUT1IgLSA0NzYsIDENCi1bZXhhbXBsZV0gU0VMRUNUT1JfQVRUUklCVVRFX1ZBTFVFIC0gNDc3LCA3DQotW11dIFNFTEVDVE9SX0FUVFJJQlVURV9FTkQgLSA0ODQsIDENCi1bIF0gUyAtIDQ4NSwgMQ0KLVt7XSBMQlJBQ0UgLSA0ODYsIDENCi1bICBdIFMgLSA0ODcsIDINCi1bY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gNDg5LCA1DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDQ5NCwgMQ0KLVsgXSBTIC0gNDk1LCAxDQotW2JsdWVdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gNDk2LCA0DQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDUwMCwgMQ0KLVsgIF0gUyAtIDUwMSwgMg0KLVt9XSBSQlJBQ0UgLSA1MDMsIDENCi1bDQotXSBTIC0gNTA0LCAyDQotW3NwYW5dIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDUwNiwgNA0KLVtbXSBTRUxFQ1RPUl9BVFRSSUJVVEVfU1RBUlQgLSA1MTAsIDENCi1baGVsbG9dIFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FIC0gNTExLCA1DQotWz1dIFNFTEVDVE9SX0FUVFJJQlVURV9PUEVSQVRPUiAtIDUxNiwgMQ0KLVsiQ2xldmVsYW5kIl0gU0VMRUNUT1JfQVRUUklCVVRFX1ZBTFVFIC0gNTE3LCAxMQ0KLVtdXSBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EIC0gNTI4LCAxDQotW1tdIFNFTEVDVE9SX0FUVFJJQlVURV9TVEFSVCAtIDUyOSwgMQ0KLVtnb29kYnllXSBTRUxFQ1RPUl9BVFRSSUJVVEVfTkFNRSAtIDUzMCwgNw0KLVs9XSBTRUxFQ1RPUl9BVFRSSUJVVEVfT1BFUkFUT1IgLSA1MzcsIDENCi1bIkNvbHVtYnVzIl0gU0VMRUNUT1JfQVRUUklCVVRFX1ZBTFVFIC0gNTM4LCAxMA0KLVtdXSBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EIC0gNTQ4LCAxDQotWyBdIFMgLSA1NDksIDENCi1be10gTEJSQUNFIC0gNTUwLCAxDQotWyAgXSBTIC0gNTUxLCAyDQotW2NvbG9yXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDU1MywgNQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA1NTgsIDENCi1bIF0gUyAtIDU1OSwgMQ0KLVtibHVlXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDU2MCwgNA0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSA1NjQsIDENCi1bICBdIFMgLSA1NjUsIDINCi1bfV0gUkJSQUNFIC0gNTY3LCAxDQotWw0KLV0gUyAtIDU2OCwgMg0KLVthXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSA1NzAsIDENCi1bW10gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUIC0gNTcxLCAxDQotW3JlbF0gU0VMRUNUT1JfQVRUUklCVVRFX05BTUUgLSA1NzIsIDMNCi1bfj1dIFNFTEVDVE9SX0FUVFJJQlVURV9PUEVSQVRPUiAtIDU3NSwgMg0KLVsiY29weXJpZ2h0Il0gU0VMRUNUT1JfQVRUUklCVVRFX1ZBTFVFIC0gNTc3LCAxMQ0KLVtdXSBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EIC0gNTg4LCAxDQotWyBdIFMgLSA1ODksIDENCi1be10gTEJSQUNFIC0gNTkwLCAxDQotWyAgXSBTIC0gNTkxLCAyDQotW2NvbG9yXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDU5MywgNQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA1OTgsIDENCi1bIF0gUyAtIDU5OSwgMQ0KLVtibHVlXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDYwMCwgNA0KLVsgIF0gUyAtIDYwNCwgMg0KLVt9XSBSQlJBQ0UgLSA2MDYsIDENCi1bDQotXSBTIC0gNjA3LCAyDQotW2FdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDYwOSwgMQ0KLVtbXSBTRUxFQ1RPUl9BVFRSSUJVVEVfU1RBUlQgLSA2MTAsIDENCi1baHJlZl0gU0VMRUNUT1JfQVRUUklCVVRFX05BTUUgLSA2MTEsIDQNCi1bPV0gU0VMRUNUT1JfQVRUUklCVVRFX09QRVJBVE9SIC0gNjE1LCAxDQotWyJodHRwOi8vd3d3LnczLm9yZy8iXSBTRUxFQ1RPUl9BVFRSSUJVVEVfVkFMVUUgLSA2MTYsIDIwDQotW11dIFNFTEVDVE9SX0FUVFJJQlVURV9FTkQgLSA2MzYsIDENCi1bIF0gUyAtIDYzNywgMQ0KLVt7XSBMQlJBQ0UgLSA2MzgsIDENCi1bICBdIFMgLSA2MzksIDINCi1bY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gNjQxLCA1DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDY0NiwgMQ0KLVsgXSBTIC0gNjQ3LCAxDQotW2JsdWVdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gNjQ4LCA0DQotWyAgXSBTIC0gNjUyLCAyDQotW31dIFJCUkFDRSAtIDY1NCwgMQ0KLVsNCi1dIFMgLSA2NTUsIDINCi1bKl0gU0VMRUNUT1JfVU5JVkVSU0FMIC0gNjU3LCAxDQotW1tdIFNFTEVDVE9SX0FUVFJJQlVURV9TVEFSVCAtIDY1OCwgMQ0KLVtsYW5nXSBTRUxFQ1RPUl9BVFRSSUJVVEVfTkFNRSAtIDY1OSwgNA0KLVs9XSBTRUxFQ1RPUl9BVFRSSUJVVEVfT1BFUkFUT1IgLSA2NjMsIDENCi1bZnJdIFNFTEVDVE9SX0FUVFJJQlVURV9WQUxVRSAtIDY2NCwgMg0KLVtdXSBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EIC0gNjY2LCAxDQotWyBdIFMgLSA2NjcsIDENCi1be10gTEJSQUNFIC0gNjY4LCAxDQotWyAgXSBTIC0gNjY5LCAyDQotW2Rpc3BsYXldIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gNjcxLCA3DQotWyBdIFMgLSA2NzgsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gNjc5LCAxDQotWyBdIFMgLSA2ODAsIDENCi1bbm9uZV0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSA2ODEsIDQNCi1bICBdIFMgLSA2ODUsIDINCi1bfV0gUkJSQUNFIC0gNjg3LCAxDQotWw0KLV0gUyAtIDY4OCwgMg0KLVsqXSBTRUxFQ1RPUl9VTklWRVJTQUwgLSA2OTAsIDENCi1bW10gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUIC0gNjkxLCAxDQotW2xhbmddIFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FIC0gNjkyLCA0DQotW3w9XSBTRUxFQ1RPUl9BVFRSSUJVVEVfT1BFUkFUT1IgLSA2OTYsIDINCi1bImVuIl0gU0VMRUNUT1JfQVRUUklCVVRFX1ZBTFVFIC0gNjk4LCA0DQotW11dIFNFTEVDVE9SX0FUVFJJQlVURV9FTkQgLSA3MDIsIDENCi1bIF0gUyAtIDcwMywgMQ0KLVt7XSBMQlJBQ0UgLSA3MDQsIDENCi1bICBdIFMgLSA3MDUsIDINCi1bY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gNzA3LCA1DQotWyBdIFMgLSA3MTIsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gNzEzLCAxDQotWyBdIFMgLSA3MTQsIDENCi1bcmVkXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDcxNSwgMw0KLVsgIF0gUyAtIDcxOCwgMg0KLVt9XSBSQlJBQ0UgLSA3MjAsIDENCi1bDQotXSBTIC0gNzIxLCAyDQotW0RJQUxPR1VFXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSA3MjMsIDgNCi1bW10gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUIC0gNzMxLCAxDQotW2NoYXJhY3Rlcl0gU0VMRUNUT1JfQVRUUklCVVRFX05BTUUgLSA3MzIsIDkNCi1bPV0gU0VMRUNUT1JfQVRUUklCVVRFX09QRVJBVE9SIC0gNzQxLCAxDQotW3JvbWVvXSBTRUxFQ1RPUl9BVFRSSUJVVEVfVkFMVUUgLSA3NDIsIDUNCi1bXV0gU0VMRUNUT1JfQVRUUklCVVRFX0VORCAtIDc0NywgMQ0KLVsNCi1dIFMgLSA3NDgsIDINCi1be10gTEJSQUNFIC0gNzUwLCAxDQotWyAgXSBTIC0gNzUxLCAyDQotW3ZvaWNlLWZhbWlseV0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA3NTMsIDEyDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDc2NSwgMQ0KLVsgXSBTIC0gNzY2LCAxDQotWyJMYXdyZW5jZSBPbGl2aWVyIl0gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gNzY3LCAxOA0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDc4NSwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gNzg2LCAxDQotW2NoYXJsZXNdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gNzg3LCA3DQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gNzk0LCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSA3OTUsIDENCi1bbWFsZV0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSA3OTYsIDQNCi1bICBdIFMgLSA4MDAsIDINCi1bfV0gUkJSQUNFIC0gODAyLCAxDQotWw0KLV0gUyAtIDgwMywgMg0KLVtESUFMT0dVRV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gODA1LCA4DQotW1tdIFNFTEVDVE9SX0FUVFJJQlVURV9TVEFSVCAtIDgxMywgMQ0KLVsgXSBTIC0gODE0LCAxDQotW2NoYXJhY3Rlcl0gU0VMRUNUT1JfQVRUUklCVVRFX05BTUUgLSA4MTUsIDkNCi1bIF0gUyAtIDgyNCwgMQ0KLVs9XSBTRUxFQ1RPUl9BVFRSSUJVVEVfT1BFUkFUT1IgLSA4MjUsIDENCi1bIF0gUyAtIDgyNiwgMQ0KLVtqdWxpZXRdIFNFTEVDVE9SX0FUVFJJQlVURV9WQUxVRSAtIDgyNywgNg0KLVsgXSBTIC0gODMzLCAxDQotW11dIFNFTEVDVE9SX0FUVFJJQlVURV9FTkQgLSA4MzQsIDENCi1bDQotXSBTIC0gODM1LCAyDQotW3tdIExCUkFDRSAtIDgzNywgMQ0KLVsgIF0gUyAtIDgzOCwgMg0KLVt2b2ljZS1mYW1pbHldIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gODQwLCAxMg0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA4NTIsIDENCi1bIF0gUyAtIDg1MywgMQ0KLVsiVml2aWVuIExlaWdoIl0gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gODU0LCAxNA0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDg2OCwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gODY5LCAxDQotW3ZpY3RvcmlhXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDg3MCwgOA0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDg3OCwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gODc5LCAxDQotW2ZlbWFsZV0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSA4ODAsIDYNCi1bICBdIFMgLSA4ODYsIDINCi1bfV0gUkJSQUNFIC0gODg4LCAxDQotWw0KLV0gUyAtIDg4OSwgMg0KLVsqXSBTRUxFQ1RPUl9VTklWRVJTQUwgLSA4OTEsIDENCi1bLnBhc3RvcmFsXSBTRUxFQ1RPUl9DTEFTUyAtIDg5MiwgOQ0KLVsgXSBTIC0gOTAxLCAxDQotW3tdIExCUkFDRSAtIDkwMiwgMQ0KLVsgIF0gUyAtIDkwMywgMg0KLVtjb2xvcl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA5MDUsIDUNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gOTEwLCAxDQotWyBdIFMgLSA5MTEsIDENCi1bZ3JlZW5dIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gOTEyLCA1DQotWyAgXSBTIC0gOTE3LCAyDQotW31dIFJCUkFDRSAtIDkxOSwgMQ0KLVsNCi1dIFMgLSA5MjAsIDINCi1bLnBhc3RvcmFsXSBTRUxFQ1RPUl9DTEFTUyAtIDkyMiwgOQ0KLVsgXSBTIC0gOTMxLCAxDQotW3tdIExCUkFDRSAtIDkzMiwgMQ0KLVsgIF0gUyAtIDkzMywgMg0KLVtjb2xvcl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA5MzUsIDUNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gOTQwLCAxDQotWyBdIFMgLSA5NDEsIDENCi1bZ3JlZW5dIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gOTQyLCA1DQotWyAgXSBTIC0gOTQ3LCAyDQotW31dIFJCUkFDRSAtIDk0OSwgMQ0KLVsNCi1dIFMgLSA5NTAsIDINCi1bSDFdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDk1MiwgMg0KLVsucGFzdG9yYWxdIFNFTEVDVE9SX0NMQVNTIC0gOTU0LCA5DQotWyBdIFMgLSA5NjMsIDENCi1be10gTEJSQUNFIC0gOTY0LCAxDQotWyAgXSBTIC0gOTY1LCAyDQotW2NvbG9yXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDk2NywgNQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA5NzIsIDENCi1bIF0gUyAtIDk3MywgMQ0KLVtncmVlbl0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSA5NzQsIDUNCi1bICBdIFMgLSA5NzksIDINCi1bfV0gUkJSQUNFIC0gOTgxLCAxDQotWw0KLV0gUyAtIDk4MiwgMg0KLVtwXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSA5ODQsIDENCi1bLnBhc3RvcmFsXSBTRUxFQ1RPUl9DTEFTUyAtIDk4NSwgOQ0KLVsubWFyaW5lXSBTRUxFQ1RPUl9DTEFTUyAtIDk5NCwgNw0KLVsgXSBTIC0gMTAwMSwgMQ0KLVt7XSBMQlJBQ0UgLSAxMDAyLCAxDQotWyAgXSBTIC0gMTAwMywgMg0KLVtjb2xvcl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxMDA1LCA1DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDEwMTAsIDENCi1bIF0gUyAtIDEwMTEsIDENCi1bZ3JlZW5dIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMTAxMiwgNQ0KLVsgIF0gUyAtIDEwMTcsIDINCi1bfV0gUkJSQUNFIC0gMTAxOSwgMQ0KLVsNCi1dIFMgLSAxMDIwLCAyDQotW2gxXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxMDIyLCAyDQotWyNjaGFwdGVyMV0gU0VMRUNUT1JfSUQgLSAxMDI0LCA5DQotWyBdIFMgLSAxMDMzLCAxDQotW3tdIExCUkFDRSAtIDEwMzQsIDENCi1bICBdIFMgLSAxMDM1LCAyDQotW3RleHQtYWxpZ25dIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTAzNywgMTANCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTA0NywgMQ0KLVsgXSBTIC0gMTA0OCwgMQ0KLVtjZW50ZXJdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMTA0OSwgNg0KLVsgIF0gUyAtIDEwNTUsIDINCi1bfV0gUkJSQUNFIC0gMTA1NywgMQ0KLVsNCi1dIFMgLSAxMDU4LCAyDQotW2Rpdl0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTA2MCwgMw0KLVsgXSBTIC0gMTA2MywgMQ0KLVs+XSBTRUxFQ1RPUl9DT01CSU5BVE9SIC0gMTA2NCwgMQ0KLVsgXSBTIC0gMTA2NSwgMQ0KLVtwXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxMDY2LCAxDQotWzpmaXJzdC1jaGlsZF0gU0VMRUNUT1JfUFNFVURPIC0gMTA2NywgMTINCi1bIF0gUyAtIDEwNzksIDENCi1be10gTEJSQUNFIC0gMTA4MCwgMQ0KLVsgIF0gUyAtIDEwODEsIDINCi1bdGV4dC1pbmRlbnRdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTA4MywgMTENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTA5NCwgMQ0KLVsgXSBTIC0gMTA5NSwgMQ0KLVswXSBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVIgLSAxMDk2LCAxDQotWyAgXSBTIC0gMTA5NywgMg0KLVt9XSBSQlJBQ0UgLSAxMDk5LCAxDQotWw0KLV0gUyAtIDExMDAsIDINCi1bcF0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTEwMiwgMQ0KLVs6Zmlyc3QtY2hpbGRdIFNFTEVDVE9SX1BTRVVETyAtIDExMDMsIDEyDQotWyBdIFNFTEVDVE9SX0NPTUJJTkFUT1IgLSAxMTE1LCAxDQotW2VtXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxMTE2LCAyDQotWyBdIFMgLSAxMTE4LCAxDQotW3tdIExCUkFDRSAtIDExMTksIDENCi1bICBdIFMgLSAxMTIwLCAyDQotW2ZvbnQtd2VpZ2h0XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDExMjIsIDExDQotWyBdIFMgLSAxMTMzLCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDExMzQsIDENCi1bIF0gUyAtIDExMzUsIDENCi1bYm9sZF0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAxMTM2LCA0DQotWyAgXSBTIC0gMTE0MCwgMg0KLVt9XSBSQlJBQ0UgLSAxMTQyLCAxDQotWw0KLV0gUyAtIDExNDMsIDINCi1bKl0gU0VMRUNUT1JfVU5JVkVSU0FMIC0gMTE0NSwgMQ0KLVsgXSBTIC0gMTE0NiwgMQ0KLVs+XSBTRUxFQ1RPUl9DT01CSU5BVE9SIC0gMTE0NywgMQ0KLVsgXSBTIC0gMTE0OCwgMQ0KLVthXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxMTQ5LCAxDQotWzpmaXJzdC1jaGlsZF0gU0VMRUNUT1JfUFNFVURPIC0gMTE1MCwgMTINCi1bIF0gUyAtIDExNjIsIDENCi1be10gTEJSQUNFIC0gMTE2MywgMQ0KLVsgIF0gUyAtIDExNjQsIDINCi1bZm9udC13ZWlnaHRdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTE2NiwgMTENCi1bIF0gUyAtIDExNzcsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTE3OCwgMQ0KLVsgXSBTIC0gMTE3OSwgMQ0KLVtib2xkXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDExODAsIDQNCi1bICBdIFMgLSAxMTg0LCAyDQotW31dIFJCUkFDRSAtIDExODYsIDENCi1bDQotXSBTIC0gMTE4NywgMg0KLVthXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxMTg5LCAxDQotWzpmaXJzdC1jaGlsZF0gU0VMRUNUT1JfUFNFVURPIC0gMTE5MCwgMTINCi1bIF0gUyAtIDEyMDIsIDENCi1be10gTEJSQUNFIC0gMTIwMywgMQ0KLVsgIF0gUyAtIDEyMDQsIDINCi1bZm9udC13ZWlnaHRdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTIwNiwgMTENCi1bIF0gUyAtIDEyMTcsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTIxOCwgMQ0KLVsgXSBTIC0gMTIxOSwgMQ0KLVtib2xkXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDEyMjAsIDQNCi1bICBdIFMgLSAxMjI0LCAyDQotW31dIFJCUkFDRSAtIDEyMjYsIDENCi1bDQotXSBTIC0gMTIyNywgMg0KLVthXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxMjI5LCAxDQotWy5leHRlcm5hbF0gU0VMRUNUT1JfQ0xBU1MgLSAxMjMwLCA5DQotWzp2aXNpdGVkXSBTRUxFQ1RPUl9QU0VVRE8gLSAxMjM5LCA4DQotWyBdIFMgLSAxMjQ3LCAxDQotW3tdIExCUkFDRSAtIDEyNDgsIDENCi1bICBdIFMgLSAxMjQ5LCAyDQotW2NvbG9yXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDEyNTEsIDUNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTI1NiwgMQ0KLVsgXSBTIC0gMTI1NywgMQ0KLVtibHVlXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDEyNTgsIDQNCi1bICBdIFMgLSAxMjYyLCAyDQotW31dIFJCUkFDRSAtIDEyNjQsIDENCi1bDQotXSBTIC0gMTI2NSwgMg0KLVthXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxMjY3LCAxDQotWzpmb2N1c10gU0VMRUNUT1JfUFNFVURPIC0gMTI2OCwgNg0KLVs6aG92ZXJdIFNFTEVDVE9SX1BTRVVETyAtIDEyNzQsIDYNCi1bIF0gUyAtIDEyODAsIDENCi1be10gTEJSQUNFIC0gMTI4MSwgMQ0KLVsgIF0gUyAtIDEyODIsIDINCi1bYmFja2dyb3VuZF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxMjg0LCAxMA0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxMjk0LCAxDQotWyBdIFMgLSAxMjk1LCAxDQotW3doaXRlXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDEyOTYsIDUNCi1bICBdIFMgLSAxMzAxLCAyDQotW31dIFJCUkFDRSAtIDEzMDMsIDENCi1bDQotXSBTIC0gMTMwNCwgMg0KLVtodG1sXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxMzA2LCA0DQotWzpsYW5nKGZyKV0gU0VMRUNUT1JfUFNFVURPIC0gMTMxMCwgOQ0KLVsgXSBTIC0gMTMxOSwgMQ0KLVt7XSBMQlJBQ0UgLSAxMzIwLCAxDQotWyAgXSBTIC0gMTMyMSwgMg0KLVtxdW90ZXNdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTMyMywgNg0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxMzI5LCAxDQotWyBdIFMgLSAxMzMwLCAxDQotWyc8PCddIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDEzMzEsIDQNCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDEzMzUsIDENCi1bJz4+J10gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gMTMzNiwgNA0KLVsgIF0gUyAtIDEzNDAsIDINCi1bfV0gUkJSQUNFIC0gMTM0MiwgMQ0KLVsNCi1dIFMgLSAxMzQzLCAyDQotW2h0bWxdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDEzNDUsIDQNCi1bOmxhbmcoZGUpXSBTRUxFQ1RPUl9QU0VVRE8gLSAxMzQ5LCA5DQotWyBdIFMgLSAxMzU4LCAxDQotW3tdIExCUkFDRSAtIDEzNTksIDENCi1bICBdIFMgLSAxMzYwLCAyDQotW3F1b3Rlc10gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxMzYyLCA2DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDEzNjgsIDENCi1bIF0gUyAtIDEzNjksIDENCi1bJz4+J10gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gMTM3MCwgNA0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTM3NCwgMQ0KLVsnPDwnXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAxMzc1LCA0DQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxMzc5LCAxDQotWydcMjAzOSddIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDEzODAsIDcNCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDEzODcsIDENCi1bJ1wyMDNBJ10gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gMTM4OCwgNw0KLVsgIF0gUyAtIDEzOTUsIDINCi1bfV0gUkJSQUNFIC0gMTM5NywgMQ0KLVsNCi1dIFMgLSAxMzk4LCAyDQotWzpsYW5nKGZyKV0gU0VMRUNUT1JfUFNFVURPIC0gMTQwMCwgOQ0KLVsgXSBTIC0gMTQwOSwgMQ0KLVs+XSBTRUxFQ1RPUl9DT01CSU5BVE9SIC0gMTQxMCwgMQ0KLVsgXSBTIC0gMTQxMSwgMQ0KLVtRXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxNDEyLCAxDQotWyBdIFMgLSAxNDEzLCAxDQotW3tdIExCUkFDRSAtIDE0MTQsIDENCi1bICBdIFMgLSAxNDE1LCAyDQotW3F1b3Rlc10gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxNDE3LCA2DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDE0MjMsIDENCi1bIF0gUyAtIDE0MjQsIDENCi1bJzw8J10gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gMTQyNSwgNA0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTQyOSwgMQ0KLVsnPj4nXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAxNDMwLCA0DQotWyAgXSBTIC0gMTQzNCwgMg0KLVt9XSBSQlJBQ0UgLSAxNDM2LCAxDQotWw0KLV0gUyAtIDE0MzcsIDINCi1bOmxhbmcoZGUpXSBTRUxFQ1RPUl9QU0VVRE8gLSAxNDM5LCA5DQotWyBdIFMgLSAxNDQ4LCAxDQotWz5dIFNFTEVDVE9SX0NPTUJJTkFUT1IgLSAxNDQ5LCAxDQotWyBdIFMgLSAxNDUwLCAxDQotW1FdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDE0NTEsIDENCi1bIF0gUyAtIDE0NTIsIDENCi1be10gTEJSQUNFIC0gMTQ1MywgMQ0KLVsgIF0gUyAtIDE0NTQsIDINCi1bcXVvdGVzXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDE0NTYsIDYNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTQ2MiwgMQ0KLVsgXSBTIC0gMTQ2MywgMQ0KLVsnPj4nXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAxNDY0LCA0DQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxNDY4LCAxDQotWyc8PCddIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDE0NjksIDQNCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDE0NzMsIDENCi1bJ1wyMDM5J10gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gMTQ3NCwgNw0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTQ4MSwgMQ0KLVsnXDIwM0EnXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAxNDgyLCA3DQotWyAgXSBTIC0gMTQ4OSwgMg0KLVt9XSBSQlJBQ0UgLSAxNDkxLCAxDQotWw0KLV0gUyAtIDE0OTIsIDINCi1bcF0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTQ5NCwgMQ0KLVs6Zmlyc3QtbGV0dGVyXSBTRUxFQ1RPUl9QU0VVRE8gLSAxNDk1LCAxMw0KLVsgXSBTIC0gMTUwOCwgMQ0KLVt7XSBMQlJBQ0UgLSAxNTA5LCAxDQotWyAgXSBTIC0gMTUxMCwgMg0KLVtmb250LXNpemVdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTUxMiwgOQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxNTIxLCAxDQotWyBdIFMgLSAxNTIyLCAxDQotWzNlbV0gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gMTUyMywgMw0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSAxNTI2LCAxDQotWyBdIFMgLSAxNTI3LCAxDQotW2ZvbnQtd2VpZ2h0XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDE1MjgsIDExDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDE1MzksIDENCi1bIF0gUyAtIDE1NDAsIDENCi1bbm9ybWFsXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDE1NDEsIDYNCi1bICBdIFMgLSAxNTQ3LCAyDQotW31dIFJCUkFDRSAtIDE1NDksIDENCi1bDQotXSBTIC0gMTU1MCwgMg0KLVtwXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxNTUyLCAxDQotWy5zcGVjaWFsXSBTRUxFQ1RPUl9DTEFTUyAtIDE1NTMsIDgNCi1bOmJlZm9yZV0gU0VMRUNUT1JfUFNFVURPIC0gMTU2MSwgNw0KLVsgXSBTIC0gMTU2OCwgMQ0KLVt7XSBMQlJBQ0UgLSAxNTY5LCAxDQotWyBdIFMgLSAxNTcwLCAxDQotW2NvbnRlbnRdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTU3MSwgNw0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxNTc4LCAxDQotWyBdIFMgLSAxNTc5LCAxDQotWyJTcGVjaWFsISAiXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAxNTgwLCAxMQ0KLVsgXSBTIC0gMTU5MSwgMQ0KLVt9XSBSQlJBQ0UgLSAxNTkyLCAxDQotWw0KLV0gUyAtIDE1OTMsIDINCi1bcF0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTU5NSwgMQ0KLVsuc3BlY2lhbF0gU0VMRUNUT1JfQ0xBU1MgLSAxNTk2LCA4DQotWzpmaXJzdC1sZXR0ZXJdIFNFTEVDVE9SX1BTRVVETyAtIDE2MDQsIDEzDQotWyBdIFMgLSAxNjE3LCAxDQotW3tdIExCUkFDRSAtIDE2MTgsIDENCi1bIF0gUyAtIDE2MTksIDENCi1bY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTYyMCwgNQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxNjI1LCAxDQotWyBdIFMgLSAxNjI2LCAxDQotWyNmZmQ4MDBdIERFQ0xBUkFUSU9OX1ZBTFVFX0hBU0ggLSAxNjI3LCA3DQotWyBdIFMgLSAxNjM0LCAxDQotW31dIFJCUkFDRSAtIDE2MzUsIDENCi1bDQotXSBTIC0gMTYzNiwgMg0KLVtCT0RZXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxNjM4LCA0DQotWyBdIFMgLSAxNjQyLCAxDQotW3tdIExCUkFDRSAtIDE2NDMsIDENCi1bIF0gUyAtIDE2NDQsIDENCi1bZm9udC1mYW1pbHldIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTY0NSwgMTENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTY1NiwgMQ0KLVsgXSBTIC0gMTY1NywgMQ0KLVtCYXNrZXJ2aWxsZV0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAxNjU4LCAxMQ0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDE2NjksIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDE2NzAsIDENCi1bIkhlaXNpIE1pbmNobyBXMyJdIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDE2NzEsIDE3DQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gMTY4OCwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTY4OSwgMQ0KLVtTeW1ib2xdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMTY5MCwgNg0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDE2OTYsIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDE2OTcsIDENCi1bc2VyaWZdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMTY5OCwgNQ0KLVsgXSBTIC0gMTcwMywgMQ0KLVt9XSBSQlJBQ0UgLSAxNzA0LCAxDQotWw0KLV0gUyAtIDE3MDUsIDINCi1bKl0gU0VMRUNUT1JfVU5JVkVSU0FMIC0gMTcwNywgMQ0KLVs6bGFuZyhqYS1qcCldIFNFTEVDVE9SX1BTRVVETyAtIDE3MDgsIDEyDQotWyBdIFMgLSAxNzIwLCAxDQotW3tdIExCUkFDRSAtIDE3MjEsIDENCi1bIF0gUyAtIDE3MjIsIDENCi1bZm9udF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxNzIzLCA0DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDE3MjcsIDENCi1bIF0gUyAtIDE3MjgsIDENCi1bOTAwXSBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVIgLSAxNzI5LCAzDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxNzMyLCAxDQotWzE0cHRdIERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTiAtIDE3MzMsIDQNCi1bL10gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSAxNzM3LCAxDQotWzE2cHRdIERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTiAtIDE3MzgsIDQNCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDE3NDIsIDENCi1bIkhlaXNlaSBNaW5jaG8gVzkiXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAxNzQzLCAxOA0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDE3NjEsIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDE3NjIsIDENCi1bc2VyaWZdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMTc2MywgNQ0KLVsgXSBTIC0gMTc2OCwgMQ0KLVt9XSBSQlJBQ0UgLSAxNzY5LCAxDQotWw0KLV0gUyAtIDE3NzAsIDINCi1bKl0gU0VMRUNUT1JfVU5JVkVSU0FMIC0gMTc3MiwgMQ0KLVs6bGFuZyh6aC10dyldIFNFTEVDVE9SX1BTRVVETyAtIDE3NzMsIDEyDQotWyBdIFMgLSAxNzg1LCAxDQotW3tdIExCUkFDRSAtIDE3ODYsIDENCi1bIF0gUyAtIDE3ODcsIDENCi1bZm9udF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxNzg4LCA0DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDE3OTIsIDENCi1bIF0gUyAtIDE3OTMsIDENCi1bODAwXSBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVIgLSAxNzk0LCAzDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxNzk3LCAxDQotWzE0cHRdIERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTiAtIDE3OTgsIDQNCi1bL10gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSAxODAyLCAxDQotWzE2LjVwdF0gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gMTgwMywgNg0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTgwOSwgMQ0KLVsiTGkgU3VuZyJdIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDE4MTAsIDkNCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSAxODE5LCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxODIwLCAxDQotW3NlcmlmXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDE4MjEsIDUNCi1bIF0gUyAtIDE4MjYsIDENCi1bfV0gUkJSQUNFIC0gMTgyNywgMQ0KLVsNCi1dIFMgLSAxODI4LCAyDQotDQotLS0tLS0tLQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1RleHRQYXJzZXJUZXN0LXNhbXBsZTA1LmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1RleHRQYXJzZXJUZXN0LXNhbXBsZTA1LmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQ1ZDJlNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NUZXh0UGFyc2VyVGVzdC1zYW1wbGUwNS5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw3MDYgKzAsMCBAQAotW0BjaGFyc2V0XSBDSEFSU0VUIC0gMCwgOA0KLVsgXSBTIC0gOCwgMQ0KLVsiSVNPLTg4NTktMSJdIFNUUklORyAtIDksIDEyDQotWztdIERFTElNSVRFUiAtIDIxLCAxDQotWw0KLQ0KLV0gUyAtIDIyLCA0DQotW0BpbXBvcnRdIElNUE9SVCAtIDI2LCA3DQotWyBdIFMgLSAzMywgMQ0KLVt1cmwoImhvZ2UuY3NzIildIFVSSSAtIDM0LCAxNQ0KLVs7XSBERUxJTUlURVIgLSA0OSwgMQ0KLVsNCi1dIFMgLSA1MCwgMg0KLVtAaW1wb3J0XSBJTVBPUlQgLSA1MiwgNw0KLVsgXSBTIC0gNTksIDENCi1bLyogY29tbWVudCAqL10gQ09NTUVOVCAtIDYwLCAxMw0KLVsgXSBTIC0gNzMsIDENCi1bdXJsKGhvZ2UuY3NzKV0gVVJJIC0gNzQsIDEzDQotWztdIERFTElNSVRFUiAtIDg3LCAxDQotWw0KLV0gUyAtIDg4LCAyDQotW0BpbXBvcnRdIElNUE9SVCAtIDkwLCA3DQotWyBdIFMgLSA5NywgMQ0KLVsiaG9nZS5jc3MiXSBTVFJJTkcgLSA5OCwgMTANCi1bIF0gUyAtIDEwOCwgMQ0KLVsvKiBjb21tZW50ICovXSBDT01NRU5UIC0gMTA5LCAxMw0KLVs7XSBERUxJTUlURVIgLSAxMjIsIDENCi1bDQotXSBTIC0gMTIzLCAyDQotW0BJTVBPUlRdIElNUE9SVCAtIDEyNSwgNw0KLVsgXSBTIC0gMTMyLCAxDQotWydob2dlLmNzcyddIFNUUklORyAtIDEzMywgMTANCi1bIF0gUyAtIDE0MywgMQ0KLVttZWRpYTFdIE1FRElVTSAtIDE0NCwgNg0KLVssXSBNRURJQV9TRVBBUkFUT1IgLSAxNTAsIDENCi1bbWVkaWEyXSBNRURJVU0gLSAxNTEsIDYNCi1bIF0gUyAtIDE1NywgMQ0KLVssXSBNRURJQV9TRVBBUkFUT1IgLSAxNTgsIDENCi1bIF0gUyAtIDE1OSwgMQ0KLVttZWRpYTNdIE1FRElVTSAtIDE2MCwgNg0KLVs7XSBERUxJTUlURVIgLSAxNjYsIDENCi1bDQotDQotXSBTIC0gMTY3LCA0DQotW0BtZWRpYV0gTUVESUEgLSAxNzEsIDYNCi1bIF0gUyAtIDE3NywgMQ0KLVtwcmludF0gTUVESVVNIC0gMTc4LCA1DQotWyBdIFMgLSAxODMsIDENCi1be10gTEJSQUNFIC0gMTg0LCAxDQotWw0KLQ0KLV0gUyAtIDE4NSwgNA0KLVt9XSBSQlJBQ0UgLSAxODksIDENCi1bDQotDQotXSBTIC0gMTkwLCA0DQotW0BwYWdlXSBQQUdFIC0gMTk0LCA1DQotWyBdIFMgLSAxOTksIDENCi1bOmxlZnRdIENTU19QQUdFX1NFTEVDVE9SIC0gMjAwLCA1DQotWyBdIFMgLSAyMDUsIDENCi1be10gTEJSQUNFIC0gMjA2LCAxDQotWw0KLQ0KLV0gUyAtIDIwNywgNA0KLVt9XSBSQlJBQ0UgLSAyMTEsIDENCi1bDQotDQotXSBTIC0gMjEyLCA0DQotW2gxXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAyMTYsIDINCi1bLF0gU0VMRUNUT1JfU0VQQVJBVE9SIC0gMjE4LCAxDQotWyBdIFMgLSAyMTksIDENCi1baDJdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDIyMCwgMg0KLVssXSBTRUxFQ1RPUl9TRVBBUkFUT1IgLSAyMjIsIDENCi1bIF0gUyAtIDIyMywgMQ0KLVtoM10gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMjI0LCAyDQotWyBdIFMgLSAyMjYsIDENCi1be10gTEJSQUNFIC0gMjI3LCAxDQotWyAgXSBTIC0gMjI4LCAyDQotW2ZvbnQtZmFtaWx5XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDIzMCwgMTENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMjQxLCAxDQotWyBdIFMgLSAyNDIsIDENCi1bc2Fucy1zZXJpZl0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAyNDMsIDEwDQotWyAgXSBTIC0gMjUzLCAyDQotW31dIFJCUkFDRSAtIDI1NSwgMQ0KLVsNCi1dIFMgLSAyNTYsIDINCi1baDFdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDI1OCwgMg0KLVsgXSBTRUxFQ1RPUl9DT01CSU5BVE9SIC0gMjYwLCAxDQotW2VtXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAyNjEsIDINCi1bIF0gUyAtIDI2MywgMQ0KLVt7XSBMQlJBQ0UgLSAyNjQsIDENCi1bICBdIFMgLSAyNjUsIDINCi1bY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMjY3LCA1DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDI3MiwgMQ0KLVsgXSBTIC0gMjczLCAxDQotW2JsdWVdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMjc0LCA0DQotWyAgXSBTIC0gMjc4LCAyDQotW31dIFJCUkFDRSAtIDI4MCwgMQ0KLVsNCi1dIFMgLSAyODEsIDINCi1bZGl2XSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAyODMsIDMNCi1bIF0gU0VMRUNUT1JfQ09NQklOQVRPUiAtIDI4NiwgMQ0KLVtwXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAyODcsIDENCi1bIF0gU0VMRUNUT1JfQ09NQklOQVRPUiAtIDI4OCwgMQ0KLVsqXSBTRUxFQ1RPUl9VTklWRVJTQUwgLSAyODksIDENCi1bW10gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUIC0gMjkwLCAxDQotW2hyZWZdIFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FIC0gMjkxLCA0DQotW11dIFNFTEVDVE9SX0FUVFJJQlVURV9FTkQgLSAyOTUsIDENCi1bIF0gUyAtIDI5NiwgMQ0KLVt7XSBMQlJBQ0UgLSAyOTcsIDENCi1bICBdIFMgLSAyOTgsIDINCi1bY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMzAwLCA1DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDMwNSwgMQ0KLVsgXSBTIC0gMzA2LCAxDQotW2JsdWVdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMzA3LCA0DQotWyAgXSBTIC0gMzExLCAyDQotW31dIFJCUkFDRSAtIDMxMywgMQ0KLVsNCi1dIFMgLSAzMTQsIDINCi1bYm9keV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMzE2LCA0DQotWyBdIFMgLSAzMjAsIDENCi1bPl0gU0VMRUNUT1JfQ09NQklOQVRPUiAtIDMyMSwgMQ0KLVsgXSBTIC0gMzIyLCAxDQotW1BdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDMyMywgMQ0KLVsgXSBTIC0gMzI0LCAxDQotW3tdIExCUkFDRSAtIDMyNSwgMQ0KLVsgIF0gUyAtIDMyNiwgMg0KLVtsaW5lLWhlaWdodF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAzMjgsIDExDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDMzOSwgMQ0KLVsgXSBTIC0gMzQwLCAxDQotWzEuM10gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSIC0gMzQxLCAzDQotWyAgXSBTIC0gMzQ0LCAyDQotW31dIFJCUkFDRSAtIDM0NiwgMQ0KLVsNCi1dIFMgLSAzNDcsIDINCi1bZGl2XSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAzNDksIDMNCi1bIF0gU0VMRUNUT1JfQ09NQklOQVRPUiAtIDM1MiwgMQ0KLVtvbF0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMzUzLCAyDQotWz5dIFNFTEVDVE9SX0NPTUJJTkFUT1IgLSAzNTUsIDENCi1bbGldIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDM1NiwgMg0KLVsgXSBTRUxFQ1RPUl9DT01CSU5BVE9SIC0gMzU4LCAxDQotW3BdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDM1OSwgMQ0KLVsgXSBTIC0gMzYwLCAxDQotW3tdIExCUkFDRSAtIDM2MSwgMQ0KLVsgXSBTIC0gMzYyLCAxDQotW31dIFJCUkFDRSAtIDM2MywgMQ0KLVsNCi1dIFMgLSAzNjQsIDINCi1bbWF0aF0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMzY2LCA0DQotWyBdIFMgLSAzNzAsIDENCi1bK10gU0VMRUNUT1JfQ09NQklOQVRPUiAtIDM3MSwgMQ0KLVsgXSBTIC0gMzcyLCAxDQotW3BdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDM3MywgMQ0KLVsgXSBTIC0gMzc0LCAxDQotW3tdIExCUkFDRSAtIDM3NSwgMQ0KLVsgIF0gUyAtIDM3NiwgMg0KLVt0ZXh0LWluZGVudF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAzNzgsIDExDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDM4OSwgMQ0KLVsgXSBTIC0gMzkwLCAxDQotWzBdIERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUiAtIDM5MSwgMQ0KLVsgIF0gUyAtIDM5MiwgMg0KLVt9XSBSQlJBQ0UgLSAzOTQsIDENCi1bDQotXSBTIC0gMzk1LCAyDQotW2gxXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAzOTcsIDINCi1bLm9wZW5lcl0gU0VMRUNUT1JfQ0xBU1MgLSAzOTksIDcNCi1bIF0gUyAtIDQwNiwgMQ0KLVsrXSBTRUxFQ1RPUl9DT01CSU5BVE9SIC0gNDA3LCAxDQotWyBdIFMgLSA0MDgsIDENCi1baDJdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDQwOSwgMg0KLVsgXSBTIC0gNDExLCAxDQotW3tdIExCUkFDRSAtIDQxMiwgMQ0KLVsgIF0gUyAtIDQxMywgMg0KLVttYXJnaW4tdG9wXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDQxNSwgMTANCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gNDI1LCAxDQotWyBdIFMgLSA0MjYsIDENCi1bLTVtbV0gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gNDI3LCA0DQotWyAgXSBTIC0gNDMxLCAyDQotW31dIFJCUkFDRSAtIDQzMywgMQ0KLVsNCi1dIFMgLSA0MzQsIDINCi1baDFdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDQzNiwgMg0KLVtbXSBTRUxFQ1RPUl9BVFRSSUJVVEVfU1RBUlQgLSA0MzgsIDENCi1bdGl0bGVdIFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FIC0gNDM5LCA1DQotW11dIFNFTEVDVE9SX0FUVFJJQlVURV9FTkQgLSA0NDQsIDENCi1bIF0gUyAtIDQ0NSwgMQ0KLVt7XSBMQlJBQ0UgLSA0NDYsIDENCi1bICBdIFMgLSA0NDcsIDINCi1bY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gNDQ5LCA1DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDQ1NCwgMQ0KLVsgXSBTIC0gNDU1LCAxDQotW2JsdWVdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gNDU2LCA0DQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDQ2MCwgMQ0KLVsgIF0gUyAtIDQ2MSwgMg0KLVt9XSBSQlJBQ0UgLSA0NjMsIDENCi1bDQotXSBTIC0gNDY0LCAyDQotW3NwYW5dIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDQ2NiwgNA0KLVtbXSBTRUxFQ1RPUl9BVFRSSUJVVEVfU1RBUlQgLSA0NzAsIDENCi1bY2xhc3NdIFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FIC0gNDcxLCA1DQotWz1dIFNFTEVDVE9SX0FUVFJJQlVURV9PUEVSQVRPUiAtIDQ3NiwgMQ0KLVtleGFtcGxlXSBTRUxFQ1RPUl9BVFRSSUJVVEVfVkFMVUUgLSA0NzcsIDcNCi1bXV0gU0VMRUNUT1JfQVRUUklCVVRFX0VORCAtIDQ4NCwgMQ0KLVsgXSBTIC0gNDg1LCAxDQotW3tdIExCUkFDRSAtIDQ4NiwgMQ0KLVsgIF0gUyAtIDQ4NywgMg0KLVtjb2xvcl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA0ODksIDUNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gNDk0LCAxDQotWyBdIFMgLSA0OTUsIDENCi1bYmx1ZV0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSA0OTYsIDQNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gNTAwLCAxDQotWyAgXSBTIC0gNTAxLCAyDQotW31dIFJCUkFDRSAtIDUwMywgMQ0KLVsNCi1dIFMgLSA1MDQsIDINCi1bc3Bhbl0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gNTA2LCA0DQotW1tdIFNFTEVDVE9SX0FUVFJJQlVURV9TVEFSVCAtIDUxMCwgMQ0KLVtoZWxsb10gU0VMRUNUT1JfQVRUUklCVVRFX05BTUUgLSA1MTEsIDUNCi1bPV0gU0VMRUNUT1JfQVRUUklCVVRFX09QRVJBVE9SIC0gNTE2LCAxDQotWyJDbGV2ZWxhbmQiXSBTRUxFQ1RPUl9BVFRSSUJVVEVfVkFMVUUgLSA1MTcsIDExDQotW11dIFNFTEVDVE9SX0FUVFJJQlVURV9FTkQgLSA1MjgsIDENCi1bW10gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUIC0gNTI5LCAxDQotW2dvb2RieWVdIFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FIC0gNTMwLCA3DQotWz1dIFNFTEVDVE9SX0FUVFJJQlVURV9PUEVSQVRPUiAtIDUzNywgMQ0KLVsiQ29sdW1idXMiXSBTRUxFQ1RPUl9BVFRSSUJVVEVfVkFMVUUgLSA1MzgsIDEwDQotW11dIFNFTEVDVE9SX0FUVFJJQlVURV9FTkQgLSA1NDgsIDENCi1bIF0gUyAtIDU0OSwgMQ0KLVt7XSBMQlJBQ0UgLSA1NTAsIDENCi1bICBdIFMgLSA1NTEsIDINCi1bY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gNTUzLCA1DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDU1OCwgMQ0KLVsgXSBTIC0gNTU5LCAxDQotW2JsdWVdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gNTYwLCA0DQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDU2NCwgMQ0KLVsgIF0gUyAtIDU2NSwgMg0KLVt9XSBSQlJBQ0UgLSA1NjcsIDENCi1bDQotXSBTIC0gNTY4LCAyDQotW2FdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDU3MCwgMQ0KLVtbXSBTRUxFQ1RPUl9BVFRSSUJVVEVfU1RBUlQgLSA1NzEsIDENCi1bcmVsXSBTRUxFQ1RPUl9BVFRSSUJVVEVfTkFNRSAtIDU3MiwgMw0KLVt+PV0gU0VMRUNUT1JfQVRUUklCVVRFX09QRVJBVE9SIC0gNTc1LCAyDQotWyJjb3B5cmlnaHQiXSBTRUxFQ1RPUl9BVFRSSUJVVEVfVkFMVUUgLSA1NzcsIDExDQotW11dIFNFTEVDVE9SX0FUVFJJQlVURV9FTkQgLSA1ODgsIDENCi1bIF0gUyAtIDU4OSwgMQ0KLVt7XSBMQlJBQ0UgLSA1OTAsIDENCi1bICBdIFMgLSA1OTEsIDINCi1bY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gNTkzLCA1DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDU5OCwgMQ0KLVsgXSBTIC0gNTk5LCAxDQotW2JsdWVdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gNjAwLCA0DQotWyAgXSBTIC0gNjA0LCAyDQotW31dIFJCUkFDRSAtIDYwNiwgMQ0KLVsNCi1dIFMgLSA2MDcsIDINCi1bYV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gNjA5LCAxDQotW1tdIFNFTEVDVE9SX0FUVFJJQlVURV9TVEFSVCAtIDYxMCwgMQ0KLVtocmVmXSBTRUxFQ1RPUl9BVFRSSUJVVEVfTkFNRSAtIDYxMSwgNA0KLVs9XSBTRUxFQ1RPUl9BVFRSSUJVVEVfT1BFUkFUT1IgLSA2MTUsIDENCi1bImh0dHA6Ly93d3cudzMub3JnLyJdIFNFTEVDVE9SX0FUVFJJQlVURV9WQUxVRSAtIDYxNiwgMjANCi1bXV0gU0VMRUNUT1JfQVRUUklCVVRFX0VORCAtIDYzNiwgMQ0KLVsgXSBTIC0gNjM3LCAxDQotW3tdIExCUkFDRSAtIDYzOCwgMQ0KLVsgIF0gUyAtIDYzOSwgMg0KLVtjb2xvcl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA2NDEsIDUNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gNjQ2LCAxDQotWyBdIFMgLSA2NDcsIDENCi1bYmx1ZV0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSA2NDgsIDQNCi1bICBdIFMgLSA2NTIsIDINCi1bfV0gUkJSQUNFIC0gNjU0LCAxDQotWw0KLV0gUyAtIDY1NSwgMg0KLVsqXSBTRUxFQ1RPUl9VTklWRVJTQUwgLSA2NTcsIDENCi1bW10gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUIC0gNjU4LCAxDQotW2xhbmddIFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FIC0gNjU5LCA0DQotWz1dIFNFTEVDVE9SX0FUVFJJQlVURV9PUEVSQVRPUiAtIDY2MywgMQ0KLVtmcl0gU0VMRUNUT1JfQVRUUklCVVRFX1ZBTFVFIC0gNjY0LCAyDQotW11dIFNFTEVDVE9SX0FUVFJJQlVURV9FTkQgLSA2NjYsIDENCi1bIF0gUyAtIDY2NywgMQ0KLVt7XSBMQlJBQ0UgLSA2NjgsIDENCi1bICBdIFMgLSA2NjksIDINCi1bZGlzcGxheV0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA2NzEsIDcNCi1bIF0gUyAtIDY3OCwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA2NzksIDENCi1bIF0gUyAtIDY4MCwgMQ0KLVtub25lXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDY4MSwgNA0KLVsgIF0gUyAtIDY4NSwgMg0KLVt9XSBSQlJBQ0UgLSA2ODcsIDENCi1bDQotXSBTIC0gNjg4LCAyDQotWypdIFNFTEVDVE9SX1VOSVZFUlNBTCAtIDY5MCwgMQ0KLVtbXSBTRUxFQ1RPUl9BVFRSSUJVVEVfU1RBUlQgLSA2OTEsIDENCi1bbGFuZ10gU0VMRUNUT1JfQVRUUklCVVRFX05BTUUgLSA2OTIsIDQNCi1bfD1dIFNFTEVDVE9SX0FUVFJJQlVURV9PUEVSQVRPUiAtIDY5NiwgMg0KLVsiZW4iXSBTRUxFQ1RPUl9BVFRSSUJVVEVfVkFMVUUgLSA2OTgsIDQNCi1bXV0gU0VMRUNUT1JfQVRUUklCVVRFX0VORCAtIDcwMiwgMQ0KLVsgXSBTIC0gNzAzLCAxDQotW3tdIExCUkFDRSAtIDcwNCwgMQ0KLVsgIF0gUyAtIDcwNSwgMg0KLVtjb2xvcl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA3MDcsIDUNCi1bIF0gUyAtIDcxMiwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA3MTMsIDENCi1bIF0gUyAtIDcxNCwgMQ0KLVtyZWRdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gNzE1LCAzDQotWyAgXSBTIC0gNzE4LCAyDQotW31dIFJCUkFDRSAtIDcyMCwgMQ0KLVsNCi1dIFMgLSA3MjEsIDINCi1bRElBTE9HVUVdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDcyMywgOA0KLVtbXSBTRUxFQ1RPUl9BVFRSSUJVVEVfU1RBUlQgLSA3MzEsIDENCi1bY2hhcmFjdGVyXSBTRUxFQ1RPUl9BVFRSSUJVVEVfTkFNRSAtIDczMiwgOQ0KLVs9XSBTRUxFQ1RPUl9BVFRSSUJVVEVfT1BFUkFUT1IgLSA3NDEsIDENCi1bcm9tZW9dIFNFTEVDVE9SX0FUVFJJQlVURV9WQUxVRSAtIDc0MiwgNQ0KLVtdXSBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EIC0gNzQ3LCAxDQotWw0KLV0gUyAtIDc0OCwgMg0KLVt7XSBMQlJBQ0UgLSA3NTAsIDENCi1bICBdIFMgLSA3NTEsIDINCi1bdm9pY2UtZmFtaWx5XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDc1MywgMTINCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gNzY1LCAxDQotWyBdIFMgLSA3NjYsIDENCi1bIkxhd3JlbmNlIE9saXZpZXIiXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSA3NjcsIDE4DQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gNzg1LCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSA3ODYsIDENCi1bY2hhcmxlc10gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSA3ODcsIDcNCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSA3OTQsIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDc5NSwgMQ0KLVttYWxlXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDc5NiwgNA0KLVsgIF0gUyAtIDgwMCwgMg0KLVt9XSBSQlJBQ0UgLSA4MDIsIDENCi1bDQotXSBTIC0gODAzLCAyDQotW0RJQUxPR1VFXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSA4MDUsIDgNCi1bW10gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUIC0gODEzLCAxDQotWyBdIFMgLSA4MTQsIDENCi1bY2hhcmFjdGVyXSBTRUxFQ1RPUl9BVFRSSUJVVEVfTkFNRSAtIDgxNSwgOQ0KLVsgXSBTIC0gODI0LCAxDQotWz1dIFNFTEVDVE9SX0FUVFJJQlVURV9PUEVSQVRPUiAtIDgyNSwgMQ0KLVsgXSBTIC0gODI2LCAxDQotW2p1bGlldF0gU0VMRUNUT1JfQVRUUklCVVRFX1ZBTFVFIC0gODI3LCA2DQotWyBdIFMgLSA4MzMsIDENCi1bXV0gU0VMRUNUT1JfQVRUUklCVVRFX0VORCAtIDgzNCwgMQ0KLVsNCi1dIFMgLSA4MzUsIDINCi1be10gTEJSQUNFIC0gODM3LCAxDQotWyAgXSBTIC0gODM4LCAyDQotW3ZvaWNlLWZhbWlseV0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA4NDAsIDEyDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDg1MiwgMQ0KLVsgXSBTIC0gODUzLCAxDQotWyJWaXZpZW4gTGVpZ2giXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSA4NTQsIDE0DQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gODY4LCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSA4NjksIDENCi1bdmljdG9yaWFdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gODcwLCA4DQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gODc4LCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSA4NzksIDENCi1bZmVtYWxlXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDg4MCwgNg0KLVsgIF0gUyAtIDg4NiwgMg0KLVt9XSBSQlJBQ0UgLSA4ODgsIDENCi1bDQotXSBTIC0gODg5LCAyDQotWypdIFNFTEVDVE9SX1VOSVZFUlNBTCAtIDg5MSwgMQ0KLVsucGFzdG9yYWxdIFNFTEVDVE9SX0NMQVNTIC0gODkyLCA5DQotWyBdIFMgLSA5MDEsIDENCi1be10gTEJSQUNFIC0gOTAyLCAxDQotWyAgXSBTIC0gOTAzLCAyDQotW2NvbG9yXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDkwNSwgNQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA5MTAsIDENCi1bIF0gUyAtIDkxMSwgMQ0KLVtncmVlbl0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSA5MTIsIDUNCi1bICBdIFMgLSA5MTcsIDINCi1bfV0gUkJSQUNFIC0gOTE5LCAxDQotWw0KLV0gUyAtIDkyMCwgMg0KLVsucGFzdG9yYWxdIFNFTEVDVE9SX0NMQVNTIC0gOTIyLCA5DQotWyBdIFMgLSA5MzEsIDENCi1be10gTEJSQUNFIC0gOTMyLCAxDQotWyAgXSBTIC0gOTMzLCAyDQotW2NvbG9yXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDkzNSwgNQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA5NDAsIDENCi1bIF0gUyAtIDk0MSwgMQ0KLVtncmVlbl0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSA5NDIsIDUNCi1bICBdIFMgLSA5NDcsIDINCi1bfV0gUkJSQUNFIC0gOTQ5LCAxDQotWw0KLV0gUyAtIDk1MCwgMg0KLVtIMV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gOTUyLCAyDQotWy5wYXN0b3JhbF0gU0VMRUNUT1JfQ0xBU1MgLSA5NTQsIDkNCi1bIF0gUyAtIDk2MywgMQ0KLVt7XSBMQlJBQ0UgLSA5NjQsIDENCi1bICBdIFMgLSA5NjUsIDINCi1bY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gOTY3LCA1DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDk3MiwgMQ0KLVsgXSBTIC0gOTczLCAxDQotW2dyZWVuXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDk3NCwgNQ0KLVsgIF0gUyAtIDk3OSwgMg0KLVt9XSBSQlJBQ0UgLSA5ODEsIDENCi1bDQotXSBTIC0gOTgyLCAyDQotW3BdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDk4NCwgMQ0KLVsucGFzdG9yYWxdIFNFTEVDVE9SX0NMQVNTIC0gOTg1LCA5DQotWy5tYXJpbmVdIFNFTEVDVE9SX0NMQVNTIC0gOTk0LCA3DQotWyBdIFMgLSAxMDAxLCAxDQotW3tdIExCUkFDRSAtIDEwMDIsIDENCi1bICBdIFMgLSAxMDAzLCAyDQotW2NvbG9yXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDEwMDUsIDUNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTAxMCwgMQ0KLVsgXSBTIC0gMTAxMSwgMQ0KLVtncmVlbl0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAxMDEyLCA1DQotWyAgXSBTIC0gMTAxNywgMg0KLVt9XSBSQlJBQ0UgLSAxMDE5LCAxDQotWw0KLV0gUyAtIDEwMjAsIDINCi1baDFdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDEwMjIsIDINCi1bI2NoYXB0ZXIxXSBTRUxFQ1RPUl9JRCAtIDEwMjQsIDkNCi1bIF0gUyAtIDEwMzMsIDENCi1be10gTEJSQUNFIC0gMTAzNCwgMQ0KLVsgIF0gUyAtIDEwMzUsIDINCi1bdGV4dC1hbGlnbl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxMDM3LCAxMA0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxMDQ3LCAxDQotWyBdIFMgLSAxMDQ4LCAxDQotW2NlbnRlcl0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAxMDQ5LCA2DQotWyAgXSBTIC0gMTA1NSwgMg0KLVt9XSBSQlJBQ0UgLSAxMDU3LCAxDQotWw0KLV0gUyAtIDEwNTgsIDINCi1bZGl2XSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxMDYwLCAzDQotWyBdIFMgLSAxMDYzLCAxDQotWz5dIFNFTEVDVE9SX0NPTUJJTkFUT1IgLSAxMDY0LCAxDQotWyBdIFMgLSAxMDY1LCAxDQotW3BdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDEwNjYsIDENCi1bOmZpcnN0LWNoaWxkXSBTRUxFQ1RPUl9QU0VVRE8gLSAxMDY3LCAxMg0KLVsgXSBTIC0gMTA3OSwgMQ0KLVt7XSBMQlJBQ0UgLSAxMDgwLCAxDQotWyAgXSBTIC0gMTA4MSwgMg0KLVt0ZXh0LWluZGVudF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxMDgzLCAxMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxMDk0LCAxDQotWyBdIFMgLSAxMDk1LCAxDQotWzBdIERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUiAtIDEwOTYsIDENCi1bICBdIFMgLSAxMDk3LCAyDQotW31dIFJCUkFDRSAtIDEwOTksIDENCi1bDQotXSBTIC0gMTEwMCwgMg0KLVtwXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxMTAyLCAxDQotWzpmaXJzdC1jaGlsZF0gU0VMRUNUT1JfUFNFVURPIC0gMTEwMywgMTINCi1bIF0gU0VMRUNUT1JfQ09NQklOQVRPUiAtIDExMTUsIDENCi1bZW1dIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDExMTYsIDINCi1bIF0gUyAtIDExMTgsIDENCi1be10gTEJSQUNFIC0gMTExOSwgMQ0KLVsgIF0gUyAtIDExMjAsIDINCi1bZm9udC13ZWlnaHRdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTEyMiwgMTENCi1bIF0gUyAtIDExMzMsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTEzNCwgMQ0KLVsgXSBTIC0gMTEzNSwgMQ0KLVtib2xkXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDExMzYsIDQNCi1bICBdIFMgLSAxMTQwLCAyDQotW31dIFJCUkFDRSAtIDExNDIsIDENCi1bDQotXSBTIC0gMTE0MywgMg0KLVsqXSBTRUxFQ1RPUl9VTklWRVJTQUwgLSAxMTQ1LCAxDQotWyBdIFMgLSAxMTQ2LCAxDQotWz5dIFNFTEVDVE9SX0NPTUJJTkFUT1IgLSAxMTQ3LCAxDQotWyBdIFMgLSAxMTQ4LCAxDQotW2FdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDExNDksIDENCi1bOmZpcnN0LWNoaWxkXSBTRUxFQ1RPUl9QU0VVRE8gLSAxMTUwLCAxMg0KLVsgXSBTIC0gMTE2MiwgMQ0KLVt7XSBMQlJBQ0UgLSAxMTYzLCAxDQotWyAgXSBTIC0gMTE2NCwgMg0KLVtmb250LXdlaWdodF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxMTY2LCAxMQ0KLVsgXSBTIC0gMTE3NywgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxMTc4LCAxDQotWyBdIFMgLSAxMTc5LCAxDQotW2JvbGRdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMTE4MCwgNA0KLVsgIF0gUyAtIDExODQsIDINCi1bfV0gUkJSQUNFIC0gMTE4NiwgMQ0KLVsNCi1dIFMgLSAxMTg3LCAyDQotW2FdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDExODksIDENCi1bOmZpcnN0LWNoaWxkXSBTRUxFQ1RPUl9QU0VVRE8gLSAxMTkwLCAxMg0KLVsgXSBTIC0gMTIwMiwgMQ0KLVt7XSBMQlJBQ0UgLSAxMjAzLCAxDQotWyAgXSBTIC0gMTIwNCwgMg0KLVtmb250LXdlaWdodF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxMjA2LCAxMQ0KLVsgXSBTIC0gMTIxNywgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxMjE4LCAxDQotWyBdIFMgLSAxMjE5LCAxDQotW2JvbGRdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMTIyMCwgNA0KLVsgIF0gUyAtIDEyMjQsIDINCi1bfV0gUkJSQUNFIC0gMTIyNiwgMQ0KLVsNCi1dIFMgLSAxMjI3LCAyDQotW2FdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDEyMjksIDENCi1bLmV4dGVybmFsXSBTRUxFQ1RPUl9DTEFTUyAtIDEyMzAsIDkNCi1bOnZpc2l0ZWRdIFNFTEVDVE9SX1BTRVVETyAtIDEyMzksIDgNCi1bIF0gUyAtIDEyNDcsIDENCi1be10gTEJSQUNFIC0gMTI0OCwgMQ0KLVsgIF0gUyAtIDEyNDksIDINCi1bY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTI1MSwgNQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxMjU2LCAxDQotWyBdIFMgLSAxMjU3LCAxDQotW2JsdWVdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMTI1OCwgNA0KLVsgIF0gUyAtIDEyNjIsIDINCi1bfV0gUkJSQUNFIC0gMTI2NCwgMQ0KLVsNCi1dIFMgLSAxMjY1LCAyDQotW2FdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDEyNjcsIDENCi1bOmZvY3VzXSBTRUxFQ1RPUl9QU0VVRE8gLSAxMjY4LCA2DQotWzpob3Zlcl0gU0VMRUNUT1JfUFNFVURPIC0gMTI3NCwgNg0KLVsgXSBTIC0gMTI4MCwgMQ0KLVt7XSBMQlJBQ0UgLSAxMjgxLCAxDQotWyAgXSBTIC0gMTI4MiwgMg0KLVtiYWNrZ3JvdW5kXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDEyODQsIDEwDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDEyOTQsIDENCi1bIF0gUyAtIDEyOTUsIDENCi1bd2hpdGVdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMTI5NiwgNQ0KLVsgIF0gUyAtIDEzMDEsIDINCi1bfV0gUkJSQUNFIC0gMTMwMywgMQ0KLVsNCi1dIFMgLSAxMzA0LCAyDQotW2h0bWxdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDEzMDYsIDQNCi1bOmxhbmcoZnIpXSBTRUxFQ1RPUl9QU0VVRE8gLSAxMzEwLCA5DQotWyBdIFMgLSAxMzE5LCAxDQotW3tdIExCUkFDRSAtIDEzMjAsIDENCi1bICBdIFMgLSAxMzIxLCAyDQotW3F1b3Rlc10gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxMzIzLCA2DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDEzMjksIDENCi1bIF0gUyAtIDEzMzAsIDENCi1bJzw8J10gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gMTMzMSwgNA0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTMzNSwgMQ0KLVsnPj4nXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAxMzM2LCA0DQotWyAgXSBTIC0gMTM0MCwgMg0KLVt9XSBSQlJBQ0UgLSAxMzQyLCAxDQotWw0KLV0gUyAtIDEzNDMsIDINCi1baHRtbF0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTM0NSwgNA0KLVs6bGFuZyhkZSldIFNFTEVDVE9SX1BTRVVETyAtIDEzNDksIDkNCi1bIF0gUyAtIDEzNTgsIDENCi1be10gTEJSQUNFIC0gMTM1OSwgMQ0KLVsgIF0gUyAtIDEzNjAsIDINCi1bcXVvdGVzXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDEzNjIsIDYNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTM2OCwgMQ0KLVsgXSBTIC0gMTM2OSwgMQ0KLVsnPj4nXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAxMzcwLCA0DQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxMzc0LCAxDQotWyc8PCddIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDEzNzUsIDQNCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDEzNzksIDENCi1bJ1wyMDM5J10gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gMTM4MCwgNw0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTM4NywgMQ0KLVsnXDIwM0EnXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAxMzg4LCA3DQotWyAgXSBTIC0gMTM5NSwgMg0KLVt9XSBSQlJBQ0UgLSAxMzk3LCAxDQotWw0KLV0gUyAtIDEzOTgsIDINCi1bOmxhbmcoZnIpXSBTRUxFQ1RPUl9QU0VVRE8gLSAxNDAwLCA5DQotWyBdIFMgLSAxNDA5LCAxDQotWz5dIFNFTEVDVE9SX0NPTUJJTkFUT1IgLSAxNDEwLCAxDQotWyBdIFMgLSAxNDExLCAxDQotW1FdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDE0MTIsIDENCi1bIF0gUyAtIDE0MTMsIDENCi1be10gTEJSQUNFIC0gMTQxNCwgMQ0KLVsgIF0gUyAtIDE0MTUsIDINCi1bcXVvdGVzXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDE0MTcsIDYNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTQyMywgMQ0KLVsgXSBTIC0gMTQyNCwgMQ0KLVsnPDwnXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAxNDI1LCA0DQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxNDI5LCAxDQotWyc+PiddIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDE0MzAsIDQNCi1bICBdIFMgLSAxNDM0LCAyDQotW31dIFJCUkFDRSAtIDE0MzYsIDENCi1bDQotXSBTIC0gMTQzNywgMg0KLVs6bGFuZyhkZSldIFNFTEVDVE9SX1BTRVVETyAtIDE0MzksIDkNCi1bIF0gUyAtIDE0NDgsIDENCi1bPl0gU0VMRUNUT1JfQ09NQklOQVRPUiAtIDE0NDksIDENCi1bIF0gUyAtIDE0NTAsIDENCi1bUV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTQ1MSwgMQ0KLVsgXSBTIC0gMTQ1MiwgMQ0KLVt7XSBMQlJBQ0UgLSAxNDUzLCAxDQotWyAgXSBTIC0gMTQ1NCwgMg0KLVtxdW90ZXNdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTQ1NiwgNg0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxNDYyLCAxDQotWyBdIFMgLSAxNDYzLCAxDQotWyc+PiddIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDE0NjQsIDQNCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDE0NjgsIDENCi1bJzw8J10gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gMTQ2OSwgNA0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTQ3MywgMQ0KLVsnXDIwMzknXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAxNDc0LCA3DQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxNDgxLCAxDQotWydcMjAzQSddIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDE0ODIsIDcNCi1bICBdIFMgLSAxNDg5LCAyDQotW31dIFJCUkFDRSAtIDE0OTEsIDENCi1bDQotXSBTIC0gMTQ5MiwgMg0KLVtwXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxNDk0LCAxDQotWzpmaXJzdC1sZXR0ZXJdIFNFTEVDVE9SX1BTRVVETyAtIDE0OTUsIDEzDQotWyBdIFMgLSAxNTA4LCAxDQotW3tdIExCUkFDRSAtIDE1MDksIDENCi1bICBdIFMgLSAxNTEwLCAyDQotW2ZvbnQtc2l6ZV0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxNTEyLCA5DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDE1MjEsIDENCi1bIF0gUyAtIDE1MjIsIDENCi1bM2VtXSBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT04gLSAxNTIzLCAzDQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDE1MjYsIDENCi1bIF0gUyAtIDE1MjcsIDENCi1bZm9udC13ZWlnaHRdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTUyOCwgMTENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTUzOSwgMQ0KLVsgXSBTIC0gMTU0MCwgMQ0KLVtub3JtYWxdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMTU0MSwgNg0KLVsgIF0gUyAtIDE1NDcsIDINCi1bfV0gUkJSQUNFIC0gMTU0OSwgMQ0KLVsNCi1dIFMgLSAxNTUwLCAyDQotW3BdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDE1NTIsIDENCi1bLnNwZWNpYWxdIFNFTEVDVE9SX0NMQVNTIC0gMTU1MywgOA0KLVs6YmVmb3JlXSBTRUxFQ1RPUl9QU0VVRE8gLSAxNTYxLCA3DQotWyBdIFMgLSAxNTY4LCAxDQotW3tdIExCUkFDRSAtIDE1NjksIDENCi1bIF0gUyAtIDE1NzAsIDENCi1bY29udGVudF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxNTcxLCA3DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDE1NzgsIDENCi1bIF0gUyAtIDE1NzksIDENCi1bIlNwZWNpYWwhICJdIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDE1ODAsIDExDQotWyBdIFMgLSAxNTkxLCAxDQotW31dIFJCUkFDRSAtIDE1OTIsIDENCi1bDQotXSBTIC0gMTU5MywgMg0KLVtwXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxNTk1LCAxDQotWy5zcGVjaWFsXSBTRUxFQ1RPUl9DTEFTUyAtIDE1OTYsIDgNCi1bOmZpcnN0LWxldHRlcl0gU0VMRUNUT1JfUFNFVURPIC0gMTYwNCwgMTMNCi1bIF0gUyAtIDE2MTcsIDENCi1be10gTEJSQUNFIC0gMTYxOCwgMQ0KLVsgXSBTIC0gMTYxOSwgMQ0KLVtjb2xvcl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxNjIwLCA1DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDE2MjUsIDENCi1bIF0gUyAtIDE2MjYsIDENCi1bI2ZmZDgwMF0gREVDTEFSQVRJT05fVkFMVUVfSEFTSCAtIDE2MjcsIDcNCi1bIF0gUyAtIDE2MzQsIDENCi1bfV0gUkJSQUNFIC0gMTYzNSwgMQ0KLVsNCi1dIFMgLSAxNjM2LCAyDQotW0JPRFldIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDE2MzgsIDQNCi1bIF0gUyAtIDE2NDIsIDENCi1be10gTEJSQUNFIC0gMTY0MywgMQ0KLVsgXSBTIC0gMTY0NCwgMQ0KLVtmb250LWZhbWlseV0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxNjQ1LCAxMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxNjU2LCAxDQotWyBdIFMgLSAxNjU3LCAxDQotW0Jhc2tlcnZpbGxlXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDE2NTgsIDExDQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gMTY2OSwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTY3MCwgMQ0KLVsiSGVpc2kgTWluY2hvIFczIl0gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gMTY3MSwgMTcNCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSAxNjg4LCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxNjg5LCAxDQotW1N5bWJvbF0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAxNjkwLCA2DQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gMTY5NiwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTY5NywgMQ0KLVtzZXJpZl0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAxNjk4LCA1DQotWyBdIFMgLSAxNzAzLCAxDQotW31dIFJCUkFDRSAtIDE3MDQsIDENCi1bDQotXSBTIC0gMTcwNSwgMg0KLVsqXSBTRUxFQ1RPUl9VTklWRVJTQUwgLSAxNzA3LCAxDQotWzpsYW5nKGphLWpwKV0gU0VMRUNUT1JfUFNFVURPIC0gMTcwOCwgMTINCi1bIF0gUyAtIDE3MjAsIDENCi1be10gTEJSQUNFIC0gMTcyMSwgMQ0KLVsgXSBTIC0gMTcyMiwgMQ0KLVtmb250XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDE3MjMsIDQNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTcyNywgMQ0KLVsgXSBTIC0gMTcyOCwgMQ0KLVs5MDBdIERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUiAtIDE3MjksIDMNCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDE3MzIsIDENCi1bMTRwdF0gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gMTczMywgNA0KLVsvXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDE3MzcsIDENCi1bMTZwdF0gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gMTczOCwgNA0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTc0MiwgMQ0KLVsiSGVpc2VpIE1pbmNobyBXOSJdIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDE3NDMsIDE4DQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gMTc2MSwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTc2MiwgMQ0KLVtzZXJpZl0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAxNzYzLCA1DQotWyBdIFMgLSAxNzY4LCAxDQotW31dIFJCUkFDRSAtIDE3NjksIDENCi1bDQotXSBTIC0gMTc3MCwgMg0KLVsqXSBTRUxFQ1RPUl9VTklWRVJTQUwgLSAxNzcyLCAxDQotWzpsYW5nKHpoLXR3KV0gU0VMRUNUT1JfUFNFVURPIC0gMTc3MywgMTINCi1bIF0gUyAtIDE3ODUsIDENCi1be10gTEJSQUNFIC0gMTc4NiwgMQ0KLVsgXSBTIC0gMTc4NywgMQ0KLVtmb250XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDE3ODgsIDQNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTc5MiwgMQ0KLVsgXSBTIC0gMTc5MywgMQ0KLVs4MDBdIERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUiAtIDE3OTQsIDMNCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDE3OTcsIDENCi1bMTRwdF0gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gMTc5OCwgNA0KLVsvXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDE4MDIsIDENCi1bMTYuNXB0XSBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT04gLSAxODAzLCA2DQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxODA5LCAxDQotWyJMaSBTdW5nIl0gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gMTgxMCwgOQ0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDE4MTksIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDE4MjAsIDENCi1bc2VyaWZdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMTgyMSwgNQ0KLVsgXSBTIC0gMTgyNiwgMQ0KLVt9XSBSQlJBQ0UgLSAxODI3LCAxDQotWw0KLV0gUyAtIDE4MjgsIDINCi0NCi0tLS0tLS0tDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTVGV4dFBhcnNlclRlc3Qtc2FtcGxlMDYuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTVGV4dFBhcnNlclRlc3Qtc2FtcGxlMDYuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjIxN2MwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1RleHRQYXJzZXJUZXN0LXNhbXBsZTA2LmNzcworKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi1bZGVjbGFyYXRpb25dIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDAsIDExDQotWyBdIFMgLSAxMSwgMQ0KLVt7XSBMQlJBQ0UgLSAxMiwgMQ0KLVsNCi0JXSBTIC0gMTMsIDMNCi1bZGltZW5zaW9uXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDE2LCA5DQotWyBdIFMgLSAyNSwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAyNiwgMQ0KLVsgXSBTIC0gMjcsIDENCi1bMTAwZXhdIERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTiAtIDI4LCA1DQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDMzLCAxDQotWw0KLQldIFMgLSAzNCwgMw0KLVtmdW5jdGlvbl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAzNywgOA0KLVsgXSBTIC0gNDUsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gNDYsIDENCi1bIF0gUyAtIDQ3LCAxDQotW3JlY3QoXSBERUNMQVJBVElPTl9WQUxVRV9GVU5DVElPTiAtIDQ4LCA1DQotWzEwMF0gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSIC0gNTMsIDMNCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSA1NiwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gNTcsIDENCi1bMjAwXSBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVIgLSA1OCwgMw0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDYxLCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSA2MiwgMQ0KLVszMDBdIERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUiAtIDYzLCAzDQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gNjYsIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDY3LCAxDQotWzQwMF0gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSIC0gNjgsIDMNCi1bKV0gREVDTEFSQVRJT05fVkFMVUVfUEFSRU5USEVTSVNfQ0xPU0UgLSA3MSwgMQ0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDcyLCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSA3MywgMQ0KLVtmb3JtYXQoXSBERUNMQVJBVElPTl9WQUxVRV9GVU5DVElPTiAtIDc0LCA3DQotWyJpbnRlbGxpZm9udCJdIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDgxLCAxMw0KLVspXSBERUNMQVJBVElPTl9WQUxVRV9QQVJFTlRIRVNJU19DTE9TRSAtIDk0LCAxDQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gOTUsIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDk2LCAxDQotW2xvY2FsKF0gREVDTEFSQVRJT05fVkFMVUVfRlVOQ1RJT04gLSA5NywgNg0KLVsiRXhjZWxzaW9yIEN5cmlsbGxpYyBVcHJpZ2h0Il0gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gMTAzLCAyOQ0KLVspXSBERUNMQVJBVElPTl9WQUxVRV9QQVJFTlRIRVNJU19DTE9TRSAtIDEzMiwgMQ0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSAxMzMsIDENCi1bDQotCV0gUyAtIDEzNCwgMw0KLVtoYXNoXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDEzNywgNA0KLVsgXSBTIC0gMTQxLCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDE0MiwgMQ0KLVsgXSBTIC0gMTQzLCAxDQotWyNhYWJiY2NdIERFQ0xBUkFUSU9OX1ZBTFVFX0hBU0ggLSAxNDQsIDcNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gMTUxLCAxDQotWw0KLQldIFMgLSAxNTIsIDMNCi1baWRlbnRdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTU1LCA1DQotWyBdIFMgLSAxNjAsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTYxLCAxDQotWyBdIFMgLSAxNjIsIDENCi1bYW55XSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDE2MywgMw0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSAxNjYsIDENCi1bDQotCV0gUyAtIDE2NywgMw0KLVtudW1iZXJdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTcwLCA2DQotWyBdIFMgLSAxNzYsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTc3LCAxDQotWyBdIFMgLSAxNzgsIDENCi1bOTk5OTldIERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUiAtIDE3OSwgNQ0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSAxODQsIDENCi1bDQotCV0gUyAtIDE4NSwgMw0KLVtwZXJjZW50YWdlXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDE4OCwgMTANCi1bIF0gUyAtIDE5OCwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxOTksIDENCi1bIF0gUyAtIDIwMCwgMQ0KLVsxMDAlXSBERUNMQVJBVElPTl9WQUxVRV9QRVJDRU5UQUdFIC0gMjAxLCA0DQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDIwNSwgMQ0KLVsNCi0JXSBTIC0gMjA2LCAzDQotW3N0cmluZ10gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAyMDksIDYNCi1bIF0gUyAtIDIxNSwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAyMTYsIDENCi1bIF0gUyAtIDIxNywgMQ0KLVsic3RyaW5nIl0gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gMjE4LCA4DQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDIyNiwgMQ0KLVsNCi0JXSBTIC0gMjI3LCAzDQotW3VuaWNvZGUtcmFuZ2VdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMjMwLCAxMw0KLVsgXSBTIC0gMjQzLCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDI0NCwgMQ0KLVsgXSBTIC0gMjQ1LCAxDQotW1UrPz9dIERFQ0xBUkFUSU9OX1ZBTFVFX1VOSUNPREVfUkFOR0UgLSAyNDYsIDQNCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSAyNTAsIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDI1MSwgMQ0KLVtVKzEwMC0yMjBdIERFQ0xBUkFUSU9OX1ZBTFVFX1VOSUNPREVfUkFOR0UgLSAyNTIsIDkNCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSAyNjEsIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDI2MiwgMQ0KLVtVKzQ/P10gREVDTEFSQVRJT05fVkFMVUVfVU5JQ09ERV9SQU5HRSAtIDI2MywgNQ0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSAyNjgsIDENCi1bDQotXSBTIC0gMjY5LCAyDQotW31dIFJCUkFDRSAtIDI3MSwgMQ0KLVsNCi1dIFMgLSAyNzIsIDINCi0NCi0tLS0tLS0tDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTVGV4dFBhcnNlclRlc3Qtc2FtcGxlMDcuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTVGV4dFBhcnNlclRlc3Qtc2FtcGxlMDcuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZmVkNWIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1RleHRQYXJzZXJUZXN0LXNhbXBsZTA3LmNzcworKysgL2Rldi9udWxsCkBAIC0xLDU4MyArMCwwIEBACi1bQGNoYXJzZXRdIENIQVJTRVQgLSAwLCA4DQotWyBdIFMgLSA4LCAxDQotWyJJU08tODg1OS0xIl0gU1RSSU5HIC0gOSwgMTINCi1bO10gREVMSU1JVEVSIC0gMjEsIDENCi1bDQotDQotXSBTIC0gMjIsIDQNCi1bQGltcG9ydF0gSU1QT1JUIC0gMjYsIDcNCi1bIF0gUyAtIDMzLCAxDQotW3VybCgiLi4vc2FtcGxlMi5jc3MiKV0gVVJJIC0gMzQsIDIxDQotWyBdIFMgLSA1NSwgMQ0KLVtwcm9qZWN0aW9uXSBNRURJVU0gLSA1NiwgMTANCi1bLF0gTUVESUFfU0VQQVJBVE9SIC0gNjYsIDENCi1bIF0gUyAtIDY3LCAxDQotW3R2XSBNRURJVU0gLSA2OCwgMg0KLVs7XSBERUxJTUlURVIgLSA3MCwgMQ0KLVsNCi0NCi1dIFMgLSA3MSwgNA0KLVtCT0RZXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSA3NSwgNA0KLVsgXSBTIC0gNzksIDENCi1be10gTEJSQUNFIC0gODAsIDENCi1bDQotICAgIF0gUyAtIDgxLCA2DQotW2NvbG9yXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDg3LCA1DQotWyBdIFMgLSA5MiwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA5MywgMQ0KLVsgXSBTIC0gOTQsIDENCi1bYmxhY2tdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gOTUsIDUNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gMTAwLCAxDQotWw0KLSAgICBdIFMgLSAxMDEsIDYNCi1bdGV4dC1hbGlnbl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxMDcsIDEwDQotWyBdIFMgLSAxMTcsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTE4LCAxDQotWyBdIFMgLSAxMTksIDENCi1bY2VudGVyXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDEyMCwgNg0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSAxMjYsIDENCi1bDQotICAgIF0gUyAtIDEyNywgNg0KLVtiYWNrZ3JvdW5kLWNvbG9yXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDEzMywgMTYNCi1bIF0gUyAtIDE0OSwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxNTAsIDENCi1bIF0gUyAtIDE1MSwgMQ0KLVtyZ2IoXSBERUNMQVJBVElPTl9WQUxVRV9GVU5DVElPTiAtIDE1MiwgNA0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTU2LCAxDQotWzE4MV0gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSIC0gMTU3LCAzDQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gMTYwLCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxNjEsIDENCi1bMjUzXSBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVIgLSAxNjIsIDMNCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSAxNjUsIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDE2NiwgMQ0KLVsyMTFdIERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUiAtIDE2NywgMw0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTcwLCAxDQotWyldIERFQ0xBUkFUSU9OX1ZBTFVFX1BBUkVOVEhFU0lTX0NMT1NFIC0gMTcxLCAxDQotWw0KLV0gUyAtIDE3MiwgMg0KLVt9XSBSQlJBQ0UgLSAxNzQsIDENCi1bDQotDQotXSBTIC0gMTc1LCA0DQotW1VMXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxNzksIDINCi1bIF0gUyAtIDE4MSwgMQ0KLVt7XSBMQlJBQ0UgLSAxODIsIDENCi1bDQotICAgIF0gUyAtIDE4MywgNg0KLVtjb2xvcl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxODksIDUNCi1bIF0gUyAtIDE5NCwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxOTUsIDENCi1bIF0gUyAtIDE5NiwgMQ0KLVtibGFja10gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAxOTcsIDUNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gMjAyLCAxDQotWw0KLSAgICBdIFMgLSAyMDMsIDYNCi1bbGlzdC1zdHlsZS1pbWFnZV0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAyMDksIDE2DQotWyBdIFMgLSAyMjUsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMjI2LCAxDQotWyBdIFMgLSAyMjcsIDENCi1bdXJsKCJpbWFnZXMvbF9hMDEuZ2lmIildIERFQ0xBUkFUSU9OX1ZBTFVFX1VSSSAtIDIyOCwgMjMNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gMjUxLCAxDQotWw0KLSAgICBdIFMgLSAyNTIsIDYNCi1bbGlzdC1zdHlsZS1wb3NpdGlvbl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAyNTgsIDE5DQotWyBdIFMgLSAyNzcsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMjc4LCAxDQotWyBdIFMgLSAyNzksIDENCi1bb3V0c2lkZV0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAyODAsIDcNCi1bDQotXSBTIC0gMjg3LCAyDQotW31dIFJCUkFDRSAtIDI4OSwgMQ0KLVsNCi0NCi1dIFMgLSAyOTAsIDQNCi1bSDFdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDI5NCwgMg0KLVsgXSBTIC0gMjk2LCAxDQotW3tdIExCUkFDRSAtIDI5NywgMQ0KLVsNCi0gICAgXSBTIC0gMjk4LCA2DQotW2NvbG9yXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDMwNCwgNQ0KLVsgXSBTIC0gMzA5LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDMxMCwgMQ0KLVsgXSBTIC0gMzExLCAxDQotW3doaXRlXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDMxMiwgNQ0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSAzMTcsIDENCi1bDQotICAgIF0gUyAtIDMxOCwgNg0KLVt0ZXh0LWFsaWduXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDMyNCwgMTANCi1bIF0gUyAtIDMzNCwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAzMzUsIDENCi1bIF0gUyAtIDMzNiwgMQ0KLVtjZW50ZXJdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMzM3LCA2DQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDM0MywgMQ0KLVsNCi0gICAgXSBTIC0gMzQ0LCA2DQotW2JvcmRlci1sZWZ0LWNvbG9yXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDM1MCwgMTcNCi1bIF0gUyAtIDM2NywgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAzNjgsIDENCi1bIF0gUyAtIDM2OSwgMQ0KLVsjOTk2NjY2XSBERUNMQVJBVElPTl9WQUxVRV9IQVNIIC0gMzcwLCA3DQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDM3NywgMQ0KLVsNCi0gICAgXSBTIC0gMzc4LCA2DQotW3BhZGRpbmctdG9wXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDM4NCwgMTENCi1bIF0gUyAtIDM5NSwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAzOTYsIDENCi1bIF0gUyAtIDM5NywgMQ0KLVswcHhdIERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTiAtIDM5OCwgMw0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSA0MDEsIDENCi1bDQotICAgIF0gUyAtIDQwMiwgNg0KLVtwYWRkaW5nLXJpZ2h0XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDQwOCwgMTMNCi1bIF0gUyAtIDQyMSwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA0MjIsIDENCi1bIF0gUyAtIDQyMywgMQ0KLVsxY21dIERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTiAtIDQyNCwgMw0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSA0MjcsIDENCi1bDQotICAgIF0gUyAtIDQyOCwgNg0KLVtwYWRkaW5nLWJvdHRvbV0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA0MzQsIDE0DQotWyBdIFMgLSA0NDgsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gNDQ5LCAxDQotWyBdIFMgLSA0NTAsIDENCi1bMl0gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSIC0gNDUxLCAxDQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDQ1MiwgMQ0KLVsNCi0gICAgXSBTIC0gNDUzLCA2DQotW3BhZGRpbmctbGVmdF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA0NTksIDEyDQotWyBdIFMgLSA0NzEsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gNDcyLCAxDQotWyBdIFMgLSA0NzMsIDENCi1bM2VtXSBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT04gLSA0NzQsIDMNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gNDc3LCAxDQotWw0KLSAgICBdIFMgLSA0NzgsIDYNCi1bYm9yZGVyLXN0eWxlXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDQ4NCwgMTINCi1bIF0gUyAtIDQ5NiwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA0OTcsIDENCi1bIF0gUyAtIDQ5OCwgMQ0KLVtzb2xpZF0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSA0OTksIDUNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gNTA0LCAxDQotWw0KLSAgICBdIFMgLSA1MDUsIDYNCi1bYm9yZGVyLXRvcC13aWR0aF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA1MTEsIDE2DQotWyBdIFMgLSA1MjcsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gNTI4LCAxDQotWyBdIFMgLSA1MjksIDENCi1bNC41ZXhdIERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTiAtIDUzMCwgNQ0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSA1MzUsIDENCi1bDQotICAgIF0gUyAtIDUzNiwgNg0KLVtib3JkZXItcmlnaHQtd2lkdGhdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gNTQyLCAxOA0KLVsgXSBTIC0gNTYwLCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDU2MSwgMQ0KLVsgXSBTIC0gNTYyLCAxDQotWzVpbl0gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gNTYzLCAzDQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDU2NiwgMQ0KLVsNCi0gICAgXSBTIC0gNTY3LCA2DQotW2JvcmRlci1ib3R0b20td2lkdGhdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gNTczLCAxOQ0KLVsgXSBTIC0gNTkyLCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDU5MywgMQ0KLVsgXSBTIC0gNTk0LCAxDQotWzYuMDJtbV0gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gNTk1LCA2DQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDYwMSwgMQ0KLVsNCi0gICAgXSBTIC0gNjAyLCA2DQotW2JvcmRlci1sZWZ0LXdpZHRoXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDYwOCwgMTcNCi1bIF0gUyAtIDYyNSwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA2MjYsIDENCi1bIF0gUyAtIDYyNywgMQ0KLVs3XSBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVIgLSA2MjgsIDENCi1bDQotXSBTIC0gNjI5LCAyDQotW31dIFJCUkFDRSAtIDYzMSwgMQ0KLVsNCi0NCi1dIFMgLSA2MzIsIDQNCi1bSDFdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDYzNiwgMg0KLVs6YmVmb3JlXSBTRUxFQ1RPUl9QU0VVRE8gLSA2MzgsIDcNCi1bIF0gUyAtIDY0NSwgMQ0KLVt7XSBMQlJBQ0UgLSA2NDYsIDENCi1bDQotICAgIF0gUyAtIDY0NywgNg0KLVtjb250ZW50XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDY1MywgNw0KLVsgXSBTIC0gNjYwLCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDY2MSwgMQ0KLVsgXSBTIC0gNjYyLCAxDQotWyJDaGFwdGVyICJdIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDY2MywgMTANCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDY3MywgMQ0KLVtjb3VudGVyKF0gREVDTEFSQVRJT05fVkFMVUVfRlVOQ1RJT04gLSA2NzQsIDgNCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDY4MiwgMQ0KLVtjaGFwdGVyXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDY4MywgNw0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gNjkwLCAxDQotWyldIERFQ0xBUkFUSU9OX1ZBTFVFX1BBUkVOVEhFU0lTX0NMT1NFIC0gNjkxLCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSA2OTIsIDENCi1bIi4gIl0gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gNjkzLCA0DQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDY5NywgMQ0KLVsNCi0gICAgXSBTIC0gNjk4LCA2DQotW2NvdW50ZXItaW5jcmVtZW50XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDcwNCwgMTcNCi1bIF0gUyAtIDcyMSwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA3MjIsIDENCi1bIF0gUyAtIDcyMywgMQ0KLVtjaGFwdGVyXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDcyNCwgNw0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSA3MzEsIDENCi1bDQotICAgIF0gUyAtIDczMiwgNg0KLVtjb3VudGVyLXJlc2V0XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDczOCwgMTMNCi1bIF0gUyAtIDc1MSwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA3NTIsIDENCi1bIF0gUyAtIDc1MywgMQ0KLVtzZWN0aW9uXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDc1NCwgNw0KLVsNCi1dIFMgLSA3NjEsIDINCi1bfV0gUkJSQUNFIC0gNzYzLCAxDQotWw0KLQ0KLV0gUyAtIDc2NCwgNA0KLVtJTUddIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDc2OCwgMw0KLVs6YmVmb3JlXSBTRUxFQ1RPUl9QU0VVRE8gLSA3NzEsIDcNCi1bIF0gUyAtIDc3OCwgMQ0KLVt7XSBMQlJBQ0UgLSA3NzksIDENCi1bY29udGVudF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA3ODAsIDcNCi1bIF0gUyAtIDc4NywgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA3ODgsIDENCi1bIF0gUyAtIDc4OSwgMQ0KLVthdHRyKF0gREVDTEFSQVRJT05fVkFMVUVfRlVOQ1RJT04gLSA3OTAsIDUNCi1bYWx0XSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDc5NSwgMw0KLVspXSBERUNMQVJBVElPTl9WQUxVRV9QQVJFTlRIRVNJU19DTE9TRSAtIDc5OCwgMQ0KLVt9XSBSQlJBQ0UgLSA3OTksIDENCi1bDQotDQotXSBTIC0gODAwLCA0DQotW0RJVl0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gODA0LCAzDQotWy5zYW1wbGVdIFNFTEVDVE9SX0NMQVNTIC0gODA3LCA3DQotWyBdIFMgLSA4MTQsIDENCi1be10gTEJSQUNFIC0gODE1LCAxDQotWw0KLSAgICBdIFMgLSA4MTYsIDYNCi1bZm9udC1mYW1pbHldIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gODIyLCAxMQ0KLVsgXSBTIC0gODMzLCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDgzNCwgMQ0KLVsgXSBTIC0gODM1LCAxDQotWyJSb2Jzb24gQ2VsdGljIl0gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gODM2LCAxNQ0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDg1MSwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gODUyLCAxDQotW3NhbnMtc2VyaWZdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gODUzLCAxMA0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSA4NjMsIDENCi1bDQotICAgIF0gUyAtIDg2NCwgNg0KLVtwb3NpdGlvbl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA4NzAsIDgNCi1bIF0gUyAtIDg3OCwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA4NzksIDENCi1bIF0gUyAtIDg4MCwgMQ0KLVthYnNvbHV0ZV0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSA4ODEsIDgNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gODg5LCAxDQotWw0KLSAgICBdIFMgLSA4OTAsIDYNCi1bbGVmdF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA4OTYsIDQNCi1bIF0gUyAtIDkwMCwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA5MDEsIDENCi1bIF0gUyAtIDkwMiwgMQ0KLVs4MzMuNXBjXSBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT04gLSA5MDMsIDcNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gOTEwLCAxDQotWw0KLSAgICBdIFMgLSA5MTEsIDYNCi1bdG9wXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDkxNywgMw0KLVsgXSBTIC0gOTIwLCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDkyMSwgMQ0KLVsgXSBTIC0gOTIyLCAxDQotWzkwJV0gREVDTEFSQVRJT05fVkFMVUVfUEVSQ0VOVEFHRSAtIDkyMywgMw0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSA5MjYsIDENCi1bDQotICAgIF0gUyAtIDkyNywgNg0KLVt3aWR0aF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA5MzMsIDUNCi1bIF0gUyAtIDkzOCwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA5MzksIDENCi1bIF0gUyAtIDk0MCwgMQ0KLVsxMDBwdF0gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gOTQxLCA1DQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDk0NiwgMQ0KLVsNCi0gICAgXSBTIC0gOTQ3LCA2DQotW2hlaWdodF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA5NTMsIDYNCi1bIF0gUyAtIDk1OSwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA5NjAsIDENCi1bIF0gUyAtIDk2MSwgMQ0KLVsxMTAuNzc3cHhdIERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTiAtIDk2MiwgOQ0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSA5NzEsIDENCi1bDQotICAgIF0gUyAtIDk3MiwgNg0KLVtjbGlwXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDk3OCwgNA0KLVsgXSBTIC0gOTgyLCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDk4MywgMQ0KLVsgXSBTIC0gOTg0LCAxDQotW3JlY3QoXSBERUNMQVJBVElPTl9WQUxVRV9GVU5DVElPTiAtIDk4NSwgNQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gOTkwLCAxDQotWy01cHhdIERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTiAtIDk5MSwgNA0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDk5NSwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gOTk2LCAxDQotWzgwcHhdIERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTiAtIDk5NywgNA0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDEwMDEsIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDEwMDIsIDENCi1bMTMwcHhdIERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTiAtIDEwMDMsIDUNCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSAxMDA4LCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxMDA5LCAxDQotWzBweF0gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gMTAxMCwgMw0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTAxMywgMQ0KLVspXSBERUNMQVJBVElPTl9WQUxVRV9QQVJFTlRIRVNJU19DTE9TRSAtIDEwMTQsIDENCi1bDQotXSBTIC0gMTAxNSwgMg0KLVt9XSBSQlJBQ0UgLSAxMDE3LCAxDQotWw0KLQ0KLV0gUyAtIDEwMTgsIDQNCi1bQGZvbnQtZmFjZV0gRk9OVF9GQUNFIC0gMTAyMiwgMTANCi1bIF0gUyAtIDEwMzIsIDENCi1be10gTEJSQUNFIC0gMTAzMywgMQ0KLVsNCi0gICAgXSBTIC0gMTAzNCwgNg0KLVtmb250LWZhbWlseV0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxMDQwLCAxMQ0KLVsgXSBTIC0gMTA1MSwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxMDUyLCAxDQotWyBdIFMgLSAxMDUzLCAxDQotWyJTd2lzcyA3MjEiXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAxMDU0LCAxMQ0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSAxMDY1LCAxDQotWw0KLSAgICBdIFMgLSAxMDY2LCA2DQotW3NyY10gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxMDcyLCAzDQotWyBdIFMgLSAxMDc1LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDEwNzYsIDENCi1bIF0gUyAtIDEwNzcsIDENCi1bdXJsKCJzd2lzczcyMXQucGZyIildIERFQ0xBUkFUSU9OX1ZBTFVFX1VSSSAtIDEwNzgsIDIwDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxMDk4LCAxDQotW2Zvcm1hdChdIERFQ0xBUkFUSU9OX1ZBTFVFX0ZVTkNUSU9OIC0gMTA5OSwgNw0KLVsiaW50ZWxsaWZvbnQiXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAxMTA2LCAxMw0KLVspXSBERUNMQVJBVElPTl9WQUxVRV9QQVJFTlRIRVNJU19DTE9TRSAtIDExMTksIDENCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSAxMTIwLCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxMTIxLCAxDQotW2xvY2FsKF0gREVDTEFSQVRJT05fVkFMVUVfRlVOQ1RJT04gLSAxMTIyLCA2DQotWyJFeGNlbHNpb3IgQ3lyaWxsbGljIFVwcmlnaHQiXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAxMTI4LCAyOQ0KLVspXSBERUNMQVJBVElPTl9WQUxVRV9QQVJFTlRIRVNJU19DTE9TRSAtIDExNTcsIDENCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gMTE1OCwgMQ0KLVsNCi0gICAgXSBTIC0gMTE1OSwgNg0KLVt1bmljb2RlLXJhbmdlXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDExNjUsIDEzDQotWyBdIFMgLSAxMTc4LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDExNzksIDENCi1bIF0gUyAtIDExODAsIDENCi1bVSs/P10gREVDTEFSQVRJT05fVkFMVUVfVU5JQ09ERV9SQU5HRSAtIDExODEsIDQNCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSAxMTg1LCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxMTg2LCAxDQotW1UrMTAwLTIyMF0gREVDTEFSQVRJT05fVkFMVUVfVU5JQ09ERV9SQU5HRSAtIDExODcsIDkNCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSAxMTk2LCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxMTk3LCAxDQotW1UrND8/XSBERUNMQVJBVElPTl9WQUxVRV9VTklDT0RFX1JBTkdFIC0gMTE5OCwgNQ0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSAxMjAzLCAxDQotWw0KLSAgICBdIFMgLSAxMjA0LCA2DQotW2ZvbnQtd2VpZ2h0XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDEyMTAsIDExDQotWyBdIFMgLSAxMjIxLCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDEyMjIsIDENCi1bIF0gUyAtIDEyMjMsIDENCi1bMTAwXSBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVIgLSAxMjI0LCAzDQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gMTIyNywgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTIyOCwgMQ0KLVsyMDBdIERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUiAtIDEyMjksIDMNCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSAxMjMyLCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxMjMzLCAxDQotWzMwMF0gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSIC0gMTIzNCwgMw0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDEyMzcsIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDEyMzgsIDENCi1bNDAwXSBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVIgLSAxMjM5LCAzDQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gMTI0MiwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTI0MywgMQ0KLVs1MDBdIERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUiAtIDEyNDQsIDMNCi1bDQotXSBTIC0gMTI0NywgMg0KLVt9XSBSQlJBQ0UgLSAxMjQ5LCAxDQotWw0KLQ0KLV0gUyAtIDEyNTAsIDQNCi1bQHBhZ2VdIFBBR0UgLSAxMjU0LCA1DQotWyBdIFMgLSAxMjU5LCAxDQotWzpsZWZ0XSBDU1NfUEFHRV9TRUxFQ1RPUiAtIDEyNjAsIDUNCi1bIF0gUyAtIDEyNjUsIDENCi1be10gTEJSQUNFIC0gMTI2NiwgMQ0KLVttYXJnaW4tbGVmdF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxMjY3LCAxMQ0KLVsgXSBTIC0gMTI3OCwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxMjc5LCAxDQotWyBdIFMgLSAxMjgwLCAxDQotWzRjbV0gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gMTI4MSwgMw0KLVt9XSBSQlJBQ0UgLSAxMjg0LCAxDQotWw0KLQ0KLV0gUyAtIDEyODUsIDQNCi1bQG1lZGlhXSBNRURJQSAtIDEyODksIDYNCi1bIF0gUyAtIDEyOTUsIDENCi1bYXVyYWxdIE1FRElVTSAtIDEyOTYsIDUNCi1bIF0gUyAtIDEzMDEsIDENCi1be10gTEJSQUNFIC0gMTMwMiwgMQ0KLVsNCi0gICAgXSBTIC0gMTMwMywgNg0KLVtIMV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTMwOSwgMg0KLVssXSBTRUxFQ1RPUl9TRVBBUkFUT1IgLSAxMzExLCAxDQotWyBdIFMgLSAxMzEyLCAxDQotW0gyXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxMzEzLCAyDQotWyxdIFNFTEVDVE9SX1NFUEFSQVRPUiAtIDEzMTUsIDENCi1bIF0gUyAtIDEzMTYsIDENCi1bSDNdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDEzMTcsIDINCi1bLF0gU0VMRUNUT1JfU0VQQVJBVE9SIC0gMTMxOSwgMQ0KLVsgXSBTIC0gMTMyMCwgMQ0KLVtINF0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTMyMSwgMg0KLVssXSBTRUxFQ1RPUl9TRVBBUkFUT1IgLSAxMzIzLCAxDQotWyBdIFMgLSAxMzI0LCAxDQotW0g1XSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxMzI1LCAyDQotWyxdIFNFTEVDVE9SX1NFUEFSQVRPUiAtIDEzMjcsIDENCi1bIF0gUyAtIDEzMjgsIDENCi1bSDZdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDEzMjksIDINCi1bIF0gUyAtIDEzMzEsIDENCi1be10gTEJSQUNFIC0gMTMzMiwgMQ0KLVsNCi0gICAgICAgIF0gUyAtIDEzMzMsIDEwDQotW3ZvaWNlLWZhbWlseV0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxMzQzLCAxMg0KLVsgXSBTIC0gMTM1NSwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxMzU2LCAxDQotWyBdIFMgLSAxMzU3LCAxDQotW3BhdWxdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMTM1OCwgNA0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDEzNjIsIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDEzNjMsIDENCi1bY2hpbGRdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMTM2NCwgNQ0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSAxMzY5LCAxDQotWw0KLSAgICAgICAgXSBTIC0gMTM3MCwgMTANCi1bc3RyZXNzXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDEzODAsIDYNCi1bIF0gUyAtIDEzODYsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTM4NywgMQ0KLVsgXSBTIC0gMTM4OCwgMQ0KLVsyMF0gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSIC0gMTM4OSwgMg0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSAxMzkxLCAxDQotWw0KLSAgICAgICAgXSBTIC0gMTM5MiwgMTANCi1bcmljaG5lc3NdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTQwMiwgOA0KLVsgXSBTIC0gMTQxMCwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxNDExLCAxDQotWyBdIFMgLSAxNDEyLCAxDQotWzkwXSBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVIgLSAxNDEzLCAyDQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDE0MTUsIDENCi1bDQotICAgICAgICBdIFMgLSAxNDE2LCAxMA0KLVtjdWUtYmVmb3JlXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDE0MjYsIDEwDQotWyBdIFMgLSAxNDM2LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDE0MzcsIDENCi1bIF0gUyAtIDE0MzgsIDENCi1bdXJsKCJwaW5nLmF1IildIERFQ0xBUkFUSU9OX1ZBTFVFX1VSSSAtIDE0MzksIDE0DQotWw0KLSAgICBdIFMgLSAxNDUzLCA2DQotW31dIFJCUkFDRSAtIDE0NTksIDENCi1bDQotICAgIF0gUyAtIDE0NjAsIDYNCi1bUF0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTQ2NiwgMQ0KLVsuaGVpZGldIFNFTEVDVE9SX0NMQVNTIC0gMTQ2NywgNg0KLVsgXSBTIC0gMTQ3MywgMQ0KLVt7XSBMQlJBQ0UgLSAxNDc0LCAxDQotWw0KLSAgICAgICAgXSBTIC0gMTQ3NSwgMTANCi1bYXppbXV0aF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxNDg1LCA3DQotWyBdIFMgLSAxNDkyLCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDE0OTMsIDENCi1bIF0gUyAtIDE0OTQsIDENCi1bY2VudGVyLWxlZnRdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMTQ5NSwgMTENCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gMTUwNiwgMQ0KLVsNCi0gICAgICAgIF0gUyAtIDE1MDcsIDEwDQotW2VsZXZhdGlvbl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxNTE3LCA5DQotWyBdIFMgLSAxNTI2LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDE1MjcsIDENCi1bIF0gUyAtIDE1MjgsIDENCi1bMTIuM2RlZ10gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gMTUyOSwgNw0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSAxNTM2LCAxDQotWw0KLSAgICAgICAgXSBTIC0gMTUzNywgMTANCi1bcGF1c2VdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTU0NywgNQ0KLVsgXSBTIC0gMTU1MiwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxNTUzLCAxDQotWyBdIFMgLSAxNTU0LCAxDQotWzMwbXNdIERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTiAtIDE1NTUsIDQNCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDE1NTksIDENCi1bMS42c10gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gMTU2MCwgNA0KLVsNCi0gICAgXSBTIC0gMTU2NCwgNg0KLVt9XSBSQlJBQ0UgLSAxNTcwLCAxDQotWw0KLSAgICBdIFMgLSAxNTcxLCA2DQotW1BdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDE1NzcsIDENCi1bLnBldGVyXSBTRUxFQ1RPUl9DTEFTUyAtIDE1NzgsIDYNCi1bIF0gUyAtIDE1ODQsIDENCi1be10gTEJSQUNFIC0gMTU4NSwgMQ0KLVsNCi0gICAgICAgIF0gUyAtIDE1ODYsIDEwDQotW2F6aW11dGhdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTU5NiwgNw0KLVsgXSBTIC0gMTYwMywgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxNjA0LCAxDQotWyBdIFMgLSAxNjA1LCAxDQotW3JpZ2h0XSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDE2MDYsIDUNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gMTYxMSwgMQ0KLVsNCi0gICAgICAgIF0gUyAtIDE2MTIsIDEwDQotW2VsZXZhdGlvbl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxNjIyLCA5DQotWyBdIFMgLSAxNjMxLCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDE2MzIsIDENCi1bIF0gUyAtIDE2MzMsIDENCi1bLTAuMzZyYWRdIERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTiAtIDE2MzQsIDgNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gMTY0MiwgMQ0KLVsNCi0gICAgICAgIF0gUyAtIDE2NDMsIDEwDQotW3BpdGNoXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDE2NTMsIDUNCi1bIF0gUyAtIDE2NTgsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTY1OSwgMQ0KLVsgXSBTIC0gMTY2MCwgMQ0KLVsyMTBIel0gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gMTY2MSwgNQ0KLVsNCi0gICAgXSBTIC0gMTY2NiwgNg0KLVt9XSBSQlJBQ0UgLSAxNjcyLCAxDQotWw0KLSAgICBdIFMgLSAxNjczLCA2DQotW1BdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDE2NzksIDENCi1bLmdvYXRdIFNFTEVDVE9SX0NMQVNTIC0gMTY4MCwgNQ0KLVsgXSBTIC0gMTY4NSwgMQ0KLVt7XSBMQlJBQ0UgLSAxNjg2LCAxDQotWw0KLSAgICAgICAgXSBTIC0gMTY4NywgMTANCi1bdm9sdW1lXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDE2OTcsIDYNCi1bIF0gUyAtIDE3MDMsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTcwNCwgMQ0KLVsgXSBTIC0gMTcwNSwgMQ0KLVt4LXNvZnRdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMTcwNiwgNg0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSAxNzEyLCAxDQotWw0KLSAgICAgICAgXSBTIC0gMTcxMywgMTANCi1bZWxldmF0aW9uXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDE3MjMsIDkNCi1bIF0gUyAtIDE3MzIsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTczMywgMQ0KLVsgXSBTIC0gMTczNCwgMQ0KLVs2NmdyYWRdIERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTiAtIDE3MzUsIDYNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gMTc0MSwgMQ0KLVsNCi0gICAgICAgIF0gUyAtIDE3NDIsIDEwDQotW3BpdGNoXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDE3NTIsIDUNCi1bIF0gUyAtIDE3NTcsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTc1OCwgMQ0KLVsgXSBTIC0gMTc1OSwgMQ0KLVswLjE3a0h6XSBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT04gLSAxNzYwLCA3DQotWw0KLSAgICBdIFMgLSAxNzY3LCA2DQotW31dIFJCUkFDRSAtIDE3NzMsIDENCi1bDQotXSBTIC0gMTc3NCwgMg0KLVt9XSBSQlJBQ0UgLSAxNzc2LCAxDQotWw0KLQ0KLV0gUyAtIDE3NzcsIDQNCi0NCi0tLS0tLS0tDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTVGV4dFBhcnNlclRlc3Qtc2FtcGxlMDguY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTVGV4dFBhcnNlclRlc3Qtc2FtcGxlMDguY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMGRiZmY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1RleHRQYXJzZXJUZXN0LXNhbXBsZTA4LmNzcworKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLVthXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAwLCAxCi1bLm5ld1dpbmRvd10gU0VMRUNUT1JfQ0xBU1MgLSAxLCAxMAotWyBdIFMgLSAxMSwgMQotWy8qICovXSBDT01NRU5UIC0gMTIsIDUKLVsgXSBTIC0gMTcsIDEKLVt7XSBMQlJBQ0UgLSAxOCwgMQotWwotICAgIF0gUyAtIDE5LCA2Ci1bYmFja2dyb3VuZC1pbWFnZV0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAyNSwgMTYKLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA0MSwgMQotWyBdIFMgLSA0MiwgMQotW3VybCguLi9pbWFnZXMvdGVzdC5wbmcpXSBERUNMQVJBVElPTl9WQUxVRV9VUkkgLSA0MywgMjMKLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gNjYsIDEKLVshaW1wb3J0YW50XSBDU1NfREVDTEFSQVRJT05fVkFMVUVfSU1QT1JUQU5UIC0gNjcsIDEwCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gNzcsIDEKLVsKLV0gUyAtIDc4LCAyCi1bfV0gUkJSQUNFIC0gODAsIDEKLVsKLV0gUyAtIDgxLCAyCi0KLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwMS5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDEuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzg5ODI2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwMS5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLUgxIHsNCi0NCi0JY29sb3I6IHdoaXRlDQotCTsNCi0NCi0JYmFja2dyb3VuZC1jb2xvciA6IGJsYWNrDQotCQ0KLX0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDIuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTAyLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWE0YzRkZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDIuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotQGltcG9ydCB1cmwoImhvZ2UuY3NzIik7DQotQGltcG9ydCAvKiBjb21tZW50ICovIHVybChob2dlLmNzcyk7DQotQGltcG9ydCAiaG9nZS5jc3MiIC8qIGNvbW1lbnQgKi87DQotQElNUE9SVCAnaG9nZS5jc3MnICxtZWRpYTEsbWVkaWEyLCxtZWRpYTMgbWVkaWE0LG1lZGlhNSBAaW1wb3J0IG1lZGlhNjsNCi0NCi08IS0tIC8qIGhvZ2Vob2dlICovDQotDQotLS0+DQotDQotLyogY29tbWVudCAyICovDQota3Vzbw0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwMy5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDMuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTdjY2MwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwMy5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi1AaW1wb3J0IHVybCgiLi4vc2FtcGxlMi5jc3MiKTsNCi0NCi0vKiBTYW1wbGUgU3R5bGVzICovDQotDQotQk9EWSB7DQotCWNvbG9yIDogYmxhY2s7DQotCWJhY2tncm91bmQtY29sb3IgOiByZ2IoMTgxLCAyNTMsIDIxMSk7DQotCXRleHQtYWxpZ24gOiBjZW50ZXI7DQotCWZvbnQtZmFtaWx5IDogIkhlaXNlaSBNaW5jaG8gVzMiLCBzZXJpZg0KLX0NCi0NCi1AcGFnZSA6bGVmdCB7IG1hcmdpbi1sZWZ0IDogNGNtIH0NCi0NCi1AbWVkaWEgYXVyYWwgew0KLQlQLmhlaWRpIHsNCi0JCWF6aW11dGggOiBjZW50ZXItbGVmdDsNCi0JCWVsZXZhdGlvbiA6IDEyLjNkZWc7DQotCQlwYXVzZSA6IDMwbXMgMS42cw0KLQl9DQotfQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwNC5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDQuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMmRlNGY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwNC5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi1AY2hhcnNldCAiSVNPLTg4NTktMSI7DQotDQotQGltcG9ydCB1cmwoImhvZ2UuY3NzIik7DQotQGltcG9ydCAvKiBjb21tZW50ICovIHVybChob2dlLmNzcyk7DQotQGltcG9ydCAiaG9nZS5jc3MiIC8qIGNvbW1lbnQgKi87DQotQElNUE9SVCAnaG9nZS5jc3MnIG1lZGlhMSxtZWRpYTIgLCBtZWRpYTM7DQotDQotQG1lZGlhIHByaW50IHsNCi0NCi19DQotDQotQHBhZ2UgOmxlZnQgew0KLQ0KLX0NCi0NCi1oMSwgaDIsIGgzIHsgIGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmICB9DQotaDEgZW0geyAgY29sb3I6IGJsdWUgIH0NCi1kaXYgcCAqW2hyZWZdIHsgIGNvbG9yOiBibHVlICB9DQotYm9keSA+IFAgeyAgbGluZS1oZWlnaHQ6IDEuMyAgfQ0KLWRpdiBvbD5saSBwIHsgfQ0KLW1hdGggKyBwIHsgIHRleHQtaW5kZW50OiAwICB9DQotaDEub3BlbmVyICsgaDIgeyAgbWFyZ2luLXRvcDogLTVtbSAgfQ0KLWgxW3RpdGxlXSB7ICBjb2xvcjogYmx1ZTsgIH0NCi1zcGFuW2NsYXNzPWV4YW1wbGVdIHsgIGNvbG9yOiBibHVlOyAgfQ0KLXNwYW5baGVsbG89IkNsZXZlbGFuZCJdW2dvb2RieWU9IkNvbHVtYnVzIl0geyAgY29sb3I6IGJsdWU7ICB9DQotYVtyZWx+PSJjb3B5cmlnaHQiXSB7ICBjb2xvcjogYmx1ZSAgfQ0KLWFbaHJlZj0iaHR0cDovL3d3dy53My5vcmcvIl0geyAgY29sb3I6IGJsdWUgIH0NCi0qW2xhbmc9ZnJdIHsgIGRpc3BsYXkgOiBub25lICB9DQotKltsYW5nfD0iZW4iXSB7ICBjb2xvciA6IHJlZCAgfQ0KLURJQUxPR1VFW2NoYXJhY3Rlcj1yb21lb10NCi17ICB2b2ljZS1mYW1pbHk6ICJMYXdyZW5jZSBPbGl2aWVyIiwgY2hhcmxlcywgbWFsZSAgfQ0KLURJQUxPR1VFWyBjaGFyYWN0ZXIgPSBqdWxpZXQgXQ0KLXsgIHZvaWNlLWZhbWlseTogIlZpdmllbiBMZWlnaCIsIHZpY3RvcmlhLCBmZW1hbGUgIH0NCi0qLnBhc3RvcmFsIHsgIGNvbG9yOiBncmVlbiAgfQ0KLS5wYXN0b3JhbCB7ICBjb2xvcjogZ3JlZW4gIH0NCi1IMS5wYXN0b3JhbCB7ICBjb2xvcjogZ3JlZW4gIH0NCi1wLnBhc3RvcmFsLm1hcmluZSB7ICBjb2xvcjogZ3JlZW4gIH0NCi1oMSNjaGFwdGVyMSB7ICB0ZXh0LWFsaWduOiBjZW50ZXIgIH0NCi1kaXYgPiBwOmZpcnN0LWNoaWxkIHsgIHRleHQtaW5kZW50OiAwICB9DQotcDpmaXJzdC1jaGlsZCBlbSB7ICBmb250LXdlaWdodCA6IGJvbGQgIH0NCi0qID4gYTpmaXJzdC1jaGlsZCB7ICBmb250LXdlaWdodCA6IGJvbGQgIH0NCi1hOmZpcnN0LWNoaWxkIHsgIGZvbnQtd2VpZ2h0IDogYm9sZCAgfQ0KLWEuZXh0ZXJuYWw6dmlzaXRlZCB7ICBjb2xvcjogYmx1ZSAgfQ0KLWE6Zm9jdXM6aG92ZXIgeyAgYmFja2dyb3VuZDogd2hpdGUgIH0NCi1odG1sOmxhbmcoZnIpIHsgIHF1b3RlczogJzw8JyAnPj4nICB9DQotaHRtbDpsYW5nKGRlKSB7ICBxdW90ZXM6ICc+PicgJzw8JyAnXDIwMzknICdcMjAzQScgIH0NCi06bGFuZyhmcikgPiBRIHsgIHF1b3RlczogJzw8JyAnPj4nICB9DQotOmxhbmcoZGUpID4gUSB7ICBxdW90ZXM6ICc+PicgJzw8JyAnXDIwMzknICdcMjAzQScgIH0NCi1wOmZpcnN0LWxldHRlciB7ICBmb250LXNpemU6IDNlbTsgZm9udC13ZWlnaHQ6IG5vcm1hbCAgfQ0KLXAuc3BlY2lhbDpiZWZvcmUgeyBjb250ZW50OiAiU3BlY2lhbCEgIiB9DQotcC5zcGVjaWFsOmZpcnN0LWxldHRlciB7IGNvbG9yOiAjZmZkODAwIH0NCi1CT0RZIHsgZm9udC1mYW1pbHk6IEJhc2tlcnZpbGxlLCAiSGVpc2kgTWluY2hvIFczIiwgU3ltYm9sLCBzZXJpZiB9DQotKjpsYW5nKGphLWpwKSB7IGZvbnQ6IDkwMCAxNHB0LzE2cHQgIkhlaXNlaSBNaW5jaG8gVzkiLCBzZXJpZiB9DQotKjpsYW5nKHpoLXR3KSB7IGZvbnQ6IDgwMCAxNHB0LzE2LjVwdCAiTGkgU3VuZyIsIHNlcmlmIH0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDUuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTA1LmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDJkZTRmNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDUuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotQGNoYXJzZXQgIklTTy04ODU5LTEiOw0KLQ0KLUBpbXBvcnQgdXJsKCJob2dlLmNzcyIpOw0KLUBpbXBvcnQgLyogY29tbWVudCAqLyB1cmwoaG9nZS5jc3MpOw0KLUBpbXBvcnQgImhvZ2UuY3NzIiAvKiBjb21tZW50ICovOw0KLUBJTVBPUlQgJ2hvZ2UuY3NzJyBtZWRpYTEsbWVkaWEyICwgbWVkaWEzOw0KLQ0KLUBtZWRpYSBwcmludCB7DQotDQotfQ0KLQ0KLUBwYWdlIDpsZWZ0IHsNCi0NCi19DQotDQotaDEsIGgyLCBoMyB7ICBmb250LWZhbWlseTogc2Fucy1zZXJpZiAgfQ0KLWgxIGVtIHsgIGNvbG9yOiBibHVlICB9DQotZGl2IHAgKltocmVmXSB7ICBjb2xvcjogYmx1ZSAgfQ0KLWJvZHkgPiBQIHsgIGxpbmUtaGVpZ2h0OiAxLjMgIH0NCi1kaXYgb2w+bGkgcCB7IH0NCi1tYXRoICsgcCB7ICB0ZXh0LWluZGVudDogMCAgfQ0KLWgxLm9wZW5lciArIGgyIHsgIG1hcmdpbi10b3A6IC01bW0gIH0NCi1oMVt0aXRsZV0geyAgY29sb3I6IGJsdWU7ICB9DQotc3BhbltjbGFzcz1leGFtcGxlXSB7ICBjb2xvcjogYmx1ZTsgIH0NCi1zcGFuW2hlbGxvPSJDbGV2ZWxhbmQiXVtnb29kYnllPSJDb2x1bWJ1cyJdIHsgIGNvbG9yOiBibHVlOyAgfQ0KLWFbcmVsfj0iY29weXJpZ2h0Il0geyAgY29sb3I6IGJsdWUgIH0NCi1hW2hyZWY9Imh0dHA6Ly93d3cudzMub3JnLyJdIHsgIGNvbG9yOiBibHVlICB9DQotKltsYW5nPWZyXSB7ICBkaXNwbGF5IDogbm9uZSAgfQ0KLSpbbGFuZ3w9ImVuIl0geyAgY29sb3IgOiByZWQgIH0NCi1ESUFMT0dVRVtjaGFyYWN0ZXI9cm9tZW9dDQoteyAgdm9pY2UtZmFtaWx5OiAiTGF3cmVuY2UgT2xpdmllciIsIGNoYXJsZXMsIG1hbGUgIH0NCi1ESUFMT0dVRVsgY2hhcmFjdGVyID0ganVsaWV0IF0NCi17ICB2b2ljZS1mYW1pbHk6ICJWaXZpZW4gTGVpZ2giLCB2aWN0b3JpYSwgZmVtYWxlICB9DQotKi5wYXN0b3JhbCB7ICBjb2xvcjogZ3JlZW4gIH0NCi0ucGFzdG9yYWwgeyAgY29sb3I6IGdyZWVuICB9DQotSDEucGFzdG9yYWwgeyAgY29sb3I6IGdyZWVuICB9DQotcC5wYXN0b3JhbC5tYXJpbmUgeyAgY29sb3I6IGdyZWVuICB9DQotaDEjY2hhcHRlcjEgeyAgdGV4dC1hbGlnbjogY2VudGVyICB9DQotZGl2ID4gcDpmaXJzdC1jaGlsZCB7ICB0ZXh0LWluZGVudDogMCAgfQ0KLXA6Zmlyc3QtY2hpbGQgZW0geyAgZm9udC13ZWlnaHQgOiBib2xkICB9DQotKiA+IGE6Zmlyc3QtY2hpbGQgeyAgZm9udC13ZWlnaHQgOiBib2xkICB9DQotYTpmaXJzdC1jaGlsZCB7ICBmb250LXdlaWdodCA6IGJvbGQgIH0NCi1hLmV4dGVybmFsOnZpc2l0ZWQgeyAgY29sb3I6IGJsdWUgIH0NCi1hOmZvY3VzOmhvdmVyIHsgIGJhY2tncm91bmQ6IHdoaXRlICB9DQotaHRtbDpsYW5nKGZyKSB7ICBxdW90ZXM6ICc8PCcgJz4+JyAgfQ0KLWh0bWw6bGFuZyhkZSkgeyAgcXVvdGVzOiAnPj4nICc8PCcgJ1wyMDM5JyAnXDIwM0EnICB9DQotOmxhbmcoZnIpID4gUSB7ICBxdW90ZXM6ICc8PCcgJz4+JyAgfQ0KLTpsYW5nKGRlKSA+IFEgeyAgcXVvdGVzOiAnPj4nICc8PCcgJ1wyMDM5JyAnXDIwM0EnICB9DQotcDpmaXJzdC1sZXR0ZXIgeyAgZm9udC1zaXplOiAzZW07IGZvbnQtd2VpZ2h0OiBub3JtYWwgIH0NCi1wLnNwZWNpYWw6YmVmb3JlIHsgY29udGVudDogIlNwZWNpYWwhICIgfQ0KLXAuc3BlY2lhbDpmaXJzdC1sZXR0ZXIgeyBjb2xvcjogI2ZmZDgwMCB9DQotQk9EWSB7IGZvbnQtZmFtaWx5OiBCYXNrZXJ2aWxsZSwgIkhlaXNpIE1pbmNobyBXMyIsIFN5bWJvbCwgc2VyaWYgfQ0KLSo6bGFuZyhqYS1qcCkgeyBmb250OiA5MDAgMTRwdC8xNnB0ICJIZWlzZWkgTWluY2hvIFc5Iiwgc2VyaWYgfQ0KLSo6bGFuZyh6aC10dykgeyBmb250OiA4MDAgMTRwdC8xNi41cHQgIkxpIFN1bmciLCBzZXJpZiB9DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTA2LmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwNi5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhNzNjZWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTA2LmNzcworKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLWRlY2xhcmF0aW9uIHsNCi0JZGltZW5zaW9uIDogMTAwZXg7DQotCWZ1bmN0aW9uIDogcmVjdCgxMDAsIDIwMCwgMzAwLCA0MDApLCBmb3JtYXQoImludGVsbGlmb250IiksIGxvY2FsKCJFeGNlbHNpb3IgQ3lyaWxsbGljIFVwcmlnaHQiKTsNCi0JaGFzaCA6ICNhYWJiY2M7DQotCWlkZW50IDogYW55Ow0KLQludW1iZXIgOiA5OTk5OTsNCi0JcGVyY2VudGFnZSA6IDEwMCU7DQotCXN0cmluZyA6ICJzdHJpbmciOw0KLQl1bmljb2RlLXJhbmdlIDogVSs/PywgVSsxMDAtMjIwLCBVKzQ/PzsNCi19DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTA3LmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwNy5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkMzQ3MjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTA3LmNzcworKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLUBjaGFyc2V0ICJJU08tODg1OS0xIjsNCi0NCi1AaW1wb3J0IHVybCgiLi4vc2FtcGxlMi5jc3MiKSBwcm9qZWN0aW9uLCB0djsNCi0NCi1CT0RZIHsNCi0gICAgY29sb3IgOiBibGFjazsNCi0gICAgdGV4dC1hbGlnbiA6IGNlbnRlcjsNCi0gICAgYmFja2dyb3VuZC1jb2xvciA6IHJnYiggMTgxLCAyNTMsIDIxMSApDQotfQ0KLQ0KLVVMIHsNCi0gICAgY29sb3IgOiBibGFjazsNCi0gICAgbGlzdC1zdHlsZS1pbWFnZSA6IHVybCgiaW1hZ2VzL2xfYTAxLmdpZiIpOw0KLSAgICBsaXN0LXN0eWxlLXBvc2l0aW9uIDogb3V0c2lkZQ0KLX0NCi0NCi1IMSB7DQotICAgIGNvbG9yIDogd2hpdGU7DQotICAgIHRleHQtYWxpZ24gOiBjZW50ZXI7DQotICAgIGJvcmRlci1sZWZ0LWNvbG9yIDogIzk5NjY2NjsNCi0gICAgcGFkZGluZy10b3AgOiAwcHg7DQotICAgIHBhZGRpbmctcmlnaHQgOiAxY207DQotICAgIHBhZGRpbmctYm90dG9tIDogMjsNCi0gICAgcGFkZGluZy1sZWZ0IDogM2VtOw0KLSAgICBib3JkZXItc3R5bGUgOiBzb2xpZDsNCi0gICAgYm9yZGVyLXRvcC13aWR0aCA6IDQuNWV4Ow0KLSAgICBib3JkZXItcmlnaHQtd2lkdGggOiA1aW47DQotICAgIGJvcmRlci1ib3R0b20td2lkdGggOiA2LjAybW07DQotICAgIGJvcmRlci1sZWZ0LXdpZHRoIDogNw0KLX0NCi0NCi1IMTpiZWZvcmUgew0KLSAgICBjb250ZW50IDogIkNoYXB0ZXIgIiBjb3VudGVyKCBjaGFwdGVyICkgIi4gIjsNCi0gICAgY291bnRlci1pbmNyZW1lbnQgOiBjaGFwdGVyOw0KLSAgICBjb3VudGVyLXJlc2V0IDogc2VjdGlvbg0KLX0NCi0NCi1JTUc6YmVmb3JlIHtjb250ZW50IDogYXR0cihhbHQpfQ0KLQ0KLURJVi5zYW1wbGUgew0KLSAgICBmb250LWZhbWlseSA6ICJSb2Jzb24gQ2VsdGljIiwgc2Fucy1zZXJpZjsNCi0gICAgcG9zaXRpb24gOiBhYnNvbHV0ZTsNCi0gICAgbGVmdCA6IDgzMy41cGM7DQotICAgIHRvcCA6IDkwJTsNCi0gICAgd2lkdGggOiAxMDBwdDsNCi0gICAgaGVpZ2h0IDogMTEwLjc3N3B4Ow0KLSAgICBjbGlwIDogcmVjdCggLTVweCwgODBweCwgMTMwcHgsIDBweCApDQotfQ0KLQ0KLUBmb250LWZhY2Ugew0KLSAgICBmb250LWZhbWlseSA6ICJTd2lzcyA3MjEiOw0KLSAgICBzcmMgOiB1cmwoInN3aXNzNzIxdC5wZnIiKSBmb3JtYXQoImludGVsbGlmb250IiksIGxvY2FsKCJFeGNlbHNpb3IgQ3lyaWxsbGljIFVwcmlnaHQiKTsNCi0gICAgdW5pY29kZS1yYW5nZSA6IFUrPz8sIFUrMTAwLTIyMCwgVSs0Pz87DQotICAgIGZvbnQtd2VpZ2h0IDogMTAwLCAyMDAsIDMwMCwgNDAwLCA1MDANCi19DQotDQotQHBhZ2UgOmxlZnQge21hcmdpbi1sZWZ0IDogNGNtfQ0KLQ0KLUBtZWRpYSBhdXJhbCB7DQotICAgIEgxLCBIMiwgSDMsIEg0LCBINSwgSDYgew0KLSAgICAgICAgdm9pY2UtZmFtaWx5IDogcGF1bCwgY2hpbGQ7DQotICAgICAgICBzdHJlc3MgOiAyMDsNCi0gICAgICAgIHJpY2huZXNzIDogOTA7DQotICAgICAgICBjdWUtYmVmb3JlIDogdXJsKCJwaW5nLmF1IikNCi0gICAgfQ0KLSAgICBQLmhlaWRpIHsNCi0gICAgICAgIGF6aW11dGggOiBjZW50ZXItbGVmdDsNCi0gICAgICAgIGVsZXZhdGlvbiA6IDEyLjNkZWc7DQotICAgICAgICBwYXVzZSA6IDMwbXMgMS42cw0KLSAgICB9DQotICAgIFAucGV0ZXIgew0KLSAgICAgICAgYXppbXV0aCA6IHJpZ2h0Ow0KLSAgICAgICAgZWxldmF0aW9uIDogLTAuMzZyYWQ7DQotICAgICAgICBwaXRjaCA6IDIxMEh6DQotICAgIH0NCi0gICAgUC5nb2F0IHsNCi0gICAgICAgIHZvbHVtZSA6IHgtc29mdDsNCi0gICAgICAgIGVsZXZhdGlvbiA6IDY2Z3JhZDsNCi0gICAgICAgIHBpdGNoIDogMC4xN2tIeg0KLSAgICB9DQotfQ0KLQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwOC5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDguY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDE5YTdjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwOC5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLWEubmV3V2luZG93IC8qICovIHsKLSAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi4vaW1hZ2VzL3Rlc3QucG5nKSAhaW1wb3J0YW50OwotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdXRpbC9GaWxlVXRpbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdXRpbC9GaWxlVXRpbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZGY2YmQ1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3V0aWwvRmlsZVV0aWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLnV0aWw7Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5GaWxlV3JpdGVyOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5Xcml0ZXI7Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSUNTU01vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci0KLS8qKgotICogCi0gKi8KLXB1YmxpYyBjbGFzcyBGaWxlVXRpbCB7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29tbW9uRU9MID0gIlxyXG4iOwotCi0JcHVibGljIHN0YXRpYyBGaWxlIGNyZWF0ZUZpbGUoU3RyaW5nIGRpcmVjdG9yeSwgU3RyaW5nIGZpbGVuYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKCJvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMiKTsgLy8kTk9OLU5MUy0xJAotCQlVUkwgdXJsID0gYnVuZGxlLmdldEVudHJ5KCIvIik7IC8vJE5PTi1OTFMtMSQKLQkJVVJMIGxvY2FsVVJMID0gRmlsZUxvY2F0b3IudG9GaWxlVVJMKHVybCk7Ci0JCVN0cmluZyBpbnN0YWxsUGF0aCA9IGxvY2FsVVJMLmdldFBhdGgoKTsKLQkJU3RyaW5nIHRvdGFsRGlyZWN0b3J5ID0gaW5zdGFsbFBhdGggKyBkaXJlY3Rvcnk7Ci0JCVN0cmluZyB0b3RhbFBhdGggPSB0b3RhbERpcmVjdG9yeSArICIvIiArIGZpbGVuYW1lOyAvLyROT04tTkxTLTEkCi0JCVVSTCB0b3RhbFVSTCA9IG5ldyBVUkwodXJsLCB0b3RhbFBhdGgpOwotCQlTdHJpbmcgZmluYWxGaWxlID0gdG90YWxVUkwuZ2V0RmlsZSgpOwotCQlGaWxlIGZpbGUgPSBuZXcgRmlsZShmaW5hbEZpbGUpOwotCQlyZXR1cm4gZmlsZTsKLQl9Ci0KLQkvLyBwdWJsaWMgc3RhdGljIFJlYWRlciBjcmVhdGVSZWFkZXIoRmlsZSBmaWxlKSB0aHJvd3MKLQkvLyBGaWxlTm90Rm91bmRFeGNlcHRpb24gewotCS8vIHJldHVybiBuZXcgRmlsZVJlYWRlcihmaWxlKTsKLQkvLyB9Ci0JLy8JCi0JLy8gcHVibGljIHN0YXRpYyBSZWFkZXIgY3JlYXRlUmVhZGVyKFN0cmluZyBkaXJlY3RvcnksIFN0cmluZyBmaWxlbmFtZSkKLQkvLyB0aHJvd3MgSU9FeGNlcHRpb24gewotCS8vIEZpbGUgZmlsZSA9IGNyZWF0ZUZpbGUoZGlyZWN0b3J5LCBmaWxlbmFtZSk7Ci0JLy8gcmV0dXJuIGNyZWF0ZVJlYWRlcihmaWxlKTsKLQkvLyB9Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBjcmVhdGVTdHJpbmcoU3RyaW5nIGRpcmVjdG9yeSwgU3RyaW5nIGZpbGVuYW1lKSB0aHJvd3MgRmlsZU5vdEZvdW5kRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZ0J1ZmZlciBidWYgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCVJlYWRlciBmaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoY3JlYXRlRmlsZShkaXJlY3RvcnksIGZpbGVuYW1lKSk7Ci0JCUJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9IG5ldyBCdWZmZXJlZFJlYWRlcihmaWxlUmVhZGVyKTsKLQkJU3RyaW5nIGxpbmU7Ci0JCXdoaWxlICgobGluZSA9IHJlYWRlci5yZWFkTGluZSgpKSAhPSBudWxsKSB7Ci0JCQlidWYuYXBwZW5kKGxpbmUpOwotCQkJYnVmLmFwcGVuZChjb21tb25FT0wpOwotCQl9Ci0JCXJldHVybiBidWYudG9TdHJpbmcoKTsKLQkJLy8gcmV0dXJuIG5ldyBEYXRhSW5wdXRTdHJlYW0obmV3Ci0JCS8vIEZpbGVJbnB1dFN0cmVhbShjcmVhdGVGaWxlKGRpcmVjdG9yeSwgZmlsZW5hbWUpKSkucmVhZFVURigpOwotCX0KLQotCXN0YXRpYyBpbnQgdW5pcXVlTnVtID0gMDsKLQotCXB1YmxpYyBzdGF0aWMgSUNTU01vZGVsIGNyZWF0ZU1vZGVsKCkgewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQotCQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCi0JCQltb2RlbCA9IG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvckVkaXQoInRlc3QiICsgdW5pcXVlTnVtKysgKyAiLmNzcyIsIG5ldyBOdWxsSW5wdXRTdHJlYW0oKSwgbnVsbCk7IC8vJE5PTi1OTFMtMSQKLQotCQkJLy8gYWx3YXlzIHVzZSB0aGUgc2FtZSBsaW5lIGRlbGltaXRlciBmb3IgdGhlc2UgdGVzdHMsIHJlZ2FyZGxlc3MKLQkJCS8vIG9mIHBsYWZvcm0gb3IgcHJlZmVyZW5jZSBzZXR0aW5ncwotCQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0TGluZURlbGltaXRlcihjb21tb25FT0wpOwotCi0KLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJcmV0dXJuIChJQ1NTTW9kZWwpIG1vZGVsOwotCi0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGR1bXBTdHJpbmcoU3RyaW5nIHN0cmluZywgU3RyaW5nIGRpcmVjdG9yeSwgU3RyaW5nIGZpbGVuYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlGaWxlIGZpbGUgPSBjcmVhdGVGaWxlKGRpcmVjdG9yeSwgZmlsZW5hbWUpOwotCQlXcml0ZXIgd3JpdGVyID0gbmV3IEZpbGVXcml0ZXIoZmlsZSk7Ci0JCXdyaXRlci53cml0ZShzdHJpbmcpOwotCQl3cml0ZXIuY2xvc2UoKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3V0aWwvTnVsbElucHV0U3RyZWFtLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy91dGlsL051bGxJbnB1dFN0cmVhbS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNGVlOWU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3V0aWwvTnVsbElucHV0U3RyZWFtLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgSmVucyBMdWtvd3NraS9Jbm5vb3ByYWN0IC0gaW5pdGlhbCByZW5hbWluZy9yZXN0cnVjdHVyaW5nCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLnV0aWw7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci0KLQotcHVibGljIGNsYXNzIE51bGxJbnB1dFN0cmVhbSBleHRlbmRzIElucHV0U3RyZWFtIHsKLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgamF2YS5pby5JbnB1dFN0cmVhbSNtYXJrKGludCkKLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgbWFyayhpbnQgcmVhZGxpbWl0KSB7Ci0JCS8vIG5vdGhpbmcgdG8gZG8KLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIGphdmEuaW8uSW5wdXRTdHJlYW0jbWFya1N1cHBvcnRlZCgpCi0JICovCi0JcHVibGljIGJvb2xlYW4gbWFya1N1cHBvcnRlZCgpIHsKLQkJLy8gd2UgY2FuIG1hcmsgbm90aGluZy4KLQkJLy8gYW5kLCB3ZSBhcmUgdXNpbmcgdGhpcyBOdWxsIGNsYXNzIHNwZWNpZmljYWxseSBmb3IKLQkJLy8gYSAiZmFrZSIgcmVzZXR0YWJsZSBzdHJlYW0uCi0JCXJldHVybiB0cnVlOwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgamF2YS5pby5JbnB1dFN0cmVhbSNyZWFkKCkKLQkgKi8KLQlwdWJsaWMgaW50IHJlYWQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCi0JCXJldHVybiAtMTsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIGphdmEuaW8uSW5wdXRTdHJlYW0jcmVzZXQoKQotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCByZXNldCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCS8vIG5vdGhpbmcgdG8gZG8KLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIGphdmEuaW8uSW5wdXRTdHJlYW0jc2tpcChsb25nKQotCSAqLwotCXB1YmxpYyBsb25nIHNraXAobG9uZyBuKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlyZXR1cm4gMDsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy91dGlsL1N0cmluZ0NvbXBhcmVVdGlsLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy91dGlsL1N0cmluZ0NvbXBhcmVVdGlsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0YjM3MjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdXRpbC9TdHJpbmdDb21wYXJlVXRpbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMudXRpbDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdSZWFkZXI7Ci0KLXB1YmxpYyBjbGFzcyBTdHJpbmdDb21wYXJlVXRpbCB7Ci0KLQlwdWJsaWMgYm9vbGVhbiBlcXVhbHNJZ25vcmVMaW5lU2VwZXJhdG9yKFN0cmluZyBzdHJpbmcxLCBTdHJpbmcgc3RyaW5nMikgewotCi0JCWlmIChzdHJpbmcxID09IG51bGwpCi0JCQlyZXR1cm4gZmFsc2U7Ci0JCWlmIChzdHJpbmcyID09IG51bGwpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJU3RyaW5nUmVhZGVyIHMxUmVhZGVyID0gbmV3IFN0cmluZ1JlYWRlcihzdHJpbmcxKTsKLQkJU3RyaW5nUmVhZGVyIHMyUmVhZGVyID0gbmV3IFN0cmluZ1JlYWRlcihzdHJpbmcyKTsKLQotCQkvLyBhc3N1bWUgdHJ1ZSB1bmxlc3MgZmluZCBldmlkZW5jZSB0byB0aGUgY29udHJhcnkKLQkJYm9vbGVhbiByZXN1bHQgPSB0cnVlOwotCQlpbnQgczFDaGFyID0gLTE7Ci0JCWludCBzMkNoYXIgPSAtMTsKLQkJZG8gewotCi0JCQlzMUNoYXIgPSBnZXROZXh0Q2hhcihzMVJlYWRlcik7Ci0KLQkJCXMyQ2hhciA9IGdldE5leHRDaGFyKHMyUmVhZGVyKTsKLQotCQkJaWYgKHMxQ2hhciAhPSBzMkNoYXIpIHsKLQkJCQlyZXN1bHQgPSBmYWxzZTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQl3aGlsZSAoczFDaGFyICE9IC0xICYmIHMyQ2hhciAhPSAtMSk7Ci0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQkvKioKLQkgKiBNZXRob2QgZ2V0TmV4dENoYXIuCi0JICogQHBhcmFtIHMxUmVhZGVyCi0JICogQHJldHVybiBjaGFyCi0JICovCi0JcHJpdmF0ZSBpbnQgZ2V0TmV4dENoYXIoU3RyaW5nUmVhZGVyIHJlYWRlcikgewotCQlpbnQgbmV4dENoYXIgPSAtMTsKLQkJdHJ5IHsKLQkJCW5leHRDaGFyID0gcmVhZGVyLnJlYWQoKTsKLQkJCXdoaWxlIChpc0VPTChuZXh0Q2hhcikpIHsKLQkJCQluZXh0Q2hhciA9IHJlYWRlci5yZWFkKCk7Ci0JCQl9Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJcmV0dXJuIG5leHRDaGFyOwotCX0KLQotCXByaXZhdGUgYm9vbGVhbiBpc0VPTChpbnQgYUNoYXIpIHsKLQkJcmV0dXJuIChhQ2hhciA9PSAnXG4nIHx8IGFDaGFyID09ICdccicpOwotCX0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy90ZXN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy90ZXN0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDY1M2EzZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvdGVzdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLQotPHByb2plY3QKLSAgICBuYW1lPSJ0ZXN0c3VpdGUiCi0gICAgZGVmYXVsdD0icnVuIgotICAgIGJhc2VkaXI9Ii4iPgotICAgIAotICAgIDwhLS0gVGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGlzIHNjcmlwdCAtLT4KLSAgICA8IS0tICR7ZWNsaXBzZS1ob21lfSAgIC0tPgotICAgIDwhLS0gJHtidWlsZERpcmVjdG9yeX0gIC0tPgotICAgIDwhLS0gJHtidWlsZExhYmVsfSAgICAgICAgLS0+Ci0KLSAgICA8IS0tIHNob3VsZCBiZSBsaXR0bGUgbmVlZCB0byBjaGFuZ2Ugd2hhdCdzIGFib3ZlICAtLT4KLSAgICAKLQk8cHJvcGVydHkKLQkJbmFtZT0icGx1Z2luLW5hbWUiCi0JCXZhbHVlPSJvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9ImNsYXNzbmFtZSIKLSAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5DU1NDb3JlVGVzdFN1aXRlIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJ0ZXN0VHlwZSIKLSAgICAgICAgdmFsdWU9ImNvcmUtdGVzdCIgLz4KLQotICAgIDwhLS0gc2hvdWxkIGJlIGxpdHRsZSBuZWVkIHRvIGNoYW5nZSB3aGF0J3MgYmVsb3cgLS0+Ci0KLSAgICA8ZWNobyBtZXNzYWdlPSJiYXNlZGlyOiAke2Jhc2VkaXJ9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImVjbGlwc2UtaG9tZTogJHtlY2xpcHNlLWhvbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImJ1aWxkRGlyZWN0b3J5OiAke2J1aWxkRGlyZWN0b3J5fSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJwbHVnaW4tbmFtZTogJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iY2xhc3NuYW1lOiAke2NsYXNzbmFtZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0idGVzdFR5cGUgJHt0ZXN0VHlwZX0iIC8+Ci0KLQotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJsaWJyYXJ5LWZpbGUiCi0gICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMS4wL2xpYnJhcnkueG1sIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJ3b3Jrc3BhY2UiCi0gICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vanVuaXR3b3Jrc3BhY2VzLyR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICAKLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGFsbCBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBmb3IgLS0+Ci0gICAgPCEtLSBhbGwgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcnVuLiBJbml0aWFsaXphdGlvbiBmb3IgaW5kaXZpZHVhbCB0ZXN0cyAtLT4KLSAgICA8IS0tIHNob3VsZCBiZSBkb25lIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgc3VpdGUgdGFyZ2V0LiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9ImluaXQiPgotICAgICAgICA8dHN0YW1wIC8+Ci0gICAgICAgIDxkZWxldGU+Ci0gICAgICAgICAgICA8ZmlsZXNldAotICAgICAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9IgotICAgICAgICAgICAgICAgIGluY2x1ZGVzPSIke3BsdWdpbi1uYW1lfS4qeG1sIiAvPgotICAgICAgICA8L2RlbGV0ZT4KLSAgICAgICAgPCEtLSBtYWtlIGRpcmVjdG9yeSwgaW4gY2FzZSBwYXRoIGRvZXNuJ3QgZXhpc3QgeWV0IC0tPgotICAgICAgICA8bWtkaXIgZGlyPSIke3dvcmtzcGFjZX0iIC8+Ci0gICAgICAgIDwhLS0gIGJ1dCBkZWxldGUgdG8gbWFrZSBzdXJlIGZyZXNoIGNvbnRlbnRzLS0+Ci0gICAgICAgIDxkZWxldGUKLSAgICAgICAgICAgIGRpcj0iJHt3b3Jrc3BhY2V9IgotICAgICAgICAgICAgcXVpZXQ9InRydWUiIC8+Ci0KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgZGVmaW5lcyB0aGUgdGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4gLS0+Ci0gICAgPHRhcmdldCBuYW1lPSJzdWl0ZSI+Ci0KLSAgICAgICAgPGFudAotICAgICAgICAgICAgdGFyZ2V0PSIke3Rlc3RUeXBlfSIKLSAgICAgICAgICAgIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLSAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImRhdGEtZGlyIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3dvcmtzcGFjZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJwbHVnaW4tbmFtZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJjbGFzc25hbWUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7Y2xhc3NuYW1lfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9InBsdWdpbi1wYXRoIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy8ke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgPC9hbnQ+Ci0KLSAgICAgICAgPGNvcHkKLSAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIKLSAgICAgICAgICAgIGZpbGU9IiR7d29ya3NwYWNlfS8ubWV0YWRhdGEvLmxvZyIKLSAgICAgICAgICAgIHRvZmlsZT0iJHtidWlsZERpcmVjdG9yeX0vJHtidWlsZExhYmVsfS90ZXN0UmVzdWx0cy9jb25zb2xlbG9ncy8ke3BsdWdpbi1uYW1lfS5jb25zb2xlbG9nLnR4dCIgLz4KLQotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBjb2RlIHRvIGNsZWFudXAgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgYWZ0ZXIgLS0+Ci0gICAgPCEtLSBhZnRlciBhbGwgb2YgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4uIFlvdSBjYW4gdXNlIHRoaXMgdGFyZ2V0IHRvIC0tPgotICAgIDwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9ImNsZWFudXAiPgotICAgICAgICA8IS0tIHVzdWFsbHkgbm8gbmVlZCB0byBkZWxldGUgd29ya3NwYWNlIHVudGlsIG5leHQgcnVuLCBhbmQgbGVhdmluZyBpdCBhbGxvd3MgaW5zcGVjdGlvbiAtLT4KLSAgICAgICAgPCEtLSA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIgLz4gLS0+Ci0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+Ci0gICAgPCEtLSBhZnRlciBhbGwgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4gc2hvdWxkIGdvIGhlcmUuIC0tPgotICAgIDx0YXJnZXQKLSAgICAgICAgbmFtZT0icnVuIgotICAgICAgICBkZXBlbmRzPSJpbml0LHN1aXRlLGNsZWFudXAiPgotICAgICAgICA8YW50Ci0gICAgICAgICAgICB0YXJnZXQ9ImNvbGxlY3QiCi0gICAgICAgICAgICBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iCi0gICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJpbmNsdWRlcyIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0uKnhtbCIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9Im91dHB1dC1maWxlIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfS54bWwiIC8+Ci0gICAgICAgIDwvYW50PgotICAgIDwvdGFyZ2V0PgotCi08L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTczOTMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNCIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4NDcxZDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1iaW4KLWJ1aWxkLnhtbAotdGVtcC5mb2xkZXIKLWNzc2VuY29kaW5ndGVzdHMuamFyCi1qYXZhQ29tcGlsZXIuY3NzZW5jb2Rpbmd0ZXN0cy5qYXIuYXJncwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhMzU4ZDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2Rpbmc8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZhNWM5MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMDQgMDM6MzY6MzIgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1lbmNvZGluZy88cHJvamVjdD49SVNPLTg4NTktMQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRkOGI1Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLSNTdW4gQXByIDE2IDE0OjM3OjIxIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5jbGVhbk91dHB1dEZvbGRlcj1jbGVhbgotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5kdXBsaWNhdGVSZXNvdXJjZVRhc2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5pbnZhbGlkQ2xhc3NwYXRoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5yZXNvdXJjZUNvcHlFeGNsdXNpb25GaWx0ZXI9Ki5sYXVuY2gKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNpcmN1bGFyQ2xhc3NwYXRoPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGguZXhjbHVzaW9uUGF0dGVybnM9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLm11bHRpcGxlT3V0cHV0TG9jYXRpb25zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZG9jLmNvbW1lbnQuc3VwcG9ydD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5tYXhQcm9ibGVtUGVyVW5pdD0xMDAKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NEZXByZWNhdGVkUmVmPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzTm90VmlzaWJsZVJlZj1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHJpdmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c092ZXJyaWRpbmc9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wdWJsaWMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wcml2YXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5zYWZlVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMYWJlbD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wYXRpYmxlSkRLTGV2ZWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5pbmNvbXBsZXRlQ2xhc3NwYXRoPWVycm9yCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmMmFjNjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozOSBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWludGVybmFsLmRlZmF1bHQuY29tcGxpYW5jZT1kZWZhdWx0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTkzNjhjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozMiBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLmVuYWJsZS5wcm9qZWN0LnJlZmFjdG9yaW5nLmhpc3Rvcnk9ZmFsc2UKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjcyNDk1OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0jU3VuIEFwciAxNiAxNDowNToyOSBFRFQgMjAwNgotY29tcGlsZXJzLnAuYnVpbGQ9MAotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0xCi1jb21waWxlcnMucC5pbGxlZ2FsLWF0dC12YWx1ZT0wCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0wCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMucC51bnVzZWQtZWxlbWVudC1vci1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnVzZS1wcm9qZWN0PXRydWUKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjc3N2Y0OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lLjAKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuNDAwLnF1YWxpZmllcgotQnVuZGxlLUNsYXNzUGF0aDogY3NzZW5jb2Rpbmd0ZXN0cy5qYXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcuQ1NTRW5jb2RpbmdUZXN0c1BsdWdpbgotQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IuMAotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZywKLSBvcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLmNzcwotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKLSBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUsCi0gb3JnLmp1bml0O2J1bmRsZS12ZXJzaW9uPSJbMy44LjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZwotQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy9hYm91dC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTk5ZGYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUsIDIwMDg8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzY5ZTUxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLWJpbi5pbmNsdWRlcyA9IGNzc2VuY29kaW5ndGVzdHMuamFyLFwKLSAgICAgICAgICAgICAgIHRlc3RmaWxlcy8sXAotICAgICAgICAgICAgICAgdGVzdC54bWwsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMKLXNyYy5pbmNsdWRlcyA9IGNzc2VuY29kaW5ndGVzdHMuamFyCi1zb3VyY2UuY3NzZW5jb2Rpbmd0ZXN0cy5qYXIgPSBzcmMvCi1vdXRwdXQuY3NzZW5jb2Rpbmd0ZXN0cy5qYXIgPSBiaW4vCi0gICAgICAgICAgICAgICAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3BsdWdpbi5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTc2Yzc0Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBwcm9wZXJ0aWVzIGZpbGUgZm9yIG9yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcKLUJ1bmRsZS1WZW5kb3IuMCA9IEVjbGlwc2Uub3JnCi1CdW5kbGUtTmFtZS4wID0gQ1NTIEVuY29kaW5nIFRlc3RzIFBsdWctaW4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3Rlc3RzL2VuY29kaW5nL0NTU0VuY29kaW5nVGVzdFN1aXRlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3Rlc3RzL2VuY29kaW5nL0NTU0VuY29kaW5nVGVzdFN1aXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5MGQ1NGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy90ZXN0cy9lbmNvZGluZy9DU1NFbmNvZGluZ1Rlc3RTdWl0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2Rpbmc7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy5jc3MuQ1NTRW5jb2RpbmdUZXN0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy5jc3MuQ1NTSGVhZFRva2VuaXplclRlc3RlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLmNzcy5UZXN0Q29udGVudFR5cGVEZXRlY3Rpb25Gb3JDU1M7Ci0KLXB1YmxpYyBjbGFzcyBDU1NFbmNvZGluZ1Rlc3RTdWl0ZSBleHRlbmRzIFRlc3RTdWl0ZSB7Ci0KLQlwcml2YXRlIHN0YXRpYyBDbGFzc1tdIGNsYXNzZXMgPSBuZXcgQ2xhc3NbXXtDU1NFbmNvZGluZ1Rlc3Rlci5jbGFzcywgQ1NTSGVhZFRva2VuaXplclRlc3Rlci5jbGFzcywgVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uRm9yQ1NTLmNsYXNzfTsKLQotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBDU1NFbmNvZGluZ1Rlc3RTdWl0ZSgpOwotCX0KLQotCXB1YmxpYyBDU1NFbmNvZGluZ1Rlc3RTdWl0ZSgpIHsKLQkJc3VwZXIoIkNTUyBFbmNvZGluZyBUZXN0IFN1aXRlIik7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY2xhc3Nlcy5sZW5ndGg7IGkrKykgewotCQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKGNsYXNzZXNbaV0sIGNsYXNzZXNbaV0uZ2V0TmFtZSgpKSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gdGhlQ2xhc3MKLQkgKi8KLQlwdWJsaWMgQ1NTRW5jb2RpbmdUZXN0U3VpdGUoQ2xhc3MgdGhlQ2xhc3MpIHsKLQkJc3VwZXIodGhlQ2xhc3MpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSB0aGVDbGFzcwotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIENTU0VuY29kaW5nVGVzdFN1aXRlKENsYXNzIHRoZUNsYXNzLCBTdHJpbmcgbmFtZSkgewotCQlzdXBlcih0aGVDbGFzcywgbmFtZSk7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgQ1NTRW5jb2RpbmdUZXN0U3VpdGUoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy90ZXN0cy9lbmNvZGluZy9DU1NFbmNvZGluZ1Rlc3RzUGx1Z2luLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3Rlc3RzL2VuY29kaW5nL0NTU0VuY29kaW5nVGVzdHNQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGE3OTljMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3Rlc3RzL2VuY29kaW5nL0NTU0VuY29kaW5nVGVzdHNQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZzsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLQotLyoqCi0gKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSAqLwotcHVibGljIGNsYXNzIENTU0VuY29kaW5nVGVzdHNQbHVnaW4gZXh0ZW5kcyBQbHVnaW4gewotCS8vIFRoZSBzaGFyZWQgaW5zdGFuY2UuCi0JcHJpdmF0ZSBzdGF0aWMgQ1NTRW5jb2RpbmdUZXN0c1BsdWdpbiBwbHVnaW47Ci0KLQlwdWJsaWMgc3RhdGljIExpc3QgZ2V0QWxsVGVzdEZpbGVzKFN0cmluZyB0b3BEaXJOYW1lKSB7Ci0JCUxpc3QgcmVzdWx0ID0gbnVsbDsKLQkJVVJMIGluc3RhbGxVUkwgPSBnZXRJbnN0YWxsTG9jYXRpb24oKTsKLQkJLy8gU3RyaW5nIHNjaGVtZSA9IGluc3RhbGxVUkwuZ2V0UHJvdG9jb2woKTsKLQkJU3RyaW5nIHBhdGggPSBpbnN0YWxsVVJMLmdldFBhdGgoKTsKLQkJU3RyaW5nIGxvY2F0aW9uID0gcGF0aCArIHRvcERpck5hbWU7Ci0JCUZpbGUgdG9wRGlyID0gbmV3IEZpbGUobG9jYXRpb24pOwotCQlpZiAoIXRvcERpci5pc0RpcmVjdG9yeSgpKSB7Ci0JCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKHRvcERpck5hbWUgKyAiIGlzIG5vdCBhIGRpcmVjdG9yeSIpOwotCQl9Ci0JCXJlc3VsdCA9IGdldEZpbGVzSW5EaXIodG9wRGlyKTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBDU1NFbmNvZGluZ1Rlc3RzUGx1Z2luIGdldERlZmF1bHQoKSB7Ci0JCXJldHVybiBwbHVnaW47Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgTGlzdCBnZXRGaWxlc0luRGlyKEZpbGUgdG9wRGlyKSB7Ci0JCUxpc3QgZmlsZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCUZpbGVbXSB0b3BGaWxlcyA9IHRvcERpci5saXN0RmlsZXMoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCB0b3BGaWxlcy5sZW5ndGg7IGkrKykgewotCQkJRmlsZSBmaWxlID0gdG9wRmlsZXNbaV07Ci0JCQlpZiAoZmlsZS5pc0ZpbGUoKSkgewotCQkJCWZpbGVzLmFkZChmaWxlKTsKLQkJCX0KLQkJCWVsc2UgaWYgKGZpbGUuaXNEaXJlY3RvcnkoKSAmJiAhZmlsZS5nZXROYW1lKCkuZW5kc1dpdGgoIkNWUyIpKSB7Ci0JCQkJTGlzdCBpbm5lckZpbGVzID0gZ2V0RmlsZXNJbkRpcihmaWxlKTsKLQkJCQlmaWxlcy5hZGRBbGwoaW5uZXJGaWxlcyk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGZpbGVzOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgVVJMIGdldEluc3RhbGxMb2NhdGlvbigpIHsKLQkJVVJMIGluc3RhbGxMb2NhdGlvbiA9IFBsYXRmb3JtLmdldEJ1bmRsZSgib3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZyIpLmdldEVudHJ5KCIvIik7Ci0JCVVSTCByZXNvbHZlZExvY2F0aW9uID0gbnVsbDsKLQkJdHJ5IHsKLQkJCXJlc29sdmVkTG9jYXRpb24gPSBGaWxlTG9jYXRvci5yZXNvbHZlKGluc3RhbGxMb2NhdGlvbik7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCS8vIGltcG9zc2libGUKLQkJCXRocm93IG5ldyBFcnJvcihlKTsKLQkJfQotCQlyZXR1cm4gcmVzb2x2ZWRMb2NhdGlvbjsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzdHJpbmcgZnJvbSB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLCBvciAna2V5JyBpZiBub3QKLQkgKiBmb3VuZC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRSZXNvdXJjZVN0cmluZyhTdHJpbmcga2V5KSB7Ci0JCVJlc291cmNlQnVuZGxlIGJ1bmRsZSA9IENTU0VuY29kaW5nVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFJlc291cmNlQnVuZGxlKCk7Ci0JCXRyeSB7Ci0JCQlyZXR1cm4gKGJ1bmRsZSAhPSBudWxsID8gYnVuZGxlLmdldFN0cmluZyhrZXkpIDoga2V5KTsKLQkJfQotCQljYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKLQkJCXJldHVybiBrZXk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgc3RhdGljIEZpbGUgZ2V0VGVzdEZpbGUoU3RyaW5nIGZpbGVwYXRoKSB7Ci0JCVVSTCBpbnN0YWxsVVJMID0gZ2V0SW5zdGFsbExvY2F0aW9uKCk7Ci0JCS8vIFN0cmluZyBzY2hlbWUgPSBpbnN0YWxsVVJMLmdldFByb3RvY29sKCk7Ci0JCVN0cmluZyBwYXRoID0gaW5zdGFsbFVSTC5nZXRQYXRoKCk7Ci0JCVN0cmluZyBsb2NhdGlvbiA9IHBhdGggKyBmaWxlcGF0aDsKLQkJRmlsZSByZXN1bHQgPSBuZXcgRmlsZShsb2NhdGlvbik7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBSZWFkZXIgZ2V0VGVzdFJlYWRlcihTdHJpbmcgZmlsZXBhdGgpIHRocm93cyBGaWxlTm90Rm91bmRFeGNlcHRpb24gewotCQlVUkwgaW5zdGFsbFVSTCA9IGdldEluc3RhbGxMb2NhdGlvbigpOwotCQkvLyBTdHJpbmcgc2NoZW1lID0gaW5zdGFsbFVSTC5nZXRQcm90b2NvbCgpOwotCQlTdHJpbmcgcGF0aCA9IGluc3RhbGxVUkwuZ2V0UGF0aCgpOwotCQlTdHJpbmcgbG9jYXRpb24gPSBwYXRoICsgZmlsZXBhdGg7Ci0JCVJlYWRlciByZXN1bHQgPSBuZXcgRmlsZVJlYWRlcihsb2NhdGlvbik7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgd29ya3NwYWNlIGluc3RhbmNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVdvcmtzcGFjZSBnZXRXb3Jrc3BhY2UoKSB7Ci0JCXJldHVybiBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCk7Ci0JfQotCi0JLyoqCi0JICogVGhlIGNvbnN0cnVjdG9yLgotCSAqLwotCXB1YmxpYyBDU1NFbmNvZGluZ1Rlc3RzUGx1Z2luKCkgewotCQlzdXBlcigpOwotCQlwbHVnaW4gPSB0aGlzOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwKLQkgKi8KLQlwdWJsaWMgUmVzb3VyY2VCdW5kbGUgZ2V0UmVzb3VyY2VCdW5kbGUoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy90ZXN0cy9lbmNvZGluZy9jc3MvQ1NTRW5jb2RpbmdUZXN0ZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdGVzdHMvZW5jb2RpbmcvY3NzL0NTU0VuY29kaW5nVGVzdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0ZTQ4Y2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy90ZXN0cy9lbmNvZGluZy9jc3MvQ1NTRW5jb2RpbmdUZXN0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy5jc3M7Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuQ2hhcnNldDsKLWltcG9ydCBqYXZhLm5pby5jaGFyc2V0LkNoYXJzZXREZWNvZGVyOwotaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuQ29kaW5nRXJyb3JBY3Rpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwuY29udGVudHR5cGUuQ1NTUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcuQ1NTRW5jb2RpbmdUZXN0c1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuRW5jb2RpbmdNZW1lbnRvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5JUmVzb3VyY2VDaGFyc2V0RGV0ZWN0b3I7Ci0KLXB1YmxpYyBjbGFzcyBDU1NFbmNvZGluZ1Rlc3RlciBleHRlbmRzIFRlc3RDYXNlIHsKLQotCS8qKgotCSAqIEVuc3VyZXMgdGhhdCBhbiBJbnB1dFN0cmVhbSBoYXMgbWFyay9yZXNldCBzdXBwb3J0LgotCSAqLwotCXByaXZhdGUgc3RhdGljIElucHV0U3RyZWFtIGdldE1hcmtTdXBwb3J0ZWRTdHJlYW0oSW5wdXRTdHJlYW0gb3JpZ2luYWwpIHsKLQkJaWYgKG9yaWdpbmFsID09IG51bGwpCi0JCQlyZXR1cm4gbnVsbDsKLQkJaWYgKG9yaWdpbmFsLm1hcmtTdXBwb3J0ZWQoKSkKLQkJCXJldHVybiBvcmlnaW5hbDsKLQkJcmV0dXJuIG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKG9yaWdpbmFsKTsKLQl9Ci0JcHJpdmF0ZSBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZURpciA9ICJjc3MvIjsKLQkvLyBwcml2YXRlIGZpbmFsIFN0cmluZyBwbHVnaW5Mb2NhdGlvbiA9Ci0JLy8gVGVzdHNQbHVnaW4uZ2V0SW5zdGFsbExvY2F0aW9uKCkudG9TdHJpbmcoKTsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBmaWxlSG9tZSA9ICJ0ZXN0ZmlsZXMvIjsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBmaWxlTG9jYXRpb24gPSBmaWxlSG9tZSArIGZpbGVEaXI7Ci0JcHJpdmF0ZSBpbnQgUkVBRF9CVUZGRVJfU0laRSA9IDgwMDA7Ci0KLQlwcml2YXRlIHZvaWQgZG9UZXN0RmlsZVN0cmVhbShTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyBleHBlY3RlZElBTkFFbmNvZGluZywgSVJlc291cmNlQ2hhcnNldERldGVjdG9yIGRldGVjdG9yKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlGaWxlIGZpbGUgPSBDU1NFbmNvZGluZ1Rlc3RzUGx1Z2luLmdldFRlc3RGaWxlKGZpbGVuYW1lKTsKLQkJaWYgKCFmaWxlLmV4aXN0cygpKQotCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbihmaWxlbmFtZSArICIgd2FzIG5vdCBmb3VuZCIpOwotCQlJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oZmlsZSk7Ci0JCS8vIElucHV0U3RyZWFtIGluU3RyZWFtID0gZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKGZpbGVuYW1lKTsKLQkJSW5wdXRTdHJlYW0gaXN0cmVhbSA9IGdldE1hcmtTdXBwb3J0ZWRTdHJlYW0oaW5wdXRTdHJlYW0pOwotCQl0cnkgewotCQkJZGV0ZWN0b3Iuc2V0KGlzdHJlYW0pOwotCQkJRW5jb2RpbmdNZW1lbnRvIGVuY29kaW5nTWVtZW50byA9ICgoQ1NTUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKWRldGVjdG9yKS5nZXRFbmNvZGluZ01lbWVudG8oKTsKLQotCQkJU3RyaW5nIGZvdW5kSUFOQUVuY29kaW5nID0gbnVsbDsKLQotCQkJaWYgKGVuY29kaW5nTWVtZW50byAhPSBudWxsKSB7Ci0JCQkJZm91bmRJQU5BRW5jb2RpbmcgPSBlbmNvZGluZ01lbWVudG8uZ2V0RGV0ZWN0ZWRDaGFyc2V0TmFtZSgpOwotCQkJfQotCQkJLy8gSSBjaGFuZ2VkIG1hbnkgImVxdWFscyIgdG8gImVxdWFsc0lnbm9yZUNhc2UiIG9uIDExLzQvMjAwMiwKLQkJCS8vIHNpbmNlCi0JCQkvLyBzb21lIGlzc3VlcyB3aXRoIFNISUZUX0pJUyB2cy4gU2hpZnRfSklTIHdlcmUgY2F1c2luZyBmYWlsdXJlcy4KLQkJCS8vIFdlIGRvIHdhbnQgdG8gYmUgdG9sZXJhbnQgb24gaW5wdXQsIGFuZCBhY2NlcHQgZWl0aGVyLCBidXQgSQotCQkJLy8gdGhpbmsKLQkJCS8vIHRoYXQgU3VwcG9ydGVkSmF2YUVuY29kaW5ncyBuZWVkcyB0byBiZSBjaGFuZ2VkIHRvICJyZWNvbW1lbmQiCi0JCQkvLyBTaGlmdF9KSVMuCi0JCQlib29sZWFuIGV4cGVjdGVkSUFOQVJlc3VsdCA9IGZhbHNlOwotCQkJaWYgKGV4cGVjdGVkSUFOQUVuY29kaW5nID09IG51bGwpIHsKLQkJCQlleHBlY3RlZElBTkFSZXN1bHQgPSBleHBlY3RlZElBTkFFbmNvZGluZyA9PSBmb3VuZElBTkFFbmNvZGluZzsKLQkJCX0KLQkJCWVsc2UgewotCQkJCWV4cGVjdGVkSUFOQVJlc3VsdCA9IGV4cGVjdGVkSUFOQUVuY29kaW5nLmVxdWFsc0lnbm9yZUNhc2UoZm91bmRJQU5BRW5jb2RpbmcpOwotCQkJfQotCi0JCQlhc3NlcnRUcnVlKCJlbmNvZGluZyB0ZXN0IGZpbGUgIiArIGZpbGVuYW1lICsgIiBleHBlY3RlZDogIiArIGV4cGVjdGVkSUFOQUVuY29kaW5nICsgIiBmb3VuZDogIiArIGZvdW5kSUFOQUVuY29kaW5nLCBleHBlY3RlZElBTkFSZXN1bHQpOwotCQkJLy8gYSB2ZXJ5IHNpbXBsZSByZWFkIHRlc3QgLi4uIHdpbGwgY2F1c2UgSlVuaXQgZXJyb3IgKG5vdCBmYWlsKQotCQkJLy8gaWYKLQkJCS8vIHRocm93cyBleGNlcHRpb24uCi0JCQlpZiAoZm91bmRJQU5BRW5jb2RpbmcgIT0gbnVsbCkgewotCQkJCWVuc3VyZUNhblJlYWQoZmlsZW5hbWUsIGZvdW5kSUFOQUVuY29kaW5nLCBpc3RyZWFtKTsKLQkJCX0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChpc3RyZWFtICE9IG51bGwpIHsKLQkJCQlpc3RyZWFtLmNsb3NlKCk7Ci0JCQl9Ci0JCQlpZiAoaW5wdXRTdHJlYW0gIT0gbnVsbCkgewotCQkJCWlucHV0U3RyZWFtLmNsb3NlKCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBUaGlzIG1ldGhvZCBqdXN0IHJlYWRzIHRvIHN0cmVhbSwgdG8gYmUgc3VyZSBpdCBjYW4gYmUgcmVhZCBwZXIKLQkgKiBlbmNvZGluZywgd2l0aG91dCBleGNlcHRpb24uCi0JICovCi0JcHJpdmF0ZSB2b2lkIGVuc3VyZUNhblJlYWQoU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgZW5jb2RpbmcsIElucHV0U3RyZWFtIGlucHV0U3RyZWFtKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlDaGFyc2V0IGNoYXJzZXQgPSBDaGFyc2V0LmZvck5hbWUoZW5jb2RpbmcpOwotCQlDaGFyc2V0RGVjb2RlciBjaGFyc2V0RGVjb2RlciA9IGNoYXJzZXQubmV3RGVjb2RlcigpOwotCQljaGFyc2V0RGVjb2Rlci5vbk1hbGZvcm1lZElucHV0KENvZGluZ0Vycm9yQWN0aW9uLlJFUE9SVCk7Ci0JCWNoYXJzZXREZWNvZGVyLm9uVW5tYXBwYWJsZUNoYXJhY3RlcihDb2RpbmdFcnJvckFjdGlvbi5SRVBPUlQpOwotCi0JCUlucHV0U3RyZWFtUmVhZGVyIHJlYWRlciA9IG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpbnB1dFN0cmVhbSwgY2hhcnNldERlY29kZXIpOwotCQlTdHJpbmdCdWZmZXIgc3RyaW5nQnVmZmVyID0gcmVhZElucHV0U3RyZWFtKHJlYWRlcik7Ci0JCWlmIChERUJVRykgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oZmlsZW5hbWUpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKHN0cmluZ0J1ZmZlci50b1N0cmluZygpKTsKLQkJfQotCX0KLQotCXByaXZhdGUgU3RyaW5nQnVmZmVyIHJlYWRJbnB1dFN0cmVhbShSZWFkZXIgcmVhZGVyKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCi0JCVN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWludCBudW1SZWFkID0gMDsKLQkJY2hhciB0QnVmZltdID0gbmV3IGNoYXJbUkVBRF9CVUZGRVJfU0laRV07Ci0JCXdoaWxlICgobnVtUmVhZCA9IHJlYWRlci5yZWFkKHRCdWZmLCAwLCB0QnVmZi5sZW5ndGgpKSAhPSAtMSkgewotCQkJYnVmZmVyLmFwcGVuZCh0QnVmZiwgMCwgbnVtUmVhZCk7Ci0JCX0KLQkJcmV0dXJuIGJ1ZmZlcjsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QmVzdENhc2UoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAibm9uU3RhbmRhcmQuY3NzIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgIklTTy04ODU5LTYiLCBuZXcgQ1NTUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdEVtcHR5RmlsZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJlbXB0eUZpbGUuY3NzIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgbnVsbCwgbmV3IENTU1Jlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RVVDSlAoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiZW5jb2RpbmdfdGVzdF9ldWNqcC5jc3MiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCAiRVVDLUpQIiwgbmV3IENTU1Jlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SklTKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgImVuY29kaW5nX3Rlc3RfamlzLmNzcyI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsICJJU08tMjAyMi1KUCIsIG5ldyBDU1NSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5vRW5jb2RpbmcoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAibm9FbmNvZGluZy5jc3MiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCBudWxsLCBuZXcgQ1NTUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3Rub25TdGFuZGFyZElsbEZvcm1lZCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJub25TdGFuZGFyZElsbEZvcm1lZC5jc3MiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCAiSVNPLTg4NTktNiIsIG5ldyBDU1NSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdG5vblN0YW5kYXJkSWxsRm9ybWVkMigpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJub25TdGFuZGFyZElsbEZvcm1lZDIuY3NzIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgIklTTy04ODU5LTYiLCBuZXcgQ1NTUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTaGlmdEpJUygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJlbmNvZGluZ190ZXN0X3NqaXMuY3NzIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgIlNISUZUX0pJUyIsIG5ldyBDU1NSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RVVEYxNmJlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInV0ZjE2YmUuY3NzIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgIlVURi0xNkJFIiwgbmV3IENTU1Jlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFVURjE2bGUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidXRmMTZsZS5jc3MiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCAiVVRGLTE2TEUiLCBuZXcgQ1NTUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0VVRGMTZiZU1hbGZvcm1lZCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ1dGYxNmJlTWFsZm9ybWVkLmNzcyI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsICJVVEYtMTZCRSIsIG5ldyBDU1NSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RVVEYxNmxlTWFsZm9ybWVkKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInV0ZjE2bGVNYWxmb3JtZWQuY3NzIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgIlVURi0xNkxFIiwgbmV3IENTU1Jlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFVURjE2Qk9NKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInV0ZjE2Qk9NLmNzcyI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsICJVVEYtMTYiLCBuZXcgQ1NTUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy90ZXN0cy9lbmNvZGluZy9jc3MvQ1NTSGVhZFRva2VuaXplclRlc3Rlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy90ZXN0cy9lbmNvZGluZy9jc3MvQ1NTSGVhZFRva2VuaXplclRlc3Rlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YWZmNmE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdGVzdHMvZW5jb2RpbmcvY3NzL0NTU0hlYWRUb2tlbml6ZXJUZXN0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy5jc3M7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLmNvbnRlbnR0eXBlLkNTU0hlYWRUb2tlbml6ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLmNvbnRlbnR0eXBlLkNTU0hlYWRUb2tlbml6ZXJDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLmNvbnRlbnR0eXBlLkhlYWRQYXJzZXJUb2tlbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLkNTU0VuY29kaW5nVGVzdHNQbHVnaW47Ci0KLXB1YmxpYyBjbGFzcyBDU1NIZWFkVG9rZW5pemVyVGVzdGVyIGV4dGVuZHMgVGVzdENhc2UgewotCXByaXZhdGUgYm9vbGVhbiBERUJVRyA9IGZhbHNlOwotCXByaXZhdGUgU3RyaW5nIGZjaGFyc2V0OwotCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVEaXIgPSAiY3NzLyI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZUhvbWUgPSAidGVzdGZpbGVzLyI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZUxvY2F0aW9uID0gdGhpcy5maWxlSG9tZSArIHRoaXMuZmlsZURpcjsKLQotCXByaXZhdGUgdm9pZCBkb1Rlc3RGaWxlKFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIGV4cGVjdGVkTmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgZXhwZWN0ZWROYW1lLCBudWxsKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgZG9UZXN0RmlsZShTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyBleHBlY3RlZE5hbWUsIFN0cmluZyBmaW5hbFRva2VuVHlwZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJQ1NTSGVhZFRva2VuaXplciB0b2tlbml6ZXIgPSBudWxsOwotCQlSZWFkZXIgZmlsZVJlYWRlciA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlpZiAodGhpcy5ERUJVRykgewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiICAgICAgICIgKyBmaWxlbmFtZSk7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCQl9Ci0JCQlmaWxlUmVhZGVyID0gQ1NTRW5jb2RpbmdUZXN0c1BsdWdpbi5nZXRUZXN0UmVhZGVyKGZpbGVuYW1lKTsKLQkJCXRva2VuaXplciA9IG5ldyBDU1NIZWFkVG9rZW5pemVyKGZpbGVSZWFkZXIpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkVycm9yIG9wZW5pbmcgZmlsZSBcIiIgKyBmaWxlbmFtZSArICJcIiIpOwotCQkJdGhyb3cgZTsKLQkJfQotCi0JCUhlYWRQYXJzZXJUb2tlbiByZXN1bHRUb2tlbiA9IG51bGw7Ci0JCUhlYWRQYXJzZXJUb2tlbiB0b2tlbiA9IHBhcnNlSGVhZGVyKHRva2VuaXplcik7Ci0JCVN0cmluZyByZXN1bHRWYWx1ZSA9IHRoaXMuZmNoYXJzZXQ7Ci0JCWZpbGVSZWFkZXIuY2xvc2UoKTsKLQkJaWYgKGZpbmFsVG9rZW5UeXBlICE9IG51bGwpIHsKLQkJCWFzc2VydFRydWUoImRpZCBub3QgZW5kIGFzIGV4cGVjdGVkLiBmb3VuZDogICIgKyB0b2tlbi5nZXRUeXBlKCksIGZpbmFsVG9rZW5UeXBlLmVxdWFscyh0b2tlbi5nZXRUeXBlKCkpKTsKLQkJfQotCQllbHNlIHsKLQkJCWlmIChleHBlY3RlZE5hbWUgPT0gbnVsbCkgewotCQkJCWFzc2VydFRydWUoImV4cGVjdGVkIG5vIGVuY29kaW5nLCBidXQgZm91bmQ6ICIgKyByZXN1bHRWYWx1ZSwgcmVzdWx0VG9rZW4gPT0gbnVsbCk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlhc3NlcnRUcnVlKCJleHBlY3RlZCAiICsgZXhwZWN0ZWROYW1lICsgIiBidXQgZm91bmQgIiArIHJlc3VsdFZhbHVlLCBleHBlY3RlZE5hbWUuZXF1YWxzKHJlc3VsdFZhbHVlKSk7Ci0JCQl9Ci0JCX0KLQotCX0KLQotCXByaXZhdGUgYm9vbGVhbiBpc0xlZ2FsU3RyaW5nKFN0cmluZyB0b2tlblR5cGUpIHsKLQkJYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLQkJaWYgKHRva2VuVHlwZSA9PSBudWxsKSB7Ci0JCQlyZXN1bHQgPSBmYWxzZTsKLQkJfQotCQllbHNlIHsKLQkJCXJlc3VsdCA9IHRva2VuVHlwZS5lcXVhbHMoRW5jb2RpbmdQYXJzZXJDb25zdGFudHMuU3RyaW5nVmFsdWUpIHx8IHRva2VuVHlwZS5lcXVhbHMoRW5jb2RpbmdQYXJzZXJDb25zdGFudHMuVW5EZWxpbWl0ZWRTdHJpbmdWYWx1ZSkgfHwgdG9rZW5UeXBlLmVxdWFscyhFbmNvZGluZ1BhcnNlckNvbnN0YW50cy5JbnZhbGlkVGVybWluYXRlZFN0cmluZ1ZhbHVlKSB8fCB0b2tlblR5cGUuZXF1YWxzKEVuY29kaW5nUGFyc2VyQ29uc3RhbnRzLkludmFsaWRUZXJtaW50YXRlZFVuRGVsaW1pdGVkU3RyaW5nVmFsdWUpOwotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JLyoqCi0JICogR2l2ZSdzIHByaW9yaXR5IHRvIGVuY29kaW5nIHZhbHVlLCBpZiBmb3VuZCBlbHNlLCBsb29rcyBmb3IgY29udGVudFR5cGUKLQkgKiB2YWx1ZTsKLQkgKi8KLQlwcml2YXRlIEhlYWRQYXJzZXJUb2tlbiBwYXJzZUhlYWRlcihDU1NIZWFkVG9rZW5pemVyIHRva2VuaXplcikgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSGVhZFBhcnNlclRva2VuIHRva2VuID0gbnVsbDsKLQkJSGVhZFBhcnNlclRva2VuIGZpbmFsVG9rZW4gPSBudWxsOwotCQlkbyB7Ci0JCQl0b2tlbiA9IHRva2VuaXplci5nZXROZXh0VG9rZW4oKTsKLQkJCVN0cmluZyB0b2tlblR5cGUgPSB0b2tlbi5nZXRUeXBlKCk7Ci0JCQlpZihjYW5IYW5kbGVBc1VuaWNvZGVTdHJlYW0odG9rZW5UeXBlKSkgewotCi0JCQl9Ci0JCQlpZiAodG9rZW5UeXBlID09IENTU0hlYWRUb2tlbml6ZXJDb25zdGFudHMuQ0hBUlNFVF9SVUxFKSB7Ci0JCQkJaWYgKHRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpIHsKLQkJCQkJSGVhZFBhcnNlclRva2VuIHZhbHVlVG9rZW4gPSB0b2tlbml6ZXIuZ2V0TmV4dFRva2VuKCk7Ci0JCQkJCVN0cmluZyB2YWx1ZVRva2VuVHlwZSA9IHZhbHVlVG9rZW4uZ2V0VHlwZSgpOwotCQkJCQlpZiAoaXNMZWdhbFN0cmluZyh2YWx1ZVRva2VuVHlwZSkpIHsKLQkJCQkJCXRoaXMuZmNoYXJzZXQgPSB2YWx1ZVRva2VuLmdldFRleHQoKTsKLQotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXdoaWxlICh0b2tlbml6ZXIuaGFzTW9yZVRva2VucygpKTsKLQkJZmluYWxUb2tlbiA9IHRva2VuOwotCQlyZXR1cm4gZmluYWxUb2tlbjsKLQotCX0KLQkKLQlwcml2YXRlIGJvb2xlYW4gY2FuSGFuZGxlQXNVbmljb2RlU3RyZWFtKFN0cmluZyB0b2tlblR5cGUpIHsKLQkJYm9vbGVhbiBjYW5IYW5kbGVBc1VuaWNvZGUgPSBmYWxzZTsKLQkJaWYgKHRva2VuVHlwZSA9PSBFbmNvZGluZ1BhcnNlckNvbnN0YW50cy5VVEY4M0J5dGVCT00pIHsKLQkJCWNhbkhhbmRsZUFzVW5pY29kZSA9IHRydWU7Ci0JCQl0aGlzLmZjaGFyc2V0ID0gIlVURi04IjsgLy8kTk9OLU5MUy0xJAotCQl9Ci0JCWVsc2UgaWYgKHRva2VuVHlwZSA9PSBFbmNvZGluZ1BhcnNlckNvbnN0YW50cy5VVEYxNkJFIHx8IHRva2VuVHlwZSA9PSBFbmNvZGluZ1BhcnNlckNvbnN0YW50cy5VVEYxNkxFKSB7Ci0JCQljYW5IYW5kbGVBc1VuaWNvZGUgPSB0cnVlOwotCQkJdGhpcy5mY2hhcnNldCA9ICJVVEYtMTYiOyAvLyROT04tTkxTLTEkCi0JCX0KLQkJcmV0dXJuIGNhbkhhbmRsZUFzVW5pY29kZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QmVzdENhc2UoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSB0aGlzLmZpbGVMb2NhdGlvbiArICJub25TdGFuZGFyZC5jc3MiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiSVNPLTg4NTktNiIpOwotCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdEVtcHR5RmlsZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IHRoaXMuZmlsZUxvY2F0aW9uICsgImVtcHR5RmlsZS5jc3MiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBfdGVzdEVVQ0pQKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gdGhpcy5maWxlTG9jYXRpb24gKyAiZW5jb2RpbmdfdGVzdF9ldWNqcC5jc3MiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiRVVDLUpQIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEpJUygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IHRoaXMuZmlsZUxvY2F0aW9uICsgImVuY29kaW5nX3Rlc3RfamlzLmNzcyI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJJU08tMjAyMi1KUCIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3ROb0VuY29kaW5nKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gdGhpcy5maWxlTG9jYXRpb24gKyAibm9FbmNvZGluZy5jc3MiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0bm9uU3RhbmRhcmRJbGxGb3JtZWQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSB0aGlzLmZpbGVMb2NhdGlvbiArICJub25TdGFuZGFyZElsbEZvcm1lZC5jc3MiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiSVNPLTg4NTktNiIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3Rub25TdGFuZGFyZElsbEZvcm1lZDIoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSB0aGlzLmZpbGVMb2NhdGlvbiArICJub25TdGFuZGFyZElsbEZvcm1lZDIuY3NzIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIklTTy04ODU5LTYiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBfdGVzdFNoaWZ0SklTKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gdGhpcy5maWxlTG9jYXRpb24gKyAiZW5jb2RpbmdfdGVzdF9zamlzLmNzcyI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJTSElGVF9KSVMiKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFVURjE2YmUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidXRmMTZiZS5jc3MiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiVVRGLTE2QkUiKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFVURjE2bGUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidXRmMTZsZS5jc3MiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiVVRGLTE2TEUiKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFVURjE2YmVNYWxmb3JtZWQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidXRmMTZiZU1hbGZvcm1lZC5jc3MiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiVVRGLTE2QkUiKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFVURjE2bGVNYWxmb3JtZWQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidXRmMTZsZU1hbGZvcm1lZC5jc3MiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiVVRGLTE2TEUiKTsKLQl9Ci0JCi0JLyoKLQkJc3VuLmlvLk1hbGZvcm1lZElucHV0RXhjZXB0aW9uCi0JCWF0IHN1bi5pby5CeXRlVG9DaGFyVVRGOC5jb252ZXJ0KEJ5dGVUb0NoYXJVVEY4LmphdmE6MjYyKQotCQlhdCBzdW4ubmlvLmNzLlN0cmVhbURlY29kZXIkQ29udmVydGVyU0QuY29udmVydEludG8oU3RyZWFtRGVjb2Rlci5qYXZhOjMxNCkKLQkJYXQgc3VuLm5pby5jcy5TdHJlYW1EZWNvZGVyJENvbnZlcnRlclNELmltcGxSZWFkKFN0cmVhbURlY29kZXIuamF2YTozNjQpCi0JCWF0IHN1bi5uaW8uY3MuU3RyZWFtRGVjb2Rlci5yZWFkKFN0cmVhbURlY29kZXIuamF2YToyNTApCi0JCWF0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXIucmVhZChJbnB1dFN0cmVhbVJlYWRlci5qYXZhOjIxMikKLQkJYXQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLmNvbnRlbnR0eXBlLkNTU0hlYWRUb2tlbml6ZXIueXlfYWR2YW5jZShDU1NIZWFkVG9rZW5pemVyLmphdmE6MzM3KQotCQlhdCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwuY29udGVudHR5cGUuQ1NTSGVhZFRva2VuaXplci5wcmltR2V0TmV4dFRva2VuKENTU0hlYWRUb2tlbml6ZXIuamF2YTo0NzApCi0JCWF0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5jb250ZW50dHlwZS5DU1NIZWFkVG9rZW5pemVyLmdldE5leHRUb2tlbihDU1NIZWFkVG9rZW5pemVyLmphdmE6MjI5KQotCQlhdCBvcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLmNzcy5DU1NIZWFkVG9rZW5pemVyVGVzdGVyLnBhcnNlSGVhZGVyKENTU0hlYWRUb2tlbml6ZXJUZXN0ZXIuamF2YTo4OCkKLQkJYXQgb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy5jc3MuQ1NTSGVhZFRva2VuaXplclRlc3Rlci5kb1Rlc3RGaWxlKENTU0hlYWRUb2tlbml6ZXJUZXN0ZXIuamF2YTo1MikKLQkJYXQgb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy5jc3MuQ1NTSGVhZFRva2VuaXplclRlc3Rlci5kb1Rlc3RGaWxlKENTU0hlYWRUb2tlbml6ZXJUZXN0ZXIuamF2YTozMSkKLQkJYXQgb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy5jc3MuQ1NTSGVhZFRva2VuaXplclRlc3Rlci50ZXN0VVRGMTZCT00oQ1NTSGVhZFRva2VuaXplclRlc3Rlci5qYXZhOjE4NikKLQkqLwotCi0JcHVibGljIHZvaWQgdGVzdFVURjE2Qk9NKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJLy8gaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTI0MzczNQotLy8JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ1dGYxNkJPTS5jc3MiOwotLy8JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJVVEYtMTYiKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3Rlc3RzL2VuY29kaW5nL2Nzcy9FbmNvZGluZ1BhcnNlckNvbnN0YW50cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy90ZXN0cy9lbmNvZGluZy9jc3MvRW5jb2RpbmdQYXJzZXJDb25zdGFudHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQxNDRhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3Rlc3RzL2VuY29kaW5nL2Nzcy9FbmNvZGluZ1BhcnNlckNvbnN0YW50cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIEplbnMgTHVrb3dza2kvSW5ub29wcmFjdCAtIGluaXRpYWwgcmVuYW1pbmcvcmVzdHJ1Y3R1cmluZwotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcuY3NzOwotCi0KLXB1YmxpYyBpbnRlcmZhY2UgRW5jb2RpbmdQYXJzZXJDb25zdGFudHMgewotCi0JZmluYWwgU3RyaW5nIEVPRiA9ICJFT0YiOyAvLyROT04tTkxTLTEkCi0JZmluYWwgU3RyaW5nIEludmFsaWRUZXJtaW5hdGVkU3RyaW5nVmFsdWUgPSAiSW52YWxpZFRlcm1pbmF0ZWRTdHJpbmdWYWx1ZSI7IC8vJE5PTi1OTFMtMSQKLQlmaW5hbCBTdHJpbmcgSW52YWxpZFRlcm1pbnRhdGVkVW5EZWxpbWl0ZWRTdHJpbmdWYWx1ZSA9ICJJbnZhbGlkVGVybWludGF0ZWRVbkRlbGltaXRlZFN0cmluZ1ZhbHVlIjsgLy8kTk9OLU5MUy0xJAotCWZpbmFsIFN0cmluZyBNQVhfQ0hBUlNfUkVBQ0hFRCA9ICJNQVhfQ0hBUlNfUkVBQ0hFRCI7IC8vJE5PTi1OTFMtMSQKLQlmaW5hbCBTdHJpbmcgU3RyaW5nVmFsdWUgPSAic3RydmFsIjsgLy8kTk9OLU5MUy0xJAotCWZpbmFsIFN0cmluZyBVbkRlbGltaXRlZFN0cmluZ1ZhbHVlID0gIlVuRGVsaW1pdGVkU3RyaW5nVmFsdWUiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIGZpbmFsIFN0cmluZyBVVEYxNkJFID0gIlVURjE2QkUiOyAvLyROT04tTkxTLTEkCi0JcHVibGljIGZpbmFsIFN0cmluZyBVVEYxNkxFID0gIlVURjE2TEUiOyAvLyROT04tTkxTLTEkCi0KLQotCXB1YmxpYyBmaW5hbCBTdHJpbmcgVVRGODNCeXRlQk9NID0gIlVURjgzQnl0ZUJPTSI7IC8vJE5PTi1OTFMtMSQKLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy90ZXN0cy9lbmNvZGluZy9jc3MvVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uRm9yQ1NTLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3Rlc3RzL2VuY29kaW5nL2Nzcy9UZXN0Q29udGVudFR5cGVEZXRlY3Rpb25Gb3JDU1MuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTE1ZDE1OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3Rlc3RzL2VuY29kaW5nL2Nzcy9UZXN0Q29udGVudFR5cGVEZXRlY3Rpb25Gb3JDU1MuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLmNzczsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnJlYWQuVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uOwotCi1wdWJsaWMgY2xhc3MgVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uRm9yQ1NTIGV4dGVuZHMgVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uIHsKLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5jc3Nzb3VyY2UiLCAidGVzdGZpbGVzL2Nzcy9ub25TdGFuZGFyZElsbEZvcm1lZC5jc3MiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMDEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5jc3Nzb3VyY2UiLCAidGVzdGZpbGVzL2Nzcy9lbXB0eUZpbGUuY3NzIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDAyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuY3Nzc291cmNlIiwgInRlc3RmaWxlcy9jc3MvZW5jb2RpbmdfdGVzdF9ldWNqcC5jc3MiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMDMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5jc3Nzb3VyY2UiLCAidGVzdGZpbGVzL2Nzcy9lbmNvZGluZ190ZXN0X2ppcy5jc3MiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5jc3Nzb3VyY2UiLCAidGVzdGZpbGVzL2Nzcy9lbmNvZGluZ190ZXN0X3NqaXMuY3NzIiwgbnVsbCk7Ci0JfQotCi0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5jc3Nzb3VyY2UiLCAidGVzdGZpbGVzL2Nzcy9ub0VuY29kaW5nLmNzcyIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmNzc3NvdXJjZSIsICJ0ZXN0ZmlsZXMvY3NzL25vblN0YW5kYXJkLmNzcyIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmNzc3NvdXJjZSIsICJ0ZXN0ZmlsZXMvY3NzL25vblN0YW5kYXJkSWxsRm9ybWVkMi5jc3MiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0VVRGMTZiZSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmNzc3NvdXJjZSIsICJ0ZXN0ZmlsZXMvY3NzL3V0ZjE2YmUuY3NzIiwgbnVsbCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RVVEYxNmxlKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuY3Nzc291cmNlIiwgInRlc3RmaWxlcy9jc3MvdXRmMTZsZS5jc3MiLCBudWxsKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFVURjE2YmVNYWxmb3JtZWQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5jc3Nzb3VyY2UiLCAidGVzdGZpbGVzL2Nzcy91dGYxNmJlTWFsZm9ybWVkLmNzcyIsIG51bGwpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0VVRGMTZsZU1hbGZvcm1lZCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmNzc3NvdXJjZSIsICJ0ZXN0ZmlsZXMvY3NzL3V0ZjE2bGVNYWxmb3JtZWQuY3NzIiwgbnVsbCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RVVEYxNkJPTSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmNzc3NvdXJjZSIsICJ0ZXN0ZmlsZXMvY3NzL3V0ZjE2Qk9NLmNzcyIsIG51bGwpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZDY1MzM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvdGVzdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLQotPHByb2plY3QKLSAgICBuYW1lPSJ0ZXN0c3VpdGUiCi0gICAgZGVmYXVsdD0icnVuIgotICAgIGJhc2VkaXI9Ii4iPgotICAgIAotICAgIDwhLS0gVGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGlzIHNjcmlwdCAtLT4KLSAgICA8IS0tICR7ZWNsaXBzZS1ob21lfSAgIC0tPgotICAgIDwhLS0gJHtidWlsZERpcmVjdG9yeX0gIC0tPgotICAgIDwhLS0gJHtidWlsZExhYmVsfSAgICAgICAgLS0+Ci0KLSAgICA8IS0tIHNob3VsZCBiZSBsaXR0bGUgbmVlZCB0byBjaGFuZ2Ugd2hhdCdzIGFib3ZlICAtLT4KLQotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJwbHVnaW4tbmFtZSIKLSAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmciIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9ImNsYXNzbmFtZSIKLSAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcuQ1NTRW5jb2RpbmdUZXN0U3VpdGUiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9InRlc3RUeXBlIgotICAgICAgICB2YWx1ZT0iY29yZS10ZXN0IiAvPgotCi0gICAgPCEtLSBzaG91bGQgYmUgbGl0dGxlIG5lZWQgdG8gY2hhbmdlIHdoYXQncyBiZWxvdyAtLT4KLQotICAgIDxlY2hvIG1lc3NhZ2U9ImJhc2VkaXI6ICR7YmFzZWRpcn0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iZWNsaXBzZS1ob21lOiAke2VjbGlwc2UtaG9tZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iYnVpbGREaXJlY3Rvcnk6ICR7YnVpbGREaXJlY3Rvcnl9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9InBsdWdpbi1uYW1lOiAke3BsdWdpbi1uYW1lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJjbGFzc25hbWU6ICR7Y2xhc3NuYW1lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJ0ZXN0VHlwZSAke3Rlc3RUeXBlfSIgLz4KLQotCi0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9ImxpYnJhcnktZmlsZSIKLSAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4xLjAvbGlicmFyeS54bWwiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9IndvcmtzcGFjZSIKLSAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9qdW5pdHdvcmtzcGFjZXMvJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgIAotICAgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4KLSAgICA8IS0tIGFsbCB0ZXN0cyB0aGF0IGFyZSB0byBiZSBydW4uIEluaXRpYWxpemF0aW9uIGZvciBpbmRpdmlkdWFsIHRlc3RzIC0tPgotICAgIDwhLS0gc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIC0tPgotICAgIDx0YXJnZXQgbmFtZT0iaW5pdCI+Ci0gICAgICAgIDx0c3RhbXAgLz4KLSAgICAgICAgPGRlbGV0ZT4KLSAgICAgICAgICAgIDxmaWxlc2V0Ci0gICAgICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iCi0gICAgICAgICAgICAgICAgaW5jbHVkZXM9IiR7cGx1Z2luLW5hbWV9Lip4bWwiIC8+Ci0gICAgICAgIDwvZGVsZXRlPgotICAgICAgICA8IS0tIG1ha2UgZGlyZWN0b3J5LCBpbiBjYXNlIHBhdGggZG9lc24ndCBleGlzdCB5ZXQgLS0+Ci0gICAgICAgIDxta2RpciBkaXI9IiR7d29ya3NwYWNlfSIgLz4KLSAgICAgICAgPCEtLSAgYnV0IGRlbGV0ZSB0byBtYWtlIHN1cmUgZnJlc2ggY29udGVudHMtLT4KLSAgICAgICAgPGRlbGV0ZQotICAgICAgICAgICAgZGlyPSIke3dvcmtzcGFjZX0iCi0gICAgICAgICAgICBxdWlldD0idHJ1ZSIgLz4KLQotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9InN1aXRlIj4KLQotICAgICAgICA8YW50Ci0gICAgICAgICAgICB0YXJnZXQ9IiR7dGVzdFR5cGV9IgotICAgICAgICAgICAgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iZGF0YS1kaXIiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7d29ya3NwYWNlfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9InBsdWdpbi1uYW1lIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImNsYXNzbmFtZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtjbGFzc25hbWV9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0icGx1Z2luLXBhdGgiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICA8L2FudD4KLQotICAgICAgICA8Y29weQotICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIgotICAgICAgICAgICAgZmlsZT0iJHt3b3Jrc3BhY2V9Ly5tZXRhZGF0YS8ubG9nIgotICAgICAgICAgICAgdG9maWxlPSIke2J1aWxkRGlyZWN0b3J5fS8ke2J1aWxkTGFiZWx9L3Rlc3RSZXN1bHRzL2NvbnNvbGVsb2dzLyR7cGx1Z2luLW5hbWV9LmNvbnNvbGVsb2cudHh0IiAvPgotCi0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGNvZGUgdG8gY2xlYW51cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBhZnRlciAtLT4KLSAgICA8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+Ci0gICAgPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgotICAgIDx0YXJnZXQgbmFtZT0iY2xlYW51cCI+Ci0gICAgICAgIDwhLS0gdXN1YWxseSBubyBuZWVkIHRvIGRlbGV0ZSB3b3Jrc3BhY2UgdW50aWwgbmV4dCBydW4sIGFuZCBsZWF2aW5nIGl0IGFsbG93cyBpbnNwZWN0aW9uIC0tPgotICAgICAgICA8IS0tIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIiAvPiAtLT4KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4KLSAgICA8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+Ci0gICAgPHRhcmdldAotICAgICAgICBuYW1lPSJydW4iCi0gICAgICAgIGRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+Ci0gICAgICAgIDxhbnQKLSAgICAgICAgICAgIHRhcmdldD0iY29sbGVjdCIKLSAgICAgICAgICAgIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLSAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImluY2x1ZGVzIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfS4qeG1sIiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0ib3V0cHV0LWZpbGUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIgLz4KLSAgICAgICAgPC9hbnQ+Ci0gICAgPC90YXJnZXQ+Ci0KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvZW1wdHlGaWxlLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9lbXB0eUZpbGUuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9lbXB0eUZpbGUuY3NzCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9lbmNvZGluZ190ZXN0X2V1Y2pwLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9lbmNvZGluZ190ZXN0X2V1Y2pwLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWUyNTZlNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvZW5jb2RpbmdfdGVzdF9ldWNqcC5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLUBjaGFyc2V0ICJFVUMtSlAiOw0KLQ0KLUJPRFkgew0KLQlmb250LWZhbWlseSA6ICKjzaPTIKPQpbSlt6XDpa8iOw0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvZW5jb2RpbmdfdGVzdF9qaXMuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL2VuY29kaW5nX3Rlc3RfamlzLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzg0NzY4Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvZW5jb2RpbmdfdGVzdF9qaXMuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1AY2hhcnNldCAiSVNPLTIwMjItSlAiOw0KLQ0KLUJPRFkgew0KLQlmb250LWZhbWlseSA6ICIbJEIjTSNTGyhCIBskQiNQJTQlNyVDJS8bKEIiOw0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvZW5jb2RpbmdfdGVzdF9zamlzLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9lbmNvZGluZ190ZXN0X3NqaXMuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTI5Y2RhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9lbmNvZGluZ190ZXN0X3NqaXMuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1AY2hhcnNldCAiU0hJRlRfSklTIjsNCi0NCi1CT0RZIHsNCi0JZm9udC1mYW1pbHkgOiAigmyCciCCb4NTg1aDYoNOIjsNCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL25vRW5jb2RpbmcuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL25vRW5jb2RpbmcuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmM2YwNmJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9ub0VuY29kaW5nLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLUJPRFkgew0KLQlmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsICJNUyBTYW5zIFNlcmlmIjsNCi0JdGV4dC1kZWNvcmF0aW9uOiBub25lOw0KLQliYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsNCi19DQotDQotVEQgew0KLQlmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiI7DQotCWZvbnQtc2l6ZTogMTJwdDsNCi0JY29sb3I6IGJsYWNrOw0KLQlmb250LXN0eWxlOiBub3JtYWw7DQotCXRleHQtYWxpZ246IGxlZnQ7DQotfQ0KLQ0KLVRIIHsNCi0JZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iOw0KLQlmb250LXNpemU6IDEycHQ7DQotCWNvbG9yOiBibGFjazsNCi0JZm9udC1zdHlsZTogbm9ybWFsOw0KLQlmb250LXdlaWdodDogYm9sZGVyOw0KLQl0ZXh0LWFsaWduOiBsZWZ0Ow0KLX0NCi0NCi1IMSB7DQotCWZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIjsNCi0JZm9udC1zaXplOiAxNHB0Ow0KLQljb2xvcjogYmxhY2s7DQotCWZvbnQtc3R5bGU6IG5vcm1hbDsNCi0JZm9udC13ZWlnaHQ6IGJvbGRlcjsNCi0JdGV4dC1hbGlnbjogY2VudGVyDQotfQ0KLQ0KLUgyIHsNCi0JZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iOw0KLQlmb250LXNpemU6IDEycHQ7DQotCWNvbG9yOiBibGFjazsNCi0JZm9udC1zdHlsZTogbm9ybWFsOw0KLQlmb250LXdlaWdodDogYm9sZGVyDQotfQ0KLQ0KLUgzIHsNCi0JZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iOw0KLQlmb250LXNpemU6IDEycHQ7DQotCWNvbG9yOiBibGFjazsNCi0JZm9udC1zdHlsZTogaXRhbGljICANCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL25vblN0YW5kYXJkLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9ub25TdGFuZGFyZC5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjOTk3ZWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL25vblN0YW5kYXJkLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotQGNoYXJzZXQgIklTTy04ODU5LTYiOw0KLQ0KLQ0KLQ0KLQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9ub25TdGFuZGFyZElsbEZvcm1lZC5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3Mvbm9uU3RhbmRhcmRJbGxGb3JtZWQuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMWE0ZTQ0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9ub25TdGFuZGFyZElsbEZvcm1lZC5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLUBjaGFyc2V0ICJJU08tODg1OS02Ow0KLQ0KLQ0KLQ0KLQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9ub25TdGFuZGFyZElsbEZvcm1lZDIuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL25vblN0YW5kYXJkSWxsRm9ybWVkMi5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzYzhhMWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL25vblN0YW5kYXJkSWxsRm9ybWVkMi5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLQ0KLQ0KLSAgICBAY2hhcnNldCAiSVNPLTg4NTktNiI7DQotDQotDQotDQotDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL3V0ZjE2Qk9NLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy91dGYxNkJPTS5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiYTMzODkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL3V0ZjE2Qk9NLmNzcworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy91dGYxNmJlLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy91dGYxNmJlLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjhjMDVkNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvdXRmMTZiZS5jc3MKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvdXRmMTZiZU1hbGZvcm1lZC5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvdXRmMTZiZU1hbGZvcm1lZC5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4NTI3YzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL3V0ZjE2YmVNYWxmb3JtZWQuY3NzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL3V0ZjE2bGUuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL3V0ZjE2bGUuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Yzk0ZmZiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy91dGYxNmxlLmNzcworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy91dGYxNmxlTWFsZm9ybWVkLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy91dGYxNmxlTWFsZm9ybWVkLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzdkZDY3OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvdXRmMTZsZU1hbGZvcm1lZC5jc3MKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlNzM5MzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS40Ii8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvLmN2c2lnbm9yZSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmI2MjFlNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLWJpbgotYmluLnByb2plY3QKLWJ1aWxkLnhtbAotZGV2LnByb3BlcnRpZXMKLW9yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHNfMS4wLjAuamFyCi1jc3N1aXRlc3RzLmphcgotdGVtcC5mb2xkZXIKLVBlcmZvcm1hbmNlUmVzdWx0cwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0MWQxNmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHM8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZhNWM5MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMDQgMDM6MzY6MzIgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1lbmNvZGluZy88cHJvamVjdD49SVNPLTg4NTktMQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRkOGI1Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLSNTdW4gQXByIDE2IDE0OjM3OjIxIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5jbGVhbk91dHB1dEZvbGRlcj1jbGVhbgotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5kdXBsaWNhdGVSZXNvdXJjZVRhc2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5pbnZhbGlkQ2xhc3NwYXRoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5yZXNvdXJjZUNvcHlFeGNsdXNpb25GaWx0ZXI9Ki5sYXVuY2gKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNpcmN1bGFyQ2xhc3NwYXRoPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGguZXhjbHVzaW9uUGF0dGVybnM9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLm11bHRpcGxlT3V0cHV0TG9jYXRpb25zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZG9jLmNvbW1lbnQuc3VwcG9ydD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5tYXhQcm9ibGVtUGVyVW5pdD0xMDAKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NEZXByZWNhdGVkUmVmPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzTm90VmlzaWJsZVJlZj1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHJpdmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c092ZXJyaWRpbmc9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wdWJsaWMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wcml2YXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5zYWZlVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMYWJlbD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wYXRpYmxlSkRLTGV2ZWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5pbmNvbXBsZXRlQ2xhc3NwYXRoPWVycm9yCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmMmFjNjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozOSBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWludGVybmFsLmRlZmF1bHQuY29tcGxpYW5jZT1kZWZhdWx0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTkzNjhjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozMiBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLmVuYWJsZS5wcm9qZWN0LnJlZmFjdG9yaW5nLmhpc3Rvcnk9ZmFsc2UKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjcyNDk1OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0jU3VuIEFwciAxNiAxNDowNToyOSBFRFQgMjAwNgotY29tcGlsZXJzLnAuYnVpbGQ9MAotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0xCi1jb21waWxlcnMucC5pbGxlZ2FsLWF0dC12YWx1ZT0wCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0wCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMucC51bnVzZWQtZWxlbWVudC1vci1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnVzZS1wcm9qZWN0PXRydWUKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTVjMTQ5Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lLjAKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMjAwLnF1YWxpZmllcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy5DU1NVSVRlc3RzUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvci4wCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLAotIG9yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMudmlld2VyCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UudWksCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAotIG9yZy5lY2xpcHNlLndzdC5jc3MudWksCi0gb3JnLmVjbGlwc2Uud3N0LnNzZS51aSwKLSBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUsCi0gb3JnLmVjbGlwc2UuamZhY2UudGV4dCwKLSBvcmcuZWNsaXBzZS51aS53b3JrYmVuY2gsCi0gb3JnLmVjbGlwc2UudWkuZWRpdG9ycywKLSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUsCi0gb3JnLmp1bml0O2J1bmRsZS12ZXJzaW9uPSJbMy44LjAsNC4wLjApIgotRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKLUJ1bmRsZS1DbGFzc1BhdGg6IGNzc3VpdGVzdHMuamFyCi1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvYWJvdXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE5OWRmMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTk5Nzc3MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLWJpbi5pbmNsdWRlcyA9IE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBjc3N1aXRlc3RzLmphcixcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIHNyYy8sXAotICAgICAgICAgICAgICAgdGVzdC54bWwsXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMKLWphcnMuY29tcGlsZS5vcmRlciA9IGNzc3VpdGVzdHMuamFyCi1zb3VyY2UuY3NzdWl0ZXN0cy5qYXIgPSBzcmMvCi1vdXRwdXQuY3NzdWl0ZXN0cy5qYXIgPSBiaW4vCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODE0MzZiYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBwcm9wZXJ0aWVzIGZpbGUgZm9yIG9yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMKLUJ1bmRsZS1WZW5kb3IuMCA9IEVjbGlwc2UKLUJ1bmRsZS1OYW1lLjAgPSBDU1MgVUkgVGVzdHMgUGx1Zy1pbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdWkvdGVzdHMvQ1NTVUlUZXN0U3VpdGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdWkvdGVzdHMvQ1NTVUlUZXN0U3VpdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTFiZWY1Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3VpL3Rlc3RzL0NTU1VJVGVzdFN1aXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy52aWV3ZXIuVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25DU1M7Ci0KLXB1YmxpYyBjbGFzcyBDU1NVSVRlc3RTdWl0ZSBleHRlbmRzIFRlc3RTdWl0ZSB7Ci0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IENTU1VJVGVzdFN1aXRlKCk7Ci0JfQotCi0JcHVibGljIENTU1VJVGVzdFN1aXRlKCkgewotCQlzdXBlcigiQ1NTIFVJIFRlc3QgU3VpdGUiKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEV4aXN0ZW5jZVRlc3QuY2xhc3MsICJDU1MgVUkgRXhpc3RlbmNlIFRlc3QiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0Vmlld2VyQ29uZmlndXJhdGlvbkNTUy5jbGFzcykpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdEVkaXRvckNvbmZpZ3VyYXRpb25DU1MuY2xhc3MpKTsKLQl9Ci19CQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdWkvdGVzdHMvQ1NTVUlUZXN0c1BsdWdpbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy91aS90ZXN0cy9DU1NVSVRlc3RzUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxZjBmMDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy91aS90ZXN0cy9DU1NVSVRlc3RzUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wbHVnaW4uKjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7Ci0KLS8qKgotICogVGhlIG1haW4gcGx1Z2luIGNsYXNzIHRvIGJlIHVzZWQgaW4gdGhlIGRlc2t0b3AuCi0gKi8KLXB1YmxpYyBjbGFzcyBDU1NVSVRlc3RzUGx1Z2luIGV4dGVuZHMgQWJzdHJhY3RVSVBsdWdpbiB7Ci0KLQkvL1RoZSBzaGFyZWQgaW5zdGFuY2UuCi0JcHJpdmF0ZSBzdGF0aWMgQ1NTVUlUZXN0c1BsdWdpbiBwbHVnaW47Ci0JCi0JLyoqCi0JICogVGhlIGNvbnN0cnVjdG9yLgotCSAqLwotCXB1YmxpYyBDU1NVSVRlc3RzUGx1Z2luKCkgewotCQlwbHVnaW4gPSB0aGlzOwotCX0KLQotCS8qKgotCSAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB1cG9uIHBsdWctaW4gYWN0aXZhdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnN0YXJ0KGNvbnRleHQpOwotCX0KLQotCS8qKgotCSAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHRoZSBwbHVnLWluIGlzIHN0b3BwZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnN0b3AoY29udGV4dCk7Ci0JCXBsdWdpbiA9IG51bGw7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgQ1NTVUlUZXN0c1BsdWdpbiBnZXREZWZhdWx0KCkgewotCQlyZXR1cm4gcGx1Z2luOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgYW4gaW1hZ2UgZGVzY3JpcHRvciBmb3IgdGhlIGltYWdlIGZpbGUgYXQgdGhlIGdpdmVuCi0JICogcGx1Zy1pbiByZWxhdGl2ZSBwYXRoLgotCSAqCi0JICogQHBhcmFtIHBhdGggdGhlIHBhdGgKLQkgKiBAcmV0dXJuIHRoZSBpbWFnZSBkZXNjcmlwdG9yCi0JICovCi0JcHVibGljIHN0YXRpYyBJbWFnZURlc2NyaXB0b3IgZ2V0SW1hZ2VEZXNjcmlwdG9yKFN0cmluZyBwYXRoKSB7Ci0JCXJldHVybiBBYnN0cmFjdFVJUGx1Z2luLmltYWdlRGVzY3JpcHRvckZyb21QbHVnaW4oIm9yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMiLCBwYXRoKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3VpL3Rlc3RzL0V4aXN0ZW5jZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdWkvdGVzdHMvRXhpc3RlbmNlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTMxMjdmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdWkvdGVzdHMvRXhpc3RlbmNlVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLnVpLmludGVybmFsLkNTU1VJUGx1Z2luOwotCi0vKioKLSAqIAotICogQHNpbmNlIDEuMAotICovCi1wdWJsaWMgY2xhc3MgRXhpc3RlbmNlVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQkvKioKLQkgKiB0ZXN0cyBpZiBDU1NVSVBsdWdpbiBjYW4gYmUgbG9hZGVkCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEV4aXN0cygpIHsKLQkJUGx1Z2luIHAgPSBDU1NVSVBsdWdpbi5nZXREZWZhdWx0KCk7Ci0JCWFzc2VydE5vdE51bGwoImNvdWxkbid0IGxvYWQgQ1NTIFVJIHBsdWdpbiIsIHApOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdWkvdGVzdHMvVGVzdEVkaXRvckNvbmZpZ3VyYXRpb25DU1MuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdWkvdGVzdHMvVGVzdEVkaXRvckNvbmZpZ3VyYXRpb25DU1MuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjVhZDRjOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3VpL3Rlc3RzL1Rlc3RFZGl0b3JDb25maWd1cmF0aW9uQ1NTLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICBKZW5zIEx1a293c2tpL0lubm9vcHJhY3QgLSBpbml0aWFsIHJlbmFtaW5nL3Jlc3RydWN0dXJpbmcKLSAqIAotICogLwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvckNTUzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGV4dC5JQ1NTUGFydGl0aW9uczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLnVpLlN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbkNTUzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLkNTU0NvbnRlbnRPdXRsaW5lQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLnVpLnZpZXdzLnByb3BlcnRpZXMuQ1NTUHJvcGVydHlTaGVldENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5FeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyOwotCi0vKioKLSAqIFRlc3RzIHJldHJpZXZpbmcgZWRpdG9yIGNvbnRyaWJ1dGlvbnMgZm9yIGNzcyBjb250ZW50IHR5cGUKLSAqLwotcHVibGljIGNsYXNzIFRlc3RFZGl0b3JDb25maWd1cmF0aW9uQ1NTIGV4dGVuZHMgVGVzdENhc2UgewotCXB1YmxpYyB2b2lkIHRlc3RHZXRTb3VyY2VWaWV3ZXJDb25maWd1cmF0aW9uKCkgewotCQlPYmplY3QgbyA9IEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuZ2V0SW5zdGFuY2UoKS5nZXRDb25maWd1cmF0aW9uKEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuU09VUkNFVklFV0VSQ09ORklHVVJBVElPTiwgQ29udGVudFR5cGVJZEZvckNTUy5Db250ZW50VHlwZUlEX0NTUyk7Ci0JCWFzc2VydE5vdE51bGwoIm5vIHNvdXJjZSB2aWV3ZXIgY29uZmlndXJhdGlvbiBmb3IgIiArIENvbnRlbnRUeXBlSWRGb3JDU1MuQ29udGVudFR5cGVJRF9DU1MsIG8pOwotCQkvLyBjaGVjayBmb3Igb3Zlci1xdWFsaWZpZWQgc3ViY2xhc3NlcwotCQlhc3NlcnRFcXVhbHMoInVuZXhwZWN0ZWQgc291cmNlIHZpZXdlciBjb25maWd1cmF0aW9uIGZvciAiICsgQ29udGVudFR5cGVJZEZvckNTUy5Db250ZW50VHlwZUlEX0NTUywgby5nZXRDbGFzcygpLCBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25DU1MuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRDb250ZW50T3V0bGluZVZpZXdlckNvbmZpZ3VyYXRpb24oKSB7Ci0JCU9iamVjdCBvID0gRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlci5nZXRJbnN0YW5jZSgpLmdldENvbmZpZ3VyYXRpb24oRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlci5DT05URU5UT1VUTElORUNPTkZJR1VSQVRJT04sIENvbnRlbnRUeXBlSWRGb3JDU1MuQ29udGVudFR5cGVJRF9DU1MpOwotCQlhc3NlcnROb3ROdWxsKCJubyBjb250ZW50IG91dGxpbmUgY29uZmlndXJhdGlvbiBmb3IgIiArIENvbnRlbnRUeXBlSWRGb3JDU1MuQ29udGVudFR5cGVJRF9DU1MsIG8pOwotCQkvLyBjaGVjayBmb3Igb3Zlci1xdWFsaWZpZWQgc3ViY2xhc3NlcwotCQlhc3NlcnRFcXVhbHMoInVuZXhwZWN0ZWQgY29udGVudCBvdXRsaW5lIGNvbmZpZ3VyYXRpb24gZm9yICIgKyBDb250ZW50VHlwZUlkRm9yQ1NTLkNvbnRlbnRUeXBlSURfQ1NTLCBvLmdldENsYXNzKCksIENTU0NvbnRlbnRPdXRsaW5lQ29uZmlndXJhdGlvbi5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldFByb3BlcnR5U2hlZXRDb25maWd1cmF0aW9uKCkgewotCQlPYmplY3QgbyA9IEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuZ2V0SW5zdGFuY2UoKS5nZXRDb25maWd1cmF0aW9uKEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuUFJPUEVSVFlTSEVFVENPTkZJR1VSQVRJT04sIENvbnRlbnRUeXBlSWRGb3JDU1MuQ29udGVudFR5cGVJRF9DU1MpOwotCQlhc3NlcnROb3ROdWxsKCJubyBwcm9wZXJ0eSBzaGVldCBjb25maWd1cmF0aW9uIGZvciAiICsgQ29udGVudFR5cGVJZEZvckNTUy5Db250ZW50VHlwZUlEX0NTUywgbyk7Ci0JCS8vIGNoZWNrIGZvciBvdmVyLXF1YWxpZmllZCBzdWJjbGFzc2VzCi0JCWFzc2VydEVxdWFscygidW5leHBlY3RlZCBwcm9wZXJ0eSBzaGVldCBjb25maWd1cmF0aW9uIGZvciAiICsgQ29udGVudFR5cGVJZEZvckNTUy5Db250ZW50VHlwZUlEX0NTUywgby5nZXRDbGFzcygpLCBDU1NQcm9wZXJ0eVNoZWV0Q29uZmlndXJhdGlvbi5jbGFzcyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RHZXREb2N1bWVudGF0aW9uVGV4dEhvdmVyKCkgewotCQlPYmplY3QgbyA9IEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuZ2V0SW5zdGFuY2UoKS5nZXRDb25maWd1cmF0aW9uKEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuRE9DVU1FTlRBVElPTlRFWFRIT1ZFUiwgSUNTU1BhcnRpdGlvbnMuU1RZTEUpOwotCQlhc3NlcnROdWxsKCJ1bmV4cGVjdGVkIGRvY3VtZW50YXRpb24gdGV4dCBob3ZlciBmb3IgIiArIElDU1NQYXJ0aXRpb25zLlNUWUxFLCBvKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3VpL3Rlc3RzL3ZpZXdlci9UZXN0Vmlld2VyQ29uZmlndXJhdGlvbkNTUy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy91aS90ZXN0cy92aWV3ZXIvVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25DU1MuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGEwZjJkNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3VpL3Rlc3RzL3ZpZXdlci9UZXN0Vmlld2VyQ29uZmlndXJhdGlvbkNTUy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLnZpZXdlcjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSUF1dG9FZGl0U3RyYXRlZ3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JSW5mb3JtYXRpb25Db250cm9sQ3JlYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUZXh0RG91YmxlQ2xpY2tTdHJhdGVneTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUZXh0SG92ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5jb250ZW50YXNzaXN0LklDb250ZW50QXNzaXN0YW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuZm9ybWF0dGVyLklDb250ZW50Rm9ybWF0dGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuaHlwZXJsaW5rLklIeXBlcmxpbmtEZXRlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmluZm9ybWF0aW9uLklJbmZvcm1hdGlvblByZXNlbnRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJlY29uY2lsZXIuSVJlY29uY2lsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXh0LklDU1NQYXJ0aXRpb25zOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MudWkuU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uQ1NTOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MudWkuaW50ZXJuYWwuTG9nZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuU3RydWN0dXJlZFRleHRWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5wcm92aXNpb25hbC5zdHlsZS5MaW5lU3R5bGVQcm92aWRlcjsKLQotcHVibGljIGNsYXNzIFRlc3RWaWV3ZXJDb25maWd1cmF0aW9uQ1NTIGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHJpdmF0ZSBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25DU1MgZkNvbmZpZyA9IG51bGw7Ci0JcHJpdmF0ZSBib29sZWFuIGZEaXNwbGF5RXhpc3RzID0gdHJ1ZTsKLQlwcml2YXRlIFN0cnVjdHVyZWRUZXh0Vmlld2VyIGZWaWV3ZXIgPSBudWxsOwotCXByaXZhdGUgYm9vbGVhbiBpc1NldHVwID0gZmFsc2U7Ci0KLQlwdWJsaWMgVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25DU1MoKSB7Ci0JCXN1cGVyKCJUZXN0Vmlld2VyQ29uZmlndXJhdGlvbkNTUyIpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLQkJc3VwZXIuc2V0VXAoKTsKLQkJaWYgKCF0aGlzLmlzU2V0dXApIHsKLQkJCXNldFVwVmlld2VyQ29uZmlndXJhdGlvbigpOwotCQkJdGhpcy5pc1NldHVwID0gdHJ1ZTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBzZXRVcFZpZXdlckNvbmZpZ3VyYXRpb24oKSB7Ci0KLQkJaWYgKERpc3BsYXkuZ2V0Q3VycmVudCgpICE9IG51bGwpIHsKLQotCQkJU2hlbGwgc2hlbGwgPSBudWxsOwotCQkJQ29tcG9zaXRlIHBhcmVudCA9IG51bGw7Ci0KLQkJCWlmIChQbGF0Zm9ybVVJLmlzV29ya2JlbmNoUnVubmluZygpKSB7Ci0JCQkJc2hlbGwgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldFNoZWxsKCk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlzaGVsbCA9IG5ldyBTaGVsbChEaXNwbGF5LmdldEN1cnJlbnQoKSk7Ci0JCQl9Ci0JCQlwYXJlbnQgPSBuZXcgQ29tcG9zaXRlKHNoZWxsLCBTV1QuTk9ORSk7Ci0KLQkJCS8vIGR1bW15IHZpZXdlcgotCQkJZlZpZXdlciA9IG5ldyBTdHJ1Y3R1cmVkVGV4dFZpZXdlcihwYXJlbnQsIG51bGwsIG51bGwsIGZhbHNlLCBTV1QuTk9ORSk7Ci0JCQlmQ29uZmlnID0gbmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbkNTUygpOwotCQl9Ci0JCWVsc2UgewotCQkJZkRpc3BsYXlFeGlzdHMgPSBmYWxzZTsKLQkJCUxvZ2dlci5sb2coTG9nZ2VyLklORk8sICJSZW1lbWJlciwgdmlld2VyIGNvbmZpZ3VyYXRpb24gdGVzdHMgYXJlIG5vdCBydW4gYmVjYXVzZSB3b3JrYmVuY2ggaXMgbm90IG9wZW4gKG5vcm1hbCBvbiBidWlsZCBtYWNoaW5lKSIpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldEF1dG9FZGl0U3RyYXRlZ2llcygpIHsKLQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJSUF1dG9FZGl0U3RyYXRlZ3lbXSBzdHJhdGVnaWVzID0gZkNvbmZpZy5nZXRBdXRvRWRpdFN0cmF0ZWdpZXMoZlZpZXdlciwgSUNTU1BhcnRpdGlvbnMuU1RZTEUpOwotCQlhc3NlcnROb3ROdWxsKHN0cmF0ZWdpZXMpOwotCQlhc3NlcnRUcnVlKCJ0aGVyZSBhcmUgbm8gYXV0byBlZGl0IHN0cmF0ZWdpZXMiLCBzdHJhdGVnaWVzLmxlbmd0aCA+IDApOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRDb25maWd1cmVkQ29udGVudFR5cGVzKCkgewotCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYgKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQotCQlTdHJpbmdbXSBjb25maWd1cmVkQ29udGVudFR5cGVzID0gZkNvbmZpZy5nZXRDb25maWd1cmVkQ29udGVudFR5cGVzKGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKGNvbmZpZ3VyZWRDb250ZW50VHlwZXMpOwotCQlhc3NlcnRUcnVlKCJ0aGVyZSBhcmUgbm8gY29uZmlndXJlZCBjb250ZW50IHR5cGVzIiwgY29uZmlndXJlZENvbnRlbnRUeXBlcy5sZW5ndGggPiAxKTsKLQl9Ci0KLQkvKgotCSAqIG5vdCBuZWNlc3NhcnkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0Q29udGVudEFzc2lzdGFudCgpIHsKLQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJSUNvbnRlbnRBc3Npc3RhbnQgY2EgPSBmQ29uZmlnLmdldENvbnRlbnRBc3Npc3RhbnQoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoInRoZXJlIGlzIG5vIGNvbnRlbnQgYXNzaXN0YW50IiwgY2EpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRDb250ZW50Rm9ybWF0dGVyKCkgewotCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYgKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQotCQlJQ29udGVudEZvcm1hdHRlciBjZiA9IGZDb25maWcuZ2V0Q29udGVudEZvcm1hdHRlcihmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgidGhlcmUgaXMgbm8gY29udGVudCBmb3JtYXR0ZXIiLCBjZik7Ci0JfQotCi0JLyoKLQkgKiBub3QgbmVjZXNzYXJ5Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldERvdWJsZUNsaWNrU3RyYXRlZ3koKSB7Ci0KLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZiAoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCi0JCVN0cmluZ1tdIGNvbnRlbnRUeXBlcyA9IGZDb25maWcuZ2V0Q29uZmlndXJlZENvbnRlbnRUeXBlcyhmVmlld2VyKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjb250ZW50VHlwZXMubGVuZ3RoOyBpKyspIHsKLQkJCUlUZXh0RG91YmxlQ2xpY2tTdHJhdGVneSBzdHJhdGVneSA9IGZDb25maWcuZ2V0RG91YmxlQ2xpY2tTdHJhdGVneShmVmlld2VyLCBjb250ZW50VHlwZXNbaV0pOwotCQkJaWYgKHN0cmF0ZWd5ICE9IG51bGwpIHsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSgidGhlcmUgYXJlIG5vIGNvbmZpZ3VyZWQgZG91YmxlIGNsaWNrIHN0cmF0ZWdpZXMiLCBmYWxzZSk7Ci0JfQotCi0JLyoKLQkgKiBub3QgbmVjZXNzYXJ5Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldEh5cGVybGlua0RldGVjdG9ycygpIHsKLQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJSUh5cGVybGlua0RldGVjdG9yW10gZGV0ZWN0b3JzID0gZkNvbmZpZy5nZXRIeXBlcmxpbmtEZXRlY3RvcnMoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoInRoZXJlIGFyZSBubyBoeXBlcmxpbmsgZGV0ZWN0b3JzIiwgZGV0ZWN0b3JzKTsKLQkJYXNzZXJ0VHJ1ZSgidGhlcmUgYXJlIG5vIGh5cGVybGluayBkZXRlY3RvcnMiLCBkZXRlY3RvcnMubGVuZ3RoID4gMCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldEluZGVudFByZWZpeGVzKCkgewotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJU3RyaW5nW10gY29udGVudFR5cGVzID0gZkNvbmZpZy5nZXRDb25maWd1cmVkQ29udGVudFR5cGVzKGZWaWV3ZXIpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbnRlbnRUeXBlcy5sZW5ndGg7IGkrKykgewotCQkJU3RyaW5nIHByZWZpeGVzW10gPSBmQ29uZmlnLmdldEluZGVudFByZWZpeGVzKGZWaWV3ZXIsIGNvbnRlbnRUeXBlc1tpXSk7Ci0JCQlpZiAocHJlZml4ZXMgIT0gbnVsbCkgewotCQkJCXJldHVybjsKLQkJCX0KLQkJfQotCQlhc3NlcnRUcnVlKCJ0aGVyZSBhcmUgbm8gY29uZmlndXJlZCBpbmRlbnQgcHJlZml4ZXMiLCBmYWxzZSk7Ci0JfQotCi0JLyoKLQkgKiBub3QgbmVjZXNzYXJ5Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldEluZm9ybWF0aW9uQ29udHJvbENyZWF0b3IoKSB7Ci0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYgKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQotCQlJSW5mb3JtYXRpb25Db250cm9sQ3JlYXRvciBpbmZvQ3JlYXRvciA9IGZDb25maWcuZ2V0SW5mb3JtYXRpb25Db250cm9sQ3JlYXRvcihmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgiSW5mb3JtYXRpb25Db250cm9sQ3JlYXRvciBpcyBudWxsIiwgaW5mb0NyZWF0b3IpOwotCX0KLQotCS8qCi0JICogbm90IG5lY2Vzc2FyeQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RHZXRJbmZvcm1hdGlvblByZXNlbnRlcigpIHsKLQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJSUluZm9ybWF0aW9uUHJlc2VudGVyIHByZXNlbnRlciA9IGZDb25maWcuZ2V0SW5mb3JtYXRpb25QcmVzZW50ZXIoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoIkluZm9ybWF0aW9uUHJlc2VudGVyIGlzIG51bGwiLCBwcmVzZW50ZXIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRMaW5lU3R5bGVQcm92aWRlcnMoKSB7Ci0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYgKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQotCQlTdHJpbmdbXSBjb250ZW50VHlwZXMgPSBmQ29uZmlnLmdldENvbmZpZ3VyZWRDb250ZW50VHlwZXMoZlZpZXdlcik7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY29udGVudFR5cGVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlMaW5lU3R5bGVQcm92aWRlciBwcm92aWRlcnNbXSA9IGZDb25maWcuZ2V0TGluZVN0eWxlUHJvdmlkZXJzKGZWaWV3ZXIsIGNvbnRlbnRUeXBlc1tpXSk7Ci0JCQlpZiAocHJvdmlkZXJzICE9IG51bGwpIHsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSgidGhlcmUgYXJlIG5vIGNvbmZpZ3VyZWQgbGluZSBzdHlsZSBwcm92aWRlcnMiLCBmYWxzZSk7Ci0JfQotCi0JLyoKLQkgKiBub3QgbmVjZXNzYXJ5Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldFJlY29uY2lsZXIoKSB7Ci0KLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZiAoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCi0JCUlSZWNvbmNpbGVyIHIgPSBmQ29uZmlnLmdldFJlY29uY2lsZXIoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoIlJlY29uY2lsZXIgbm90IG51bGwiLCByKTsKLQl9Ci0KLQkvKgotCSAqIG5vdCBuZWNlc3NhcnkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0VGV4dEhvdmVyKCkgewotCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYgKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQotCQlTdHJpbmdbXSBob3ZlclBhcnRpdGlvbnMgPSBuZXcgU3RyaW5nW117SUNTU1BhcnRpdGlvbnMuU1RZTEV9OwotCQlmb3IgKGludCBpID0gMDsgaSA8IGhvdmVyUGFydGl0aW9ucy5sZW5ndGg7IGkrKykgewotCQkJSVRleHRIb3ZlciBob3ZlciA9IGZDb25maWcuZ2V0VGV4dEhvdmVyKGZWaWV3ZXIsIGhvdmVyUGFydGl0aW9uc1tpXSwgU1dULk5PTkUpOwotCQkJYXNzZXJ0Tm90TnVsbCgiaG92ZXIgd2FzIG51bGwgZm9yIHBhcnRpdGlvbjogIiArIGhvdmVyUGFydGl0aW9uc1tpXSwgaG92ZXIpOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy90ZXN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvdGVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1NTI3NGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy90ZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotCi08cHJvamVjdAotICAgIG5hbWU9InRlc3RzdWl0ZSIKLSAgICBkZWZhdWx0PSJydW4iCi0gICAgYmFzZWRpcj0iLiI+Ci0gICAgCi0gICAgPCEtLSBUaGUgZm9sbG93aW5nIHByb3BlcnRpZXMgc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgotICAgIDwhLS0gJHtlY2xpcHNlLWhvbWV9ICAgLS0+Ci0gICAgPCEtLSAke2J1aWxkRGlyZWN0b3J5fSAgLS0+Ci0gICAgPCEtLSAke2J1aWxkTGFiZWx9ICAgICAgICAtLT4KLQotICAgIDwhLS0gc2hvdWxkIGJlIGxpdHRsZSBuZWVkIHRvIGNoYW5nZSB3aGF0J3MgYWJvdmUgIC0tPgotCi0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9InBsdWdpbi1uYW1lIgotICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cyIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0iY2xhc3NuYW1lIgotICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy5DU1NVSVRlc3RTdWl0ZSIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0idGVzdFR5cGUiCi0gICAgICAgIHZhbHVlPSJ1aS10ZXN0IiAvPgotCi0gICAgPCEtLSBzaG91bGQgYmUgbGl0dGxlIG5lZWQgdG8gY2hhbmdlIHdoYXQncyBiZWxvdyAtLT4KLQotICAgIDxlY2hvIG1lc3NhZ2U9ImJhc2VkaXI6ICR7YmFzZWRpcn0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iZWNsaXBzZS1ob21lOiAke2VjbGlwc2UtaG9tZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iYnVpbGREaXJlY3Rvcnk6ICR7YnVpbGREaXJlY3Rvcnl9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9InBsdWdpbi1uYW1lOiAke3BsdWdpbi1uYW1lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJjbGFzc25hbWU6ICR7Y2xhc3NuYW1lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJ0ZXN0VHlwZSAke3Rlc3RUeXBlfSIgLz4KLQotCi0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9ImxpYnJhcnktZmlsZSIKLSAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4xLjAvbGlicmFyeS54bWwiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9IndvcmtzcGFjZSIKLSAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9qdW5pdHdvcmtzcGFjZXMvJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgIAotICAgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4KLSAgICA8IS0tIGFsbCB0ZXN0cyB0aGF0IGFyZSB0byBiZSBydW4uIEluaXRpYWxpemF0aW9uIGZvciBpbmRpdmlkdWFsIHRlc3RzIC0tPgotICAgIDwhLS0gc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIC0tPgotICAgIDx0YXJnZXQgbmFtZT0iaW5pdCI+Ci0gICAgICAgIDx0c3RhbXAgLz4KLSAgICAgICAgPGRlbGV0ZT4KLSAgICAgICAgICAgIDxmaWxlc2V0Ci0gICAgICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iCi0gICAgICAgICAgICAgICAgaW5jbHVkZXM9IiR7cGx1Z2luLW5hbWV9Lip4bWwiIC8+Ci0gICAgICAgIDwvZGVsZXRlPgotICAgICAgICA8IS0tIG1ha2UgZGlyZWN0b3J5LCBpbiBjYXNlIHBhdGggZG9lc24ndCBleGlzdCB5ZXQgLS0+Ci0gICAgICAgIDxta2RpciBkaXI9IiR7d29ya3NwYWNlfSIgLz4KLSAgICAgICAgPCEtLSAgYnV0IGRlbGV0ZSB0byBtYWtlIHN1cmUgZnJlc2ggY29udGVudHMtLT4KLSAgICAgICAgPGRlbGV0ZQotICAgICAgICAgICAgZGlyPSIke3dvcmtzcGFjZX0iCi0gICAgICAgICAgICBxdWlldD0idHJ1ZSIgLz4KLQotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9InN1aXRlIj4KLQotICAgICAgICA8YW50Ci0gICAgICAgICAgICB0YXJnZXQ9IiR7dGVzdFR5cGV9IgotICAgICAgICAgICAgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iZGF0YS1kaXIiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7d29ya3NwYWNlfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9InBsdWdpbi1uYW1lIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImNsYXNzbmFtZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtjbGFzc25hbWV9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0icGx1Z2luLXBhdGgiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICA8L2FudD4KLQotICAgICAgICA8Y29weQotICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIgotICAgICAgICAgICAgZmlsZT0iJHt3b3Jrc3BhY2V9Ly5tZXRhZGF0YS8ubG9nIgotICAgICAgICAgICAgdG9maWxlPSIke2J1aWxkRGlyZWN0b3J5fS8ke2J1aWxkTGFiZWx9L3Rlc3RSZXN1bHRzL2NvbnNvbGVsb2dzLyR7cGx1Z2luLW5hbWV9LmNvbnNvbGVsb2cudHh0IiAvPgotCi0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGNvZGUgdG8gY2xlYW51cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBhZnRlciAtLT4KLSAgICA8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+Ci0gICAgPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgotICAgIDx0YXJnZXQgbmFtZT0iY2xlYW51cCI+Ci0gICAgICAgIDwhLS0gdXN1YWxseSBubyBuZWVkIHRvIGRlbGV0ZSB3b3Jrc3BhY2UgdW50aWwgbmV4dCBydW4sIGFuZCBsZWF2aW5nIGl0IGFsbG93cyBpbnNwZWN0aW9uIC0tPgotICAgICAgICA8IS0tIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIiAvPiAtLT4KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4KLSAgICA8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+Ci0gICAgPHRhcmdldAotICAgICAgICBuYW1lPSJydW4iCi0gICAgICAgIGRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+Ci0gICAgICAgIDxhbnQKLSAgICAgICAgICAgIHRhcmdldD0iY29sbGVjdCIKLSAgICAgICAgICAgIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLSAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImluY2x1ZGVzIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfS4qeG1sIiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0ib3V0cHV0LWZpbGUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIgLz4KLSAgICAgICAgPC9hbnQ+Ci0gICAgPC90YXJnZXQ+Ci0KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGVzdHMvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMmJkYzE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNCIvPgotCTxjbGFzc3BhdGhlbnRyeSBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiIGtpbmQ9ImNvbiI+Ci0JCTxhY2Nlc3NydWxlcz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49Im9yZy9lY2xpcHNlL3dzdC8qKiIvPgotCQk8L2FjY2Vzc3J1bGVzPgotCTwvY2xhc3NwYXRoZW50cnk+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy8uY3ZzaWdub3JlIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLnRlc3RzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5YWI4Y2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLnRlc3RzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLWJpbgotYmluLnByb2plY3QKLWJ1aWxkLnhtbAotZGV2LnByb3BlcnRpZXMKLWR0ZHVpdGVzdHMuamFyCi10ZW1wLmZvbGRlcgotamF2YUNvbXBpbGVyLmR0ZHVpdGVzdHMuamFyLmFyZ3MKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjMxMzY0Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGVzdHMvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGVzdHM8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2YjcwMGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSNNb24gSmFuIDE0IDE3OjU2OjE4IEVTVCAyMDA4Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS40Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS4zCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzN2ZhZDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lLjAKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cztzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMC5xdWFsaWZpZXIKLUJ1bmRsZS1DbGFzc1BhdGg6IGR0ZGNvcmV0ZXN0cy5qYXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy5pbnRlcm5hbC5EVERDb3JlVGVzdHNQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yLjAKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cywKLSBvcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGVzdHMuaW50ZXJuYWw7eC1pbnRlcm5hbDo9dHJ1ZQotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKLSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLAotIG9yZy5lY2xpcHNlLndzdC5kdGQuY29yZSwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLAotIG9yZy5lY2xpcHNlLnVpLAotIG9yZy5qdW5pdDtidW5kbGUtdmVyc2lvbj0iWzMuOC4wLDQuMC4wKSIsCi0gY29tLmlibS5pY3UsCi0gb3JnLmVjbGlwc2UuZW1mLmVjb3JlCi1FY2xpcHNlLUxhenlTdGFydDogdHJ1ZQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS40CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGVzdHMvYWJvdXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTk5ZGYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSwgMjAwODwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGVzdHMvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNDk4NGYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotc291cmNlLmR0ZGNvcmV0ZXN0cy5qYXIgPSBzcmMvCi1vdXRwdXQuZHRkY29yZXRlc3RzLmphciA9IGJpbi8KLWJpbi5pbmNsdWRlcyA9IGR0ZGNvcmV0ZXN0cy5qYXIsXAotICAgICAgICAgICAgICAgcmVzb3VyY2VzLyxcCi0gICAgICAgICAgICAgICB0ZXN0LnhtbCxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcwotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwNjk5NTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBwcm9wZXJ0aWVzIGZpbGUgZm9yIG9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMKLUJ1bmRsZS1WZW5kb3IuMCA9IEVjbGlwc2Uub3JnCi1CdW5kbGUtTmFtZS4wID0gRFREIENvcmUgVGVzdHMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGVzdHMvcmVzb3VyY2VzL2R0ZFBhcnNlclRlc3Qvc2FtcGxlLmR0ZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy9yZXNvdXJjZXMvZHRkUGFyc2VyVGVzdC9zYW1wbGUuZHRkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYmIzMDBmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy9yZXNvdXJjZXMvZHRkUGFyc2VyVGVzdC9zYW1wbGUuZHRkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08IS0tIGxpbmUgb25lIC0tPgotPCEtLSBsaW5lIHR3byAtLT4KLTwhRUxFTUVOVCBzb21ldGhpbmcgQU5ZPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL2NvcmUvdGVzdHMvRFREQ29yZVRlc3RTdWl0ZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL2NvcmUvdGVzdHMvRFREQ29yZVRlc3RTdWl0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZDdhMjAyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC9jb3JlL3Rlc3RzL0RURENvcmVUZXN0U3VpdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1wdWJsaWMgY2xhc3MgRFREQ29yZVRlc3RTdWl0ZSBleHRlbmRzIFRlc3RTdWl0ZSB7Ci0JcHVibGljIERURENvcmVUZXN0U3VpdGUoKSB7Ci0JCXN1cGVyKCJEVEQgQ29yZSBUZXN0U3VpdGUiKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFZlcmlmeVBsdWdpbi5jbGFzcykpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoRFREUGFyc2VyVGVzdC5jbGFzcykpOwotCX0KLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgRFREQ29yZVRlc3RTdWl0ZSgpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC9jb3JlL3Rlc3RzL0RURFBhcnNlclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC9jb3JlL3Rlc3RzL0RURFBhcnNlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGEwNTM0NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvY29yZS90ZXN0cy9EVERQYXJzZXJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLnRlc3RzOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLmludGVybmFsLmVtZi5EVERFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5kdGQuY29yZS5pbnRlcm5hbC5lbWYuRFRERmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUuaW50ZXJuYWwuZW1mLnV0aWwuRFREVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGVzdHMuaW50ZXJuYWwuRFREQ29yZVRlc3RzUGx1Z2luOwotCi1wdWJsaWMgY2xhc3MgRFREUGFyc2VyVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBVTkVYUEVDVEVEX0ZJTEVfQ09OVEVOVFMgPSAiVW5leHBlY3RlZCBmaWxlIGNvbnRlbnRzIjsKLQotCXB1YmxpYyB2b2lkIHRlc3RNdWx0aXBsZUNvbW1lbnRQYXJzaW5nKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJRFREVXRpbCB1dGlsID0gbmV3IERURFV0aWwoKTsKLQkJU3RyaW5nIHNhbXBsZURURHBhdGggPSAiL3Jlc291cmNlcy9kdGRQYXJzZXJUZXN0L3NhbXBsZS5kdGQiOwotCQlVUkwgYnVuZGxlVVJMID0gRFREQ29yZVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRFbnRyeShzYW1wbGVEVERwYXRoKTsKLQkJYXNzZXJ0Tm90TnVsbChzYW1wbGVEVERwYXRoICsgIiBub3QgZm91bmQgaW4gYnVuZGxlIiwgYnVuZGxlVVJMKTsKLQkJLy8gRG8gbm90IHJlbHkgb24gQ29tbW9uIFVSSSBSZXNvbHZlciB0byBmaW5kIHRoZSBjb250ZW50cwotCQlVUkwgZmlsZVVSTCA9IEZpbGVMb2NhdG9yLnRvRmlsZVVSTChidW5kbGVVUkwpOwotCQl1dGlsLnBhcnNlKGZpbGVVUkwudG9FeHRlcm5hbEZvcm0oKSk7Ci0JCURUREZpbGUgZHRkRmlsZSA9IHV0aWwuZ2V0RFRERmlsZSgpOwotCQlhc3NlcnRFcXVhbHMoVU5FWFBFQ1RFRF9GSUxFX0NPTlRFTlRTLCAxLCBkdGRGaWxlLmdldERURENvbnRlbnQoKS5zaXplKCkpOwotCQlPYmplY3Qgb2JqZWN0ID0gZHRkRmlsZS5nZXREVERDb250ZW50KCkuZ2V0KDApOwotCQlhc3NlcnRUcnVlKFVORVhQRUNURURfRklMRV9DT05URU5UUywgb2JqZWN0IGluc3RhbmNlb2YgRFRERWxlbWVudCk7Ci0JCURUREVsZW1lbnQgZHRkRWxlbWVudCA9IChEVERFbGVtZW50KSBvYmplY3Q7Ci0JCVN0cmluZyBjb21tZW50ID0gZHRkRWxlbWVudC5nZXRDb21tZW50KCk7Ci0JCWFzc2VydEVxdWFscygiQ29tbWVudCB2YWx1ZSB3YXMgbm90IGFzIGV4cGVjdGVkIiwgIiBsaW5lIG9uZSBcbiBsaW5lIHR3byAiLCBjb21tZW50KTsKLQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL2NvcmUvdGVzdHMvVmVyaWZ5UGx1Z2luLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvY29yZS90ZXN0cy9WZXJpZnlQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODc2YmMxMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvY29yZS90ZXN0cy9WZXJpZnlQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUuaW50ZXJuYWwuRFREQ29yZVBsdWdpbjsKLQotCi1wdWJsaWMgY2xhc3MgVmVyaWZ5UGx1Z2luIGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHVibGljIHZvaWQgdGVzdFBsdWdpbkV4aXN0cygpIHsKLQkJLy8gVE9ETzogc2VlIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD04MTUyNwotCQlhc3NlcnRUcnVlKHRydWUpOwotCQlPYmplY3QgcGx1Z2luID0gbnVsbDsKLQkJdHJ5IHsKLQkJCXBsdWdpbiA9IERURENvcmVQbHVnaW4uZ2V0UGx1Z2luKCk7Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQlwbHVnaW4gPSBudWxsOwotCQl9Ci0JCWFzc2VydE5vdE51bGwoIkRURCBjb3JlIHBsdWdpbiBjb3VsZCBub3QgYmUgaW5zdGFudGlhdGVkIiwgcGx1Z2luKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvY29yZS90ZXN0cy9pbnRlcm5hbC9EVERDb3JlVGVzdHNQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC9jb3JlL3Rlc3RzL2ludGVybmFsL0RURENvcmVUZXN0c1BsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMzk4ZTNjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC9jb3JlL3Rlc3RzL2ludGVybmFsL0RURENvcmVUZXN0c1BsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBEVERDb3JlVGVzdHNQbHVnaW4gZXh0ZW5kcyBQbHVnaW4gewotCi0JcHJpdmF0ZSBzdGF0aWMgRFREQ29yZVRlc3RzUGx1Z2luIHBsdWdpbjsKLQotCXB1YmxpYyBzdGF0aWMgRFREQ29yZVRlc3RzUGx1Z2luIGdldERlZmF1bHQoKSB7Ci0JCXJldHVybiBwbHVnaW47Ci0JfQotCi0JcHVibGljIERURENvcmVUZXN0c1BsdWdpbigpIHsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW4jc3RhcnQob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCi0JICovCi0JcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJcGx1Z2luID0gdGhpczsKLQkJc3VwZXIuc3RhcnQoY29udGV4dCk7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luI3N0b3Aob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCi0JICovCi0JcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zdG9wKGNvbnRleHQpOwotCQlwbHVnaW4gPSBudWxsOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy90ZXN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy90ZXN0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjcwZWIzMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGVzdHMvdGVzdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLQotPHByb2plY3QKLSAgICBuYW1lPSJ0ZXN0c3VpdGUiCi0gICAgZGVmYXVsdD0icnVuIgotICAgIGJhc2VkaXI9Ii4iPgotICAgIAotICAgIDwhLS0gVGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGlzIHNjcmlwdCAtLT4KLSAgICA8IS0tICR7ZWNsaXBzZS1ob21lfSAgIC0tPgotICAgIDwhLS0gJHtidWlsZERpcmVjdG9yeX0gIC0tPgotICAgIDwhLS0gJHtidWlsZExhYmVsfSAgICAgICAgLS0+Ci0KLSAgICA8IS0tIHNob3VsZCBiZSBsaXR0bGUgbmVlZCB0byBjaGFuZ2Ugd2hhdCdzIGFib3ZlICAtLT4KLQotCTxwcm9wZXJ0eQotCQluYW1lPSJwbHVnaW4tbmFtZSIKLQkJdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cyIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0iY2xhc3NuYW1lIgotICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLnRlc3RzLkRURENvcmVUZXN0U3VpdGUiIC8+Ci0gICAgPCEtLSBTb21lIG9mIHRoZSBEVEQgbW9kZWwgcmVmZXJlbmNlcyBVSSBvYmplY3RzLCBsaWtlIEltYWdlcyAgLS0+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9InRlc3RUeXBlIgotICAgICAgICB2YWx1ZT0idWktdGVzdCIgLz4KLQotICAgIDwhLS0gc2hvdWxkIGJlIGxpdHRsZSBuZWVkIHRvIGNoYW5nZSB3aGF0J3MgYmVsb3cgLS0+Ci0KLSAgICA8ZWNobyBtZXNzYWdlPSJiYXNlZGlyOiAke2Jhc2VkaXJ9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImVjbGlwc2UtaG9tZTogJHtlY2xpcHNlLWhvbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImJ1aWxkRGlyZWN0b3J5OiAke2J1aWxkRGlyZWN0b3J5fSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJwbHVnaW4tbmFtZTogJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iY2xhc3NuYW1lOiAke2NsYXNzbmFtZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0idGVzdFR5cGUgJHt0ZXN0VHlwZX0iIC8+Ci0KLQotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJsaWJyYXJ5LWZpbGUiCi0gICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMS4wL2xpYnJhcnkueG1sIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJ3b3Jrc3BhY2UiCi0gICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vanVuaXR3b3Jrc3BhY2VzLyR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICAKLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGFsbCBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBmb3IgLS0+Ci0gICAgPCEtLSBhbGwgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcnVuLiBJbml0aWFsaXphdGlvbiBmb3IgaW5kaXZpZHVhbCB0ZXN0cyAtLT4KLSAgICA8IS0tIHNob3VsZCBiZSBkb25lIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgc3VpdGUgdGFyZ2V0LiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9ImluaXQiPgotICAgICAgICA8dHN0YW1wIC8+Ci0gICAgICAgIDxkZWxldGU+Ci0gICAgICAgICAgICA8ZmlsZXNldAotICAgICAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9IgotICAgICAgICAgICAgICAgIGluY2x1ZGVzPSIke3BsdWdpbi1uYW1lfS4qeG1sIiAvPgotICAgICAgICA8L2RlbGV0ZT4KLSAgICAgICAgPCEtLSBtYWtlIGRpcmVjdG9yeSwgaW4gY2FzZSBwYXRoIGRvZXNuJ3QgZXhpc3QgeWV0IC0tPgotICAgICAgICA8bWtkaXIgZGlyPSIke3dvcmtzcGFjZX0iIC8+Ci0gICAgICAgIDwhLS0gIGJ1dCBkZWxldGUgdG8gbWFrZSBzdXJlIGZyZXNoIGNvbnRlbnRzLS0+Ci0gICAgICAgIDxkZWxldGUKLSAgICAgICAgICAgIGRpcj0iJHt3b3Jrc3BhY2V9IgotICAgICAgICAgICAgcXVpZXQ9InRydWUiIC8+Ci0KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgZGVmaW5lcyB0aGUgdGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4gLS0+Ci0gICAgPHRhcmdldCBuYW1lPSJzdWl0ZSI+Ci0KLSAgICAgICAgPGFudAotICAgICAgICAgICAgdGFyZ2V0PSIke3Rlc3RUeXBlfSIKLSAgICAgICAgICAgIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLSAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImRhdGEtZGlyIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3dvcmtzcGFjZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJwbHVnaW4tbmFtZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJjbGFzc25hbWUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7Y2xhc3NuYW1lfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9InBsdWdpbi1wYXRoIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy8ke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgPC9hbnQ+Ci0KLSAgICAgICAgPGNvcHkKLSAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIKLSAgICAgICAgICAgIGZpbGU9IiR7d29ya3NwYWNlfS8ubWV0YWRhdGEvLmxvZyIKLSAgICAgICAgICAgIHRvZmlsZT0iJHtidWlsZERpcmVjdG9yeX0vJHtidWlsZExhYmVsfS90ZXN0UmVzdWx0cy9jb25zb2xlbG9ncy8ke3BsdWdpbi1uYW1lfS5jb25zb2xlbG9nLnR4dCIgLz4KLQotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBjb2RlIHRvIGNsZWFudXAgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgYWZ0ZXIgLS0+Ci0gICAgPCEtLSBhZnRlciBhbGwgb2YgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4uIFlvdSBjYW4gdXNlIHRoaXMgdGFyZ2V0IHRvIC0tPgotICAgIDwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9ImNsZWFudXAiPgotICAgICAgICA8IS0tIHVzdWFsbHkgbm8gbmVlZCB0byBkZWxldGUgd29ya3NwYWNlIHVudGlsIG5leHQgcnVuLCBhbmQgbGVhdmluZyBpdCBhbGxvd3MgaW5zcGVjdGlvbiAtLT4KLSAgICAgICAgPCEtLSA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIgLz4gLS0+Ci0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+Ci0gICAgPCEtLSBhZnRlciBhbGwgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4gc2hvdWxkIGdvIGhlcmUuIC0tPgotICAgIDx0YXJnZXQKLSAgICAgICAgbmFtZT0icnVuIgotICAgICAgICBkZXBlbmRzPSJpbml0LHN1aXRlLGNsZWFudXAiPgotICAgICAgICA8YW50Ci0gICAgICAgICAgICB0YXJnZXQ9ImNvbGxlY3QiCi0gICAgICAgICAgICBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iCi0gICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJpbmNsdWRlcyIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0uKnhtbCIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9Im91dHB1dC1maWxlIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfS54bWwiIC8+Ci0gICAgICAgIDwvYW50PgotICAgIDwvdGFyZ2V0PgotCi08L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMmJkYzE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjQiLz4KLQk8Y2xhc3NwYXRoZW50cnkgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIiBraW5kPSJjb24iPgotCQk8YWNjZXNzcnVsZXM+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJvcmcvZWNsaXBzZS93c3QvKioiLz4KLQkJPC9hY2Nlc3NydWxlcz4KLQk8L2NsYXNzcGF0aGVudHJ5PgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5YWI4Y2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi1iaW4KLWJpbi5wcm9qZWN0Ci1idWlsZC54bWwKLWRldi5wcm9wZXJ0aWVzCi1kdGR1aXRlc3RzLmphcgotdGVtcC5mb2xkZXIKLWphdmFDb21waWxlci5kdGR1aXRlc3RzLmphci5hcmdzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjQ5N2UwMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0czwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZmE1YzkxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozMiBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWVuY29kaW5nLzxwcm9qZWN0Pj1JU08tODg1OS0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlYzU3NTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jTW9uIEFwciAxNyAwMTo0ODozOSBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWxpbmUuc2VwYXJhdG9yPVxyXG4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmN2JhYzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0jU2F0IEF1ZyAxOSAxNjozMTo0MyBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuY2xlYW5PdXRwdXRGb2xkZXI9Y2xlYW4KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuZHVwbGljYXRlUmVzb3VyY2VUYXNrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuaW52YWxpZENsYXNzcGF0aD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIucmVzb3VyY2VDb3B5RXhjbHVzaW9uRmlsdGVyPSoubGF1bmNoCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jaXJjdWxhckNsYXNzcGF0aD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLmV4Y2x1c2lvblBhdHRlcm5zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aC5tdWx0aXBsZU91dHB1dExvY2F0aW9ucz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuMgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRvYy5jb21tZW50LnN1cHBvcnQ9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIubWF4UHJvYmxlbVBlclVuaXQ9MTAwCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvYz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzRGVwcmVjYXRlZFJlZj1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc05vdFZpc2libGVSZWY9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXByaXZhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHM9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNPdmVycmlkaW5nPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c1Zpc2liaWxpdHk9cHVibGljCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFncz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzT3ZlcnJpZGluZz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHJpdmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnNhZmVUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExhYmVsPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS4zCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5pbmNvbXBhdGlibGVKREtMZXZlbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGxldGVDbGFzc3BhdGg9ZXJyb3IKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzAxYzdhZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLSNNb24gQXByIDE3IDAxOjQ4OjM5IEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotaW50ZXJuYWwuZGVmYXVsdC5jb21wbGlhbmNlPWRlZmF1bHQKLW9yZy5lY2xpcHNlLmpkdC51aS50ZXh0LmN1c3RvbV9jb2RlX3RlbXBsYXRlcz08P3htbCB2ZXJzaW9uXD0iMS4wIiBlbmNvZGluZ1w9IlVURi04Ij8+XHJcbjx0ZW1wbGF0ZXMvPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU5MzY4Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMDQgMDM6MzY6MzIgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5lbmFibGUucHJvamVjdC5yZWZhY3RvcmluZy5oaXN0b3J5PWZhbHNlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjNTIyYmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotI01vbiBBcHIgMTcgMDI6MDE6MzMgRURUIDIwMDYKLWNvbXBpbGVycy5pbmNvbXBhdGlibGUtZW52aXJvbm1lbnQ9MAotY29tcGlsZXJzLnAuYnVpbGQ9MAotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0xCi1jb21waWxlcnMucC5pbGxlZ2FsLWF0dC12YWx1ZT0wCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0wCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMucC51bnVzZWQtZWxlbWVudC1vci1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnVzZS1wcm9qZWN0PXRydWUKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmVlYjk4Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lLjAKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMjAwLnF1YWxpZmllcgotQnVuZGxlLUNsYXNzUGF0aDogZHRkdWl0ZXN0cy5qYXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMuaW50ZXJuYWwuRFREVUlUZXN0c1BsdWdpbgotQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IuMAotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cywKLSBvcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLmludGVybmFsO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy52aWV3ZXIKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCi0gb3JnLmVjbGlwc2UuamZhY2UudGV4dCwKLSBvcmcuZWNsaXBzZS51aSwKLSBvcmcuZWNsaXBzZS51aS52aWV3cywKLSBvcmcuZWNsaXBzZS51aS53b3JrYmVuY2gsCi0gb3JnLmVjbGlwc2UudWkud29ya2JlbmNoLnRleHRlZGl0b3IsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMsCi0gb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLAotIG9yZy5lY2xpcHNlLndzdC5kdGQudWksCi0gb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLAotIG9yZy5lY2xpcHNlLndzdC5zc2UudWksCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLAotIG9yZy5qdW5pdDtidW5kbGUtdmVyc2lvbj0iWzMuOC4wLDQuMC4wKSIsCi0gY29tLmlibS5pY3UKLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCi1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvYWJvdXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE5OWRmMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTE2MzhlNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1zb3VyY2UuZHRkdWl0ZXN0cy5qYXIgPSBzcmMvCi1vdXRwdXQuZHRkdWl0ZXN0cy5qYXIgPSBiaW4vCi1iaW4uaW5jbHVkZXMgPSBkdGR1aXRlc3RzLmphcixcCi0gICAgICAgICAgICAgICB0ZXN0LnhtbCxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcwotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzhiNTIwMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBwcm9wZXJ0aWVzIGZpbGUgZm9yIG9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMKLUJ1bmRsZS1WZW5kb3IuMCA9IEVjbGlwc2Uub3JnCi1CdW5kbGUtTmFtZS4wID0gRFREIFVJIFRlc3RzClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC91aS90ZXN0cy9EVERVSVByZWZlcmVuY2VzVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC91aS90ZXN0cy9EVERVSVByZWZlcmVuY2VzVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzMwZWU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvdWkvdGVzdHMvRFREVUlQcmVmZXJlbmNlc1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuSVByZWZlcmVuY2VTdG9yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuZHRkLnVpLmludGVybmFsLkRURFVJUGx1Z2luOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUV4Y2VwdGlvbjsKLQotLyoqCi0gKiBUaGUgcHVycG9zZSBvZiB0aGlzIHRlc3QgaXMgdG8gdmVyaWZ5IHRoZSB2YWxpZGl0eSBvZiB0aGUgSFRNTCBTb3VyY2UKLSAqIGVkaXRvciBwcmVmZXJlbmNlcy4gVGVzdHMgaW5jbHVkZSBzZXR0aW5nL2dldHRpbmcgcHJlZmVyZW5jZXMuCi0gKiAKLSAqIE5PVEU6IFRoaXMgdGVzdCBzaG91bGQgYmUgcHJlZm9ybWVkIG9uIGEgY2xlYW4gd29ya3NwYWNlLiBJZiBwZXJmb3JtZWQgb24KLSAqIGFuIGV4aXN0aW5nIHdvcmtzcGFjZSwgdGhpcyB0ZXN0IHdpbGwgbWFuaXB1bGF0ZSBwcmVmZXJlbmNlcyBpbiB0aGUKLSAqIHdvcmtzcGFjZSwgdGhvdWdoIGF0dGVtcHRzIHdpbGwgYmUgbWFkZSB0byByZXN0b3JlIG9yaWdpbmFsIHZhbHVlcyBhZnRlcgotICogdGVzdGluZy4KLSAqLwotcHVibGljIGNsYXNzIERURFVJUHJlZmVyZW5jZXNUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCS8qKgotCSAqIFRlc3RzIGV4aXN0YW5jZSBvZiBwcmVmZXJlbmNlIHZhbHVlcyB3aGVuIGdldHRpbmcgcHJlZmVyZW5jZSB2YWx1ZXMKLQkgKiB0aHJvdWdoIFBsYXRmb3JtLmdldFByZWZlcmVuY2VzU2VydmljZSgpCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEJ1bmRsZUdldFByZWZlcmVuY2VzKCkgewotCQlmaW5hbCBTdHJpbmcgYnVuZGxlTmFtZSA9ICJvcmcuZWNsaXBzZS53c3QuZHRkLnVpIjsKLQotCQkvLyBuZWVkIHRvIHN0YXJ0IHVwIGJ1bmRsZSBmb3IgZGVmYXVsdCB2YWx1ZXMgdG8gYmUgbG9hZGVkCi0JCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoYnVuZGxlTmFtZSk7Ci0JCXRyeSB7Ci0JCQlpZiAoYnVuZGxlICE9IG51bGwpCi0JCQkJYnVuZGxlLnN0YXJ0KCk7Ci0JCQllbHNlCi0JCQkJZmFpbCgiR2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIGJlY2F1c2UgY291bGQgbm90IGZpbmQgYnVuZGxlOiAiICsgYnVuZGxlTmFtZSk7Ci0JCX0gY2F0Y2ggKEJ1bmRsZUV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCJHZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgYmVjYXVzZSBvZiBleGNlcHRpb24gc3RhcnRpbmcgYnVuZGxlOiAiICsgYnVuZGxlTmFtZSArICIgZXhjZXB0aW9uOiAiICsgZSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBUZXN0cyBkZWZhdWx0IHZhbHVlcyBvZiBwcmVmZXJlbmNlcy4KLQkgKiAKLQkgKiBOT1RFOiBFeHBlY3RlZCBkZWZhdWx0IHZhbHVlcyBhcmUgaGFyZC1jb2RlZCwgc28gaWYgZGVmYXVsdCB2YWx1ZXMgZG8KLQkgKiBnZXQgY2hhbmdlZCwgYXNzZXJ0aW9ucyBuZWVkIHRvIGJlIHVwZGF0ZWQgYXMgd2VsbAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RQbHVnaW5HZXREZWZhdWx0UHJlZmVyZW5jZXMoKSB7Ci0JCUlQcmVmZXJlbmNlU3RvcmUgc3RvcmUgPSBEVERVSVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCk7Ci0JCWFzc2VydE5vdE51bGwoImR0ZCBwcmVmZXJlbmNlIHN0b3JlIHdhcyBudWxsIiwgc3RvcmUpOwotCX0KLQotCS8qKgotCSAqIFRlc3RzIHNldHRpbmcgcHJlZmVyZW5jZSB2YWx1ZXMgYnkgc2V0dGluZyBwcmVmZXJlbmNlIHZhbHVlIHRvIGJlIGEKLQkgKiBjZXJ0YWluIHZhbHVlLCB0aGVuIGdldHRpbmcgdGhlIHByZWZlcmVuY2UgdmFsdWUgdG8gdmVyaWZ5IGl0IHdhcyBzZXQuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFBsdWdpblNldFByZWZlcmVuY2VzKCkgewotCQkvL0lTU1VFOiB0aGlzIGRvZXMgTk9UIHVzZSBTRVQKLQkJSVByZWZlcmVuY2VTdG9yZSBzdG9yZSA9IERURFVJUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKTsKLQkJYXNzZXJ0Tm90TnVsbCgiZHRkIHByZWZlcmVuY2Ugc3RvcmUgd2FzIG51bGwiLCBzdG9yZSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC91aS90ZXN0cy9EVERVSVRlc3RTdWl0ZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC91aS90ZXN0cy9EVERVSVRlc3RTdWl0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzEwYTU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvdWkvdGVzdHMvRFREVUlUZXN0U3VpdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMudmlld2VyLlRlc3RWaWV3ZXJDb25maWd1cmF0aW9uRFREOwotCi0KLQotcHVibGljIGNsYXNzIERURFVJVGVzdFN1aXRlIGV4dGVuZHMgVGVzdFN1aXRlIHsKLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgRFREVUlUZXN0U3VpdGUoKTsKLQl9Ci0KLQlwdWJsaWMgRFREVUlUZXN0U3VpdGUoKSB7Ci0JCXN1cGVyKCJEVEQgVUkgVGVzdFN1aXRlIik7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShWZXJpZnlVSVBsdWdpbi5jbGFzcykpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoRFREVUlQcmVmZXJlbmNlc1Rlc3QuY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RWaWV3ZXJDb25maWd1cmF0aW9uRFRELmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0RWRpdG9yQ29uZmlndXJhdGlvbkRURC5jbGFzcykpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvdWkvdGVzdHMvVGVzdEVkaXRvckNvbmZpZ3VyYXRpb25EVEQuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvdWkvdGVzdHMvVGVzdEVkaXRvckNvbmZpZ3VyYXRpb25EVEQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQwODgzZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL3VpL3Rlc3RzL1Rlc3RFZGl0b3JDb25maWd1cmF0aW9uRFRELmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICBKZW5zIEx1a293c2tpL0lubm9vcHJhY3QgLSBpbml0aWFsIHJlbmFtaW5nL3Jlc3RydWN0dXJpbmcKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JEVEQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLnRleHQuSURURFBhcnRpdGlvbnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS5TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25EVEQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS52aWV3cy5jb250ZW50b3V0bGluZS5EVERDb250ZW50T3V0bGluZUNvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5FeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyOwotCi0vKioKLSAqIFRlc3RzIHJldHJpZXZpbmcgZWRpdG9yIGNvbnRyaWJ1dGlvbnMgZm9yIGR0ZCBjb250ZW50IHR5cGUKLSAqLwotcHVibGljIGNsYXNzIFRlc3RFZGl0b3JDb25maWd1cmF0aW9uRFREIGV4dGVuZHMgVGVzdENhc2UgewotCXB1YmxpYyB2b2lkIHRlc3RHZXRTb3VyY2VWaWV3ZXJDb25maWd1cmF0aW9uKCkgewotCQlPYmplY3QgbyA9IEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuZ2V0SW5zdGFuY2UoKS5nZXRDb25maWd1cmF0aW9uKEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuU09VUkNFVklFV0VSQ09ORklHVVJBVElPTiwgQ29udGVudFR5cGVJZEZvckRURC5Db250ZW50VHlwZUlEX0RURCk7Ci0JCWFzc2VydE5vdE51bGwoIm5vIHNvdXJjZSB2aWV3ZXIgY29uZmlndXJhdGlvbiBmb3IgIiArIENvbnRlbnRUeXBlSWRGb3JEVEQuQ29udGVudFR5cGVJRF9EVEQsIG8pOwotCQkvLyBjaGVjayBmb3Igb3Zlci1xdWFsaWZpZWQgc3ViY2xhc3NlcwotCQlhc3NlcnRFcXVhbHMoInVuZXhwZWN0ZWQgc291cmNlIHZpZXdlciBjb25maWd1cmF0aW9uIGZvciAiICsgQ29udGVudFR5cGVJZEZvckRURC5Db250ZW50VHlwZUlEX0RURCwgby5nZXRDbGFzcygpLCBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25EVEQuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRDb250ZW50T3V0bGluZVZpZXdlckNvbmZpZ3VyYXRpb24oKSB7Ci0JCU9iamVjdCBvID0gRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlci5nZXRJbnN0YW5jZSgpLmdldENvbmZpZ3VyYXRpb24oRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlci5DT05URU5UT1VUTElORUNPTkZJR1VSQVRJT04sIENvbnRlbnRUeXBlSWRGb3JEVEQuQ29udGVudFR5cGVJRF9EVEQpOwotCQlhc3NlcnROb3ROdWxsKCJubyBjb250ZW50IG91dGxpbmUgY29uZmlndXJhdGlvbiBmb3IgIiArIENvbnRlbnRUeXBlSWRGb3JEVEQuQ29udGVudFR5cGVJRF9EVEQsIG8pOwotCQkvLyBjaGVjayBmb3Igb3Zlci1xdWFsaWZpZWQgc3ViY2xhc3NlcwotCQlhc3NlcnRFcXVhbHMoInVuZXhwZWN0ZWQgY29udGVudCBvdXRsaW5lIGNvbmZpZ3VyYXRpb24gZm9yICIgKyBDb250ZW50VHlwZUlkRm9yRFRELkNvbnRlbnRUeXBlSURfRFRELCBvLmdldENsYXNzKCksIERURENvbnRlbnRPdXRsaW5lQ29uZmlndXJhdGlvbi5jbGFzcyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RHZXREb2N1bWVudGF0aW9uVGV4dEhvdmVyKCkgewotCQlPYmplY3QgbyA9IEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuZ2V0SW5zdGFuY2UoKS5nZXRDb25maWd1cmF0aW9uKEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuRE9DVU1FTlRBVElPTlRFWFRIT1ZFUiwgSURURFBhcnRpdGlvbnMuRFREX0RFRkFVTFQpOwotCQlhc3NlcnROdWxsKCJ1bmV4cGVjdGVkIGRvY3VtZW50YXRpb24gdGV4dCBob3ZlciBmb3IgIiArIElEVERQYXJ0aXRpb25zLkRURF9ERUZBVUxULCBvKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL3VpL3Rlc3RzL1ZlcmlmeVVJUGx1Z2luLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL3VpL3Rlc3RzL1ZlcmlmeVVJUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2NWRhZGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC91aS90ZXN0cy9WZXJpZnlVSVBsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5kdGQudWkuaW50ZXJuYWwuRFREVUlQbHVnaW47Ci0KLQotcHVibGljIGNsYXNzIFZlcmlmeVVJUGx1Z2luIGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHVibGljIHZvaWQgdGVzdFBsdWdpbkV4aXN0cygpIHsKLQkJLy8gVE9ETzogc2VlIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD04MTUyNwotCQlhc3NlcnRUcnVlKHRydWUpOwotCQlQbHVnaW4gcGx1Z2luID0gbnVsbDsKLQkJdHJ5IHsKLQkJCXBsdWdpbiA9IERURFVJUGx1Z2luLmdldERlZmF1bHQoKTsKLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCXBsdWdpbiA9IG51bGw7Ci0JCX0KLQkJYXNzZXJ0Tm90TnVsbCgiZWRpdG9yIHBsdWdpbiBjb3VsZCBub3QgYmUgaW5zdGFudGlhdGVkIiwgcGx1Z2luKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL3VpL3Rlc3RzL2ludGVybmFsL0RURFVJVGVzdHNQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvdWkvdGVzdHMvaW50ZXJuYWwvRFREVUlUZXN0c1BsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNGVkMGNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvdWkvdGVzdHMvaW50ZXJuYWwvRFREVUlUZXN0c1BsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzYgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OwotCi0vKioKLSAqIFRoZSBtYWluIHBsdWdpbiBjbGFzcyB0byBiZSB1c2VkIGluIHRoZSBkZXNrdG9wLgotICovCi1wdWJsaWMgY2xhc3MgRFREVUlUZXN0c1BsdWdpbiBleHRlbmRzIFBsdWdpbiB7Ci0JLy8gVGhlIHNoYXJlZCBpbnN0YW5jZS4KLQlwcml2YXRlIHN0YXRpYyBEVERVSVRlc3RzUGx1Z2luIHBsdWdpbjsKLQkvLyBSZXNvdXJjZSBidW5kbGUuCi0JcHJpdmF0ZSBSZXNvdXJjZUJ1bmRsZSByZXNvdXJjZUJ1bmRsZTsKLQotCS8qKgotCSAqIFRoZSBjb25zdHJ1Y3Rvci4KLQkgKi8KLQlwdWJsaWMgRFREVUlUZXN0c1BsdWdpbigpIHsKLQkJc3VwZXIoKTsKLQkJcGx1Z2luID0gdGhpczsKLQl9Ci0KLQkvKioKLQkgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdXBvbiBwbHVnLWluIGFjdGl2YXRpb24KLQkgKi8KLQlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zdGFydChjb250ZXh0KTsKLQl9Ci0KLQkvKioKLQkgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB0aGUgcGx1Zy1pbiBpcyBzdG9wcGVkCi0JICovCi0JcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zdG9wKGNvbnRleHQpOwotCQlwbHVnaW4gPSBudWxsOwotCQlyZXNvdXJjZUJ1bmRsZSA9IG51bGw7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgRFREVUlUZXN0c1BsdWdpbiBnZXREZWZhdWx0KCkgewotCQlyZXR1cm4gcGx1Z2luOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHN0cmluZyBmcm9tIHRoZSBwbHVnaW4ncyByZXNvdXJjZSBidW5kbGUsIG9yICdrZXknIGlmIG5vdAotCSAqIGZvdW5kLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFJlc291cmNlU3RyaW5nKFN0cmluZyBrZXkpIHsKLQkJUmVzb3VyY2VCdW5kbGUgYnVuZGxlID0gRFREVUlUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UmVzb3VyY2VCdW5kbGUoKTsKLQkJdHJ5IHsKLQkJCXJldHVybiAoYnVuZGxlICE9IG51bGwpID8gYnVuZGxlLmdldFN0cmluZyhrZXkpIDoga2V5OwotCQl9Ci0JCWNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgewotCQkJcmV0dXJuIGtleTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwKLQkgKi8KLQlwdWJsaWMgUmVzb3VyY2VCdW5kbGUgZ2V0UmVzb3VyY2VCdW5kbGUoKSB7Ci0JCXRyeSB7Ci0JCQlpZiAocmVzb3VyY2VCdW5kbGUgPT0gbnVsbCkKLQkJCQlyZXNvdXJjZUJ1bmRsZSA9IFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZSgib3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy5pbnRlcm5hbC5UZXN0c1BsdWdpblJlc291cmNlcyIpOwotCQl9Ci0JCWNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24geCkgewotCQkJcmVzb3VyY2VCdW5kbGUgPSBudWxsOwotCQl9Ci0JCXJldHVybiByZXNvdXJjZUJ1bmRsZTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL3VpL3Rlc3RzL2ludGVybmFsL0xvZ2dlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC91aS90ZXN0cy9pbnRlcm5hbC9Mb2dnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmJkNzg5ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL3VpL3Rlc3RzL2ludGVybmFsL0xvZ2dlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgY29tLmlibS5pY3UudXRpbC5TdHJpbmdUb2tlbml6ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotCi0vKioKLSAqIFNtYWxsIGNvbnZlbmllbmNlIGNsYXNzIHRvIGxvZyBtZXNzYWdlcyB0byBwbHVnaW4ncyBsb2cgZmlsZSBhbmQgYWxzbywgaWYgZGVzaXJlZCwKLSAqIHRoZSBjb25zb2xlLiBUaGlzIGNsYXNzIHNob3VsZCBvbmx5IGJlIHVzZWQgYnkgY2xhc3NlcyBpbiB0aGlzIHBsdWdpbi4gT3RoZXIKLSAqIHBsdWdpbnMgc2hvdWxkIG1ha2UgdGhlaXIgb3duIGNvcHksIHdpdGggYXBwcm9wcmlhdGUgSUQuCi0gKi8KLXB1YmxpYyBjbGFzcyBMb2dnZXIgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cyI7IC8vJE5PTi1OTFMtMSQKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUUkFDRUZJTFRFUl9MT0NBVElPTiA9ICIvZGVidWcvdHJhY2VmaWx0ZXIiOyAvLyROT04tTkxTLTEkCi0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPSyA9IElTdGF0dXMuT0s7IC8vIDAKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTkZPID0gSVN0YXR1cy5JTkZPOyAvLyAxCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV0FSTklORyA9IElTdGF0dXMuV0FSTklORzsgLy8gMgotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SID0gSVN0YXR1cy5FUlJPUjsgLy8gNAotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT0tfREVCVUcgPSAyMDAgKyBPSzsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTkZPX0RFQlVHID0gMjAwICsgSU5GTzsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXQVJOSU5HX0RFQlVHID0gMjAwICsgV0FSTklORzsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFUlJPUl9ERUJVRyA9IDIwMCArIEVSUk9SOwotCi0JLyoqCi0JICogQWRkcyBtZXNzYWdlIHRvIGxvZy4KLQkgKiBAcGFyYW0gbGV2ZWwgc2V2ZXJpdHkgbGV2ZWwgb2YgdGhlIG1lc3NhZ2UgKE9LLCBJTkZPLCBXQVJOSU5HLCBFUlJPUiwgT0tfREVCVUcsIElORk9fREVCVUcsIFdBUk5JTkdfREVCVUcsIEVSUk9SX0RFQlVHKQotCSAqIEBwYXJhbSBtZXNzYWdlIHRleHQgdG8gYWRkIHRvIHRoZSBsb2cKLQkgKiBAcGFyYW0gZXhjZXB0aW9uIGV4Y2VwdGlvbiB0aHJvd24KLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIHZvaWQgX2xvZyhpbnQgbGV2ZWwsIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCWlmIChsZXZlbCA9PSBPS19ERUJVRyB8fCBsZXZlbCA9PSBJTkZPX0RFQlVHIHx8IGxldmVsID09IFdBUk5JTkdfREVCVUcgfHwgbGV2ZWwgPT0gRVJST1JfREVCVUcpIHsKLQkJCWlmICghaXNEZWJ1Z2dpbmcoKSkKLQkJCQlyZXR1cm47Ci0JCX0KLQotCQlpbnQgc2V2ZXJpdHkgPSBJU3RhdHVzLk9LOwotCQlzd2l0Y2ggKGxldmVsKSB7Ci0JCQljYXNlIElORk9fREVCVUcgOgotCQkJY2FzZSBJTkZPIDoKLQkJCQlzZXZlcml0eSA9IElTdGF0dXMuSU5GTzsKLQkJCQlicmVhazsKLQkJCWNhc2UgV0FSTklOR19ERUJVRyA6Ci0JCQljYXNlIFdBUk5JTkcgOgotCQkJCXNldmVyaXR5ID0gSVN0YXR1cy5XQVJOSU5HOwotCQkJCWJyZWFrOwotCQkJY2FzZSBFUlJPUl9ERUJVRyA6Ci0JCQljYXNlIEVSUk9SIDoKLQkJCQlzZXZlcml0eSA9IElTdGF0dXMuRVJST1I7Ci0JCX0KLQkJbWVzc2FnZSA9IChtZXNzYWdlICE9IG51bGwpID8gbWVzc2FnZSA6ICJudWxsIjsgLy8kTk9OLU5MUy0xJAotCQlTdGF0dXMgc3RhdHVzT2JqID0gbmV3IFN0YXR1cyhzZXZlcml0eSwgUExVR0lOX0lELCBzZXZlcml0eSwgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShQTFVHSU5fSUQpOwotCQlpZiAoYnVuZGxlICE9IG51bGwpIAotCQkJUGxhdGZvcm0uZ2V0TG9nKGJ1bmRsZSkubG9nKHN0YXR1c09iaik7Ci0JfQotCi0JLyoqCi0JICogUHJpbnRzIG1lc3NhZ2UgdG8gbG9nIGlmIGNhdGVnb3J5IG1hdGNoZXMgL2RlYnVnL3RyYWNlZmlsdGVyIG9wdGlvbi4KLQkgKiBAcGFyYW0gbWVzc2FnZSB0ZXh0IHRvIHByaW50Ci0JICogQHBhcmFtIGNhdGVnb3J5IGNhdGVnb3J5IG9mIHRoZSBtZXNzYWdlLCB0byBiZSBjb21wYXJlZCB3aXRoIC9kZWJ1Zy90cmFjZWZpbHRlcgotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgdm9pZCBfdHJhY2UoU3RyaW5nIGNhdGVnb3J5LCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlpZiAoaXNUcmFjaW5nKGNhdGVnb3J5KSkgewotCQkJbWVzc2FnZSA9IChtZXNzYWdlICE9IG51bGwpID8gbWVzc2FnZSA6ICJudWxsIjsgLy8kTk9OLU5MUy0xJAotCQkJU3RhdHVzIHN0YXR1c09iaiA9IG5ldyBTdGF0dXMoSVN0YXR1cy5PSywgUExVR0lOX0lELCBJU3RhdHVzLk9LLCBtZXNzYWdlLCBleGNlcHRpb24pOwotCQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShQTFVHSU5fSUQpOwotCQkJaWYgKGJ1bmRsZSAhPSBudWxsKSAKLQkJCQlQbGF0Zm9ybS5nZXRMb2coYnVuZGxlKS5sb2coc3RhdHVzT2JqKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgcGxhdGZvcm0gaXMgZGVidWdnaW5nCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzRGVidWdnaW5nKCkgewotCQlyZXR1cm4gUGxhdGZvcm0uaW5EZWJ1Z01vZGUoKTsKLQl9Ci0KLQkvKioKLQkgKiBEZXRlcm1pbmVzIGlmIGN1cnJlbnRseSB0cmFjaW5nIGEgY2F0ZWdvcnkKLQkgKiBAcGFyYW0gY2F0ZWdvcnkKLQkgKiBAcmV0dXJuIHRydWUgaWYgdHJhY2luZyBjYXRlZ29yeSwgZmFsc2Ugb3RoZXJ3aXNlCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzVHJhY2luZyhTdHJpbmcgY2F0ZWdvcnkpIHsKLQkJaWYgKCFpc0RlYnVnZ2luZygpKQotCQkJcmV0dXJuIGZhbHNlOwotCi0JCVN0cmluZyB0cmFjZUZpbHRlciA9IFBsYXRmb3JtLmdldERlYnVnT3B0aW9uKFBMVUdJTl9JRCArIFRSQUNFRklMVEVSX0xPQ0FUSU9OKTsKLQkJaWYgKHRyYWNlRmlsdGVyICE9IG51bGwpIHsKLQkJCVN0cmluZ1Rva2VuaXplciB0b2tlbml6ZXIgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHRyYWNlRmlsdGVyLCAiLCIpOyAvLyROT04tTkxTLTEkCi0JCQl3aGlsZSAodG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSkgewotCQkJCVN0cmluZyBjYXQgPSB0b2tlbml6ZXIubmV4dFRva2VuKCkudHJpbSgpOwotCQkJCWlmIChjYXRlZ29yeS5lcXVhbHMoY2F0KSkgewotCQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2coaW50IGxldmVsLCBTdHJpbmcgbWVzc2FnZSkgewotCQlfbG9nKGxldmVsLCBtZXNzYWdlLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nKGludCBsZXZlbCwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX2xvZyhsZXZlbCwgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nRXhjZXB0aW9uKFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV9sb2coRVJST1IsIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZ0V4Y2VwdGlvbihUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV9sb2coRVJST1IsIGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCksIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHRyYWNlRXhjZXB0aW9uKFN0cmluZyBjYXRlZ29yeSwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX3RyYWNlKGNhdGVnb3J5LCBtZXNzYWdlLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCB0cmFjZUV4Y2VwdGlvbihTdHJpbmcgY2F0ZWdvcnksIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX3RyYWNlKGNhdGVnb3J5LCBleGNlcHRpb24uZ2V0TWVzc2FnZSgpLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCB0cmFjZShTdHJpbmcgY2F0ZWdvcnksIFN0cmluZyBtZXNzYWdlKSB7Ci0JCV90cmFjZShjYXRlZ29yeSwgbWVzc2FnZSwgbnVsbCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC91aS90ZXN0cy92aWV3ZXIvVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25EVEQuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvdWkvdGVzdHMvdmlld2VyL1Rlc3RWaWV3ZXJDb25maWd1cmF0aW9uRFRELmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5ZWU4NDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC91aS90ZXN0cy92aWV3ZXIvVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25EVEQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy52aWV3ZXI7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklBdXRvRWRpdFN0cmF0ZWd5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVRleHREb3VibGVDbGlja1N0cmF0ZWd5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuY29udGVudGFzc2lzdC5JQ29udGVudEFzc2lzdGFudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJlY29uY2lsZXIuSVJlY29uY2lsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXh0LklEVERQYXJ0aXRpb25zOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5kdGQudWkuU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uRFREOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMuaW50ZXJuYWwuTG9nZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuU3RydWN0dXJlZFRleHRWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5wcm92aXNpb25hbC5zdHlsZS5MaW5lU3R5bGVQcm92aWRlcjsKLQotcHVibGljIGNsYXNzIFRlc3RWaWV3ZXJDb25maWd1cmF0aW9uRFREIGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHJpdmF0ZSBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25EVEQgZkNvbmZpZyA9IG51bGw7Ci0JcHJpdmF0ZSBib29sZWFuIGZEaXNwbGF5RXhpc3RzID0gdHJ1ZTsKLQlwcml2YXRlIFN0cnVjdHVyZWRUZXh0Vmlld2VyIGZWaWV3ZXIgPSBudWxsOwotCXByaXZhdGUgYm9vbGVhbiBpc1NldHVwID0gZmFsc2U7Ci0KLQlwdWJsaWMgVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25EVEQoKSB7Ci0JCXN1cGVyKCJUZXN0Vmlld2VyQ29uZmlndXJhdGlvbkRURCIpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLQkJc3VwZXIuc2V0VXAoKTsKLQkJaWYgKCF0aGlzLmlzU2V0dXApIHsKLQkJCXNldFVwVmlld2VyQ29uZmlndXJhdGlvbigpOwotCQkJdGhpcy5pc1NldHVwID0gdHJ1ZTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBzZXRVcFZpZXdlckNvbmZpZ3VyYXRpb24oKSB7Ci0KLQkJaWYgKERpc3BsYXkuZ2V0Q3VycmVudCgpICE9IG51bGwpIHsKLQotCQkJU2hlbGwgc2hlbGwgPSBudWxsOwotCQkJQ29tcG9zaXRlIHBhcmVudCA9IG51bGw7Ci0KLQkJCWlmIChQbGF0Zm9ybVVJLmlzV29ya2JlbmNoUnVubmluZygpKSB7Ci0JCQkJc2hlbGwgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldFNoZWxsKCk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlzaGVsbCA9IG5ldyBTaGVsbChEaXNwbGF5LmdldEN1cnJlbnQoKSk7Ci0JCQl9Ci0JCQlwYXJlbnQgPSBuZXcgQ29tcG9zaXRlKHNoZWxsLCBTV1QuTk9ORSk7Ci0KLQkJCS8vIGR1bW15IHZpZXdlcgotCQkJZlZpZXdlciA9IG5ldyBTdHJ1Y3R1cmVkVGV4dFZpZXdlcihwYXJlbnQsIG51bGwsIG51bGwsIGZhbHNlLCBTV1QuTk9ORSk7Ci0JCQlmQ29uZmlnID0gbmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbkRURCgpOwotCQl9Ci0JCWVsc2UgewotCQkJZkRpc3BsYXlFeGlzdHMgPSBmYWxzZTsKLQkJCUxvZ2dlci5sb2coTG9nZ2VyLklORk8sICJSZW1lbWJlciwgdmlld2VyIGNvbmZpZ3VyYXRpb24gdGVzdHMgYXJlIG5vdCBydW4gYmVjYXVzZSB3b3JrYmVuY2ggaXMgbm90IG9wZW4gKG5vcm1hbCBvbiBidWlsZCBtYWNoaW5lKSIpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogTm90IG5lY2Vzc2FyeQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RHZXRBdXRvRWRpdFN0cmF0ZWdpZXMoKSB7Ci0KLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZiAoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCi0JCUlBdXRvRWRpdFN0cmF0ZWd5W10gc3RyYXRlZ2llcyA9IGZDb25maWcuZ2V0QXV0b0VkaXRTdHJhdGVnaWVzKGZWaWV3ZXIsIElEVERQYXJ0aXRpb25zLkRURF9ERUZBVUxUKTsKLQkJYXNzZXJ0Tm90TnVsbChzdHJhdGVnaWVzKTsKLQkJYXNzZXJ0VHJ1ZSgidGhlcmUgYXJlIG5vIGF1dG8gZWRpdCBzdHJhdGVnaWVzIiwgc3RyYXRlZ2llcy5sZW5ndGggPiAwKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0Q29uZmlndXJlZENvbnRlbnRUeXBlcygpIHsKLQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJU3RyaW5nW10gY29uZmlndXJlZENvbnRlbnRUeXBlcyA9IGZDb25maWcuZ2V0Q29uZmlndXJlZENvbnRlbnRUeXBlcyhmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbChjb25maWd1cmVkQ29udGVudFR5cGVzKTsKLQkJYXNzZXJ0VHJ1ZSgidGhlcmUgYXJlIG5vIGNvbmZpZ3VyZWQgY29udGVudCB0eXBlcyIsIGNvbmZpZ3VyZWRDb250ZW50VHlwZXMubGVuZ3RoID4gMSk7Ci0JfQotCi0JLyoqCi0JICogTm90IG5lY2Vzc2FyeQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RHZXRDb250ZW50QXNzaXN0YW50KCkgewotCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYgKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQotCQlJQ29udGVudEFzc2lzdGFudCBjYSA9IGZDb25maWcuZ2V0Q29udGVudEFzc2lzdGFudChmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgidGhlcmUgaXMgbm8gY29udGVudCBhc3Npc3RhbnQiLCBjYSk7Ci0JfQotCi0JLyoqCi0JICogTm90IG5lY2Vzc2FyeQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RHZXREb3VibGVDbGlja1N0cmF0ZWd5KCkgewotCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYgKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQotCQlTdHJpbmdbXSBjb250ZW50VHlwZXMgPSBmQ29uZmlnLmdldENvbmZpZ3VyZWRDb250ZW50VHlwZXMoZlZpZXdlcik7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY29udGVudFR5cGVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlJVGV4dERvdWJsZUNsaWNrU3RyYXRlZ3kgc3RyYXRlZ3kgPSBmQ29uZmlnLmdldERvdWJsZUNsaWNrU3RyYXRlZ3koZlZpZXdlciwgY29udGVudFR5cGVzW2ldKTsKLQkJCWlmIChzdHJhdGVneSAhPSBudWxsKSB7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQl9Ci0JCWFzc2VydFRydWUoInRoZXJlIGFyZSBubyBjb25maWd1cmVkIGRvdWJsZSBjbGljayBzdHJhdGVnaWVzIiwgZmFsc2UpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRMaW5lU3R5bGVQcm92aWRlcnMoKSB7Ci0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJU3RyaW5nW10gY29udGVudFR5cGVzID0gZkNvbmZpZy5nZXRDb25maWd1cmVkQ29udGVudFR5cGVzKGZWaWV3ZXIpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbnRlbnRUeXBlcy5sZW5ndGg7IGkrKykgewotCQkJTGluZVN0eWxlUHJvdmlkZXIgcHJvdmlkZXJzW10gPSBmQ29uZmlnLmdldExpbmVTdHlsZVByb3ZpZGVycyhmVmlld2VyLCBjb250ZW50VHlwZXNbaV0pOwotCQkJaWYocHJvdmlkZXJzICE9IG51bGwpIHsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSgidGhlcmUgYXJlIG5vIGNvbmZpZ3VyZWQgbGluZSBzdHlsZSBwcm92aWRlcnMiLCBmYWxzZSk7Ci0JfQotCi0JLyoqCi0JICogTm90IG5lY2Vzc2FyeQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RHZXRSZWNvbmNpbGVyKCkgewotCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYgKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQotCQlJUmVjb25jaWxlciByID0gZkNvbmZpZy5nZXRSZWNvbmNpbGVyKGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKCJSZWNvbmNpbGVyIGlzIG51bGwiLCByKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL3VpL3Rlc3RzL3ZpZXdlci9WaWV3ZXJUZXN0RFRELmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL3VpL3Rlc3RzL3ZpZXdlci9WaWV3ZXJUZXN0RFRELmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4M2RiMTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC91aS90ZXN0cy92aWV3ZXIvVmlld2VyVGVzdERURC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDkzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLnZpZXdlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklDb250cmlidXRpb25NYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5EaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSkZhY2VSZXNvdXJjZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LldpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQnVzeUluZGljYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklNZW1lbnRvOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklWaWV3U2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LlZpZXdQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IuSVRleHRFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuSUNvbnRlbnRPdXRsaW5lUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvckRURDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuZHRkLnVpLlN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbkRURDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSW5kZXhlZFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLlN0cnVjdHVyZWRUZXh0RWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuU3RydWN0dXJlZFRleHRWaWV3ZXI7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLQotcHVibGljIGNsYXNzIFZpZXdlclRlc3REVEQgZXh0ZW5kcyBWaWV3UGFydCB7Ci0JLyoqCi0JICogU2V0cyB0aGUgdmlld2VyJ3MgaGlnaGxpZ2h0aW5nIHRleHQgcmFuZ2UgdG8gdGhlIHRleHQgcmFuZ2UgaW5kaWNhdGVkCi0JICogYnkgdGhlIHNlbGVjdGVkIE5vZGVzLgotCSAqLwotCXByb3RlY3RlZCBjbGFzcyBOb2RlUmFuZ2VTZWxlY3Rpb25MaXN0ZW5lciBpbXBsZW1lbnRzIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgewotCQlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgewotCQkJaWYgKCFldmVudC5nZXRTZWxlY3Rpb24oKS5pc0VtcHR5KCkgJiYgZXZlbnQuZ2V0U2VsZWN0aW9uKCkgaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgewotCQkJCUlTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbiA9IChJU3RydWN0dXJlZFNlbGVjdGlvbikgZXZlbnQuZ2V0U2VsZWN0aW9uKCk7Ci0JCQkJSW5kZXhlZFJlZ2lvbiBzdGFydE5vZGUgPSAoSW5kZXhlZFJlZ2lvbikgc2VsZWN0aW9uLmdldEZpcnN0RWxlbWVudCgpOwotCQkJCUluZGV4ZWRSZWdpb24gZW5kTm9kZSA9IChJbmRleGVkUmVnaW9uKSBzZWxlY3Rpb24udG9BcnJheSgpW3NlbGVjdGlvbi5zaXplKCkgLSAxXTsKLQotCQkJCWlmIChzdGFydE5vZGUgaW5zdGFuY2VvZiBBdHRyKQotCQkJCQlzdGFydE5vZGUgPSAoSW5kZXhlZFJlZ2lvbikgKChBdHRyKSBzdGFydE5vZGUpLmdldE93bmVyRWxlbWVudCgpOwotCQkJCWlmIChlbmROb2RlIGluc3RhbmNlb2YgQXR0cikKLQkJCQkJZW5kTm9kZSA9IChJbmRleGVkUmVnaW9uKSAoKEF0dHIpIGVuZE5vZGUpLmdldE93bmVyRWxlbWVudCgpOwotCi0JCQkJaW50IHN0YXJ0ID0gc3RhcnROb2RlLmdldFN0YXJ0T2Zmc2V0KCk7Ci0JCQkJaW50IGVuZCA9IGVuZE5vZGUuZ2V0RW5kT2Zmc2V0KCk7Ci0KLQkJCQlmU291cmNlVmlld2VyLnJlc2V0VmlzaWJsZVJlZ2lvbigpOwotCQkJCWZTb3VyY2VWaWV3ZXIuc2V0VmlzaWJsZVJlZ2lvbihzdGFydCwgZW5kIC0gc3RhcnQpOwotCQkJCWZTb3VyY2VWaWV3ZXIuc2V0U2VsZWN0ZWRSYW5nZShzdGFydCwgMCk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlmU291cmNlVmlld2VyLnJlc2V0VmlzaWJsZVJlZ2lvbigpOwotCQkJfQotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIGNsYXNzIE51bWJlcklucHV0RGlhbG9nIGV4dGVuZHMgRGlhbG9nIHsKLQkJcHVibGljIFRleHQgbGVuZ3RoOwotCi0JCWludCBsZW5ndGhWYWx1ZTsKLQkJcHVibGljIFRleHQgc3RhcnQ7Ci0JCWludCBzdGFydFZhbHVlOwotCi0JCXB1YmxpYyBOdW1iZXJJbnB1dERpYWxvZyhTaGVsbCBzaGVsbCkgewotCQkJc3VwZXIoc2hlbGwpOwotCQl9Ci0KLQkJcHJvdGVjdGVkIENvbnRyb2wgY3JlYXRlRGlhbG9nQXJlYShDb21wb3NpdGUgcGFyZW50KSB7Ci0JCQlDb21wb3NpdGUgY29tcG9zaXRlID0gKENvbXBvc2l0ZSkgc3VwZXIuY3JlYXRlRGlhbG9nQXJlYShwYXJlbnQpOwotCQkJQ29tcG9zaXRlIGNvbnRhaW5lciA9IG5ldyBDb21wb3NpdGUoY29tcG9zaXRlLCBTV1QuTlVMTCk7Ci0JCQljb250YWluZXIuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKSk7Ci0JCQljb250YWluZXIuc2V0TGF5b3V0KG5ldyBHcmlkTGF5b3V0KDIsIHRydWUpKTsKLQkJCXNldFNoZWxsU3R5bGUoZ2V0U2hlbGwoKS5nZXRTdHlsZSgpIHwgU1dULlJFU0laRSk7Ci0KLQkJCUxhYmVsIGxhYmVsID0gbmV3IExhYmVsKGNvbnRhaW5lciwgU1dULk5VTEwpOwotCQkJbGFiZWwuc2V0VGV4dCgiU3RhcnQiKTsKLQkJCWxhYmVsLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCkpOwotCi0JCQlsYWJlbCA9IG5ldyBMYWJlbChjb250YWluZXIsIFNXVC5OVUxMKTsKLQkJCWxhYmVsLnNldFRleHQoIkxlbmd0aCIpOwotCQkJbGFiZWwuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKSk7Ci0KLQkJCXN0YXJ0ID0gbmV3IFRleHQoY29udGFpbmVyLCBTV1QuQk9SREVSKTsKLQkJCXN0YXJ0VmFsdWUgPSBmU291cmNlVmlld2VyLmdldFZpc2libGVSZWdpb24oKS5nZXRPZmZzZXQoKTsKLQkJCXN0YXJ0LnNldFRleHQoIiIgKyBzdGFydFZhbHVlKTsKLQkJCXN0YXJ0LnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCkpOwotCi0JCQlsZW5ndGggPSBuZXcgVGV4dChjb250YWluZXIsIFNXVC5CT1JERVIpOwotCQkJbGVuZ3RoVmFsdWUgPSBmU291cmNlVmlld2VyLmdldFZpc2libGVSZWdpb24oKS5nZXRMZW5ndGgoKTsKLQkJCWxlbmd0aC5zZXRUZXh0KCIiICsgbGVuZ3RoVmFsdWUpOwotCQkJbGVuZ3RoLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCkpOwotCi0JCQkvLyBzdGFydC5hZGRNb2RpZnlMaXN0ZW5lcihuZXcgTW9kaWZ5TGlzdGVuZXIoKSB7Ci0JCQkvLyBwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KE1vZGlmeUV2ZW50IGUpIHsKLQkJCS8vIGlmIChlLndpZGdldCA9PSBzdGFydCkgewotCQkJLy8gdHJ5IHsKLQkJCS8vIHN0YXJ0VmFsdWUgPSBJbnRlZ2VyLmRlY29kZShzdGFydC5nZXRUZXh0KCkpLmludFZhbHVlKCk7Ci0JCQkvLyB9Ci0JCQkvLyBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUyKSB7Ci0JCQkvLyBzdGFydFZhbHVlID0gMDsKLQkJCS8vIH0KLQkJCS8vIH0KLQkJCS8vIH0KLQkJCS8vIH0pOwotCQkJLy8gbGVuZ3RoLmFkZE1vZGlmeUxpc3RlbmVyKG5ldyBNb2RpZnlMaXN0ZW5lcigpIHsKLQkJCS8vIHB1YmxpYyB2b2lkIG1vZGlmeVRleHQoTW9kaWZ5RXZlbnQgZSkgewotCQkJLy8gaWYgKGUud2lkZ2V0ID09IGxlbmd0aCkgewotCQkJLy8gdHJ5IHsKLQkJCS8vIGxlbmd0aFZhbHVlID0gSW50ZWdlci5kZWNvZGUobGVuZ3RoLmdldFRleHQoKSkuaW50VmFsdWUoKTsKLQkJCS8vIH0KLQkJCS8vIGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZTIpIHsKLQkJCS8vIGxlbmd0aFZhbHVlID0gMDsKLQkJCS8vIH0KLQkJCS8vIH0KLQkJCS8vIH0KLQkJCS8vIH0pOwotCi0JCQlyZXR1cm4gY29tcG9zaXRlOwotCQl9Ci0KLQkJLyoKLQkJICogKG5vbi1KYXZhZG9jKQotCQkgKiAKLQkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZyNva1ByZXNzZWQoKQotCQkgKi8KLQkJcHJvdGVjdGVkIHZvaWQgb2tQcmVzc2VkKCkgewotCQkJdHJ5IHsKLQkJCQlzdGFydFZhbHVlID0gSW50ZWdlci5kZWNvZGUoc3RhcnQuZ2V0VGV4dCgpKS5pbnRWYWx1ZSgpOwotCQkJfQotCQkJY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlMikgewotCQkJCXN0YXJ0VmFsdWUgPSAwOwotCQkJfQotCQkJdHJ5IHsKLQkJCQlsZW5ndGhWYWx1ZSA9IEludGVnZXIuZGVjb2RlKGxlbmd0aC5nZXRUZXh0KCkpLmludFZhbHVlKCk7Ci0JCQl9Ci0JCQljYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUyKSB7Ci0JCQkJbGVuZ3RoVmFsdWUgPSAwOwotCQkJfQotCQkJc3VwZXIub2tQcmVzc2VkKCk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIGZpbmFsIFN0cmluZyBERUZBVUxUX1ZJRVdFUl9DT05URU5UUyA9ICI8IURPQ1RZUEUgSFRNTCBQVUJMSUMgXCItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTlwiPlxuPEhUTUw+XG4JPEhFQUQ+XG4JCTxNRVRBIGh0dHAtZXF1aXY9XCJDb250ZW50LVR5cGVcIiBjb250ZW50PVwidGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTFcIj5cbgkJPFRJVExFPnBsYWNlIHRpdGxlIGhlcmU8L1RJVExFPlxuCTwvSEVBRD5cbgk8Qk9EWT5cbgkJcGxhY2UgY29udGVudCBoZXJlCVxuPHNjcmlwdD5cblwidGV4dFwiO1xuPC9TQ1JJUFQ+XG48L0JPRFk+XG48L0hUTUw+IjsKLQlwcml2YXRlIFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbiBmQ29uZmlnID0gbnVsbDsKLQlwcml2YXRlIElDb250ZW50T3V0bGluZVBhZ2UgZkNvbnRlbnRPdXRsaW5lUGFnZSA9IG51bGw7Ci0JcHJpdmF0ZSBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGZIaWdobGlnaHRSYW5nZUxpc3RlbmVyID0gbnVsbDsKLQotCXByaXZhdGUgU3RydWN0dXJlZFRleHRWaWV3ZXIgZlNvdXJjZVZpZXdlciA9IG51bGw7Ci0KLQotCXByaXZhdGUgZmluYWwgU3RyaW5nIFNTRV9FRElUT1JfRk9OVCA9ICJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRleHRmb250IjsKLQotCXByb3RlY3RlZCB2b2lkIGFkZEFjdGlvbnMoSUNvbnRyaWJ1dGlvbk1hbmFnZXIgbWdyKSB7Ci0JCWlmIChtZ3IgIT0gbnVsbCkgewotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJOZXcgSFRNTCI7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlzdXBlci5ydW4oKTsKLQkJCQkJQnVzeUluZGljYXRvci5zaG93V2hpbGUoZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLCBuZXcgUnVubmFibGUoKSB7Ci0JCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCQkJc2V0dXBWaWV3ZXJGb3JOZXcoKTsKLQkJCQkJCQlmU291cmNlVmlld2VyLnNldEVkaXRhYmxlKHRydWUpOwotCQkJCQkJfQotCQkJCQl9KTsKLQkJCQl9Ci0JCQl9KTsKLQkJCW1nci5hZGQobmV3IFNlcGFyYXRvcigpKTsKLQkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkJCXJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkJCXJldHVybiAiQ2hhbmdlIFZpc2liaWxpdHkiOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJc3VwZXIucnVuKCk7Ci0JCQkJCU51bWJlcklucHV0RGlhbG9nIGRsZyA9IG5ldyBOdW1iZXJJbnB1dERpYWxvZyhmU291cmNlVmlld2VyLmdldENvbnRyb2woKS5nZXRTaGVsbCgpKTsKLQkJCQkJaW50IHByb2NlZWQgPSBkbGcub3BlbigpOwotCQkJCQlpZiAocHJvY2VlZCA9PSBXaW5kb3cuQ0FOQ0VMKQotCQkJCQkJcmV0dXJuOwotCQkJCQlmU291cmNlVmlld2VyLnJlc2V0VmlzaWJsZVJlZ2lvbigpOwotCQkJCQlmU291cmNlVmlld2VyLnNldFZpc2libGVSZWdpb24oZGxnLnN0YXJ0VmFsdWUsIGRsZy5sZW5ndGhWYWx1ZSk7Ci0JCQkJfQotCQkJfSk7Ci0JCQltZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQkJCQlyZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJCQlyZXR1cm4gIlNob3cgQWxsIjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlmU291cmNlVmlld2VyLnJlc2V0VmlzaWJsZVJlZ2lvbigpOwotCQkJCX0KLQkJCX0pOwotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJDaGFuZ2UgVmlzaWJpbGl0eSBpbiBFZGl0b3IiOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJc3VwZXIucnVuKCk7Ci0JCQkJCVN0cnVjdHVyZWRUZXh0Vmlld2VyIHNvdXJjZVZpZXdlciA9IG51bGw7Ci0JCQkJCUlFZGl0b3JQYXJ0IHBhcnQgPSBnZXRWaWV3U2l0ZSgpLmdldFdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKTsKLQkJCQkJaWYgKHBhcnQgIT0gbnVsbCAmJiBwYXJ0IGluc3RhbmNlb2YgU3RydWN0dXJlZFRleHRFZGl0b3IpIHsKLQkJCQkJCXNvdXJjZVZpZXdlciA9ICgoU3RydWN0dXJlZFRleHRFZGl0b3IpIHBhcnQpLmdldFRleHRWaWV3ZXIoKTsKLQkJCQkJfQotCQkJCQlpZiAoc291cmNlVmlld2VyICE9IG51bGwpIHsKLQkJCQkJCU51bWJlcklucHV0RGlhbG9nIGRsZyA9IG5ldyBOdW1iZXJJbnB1dERpYWxvZyhzb3VyY2VWaWV3ZXIuZ2V0Q29udHJvbCgpLmdldFNoZWxsKCkpOwotCQkJCQkJaW50IHByb2NlZWQgPSBkbGcub3BlbigpOwotCQkJCQkJaWYgKHByb2NlZWQgPT0gV2luZG93LkNBTkNFTCkKLQkJCQkJCQlyZXR1cm47Ci0JCQkJCQlzb3VyY2VWaWV3ZXIucmVzZXRWaXNpYmxlUmVnaW9uKCk7Ci0JCQkJCQlzb3VyY2VWaWV3ZXIuc2V0VmlzaWJsZVJlZ2lvbihkbGcuc3RhcnRWYWx1ZSwgZGxnLmxlbmd0aFZhbHVlKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0pOwotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJTaG93IEFsbCBpbiBFZGl0b3IiOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJc3VwZXIucnVuKCk7Ci0JCQkJCVN0cnVjdHVyZWRUZXh0Vmlld2VyIHNvdXJjZVZpZXdlciA9IG51bGw7Ci0JCQkJCUlFZGl0b3JQYXJ0IHBhcnQgPSBnZXRWaWV3U2l0ZSgpLmdldFdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKTsKLQkJCQkJaWYgKHBhcnQgIT0gbnVsbCAmJiBwYXJ0IGluc3RhbmNlb2YgU3RydWN0dXJlZFRleHRFZGl0b3IpIHsKLQkJCQkJCXNvdXJjZVZpZXdlciA9ICgoU3RydWN0dXJlZFRleHRFZGl0b3IpIHBhcnQpLmdldFRleHRWaWV3ZXIoKTsKLQkJCQkJfQotCQkJCQlpZiAoc291cmNlVmlld2VyICE9IG51bGwpIHsKLQkJCQkJCXNvdXJjZVZpZXdlci5yZXNldFZpc2libGVSZWdpb24oKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0pOwotCQkJbWdyLmFkZChuZXcgU2VwYXJhdG9yKCkpOwotCQkJLy8gbm8gbG9uZ2VyIGFibGUgdG8gc2V0IGZJbnB1dCB0byBOVUxMCi0JCQkvLyBtZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkvLyBwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkvLyByZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCS8vIH0KLQkJCS8vCi0JCQkvLyBwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJLy8gcmV0dXJuICJTZXQgSW5wdXQgdG8gTlVMTCI7Ci0JCQkvLyB9Ci0JCQkvLyBwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkvLyBzdXBlci5ydW4oKTsKLQkJCS8vIHZpZXdlci5zZXRJbnB1dChudWxsKTsKLQkJCS8vIH0KLQkJCS8vIH0pOwotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJUYWtlIElucHV0IGZyb20gQWN0aXZlIEVkaXRvciI7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlzdXBlci5ydW4oKTsKLQkJCQkJSVRleHRFZGl0b3IgdGV4dEVkaXRvciA9IGdldEFjdGl2ZUVkaXRvcigpOwotCQkJCQlpZiAodGV4dEVkaXRvciAhPSBudWxsKSB7Ci0JCQkJCQlzZXR1cFZpZXdlckZvckVkaXRvcih0ZXh0RWRpdG9yKTsKLQkJCQkJCWZTb3VyY2VWaWV3ZXIuc2V0RWRpdGFibGUodHJ1ZSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9KTsKLQkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkJCXJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkJCXJldHVybiAiVGFrZSBJbnB1dCBhbmQgRm9sbG93IFNlbGVjdGlvbiI7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlzdXBlci5ydW4oKTsKLQkJCQkJZm9sbG93U2VsZWN0aW9uKCk7Ci0JCQkJCWZTb3VyY2VWaWV3ZXIuc2V0RWRpdGFibGUodHJ1ZSk7Ci0JCQkJfQotCQkJfSk7Ci0JCQltZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQkJCQlyZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJCQlyZXR1cm4gIlRha2UgSW5wdXQgYW5kIEZvbGxvdyBTZWxlY3Rpb24gQXMgUmVhZE9ubHkiOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJc3VwZXIucnVuKCk7Ci0JCQkJCWZvbGxvd1NlbGVjdGlvbigpOwotCQkJCQlmU291cmNlVmlld2VyLnNldEVkaXRhYmxlKGZhbHNlKTsKLQkJCQl9Ci0JCQl9KTsKLQkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkJCXJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkJCXJldHVybiAiU3RvcCBGb2xsb3dpbmcgU2VsZWN0aW9uIjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlzdG9wRm9sbG93U2VsZWN0aW9uKCk7Ci0JCQkJfQotCQkJfSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0I2NyZWF0ZVBhcnRDb250cm9sKENvbXBvc2l0ZSkKLQkgKi8KLQlwdWJsaWMgdm9pZCBjcmVhdGVQYXJ0Q29udHJvbChDb21wb3NpdGUgcGFyZW50KSB7Ci0JCUlDb250cmlidXRpb25NYW5hZ2VyIG1nciA9IGdldFZpZXdTaXRlKCkuZ2V0QWN0aW9uQmFycygpLmdldE1lbnVNYW5hZ2VyKCk7Ci0JCWFkZEFjdGlvbnMobWdyKTsKLQotCQkvLyBjcmVhdGUgc291cmNlIHZpZXdlciAmIGl0cyBjb250ZW50IHR5cGUtc3BlY2lmaWMgdmlld2VyCi0JCS8vIGNvbmZpZ3VyYXRpb24KLQkJZlNvdXJjZVZpZXdlciA9IG5ldyBTdHJ1Y3R1cmVkVGV4dFZpZXdlcihwYXJlbnQsIG51bGwsIG51bGwsIGZhbHNlLCBTV1QuTk9ORSk7Ci0JCWZDb25maWcgPSBuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uRFREKCk7Ci0KLQkJLy8gc2V0IHVwIHRoZSB2aWV3ZXIgd2l0aCBhIGRvY3VtZW50ICYgdmlld2VyIGNvbmZpZwotCQlzZXR1cFZpZXdlckZvck5ldygpOwotCi0JCXNldHVwVmlld2VyUHJlZmVyZW5jZXMoKTsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0I2Rpc3Bvc2UoKQotCSAqLwotCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7Ci0JCXN0b3BGb2xsb3dTZWxlY3Rpb24oKTsKLQkJZlNvdXJjZVZpZXdlci51bmNvbmZpZ3VyZSgpOwotCX0KLQotCS8qKgotCSAqIEhvb2tzIHVwIHRoZSB2aWV3ZXIgdG8gZm9sbG93IHRoZSBmU2VsZWN0aW9uIG1hZGUgaW4gdGhlIGFjdGl2ZSBlZGl0b3IKLQkgKi8KLQlwcml2YXRlIHZvaWQgZm9sbG93U2VsZWN0aW9uKCkgewotCQlJVGV4dEVkaXRvciBlZGl0b3IgPSBnZXRBY3RpdmVFZGl0b3IoKTsKLQkJaWYgKGVkaXRvciAhPSBudWxsKSB7Ci0JCQlzZXR1cFZpZXdlckZvckVkaXRvcihlZGl0b3IpOwotCQkJaWYgKGZIaWdobGlnaHRSYW5nZUxpc3RlbmVyID09IG51bGwpCi0JCQkJZkhpZ2hsaWdodFJhbmdlTGlzdGVuZXIgPSBuZXcgTm9kZVJhbmdlU2VsZWN0aW9uTGlzdGVuZXIoKTsKLQotCQkJZkNvbnRlbnRPdXRsaW5lUGFnZSA9ICgoSUNvbnRlbnRPdXRsaW5lUGFnZSkgZWRpdG9yLmdldEFkYXB0ZXIoSUNvbnRlbnRPdXRsaW5lUGFnZS5jbGFzcykpOwotCQkJaWYgKGZDb250ZW50T3V0bGluZVBhZ2UgIT0gbnVsbCkgewotCQkJCWZDb250ZW50T3V0bGluZVBhZ2UuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKGZIaWdobGlnaHRSYW5nZUxpc3RlbmVyKTsKLQotCQkJCWlmICghZkNvbnRlbnRPdXRsaW5lUGFnZS5nZXRTZWxlY3Rpb24oKS5pc0VtcHR5KCkgJiYgZkNvbnRlbnRPdXRsaW5lUGFnZS5nZXRTZWxlY3Rpb24oKSBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7Ci0JCQkJCWZTb3VyY2VWaWV3ZXIucmVzZXRWaXNpYmxlUmVnaW9uKCk7Ci0KLQkJCQkJT2JqZWN0W10gbm9kZXMgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBmQ29udGVudE91dGxpbmVQYWdlLmdldFNlbGVjdGlvbigpKS50b0FycmF5KCk7Ci0JCQkJCUluZGV4ZWRSZWdpb24gc3RhcnROb2RlID0gKEluZGV4ZWRSZWdpb24pIG5vZGVzWzBdOwotCQkJCQlJbmRleGVkUmVnaW9uIGVuZE5vZGUgPSAoSW5kZXhlZFJlZ2lvbikgbm9kZXNbbm9kZXMubGVuZ3RoIC0gMV07Ci0KLQkJCQkJaW50IHN0YXJ0ID0gc3RhcnROb2RlLmdldFN0YXJ0T2Zmc2V0KCk7Ci0JCQkJCWludCBlbmQgPSBlbmROb2RlLmdldEVuZE9mZnNldCgpOwotCi0JCQkJCWZTb3VyY2VWaWV3ZXIuc2V0VmlzaWJsZVJlZ2lvbihzdGFydCwgZW5kIC0gc3RhcnQpOwotCQkJCQlmU291cmNlVmlld2VyLnNldFNlbGVjdGVkUmFuZ2Uoc3RhcnQsIDApOwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGN1cnJlbnQgYWN0aXZlIHRleHQgZWRpdG9yIGlmIHBvc3NpYmxlCi0JICogCi0JICogQHJldHVybiBJVGV4dEVkaXRvcgotCSAqLwotCXByaXZhdGUgSVRleHRFZGl0b3IgZ2V0QWN0aXZlRWRpdG9yKCkgewotCQlJVGV4dEVkaXRvciBlZGl0b3IgPSBudWxsOwotCQlJRWRpdG9yUGFydCBlZGl0b3JQYXJ0ID0gZ2V0U2l0ZSgpLmdldFdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKTsKLQkJaWYgKGVkaXRvclBhcnQgaW5zdGFuY2VvZiBJVGV4dEVkaXRvcikKLQkJCWVkaXRvciA9IChJVGV4dEVkaXRvcikgZWRpdG9yUGFydDsKLQkJaWYgKGVkaXRvciA9PSBudWxsICYmIGVkaXRvclBhcnQgIT0gbnVsbCkKLQkJCWVkaXRvciA9IChJVGV4dEVkaXRvcikgZWRpdG9yUGFydC5nZXRBZGFwdGVyKElUZXh0RWRpdG9yLmNsYXNzKTsKLQkJcmV0dXJuIGVkaXRvcjsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklWaWV3UGFydCNpbml0KElWaWV3U2l0ZSwgSU1lbWVudG8pCi0JICovCi0JcHVibGljIHZvaWQgaW5pdChJVmlld1NpdGUgc2l0ZSwgSU1lbWVudG8gbWVtZW50bykgdGhyb3dzIFBhcnRJbml0RXhjZXB0aW9uIHsKLQkJc3VwZXIuaW5pdChzaXRlLCBtZW1lbnRvKTsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0I3NldEZvY3VzKCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRGb2N1cygpIHsKLQkJaWYgKGZTb3VyY2VWaWV3ZXIuZ2V0Q29udHJvbCgpICE9IG51bGwgJiYgIWZTb3VyY2VWaWV3ZXIuZ2V0Q29udHJvbCgpLmlzRGlzcG9zZWQoKSkKLQkJCWZTb3VyY2VWaWV3ZXIuZ2V0Q29udHJvbCgpLnNldEZvY3VzKCk7Ci0JfQotCi0JLyoqCi0JICogU2V0cyB1cCB0aGUgdmlld2VyIHdpdGggdGhlIHNhbWUgZG9jdW1lbnQvZklucHV0IGFzIHRoZSBnaXZlbiBlZGl0b3IKLQkgKiAKLQkgKiBAcGFyYW0gSVRleHRFZGl0b3IKLQkgKiAgICAgICAgICAgIGVkaXRvciAtIHRoZSBlZGl0b3IgdG8gdXNlICpjYW5ub3QgdG8gYmUgbnVsbCoKLQkgKi8KLQlwcml2YXRlIHZvaWQgc2V0dXBWaWV3ZXJGb3JFZGl0b3IoSVRleHRFZGl0b3IgZWRpdG9yKSB7Ci0JCXN0b3BGb2xsb3dTZWxlY3Rpb24oKTsgLy8gaWYgd2FzIGZvbGxvd2luZyBmU2VsZWN0aW9uLCBzdG9wCi0JCUlEb2N1bWVudCBkb2MgPSBlZGl0b3IuZ2V0RG9jdW1lbnRQcm92aWRlcigpLmdldERvY3VtZW50KGVkaXRvci5nZXRFZGl0b3JJbnB1dCgpKTsKLQkJZlNvdXJjZVZpZXdlci5zZXREb2N1bWVudChkb2MpOwotCi0JCS8vIG5lZWQgdG8gcmVjb25maWd1cmUgYWZ0ZXIgc2V0IGRvY3VtZW50IGp1c3Qgc28gaGlnaGxpZ2h0ZXIgd29ya3MKLQkJZlNvdXJjZVZpZXdlci5jb25maWd1cmUobmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbkRURCgpKTsKLQl9Ci0KLQkvKioKLQkgKiBTZXQgdXAgc291cmNlIHZpZXdlciB3aXRoIGEgbmV3IGRvY3VtZW50ICYgY29uZmlndXJlIGl0Ci0JICovCi0JcHJpdmF0ZSB2b2lkIHNldHVwVmlld2VyRm9yTmV3KCkgewotCQlzdG9wRm9sbG93U2VsZWN0aW9uKCk7IC8vIGlmIHdhcyBmb2xsb3dpbmcgZlNlbGVjdGlvbiwgc3RvcAotCi0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSURvY3VtZW50IGRvYyA9IG1vZGVsTWFuYWdlci5jcmVhdGVTdHJ1Y3R1cmVkRG9jdW1lbnRGb3IoQ29udGVudFR5cGVJZEZvckRURC5Db250ZW50VHlwZUlEX0RURCk7Ci0JCWRvYy5zZXQoREVGQVVMVF9WSUVXRVJfQ09OVEVOVFMpOwotCi0JCWZTb3VyY2VWaWV3ZXIuc2V0RG9jdW1lbnQoZG9jKTsKLQkJLy8gbmVlZCB0byByZWNvbmZpZ3VyZSBhZnRlciBzZXQgZG9jdW1lbnQganVzdCBzbyBoaWdobGlnaHRlciB3b3JrcwotCQlmU291cmNlVmlld2VyLmNvbmZpZ3VyZShmQ29uZmlnKTsKLQl9Ci0KLQkvKioKLQkgKiBTZXQgdXAgc291cmNlIHZpZXdlciB3aXRoIGFueSBhZGRpdGlvbmFsIHByZWZlcmVuY2VzIGl0IHNob3VsZCBoYXZlIEV4OgotCSAqIGZvbnQsIHRhYiB3aWR0aAotCSAqLwotCXByaXZhdGUgdm9pZCBzZXR1cFZpZXdlclByZWZlcmVuY2VzKCkgewotCQlmU291cmNlVmlld2VyLmdldFRleHRXaWRnZXQoKS5zZXRGb250KEpGYWNlUmVzb3VyY2VzLmdldEZvbnQoU1NFX0VESVRPUl9GT05UKSk7Ci0JfQotCi0JLyoqCi0JICogQ2Vhc2UgZm9sbG93aW5nIHRoZSBmU2VsZWN0aW9uIG1hZGUgaW4gdGhlIGVkaXRvcgotCSAqLwotCXByaXZhdGUgdm9pZCBzdG9wRm9sbG93U2VsZWN0aW9uKCkgewotCQlpZiAoZkNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7Ci0JCQlmQ29udGVudE91dGxpbmVQYWdlLnJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihmSGlnaGxpZ2h0UmFuZ2VMaXN0ZW5lcik7Ci0JCQlmU291cmNlVmlld2VyLnJlc2V0VmlzaWJsZVJlZ2lvbigpOwotCQkJZkNvbnRlbnRPdXRsaW5lUGFnZSA9IG51bGw7Ci0JCX0KLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3Rlc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Y2JmNGI2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvdGVzdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLQotPHByb2plY3QKLSAgICBuYW1lPSJ0ZXN0c3VpdGUiCi0gICAgZGVmYXVsdD0icnVuIgotICAgIGJhc2VkaXI9Ii4iPgotICAgIAotICAgIDwhLS0gVGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGlzIHNjcmlwdCAtLT4KLSAgICA8IS0tICR7ZWNsaXBzZS1ob21lfSAgIC0tPgotICAgIDwhLS0gJHtidWlsZERpcmVjdG9yeX0gIC0tPgotICAgIDwhLS0gJHtidWlsZExhYmVsfSAgICAgICAgLS0+Ci0KLSAgICA8IS0tIHNob3VsZCBiZSBsaXR0bGUgbmVlZCB0byBjaGFuZ2Ugd2hhdCdzIGFib3ZlICAtLT4KLQotCTxwcm9wZXJ0eQotCQluYW1lPSJwbHVnaW4tbmFtZSIKLQkJdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9ImNsYXNzbmFtZSIKLSAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMuRFREVUlUZXN0U3VpdGUiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9InRlc3RUeXBlIgotICAgICAgICB2YWx1ZT0idWktdGVzdCIgLz4KLQotICAgIDwhLS0gc2hvdWxkIGJlIGxpdHRsZSBuZWVkIHRvIGNoYW5nZSB3aGF0J3MgYmVsb3cgLS0+Ci0KLSAgICA8ZWNobyBtZXNzYWdlPSJiYXNlZGlyOiAke2Jhc2VkaXJ9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImVjbGlwc2UtaG9tZTogJHtlY2xpcHNlLWhvbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImJ1aWxkRGlyZWN0b3J5OiAke2J1aWxkRGlyZWN0b3J5fSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJwbHVnaW4tbmFtZTogJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iY2xhc3NuYW1lOiAke2NsYXNzbmFtZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0idGVzdFR5cGUgJHt0ZXN0VHlwZX0iIC8+Ci0KLQotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJsaWJyYXJ5LWZpbGUiCi0gICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMS4wL2xpYnJhcnkueG1sIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJ3b3Jrc3BhY2UiCi0gICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vanVuaXR3b3Jrc3BhY2VzLyR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICAKLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGFsbCBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBmb3IgLS0+Ci0gICAgPCEtLSBhbGwgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcnVuLiBJbml0aWFsaXphdGlvbiBmb3IgaW5kaXZpZHVhbCB0ZXN0cyAtLT4KLSAgICA8IS0tIHNob3VsZCBiZSBkb25lIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgc3VpdGUgdGFyZ2V0LiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9ImluaXQiPgotICAgICAgICA8dHN0YW1wIC8+Ci0gICAgICAgIDxkZWxldGU+Ci0gICAgICAgICAgICA8ZmlsZXNldAotICAgICAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9IgotICAgICAgICAgICAgICAgIGluY2x1ZGVzPSIke3BsdWdpbi1uYW1lfS4qeG1sIiAvPgotICAgICAgICA8L2RlbGV0ZT4KLSAgICAgICAgPCEtLSBtYWtlIGRpcmVjdG9yeSwgaW4gY2FzZSBwYXRoIGRvZXNuJ3QgZXhpc3QgeWV0IC0tPgotICAgICAgICA8bWtkaXIgZGlyPSIke3dvcmtzcGFjZX0iIC8+Ci0gICAgICAgIDwhLS0gIGJ1dCBkZWxldGUgdG8gbWFrZSBzdXJlIGZyZXNoIGNvbnRlbnRzLS0+Ci0gICAgICAgIDxkZWxldGUKLSAgICAgICAgICAgIGRpcj0iJHt3b3Jrc3BhY2V9IgotICAgICAgICAgICAgcXVpZXQ9InRydWUiIC8+Ci0KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgZGVmaW5lcyB0aGUgdGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4gLS0+Ci0gICAgPHRhcmdldCBuYW1lPSJzdWl0ZSI+Ci0KLSAgICAgICAgPGFudAotICAgICAgICAgICAgdGFyZ2V0PSIke3Rlc3RUeXBlfSIKLSAgICAgICAgICAgIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLSAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImRhdGEtZGlyIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3dvcmtzcGFjZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJwbHVnaW4tbmFtZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJjbGFzc25hbWUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7Y2xhc3NuYW1lfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9InBsdWdpbi1wYXRoIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy8ke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgPC9hbnQ+Ci0KLSAgICAgICAgPGNvcHkKLSAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIKLSAgICAgICAgICAgIGZpbGU9IiR7d29ya3NwYWNlfS8ubWV0YWRhdGEvLmxvZyIKLSAgICAgICAgICAgIHRvZmlsZT0iJHtidWlsZERpcmVjdG9yeX0vJHtidWlsZExhYmVsfS90ZXN0UmVzdWx0cy9jb25zb2xlbG9ncy8ke3BsdWdpbi1uYW1lfS5jb25zb2xlbG9nLnR4dCIgLz4KLQotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBjb2RlIHRvIGNsZWFudXAgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgYWZ0ZXIgLS0+Ci0gICAgPCEtLSBhZnRlciBhbGwgb2YgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4uIFlvdSBjYW4gdXNlIHRoaXMgdGFyZ2V0IHRvIC0tPgotICAgIDwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9ImNsZWFudXAiPgotICAgICAgICA8IS0tIHVzdWFsbHkgbm8gbmVlZCB0byBkZWxldGUgd29ya3NwYWNlIHVudGlsIG5leHQgcnVuLCBhbmQgbGVhdmluZyBpdCBhbGxvd3MgaW5zcGVjdGlvbiAtLT4KLSAgICAgICAgPCEtLSA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIgLz4gLS0+Ci0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+Ci0gICAgPCEtLSBhZnRlciBhbGwgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4gc2hvdWxkIGdvIGhlcmUuIC0tPgotICAgIDx0YXJnZXQKLSAgICAgICAgbmFtZT0icnVuIgotICAgICAgICBkZXBlbmRzPSJpbml0LHN1aXRlLGNsZWFudXAiPgotICAgICAgICA8YW50Ci0gICAgICAgICAgICB0YXJnZXQ9ImNvbGxlY3QiCi0gICAgICAgICAgICBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iCi0gICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJpbmNsdWRlcyIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0uKnhtbCIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9Im91dHB1dC1maWxlIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfS54bWwiIC8+Ci0gICAgICAgIDwvYW50PgotICAgIDwvdGFyZ2V0PgotCi08L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZTZmYmY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIgLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIgotCQlwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS40IiA+Ci0JCTxhY2Nlc3NydWxlcz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49Im9yZy93M2MvZG9tL2Nzcy8qKi8qIi8+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJvcmcvdzNjL2RvbS9zdHlsZXNoZWV0cy8qKi8qIi8+Ci0JCTwvYWNjZXNzcnVsZXM+Ci0JPC9jbGFzc3BhdGhlbnRyeT4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iIC8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvLmN2c2lnbm9yZSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2E3NGZlYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLWJpbgotYmluLnByb2plY3QKLWJ1aWxkLnhtbAotZGV2LnByb3BlcnRpZXMKLWh0bWxjb3JldGVzdHMuamFyCi10ZW1wLmZvbGRlcgotamF2YUNvbXBpbGVyLmh0bWxjb3JldGVzdHMuamFyLmFyZ3MKLVBhcnNlclJlc3VsdHMyMDA4KgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNWJiMjQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmYTVjOTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjMyIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotZW5jb2RpbmcvPHByb2plY3Q+PUlTTy04ODU5LTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmOTU4NGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0jU3VuIEFwciAxNiAxNDozNzoyMSBFRFQgMjAwNg0KLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5jbGVhbk91dHB1dEZvbGRlcj1jbGVhbg0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuZHVwbGljYXRlUmVzb3VyY2VUYXNrPXdhcm5pbmcNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmludmFsaWRDbGFzc3BhdGg9aWdub3JlDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5yZXNvdXJjZUNvcHlFeGNsdXNpb25GaWx0ZXI9Ki5sYXVuY2gNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jaXJjdWxhckNsYXNzcGF0aD1lcnJvcg0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aC5leGNsdXNpb25QYXR0ZXJucz1lbmFibGVkDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLm11bHRpcGxlT3V0cHV0TG9jYXRpb25zPWVuYWJsZWQNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWRpc2FibGVkDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjINCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQ0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kb2MuY29tbWVudC5zdXBwb3J0PWVuYWJsZWQNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5tYXhQcm9ibGVtUGVyVW5pdD0xMDANCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPXdhcm5pbmcNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj13YXJuaW5nDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWVuYWJsZWQNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPWlnbm9yZQ0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9d2FybmluZw0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9d2FybmluZw0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPWlnbm9yZQ0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PWVycm9yDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3INCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZw0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQ0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9ZXJyb3INCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jPWlnbm9yZQ0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzRGVwcmVjYXRlZFJlZj1lbmFibGVkDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NOb3RWaXNpYmxlUmVmPWVuYWJsZWQNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHJpdmF0ZQ0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9ZXJyb3INCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHM9aWdub3JlDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzT3ZlcnJpZGluZz1lbmFibGVkDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wdWJsaWMNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFncz1pZ25vcmUNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc092ZXJyaWRpbmc9ZW5hYmxlZA0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wcml2YXRlDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQ0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZw0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PWVycm9yDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQ0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PXdhcm5pbmcNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1lbmFibGVkDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj1lcnJvcg0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249d2FybmluZw0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz1pZ25vcmUNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZw0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1lcnJvcg0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuc2FmZVR5cGVPcGVyYXRpb249d2FybmluZw0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9ZXJyb3INCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExhYmVsPWVycm9yDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD1lcnJvcg0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQ0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPWVycm9yDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMw0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGF0aWJsZUpES0xldmVsPWlnbm9yZQ0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGxldGVDbGFzc3BhdGg9ZXJyb3INCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmMmFjNjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozOSBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWludGVybmFsLmRlZmF1bHQuY29tcGxpYW5jZT1kZWZhdWx0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTkzNjhjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozMiBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLmVuYWJsZS5wcm9qZWN0LnJlZmFjdG9yaW5nLmhpc3Rvcnk9ZmFsc2UKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjcyNDk1OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0jU3VuIEFwciAxNiAxNDowNToyOSBFRFQgMjAwNgotY29tcGlsZXJzLnAuYnVpbGQ9MAotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0xCi1jb21waWxlcnMucC5pbGxlZ2FsLWF0dC12YWx1ZT0wCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0wCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMucC51bnVzZWQtZWxlbWVudC1vci1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnVzZS1wcm9qZWN0PXRydWUKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2JmYTk2Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lLjAKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHM7c2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjMwMC5xdWFsaWZpZXIKLUJ1bmRsZS1DbGFzc1BhdGg6IGh0bWxjb3JldGVzdHMuamFyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLkhUTUxDb3JlVGVzdHNQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yLjAKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMsCi0gb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5mb3JtYXQsCi0gb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5mb3JtYXQudGVzdGZpbGVzLmh0bWwsCi0gb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5taXNjLAotIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMubW9kZWwsCi0gb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIsCi0gb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuY3NzLAotIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMudGV4dCwKLSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnRleHQudGVzdGZpbGVzLmh0bWwsCi0gb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy51dGlscwotUmVxdWlyZS1CdW5kbGU6IG9yZy5qdW5pdDtidW5kbGUtdmVyc2lvbj0iWzMuOC4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZSwKLSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKLSBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUsCi0gY29tLmlibS5pY3UsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMKLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCi1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjQKLUJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkF0dHJUZXN0LnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuQXR0clRlc3QudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjdkYjE4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuQXR0clRlc3QudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuQXR0clRlc3QKLVNvdXJjZSA6Ci08YSBocmVmPSI8JT1jJT4iPmE8L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDldICg8YSBocmVmPSIpCi1bOSwgMTBdICg8KQotWzEwLCAxMl0gKCU9KQotWzEyLCAxM10gKGMpCi1bMTMsIDE0XSAoJSkKLVsxNCwgMThdICg+Ij5hKQotWzE4LCAyMl0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgOV0gKDxhIGhyZWYmIzYxOyIpQFsxOCwgMjJdICg8L2E+KQotLS0tLSN0ZXh0KDwlJiM2MTtjJT4iPmEpQHtbOSwgMTBdICg8KSxbMTAsIDEyXSAoJSYjNjE7KSxbMTIsIDEzXSAoYyksWzEzLCAxNF0gKCUpLFsxNCwgMThdICg+Ij5hKX0KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5BdHRyVGVzdDIudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5BdHRyVGVzdDIudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OTYyYzYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuQXR0clRlc3QyLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkF0dHJUZXN0MgotU291cmNlIDoKLTxhIGI9ImMiIGQ9ImUiPmY8L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDE1XSAoPGEgYj0iYyIgZD0iZSI+KQotWzE1LCAxNl0gKGYpCi1bMTYsIDIwXSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAxNV0gKDxhIGImIzYxOyJjIiBkJiM2MTsiZSI+KUBbMTYsIDIwXSAoPC9hPikKLS0tLS0jdGV4dChmKUBbMTUsIDE2XSAoZikKLQotYi5uYW1lPXg6YgotYi52YWx1ZT1jCi1hIGI9bnVsbAotYSB4OmI9YwotU291cmNlIDoKLTxhIHg6Yj0iYyIgZD0iZSI+ZjwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgMTddICg8YSB4OmI9ImMiIGQ9ImUiPikKLVsxNywgMThdIChmKQotWzE4LCAyMl0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgMTddICg8YSB4OmImIzYxOyJjIiBkJiM2MTsiZSI+KUBbMTgsIDIyXSAoPC9hPikKLS0tLS0jdGV4dChmKUBbMTcsIDE4XSAoZikKLQotU291cmNlIDoKLTxhIHg6Yj0iYyIgeTpkPSJlIj5mPC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAxOV0gKDxhIHg6Yj0iYyIgeTpkPSJlIj4pCi1bMTksIDIwXSAoZikKLVsyMCwgMjRdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDE5XSAoPGEgeDpiJiM2MTsiYyIgeTpkJiM2MTsiZSI+KUBbMjAsIDI0XSAoPC9hPikKLS0tLS0jdGV4dChmKUBbMTksIDIwXSAoZikKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5DREFUQVNlY3Rpb25UZXN0LnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuQ0RBVEFTZWN0aW9uVGVzdC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkZWI1NzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5DREFUQVNlY3Rpb25UZXN0LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkNEQVRBU2VjdGlvblRlc3QKLVNvdXJjZSA6Ci08YT48IVtDREFUQVtjb250ZW50T2ZDREFUQVNlY3Rpb25dXT48L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgMzZdICg8IVtDREFUQVtjb250ZW50T2ZDREFUQVNlY3Rpb25dXT4pCi1bMzYsIDQwXSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbMzYsIDQwXSAoPC9hPikKLS0tLS0jY2RhdGEtc2VjdGlvbihjb250ZW50T2ZDREFUQVNlY3Rpb24pQFszLCAzNl0gKDwhW0NEQVRBW2NvbnRlbnRPZkNEQVRBU2VjdGlvbl1dPikKLQotY29udGVudE9mQ0RBVEFTZWN0aW9uCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkNEQVRBU2VjdGlvblRlc3QyLnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuQ0RBVEFTZWN0aW9uVGVzdDIudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZWY4NmFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuQ0RBVEFTZWN0aW9uVGVzdDIudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuQ0RBVEFTZWN0aW9uVGVzdDIKLVNvdXJjZSA6Ci08YT48IVtDREFUQVtjb250ZW50T2ZDREFUQVNlY3Rpb25dXT48L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgMzZdICg8IVtDREFUQVtjb250ZW50T2ZDREFUQVNlY3Rpb25dXT4pCi1bMzYsIDQwXSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbMzYsIDQwXSAoPC9hPikKLS0tLS0jY2RhdGEtc2VjdGlvbihjb250ZW50T2ZDREFUQVNlY3Rpb24pQFszLCAzNl0gKDwhW0NEQVRBW2NvbnRlbnRPZkNEQVRBU2VjdGlvbl1dPikKLQotY29udGVudE9mQ0RBVEFTZWN0aW9uCi1Tb3VyY2UgOgotPGE+PCFbQ0RBVEFbbmV3IGNvbnRlbnRdXT48L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgMjZdICg8IVtDREFUQVtuZXcgY29udGVudF1dPikKLVsyNiwgMzBdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFsyNiwgMzBdICg8L2E+KQotLS0tLSNjZGF0YS1zZWN0aW9uKG5ldyBjb250ZW50KUBbMywgMjZdICg8IVtDREFUQVtuZXcgY29udGVudF1dPikKLQotbmV3IGNvbnRlbnQKLVNvdXJjZSA6Ci08YT48IVtDREFUQVtuZXcgY29udGVudF1dPjwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCAyNl0gKDwhW0NEQVRBW25ldyBjb250ZW50XV0+KQotWzI2LCAzMF0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzI2LCAzMF0gKDwvYT4pCi0tLS0tI2NkYXRhLXNlY3Rpb24obmV3IGNvbnRlbnQpQFszLCAyNl0gKDwhW0NEQVRBW25ldyBjb250ZW50XV0+KQotCi1uZXcgY29udGVudApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5DREFUQVNlY3Rpb25UZXN0My50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkNEQVRBU2VjdGlvblRlc3QzLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzdjYzEyMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkNEQVRBU2VjdGlvblRlc3QzLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkNEQVRBU2VjdGlvblRlc3QzCi1Tb3VyY2UgOgotPGE+PCFbQ0RBVEFbY29udGVudE9mQ0RBVEFTZWN0aW9uXV0+PC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDM2XSAoPCFbQ0RBVEFbY29udGVudE9mQ0RBVEFTZWN0aW9uXV0+KQotWzM2LCA0MF0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzM2LCA0MF0gKDwvYT4pCi0tLS0tI2NkYXRhLXNlY3Rpb24oY29udGVudE9mQ0RBVEFTZWN0aW9uKUBbMywgMzZdICg8IVtDREFUQVtjb250ZW50T2ZDREFUQVNlY3Rpb25dXT4pCi0KLWNvbnRlbnRPZkNEQVRBU2VjdGlvbgotU291cmNlIDoKLTxhPjwhW0NEQVRBW25ldyA8IGNvbnRlbnRdXT48L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgMjhdICg8IVtDREFUQVtuZXcgPCBjb250ZW50XV0+KQotWzI4LCAzMl0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzI4LCAzMl0gKDwvYT4pCi0tLS0tI2NkYXRhLXNlY3Rpb24obmV3IDwgY29udGVudClAWzMsIDI4XSAoPCFbQ0RBVEFbbmV3IDwgY29udGVudF1dPikKLQotbmV3IDwgY29udGVudAotU291cmNlIDoKLTxhPjwhW0NEQVRBW25ldyA+IGNvbnRlbnRdXT48L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgMjhdICg8IVtDREFUQVtuZXcgPiBjb250ZW50XV0+KQotWzI4LCAzMl0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzI4LCAzMl0gKDwvYT4pCi0tLS0tI2NkYXRhLXNlY3Rpb24obmV3ID4gY29udGVudClAWzMsIDI4XSAoPCFbQ0RBVEFbbmV3ID4gY29udGVudF1dPikKLQotbmV3ID4gY29udGVudApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5Eb2NUeXBlVGVzdC50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkRvY1R5cGVUZXN0LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmNjYTk3Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkRvY1R5cGVUZXN0LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkRvY1R5cGVUZXN0Ci1Tb3VyY2UgOgotPCFET0NUWVBFIEhUTUw+PGh0bWw+PC9odG1sPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAxNV0gKDwhRE9DVFlQRSBIVE1MPikKLVsxNSwgMjFdICg8aHRtbD4pCi1bMjEsIDI4XSAoPC9odG1sPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tSFRNTChudWxsKShudWxsKUBbMCwgMTVdICg8IURPQ1RZUEUgSFRNTD4pCi0tLWh0bWwvaHRtbEBbMTUsIDIxXSAoPGh0bWw+KUBbMjEsIDI4XSAoPC9odG1sPikKLQotU291cmNlIDoKLTwhRE9DVFlQRSBIVE1MIFNZU1RFTSAic3l0ZW0iPjxodG1sPjwvaHRtbD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgMzBdICg8IURPQ1RZUEUgSFRNTCBTWVNURU0gInN5dGVtIj4pCi1bMzAsIDM2XSAoPGh0bWw+KQotWzM2LCA0M10gKDwvaHRtbD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLUhUTUwobnVsbCkoc3l0ZW0pQFswLCAzMF0gKDwhRE9DVFlQRSBIVE1MIFNZU1RFTSAic3l0ZW0iPikKLS0taHRtbC9odG1sQFszMCwgMzZdICg8aHRtbD4pQFszNiwgNDNdICg8L2h0bWw+KQotCi1Tb3VyY2UgOgotPCFET0NUWVBFIEhUTUwgUFVCTElDICJwdWJsaWMiICJzeXRlbSI+PGh0bWw+PC9odG1sPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzOV0gKDwhRE9DVFlQRSBIVE1MIFBVQkxJQyAicHVibGljIiAic3l0ZW0iPikKLVszOSwgNDVdICg8aHRtbD4pCi1bNDUsIDUyXSAoPC9odG1sPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tSFRNTChwdWJsaWMpKHN5dGVtKUBbMCwgMzldICg8IURPQ1RZUEUgSFRNTCBQVUJMSUMgInB1YmxpYyIgInN5dGVtIj4pCi0tLWh0bWwvaHRtbEBbMzksIDQ1XSAoPGh0bWw+KUBbNDUsIDUyXSAoPC9odG1sPikKLQotU291cmNlIDoKLSA8IURPQ1RZUEUgSFRNTCBQVUJMSUMgInB1YmxpYyIgInN5dGVtIj48aHRtbD48L2h0bWw+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDFdICggKQotWzEsIDQwXSAoPCFET0NUWVBFIEhUTUwgUFVCTElDICJwdWJsaWMiICJzeXRlbSI+KQotWzQwLCA0Nl0gKDxodG1sPikKLVs0NiwgNTNdICg8L2h0bWw+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS0jdGV4dCggKUBbMCwgMV0gKCApCi0tLUhUTUwocHVibGljKShzeXRlbSlAWzEsIDQwXSAoPCFET0NUWVBFIEhUTUwgUFVCTElDICJwdWJsaWMiICJzeXRlbSI+KQotLS1odG1sL2h0bWxAWzQwLCA0Nl0gKDxodG1sPilAWzQ2LCA1M10gKDwvaHRtbD4pCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRWxlbWVudFRlc3QudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbGVtZW50VGVzdC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmY2Q4MjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbGVtZW50VGVzdC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbGVtZW50VGVzdAotU291cmNlIDoKLTxhPjxiIGU9ImYiIGM9ImQiPjxnIC8+PGggLz48L2I+PC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDE4XSAoPGIgZT0iZiIgYz0iZCI+KQotWzE4LCAyM10gKDxnIC8+KQotWzIzLCAyOF0gKDxoIC8+KQotWzI4LCAzMl0gKDwvYj4pCi1bMzIsIDM2XSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbMzIsIDM2XSAoPC9hPikKLS0tLS1iL2JAWzMsIDE4XSAoPGIgZSYjNjE7ImYiIGMmIzYxOyJkIj4pQFsyOCwgMzJdICg8L2I+KQotLS0tLS0tZy9AWzE4LCAyM10gKDxnIC8+KQotLS0tLS0taC9AWzIzLCAyOF0gKDxoIC8+KQotCi1Tb3VyY2UgOgotPGE+PGkgZT0iZiIgYz0iZCI+PGcgLz48aCAvPjwvaT48L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgMThdICg8aSBlPSJmIiBjPSJkIj4pCi1bMTgsIDIzXSAoPGcgLz4pCi1bMjMsIDI4XSAoPGggLz4pCi1bMjgsIDMyXSAoPC9pPikKLVszMiwgMzZdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFszMiwgMzZdICg8L2E+KQotLS0tLWkvaUBbMywgMThdICg8aSBlJiM2MTsiZiIgYyYjNjE7ImQiPilAWzI4LCAzMl0gKDwvaT4pCi0tLS0tLS1nL0BbMTgsIDIzXSAoPGcgLz4pCi0tLS0tLS1oL0BbMjMsIDI4XSAoPGggLz4pCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRWxlbWVudFRlc3QyLnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRWxlbWVudFRlc3QyLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQ0NjA5MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVsZW1lbnRUZXN0Mi50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbGVtZW50VGVzdDIKLVNvdXJjZSA6Ci08YT48Yj5jPC9iPjwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCA2XSAoPGI+KQotWzYsIDddIChjKQotWzcsIDExXSAoPC9iPikKLVsxMSwgMTVdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFsxMSwgMTVdICg8L2E+KQotLS0tLWIvYkBbMywgNl0gKDxiPilAWzcsIDExXSAoPC9iPikKLS0tLS0tLSN0ZXh0KGMpQFs2LCA3XSAoYykKLQotYS50YWdOYW1lPXg6YQotU291cmNlIDoKLTx4OmE+PGI+YzwvYj48L3g6YT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgNV0gKDx4OmE+KQotWzUsIDhdICg8Yj4pCi1bOCwgOV0gKGMpCi1bOSwgMTNdICg8L2I+KQotWzEzLCAxOV0gKDwveDphPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0teDphL3g6YUBbMCwgNV0gKDx4OmE+KUBbMTMsIDE5XSAoPC94OmE+KQotLS0tLWIvYkBbNSwgOF0gKDxiPilAWzksIDEzXSAoPC9iPikKLS0tLS0tLSN0ZXh0KGMpQFs4LCA5XSAoYykKLQotU291cmNlIDoKLTx4OmE+PHk6Yj5jPC95OmI+PC94OmE+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDVdICg8eDphPikKLVs1LCAxMF0gKDx5OmI+KQotWzEwLCAxMV0gKGMpCi1bMTEsIDE3XSAoPC95OmI+KQotWzE3LCAyM10gKDwveDphPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0teDphL3g6YUBbMCwgNV0gKDx4OmE+KUBbMTcsIDIzXSAoPC94OmE+KQotLS0tLXk6Yi95OmJAWzUsIDEwXSAoPHk6Yj4pQFsxMSwgMTddICg8L3k6Yj4pCi0tLS0tLS0jdGV4dChjKUBbMTAsIDExXSAoYykKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbGVtZW50VGVzdDMudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbGVtZW50VGVzdDMudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNWRhYmY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRWxlbWVudFRlc3QzLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVsZW1lbnRUZXN0MwotU291cmNlIDoKLTx4OmE+PGI+YzwvYj48L3g6YT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgNV0gKDx4OmE+KQotWzUsIDhdICg8Yj4pCi1bOCwgOV0gKGMpCi1bOSwgMTNdICg8L2I+KQotWzEzLCAxOV0gKDwveDphPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0teDphL3g6YUBbMCwgNV0gKDx4OmE+KUBbMTMsIDE5XSAoPC94OmE+KQotLS0tLWIvYkBbNSwgOF0gKDxiPilAWzksIDEzXSAoPC9iPikKLS0tLS0tLSN0ZXh0KGMpQFs4LCA5XSAoYykKLQotYS50YWdOYW1lPWEKLVNvdXJjZSA6Ci08YT48Yj5jPC9iPjwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCA2XSAoPGI+KQotWzYsIDddIChjKQotWzcsIDExXSAoPC9iPikKLVsxMSwgMTVdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFsxMSwgMTVdICg8L2E+KQotLS0tLWIvYkBbMywgNl0gKDxiPilAWzcsIDExXSAoPC9iPikKLS0tLS0tLSN0ZXh0KGMpQFs2LCA3XSAoYykKLQotYS50YWdOYW1lPXk6YQotU291cmNlIDoKLTx5OmE+PGI+YzwvYj48L3k6YT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgNV0gKDx5OmE+KQotWzUsIDhdICg8Yj4pCi1bOCwgOV0gKGMpCi1bOSwgMTNdICg8L2I+KQotWzEzLCAxOV0gKDwveTphPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0teTphL3k6YUBbMCwgNV0gKDx5OmE+KUBbMTMsIDE5XSAoPC95OmE+KQotLS0tLWIvYkBbNSwgOF0gKDxiPilAWzksIDEzXSAoPC9iPikKLS0tLS0tLSN0ZXh0KGMpQFs4LCA5XSAoYykKLQotU291cmNlIDoKLTx5OmE+PGI+YzwvYj48L3k6YT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgNV0gKDx5OmE+KQotWzUsIDhdICg8Yj4pCi1bOCwgOV0gKGMpCi1bOSwgMTNdICg8L2I+KQotWzEzLCAxOV0gKDwveTphPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0teTphL3k6YUBbMCwgNV0gKDx5OmE+KUBbMTMsIDE5XSAoPC95OmE+KQotLS0tLWIvYkBbNSwgOF0gKDxiPilAWzksIDEzXSAoPC9iPikKLS0tLS0tLSN0ZXh0KGMpQFs4LCA5XSAoYykKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbXB0eVRleHRUZXN0LnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW1wdHlUZXh0VGVzdC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlY2FmZTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbXB0eVRleHRUZXN0LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVtcHR5VGV4dFRlc3QKLVNvdXJjZSA6Ci08cD5hPGJyPjwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA0XSAoYSkKLVs0LCA4XSAoPGJyPikKLVs4LCAxMl0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzgsIDEyXSAoPC9wPikKLS0tLS0jdGV4dChhKUBbMywgNF0gKGEpCi0tLS0tYnJAWzQsIDhdICg8YnI+KQotLS0tLSN0ZXh0KCkKLQotU291cmNlIDoKLTxwPmE8YnI+PC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDRdIChhKQotWzQsIDhdICg8YnI+KQotWzgsIDEyXSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbOCwgMTJdICg8L3A+KQotLS0tLSN0ZXh0KGEpQFszLCA0XSAoYSkKLS0tLS1ickBbNCwgOF0gKDxicj4pCi0tLS0tI3RleHQoKQotLS0tLSN0ZXh0KCkKLQotU291cmNlIDoKLTxwPmE8YnI+YjwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA0XSAoYSkKLVs0LCA4XSAoPGJyPikKLVs4LCA5XSAoYikKLVs5LCAxM10gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzksIDEzXSAoPC9wPikKLS0tLS0jdGV4dChhKUBbMywgNF0gKGEpCi0tLS0tYnJAWzQsIDhdICg8YnI+KQotLS0tLSN0ZXh0KGIpQFs4LCA5XSAoYikKLS0tLS0jdGV4dCgpCi0KLVNvdXJjZSA6Ci08cD5hPGJyPmI8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgNF0gKGEpCi1bNCwgOF0gKDxicj4pCi1bOCwgOV0gKGIpCi1bOSwgMTNdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFs5LCAxM10gKDwvcD4pCi0tLS0tI3RleHQoYSlAWzMsIDRdIChhKQotLS0tLWJyQFs0LCA4XSAoPGJyPikKLS0tLS0jdGV4dChiKUBbOCwgOV0gKGIpCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW1wdHlUZXh0VGVzdDIudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbXB0eVRleHRUZXN0Mi50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzODZlZmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbXB0eVRleHRUZXN0Mi50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbXB0eVRleHRUZXN0MgotU291cmNlIDoKLTxwPjwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA3XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMywgN10gKDwvcD4pCi0tLS0tI3RleHQoKQotCi1Tb3VyY2UgOgotPHA+YTwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA0XSAoYSkKLVs0LCA4XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbNCwgOF0gKDwvcD4pCi0tLS0tI3RleHQoYSlAWzMsIDRdIChhKQotCi1Tb3VyY2UgOgotPHA+PC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDddICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFszLCA3XSAoPC9wPikKLS0tLS0jdGV4dCgpCi0KLVNvdXJjZSA6Ci08cD48Yj48L2I+PC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDZdICg8Yj4pCi1bNiwgMTBdICg8L2I+KQotWzEwLCAxNF0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzEwLCAxNF0gKDwvcD4pCi0tLS0tYi9iQFszLCA2XSAoPGI+KUBbNiwgMTBdICg8L2I+KQotLS0tLS0tI3RleHQoKQotCi1Tb3VyY2UgOgotPHA+PGI+YTwvYj48L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgNl0gKDxiPikKLVs2LCA3XSAoYSkKLVs3LCAxMV0gKDwvYj4pCi1bMTEsIDE1XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMTEsIDE1XSAoPC9wPikKLS0tLS1iL2JAWzMsIDZdICg8Yj4pQFs3LCAxMV0gKDwvYj4pCi0tLS0tLS0jdGV4dChhKUBbNiwgN10gKGEpCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW1wdHlUZXh0VGVzdDMudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbXB0eVRleHRUZXN0My50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlNjVlZmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbXB0eVRleHRUZXN0My50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbXB0eVRleHRUZXN0MwotU291cmNlIDoKLQotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tI3RleHQoKQotCi1Tb3VyY2UgOgotPGE+PC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDddICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFszLCA3XSAoPC9hPikKLS0tI3RleHQoKQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3QudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGE3MmY4NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3QudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW50aXR5VGVzdAotU291cmNlIDoKLTxwPjwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA3XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMywgN10gKDwvcD4pCi0KLVNvdXJjZSA6Ci08cD4mYW1wO2d0OzwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA4XSAoJmFtcDspCi1bOCwgMTFdIChndDspCi1bMTEsIDE1XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMTEsIDE1XSAoPC9wPikKLS0tLS0jdGV4dCgmZ3Q7KUB7WzMsIDhdICgmYW1wOyksWzgsIDExXSAoZ3Q7KX0KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0Mi50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3QyLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzE3MmVmNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3QyLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3QyCi1Tb3VyY2UgOgotPHA+YTwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA0XSAoYSkKLVs0LCA4XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbNCwgOF0gKDwvcD4pCi0tLS0tI3RleHQoYSlAWzMsIDRdIChhKQotCi1Tb3VyY2UgOgotPHA+YSZhbXA7Z3Q7PC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDRdIChhKQotWzQsIDldICgmYW1wOykKLVs5LCAxMl0gKGd0OykKLVsxMiwgMTZdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsxMiwgMTZdICg8L3A+KQotLS0tLSN0ZXh0KGEmZ3Q7KUB7WzMsIDRdIChhKSxbNCwgOV0gKCZhbXA7KSxbOSwgMTJdIChndDspfQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3QzLnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW50aXR5VGVzdDMudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MmNiM2M5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW50aXR5VGVzdDMudHh0CisrKyAvZGV2L251bGwKQEAgLTEsOTIgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW50aXR5VGVzdDMKLVNvdXJjZSA6Ci08cD5hPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDRdIChhKQotWzQsIDhdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFs0LCA4XSAoPC9wPikKLS0tLS0jdGV4dChhKUBbMywgNF0gKGEpCi0KLVNvdXJjZSA6Ci08cD5hYjwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA1XSAoYWIpCi1bNSwgOV0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzUsIDldICg8L3A+KQotLS0tLSN0ZXh0KGFiKUBbMywgNV0gKGFiKQotCi1Tb3VyY2UgOgotPHA+YWImYW1wOzwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA1XSAoYWIpCi1bNSwgMTBdICgmYW1wOykKLVsxMCwgMTRdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsxMCwgMTRdICg8L3A+KQotLS0tLSN0ZXh0KGFiJilAe1szLCA1XSAoYWIpLFs1LCAxMF0gKCZhbXA7KX0KLQotU291cmNlIDoKLTxwPmFiJmFtcDtjPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDVdIChhYikKLVs1LCAxMF0gKCZhbXA7KQotWzEwLCAxMV0gKGMpCi1bMTEsIDE1XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMTEsIDE1XSAoPC9wPikKLS0tLS0jdGV4dChhYiZjKUB7WzMsIDVdIChhYiksWzUsIDEwXSAoJmFtcDspLFsxMCwgMTFdIChjKX0KLQotU291cmNlIDoKLTxwPmRhYiZhbXA7YzwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA2XSAoZGFiKQotWzYsIDExXSAoJmFtcDspCi1bMTEsIDEyXSAoYykKLVsxMiwgMTZdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsxMiwgMTZdICg8L3A+KQotLS0tLSN0ZXh0KGRhYiZjKUB7WzMsIDZdIChkYWIpLFs2LCAxMV0gKCZhbXA7KSxbMTEsIDEyXSAoYyl9Ci0KLVNvdXJjZSA6Ci08cD5kYWImYW1wO2NlPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDZdIChkYWIpCi1bNiwgMTFdICgmYW1wOykKLVsxMSwgMTNdIChjZSkKLVsxMywgMTddICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsxMywgMTddICg8L3A+KQotLS0tLSN0ZXh0KGRhYiZjZSlAe1szLCA2XSAoZGFiKSxbNiwgMTFdICgmYW1wOyksWzExLCAxM10gKGNlKX0KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0NC50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3Q0LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGNlODBmOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3Q0LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3Q0Ci1Tb3VyY2UgOgotPHA+YSZhbXA7YjwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA0XSAoYSkKLVs0LCA5XSAoJmFtcDspCi1bOSwgMTBdIChiKQotWzEwLCAxNF0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzEwLCAxNF0gKDwvcD4pCi0tLS0tI3RleHQoYSZiKUB7WzMsIDRdIChhKSxbNCwgOV0gKCZhbXA7KSxbOSwgMTBdIChiKX0KLQotU291cmNlIDoKLTxwPmEmYW1wO2I8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgNF0gKGEpCi1bNCwgOV0gKCZhbXA7KQotWzksIDEwXSAoYikKLVsxMCwgMTRdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsxMCwgMTRdICg8L3A+KQotLS0tLSN0ZXh0KCkKLS0tLS0jdGV4dChhJmIpQHtbMywgNF0gKGEpLFs0LCA5XSAoJmFtcDspLFs5LCAxMF0gKGIpfQotCi1Tb3VyY2UgOgotPHA+Y2EmYW1wO2I8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgNV0gKGNhKQotWzUsIDEwXSAoJmFtcDspCi1bMTAsIDExXSAoYikKLVsxMSwgMTVdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsxMSwgMTVdICg8L3A+KQotLS0tLSN0ZXh0KGMpQFszLDRdKFszLCA1XSAoY2EpKQotLS0tLSN0ZXh0KGEmYilAe1s0LDVdKFszLCA1XSAoY2EpKSxbNSwgMTBdICgmYW1wOyksWzEwLCAxMV0gKGIpfQotCi1Tb3VyY2UgOgotPHA+Y2EmYW1wO2JhJmFtcDtiPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDVdIChjYSkKLVs1LCAxMF0gKCZhbXA7KQotWzEwLCAxMl0gKGJhKQotWzEyLCAxN10gKCZhbXA7KQotWzE3LCAxOF0gKGIpCi1bMTgsIDIyXSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMTgsIDIyXSAoPC9wPikKLS0tLS0jdGV4dChjYSZiKUB7WzMsIDVdIChjYSksWzUsIDEwXSAoJmFtcDspLFsxMCwxMV0oWzEwLCAxMl0gKGJhKSl9Ci0tLS0tI3RleHQoYSZiKUB7WzExLDEyXShbMTAsIDEyXSAoYmEpKSxbMTIsIDE3XSAoJmFtcDspLFsxNywgMThdIChiKX0KLQotU291cmNlIDoKLTxwPmNhJmFtcDtiPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDVdIChjYSkKLVs1LCAxMF0gKCZhbXA7KQotWzEwLCAxMV0gKGIpCi1bMTEsIDE1XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMTEsIDE1XSAoPC9wPikKLS0tLS0jdGV4dChjYSZiKUB7WzMsIDVdIChjYSksWzUsIDEwXSAoJmFtcDspLFsxMCwgMTFdIChiKX0KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0NS50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3Q1LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzhlYjhjNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3Q1LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3Q1Ci1Tb3VyY2UgOgotPHA+YSZhbXA7YjwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA0XSAoYSkKLVs0LCA5XSAoJmFtcDspCi1bOSwgMTBdIChiKQotWzEwLCAxNF0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzEwLCAxNF0gKDwvcD4pCi0tLS0tI3RleHQoYSZiKUB7WzMsIDRdIChhKSxbNCwgOV0gKCZhbXA7KSxbOSwgMTBdIChiKX0KLQotU291cmNlIDoKLTxwPmEmYW1wO2JhJmFtcDtiPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDRdIChhKQotWzQsIDldICgmYW1wOykKLVs5LCAxMV0gKGJhKQotWzExLCAxNl0gKCZhbXA7KQotWzE2LCAxN10gKGIpCi1bMTcsIDIxXSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMTcsIDIxXSAoPC9wPikKLS0tLS0jdGV4dChhJmIpQHtbMywgNF0gKGEpLFs0LCA5XSAoJmFtcDspLFs5LDEwXShbOSwgMTFdIChiYSkpfQotLS0tLSN0ZXh0KGEmYilAe1sxMCwxMV0oWzksIDExXSAoYmEpKSxbMTEsIDE2XSAoJmFtcDspLFsxNiwgMTddIChiKX0KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0Ni50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3Q2LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjEzMTVmMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3Q2LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3Q2Ci1Tb3VyY2UgOgotPHA+YSZhbXA7PC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDRdIChhKQotWzQsIDldICgmYW1wOykKLVs5LCAxM10gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzksIDEzXSAoPC9wPikKLS0tLS0jdGV4dChhJilAe1szLCA0XSAoYSksWzQsIDldICgmYW1wOyl9Ci0KLVNvdXJjZSA6Ci08cD5hJmFtcDthJmFtcDs8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgNF0gKGEpCi1bNCwgOV0gKCZhbXA7KQotWzksIDEwXSAoYSkKLVsxMCwgMTVdICgmYW1wOykKLVsxNSwgMTldICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsxNSwgMTldICg8L3A+KQotLS0tLSN0ZXh0KGEmKUB7WzMsIDRdIChhKSxbNCwgOV0gKCZhbXA7KX0KLS0tLS0jdGV4dChhJilAe1s5LCAxMF0gKGEpLFsxMCwgMTVdICgmYW1wOyl9Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW50aXR5VGVzdDcudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0Ny50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyNWQ5ODIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0Ny50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0NwotU291cmNlIDoKLTxhPmEmIzY1OyYjeDQxOyZ1bms7JnVuayZ1bms8L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgNF0gKGEpCi1bNCwgOV0gKCYjNjU7KQotWzksIDE1XSAoJiN4NDE7KQotWzE1LCAyMF0gKCZ1bms7KQotWzIwLCAyNF0gKCZ1bmspCi1bMjQsIDI4XSAoJnVuaykKLVsyOCwgMzJdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFsyOCwgMzJdICg8L2E+KQotLS0tLSN0ZXh0KGFBQSlAe1szLCA0XSAoYSksWzQsIDldICgmIzY1OyksWzksIDE1XSAoJiN4NDE7KX0KLS0tLS11bmsKLS0tLS0jdGV4dCgmdW5rJnVuaylAe1syMCwgMjRdICgmdW5rKSxbMjQsIDI4XSAoJnVuayl9Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW50aXR5VGVzdDgudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0OC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkZWNiMWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0OC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0OAotU291cmNlIDoKLSZpYm07JnJ0cDsKLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgNV0gKCZpYm07KQotWzUsIDEwXSAoJnJ0cDspCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWlibQotLS1ydHAKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0OS50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3Q5LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDgwMmUzYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3Q5LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3Q5Ci1Tb3VyY2UgOgotJmx0OwotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCA0XSAoJmx0OykKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tI3RleHQoPClAWzAsIDRdICgmbHQ7KQotCi1Tb3VyY2UgOgotJmx0OyZndAotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCA0XSAoJmx0OykKLVs0LCA3XSAoJmd0KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS0jdGV4dCg8Jmd0KUB7WzAsIDRdICgmbHQ7KSxbNCwgN10gKCZndCl9Ci0KLVNvdXJjZSA6Ci0mbHQ7Jmd0OwotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCA0XSAoJmx0OykKLVs0LCA4XSAoJmd0OykKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tI3RleHQoPD4pQHtbMCwgNF0gKCZsdDspLFs0LCA4XSAoJmd0Oyl9Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuUElUZXN0LnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuUElUZXN0LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzZhZWE2YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlBJVGVzdC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5QSVRlc3QKLVNvdXJjZSA6Ci08YT48P2VjaG8gJFBIUF9TRUxGPz48L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgMjFdICg8P2VjaG8gJFBIUF9TRUxGPz4pCi1bMjEsIDI1XSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbMjEsIDI1XSAoPC9hPikKLS0tLS1lY2hvKCRQSFBfU0VMRikKLQotdGFyZ2V0KGVjaG8pIGRhdGEgKCRQSFBfU0VMRikKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuUGFyc2VyVGVzdC50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlBhcnNlclRlc3QudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDk2Nzk3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuUGFyc2VyVGVzdC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwyMjUgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuUGFyc2VyVGVzdAotU291cmNlIDoKLTxQPjxCPjwvQj48Qj48L0I+PC9QPjxQPjwvUD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxQPikKLVszLCA2XSAoPEI+KQotWzYsIDEwXSAoPC9CPikKLVsxMCwgMTNdICg8Qj4pCi1bMTMsIDE3XSAoPC9CPikKLVsxNywgMjFdICg8L1A+KQotWzIxLCAyNF0gKDxQPikKLVsyNCwgMjhdICg8L1A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1QL1BAWzAsIDNdICg8UD4pQFsxNywgMjFdICg8L1A+KQotLS0tLUIvQkBbMywgNl0gKDxCPilAWzYsIDEwXSAoPC9CPikKLS0tLS1CL0JAWzEwLCAxM10gKDxCPilAWzEzLCAxN10gKDwvQj4pCi0tLVAvUEBbMjEsIDI0XSAoPFA+KUBbMjQsIDI4XSAoPC9QPikKLQotU291cmNlIDoKLWE8UD48Qj48L0I+PEI+PC9CPjwvUD48UD48L1A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDFdIChhKQotWzEsIDRdICg8UD4pCi1bNCwgN10gKDxCPikKLVs3LCAxMV0gKDwvQj4pCi1bMTEsIDE0XSAoPEI+KQotWzE0LCAxOF0gKDwvQj4pCi1bMTgsIDIyXSAoPC9QPikKLVsyMiwgMjVdICg8UD4pCi1bMjUsIDI5XSAoPC9QPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tI3RleHQoYSlAWzAsIDFdIChhKQotLS1QL1BAWzEsIDRdICg8UD4pQFsxOCwgMjJdICg8L1A+KQotLS0tLUIvQkBbNCwgN10gKDxCPilAWzcsIDExXSAoPC9CPikKLS0tLS1CL0JAWzExLCAxNF0gKDxCPilAWzE0LCAxOF0gKDwvQj4pCi0tLVAvUEBbMjIsIDI1XSAoPFA+KUBbMjUsIDI5XSAoPC9QPikKLQotU291cmNlIDoKLWE8UD5iPEI+PC9CPjxCPjwvQj48L1A+PFA+PC9QPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAxXSAoYSkKLVsxLCA0XSAoPFA+KQotWzQsIDVdIChiKQotWzUsIDhdICg8Qj4pCi1bOCwgMTJdICg8L0I+KQotWzEyLCAxNV0gKDxCPikKLVsxNSwgMTldICg8L0I+KQotWzE5LCAyM10gKDwvUD4pCi1bMjMsIDI2XSAoPFA+KQotWzI2LCAzMF0gKDwvUD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLSN0ZXh0KGEpQFswLCAxXSAoYSkKLS0tUC9QQFsxLCA0XSAoPFA+KUBbMTksIDIzXSAoPC9QPikKLS0tLS0jdGV4dChiKUBbNCwgNV0gKGIpCi0tLS0tQi9CQFs1LCA4XSAoPEI+KUBbOCwgMTJdICg8L0I+KQotLS0tLUIvQkBbMTIsIDE1XSAoPEI+KUBbMTUsIDE5XSAoPC9CPikKLS0tUC9QQFsyMywgMjZdICg8UD4pQFsyNiwgMzBdICg8L1A+KQotCi1Tb3VyY2UgOgotYTxQPmI8Qj48L0I+YzxCPjwvQj48L1A+PFA+PC9QPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAxXSAoYSkKLVsxLCA0XSAoPFA+KQotWzQsIDVdIChiKQotWzUsIDhdICg8Qj4pCi1bOCwgMTJdICg8L0I+KQotWzEyLCAxM10gKGMpCi1bMTMsIDE2XSAoPEI+KQotWzE2LCAyMF0gKDwvQj4pCi1bMjAsIDI0XSAoPC9QPikKLVsyNCwgMjddICg8UD4pCi1bMjcsIDMxXSAoPC9QPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tI3RleHQoYSlAWzAsIDFdIChhKQotLS1QL1BAWzEsIDRdICg8UD4pQFsyMCwgMjRdICg8L1A+KQotLS0tLSN0ZXh0KGIpQFs0LCA1XSAoYikKLS0tLS1CL0JAWzUsIDhdICg8Qj4pQFs4LCAxMl0gKDwvQj4pCi0tLS0tI3RleHQoYylAWzEyLCAxM10gKGMpCi0tLS0tQi9CQFsxMywgMTZdICg8Qj4pQFsxNiwgMjBdICg8L0I+KQotLS1QL1BAWzI0LCAyN10gKDxQPilAWzI3LCAzMV0gKDwvUD4pCi0KLVNvdXJjZSA6Ci1hPFA+YjxCPjwvQj5jPEI+PC9CPmQ8L1A+PFA+PC9QPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAxXSAoYSkKLVsxLCA0XSAoPFA+KQotWzQsIDVdIChiKQotWzUsIDhdICg8Qj4pCi1bOCwgMTJdICg8L0I+KQotWzEyLCAxM10gKGMpCi1bMTMsIDE2XSAoPEI+KQotWzE2LCAyMF0gKDwvQj4pCi1bMjAsIDIxXSAoZCkKLVsyMSwgMjVdICg8L1A+KQotWzI1LCAyOF0gKDxQPikKLVsyOCwgMzJdICg8L1A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS0jdGV4dChhKUBbMCwgMV0gKGEpCi0tLVAvUEBbMSwgNF0gKDxQPilAWzIxLCAyNV0gKDwvUD4pCi0tLS0tI3RleHQoYilAWzQsIDVdIChiKQotLS0tLUIvQkBbNSwgOF0gKDxCPilAWzgsIDEyXSAoPC9CPikKLS0tLS0jdGV4dChjKUBbMTIsIDEzXSAoYykKLS0tLS1CL0JAWzEzLCAxNl0gKDxCPilAWzE2LCAyMF0gKDwvQj4pCi0tLS0tI3RleHQoZClAWzIwLCAyMV0gKGQpCi0tLVAvUEBbMjUsIDI4XSAoPFA+KUBbMjgsIDMyXSAoPC9QPikKLQotU291cmNlIDoKLWE8UD5iPEI+PC9CPmM8Qj48L0I+ZDwvUD5lPFA+PC9QPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAxXSAoYSkKLVsxLCA0XSAoPFA+KQotWzQsIDVdIChiKQotWzUsIDhdICg8Qj4pCi1bOCwgMTJdICg8L0I+KQotWzEyLCAxM10gKGMpCi1bMTMsIDE2XSAoPEI+KQotWzE2LCAyMF0gKDwvQj4pCi1bMjAsIDIxXSAoZCkKLVsyMSwgMjVdICg8L1A+KQotWzI1LCAyNl0gKGUpCi1bMjYsIDI5XSAoPFA+KQotWzI5LCAzM10gKDwvUD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLSN0ZXh0KGEpQFswLCAxXSAoYSkKLS0tUC9QQFsxLCA0XSAoPFA+KUBbMjEsIDI1XSAoPC9QPikKLS0tLS0jdGV4dChiKUBbNCwgNV0gKGIpCi0tLS0tQi9CQFs1LCA4XSAoPEI+KUBbOCwgMTJdICg8L0I+KQotLS0tLSN0ZXh0KGMpQFsxMiwgMTNdIChjKQotLS0tLUIvQkBbMTMsIDE2XSAoPEI+KUBbMTYsIDIwXSAoPC9CPikKLS0tLS0jdGV4dChkKUBbMjAsIDIxXSAoZCkKLS0tI3RleHQoZSlAWzI1LCAyNl0gKGUpCi0tLVAvUEBbMjYsIDI5XSAoPFA+KUBbMjksIDMzXSAoPC9QPikKLQotU291cmNlIDoKLWE8UD5iPEI+PC9CPmM8Qj48L0I+ZDwvUD5lPFA+ZjwvUD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgMV0gKGEpCi1bMSwgNF0gKDxQPikKLVs0LCA1XSAoYikKLVs1LCA4XSAoPEI+KQotWzgsIDEyXSAoPC9CPikKLVsxMiwgMTNdIChjKQotWzEzLCAxNl0gKDxCPikKLVsxNiwgMjBdICg8L0I+KQotWzIwLCAyMV0gKGQpCi1bMjEsIDI1XSAoPC9QPikKLVsyNSwgMjZdIChlKQotWzI2LCAyOV0gKDxQPikKLVsyOSwgMzBdIChmKQotWzMwLCAzNF0gKDwvUD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLSN0ZXh0KGEpQFswLCAxXSAoYSkKLS0tUC9QQFsxLCA0XSAoPFA+KUBbMjEsIDI1XSAoPC9QPikKLS0tLS0jdGV4dChiKUBbNCwgNV0gKGIpCi0tLS0tQi9CQFs1LCA4XSAoPEI+KUBbOCwgMTJdICg8L0I+KQotLS0tLSN0ZXh0KGMpQFsxMiwgMTNdIChjKQotLS0tLUIvQkBbMTMsIDE2XSAoPEI+KUBbMTYsIDIwXSAoPC9CPikKLS0tLS0jdGV4dChkKUBbMjAsIDIxXSAoZCkKLS0tI3RleHQoZSlAWzI1LCAyNl0gKGUpCi0tLVAvUEBbMjYsIDI5XSAoPFA+KUBbMzAsIDM0XSAoPC9QPikKLS0tLS0jdGV4dChmKUBbMjksIDMwXSAoZikKLQotU291cmNlIDoKLWE8UD5iPEI+PC9CPmM8Qj48L0I+ZDwvUD5lPFA+ZjwvUD5nCi0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDFdIChhKQotWzEsIDRdICg8UD4pCi1bNCwgNV0gKGIpCi1bNSwgOF0gKDxCPikKLVs4LCAxMl0gKDwvQj4pCi1bMTIsIDEzXSAoYykKLVsxMywgMTZdICg8Qj4pCi1bMTYsIDIwXSAoPC9CPikKLVsyMCwgMjFdIChkKQotWzIxLCAyNV0gKDwvUD4pCi1bMjUsIDI2XSAoZSkKLVsyNiwgMjldICg8UD4pCi1bMjksIDMwXSAoZikKLVszMCwgMzRdICg8L1A+KQotWzM0LCAzNV0gKGcpCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLSN0ZXh0KGEpQFswLCAxXSAoYSkKLS0tUC9QQFsxLCA0XSAoPFA+KUBbMjEsIDI1XSAoPC9QPikKLS0tLS0jdGV4dChiKUBbNCwgNV0gKGIpCi0tLS0tQi9CQFs1LCA4XSAoPEI+KUBbOCwgMTJdICg8L0I+KQotLS0tLSN0ZXh0KGMpQFsxMiwgMTNdIChjKQotLS0tLUIvQkBbMTMsIDE2XSAoPEI+KUBbMTYsIDIwXSAoPC9CPikKLS0tLS0jdGV4dChkKUBbMjAsIDIxXSAoZCkKLS0tI3RleHQoZSlAWzI1LCAyNl0gKGUpCi0tLVAvUEBbMjYsIDI5XSAoPFA+KUBbMzAsIDM0XSAoPC9QPikKLS0tLS0jdGV4dChmKUBbMjksIDMwXSAoZikKLS0tI3RleHQoZylAWzM0LCAzNV0gKGcpCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuUGFyc2VyVGVzdDIudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5QYXJzZXJUZXN0Mi50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzOTkwYTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5QYXJzZXJUZXN0Mi50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5QYXJzZXJUZXN0MgotU291cmNlIDoKLTxhIGI9IiIgIGM9ImMiPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAxNV0gKDxhIGI9IiIgIGM9ImMiPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYUBbMCwgMTVdICg8YSBiJiM2MTsiIiAgYyYjNjE7ImMiPikKLQotYj1bXQotYz1bY10KLVNvdXJjZSA6Ci08YSBiPSIiIGQgYz0iYyI+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDE2XSAoPGEgYj0iIiBkIGM9ImMiPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYUBbMCwgMTZdICg8YSBiJiM2MTsiIiBkIGMmIzYxOyJjIj4pCi0KLWI9W10KLWQ9W10KLWM9W2NdCi1Tb3VyY2UgOgotPGEgYj0iIiAgYz0iYyI+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDE1XSAoPGEgYj0iIiAgYz0iYyI+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hQFswLCAxNV0gKDxhIGImIzYxOyIiICBjJiM2MTsiYyI+KQotCi1iPVtdCi1jPVtjXQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5QYXJzZXJUZXN0My50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlBhcnNlclRlc3QzLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDMzOGFmYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlBhcnNlclRlc3QzLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlBhcnNlclRlc3QzCi1Tb3VyY2UgOgotPGEgYiAgPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCA3XSAoPGEgYiAgPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYUBbMCwgN10gKDxhIGIgID4pCi0KLWI9W10KLW9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5ldmVudHMuUmVnaW9uQ2hhbmdlZEV2ZW50Ci1Tb3VyY2UgOgotPGEgYiA+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDZdICg8YSBiID4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWFAWzAsIDZdICg8YSBiID4pCi0KLWI9W10KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuUGFyc2VyVGVzdDQudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5QYXJzZXJUZXN0NC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjMzJjZTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5QYXJzZXJUZXN0NC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwyNDMgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuUGFyc2VyVGVzdDQKLVNvdXJjZSA6Ci08YT4KLQotPCUgYSAlPgotPCUgYiAlPgotPC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDVdICgKLQotKQotWzUsIDZdICg8KQotWzYsIDhdICglICkKLVs4LCAxMF0gKGEgKQotWzEwLCAxMV0gKCUpCi1bMTEsIDEzXSAoPgotKQotWzEzLCAxNF0gKDwpCi1bMTQsIDE2XSAoJSApCi1bMTYsIDE4XSAoYiApCi1bMTgsIDE5XSAoJSkKLVsxOSwgMjFdICg+Ci0pCi1bMjEsIDI1XSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbMjEsIDI1XSAoPC9hPikKLS0tLS0jdGV4dChcblxuPCUgYSAlPlxuPCUgYiAlPlxuKUB7WzMsIDVdIChcblxuKSxbNSwgNl0gKDwpLFs2LCA4XSAoJSApLFs4LCAxMF0gKGEgKSxbMTAsIDExXSAoJSksWzExLCAxM10gKD5cbiksWzEzLCAxNF0gKDwpLFsxNCwgMTZdICglICksWzE2LCAxOF0gKGIgKSxbMTgsIDE5XSAoJSksWzE5LCAyMV0gKD5cbil9Ci0KLVNvdXJjZSA6Ci08YT4KLTwKLTwlIGEgJT4KLTwlIGIgJT4KLTwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCA0XSAoCi0pCi1bNCwgNV0gKDwpCi1bNSwgNl0gKAotKQotWzYsIDddICg8KQotWzcsIDldICglICkKLVs5LCAxMV0gKGEgKQotWzExLCAxMl0gKCUpCi1bMTIsIDE0XSAoPgotKQotWzE0LCAxNV0gKDwpCi1bMTUsIDE3XSAoJSApCi1bMTcsIDE5XSAoYiApCi1bMTksIDIwXSAoJSkKLVsyMCwgMjJdICg+Ci0pCi1bMjIsIDI2XSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbMjIsIDI2XSAoPC9hPikKLS0tLS0jdGV4dChcbjxcbjwlIGEgJT5cbjwlIGIgJT5cbilAe1szLCA0XSAoXG4pLFs0LCA1XSAoPCksWzUsIDZdIChcbiksWzYsIDddICg8KSxbNywgOV0gKCUgKSxbOSwgMTFdIChhICksWzExLCAxMl0gKCUpLFsxMiwgMTRdICg+XG4pLFsxNCwgMTVdICg8KSxbMTUsIDE3XSAoJSApLFsxNywgMTldIChiICksWzE5LCAyMF0gKCUpLFsyMCwgMjJdICg+XG4pfQotCi1Tb3VyY2UgOgotPGE+Ci08YgotPCUgYSAlPgotPCUgYiAlPgotPC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDRdICgKLSkKLVs0LCA3XSAoPGIKLSkKLVs3LCA4XSAoPCkKLVs4LCAxMF0gKCUgKQotWzEwLCAxMl0gKGEgKQotWzEyLCAxM10gKCUpCi1bMTMsIDE1XSAoPgotKQotWzE1LCAxNl0gKDwpCi1bMTYsIDE4XSAoJSApCi1bMTgsIDIwXSAoYiApCi1bMjAsIDIxXSAoJSkKLVsyMSwgMjNdICg+Ci0pCi1bMjMsIDI3XSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbMjMsIDI3XSAoPC9hPikKLS0tLS0jdGV4dChcbilAWzMsIDRdIChcbikKLS0tLS1iQFs0LCA3XSAoPGJcbikKLS0tLS0tLSN0ZXh0KDwlIGEgJT5cbjwlIGIgJT5cbilAe1s3LCA4XSAoPCksWzgsIDEwXSAoJSApLFsxMCwgMTJdIChhICksWzEyLCAxM10gKCUpLFsxMywgMTVdICg+XG4pLFsxNSwgMTZdICg8KSxbMTYsIDE4XSAoJSApLFsxOCwgMjBdIChiICksWzIwLCAyMV0gKCUpLFsyMSwgMjNdICg+XG4pfQotCi1Tb3VyY2UgOgotPGE+Ci08YmMKLTwlIGEgJT4KLTwlIGIgJT4KLTwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCA0XSAoCi0pCi1bNCwgOF0gKDxiYwotKQotWzgsIDldICg8KQotWzksIDExXSAoJSApCi1bMTEsIDEzXSAoYSApCi1bMTMsIDE0XSAoJSkKLVsxNCwgMTZdICg+Ci0pCi1bMTYsIDE3XSAoPCkKLVsxNywgMTldICglICkKLVsxOSwgMjFdIChiICkKLVsyMSwgMjJdICglKQotWzIyLCAyNF0gKD4KLSkKLVsyNCwgMjhdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFsyNCwgMjhdICg8L2E+KQotLS0tLSN0ZXh0KFxuKUBbMywgNF0gKFxuKQotLS0tLWJjQFs0LCA4XSAoPGJjXG4pCi0tLS0tLS0jdGV4dCg8JSBhICU+XG48JSBiICU+XG4pQHtbOCwgOV0gKDwpLFs5LCAxMV0gKCUgKSxbMTEsIDEzXSAoYSApLFsxMywgMTRdICglKSxbMTQsIDE2XSAoPlxuKSxbMTYsIDE3XSAoPCksWzE3LCAxOV0gKCUgKSxbMTksIDIxXSAoYiApLFsyMSwgMjJdICglKSxbMjIsIDI0XSAoPlxuKX0KLQotU291cmNlIDoKLTxhPgotPGJjZAotPCUgYSAlPgotPCUgYiAlPgotPC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDRdICgKLSkKLVs0LCA5XSAoPGJjZAotKQotWzksIDEwXSAoPCkKLVsxMCwgMTJdICglICkKLVsxMiwgMTRdIChhICkKLVsxNCwgMTVdICglKQotWzE1LCAxN10gKD4KLSkKLVsxNywgMThdICg8KQotWzE4LCAyMF0gKCUgKQotWzIwLCAyMl0gKGIgKQotWzIyLCAyM10gKCUpCi1bMjMsIDI1XSAoPgotKQotWzI1LCAyOV0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzI1LCAyOV0gKDwvYT4pCi0tLS0tI3RleHQoXG4pQFszLCA0XSAoXG4pCi0tLS0tYmNkQFs0LCA5XSAoPGJjZFxuKQotLS0tLS0tI3RleHQoPCUgYSAlPlxuPCUgYiAlPlxuKUB7WzksIDEwXSAoPCksWzEwLCAxMl0gKCUgKSxbMTIsIDE0XSAoYSApLFsxNCwgMTVdICglKSxbMTUsIDE3XSAoPlxuKSxbMTcsIDE4XSAoPCksWzE4LCAyMF0gKCUgKSxbMjAsIDIyXSAoYiApLFsyMiwgMjNdICglKSxbMjMsIDI1XSAoPlxuKX0KLQotU291cmNlIDoKLTxhPgotPGJjZGUKLTwlIGEgJT4KLTwlIGIgJT4KLTwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCA0XSAoCi0pCi1bNCwgMTBdICg8YmNkZQotKQotWzEwLCAxMV0gKDwpCi1bMTEsIDEzXSAoJSApCi1bMTMsIDE1XSAoYSApCi1bMTUsIDE2XSAoJSkKLVsxNiwgMThdICg+Ci0pCi1bMTgsIDE5XSAoPCkKLVsxOSwgMjFdICglICkKLVsyMSwgMjNdIChiICkKLVsyMywgMjRdICglKQotWzI0LCAyNl0gKD4KLSkKLVsyNiwgMzBdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFsyNiwgMzBdICg8L2E+KQotLS0tLSN0ZXh0KFxuKUBbMywgNF0gKFxuKQotLS0tLWJjZGVAWzQsIDEwXSAoPGJjZGVcbikKLS0tLS0tLSN0ZXh0KDwlIGEgJT5cbjwlIGIgJT5cbilAe1sxMCwgMTFdICg8KSxbMTEsIDEzXSAoJSApLFsxMywgMTVdIChhICksWzE1LCAxNl0gKCUpLFsxNiwgMThdICg+XG4pLFsxOCwgMTldICg8KSxbMTksIDIxXSAoJSApLFsyMSwgMjNdIChiICksWzIzLCAyNF0gKCUpLFsyNCwgMjZdICg+XG4pfQotCi1Tb3VyY2UgOgotPGE+Ci08YmNkZT4KLTwlIGEgJT4KLTwlIGIgJT4KLTwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCA0XSAoCi0pCi1bNCwgMTBdICg8YmNkZT4pCi1bMTAsIDExXSAoCi0pCi1bMTEsIDEyXSAoPCkKLVsxMiwgMTRdICglICkKLVsxNCwgMTZdIChhICkKLVsxNiwgMTddICglKQotWzE3LCAxOV0gKD4KLSkKLVsxOSwgMjBdICg8KQotWzIwLCAyMl0gKCUgKQotWzIyLCAyNF0gKGIgKQotWzI0LCAyNV0gKCUpCi1bMjUsIDI3XSAoPgotKQotWzI3LCAzMV0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzI3LCAzMV0gKDwvYT4pCi0tLS0tI3RleHQoXG4pQFszLCA0XSAoXG4pCi0tLS0tYmNkZUBbNCwgMTBdICg8YmNkZT4pCi0tLS0tLS0jdGV4dChcbjwlIGEgJT5cbjwlIGIgJT5cbilAe1sxMCwgMTFdIChcbiksWzExLCAxMl0gKDwpLFsxMiwgMTRdICglICksWzE0LCAxNl0gKGEgKSxbMTYsIDE3XSAoJSksWzE3LCAxOV0gKD5cbiksWzE5LCAyMF0gKDwpLFsyMCwgMjJdICglICksWzIyLCAyNF0gKGIgKSxbMjQsIDI1XSAoJSksWzI1LCAyN10gKD5cbil9Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdC50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3QudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMmE5MDAzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMDcgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdAotU291cmNlIDoKLTxwPmFhYmJiYmNjYzwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCAxMl0gKGFhYmJiYmNjYykKLVsxMiwgMTZdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsxMiwgMTZdICg8L3A+KQotLS0tLSN0ZXh0KGFhYmJiYmNjYylAWzMsIDEyXSAoYWFiYmJiY2NjKQotCi1Tb3VyY2UgOgotPHA+YWFiYmJiY2NjPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDEyXSAoYWFiYmJiY2NjKQotWzEyLCAxNl0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzEyLCAxNl0gKDwvcD4pCi0tLS0tI3RleHQoYWEpQFszLDVdKFszLCAxMl0gKGFhYmJiYmNjYykpCi0tLS0tI3RleHQoYmJiYmNjYylAWzUsMTJdKFszLCAxMl0gKGFhYmJiYmNjYykpCi0KLVNvdXJjZSA6Ci08cD5hYWJiYmJjY2M8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgMTJdIChhYWJiYmJjY2MpCi1bMTIsIDE2XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMTIsIDE2XSAoPC9wPikKLS0tLS0jdGV4dChhYSlAWzMsNV0oWzMsIDEyXSAoYWFiYmJiY2NjKSkKLS0tLS0jdGV4dChiYmJiKUBbNSw5XShbMywgMTJdIChhYWJiYmJjY2MpKQotLS0tLSN0ZXh0KGNjYylAWzksMTJdKFszLCAxMl0gKGFhYmJiYmNjYykpCi0KLVNvdXJjZSA6Ci08cD5hYWNjYzwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA4XSAoYWFjY2MpCi1bOCwgMTJdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFs4LCAxMl0gKDwvcD4pCi0tLS0tI3RleHQoYWEpQFszLDVdKFszLCA4XSAoYWFjY2MpKQotLS0tLSN0ZXh0KGNjYylAWzUsOF0oWzMsIDhdIChhYWNjYykpCi0KLVNvdXJjZSA6Ci08cD5hYWRkZGRkZGRjY2M8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgMTVdIChhYWRkZGRkZGRjY2MpCi1bMTUsIDE5XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMTUsIDE5XSAoPC9wPikKLS0tLS0jdGV4dChhYWRkZGRkZGQpQFszLDEyXShbMywgMTVdIChhYWRkZGRkZGRjY2MpKQotLS0tLSN0ZXh0KGNjYylAWzEyLDE1XShbMywgMTVdIChhYWRkZGRkZGRjY2MpKQotCi1Tb3VyY2UgOgotPHA+YWFkZGRkZGRkY2NjZWVlPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDE4XSAoYWFkZGRkZGRkY2NjZWVlKQotWzE4LCAyMl0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzE4LCAyMl0gKDwvcD4pCi0tLS0tI3RleHQoYWFkZGRkZGRkKUBbMywxMl0oWzMsIDE4XSAoYWFkZGRkZGRkY2NjZWVlKSkKLS0tLS0jdGV4dChjY2NlZWUpQFsxMiwxOF0oWzMsIDE4XSAoYWFkZGRkZGRkY2NjZWVlKSkKLQotU291cmNlIDoKLTxwPmFhZGRkZGRkZGJiYmJjY2NlZWU8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgMjJdIChhYWRkZGRkZGRiYmJiY2NjZWVlKQotWzIyLCAyNl0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzIyLCAyNl0gKDwvcD4pCi0tLS0tI3RleHQoYWFkZGRkZGRkKUBbMywxMl0oWzMsIDIyXSAoYWFkZGRkZGRkYmJiYmNjY2VlZSkpCi0tLS0tI3RleHQoYmJiYilAWzEyLDE2XShbMywgMjJdIChhYWRkZGRkZGRiYmJiY2NjZWVlKSkKLS0tLS0jdGV4dChjY2NlZWUpQFsxNiwyMl0oWzMsIDIyXSAoYWFkZGRkZGRkYmJiYmNjY2VlZSkpCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdDIudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5TcGxpdFRleHRUZXN0Mi50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhMTIyYzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5TcGxpdFRleHRUZXN0Mi50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5TcGxpdFRleHRUZXN0MgotU291cmNlIDoKLTxwPmFhYmJiYmNjYzwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCAxMl0gKGFhYmJiYmNjYykKLVsxMiwgMTZdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsxMiwgMTZdICg8L3A+KQotLS0tLSN0ZXh0KGFhYmJiYmNjYylAWzMsIDEyXSAoYWFiYmJiY2NjKQotCi1Tb3VyY2UgOgotPHA+YWFiYmJiY2NjPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDEyXSAoYWFiYmJiY2NjKQotWzEyLCAxNl0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzEyLCAxNl0gKDwvcD4pCi0tLS0tI3RleHQoYWEpQFszLDVdKFszLCAxMl0gKGFhYmJiYmNjYykpCi0tLS0tI3RleHQoYmJiYmNjYylAWzUsMTJdKFszLCAxMl0gKGFhYmJiYmNjYykpCi0KLVNvdXJjZSA6Ci08cD5hYWJiYmJjY2M8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgMTJdIChhYWJiYmJjY2MpCi1bMTIsIDE2XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMTIsIDE2XSAoPC9wPikKLS0tLS0jdGV4dChhYSlAWzMsNV0oWzMsIDEyXSAoYWFiYmJiY2NjKSkKLS0tLS0jdGV4dChiYmJiKUBbNSw5XShbMywgMTJdIChhYWJiYmJjY2MpKQotLS0tLSN0ZXh0KGNjYylAWzksMTJdKFszLCAxMl0gKGFhYmJiYmNjYykpCi0KLVNvdXJjZSA6Ci08cD5hYWNjYzwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA4XSAoYWFjY2MpCi1bOCwgMTJdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFs4LCAxMl0gKDwvcD4pCi0tLS0tI3RleHQoYWEpQFszLDVdKFszLCA4XSAoYWFjY2MpKQotLS0tLSN0ZXh0KGNjYylAWzUsOF0oWzMsIDhdIChhYWNjYykpCi0KLVNvdXJjZSA6Ci08cD5hYTxiPmJiYmI8L2I+Y2NjPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDVdIChhYSkKLVs1LCA4XSAoPGI+KQotWzgsIDEyXSAoYmJiYikKLVsxMiwgMTZdICg8L2I+KQotWzE2LCAxOV0gKGNjYykKLVsxOSwgMjNdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsxOSwgMjNdICg8L3A+KQotLS0tLSN0ZXh0KGFhKUBbMywgNV0gKGFhKQotLS0tLWIvYkBbNSwgOF0gKDxiPilAWzEyLCAxNl0gKDwvYj4pCi0tLS0tLS0jdGV4dChiYmJiKUBbOCwgMTJdIChiYmJiKQotLS0tLSN0ZXh0KGNjYylAWzE2LCAxOV0gKGNjYykKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5TcGxpdFRleHRUZXN0My50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3QzLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDQ1M2E1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3QzLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3QzCi1Tb3VyY2UgOgotPHA+YWE8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgNV0gKGFhKQotWzUsIDldICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFs1LCA5XSAoPC9wPikKLS0tLS0jdGV4dChhYSlAWzMsIDVdIChhYSkKLQotU291cmNlIDoKLTxwPmFhPGI+YmJiYjwvYj48L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgNV0gKGFhKQotWzUsIDhdICg8Yj4pCi1bOCwgMTJdIChiYmJiKQotWzEyLCAxNl0gKDwvYj4pCi1bMTYsIDIwXSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMTYsIDIwXSAoPC9wPikKLS0tLS0jdGV4dChhYSlAWzMsIDVdIChhYSkKLS0tLS1iL2JAWzUsIDhdICg8Yj4pQFsxMiwgMTZdICg8L2I+KQotLS0tLS0tI3RleHQoYmJiYilAWzgsIDEyXSAoYmJiYikKLQotU291cmNlIDoKLTxwPmFhPGI+YmJiYjwvYj5jY2M8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgNV0gKGFhKQotWzUsIDhdICg8Yj4pCi1bOCwgMTJdIChiYmJiKQotWzEyLCAxNl0gKDwvYj4pCi1bMTYsIDE5XSAoY2NjKQotWzE5LCAyM10gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzE5LCAyM10gKDwvcD4pCi0tLS0tI3RleHQoYWEpQFszLCA1XSAoYWEpCi0tLS0tYi9iQFs1LCA4XSAoPGI+KUBbMTIsIDE2XSAoPC9iPikKLS0tLS0tLSN0ZXh0KGJiYmIpQFs4LCAxMl0gKGJiYmIpCi0tLS0tI3RleHQoY2NjKUBbMTYsIDE5XSAoY2NjKQotCi1Tb3VyY2UgOgotPHA+YWFjY2M8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgOF0gKGFhY2NjKQotWzgsIDEyXSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbOCwgMTJdICg8L3A+KQotLS0tLSN0ZXh0KGFhKUBbMyw1XShbMywgOF0gKGFhY2NjKSkKLS0tLS0jdGV4dChjY2MpQFs1LDhdKFszLCA4XSAoYWFjY2MpKQotCi1Tb3VyY2UgOgotPHA+YWE8Yj5iYmJiPC9iPmNjYzwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA1XSAoYWEpCi1bNSwgOF0gKDxiPikKLVs4LCAxMl0gKGJiYmIpCi1bMTIsIDE2XSAoPC9iPikKLVsxNiwgMTldIChjY2MpCi1bMTksIDIzXSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMTksIDIzXSAoPC9wPikKLS0tLS0jdGV4dChhYSlAWzMsIDVdIChhYSkKLS0tLS1iL2JAWzUsIDhdICg8Yj4pQFsxMiwgMTZdICg8L2I+KQotLS0tLS0tI3RleHQoYmJiYilAWzgsIDEyXSAoYmJiYikKLS0tLS0jdGV4dChjY2MpQFsxNiwgMTldIChjY2MpCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdDQudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5TcGxpdFRleHRUZXN0NC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3YmJmMzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5TcGxpdFRleHRUZXN0NC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5TcGxpdFRleHRUZXN0NAotU291cmNlIDoKLTxwPjwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA3XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMywgN10gKDwvcD4pCi0tLS0tI3RleHQoKQotCi1Tb3VyY2UgOgotPHA+YWFhPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDZdIChhYWEpCi1bNiwgMTBdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFs2LCAxMF0gKDwvcD4pCi0tLS0tI3RleHQoYWFhKUBbMywgNl0gKGFhYSkKLQotU291cmNlIDoKLTxwPjwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA3XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMywgN10gKDwvcD4pCi0tLS0tI3RleHQoKQotCi1Tb3VyY2UgOgotPHA+Y2NjYzwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA3XSAoY2NjYykKLVs3LCAxMV0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzcsIDExXSAoPC9wPikKLS0tLS0jdGV4dChjY2NjKUBbMywgN10gKGNjY2MpCi0tLS0tI3RleHQoKQotCi1Tb3VyY2UgOgotPHA+Y2NjY2FhYTwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCAxMF0gKGNjY2NhYWEpCi1bMTAsIDE0XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMTAsIDE0XSAoPC9wPikKLS0tLS0jdGV4dChjY2NjKUBbMyw3XShbMywgMTBdIChjY2NjYWFhKSkKLS0tLS0jdGV4dChhYWEpQFs3LDEwXShbMywgMTBdIChjY2NjYWFhKSkKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5TcGxpdFRleHRUZXN0NS50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3Q1LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWNlZGI1OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3Q1LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDEzOCArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5TcGxpdFRleHRUZXN0NQotU291cmNlIDoKLTxwPmFhYmJiYmNjYzwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCAxMl0gKGFhYmJiYmNjYykKLVsxMiwgMTZdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsxMiwgMTZdICg8L3A+KQotLS0tLSN0ZXh0KGFhYmJiYmNjYylAWzMsIDEyXSAoYWFiYmJiY2NjKQotCi1Tb3VyY2UgOgotPHA+YWFiYmJiY2NjPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDEyXSAoYWFiYmJiY2NjKQotWzEyLCAxNl0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzEyLCAxNl0gKDwvcD4pCi0tLS0tI3RleHQoYWFiYmJiKUBbMyw5XShbMywgMTJdIChhYWJiYmJjY2MpKQotLS0tLSN0ZXh0KGNjYylAWzksMTJdKFszLCAxMl0gKGFhYmJiYmNjYykpCi0KLVNvdXJjZSA6Ci08cD5hYWJiYmI8YnI+Y2NjPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDldIChhYWJiYmIpCi1bOSwgMTNdICg8YnI+KQotWzEzLCAxNl0gKGNjYykKLVsxNiwgMjBdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsxNiwgMjBdICg8L3A+KQotLS0tLSN0ZXh0KGFhYmJiYilAWzMsIDldIChhYWJiYmIpCi0tLS0tYnJAWzksIDEzXSAoPGJyPikKLS0tLS0jdGV4dChjY2MpQFsxMywgMTZdIChjY2MpCi0KLVNvdXJjZSA6Ci08cD5hYWJiYmI8YnI+Y2NjZDwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA5XSAoYWFiYmJiKQotWzksIDEzXSAoPGJyPikKLVsxMywgMTddIChjY2NkKQotWzE3LCAyMV0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzE3LCAyMV0gKDwvcD4pCi0tLS0tI3RleHQoYWFiYmJiKUBbMywgOV0gKGFhYmJiYikKLS0tLS1ickBbOSwgMTNdICg8YnI+KQotLS0tLSN0ZXh0KGNjY2QpQFsxMywgMTddIChjY2NkKQotCi1Tb3VyY2UgOgotPHA+YWFiYmJiPGJyPmNjY2RlPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDldIChhYWJiYmIpCi1bOSwgMTNdICg8YnI+KQotWzEzLCAxOF0gKGNjY2RlKQotWzE4LCAyMl0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzE4LCAyMl0gKDwvcD4pCi0tLS0tI3RleHQoYWFiYmJiKUBbMywgOV0gKGFhYmJiYikKLS0tLS1ickBbOSwgMTNdICg8YnI+KQotLS0tLSN0ZXh0KGNjY2RlKUBbMTMsIDE4XSAoY2NjZGUpCi0KLVNvdXJjZSA6Ci08cD5hYTxiPmJiYmI8L2I+PGJyPmNjY2RlPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDVdIChhYSkKLVs1LCA4XSAoPGI+KQotWzgsIDEyXSAoYmJiYikKLVsxMiwgMTZdICg8L2I+KQotWzE2LCAyMF0gKDxicj4pCi1bMjAsIDI1XSAoY2NjZGUpCi1bMjUsIDI5XSAoPC9wPikKLQotU3RydWN0dXJlZERvY3VtZW50UmVnaW9uQ2hlY2tlciA6IHdhcm5pbmcgOiB2YWluCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsyNSwgMjldICg8L3A+KQotLS0tLSN0ZXh0KGFhKUBbMyw1XShbMywgNV0gKGFhKSkKLS0tLS1iL2JAWzUsIDhdICg8Yj4pQFsxMiwgMTZdICg8L2I+KQotLS0tLS0tI3RleHQoYmJiYilAWzgsIDEyXSAoYmJiYikKLS0tLS1ickBbMTYsIDIwXSAoPGJyPikKLS0tLS0jdGV4dChjY2NkZSlAWzIwLCAyNV0gKGNjY2RlKQotCi1Tb3VyY2UgOgotPHA+YWE8Yj5iYmJiPC9iPjxicj48aT5jY2M8L2k+ZGU8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgNV0gKGFhKQotWzUsIDhdICg8Yj4pCi1bOCwgMTJdIChiYmJiKQotWzEyLCAxNl0gKDwvYj4pCi1bMTYsIDIwXSAoPGJyPikKLVsyMCwgMjNdICg8aT4pCi1bMjMsIDI2XSAoY2NjKQotWzI2LCAzMF0gKDwvaT4pCi1bMzAsIDMyXSAoZGUpCi1bMzIsIDM2XSAoPC9wPikKLQotU3RydWN0dXJlZERvY3VtZW50UmVnaW9uQ2hlY2tlciA6IHdhcm5pbmcgOiB2YWluCi1TdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25DaGVja2VyIDogd2FybmluZyA6IHZhaW4KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzMyLCAzNl0gKDwvcD4pCi0tLS0tI3RleHQoYWEpQFszLDVdKFszLCA1XSAoYWEpKQotLS0tLWIvYkBbNSwgOF0gKDxiPilAWzEyLCAxNl0gKDwvYj4pCi0tLS0tLS0jdGV4dChiYmJiKUBbOCwgMTJdIChiYmJiKQotLS0tLWJyQFsxNiwgMjBdICg8YnI+KQotLS0tLWkvaUBbMjAsIDIzXSAoPGk+KUBbMjYsIDMwXSAoPC9pPikKLS0tLS0tLSN0ZXh0KGNjYylAWzIzLCAyNl0gKGNjYykKLS0tLS0jdGV4dChkZSlAWzMwLDMyXShbMzAsIDMyXSAoZGUpKQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3Q2LnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdDYudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTE3NWY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdDYudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdDYKLVNvdXJjZSA6Ci08cD5hYWJiYmJjY2M8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgMTJdIChhYWJiYmJjY2MpCi1bMTIsIDE2XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMTIsIDE2XSAoPC9wPikKLS0tLS0jdGV4dChhYSlAWzMsNV0oWzMsIDEyXSAoYWFiYmJiY2NjKSkKLS0tLS0jdGV4dChiYmJiKUBbNSw5XShbMywgMTJdIChhYWJiYmJjY2MpKQotLS0tLSN0ZXh0KGNjYylAWzksMTJdKFszLCAxMl0gKGFhYmJiYmNjYykpCi0KLVNvdXJjZSA6Ci08cD5hYWJiYmJkY2NjPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDEzXSAoYWFiYmJiZGNjYykKLVsxMywgMTddICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsxMywgMTddICg8L3A+KQotLS0tLSN0ZXh0KGFhKUBbMyw1XShbMywgMTNdIChhYWJiYmJkY2NjKSkKLS0tLS0jdGV4dChiYmJiZClAWzUsMTBdKFszLCAxM10gKGFhYmJiYmRjY2MpKQotLS0tLSN0ZXh0KGNjYylAWzEwLDEzXShbMywgMTNdIChhYWJiYmJkY2NjKSkKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5TcGxpdFRleHRUZXN0Ny50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3Q3LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWYzOWU3NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3Q3LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3Q3Ci1Tb3VyY2UgOgotPHA+YWFhYWJiYmI8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgMTFdIChhYWFhYmJiYikKLVsxMSwgMTVdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsxMSwgMTVdICg8L3A+KQotLS0tLSN0ZXh0KGFhYWEpQFszLDddKFszLCAxMV0gKGFhYWFiYmJiKSkKLS0tLS0jdGV4dChiYmJiKUBbNywxMV0oWzMsIDExXSAoYWFhYWJiYmIpKQotCi1Tb3VyY2UgOgotPHA+YWFhYmI8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgOF0gKGFhYWJiKQotWzgsIDEyXSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbOCwgMTJdICg8L3A+KQotLS0tLSN0ZXh0KGFhYWJiKUBbMywgOF0gKGFhYWJiKQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3Q4LnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdDgudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZTRlNzgzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdDgudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdDgKLVNvdXJjZSA6Ci08cD5hYWFhYmJiYjwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCAxMV0gKGFhYWFiYmJiKQotWzExLCAxNV0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzExLCAxNV0gKDwvcD4pCi0tLS0tI3RleHQoYWFhYSlAWzMsN10oWzMsIDExXSAoYWFhYWJiYmIpKQotLS0tLSN0ZXh0KGJiYmIpQFs3LDExXShbMywgMTFdIChhYWFhYmJiYikpCi0KLVNvdXJjZSA6Ci08cD5hYjwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA1XSAoYWIpCi1bNSwgOV0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzUsIDldICg8L3A+KQotLS0tLSN0ZXh0KGFiKUBbMywgNV0gKGFiKQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlRhYmxlVGVzdC50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlRhYmxlVGVzdC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4NGViZGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5UYWJsZVRlc3QudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTA1ICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlRhYmxlVGVzdAotU291cmNlIDoKLTxodG1sPjwvaHRtbD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgNl0gKDxodG1sPikKLVs2LCAxM10gKDwvaHRtbD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWh0bWwvaHRtbEBbMCwgNl0gKDxodG1sPilAWzYsIDEzXSAoPC9odG1sPikKLQotU291cmNlIDoKLTxodG1sPjxib2R5PjwvYm9keT48L2h0bWw+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDZdICg8aHRtbD4pCi1bNiwgMTJdICg8Ym9keT4pCi1bMTIsIDE5XSAoPC9ib2R5PikKLVsxOSwgMjZdICg8L2h0bWw+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1odG1sL2h0bWxAWzAsIDZdICg8aHRtbD4pQFsxOSwgMjZdICg8L2h0bWw+KQotLS0tLWJvZHkvYm9keUBbNiwgMTJdICg8Ym9keT4pQFsxMiwgMTldICg8L2JvZHk+KQotCi1Tb3VyY2UgOgotPGh0bWw+PGJvZHk+PHRhYmxlIGJvcmRlcj0iMSI+PHRyPjx0ZD48L3RkPjx0ZD48L3RkPjwvdHI+PHRyPjx0ZD48L3RkPjx0ZD48L3RkPjwvdHI+PC90YWJsZT48L2JvZHk+PC9odG1sPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCA2XSAoPGh0bWw+KQotWzYsIDEyXSAoPGJvZHk+KQotWzEyLCAzMF0gKDx0YWJsZSBib3JkZXI9IjEiPikKLVszMCwgMzRdICg8dHI+KQotWzM0LCAzOF0gKDx0ZD4pCi1bMzgsIDQzXSAoPC90ZD4pCi1bNDMsIDQ3XSAoPHRkPikKLVs0NywgNTJdICg8L3RkPikKLVs1MiwgNTddICg8L3RyPikKLVs1NywgNjFdICg8dHI+KQotWzYxLCA2NV0gKDx0ZD4pCi1bNjUsIDcwXSAoPC90ZD4pCi1bNzAsIDc0XSAoPHRkPikKLVs3NCwgNzldICg8L3RkPikKLVs3OSwgODRdICg8L3RyPikKLVs4NCwgOTJdICg8L3RhYmxlPikKLVs5MiwgOTldICg8L2JvZHk+KQotWzk5LCAxMDZdICg8L2h0bWw+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1odG1sL2h0bWxAWzAsIDZdICg8aHRtbD4pQFs5OSwgMTA2XSAoPC9odG1sPikKLS0tLS1ib2R5L2JvZHlAWzYsIDEyXSAoPGJvZHk+KUBbOTIsIDk5XSAoPC9ib2R5PikKLS0tLS0tLXRhYmxlL3RhYmxlQFsxMiwgMzBdICg8dGFibGUgYm9yZGVyJiM2MTsiMSI+KUBbODQsIDkyXSAoPC90YWJsZT4pCi0tLS0tLS0tLXRyL3RyQFszMCwgMzRdICg8dHI+KUBbNTIsIDU3XSAoPC90cj4pCi0tLS0tLS0tLS0tdGQvdGRAWzM0LCAzOF0gKDx0ZD4pQFszOCwgNDNdICg8L3RkPikKLS0tLS0tLS0tLS10ZC90ZEBbNDMsIDQ3XSAoPHRkPilAWzQ3LCA1Ml0gKDwvdGQ+KQotLS0tLS0tLS10ci90ckBbNTcsIDYxXSAoPHRyPilAWzc5LCA4NF0gKDwvdHI+KQotLS0tLS0tLS0tLXRkL3RkQFs2MSwgNjVdICg8dGQ+KUBbNjUsIDcwXSAoPC90ZD4pCi0tLS0tLS0tLS0tdGQvdGRAWzcwLCA3NF0gKDx0ZD4pQFs3NCwgNzldICg8L3RkPikKLQotU291cmNlIDoKLTxodG1sPjxib2R5Pjx0YWJsZSBib3JkZXI9IjEiPjx0cj48dGQ+PC90ZD48dGQ+PC90ZD48L3RyPjx0cj48dGQ+PC90ZD48dGQ+PGZvbnQgY29sb3I9InJlZCI+dGV4dDwvZm9udD48L3RkPjwvdHI+PC90YWJsZT48L2JvZHk+PC9odG1sPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCA2XSAoPGh0bWw+KQotWzYsIDEyXSAoPGJvZHk+KQotWzEyLCAzMF0gKDx0YWJsZSBib3JkZXI9IjEiPikKLVszMCwgMzRdICg8dHI+KQotWzM0LCAzOF0gKDx0ZD4pCi1bMzgsIDQzXSAoPC90ZD4pCi1bNDMsIDQ3XSAoPHRkPikKLVs0NywgNTJdICg8L3RkPikKLVs1MiwgNTddICg8L3RyPikKLVs1NywgNjFdICg8dHI+KQotWzYxLCA2NV0gKDx0ZD4pCi1bNjUsIDcwXSAoPC90ZD4pCi1bNzAsIDc0XSAoPHRkPikKLVs3NCwgOTJdICg8Zm9udCBjb2xvcj0icmVkIj4pCi1bOTIsIDk2XSAodGV4dCkKLVs5NiwgMTAzXSAoPC9mb250PikKLVsxMDMsIDEwOF0gKDwvdGQ+KQotWzEwOCwgMTEzXSAoPC90cj4pCi1bMTEzLCAxMjFdICg8L3RhYmxlPikKLVsxMjEsIDEyOF0gKDwvYm9keT4pCi1bMTI4LCAxMzVdICg8L2h0bWw+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1odG1sL2h0bWxAWzAsIDZdICg8aHRtbD4pQFsxMjgsIDEzNV0gKDwvaHRtbD4pCi0tLS0tYm9keS9ib2R5QFs2LCAxMl0gKDxib2R5PilAWzEyMSwgMTI4XSAoPC9ib2R5PikKLS0tLS0tLXRhYmxlL3RhYmxlQFsxMiwgMzBdICg8dGFibGUgYm9yZGVyJiM2MTsiMSI+KUBbMTEzLCAxMjFdICg8L3RhYmxlPikKLS0tLS0tLS0tdHIvdHJAWzMwLCAzNF0gKDx0cj4pQFs1MiwgNTddICg8L3RyPikKLS0tLS0tLS0tLS10ZC90ZEBbMzQsIDM4XSAoPHRkPilAWzM4LCA0M10gKDwvdGQ+KQotLS0tLS0tLS0tLXRkL3RkQFs0MywgNDddICg8dGQ+KUBbNDcsIDUyXSAoPC90ZD4pCi0tLS0tLS0tLXRyL3RyQFs1NywgNjFdICg8dHI+KUBbMTA4LCAxMTNdICg8L3RyPikKLS0tLS0tLS0tLS10ZC90ZEBbNjEsIDY1XSAoPHRkPilAWzY1LCA3MF0gKDwvdGQ+KQotLS0tLS0tLS0tLXRkL3RkQFs3MCwgNzRdICg8dGQ+KUBbMTAzLCAxMDhdICg8L3RkPikKLS0tLS0tLS0tLS0tLWZvbnQvZm9udEBbNzQsIDkyXSAoPGZvbnQgY29sb3ImIzYxOyJyZWQiPilAWzk2LCAxMDNdICg8L2ZvbnQ+KQotLS0tLS0tLS0tLS0tLS0jdGV4dCh0ZXh0KUBbOTIsIDk2XSAodGV4dCkKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5UZXh0VGVzdC50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlRleHRUZXN0LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTg5MmNmMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlRleHRUZXN0LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlRleHRUZXN0Ci1Tb3VyY2UgOgotPGE+aGVsbG8gJmFtcDtsdDs8L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgOV0gKGhlbGxvICkKLVs5LCAxNF0gKCZhbXA7KQotWzE0LCAxN10gKGx0OykKLVsxNywgMjFdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFsxNywgMjFdICg8L2E+KQotLS0tLSN0ZXh0KGhlbGxvICZsdDspQHtbMywgOV0gKGhlbGxvICksWzksIDE0XSAoJmFtcDspLFsxNCwgMTddIChsdDspfQotCi1oZWxsbyAmbHQ7CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlRleHRUZXN0Mi50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlRleHRUZXN0Mi50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiMmJhNTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5UZXh0VGVzdDIudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVGV4dFRlc3QyCi1Tb3VyY2UgOgotPGE+aGVsbG8gJmFtcDtsdDs8L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgOV0gKGhlbGxvICkKLVs5LCAxNF0gKCZhbXA7KQotWzE0LCAxN10gKGx0OykKLVsxNywgMjFdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFsxNywgMjFdICg8L2E+KQotLS0tLSN0ZXh0KGhlbGxvICZsdDspQHtbMywgOV0gKGhlbGxvICksWzksIDE0XSAoJmFtcDspLFsxNCwgMTddIChsdDspfQotCi1oZWxsbyAmbHQ7CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlRleHRUZXN0My50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlRleHRUZXN0My50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiMDRhM2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5UZXh0VGVzdDMudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVGV4dFRlc3QzCi1JbnZhbGlkIGNoYXJhY3RlciAoJzwnKSBmb3VuZAotU291cmNlIDoKLTxhPnRleHQ8L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgN10gKHRleHQpCi1bNywgMTFdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFs3LCAxMV0gKDwvYT4pCi0tLS0tI3RleHQodGV4dClAWzMsIDddICh0ZXh0KQotCi1Tb3VyY2UgOgotPGE+aGVsbG8gJmx0OzwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCA5XSAoaGVsbG8gKQotWzksIDEzXSAoJmx0OykKLVsxMywgMTddICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFsxMywgMTddICg8L2E+KQotLS0tLSN0ZXh0KGhlbGxvIDwpQHtbMywgOV0gKGhlbGxvICksWzksIDEzXSAoJmx0Oyl9Ci0KLUludmFsaWQgY2hhcmFjdGVyICgnJicpIGZvdW5kCi1Tb3VyY2UgOgotPGE+aGVsbG8gJmx0OzwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCA5XSAoaGVsbG8gKQotWzksIDEzXSAoJmx0OykKLVsxMywgMTddICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFsxMywgMTddICg8L2E+KQotLS0tLSN0ZXh0KGhlbGxvIDwpQHtbMywgOV0gKGhlbGxvICksWzksIDEzXSAoJmx0Oyl9Ci0KLVNvdXJjZSA6Ci08YT5oZWxsbyAmIzY1OzwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCA5XSAoaGVsbG8gKQotWzksIDE0XSAoJiM2NTspCi1bMTQsIDE4XSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbMTQsIDE4XSAoPC9hPikKLS0tLS0jdGV4dChoZWxsbyBBKUB7WzMsIDldIChoZWxsbyApLFs5LCAxNF0gKCYjNjU7KX0KLQotSW52YWxpZCBjaGFyYWN0ZXIgKCcmJykgZm91bmQKLVNvdXJjZSA6Ci08YT5oZWxsbyAmIzY1OzwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCA5XSAoaGVsbG8gKQotWzksIDE0XSAoJiM2NTspCi1bMTQsIDE4XSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbMTQsIDE4XSAoPC9hPikKLS0tLS0jdGV4dChoZWxsbyBBKUB7WzMsIDldIChoZWxsbyApLFs5LCAxNF0gKCYjNjU7KX0KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdC50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjlmZTk4MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDE5NyArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdAotU291cmNlIDoKLTxodG1sPjwvaHRtbD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgNl0gKDxodG1sPikKLVs2LCAxM10gKDwvaHRtbD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWh0bWwvaHRtbEBbMCwgNl0gKDxodG1sPilAWzYsIDEzXSAoPC9odG1sPikKLQotU291cmNlIDoKLTxodG1sPjxib2R5PjwvYm9keT48L2h0bWw+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDZdICg8aHRtbD4pCi1bNiwgMTJdICg8Ym9keT4pCi1bMTIsIDE5XSAoPC9ib2R5PikKLVsxOSwgMjZdICg8L2h0bWw+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1odG1sL2h0bWxAWzAsIDZdICg8aHRtbD4pQFsxOSwgMjZdICg8L2h0bWw+KQotLS0tLWJvZHkvYm9keUBbNiwgMTJdICg8Ym9keT4pQFsxMiwgMTldICg8L2JvZHk+KQotCi1Tb3VyY2UgOgotPGh0bWw+PGJvZHk+PHA+PC9wPjwvYm9keT48L2h0bWw+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDZdICg8aHRtbD4pCi1bNiwgMTJdICg8Ym9keT4pCi1bMTIsIDE1XSAoPHA+KQotWzE1LCAxOV0gKDwvcD4pCi1bMTksIDI2XSAoPC9ib2R5PikKLVsyNiwgMzNdICg8L2h0bWw+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1odG1sL2h0bWxAWzAsIDZdICg8aHRtbD4pQFsyNiwgMzNdICg8L2h0bWw+KQotLS0tLWJvZHkvYm9keUBbNiwgMTJdICg8Ym9keT4pQFsxOSwgMjZdICg8L2JvZHk+KQotLS0tLS0tcC9wQFsxMiwgMTVdICg8cD4pQFsxNSwgMTldICg8L3A+KQotCi1Tb3VyY2UgOgotPGh0bWw+PGJvZHk+PHA+dGV4dDwvcD48L2JvZHk+PC9odG1sPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCA2XSAoPGh0bWw+KQotWzYsIDEyXSAoPGJvZHk+KQotWzEyLCAxNV0gKDxwPikKLVsxNSwgMTldICh0ZXh0KQotWzE5LCAyM10gKDwvcD4pCi1bMjMsIDMwXSAoPC9ib2R5PikKLVszMCwgMzddICg8L2h0bWw+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1odG1sL2h0bWxAWzAsIDZdICg8aHRtbD4pQFszMCwgMzddICg8L2h0bWw+KQotLS0tLWJvZHkvYm9keUBbNiwgMTJdICg8Ym9keT4pQFsyMywgMzBdICg8L2JvZHk+KQotLS0tLS0tcC9wQFsxMiwgMTVdICg8cD4pQFsxOSwgMjNdICg8L3A+KQotLS0tLS0tLS0jdGV4dCh0ZXh0KUBbMTUsIDE5XSAodGV4dCkKLQotU291cmNlIDoKLTxodG1sPjxib2R5PjxwPjxicj50ZXh0PC9wPjwvYm9keT48L2h0bWw+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDZdICg8aHRtbD4pCi1bNiwgMTJdICg8Ym9keT4pCi1bMTIsIDE1XSAoPHA+KQotWzE1LCAxOV0gKDxicj4pCi1bMTksIDIzXSAodGV4dCkKLVsyMywgMjddICg8L3A+KQotWzI3LCAzNF0gKDwvYm9keT4pCi1bMzQsIDQxXSAoPC9odG1sPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0taHRtbC9odG1sQFswLCA2XSAoPGh0bWw+KUBbMzQsIDQxXSAoPC9odG1sPikKLS0tLS1ib2R5L2JvZHlAWzYsIDEyXSAoPGJvZHk+KUBbMjcsIDM0XSAoPC9ib2R5PikKLS0tLS0tLXAvcEBbMTIsIDE1XSAoPHA+KUBbMjMsIDI3XSAoPC9wPikKLS0tLS0tLS0tYnJAWzE1LCAxOV0gKDxicj4pCi0tLS0tLS0tLSN0ZXh0KHRleHQpQFsxOSwgMjNdICh0ZXh0KQotCi1Tb3VyY2UgOgotPGh0bWw+PGJvZHk+PHA+PGJyPnRleHQ8aW1nPjwvcD48L2JvZHk+PC9odG1sPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCA2XSAoPGh0bWw+KQotWzYsIDEyXSAoPGJvZHk+KQotWzEyLCAxNV0gKDxwPikKLVsxNSwgMTldICg8YnI+KQotWzE5LCAyM10gKHRleHQpCi1bMjMsIDI4XSAoPGltZz4pCi1bMjgsIDMyXSAoPC9wPikKLVszMiwgMzldICg8L2JvZHk+KQotWzM5LCA0Nl0gKDwvaHRtbD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWh0bWwvaHRtbEBbMCwgNl0gKDxodG1sPilAWzM5LCA0Nl0gKDwvaHRtbD4pCi0tLS0tYm9keS9ib2R5QFs2LCAxMl0gKDxib2R5PilAWzMyLCAzOV0gKDwvYm9keT4pCi0tLS0tLS1wL3BAWzEyLCAxNV0gKDxwPilAWzI4LCAzMl0gKDwvcD4pCi0tLS0tLS0tLWJyQFsxNSwgMTldICg8YnI+KQotLS0tLS0tLS0jdGV4dCh0ZXh0KUBbMTksIDIzXSAodGV4dCkKLS0tLS0tLS0taW1nQFsyMywgMjhdICg8aW1nPikKLQotU291cmNlIDoKLTxodG1sPjxib2R5PjxwPjxicj48aW1nPjwvcD48L2JvZHk+PC9odG1sPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCA2XSAoPGh0bWw+KQotWzYsIDEyXSAoPGJvZHk+KQotWzEyLCAxNV0gKDxwPikKLVsxNSwgMTldICg8YnI+KQotWzE5LCAyNF0gKDxpbWc+KQotWzI0LCAyOF0gKDwvcD4pCi1bMjgsIDM1XSAoPC9ib2R5PikKLVszNSwgNDJdICg8L2h0bWw+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1odG1sL2h0bWxAWzAsIDZdICg8aHRtbD4pQFszNSwgNDJdICg8L2h0bWw+KQotLS0tLWJvZHkvYm9keUBbNiwgMTJdICg8Ym9keT4pQFsyOCwgMzVdICg8L2JvZHk+KQotLS0tLS0tcC9wQFsxMiwgMTVdICg8cD4pQFsyNCwgMjhdICg8L3A+KQotLS0tLS0tLS1ickBbMTUsIDE5XSAoPGJyPikKLS0tLS0tLS0taW1nQFsxOSwgMjRdICg8aW1nPikKLQotU291cmNlIDoKLTxodG1sPjxib2R5PjxwPjxicj50ZXh0PGltZz48L3A+PC9ib2R5PjwvaHRtbD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgNl0gKDxodG1sPikKLVs2LCAxMl0gKDxib2R5PikKLVsxMiwgMTVdICg8cD4pCi1bMTUsIDE5XSAoPGJyPikKLVsxOSwgMjNdICh0ZXh0KQotWzIzLCAyOF0gKDxpbWc+KQotWzI4LCAzMl0gKDwvcD4pCi1bMzIsIDM5XSAoPC9ib2R5PikKLVszOSwgNDZdICg8L2h0bWw+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1odG1sL2h0bWxAWzAsIDZdICg8aHRtbD4pQFszOSwgNDZdICg8L2h0bWw+KQotLS0tLWJvZHkvYm9keUBbNiwgMTJdICg8Ym9keT4pQFszMiwgMzldICg8L2JvZHk+KQotLS0tLS0tcC9wQFsxMiwgMTVdICg8cD4pQFsyOCwgMzJdICg8L3A+KQotLS0tLS0tLS1ickBbMTUsIDE5XSAoPGJyPikKLS0tLS0tLS0tI3RleHQodGV4dClAWzE5LCAyM10gKHRleHQpCi0tLS0tLS0tLWltZ0BbMjMsIDI4XSAoPGltZz4pCi0KLVNvdXJjZSA6Ci08aHRtbD48Ym9keT48L2JvZHk+PC9odG1sPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCA2XSAoPGh0bWw+KQotWzYsIDEyXSAoPGJvZHk+KQotWzEyLCAxOV0gKDwvYm9keT4pCi1bMTksIDI2XSAoPC9odG1sPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0taHRtbC9odG1sQFswLCA2XSAoPGh0bWw+KUBbMTksIDI2XSAoPC9odG1sPikKLS0tLS1ib2R5L2JvZHlAWzYsIDEyXSAoPGJvZHk+KUBbMTIsIDE5XSAoPC9ib2R5PikKLQotU291cmNlIDoKLTxodG1sPjxib2R5PjxwPjxicj50ZXh0PGltZz48L3A+PC9ib2R5PjwvaHRtbD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgNl0gKDxodG1sPikKLVs2LCAxMl0gKDxib2R5PikKLVsxMiwgMTVdICg8cD4pCi1bMTUsIDE5XSAoPGJyPikKLVsxOSwgMjNdICh0ZXh0KQotWzIzLCAyOF0gKDxpbWc+KQotWzI4LCAzMl0gKDwvcD4pCi1bMzIsIDM5XSAoPC9ib2R5PikKLVszOSwgNDZdICg8L2h0bWw+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1odG1sL2h0bWxAWzAsIDZdICg8aHRtbD4pQFszOSwgNDZdICg8L2h0bWw+KQotLS0tLWJvZHkvYm9keUBbNiwgMTJdICg8Ym9keT4pQFszMiwgMzldICg8L2JvZHk+KQotLS0tLS0tcC9wQFsxMiwgMTVdICg8cD4pQFsyOCwgMzJdICg8L3A+KQotLS0tLS0tLS1ickBbMTUsIDE5XSAoPGJyPikKLS0tLS0tLS0tI3RleHQodGV4dClAWzE5LCAyM10gKHRleHQpCi0tLS0tLS0tLWltZ0BbMjMsIDI4XSAoPGltZz4pCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QxMC50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0MTAudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOGY3ZGEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QxMC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDEwCi1Tb3VyY2UgOgotPGEgYj0iYyI+PGI+PC9iPjwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgOV0gKDxhIGI9ImMiPikKLVs5LCAxMl0gKDxiPikKLVsxMiwgMTZdICg8L2I+KQotWzE2LCAyMF0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgOV0gKDxhIGImIzYxOyJjIj4pQFsxNiwgMjBdICg8L2E+KQotLS0tLWIvYkBbOSwgMTJdICg8Yj4pQFsxMiwgMTZdICg8L2I+KQotCi1JU3RydWN0dXJlZERvY3VtZW50UmVnaW9uOgotPGI+Ci0wKDwpdHJ1ZQotMChiKXRydWUKLTAoPil0cnVlCi0KLVNvdXJjZSA6Ci08YSBiPSJjIj48YiBjPSJkIj48L2I+PC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCA5XSAoPGEgYj0iYyI+KQotWzksIDE4XSAoPGIgYz0iZCI+KQotWzE4LCAyMl0gKDwvYj4pCi1bMjIsIDI2XSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCA5XSAoPGEgYiYjNjE7ImMiPilAWzIyLCAyNl0gKDwvYT4pCi0tLS0tYi9iQFs5LCAxOF0gKDxiIGMmIzYxOyJkIj4pQFsxOCwgMjJdICg8L2I+KQotCi1JU3RydWN0dXJlZERvY3VtZW50UmVnaW9uOgotPGIgYz0iZCI+Ci0wKDwpdHJ1ZQotMChiKXRydWUKLTAoYyl0cnVlCi0wKD0pdHJ1ZQotMCgiZCIpdHJ1ZQotMCg+KXRydWUKLQotU291cmNlIDoKLTxhIGI9ImNkIj48YiBjPSJkIj48L2I+PC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAxMF0gKDxhIGI9ImNkIj4pCi1bMTAsIDE5XSAoPGIgYz0iZCI+KQotWzE5LCAyM10gKDwvYj4pCi1bMjMsIDI3XSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAxMF0gKDxhIGImIzYxOyJjZCI+KUBbMjMsIDI3XSAoPC9hPikKLS0tLS1iL2JAWzEwLCAxOV0gKDxiIGMmIzYxOyJkIj4pQFsxOSwgMjNdICg8L2I+KQotCi1JU3RydWN0dXJlZERvY3VtZW50UmVnaW9uOgotPGIgYz0iZCI+Ci0wKDwpdHJ1ZQotMChiKXRydWUKLTAoYyl0cnVlCi0wKD0pdHJ1ZQotMCgiZCIpdHJ1ZQotMCg+KXRydWUKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDExLnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QxMS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5ODhjYjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDExLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0MTEKLVNvdXJjZSA6Ci08YT5iPC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDRdIChiKQotWzQsIDhdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFs0LCA4XSAoPC9hPikKLS0tLS0jdGV4dChiKUBbMywgNF0gKGIpCi0KLVNvdXJjZSA6Ci08YT5iPC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDRdIChiKQotWzQsIDhdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFs0LCA4XSAoPC9hPikKLS0tLS0jdGV4dChiKUBbMywgNF0gKGIpCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QxMi50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0MTIudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MTFhOGY3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QxMi50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDEyCi1Tb3VyY2UgOgotPGE+PC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDddICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFszLCA3XSAoPC9hPikKLQotU291cmNlIDoKLTxhPjwvYT48YT48L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgN10gKDwvYT4pCi1bNywgMTBdICg8YT4pCi1bMTAsIDE0XSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbMywgN10gKDwvYT4pCi0tLWEvYUBbNywgMTBdICg8YT4pQFsxMCwgMTRdICg8L2E+KQotCi1Tb3VyY2UgOgotPGE+PC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDddICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFszLCA3XSAoPC9hPikKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDEzLnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QxMy50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4NTRmN2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDEzLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0MTMKLVNvdXJjZSA6Ci08YT4KLTxiPgotPC9iPiAgPC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDVdICgKLSkKLVs1LCA4XSAoPGI+KQotWzgsIDEwXSAoCi0pCi1bMTAsIDE0XSAoPC9iPikKLVsxNCwgMTZdICggICkKLVsxNiwgMjBdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFsxNiwgMjBdICg8L2E+KQotLS0tLSN0ZXh0KFxyXG4pQFszLCA1XSAoXHJcbikKLS0tLS1iL2JAWzUsIDhdICg8Yj4pQFsxMCwgMTRdICg8L2I+KQotLS0tLS0tI3RleHQoXHJcbilAWzgsIDEwXSAoXHJcbikKLS0tLS0jdGV4dCggIClAWzE0LCAxNl0gKCAgKQotCi1Tb3VyY2UgOgotPGE+Ci0gIDwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCA3XSAoCi0gICkKLVs3LCAxMV0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzcsIDExXSAoPC9hPikKLS0tLS0jdGV4dChcclxuKUBbMyw1XShbMywgN10gKFxyXG4gICkpCi0tLS0tI3RleHQoICApQFs1LDddKFszLCA3XSAoXHJcbiAgKSkKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDE0LnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QxNC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllNmQ1YjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDE0LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0MTQKLVNvdXJjZSA6Ci08JT0gYWFhYSAlPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAxXSAoPCkKLVsxLCA0XSAoJT0gKQotWzQsIDldIChhYWFhICkKLVs5LCAxMF0gKCUpCi1bMTAsIDExXSAoPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tI3RleHQoPCUmIzYxOyBhYWFhICU+KUB7WzAsIDFdICg8KSxbMSwgNF0gKCUmIzYxOyApLFs0LCA5XSAoYWFhYSApLFs5LCAxMF0gKCUpLFsxMCwgMTFdICg+KX0KLQotU291cmNlIDoKLTwlID0gYWFhYSAlPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAxXSAoPCkKLVsxLCA1XSAoJSA9ICkKLVs1LCAxMF0gKGFhYWEgKQotWzEwLCAxMV0gKCUpCi1bMTEsIDEyXSAoPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tI3RleHQoPCUgJiM2MTsgYWFhYSAlPilAe1swLCAxXSAoPCksWzEsIDVdICglICYjNjE7ICksWzUsIDEwXSAoYWFhYSApLFsxMCwgMTFdICglKSxbMTEsIDEyXSAoPil9Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QyLnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QyLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjRkY2YxZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0Mi50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMjcgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QyCi1Tb3VyY2UgOgotPEhUTUw+Ci08SEVBRD48L0hFQUQ+Ci08Qk9EWT48L0JPRFk+Ci08L0hUTUw+Ci0KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgNl0gKDxIVE1MPikKLVs2LCA4XSAoCi0pCi1bOCwgMTRdICg8SEVBRD4pCi1bMTQsIDIxXSAoPC9IRUFEPikKLVsyMSwgMjNdICgKLSkKLVsyMywgMjldICg8Qk9EWT4pCi1bMjksIDM2XSAoPC9CT0RZPikKLVszNiwgMzhdICgKLSkKLVszOCwgNDVdICg8L0hUTUw+KQotWzQ1LCA0N10gKAotKQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1IVE1ML0hUTUxAWzAsIDZdICg8SFRNTD4pQFszOCwgNDVdICg8L0hUTUw+KQotLS0tLSN0ZXh0KFxyXG4pQFs2LCA4XSAoXHJcbikKLS0tLS1IRUFEL0hFQURAWzgsIDE0XSAoPEhFQUQ+KUBbMTQsIDIxXSAoPC9IRUFEPikKLS0tLS0jdGV4dChcclxuKUBbMjEsIDIzXSAoXHJcbikKLS0tLS1CT0RZL0JPRFlAWzIzLCAyOV0gKDxCT0RZPilAWzI5LCAzNl0gKDwvQk9EWT4pCi0tLS0tI3RleHQoXHJcbilAWzM2LCAzOF0gKFxyXG4pCi0tLSN0ZXh0KFxyXG4pQFs0NSwgNDddIChcclxuKQotCi1Tb3VyY2UgOgotPEhUTUw+Ci08SEVBRD4KLTxtZXRhIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iVXBkYXRlciBUZXN0IDIiPgotPC9IRUFEPgotPEJPRFk+PC9CT0RZPgotPC9IVE1MPgotCi0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDZdICg8SFRNTD4pCi1bNiwgOF0gKAotKQotWzgsIDE0XSAoPEhFQUQ+KQotWzE0LCAxNl0gKAotKQotWzE2LCA2NF0gKDxtZXRhIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iVXBkYXRlciBUZXN0IDIiPikKLVs2NCwgNjZdICgKLSkKLVs2NiwgNzNdICg8L0hFQUQ+KQotWzczLCA3NV0gKAotKQotWzc1LCA4MV0gKDxCT0RZPikKLVs4MSwgODhdICg8L0JPRFk+KQotWzg4LCA5MF0gKAotKQotWzkwLCA5N10gKDwvSFRNTD4pCi1bOTcsIDk5XSAoCi0pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLUhUTUwvSFRNTEBbMCwgNl0gKDxIVE1MPilAWzkwLCA5N10gKDwvSFRNTD4pCi0tLS0tI3RleHQoXHJcbilAWzYsIDhdIChcclxuKQotLS0tLUhFQUQvSEVBREBbOCwgMTRdICg8SEVBRD4pQFs2NiwgNzNdICg8L0hFQUQ+KQotLS0tLS0tI3RleHQoXHJcbilAWzE0LCAxNl0gKFxyXG4pCi0tLS0tLS1tZXRhQFsxNiwgNjRdICg8bWV0YSBuYW1lJiM2MTsiR0VORVJBVE9SIiBjb250ZW50JiM2MTsiVXBkYXRlciBUZXN0IDIiPikKLS0tLS0tLSN0ZXh0KFxyXG4pQFs2NCwgNjZdIChcclxuKQotLS0tLSN0ZXh0KFxyXG4pQFs3MywgNzVdIChcclxuKQotLS0tLUJPRFkvQk9EWUBbNzUsIDgxXSAoPEJPRFk+KUBbODEsIDg4XSAoPC9CT0RZPikKLS0tLS0jdGV4dChcclxuKUBbODgsIDkwXSAoXHJcbikKLS0tI3RleHQoXHJcbilAWzk3LCA5OV0gKFxyXG4pCi0KLVNvdXJjZSA6Ci08SFRNTD4KLTxIRUFEPgotPG1ldGEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJVcGRhdGVyIFRlc3QgMiI+Ci08dGl0bGU+PC90aXRsZT48L0hFQUQ+Ci08Qk9EWT48L0JPRFk+Ci08L0hUTUw+Ci0KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgNl0gKDxIVE1MPikKLVs2LCA4XSAoCi0pCi1bOCwgMTRdICg8SEVBRD4pCi1bMTQsIDE2XSAoCi0pCi1bMTYsIDY0XSAoPG1ldGEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJVcGRhdGVyIFRlc3QgMiI+KQotWzY0LCA2Nl0gKAotKQotWzY2LCA3M10gKDx0aXRsZT4pCi1bNzMsIDgxXSAoPC90aXRsZT4pCi1bODEsIDg4XSAoPC9IRUFEPikKLVs4OCwgOTBdICgKLSkKLVs5MCwgOTZdICg8Qk9EWT4pCi1bOTYsIDEwM10gKDwvQk9EWT4pCi1bMTAzLCAxMDVdICgKLSkKLVsxMDUsIDExMl0gKDwvSFRNTD4pCi1bMTEyLCAxMTRdICgKLSkKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tSFRNTC9IVE1MQFswLCA2XSAoPEhUTUw+KUBbMTA1LCAxMTJdICg8L0hUTUw+KQotLS0tLSN0ZXh0KFxyXG4pQFs2LCA4XSAoXHJcbikKLS0tLS1IRUFEL0hFQURAWzgsIDE0XSAoPEhFQUQ+KUBbODEsIDg4XSAoPC9IRUFEPikKLS0tLS0tLSN0ZXh0KFxyXG4pQFsxNCwgMTZdIChcclxuKQotLS0tLS0tbWV0YUBbMTYsIDY0XSAoPG1ldGEgbmFtZSYjNjE7IkdFTkVSQVRPUiIgY29udGVudCYjNjE7IlVwZGF0ZXIgVGVzdCAyIj4pCi0tLS0tLS0jdGV4dChcclxuKUBbNjQsIDY2XSAoXHJcbikKLS0tLS0tLXRpdGxlL3RpdGxlQFs2NiwgNzNdICg8dGl0bGU+KUBbNzMsIDgxXSAoPC90aXRsZT4pCi0tLS0tLS0tLSN0ZXh0KCkKLS0tLS0jdGV4dChcclxuKUBbODgsIDkwXSAoXHJcbikKLS0tLS1CT0RZL0JPRFlAWzkwLCA5Nl0gKDxCT0RZPilAWzk2LCAxMDNdICg8L0JPRFk+KQotLS0tLSN0ZXh0KFxyXG4pQFsxMDMsIDEwNV0gKFxyXG4pCi0tLSN0ZXh0KFxyXG4pQFsxMTIsIDExNF0gKFxyXG4pCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QzLnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QzLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGFjNzNhNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0My50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDMKLVNvdXJjZSA6Ci08YT48Yj48L2I+PC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDZdICg8Yj4pCi1bNiwgMTBdICg8L2I+KQotWzEwLCAxNF0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzEwLCAxNF0gKDwvYT4pCi0tLS0tYi9iQFszLCA2XSAoPGI+KUBbNiwgMTBdICg8L2I+KQotCi1Tb3VyY2UgOgotPGE+Ci08Yj48L2I+PC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDRdICgKLSkKLVs0LCA3XSAoPGI+KQotWzcsIDExXSAoPC9iPikKLVsxMSwgMTVdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFsxMSwgMTVdICg8L2E+KQotLS0tLSN0ZXh0KFxuKUBbMywgNF0gKFxuKQotLS0tLWIvYkBbNCwgN10gKDxiPilAWzcsIDExXSAoPC9iPikKLQotU291cmNlIDoKLTxhPgotPGI+PC9iPgotPC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDRdICgKLSkKLVs0LCA3XSAoPGI+KQotWzcsIDExXSAoPC9iPikKLVsxMSwgMTJdICgKLSkKLVsxMiwgMTZdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFsxMiwgMTZdICg8L2E+KQotLS0tLSN0ZXh0KFxuKUBbMywgNF0gKFxuKQotLS0tLWIvYkBbNCwgN10gKDxiPilAWzcsIDExXSAoPC9iPikKLS0tLS0jdGV4dChcbilAWzExLCAxMl0gKFxuKQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0NC50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0NC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExMGQwMjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3Q0Ci1Tb3VyY2UgOgotPGE+YjwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCA0XSAoYikKLVs0LCA4XSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbNCwgOF0gKDwvYT4pCi0tLS0tI3RleHQoYilAWzMsIDRdIChiKQotCi1Tb3VyY2UgOgotPGE+YjwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCA0XSAoYikKLVs0LCA4XSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbNCwgOF0gKDwvYT4pCi0tLS0tI3RleHQoYilAWzMsIDRdIChiKQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0NS50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0NS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1ZTEzZWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDUudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3Q1Ci1Tb3VyY2UgOgotPGE+JmFwb3M7PC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDldICgmYXBvczspCi1bOSwgMTNdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFs5LCAxM10gKDwvYT4pCi0tLS0tI3RleHQoJylAWzMsIDldICgmYXBvczspCi0KLVNvdXJjZSA6Ci08YT4mYXBvczs8L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgOV0gKCZhcG9zOykKLVs5LCAxM10gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzksIDEzXSAoPC9hPikKLS0tLS0jdGV4dCgnKUBbMywgOV0gKCZhcG9zOykKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDYudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDYudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOWM0ZDdhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3Q2LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0NgotU291cmNlIDoKLTxhPmI8L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgNF0gKGIpCi1bNCwgOF0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzQsIDhdICg8L2E+KQotLS0tLSN0ZXh0KGIpQFszLCA0XSAoYikKLQotU291cmNlIDoKLTxhPjwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCA3XSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbMywgN10gKDwvYT4pCi0KLVNvdXJjZSA6Ci08YT5iPC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDRdIChiKQotWzQsIDhdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFs0LCA4XSAoPC9hPikKLS0tLS0jdGV4dChiKUBbMywgNF0gKGIpCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3Q3LnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3Q3LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGI0YTQ4Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0Ny50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDcKLVNvdXJjZSA6Ci08UD48Qj48L0I+PC9QPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPFA+KQotWzMsIDZdICg8Qj4pCi1bNiwgMTBdICg8L0I+KQotWzEwLCAxNF0gKDwvUD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLVAvUEBbMCwgM10gKDxQPilAWzEwLCAxNF0gKDwvUD4pCi0tLS0tQi9CQFszLCA2XSAoPEI+KUBbNiwgMTBdICg8L0I+KQotCi1Tb3VyY2UgOgotPFA+PEI+PC9CPjxCPjwvQj48L1A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8UD4pCi1bMywgNl0gKDxCPikKLVs2LCAxMF0gKDwvQj4pCi1bMTAsIDEzXSAoPEI+KQotWzEzLCAxN10gKDwvQj4pCi1bMTcsIDIxXSAoPC9QPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tUC9QQFswLCAzXSAoPFA+KUBbMTcsIDIxXSAoPC9QPikKLS0tLS1CL0JAWzMsIDZdICg8Qj4pQFs2LCAxMF0gKDwvQj4pCi0tLS0tQi9CQFsxMCwgMTNdICg8Qj4pQFsxMywgMTddICg8L0I+KQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0OC50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0OC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1ZjZlMzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDgudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3Q4Ci1Tb3VyY2UgOgotPFA+PC9QPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPFA+KQotWzMsIDddICg8L1A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1QL1BAWzAsIDNdICg8UD4pQFszLCA3XSAoPC9QPikKLQotU291cmNlIDoKLTxQPjwvUD48UD48L1A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8UD4pCi1bMywgN10gKDwvUD4pCi1bNywgMTBdICg8UD4pCi1bMTAsIDE0XSAoPC9QPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tUC9QQFswLCAzXSAoPFA+KUBbMywgN10gKDwvUD4pCi0tLVAvUEBbNywgMTBdICg8UD4pQFsxMCwgMTRdICg8L1A+KQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0OS50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0OS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhNGE4YWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDkudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3Q5Ci1Tb3VyY2UgOgotPHN0eWxlPjwvc3R5bGU+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDddICg8c3R5bGU+KQotWzcsIDE1XSAoPC9zdHlsZT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXN0eWxlL3N0eWxlQFswLCA3XSAoPHN0eWxlPilAWzcsIDE1XSAoPC9zdHlsZT4pCi0KLVNvdXJjZSA6Ci08c3R5bGU+cDwvc3R5bGU+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDddICg8c3R5bGU+KQotWzcsIDhdIChwKQotWzgsIDE2XSAoPC9zdHlsZT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXN0eWxlL3N0eWxlQFswLCA3XSAoPHN0eWxlPilAWzgsIDE2XSAoPC9zdHlsZT4pCi0tLS0tI3RleHQocClAWzcsIDhdIChwKQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL2FOb3RlT25QYXJzZXJSZXN1bHRzRGlyZWN0b3JpZXMudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9hTm90ZU9uUGFyc2VyUmVzdWx0c0RpcmVjdG9yaWVzLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGUyNDE4OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL2FOb3RlT25QYXJzZXJSZXN1bHRzRGlyZWN0b3JpZXMudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotVGhlc2Ugbm90ZXMgcGVydGFpbiB0byB0aGUgdjIwMDQxMjEwXzIzMDAgdmVyc2lvbiAKLWluIENWUyByZXBvc2l0b3J5LiAKLQotTm90ZSwgdGhlICIwNS0yNCIgZGlyZWN0b3J5ICpzaG91bGQqIG1hdGNoCi10aGUgcGFyc2VyIHJlc3VsdHMgZnJvbSBwYXJzZXIgb2Ygc2FtZSBkYXRlLCAKLSpidXQqIGFmdGVyIHRyYW5zaXRpb24gdG8gb3JnLmVjbGlwc2UsIGl0IHNlZW1zIAotdGhlIGNhc2Ugb2YgdGFncyBpcyBkaWZmZXJlbnQuIE9kZGx5LCBzZWVtcyAKLWxpa2UgdGhlIGN1cnJlbnQgdHJlYXRlbWVudCBvZiBjYXNlIGlzIGNvcnJlY3QsIAotc28gLi4uIDEyLTEwIHBhcnNlciByZXN1bHRzIHNob3VsZCBiZSB1c2VkIGFzIAotcmVmZXJlbmNlLCB1bmxlc3Mgc29tZSBuZXcgaW5zaWdodCBpcyBnYWluZWQuIAotSXQgZG9lcyBtYXRjaCBwcmV2aW91cyB2ZXJzaW9uIGV4Y2VwdCBmb3IgY2FzZS4gCi0oQW5kLCB0aGUgcHJldmlvdXMgdmVyc2lvbiB3YXMgY2hhbmdlZCAiYnkgaGFuZCIgCi10byBhY2NvbWlkYXRlIHRoZSB0cmFuc2l0aW9uIHRvIG9yZy5lY2xpcHNlKS4gCi0KLVRPRE86IHRoaXMgZmlsZSwgYW5kIDA1LTI0IHJlZmVyZW5jZSBkaXJlY3RvcnkKLWNhbiBiZSBkZWxldGVkIGFyb3VuZCBNMywgb25jZSB3aG9sZSB0ZWFtIGhhcyAKLXJldmlld2VkIGFuZCBjb25maWRlbnQgMTItMTAgdmVyc2lvbiBpcyBjb3JyZWN0Ci1yZWZlcmVuY2UuIApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvYWJvdXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE5OWRmMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGQ0MDRjMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1zb3VyY2UuaHRtbGNvcmV0ZXN0cy5qYXIgPSBzcmMvCi1vdXRwdXQuaHRtbGNvcmV0ZXN0cy5qYXIgPSBiaW4vCi1iaW4uaW5jbHVkZXMgPSBodG1sY29yZXRlc3RzLmphcixcCi0gICAgICAgICAgICAgICB0ZXN0LnhtbCxcCi0gICAgICAgICAgICAgICBQYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny8sXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMzVkNDIxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIHByb3BlcnRpZXMgZmlsZSBmb3Igb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cwotQnVuZGxlLVZlbmRvci4wID0gRWNsaXBzZS5vcmcKLUJ1bmRsZS1OYW1lLjAgPSBIVE1MIENvcmUgVGVzdHMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL0hUTUxDb3JlVGVzdFN1aXRlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL0hUTUxDb3JlVGVzdFN1aXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4ODMwMDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9IVE1MQ29yZVRlc3RTdWl0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMuZm9ybWF0LlRlc3RGb3JtYXRQcm9jZXNzb3JIVE1MOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMubWlzYy5IVE1MQ29yZVByZWZlcmVuY2VzVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLm1pc2MuSFRNTFRhZ0luZm9UZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMubW9kZWwuQlVHMTI0ODM1U2V0U3R5bGVBdHRyaWJ1dGVWYWx1ZVRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5tb2RlbC5HZXRPdmVycmlkZVN0eWxlVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLm1vZGVsLk1vZGVsTW9kaWZpY2F0aW9uczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLm1vZGVsLlRlc3RDYXRhbG9nQ29udGVudE1vZGVsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLm1vZGVsLlRlc3RGb3JOUEVJbkNTU0NyZWF0aW9uOwotCi0KLQotcHVibGljIGNsYXNzIEhUTUxDb3JlVGVzdFN1aXRlIGV4dGVuZHMgVGVzdFN1aXRlIHsKLQotCS8qKgotCSAqIHRvIGdldCBwaWNrZWQgdXAgYnkgQlZUCi0JICogCi0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBIVE1MQ29yZVRlc3RTdWl0ZSgpOwotCX0KLQotCXB1YmxpYyBIVE1MQ29yZVRlc3RTdWl0ZSgpIHsKLQkJc3VwZXIoIkhUTUwgQ29yZSBUZXN0U3VpdGUiKTsKLQotCQlhZGRUZXN0KE1vZGVsUGFyc2VyVGVzdHMuc3VpdGUoKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShIVE1MQ29yZVByZWZlcmVuY2VzVGVzdC5jbGFzcykpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoSFRNTFRhZ0luZm9UZXN0LmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShNb2RlbE1vZGlmaWNhdGlvbnMuY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RGb3JOUEVJbkNTU0NyZWF0aW9uLmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShHZXRPdmVycmlkZVN0eWxlVGVzdC5jbGFzcykpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoQlVHMTI0ODM1U2V0U3R5bGVBdHRyaWJ1dGVWYWx1ZVRlc3QuY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RGb3JtYXRQcm9jZXNzb3JIVE1MLmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0Q2F0YWxvZ0NvbnRlbnRNb2RlbHMuY2xhc3MpKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9IVE1MQ29yZVRlc3RzUGx1Z2luLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL0hUTUxDb3JlVGVzdHNQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjM3YzAwNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL0hUTUxDb3JlVGVzdHNQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0czsKLQotaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLQotLyoqCi0gKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSAqLwotcHVibGljIGNsYXNzIEhUTUxDb3JlVGVzdHNQbHVnaW4gZXh0ZW5kcyBQbHVnaW4gewotCS8vVGhlIHNoYXJlZCBpbnN0YW5jZS4KLQlwcml2YXRlIHN0YXRpYyBIVE1MQ29yZVRlc3RzUGx1Z2luIHBsdWdpbjsKLQkvL1Jlc291cmNlIGJ1bmRsZS4KLQlwcml2YXRlIFJlc291cmNlQnVuZGxlIHJlc291cmNlQnVuZGxlOwotCi0JLyoqCi0JICogVGhlIGNvbnN0cnVjdG9yLgotCSAqLwotCXB1YmxpYyBIVE1MQ29yZVRlc3RzUGx1Z2luKCkgewotCQlzdXBlcigpOwotCQlwbHVnaW4gPSB0aGlzOwotCQl0cnkgewotCQkJcmVzb3VyY2VCdW5kbGUgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoIm9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMuU1NFTW9kZWxIVE1MVGVzdHNQbHVnaW5SZXNvdXJjZXMiKTsKLQkJfQotCQljYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIHgpIHsKLQkJCXJlc291cmNlQnVuZGxlID0gbnVsbDsKLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIEhUTUxDb3JlVGVzdHNQbHVnaW4gZ2V0RGVmYXVsdCgpIHsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzdHJpbmcgZnJvbSB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLAotCSAqIG9yICdrZXknIGlmIG5vdCBmb3VuZC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRSZXNvdXJjZVN0cmluZyhTdHJpbmcga2V5KSB7Ci0JCVJlc291cmNlQnVuZGxlIGJ1bmRsZSA9IEhUTUxDb3JlVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFJlc291cmNlQnVuZGxlKCk7Ci0JCXRyeSB7Ci0JCQlyZXR1cm4gKGJ1bmRsZSAhPSBudWxsKSA/IGJ1bmRsZS5nZXRTdHJpbmcoa2V5KSA6IGtleTsKLQkJfQotCQljYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKLQkJCXJldHVybiBrZXk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBwbHVnaW4ncyByZXNvdXJjZSBidW5kbGUsCi0JICovCi0JcHVibGljIFJlc291cmNlQnVuZGxlIGdldFJlc291cmNlQnVuZGxlKCkgewotCQlyZXR1cm4gcmVzb3VyY2VCdW5kbGU7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvTG9nZ2VyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL0xvZ2dlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTQyMzk1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvTG9nZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBjb20uaWJtLmljdS51dGlsLlN0cmluZ1Rva2VuaXplcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci0KLS8qKgotICogU21hbGwgY29udmVuaWVuY2UgY2xhc3MgdG8gbG9nIG1lc3NhZ2VzIHRvIHBsdWdpbidzIGxvZyBmaWxlIGFuZCBhbHNvLCBpZiBkZXNpcmVkLAotICogdGhlIGNvbnNvbGUuIFRoaXMgY2xhc3Mgc2hvdWxkIG9ubHkgYmUgdXNlZCBieSBjbGFzc2VzIGluIHRoaXMgcGx1Z2luLiBPdGhlcgotICogcGx1Z2lucyBzaG91bGQgbWFrZSB0aGVpciBvd24gY29weSwgd2l0aCBhcHByb3ByaWF0ZSBJRC4KLSAqLwotcHVibGljIGNsYXNzIExvZ2dlciB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzIjsgLy8kTk9OLU5MUy0xJAotCQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUUkFDRUZJTFRFUl9MT0NBVElPTiA9ICIvZGVidWcvdHJhY2VmaWx0ZXIiOyAvLyROT04tTkxTLTEkCi0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPSyA9IElTdGF0dXMuT0s7IC8vIDAKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTkZPID0gSVN0YXR1cy5JTkZPOyAvLyAxCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV0FSTklORyA9IElTdGF0dXMuV0FSTklORzsgLy8gMgotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SID0gSVN0YXR1cy5FUlJPUjsgLy8gNAotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT0tfREVCVUcgPSAyMDAgKyBPSzsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTkZPX0RFQlVHID0gMjAwICsgSU5GTzsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXQVJOSU5HX0RFQlVHID0gMjAwICsgV0FSTklORzsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFUlJPUl9ERUJVRyA9IDIwMCArIEVSUk9SOwotCi0JLyoqCi0JICogQWRkcyBtZXNzYWdlIHRvIGxvZy4KLQkgKiBAcGFyYW0gbGV2ZWwgc2V2ZXJpdHkgbGV2ZWwgb2YgdGhlIG1lc3NhZ2UgKE9LLCBJTkZPLCBXQVJOSU5HLCBFUlJPUiwgT0tfREVCVUcsIElORk9fREVCVUcsIFdBUk5JTkdfREVCVUcsIEVSUk9SX0RFQlVHKQotCSAqIEBwYXJhbSBtZXNzYWdlIHRleHQgdG8gYWRkIHRvIHRoZSBsb2cKLQkgKiBAcGFyYW0gZXhjZXB0aW9uIGV4Y2VwdGlvbiB0aHJvd24KLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIHZvaWQgX2xvZyhpbnQgbGV2ZWwsIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCWlmIChsZXZlbCA9PSBPS19ERUJVRyB8fCBsZXZlbCA9PSBJTkZPX0RFQlVHIHx8IGxldmVsID09IFdBUk5JTkdfREVCVUcgfHwgbGV2ZWwgPT0gRVJST1JfREVCVUcpIHsKLQkJCWlmICghaXNEZWJ1Z2dpbmcoKSkKLQkJCQlyZXR1cm47Ci0JCX0KLQotCQlpbnQgc2V2ZXJpdHkgPSBJU3RhdHVzLk9LOwotCQlzd2l0Y2ggKGxldmVsKSB7Ci0JCQljYXNlIElORk9fREVCVUcgOgotCQkJY2FzZSBJTkZPIDoKLQkJCQlzZXZlcml0eSA9IElTdGF0dXMuSU5GTzsKLQkJCQlicmVhazsKLQkJCWNhc2UgV0FSTklOR19ERUJVRyA6Ci0JCQljYXNlIFdBUk5JTkcgOgotCQkJCXNldmVyaXR5ID0gSVN0YXR1cy5XQVJOSU5HOwotCQkJCWJyZWFrOwotCQkJY2FzZSBFUlJPUl9ERUJVRyA6Ci0JCQljYXNlIEVSUk9SIDoKLQkJCQlzZXZlcml0eSA9IElTdGF0dXMuRVJST1I7Ci0JCX0KLQkJbWVzc2FnZSA9IChtZXNzYWdlICE9IG51bGwpID8gbWVzc2FnZSA6ICJudWxsIjsgLy8kTk9OLU5MUy0xJAotCQlTdGF0dXMgc3RhdHVzT2JqID0gbmV3IFN0YXR1cyhzZXZlcml0eSwgUExVR0lOX0lELCBzZXZlcml0eSwgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShQTFVHSU5fSUQpOwotCQlpZiAoYnVuZGxlICE9IG51bGwpIAotCQkJUGxhdGZvcm0uZ2V0TG9nKGJ1bmRsZSkubG9nKHN0YXR1c09iaik7Ci0JfQotCi0JLyoqCi0JICogUHJpbnRzIG1lc3NhZ2UgdG8gbG9nIGlmIGNhdGVnb3J5IG1hdGNoZXMgL2RlYnVnL3RyYWNlZmlsdGVyIG9wdGlvbi4KLQkgKiBAcGFyYW0gbWVzc2FnZSB0ZXh0IHRvIHByaW50Ci0JICogQHBhcmFtIGNhdGVnb3J5IGNhdGVnb3J5IG9mIHRoZSBtZXNzYWdlLCB0byBiZSBjb21wYXJlZCB3aXRoIC9kZWJ1Zy90cmFjZWZpbHRlcgotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgdm9pZCBfdHJhY2UoU3RyaW5nIGNhdGVnb3J5LCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlpZiAoaXNUcmFjaW5nKGNhdGVnb3J5KSkgewotCQkJbWVzc2FnZSA9IChtZXNzYWdlICE9IG51bGwpID8gbWVzc2FnZSA6ICJudWxsIjsgLy8kTk9OLU5MUy0xJAotCQkJU3RhdHVzIHN0YXR1c09iaiA9IG5ldyBTdGF0dXMoSVN0YXR1cy5PSywgUExVR0lOX0lELCBJU3RhdHVzLk9LLCBtZXNzYWdlLCBleGNlcHRpb24pOwotCQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShQTFVHSU5fSUQpOwotCQkJaWYgKGJ1bmRsZSAhPSBudWxsKSAKLQkJCQlQbGF0Zm9ybS5nZXRMb2coYnVuZGxlKS5sb2coc3RhdHVzT2JqKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgcGxhdGZvcm0gaXMgZGVidWdnaW5nCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzRGVidWdnaW5nKCkgewotCQlyZXR1cm4gUGxhdGZvcm0uaW5EZWJ1Z01vZGUoKTsKLQl9Ci0KLQkvKioKLQkgKiBEZXRlcm1pbmVzIGlmIGN1cnJlbnRseSB0cmFjaW5nIGEgY2F0ZWdvcnkKLQkgKiBAcGFyYW0gY2F0ZWdvcnkKLQkgKiBAcmV0dXJuIHRydWUgaWYgdHJhY2luZyBjYXRlZ29yeSwgZmFsc2Ugb3RoZXJ3aXNlCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzVHJhY2luZyhTdHJpbmcgY2F0ZWdvcnkpIHsKLQkJaWYgKCFpc0RlYnVnZ2luZygpKQotCQkJcmV0dXJuIGZhbHNlOwotCi0JCVN0cmluZyB0cmFjZUZpbHRlciA9IFBsYXRmb3JtLmdldERlYnVnT3B0aW9uKFBMVUdJTl9JRCArIFRSQUNFRklMVEVSX0xPQ0FUSU9OKTsKLQkJaWYgKHRyYWNlRmlsdGVyICE9IG51bGwpIHsKLQkJCVN0cmluZ1Rva2VuaXplciB0b2tlbml6ZXIgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHRyYWNlRmlsdGVyLCAiLCIpOyAvLyROT04tTkxTLTEkCi0JCQl3aGlsZSAodG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSkgewotCQkJCVN0cmluZyBjYXQgPSB0b2tlbml6ZXIubmV4dFRva2VuKCkudHJpbSgpOwotCQkJCWlmIChjYXRlZ29yeS5lcXVhbHMoY2F0KSkgewotCQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2coaW50IGxldmVsLCBTdHJpbmcgbWVzc2FnZSkgewotCQlfbG9nKGxldmVsLCBtZXNzYWdlLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nKGludCBsZXZlbCwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX2xvZyhsZXZlbCwgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nRXhjZXB0aW9uKFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV9sb2coRVJST1IsIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZ0V4Y2VwdGlvbihUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV9sb2coRVJST1IsIGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCksIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHRyYWNlRXhjZXB0aW9uKFN0cmluZyBjYXRlZ29yeSwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX3RyYWNlKGNhdGVnb3J5LCBtZXNzYWdlLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCB0cmFjZUV4Y2VwdGlvbihTdHJpbmcgY2F0ZWdvcnksIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX3RyYWNlKGNhdGVnb3J5LCBleGNlcHRpb24uZ2V0TWVzc2FnZSgpLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCB0cmFjZShTdHJpbmcgY2F0ZWdvcnksIFN0cmluZyBtZXNzYWdlKSB7Ci0JCV90cmFjZShjYXRlZ29yeSwgbWVzc2FnZSwgbnVsbCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9Nb2RlbFBhcnNlclRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL01vZGVsUGFyc2VyVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjM5YjZkMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL01vZGVsUGFyc2VyVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5BdHRyVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5BdHRyVGVzdDI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuQ0RBVEFTZWN0aW9uVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5DREFUQVNlY3Rpb25UZXN0MjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5DREFUQVNlY3Rpb25UZXN0MzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5Eb2NUeXBlVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbGVtZW50VGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbGVtZW50VGVzdDI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRWxlbWVudFRlc3QzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVtcHR5VGV4dFRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW1wdHlUZXh0VGVzdDI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW1wdHlUZXh0VGVzdDM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW50aXR5VGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0MjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0MzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0NDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0NTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0NjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0NzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0ODsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0OTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5QSVRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuUGFyc2VyVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5QYXJzZXJUZXN0MjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5QYXJzZXJUZXN0MzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5QYXJzZXJUZXN0NDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5TcGxpdFRleHRUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3QyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3QzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3Q0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3Q1OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3Q2OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3Q3OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3Q4OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlRhYmxlVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5UZXh0VGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5UZXh0VGVzdDI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVGV4dFRlc3QzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0MTA7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QxMTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDEyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0MTM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QxNDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0NDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3Q2OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0NzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDg7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3Q5OwotCi0KLQotcHVibGljIGNsYXNzIE1vZGVsUGFyc2VyVGVzdHMgZXh0ZW5kcyBUZXN0U3VpdGUgewotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBNb2RlbFBhcnNlclRlc3RzKCk7Ci0JfQotCi0JcHVibGljIE1vZGVsUGFyc2VyVGVzdHMoKSB7Ci0JCXN1cGVyKCJNb2RlbFBhcnNlclRlc3RzIik7Ci0KLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFBhcnNlclRlc3QuY2xhc3MsICJQYXJzZXJUZXN0IikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoUGFyc2VyVGVzdDIuY2xhc3MsICJQYXJzZXJUZXN0MiIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFBhcnNlclRlc3QzLmNsYXNzLCAiUGFyc2VyVGVzdDMiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShQYXJzZXJUZXN0NC5jbGFzcywgIlBhcnNlclRlc3Q0IikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVXBkYXRlclRlc3QuY2xhc3MsICJVcGRhdGVyVGVzdCIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFVwZGF0ZXJUZXN0Mi5jbGFzcywgIlVwZGF0ZXJUZXN0MiIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFVwZGF0ZXJUZXN0My5jbGFzcywgIlVwZGF0ZXJUZXN0MyIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFVwZGF0ZXJUZXN0NC5jbGFzcywgIlVwZGF0ZXJUZXN0NCIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFVwZGF0ZXJUZXN0NS5jbGFzcywgIlVwZGF0ZXJUZXN0NSIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFVwZGF0ZXJUZXN0Ni5jbGFzcywgIlVwZGF0ZXJUZXN0NiIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFVwZGF0ZXJUZXN0Ny5jbGFzcywgIlVwZGF0ZXJUZXN0NyIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFVwZGF0ZXJUZXN0OC5jbGFzcywgIlVwZGF0ZXJUZXN0OCIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFVwZGF0ZXJUZXN0OS5jbGFzcywgIlVwZGF0ZXJUZXN0OSIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFVwZGF0ZXJUZXN0MTAuY2xhc3MsICJVcGRhdGVyVGVzdDEwIikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVXBkYXRlclRlc3QxMS5jbGFzcywgIlVwZGF0ZXJUZXN0MTEiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShVcGRhdGVyVGVzdDEyLmNsYXNzLCAiVXBkYXRlclRlc3QxMiIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFVwZGF0ZXJUZXN0MTMuY2xhc3MsICJVcGRhdGVyVGVzdDEzIikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVXBkYXRlclRlc3QxNC5jbGFzcywgIlVwZGF0ZXJUZXN0MTQiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShFbGVtZW50VGVzdC5jbGFzcywgIkVsZW1lbnRUZXN0IikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoRWxlbWVudFRlc3QyLmNsYXNzLCAiRWxlbWVudFRlc3QyIikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoRWxlbWVudFRlc3QzLmNsYXNzLCAiRWxlbWVudFRlc3QzIikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGFibGVUZXN0LmNsYXNzLCAiVGFibGVUZXN0IikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGV4dFRlc3QuY2xhc3MsICJUZXh0VGVzdCIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRleHRUZXN0Mi5jbGFzcywgIlRleHRUZXN0MiIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRleHRUZXN0My5jbGFzcywgIlRleHRUZXN0MyIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFNwbGl0VGV4dFRlc3QuY2xhc3MsICJTcGxpdFRleHRUZXN0IikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoU3BsaXRUZXh0VGVzdDIuY2xhc3MsICJTcGxpdFRleHRUZXN0MiIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFNwbGl0VGV4dFRlc3QzLmNsYXNzLCAiU3BsaXRUZXh0VGVzdDMiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShTcGxpdFRleHRUZXN0NC5jbGFzcywgIlNwbGl0VGV4dFRlc3Q0IikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoU3BsaXRUZXh0VGVzdDUuY2xhc3MsICJTcGxpdFRleHRUZXN0NSIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFNwbGl0VGV4dFRlc3Q2LmNsYXNzLCAiU3BsaXRUZXh0VGVzdDYiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShTcGxpdFRleHRUZXN0Ny5jbGFzcywgIlNwbGl0VGV4dFRlc3Q3IikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoU3BsaXRUZXh0VGVzdDguY2xhc3MsICJTcGxpdFRleHRUZXN0OCIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEVtcHR5VGV4dFRlc3QuY2xhc3MsICJFbXB0eVRleHRUZXN0IikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoRW1wdHlUZXh0VGVzdDIuY2xhc3MsICJFbXB0eVRleHRUZXN0MiIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEVtcHR5VGV4dFRlc3QzLmNsYXNzLCAiRW1wdHlUZXh0VGVzdDMiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShBdHRyVGVzdC5jbGFzcywgIkF0dHJUZXN0IikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoQXR0clRlc3QyLmNsYXNzLCAiQXR0clRlc3QyIikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoRW50aXR5VGVzdC5jbGFzcywgIkVudGl0eVRlc3QiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShFbnRpdHlUZXN0Mi5jbGFzcywgIkVudGl0eVRlc3QyIikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoRW50aXR5VGVzdDMuY2xhc3MsICJFbnRpdHlUZXN0MyIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEVudGl0eVRlc3Q0LmNsYXNzLCAiRW50aXR5VGVzdDQiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShFbnRpdHlUZXN0NS5jbGFzcywgIkVudGl0eVRlc3Q1IikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoRW50aXR5VGVzdDYuY2xhc3MsICJFbnRpdHlUZXN0NiIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEVudGl0eVRlc3Q3LmNsYXNzLCAiRW50aXR5VGVzdDciKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShFbnRpdHlUZXN0OC5jbGFzcywgIkVudGl0eVRlc3Q4IikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoRW50aXR5VGVzdDkuY2xhc3MsICJFbnRpdHlUZXN0OSIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKERvY1R5cGVUZXN0LmNsYXNzLCAiRG9jVHlwZVRlc3QiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShDREFUQVNlY3Rpb25UZXN0LmNsYXNzLCAiQ0RBVEFTZWN0aW9uVGVzdCIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKENEQVRBU2VjdGlvblRlc3QyLmNsYXNzLCAiQ0RBVEFTZWN0aW9uVGVzdDIiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShDREFUQVNlY3Rpb25UZXN0My5jbGFzcywgIkNEQVRBU2VjdGlvblRlc3QzIikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoUElUZXN0LmNsYXNzLCAiUElUZXN0IikpOwotCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9mb3JtYXQvVGVzdEZvcm1hdFByb2Nlc3NvckhUTUwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvZm9ybWF0L1Rlc3RGb3JtYXRQcm9jZXNzb3JIVE1MLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkYWQ4ZTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9mb3JtYXQvVGVzdEZvcm1hdFByb2Nlc3NvckhUTUwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA3IEVjbGlwc2UgRm91bmRhdGlvbgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIEplc3BlciBTdGVlbiBN+GxsZXIgLSBqZXNwZXJAc2Vsc2thYmV0Lm9yZwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMuZm9ybWF0OwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklDb250YWluZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5pbnRlcm5hbC5mb3JtYXQuSFRNTEZvcm1hdFByb2Nlc3NvckltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy51dGlscy5TdHJpbmdDb21wYXJlVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZm9ybWF0LkFic3RyYWN0U3RydWN0dXJlZEZvcm1hdFByb2Nlc3NvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZm9ybWF0LklTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnV0aWwuVVJJUmVzb2x2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmZvcm1hdC5TdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXNYTUw7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0Rm9ybWF0UHJvY2Vzc29ySFRNTCBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gU1BMSVRfTVVMVElfQVRUUlMgPSBmYWxzZTsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBJTkRFTlQgPSAiXHQiOwotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBDTEVBUl9BTExfQkxBTktfTElORVMgPSBmYWxzZTsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNQVhfTElORV9XSURUSCA9IDcyOwotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFVURl84ID0gIlVURi04IjsKLQotCXByaXZhdGUgU3RyaW5nQ29tcGFyZVV0aWwgZlN0cmluZ0NvbXBhcmVVdGlsOwotCi0JcHVibGljIFRlc3RGb3JtYXRQcm9jZXNzb3JIVE1MKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXByaXZhdGUgSFRNTEZvcm1hdFByb2Nlc3NvckltcGwgZm9ybWF0UHJvY2Vzc29yOwotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZm9ybWF0UHJvY2Vzc29yID0gbmV3IEhUTUxGb3JtYXRQcm9jZXNzb3JJbXBsKCk7Ci0JCWZTdHJpbmdDb21wYXJlVXRpbCA9IG5ldyBTdHJpbmdDb21wYXJlVXRpbCgpOwotCX0KLQotCS8qKgotCSAqIG11c3QgcmVsZWFzZSBtb2RlbCAoZnJvbSBlZGl0KSBhZnRlcgotCSAqIAotCSAqIEBwYXJhbSBmaWxlbmFtZQotCSAqICAgICAgICAgICAgcmVsYXRpdmUgdG8gdGhpcyBjbGFzcyAoVGVzdFN0cnVjdHVyZWRQYXJ0aXRpb25lcikKLQkgKi8KLQlwcml2YXRlIElTdHJ1Y3R1cmVkTW9kZWwgZ2V0TW9kZWxGb3JFZGl0KGZpbmFsIFN0cmluZyBmaWxlbmFtZSkgewotCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQkJSW5wdXRTdHJlYW0gaW5TdHJlYW0gPSBnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0oZmlsZW5hbWUpOwotCQkJaWYgKGluU3RyZWFtID09IG51bGwpCi0JCQkJdGhyb3cgbmV3IEZpbGVOb3RGb3VuZEV4Y2VwdGlvbigiQ2FuJ3QgZmlsZSByZXNvdXJjZSBzdHJlYW0gIiArIGZpbGVuYW1lKTsKLQkJCWZpbmFsIFN0cmluZyBiYXNlRmlsZSA9IGdldENsYXNzKCkuZ2V0UmVzb3VyY2UoZmlsZW5hbWUpLnRvU3RyaW5nKCk7Ci0JCQltb2RlbCA9IG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvckVkaXQoYmFzZUZpbGUsIGluU3RyZWFtLCBuZXcgVVJJUmVzb2x2ZXIoKSB7Ci0KLQkJCQlTdHJpbmcgZkJhc2UgPSBiYXNlRmlsZTsKLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0RmlsZUJhc2VMb2NhdGlvbigpIHsKLQkJCQkJcmV0dXJuIGZCYXNlOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0TG9jYXRpb25CeVVSSShTdHJpbmcgdXJpKSB7Ci0JCQkJCXJldHVybiBnZXRMb2NhdGlvbkJ5VVJJKHVyaSwgZkJhc2UpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0TG9jYXRpb25CeVVSSShTdHJpbmcgdXJpLCBib29sZWFuIHJlc29sdmVDcm9zc1Byb2plY3RMaW5rcykgewotCQkJCQlyZXR1cm4gZ2V0TG9jYXRpb25CeVVSSSh1cmkpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0TG9jYXRpb25CeVVSSShTdHJpbmcgdXJpLCBTdHJpbmcgYmFzZVJlZmVyZW5jZSkgewotCQkJCQlpbnQgbGFzdFNsYXNoID0gYmFzZVJlZmVyZW5jZS5sYXN0SW5kZXhPZigiLyIpOwotCQkJCQlpZiAobGFzdFNsYXNoID4gMCkKLQkJCQkJCXJldHVybiBiYXNlUmVmZXJlbmNlLnN1YnN0cmluZygwLCBsYXN0U2xhc2ggKyAxKSArIHVyaTsKLQkJCQkJcmV0dXJuIGJhc2VSZWZlcmVuY2U7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRMb2NhdGlvbkJ5VVJJKFN0cmluZyB1cmksIFN0cmluZyBiYXNlUmVmZXJlbmNlLCBib29sZWFuIHJlc29sdmVDcm9zc1Byb2plY3RMaW5rcykgewotCQkJCQlyZXR1cm4gZ2V0TG9jYXRpb25CeVVSSSh1cmksIGJhc2VSZWZlcmVuY2UpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBJUHJvamVjdCBnZXRQcm9qZWN0KCkgewotCQkJCQlyZXR1cm4gbnVsbDsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgSUNvbnRhaW5lciBnZXRSb290TG9jYXRpb24oKSB7Ci0JCQkJCXJldHVybiBudWxsOwotCQkJCX0KLQotCQkJCXB1YmxpYyBJbnB1dFN0cmVhbSBnZXRVUklTdHJlYW0oU3RyaW5nIHVyaSkgewotCQkJCQlyZXR1cm4gZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKGdldExvY2F0aW9uQnlVUkkodXJpKSk7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgc2V0RmlsZUJhc2VMb2NhdGlvbihTdHJpbmcgbmV3TG9jYXRpb24pIHsKLQkJCQkJdGhpcy5mQmFzZSA9IG5ld0xvY2F0aW9uOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHNldFByb2plY3QoSVByb2plY3QgbmV3UHJvamVjdCkgewotCQkJCX0KLQkJCX0pOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBleCkgewotCQkJZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJcmV0dXJuIG1vZGVsOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGZvcm1hdEFuZEFzc2VydEVxdWFscyhTdHJpbmcgYmVmb3JlUGF0aCwgU3RyaW5nIGFmdGVyUGF0aCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKGJlZm9yZVBhdGgsIGFmdGVyUGF0aCwgdHJ1ZSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGZvcm1hdEFuZEFzc2VydEVxdWFscyhTdHJpbmcgYmVmb3JlUGF0aCwgU3RyaW5nIGFmdGVyUGF0aCwgYm9vbGVhbiByZXNldFByZWZlcmVuY2VzKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIGJlZm9yZU1vZGVsID0gbnVsbCwgYWZ0ZXJNb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQliZWZvcmVNb2RlbCA9IGdldE1vZGVsRm9yRWRpdChiZWZvcmVQYXRoKTsKLQkJCWFzc2VydE5vdE51bGwoImNvdWxkIG5vdCByZXRyaWV2ZSBzdHJ1Y3R1cmVkIG1vZGVsIGZvciA6ICIgKyBiZWZvcmVQYXRoLCBiZWZvcmVNb2RlbCk7Ci0KLQkJCWFmdGVyTW9kZWwgPSBnZXRNb2RlbEZvckVkaXQoYWZ0ZXJQYXRoKTsKLQkJCWFzc2VydE5vdE51bGwoImNvdWxkIG5vdCByZXRyaWV2ZSBzdHJ1Y3R1cmVkIG1vZGVsIGZvciA6ICIgKyBhZnRlclBhdGgsIGFmdGVyTW9kZWwpOwotCi0JCQlpZiAocmVzZXRQcmVmZXJlbmNlcykKLQkJCQlyZXNldFByZWZlcmVuY2VzVG9EZWZhdWx0KCk7Ci0KLQkJCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkRm9ybWF0UHJvY2Vzc29yKSBmb3JtYXRQcm9jZXNzb3IpLnJlZnJlc2hGb3JtYXRQcmVmZXJlbmNlcyA9IGZhbHNlOwotCQkJZm9ybWF0UHJvY2Vzc29yLmZvcm1hdE1vZGVsKGJlZm9yZU1vZGVsKTsKLQkJCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkRm9ybWF0UHJvY2Vzc29yKSBmb3JtYXRQcm9jZXNzb3IpLnJlZnJlc2hGb3JtYXRQcmVmZXJlbmNlcyA9IHRydWU7Ci0KLQkJCUJ5dGVBcnJheU91dHB1dFN0cmVhbSBmb3JtYXR0ZWRCeXRlcyA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKLQkJCWJlZm9yZU1vZGVsLnNhdmUoZm9ybWF0dGVkQnl0ZXMpOyAvLyAiYmVmb3JlTW9kZWwiIHNob3VsZCBub3cgYmUKLQkJCS8vIGFmdGVyIHRoZSBmb3JtYXR0ZXIKLQotCQkJQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGFmdGVyQnl0ZXMgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7Ci0JCQlhZnRlck1vZGVsLnNhdmUoYWZ0ZXJCeXRlcyk7Ci0KLQkJCVN0cmluZyBleHBlY3RlZENvbnRlbnRzID0gbmV3IFN0cmluZyhhZnRlckJ5dGVzLnRvQnl0ZUFycmF5KCksIFVURl84KTsKLQkJCVN0cmluZyBhY3R1YWxDb250ZW50cyA9IG5ldyBTdHJpbmcoZm9ybWF0dGVkQnl0ZXMudG9CeXRlQXJyYXkoKSwgVVRGXzgpOwotCQkJYXNzZXJ0VHJ1ZSgiRm9ybWF0dGVkIGRvY3VtZW50IGRpZmZlcnMgZnJvbSB0aGUgZXhwZWN0ZWQuXG5FeHBlY3RlZCBDb250ZW50czpcbiIgKyBleHBlY3RlZENvbnRlbnRzICsgIlxuQWN0dWFsIENvbnRlbnRzOlxuIiArIGFjdHVhbENvbnRlbnRzLCBmU3RyaW5nQ29tcGFyZVV0aWwuZXF1YWxzSWdub3JlTGluZVNlcGVyYXRvcihleHBlY3RlZENvbnRlbnRzLCBhY3R1YWxDb250ZW50cykpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKGJlZm9yZU1vZGVsICE9IG51bGwpCi0JCQkJYmVmb3JlTW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQlpZiAoYWZ0ZXJNb2RlbCAhPSBudWxsKQotCQkJCWFmdGVyTW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgcmVzZXRQcmVmZXJlbmNlc1RvRGVmYXVsdCgpIHsKLQkJSVN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlcyBmb3JtYXRQcmVmZXJlbmNlcyA9IGZvcm1hdFByb2Nlc3Nvci5nZXRGb3JtYXRQcmVmZXJlbmNlcygpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRMaW5lV2lkdGgoTUFYX0xJTkVfV0lEVEgpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRDbGVhckFsbEJsYW5rTGluZXMoQ0xFQVJfQUxMX0JMQU5LX0xJTkVTKTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0SW5kZW50KElOREVOVCk7Ci0JCSgoU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzWE1MKSBmb3JtYXRQcmVmZXJlbmNlcykuc2V0U3BsaXRNdWx0aUF0dHJzKFNQTElUX01VTFRJX0FUVFJTKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0VGFibGVGb3JtYXQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy9odG1sL3RhYmxlZm9ybWF0Lmh0bWwiLCAidGVzdGZpbGVzL2h0bWwvdGFibGVmb3JtYXQtZm10Lmh0bWwiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RW1iZWRkZWRDU1NGb3JtYXQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQkvLyBCVUc5Mjk1NwotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy9odG1sL2h0bWx3aXRoY3NzLmh0bWwiLCAidGVzdGZpbGVzL2h0bWwvaHRtbHdpdGhjc3MtZm10Lmh0bWwiKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEF0dHJpYnV0ZUZvcm1hdCgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCS8vIEJVRzExMzU4NAotCQlJU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzIGZvcm1hdFByZWZlcmVuY2VzID0gZm9ybWF0UHJvY2Vzc29yLmdldEZvcm1hdFByZWZlcmVuY2VzKCk7Ci0JCSgoU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzWE1MKSBmb3JtYXRQcmVmZXJlbmNlcykuc2V0U3BsaXRNdWx0aUF0dHJzKHRydWUpOwotCQkoKFN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlc1hNTCkgZm9ybWF0UHJlZmVyZW5jZXMpLnNldEFsaWduRW5kQnJhY2tldCh0cnVlKTsKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0ZmlsZXMvaHRtbC9hdHRyaWJ1dGVzZm9ybWF0Lmh0bWwiLCAidGVzdGZpbGVzL2h0bWwvYXR0cmlidXRlc2Zvcm1hdC1mbXQuaHRtbCIsIGZhbHNlKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvaHRtbC9hdHRyaWJ1dGVzZm9ybWF0LWZtdC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2h0bWwvYXR0cmlidXRlc2Zvcm1hdC1mbXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWM3ZTZiZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvaHRtbC9hdHRyaWJ1dGVzZm9ybWF0LWZtdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEKLQlodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiCi0JY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiCi0+Ci08dGl0bGU+SW5zZXJ0IHRpdGxlIGhlcmU8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci08cAotCWFsaWduPSJjZW50ZXIiCi0JaWQ9Im15cCIKLT5IZXJlIGlzIHNvbWUgdGV4dCB0aGF0IEkgYW0gd3JpdGluZy48L3A+Ci08YnIKLQlpZD0ibXliciIKLQl0aXRsZT0ibm90aXRsZSIKLS8+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2h0bWwvYXR0cmlidXRlc2Zvcm1hdC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2h0bWwvYXR0cmlidXRlc2Zvcm1hdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMTAwZTg4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9odG1sL2F0dHJpYnV0ZXNmb3JtYXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPHRpdGxlPkluc2VydCB0aXRsZSBoZXJlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotPHAgYWxpZ249ImNlbnRlciIgaWQ9Im15cCI+SGVyZSBpcyBzb21lIHRleHQgdGhhdCBJIGFtIHdyaXRpbmcuPC9wPjxiciBpZD0ibXliciIgdGl0bGU9Im5vdGl0bGUiLz4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvaHRtbC9odG1sd2l0aGNzcy1mbXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9odG1sL2h0bWx3aXRoY3NzLWZtdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTAzYWIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9odG1sL2h0bWx3aXRoY3NzLWZtdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08dGl0bGU+SW5zZXJ0IHRpdGxlIGhlcmU8L3RpdGxlPgotPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KLTwhLS0KLWJvZHkgewotCWJhY2tncm91bmQtY29sb3I6IGJsYWNrOwotCWNvbG9yOiB3aGl0ZTsKLX0KLQotYTpsaW5rLGE6dmlzaXRlZCxhOmFjdGl2ZSB7Ci0JY29sb3I6IHJlZDsKLQl0ZXh0LWRlY29yYXRpb246IG5vbmUKLX0KLQotYTpob3ZlciB7Ci0JY29sb3I6IHJlZDsKLQlmb250LXdlaWdodDogYm9sZAotfQotLS0+Ci08L3N0eWxlPgotPC9oZWFkPgotPGJvZHk+Ci08YSBocmVmPSJodHRwOi8vZWNsaXBzZS5vcmciPmhlbGxvIGVjbGlwc2UuPC9hPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2h0bWwvaHRtbHdpdGhjc3MuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9odG1sL2h0bWx3aXRoY3NzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1ZWYzMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2h0bWwvaHRtbHdpdGhjc3MuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPHRpdGxlPkluc2VydCB0aXRsZSBoZXJlPC90aXRsZT4KLTxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Ci08IS0tCi1ib2R5IHsJYmFja2dyb3VuZC1jb2xvcjogYmxhY2s7Ci0JY29sb3I6IHdoaXRlO30KLWE6bGluayxhOnZpc2l0ZWQsYTphY3RpdmUgewljb2xvcjogcmVkOwotCXRleHQtZGVjb3JhdGlvbjogbm9uZX0KLWE6aG92ZXIgewotCWNvbG9yOiByZWQ7CWZvbnQtd2VpZ2h0OiBib2xkCi19Ci0tLT4KLTwvc3R5bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLTxhIGhyZWY9Imh0dHA6Ly9lY2xpcHNlLm9yZyI+aGVsbG8gZWNsaXBzZS48L2E+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvaHRtbC90YWJsZWZvcm1hdC1mbXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9odG1sL3RhYmxlZm9ybWF0LWZtdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYzUxMjIwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9odG1sL3RhYmxlZm9ybWF0LWZtdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08dGl0bGU+SW5zZXJ0IHRpdGxlIGhlcmU8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci08dGFibGU+Ci0JPHRyPgotCQk8dGg+Q29sdW1uIDEgSGVhZGluZzwvdGg+Ci0JCTx0aD5Db2x1bW4gMiBIZWFkaW5nPC90aD4KLQk8L3RyPgotCTx0cj4KLQkJPHRkPlJvdyAxOiBDb2wgMTwvdGQ+Ci0JCTx0ZD5Sb3cgMTogQ29sIDI8L3RkPgotCTwvdHI+Ci08L3RhYmxlPgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9odG1sL3RhYmxlZm9ybWF0Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvaHRtbC90YWJsZWZvcm1hdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZGVmNTBjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9odG1sL3RhYmxlZm9ybWF0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5JbnNlcnQgdGl0bGUgaGVyZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLTx0YWJsZT4gIDx0cj4gICAgPHRoPkNvbHVtbiAxIEhlYWRpbmc8L3RoPiAgICA8dGg+Q29sdW1uIDIgSGVhZGluZzwvdGg+ICA8L3RyPiAgPHRyPiAgICA8dGQ+Um93IDE6IENvbCAxPC90ZD4gICAgPHRkPlJvdyAxOiBDb2wgMjwvdGQ+ICA8L3RyPgotPC90YWJsZT4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL21pc2MvSFRNTENvcmVQcmVmZXJlbmNlc1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvbWlzYy9IVE1MQ29yZVByZWZlcmVuY2VzVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NGJiOGJiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvbWlzYy9IVE1MQ29yZVByZWZlcmVuY2VzVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLm1pc2M7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzLkRlZmF1bHRTY29wZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMuSUVjbGlwc2VQcmVmZXJlbmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMuSW5zdGFuY2VTY29wZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmludGVybmFsLkhUTUxDb3JlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuSFRNTERvY3VtZW50TG9hZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuSFRNTENvcmVQcmVmZXJlbmNlTmFtZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9ySFRNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuQ29tbW9uRW5jb2RpbmdQcmVmZXJlbmNlTmFtZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLkNvbnRlbnRCYXNlZFByZWZlcmVuY2VHYXRld2F5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5Db250ZW50VHlwZUVuY29kaW5nUHJlZmVyZW5jZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklFbmNvZGVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5vc2dpLnNlcnZpY2UucHJlZnMuUHJlZmVyZW5jZXM7Ci0KLS8qKgotICogVGhlIHB1cnBvc2Ugb2YgdGhpcyB0ZXN0IGlzIHRvIHZlcmlmeSB0aGUgdmFsaWRpdHkgb2YgdGhlIEhUTUwgU291cmNlCi0gKiBlZGl0b3IgcHJlZmVyZW5jZXMuIFRlc3RzIGluY2x1ZGUgc2V0dGluZy9nZXR0aW5nIHByZWZlcmVuY2VzLgotICogCi0gKiBOT1RFOiBUaGlzIHRlc3Qgc2hvdWxkIGJlIHByZWZvcm1lZCBvbiBhIGNsZWFuIHdvcmtzcGFjZS4gSWYgcGVyZm9ybWVkIG9uCi0gKiBhbiBleGlzdGluZyB3b3Jrc3BhY2UsIHRoaXMgdGVzdCB3aWxsIG1hbmlwdWxhdGUgcHJlZmVyZW5jZXMgaW4gdGhlCi0gKiB3b3Jrc3BhY2UsIHRob3VnaCBhdHRlbXB0cyB3aWxsIGJlIG1hZGUgdG8gcmVzdG9yZSBvcmlnaW5hbCB2YWx1ZXMgYWZ0ZXIKLSAqIHRlc3RpbmcuCi0gKi8KLXB1YmxpYyBjbGFzcyBIVE1MQ29yZVByZWZlcmVuY2VzVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQkvKioKLQkgKiBUZXN0cyBleGlzdGFuY2Ugb2YgcHJlZmVyZW5jZSB2YWx1ZXMgd2hlbiBnZXR0aW5nIHByZWZlcmVuY2UgdmFsdWVzCi0JICogdGhyb3VnaCBQbGF0Zm9ybS5nZXRQcmVmZXJlbmNlc1NlcnZpY2UoKQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RCdW5kbGVHZXRQcmVmZXJlbmNlcygpIHsKLQkJZmluYWwgU3RyaW5nIGJ1bmRsZU5hbWUgPSAib3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZSI7Ci0KLQkJLy8gbmVlZCB0byBzdGFydCB1cCBidW5kbGUgZm9yIGRlZmF1bHQgdmFsdWVzIHRvIGJlIGxvYWRlZAotCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKGJ1bmRsZU5hbWUpOwotCQl0cnkgewotCQkJaWYgKGJ1bmRsZSAhPSBudWxsKQotCQkJCWJ1bmRsZS5zdGFydCgpOwotCQkJZWxzZQotCQkJCWZhaWwoIkdldCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCBiZWNhdXNlIGNvdWxkIG5vdCBmaW5kIGJ1bmRsZTogIiArIGJ1bmRsZU5hbWUpOwotCQl9Ci0JCWNhdGNoIChCdW5kbGVFeGNlcHRpb24gZSkgewotCQkJZmFpbCgiR2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIGJlY2F1c2Ugb2YgZXhjZXB0aW9uIHN0YXJ0aW5nIGJ1bmRsZTogIiArIGJ1bmRsZU5hbWUgKyAiIGV4Y2VwdGlvbjogIiArIGUpOwotCQl9Ci0KLQkJYnVuZGxlR2V0UHJlZmVyZW5jZShidW5kbGVOYW1lLCBIVE1MQ29yZVByZWZlcmVuY2VOYW1lcy5UQUdfTkFNRV9DQVNFKTsKLQkJYnVuZGxlR2V0UHJlZmVyZW5jZShidW5kbGVOYW1lLCBIVE1MQ29yZVByZWZlcmVuY2VOYW1lcy5BVFRSX05BTUVfQ0FTRSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGJ1bmRsZUdldFByZWZlcmVuY2UoU3RyaW5nIGJ1bmRsZU5hbWUsIFN0cmluZyBwcmVmS2V5KSB7Ci0JCWludCBkZWZhdWx0VmFsdWUgPSAtMTsKLQotCQlpbnQgdmFsdWUgPSBQbGF0Zm9ybS5nZXRQcmVmZXJlbmNlc1NlcnZpY2UoKS5nZXRJbnQoYnVuZGxlTmFtZSwgcHJlZktleSwgZGVmYXVsdFZhbHVlLCBudWxsKTsKLQkJYXNzZXJ0VHJ1ZSgiR2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIHVzaW5nIFBsYXRmb3JtLmdldFByZWZlcmVuY2VzU2VydmljZS4gS2V5OiAiICsgcHJlZktleSwgZGVmYXVsdFZhbHVlICE9IHZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0cyBkZWZhdWx0IHZhbHVlcyBvZiBwcmVmZXJlbmNlcy4KLQkgKiAKLQkgKiBOT1RFOiBFeHBlY3RlZCBkZWZhdWx0IHZhbHVlcyBhcmUgaGFyZC1jb2RlZCwgc28gaWYgZGVmYXVsdCB2YWx1ZXMgZG8KLQkgKiBnZXQgY2hhbmdlZCwgYXNzZXJ0aW9ucyBuZWVkIHRvIGJlIHVwZGF0ZWQgYXMgd2VsbAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RQbHVnaW5HZXREZWZhdWx0UHJlZmVyZW5jZXMoKSB7Ci0JCUlFY2xpcHNlUHJlZmVyZW5jZXMgbm9kZSA9IG5ldyBEZWZhdWx0U2NvcGUoKS5nZXROb2RlKEhUTUxDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRTeW1ib2xpY05hbWUoKSk7Ci0KLQkJcGx1Z2luR2V0RGVmYXVsdFByZWZlcmVuY2Uobm9kZSwgSFRNTENvcmVQcmVmZXJlbmNlTmFtZXMuU1BMSVRfTVVMVElfQVRUUlMsIEJvb2xlYW4udG9TdHJpbmcoZmFsc2UpKTsKLQkJcGx1Z2luR2V0RGVmYXVsdFByZWZlcmVuY2Uobm9kZSwgSFRNTENvcmVQcmVmZXJlbmNlTmFtZXMuQVRUUl9OQU1FX0NBU0UsIEludGVnZXIudG9TdHJpbmcoSFRNTENvcmVQcmVmZXJlbmNlTmFtZXMuTE9XRVIpKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgcGx1Z2luR2V0RGVmYXVsdFByZWZlcmVuY2UoSUVjbGlwc2VQcmVmZXJlbmNlcyBub2RlLCBTdHJpbmcgcHJlZktleSwgU3RyaW5nIGV4cGVjdGVkKSB7Ci0JCVN0cmluZyBkZWZhdWx0VmFsdWUgPSBMb25nLnRvU3RyaW5nKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpKTsgLy8gcmFuZG9tCi0JCS8vIHN0cmluZwotCi0JCVN0cmluZyB0aGVEZWZhdWx0VmFsdWUgPSBub2RlLmdldChwcmVmS2V5LCBkZWZhdWx0VmFsdWUpOwotCQlhc3NlcnRFcXVhbHMoIkdldCBkZWZhdWx0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIHVzaW5nIHBsdWdpbi5nZXRQcmVmZXJlbmNlU3RvcmUuIEtleTogIiArIHByZWZLZXksIGV4cGVjdGVkLCB0aGVEZWZhdWx0VmFsdWUpOwotCX0KLQotCS8qKgotCSAqIFRlc3RzIHNldHRpbmcgcHJlZmVyZW5jZSB2YWx1ZXMgYnkgc2V0dGluZyBwcmVmZXJlbmNlIHZhbHVlIHRvIGJlIGEKLQkgKiBjZXJ0YWluIHZhbHVlLCB0aGVuIGdldHRpbmcgdGhlIHByZWZlcmVuY2UgdmFsdWUgdG8gdmVyaWZ5IGl0IHdhcyBzZXQuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFBsdWdpblNldFByZWZlcmVuY2VzKCkgewotCQlJRWNsaXBzZVByZWZlcmVuY2VzIG5vZGUgPSBuZXcgSW5zdGFuY2VTY29wZSgpLmdldE5vZGUoSFRNTENvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldFN5bWJvbGljTmFtZSgpKTsKLQotCQlwbHVnaW5TZXRQcmVmZXJlbmNlQm9vbGVhbihub2RlLCBIVE1MQ29yZVByZWZlcmVuY2VOYW1lcy5TUExJVF9NVUxUSV9BVFRSUyk7Ci0JCXBsdWdpblNldFByZWZlcmVuY2VTdHJpbmcobm9kZSwgSFRNTENvcmVQcmVmZXJlbmNlTmFtZXMuVEFHX05BTUVfQ0FTRSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHBsdWdpblNldFByZWZlcmVuY2VCb29sZWFuKElFY2xpcHNlUHJlZmVyZW5jZXMgbm9kZSwgU3RyaW5nIHByZWZLZXkpIHsKLQkJYm9vbGVhbiBvcmlnaW5hbFZhbHVlID0gZmFsc2U7Ci0JCWJvb2xlYW4gZXhwZWN0ZWRWYWx1ZSA9IHRydWU7Ci0KLQkJU3RyaW5nIG9yaWdpbmFsU3RyaW5nID0gbm9kZS5nZXQocHJlZktleSwgImJvZ3VzIik7Ci0JCWlmICghImJvZ3VzIi5lcXVhbHMob3JpZ2luYWxTdHJpbmcpKSB7Ci0JCQlvcmlnaW5hbFZhbHVlID0gQm9vbGVhbi52YWx1ZU9mKG9yaWdpbmFsU3RyaW5nKS5ib29sZWFuVmFsdWUoKTsKLQkJCWV4cGVjdGVkVmFsdWUgPSAhb3JpZ2luYWxWYWx1ZTsKLQkJfQotCQlub2RlLnB1dEJvb2xlYW4ocHJlZktleSwgZXhwZWN0ZWRWYWx1ZSk7Ci0JCWJvb2xlYW4gZm91bmRWYWx1ZSA9IG5vZGUuZ2V0Qm9vbGVhbihwcmVmS2V5LCB0cnVlKTsKLQkJYXNzZXJ0RXF1YWxzKCJTZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgdXNpbmcgcGx1Z2luLmdldFByZWZlcmVuY2VTdG9yZS4gS2V5OiAiICsgcHJlZktleSArICIgIGV4cGVjdGVkOiAiICsgZXhwZWN0ZWRWYWx1ZSArICIgZm91bmQ6ICIgKyBmb3VuZFZhbHVlLCBleHBlY3RlZFZhbHVlLCBmb3VuZFZhbHVlKTsKLQotCQkvLyBhdHRlbXB0IHRvIHJlc3RvcmUgb3JpZ2luYWwgcHJlZmVyZW5jZSB2YWx1ZQotCQlpZiAoImJvZ3VzIi5lcXVhbHMob3JpZ2luYWxTdHJpbmcpKQotCQkJbm9kZS5yZW1vdmUocHJlZktleSk7Ci0JCWVsc2UKLQkJCW5vZGUucHV0KHByZWZLZXksIG9yaWdpbmFsU3RyaW5nKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgcGx1Z2luU2V0UHJlZmVyZW5jZVN0cmluZyhJRWNsaXBzZVByZWZlcmVuY2VzIG5vZGUsIFN0cmluZyBwcmVmS2V5KSB7Ci0JCVN0cmluZyBvcmlnaW5hbFZhbHVlID0gbm9kZS5nZXQocHJlZktleSwgImJvZ3VzIik7Ci0JCVN0cmluZyBleHBlY3RlZFZhbHVlID0gTG9uZy50b1N0cmluZyhTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSk7IC8vIHJhbmRvbQotCQkvLyBzdHJpbmcKLQkJbm9kZS5wdXQocHJlZktleSwgZXhwZWN0ZWRWYWx1ZSk7Ci0JCVN0cmluZyBmb3VuZFZhbHVlID0gbm9kZS5nZXQocHJlZktleSwgIiIpOwotCQlhc3NlcnRFcXVhbHMoIlNldCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCB1c2luZyBwbHVnaW4uZ2V0UHJlZmVyZW5jZVN0b3JlLiBLZXk6ICIgKyBwcmVmS2V5ICsgIiAgZXhwZWN0ZWQ6ICIgKyBleHBlY3RlZFZhbHVlICsgIiBmb3VuZDogIiArIGZvdW5kVmFsdWUsIGV4cGVjdGVkVmFsdWUsIGZvdW5kVmFsdWUpOwotCi0JCS8vIGF0dGVtcHQgdG8gcmVzdG9yZSBvcmlnaW5hbCBwcmVmZXJlbmNlIHZhbHVlCi0JCWlmICgiYm9ndXMiLmVxdWFscyhvcmlnaW5hbFZhbHVlKSkKLQkJCW5vZGUucmVtb3ZlKHByZWZLZXkpOwotCQllbHNlCi0JCQlub2RlLnB1dChwcmVmS2V5LCBvcmlnaW5hbFZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0cyBsaW5lIGRlbGltaXRlciBwcmVmZXJlbmNlcyBieSBtYWtpbmcgc3VyZSBkb2N1bWVudCBjcmVhdGVkCi0JICogZm9sbG93cyBsaW5lIGRlbGltaXRlciBwcmVmZXJlbmNlLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3REZWxpbWl0ZXJQcmVmZXJlbmNlcygpIHsKLQkJLy8gY2hlY2sgaWYgY29udGVudCB0eXBlIHByZWZlcmVuY2VzIG1hdGNoCi0JCVN0cmluZyBwcmVmZXJyZWREZWxpbWl0ZXIgPSBDb250ZW50VHlwZUVuY29kaW5nUHJlZmVyZW5jZXMuZ2V0UHJlZmVycmVkTmV3TGluZURlbGltaXRlcihDb250ZW50VHlwZUlkRm9ySFRNTC5Db250ZW50VHlwZUlEX0hUTUwpOwotCQlQcmVmZXJlbmNlcyBwcmVmcyA9IENvbnRlbnRCYXNlZFByZWZlcmVuY2VHYXRld2F5LmdldFByZWZlcmVuY2VzKENvbnRlbnRUeXBlSWRGb3JIVE1MLkNvbnRlbnRUeXBlSURfSFRNTCk7Ci0JCVN0cmluZyBnYXRld2F5RGVsaW1pdGVyID0gcHJlZnMuZ2V0KENvbW1vbkVuY29kaW5nUHJlZmVyZW5jZU5hbWVzLkVORF9PRl9MSU5FX0NPREUsIG51bGwpOwotCQlhc3NlcnRFcXVhbHMoIkNvbnRlbnRUeXBlRW5jb2RpbmdQcmVmZXJlbmNlcyBhbmQgQ29udGVudEJhc2VkUHJlZmVyZW5jZUdhdGV3YXkgcHJlZmVyZW5jZXMgZG8gbm90IG1hdGNoIiwgZ2F0ZXdheURlbGltaXRlciwgcHJlZmVycmVkRGVsaW1pdGVyKTsKLQotCQkvLyBzZXQgYSBwYXJ0aWN1bGFyIGxpbmUgZGVsaW1pdGVyCi0JCXByZWZzLnB1dChDb21tb25FbmNvZGluZ1ByZWZlcmVuY2VOYW1lcy5FTkRfT0ZfTElORV9DT0RFLCBDb21tb25FbmNvZGluZ1ByZWZlcmVuY2VOYW1lcy5MRik7Ci0KLQkJLy8gY3JlYXRlIGRvY3VtZW50Ci0JCUhUTUxEb2N1bWVudExvYWRlciBsb2FkZXIgPSBuZXcgSFRNTERvY3VtZW50TG9hZGVyKCk7Ci0JCUlFbmNvZGVkRG9jdW1lbnQgZG9jdW1lbnQgPSBsb2FkZXIuY3JlYXRlTmV3U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCVN0cmluZyBkb2N1bWVudERlbGltaXRlciA9IGRvY3VtZW50LmdldFByZWZlcnJlZExpbmVEZWxpbWl0ZXIoKTsKLQotCQkvLyB2ZXJpZnkgZGVsaW1pdGVyIGluIGRvY3VtZW50IG1hdGNoZXMgcHJlZmVyZW5jZQotCQlhc3NlcnRFcXVhbHMoIkRlbGltaXRlciBpbiBkb2N1bWVudCBkb2VzIG5vdCBtYXRjaCBwcmVmZXJlbmNlIiwgQ29tbW9uRW5jb2RpbmdQcmVmZXJlbmNlTmFtZXMuU1RSSU5HX0xGLCBkb2N1bWVudERlbGltaXRlcik7Ci0KLQkJLy8gcmV0dXJuIHRvIG9yaWdpbmFsIHByZWZlcmVuY2UKLQkJcHJlZnMucmVtb3ZlKENvbW1vbkVuY29kaW5nUHJlZmVyZW5jZU5hbWVzLkVORF9PRl9MSU5FX0NPREUpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvbWlzYy9IVE1MVGFnSW5mb1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvbWlzYy9IVE1MVGFnSW5mb1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzVmYTY2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL21pc2MvSFRNTFRhZ0luZm9UZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLm1pc2M7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5Nb2RlbFRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTUF0dHJpYnV0ZURlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01FbGVtZW50RGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTU5hbWVkTm9kZU1hcDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLm1vZGVscXVlcnkuTW9kZWxRdWVyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLnV0aWwuRE9NTmFtZXNwYWNlSGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5tb2RlbHF1ZXJ5Lk1vZGVsUXVlcnlVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgSFRNTFRhZ0luZm9UZXN0IGV4dGVuZHMgTW9kZWxUZXN0IHsKLQotCXB1YmxpYyBIVE1MVGFnSW5mb1Rlc3QoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIEhUTUxUYWdJbmZvVGVzdCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgSFRNTFRhZ0luZm9UZXN0KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVIVE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBodG1sID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiSFRNTCIpOyAvLyROT04tTkxTLTEkCi0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChodG1sKTsKLQkJCWNoZWNrRWxlbWVudFRhZ0luZm8oaHRtbCk7Ci0KLQkJCUVsZW1lbnQgYm9keSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkJPRFkiKTsgLy8kTk9OLU5MUy0xJAotCQkJaHRtbC5hcHBlbmRDaGlsZChib2R5KTsKLQkJCWNoZWNrRWxlbWVudFRhZ0luZm8oYm9keSk7Ci0KLQkJCUF0dHIgb25jbGljayA9IGRvY3VtZW50LmNyZWF0ZUF0dHJpYnV0ZSgib25jbGljayIpOyAvLyROT04tTkxTLTEkCi0JCQlib2R5LnNldEF0dHJpYnV0ZU5vZGUob25jbGljayk7Ci0JCQljaGVja0F0dHJpYnV0ZVRhZ0luZm8oYm9keSwgb25jbGljayk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBjaGVja0VsZW1lbnRUYWdJbmZvKEVsZW1lbnQgbm9kZSkgewotCQkvLyBjaGVjayB0YWdpbmZvCi0JCUNNRWxlbWVudERlY2xhcmF0aW9uIGVsZW1lbnREZWNsID0gZ2V0Q01FbGVtZW50RGVjbGFyYXRpb24obm9kZSk7Ci0JCWFzc2VydE5vdE51bGwoIkNhbm5vdCBjaGVjayB0YWdpbmZvIGJlY2F1c2Ugbm8gY20gZWxlbWVudCBkZWNsYXJhdGlvbiBmb3IgIiArIG5vZGUuZ2V0Tm9kZU5hbWUoKSwgZWxlbWVudERlY2wpOyAvLyROT04tTkxTLTEkCi0JCWlmIChlbGVtZW50RGVjbCAhPSBudWxsKSB7Ci0JCQlTdHJpbmcgdGFnSW5mbyA9IChTdHJpbmcpIGVsZW1lbnREZWNsLmdldFByb3BlcnR5KCJ0YWdJbmZvIik7IC8vJE5PTi1OTFMtMSQKLQkJCWFzc2VydE5vdE51bGwoIk5vIHRhZ2luZm8gZm91bmQgZm9yICIgKyBlbGVtZW50RGVjbC5nZXROb2RlTmFtZSgpLCB0YWdJbmZvKTsgLy8kTk9OLU5MUy0xJAotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNoZWNrQXR0cmlidXRlVGFnSW5mbyhFbGVtZW50IGVsZW1lbnQsIEF0dHIgYXR0cmlidXRlKSB7Ci0JCS8vIGNoZWNrIHRhZ2luZm8KLQkJQ01FbGVtZW50RGVjbGFyYXRpb24gZWxlbWVudERlY2wgPSBnZXRDTUVsZW1lbnREZWNsYXJhdGlvbihlbGVtZW50KTsKLQkJYXNzZXJ0Tm90TnVsbCgiQ2Fubm90IGNoZWNrIHRhZ2luZm8gYmVjYXVzZSBubyBlbGVtZW50IGRlY2xhcmF0aW9uIGZvciAiICsgZWxlbWVudC5nZXROb2RlTmFtZSgpLCBlbGVtZW50RGVjbCk7IC8vJE5PTi1OTFMtMSQKLQkJaWYgKGVsZW1lbnREZWNsICE9IG51bGwpIHsKLQkJCUNNQXR0cmlidXRlRGVjbGFyYXRpb24gYXR0RGVjbCA9IGdldENNQXR0cmlidXRlRGVjbGFyYXRpb24oZWxlbWVudERlY2wsIGF0dHJpYnV0ZS5nZXROYW1lKCkpOwotCQkJYXNzZXJ0Tm90TnVsbCgiQ2Fubm90IGNoZWNrIHRhZ2luZm8gYmVjYXVzZSBubyBhdHRyaWJ1dGUgZGVjbGFyYXRpb24gZm9yICIgKyBhdHRyaWJ1dGUuZ2V0TmFtZSgpLCBhdHREZWNsKTsgLy8kTk9OLU5MUy0xJAotCi0JCQlTdHJpbmcgdGFnSW5mbyA9IChTdHJpbmcpIGF0dERlY2wuZ2V0UHJvcGVydHkoInRhZ0luZm8iKTsgLy8kTk9OLU5MUy0xJAotCQkJYXNzZXJ0TnVsbCgiVW5leHBlY3RlZCB0YWdpbmZvIGZvdW5kIGZvciAiICsgYXR0RGVjbC5nZXROb2RlTmFtZSgpLCB0YWdJbmZvKTsgLy8kTk9OLU5MUy0xJAotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0cmVpdmVzIENNQXR0cmlidXRlRGVjbGFyYXRpb24gaW5kaWNhdGVkIGJ5IGF0dHJpYnV0ZSBuYW1lIHdpdGhpbgotCSAqIGVsZW1lbnREZWNsCi0JICovCi0JcHJpdmF0ZSBDTUF0dHJpYnV0ZURlY2xhcmF0aW9uIGdldENNQXR0cmlidXRlRGVjbGFyYXRpb24oQ01FbGVtZW50RGVjbGFyYXRpb24gZWxlbWVudERlY2wsIFN0cmluZyBhdHROYW1lKSB7Ci0JCUNNQXR0cmlidXRlRGVjbGFyYXRpb24gYXR0ckRlY2wgPSBudWxsOwotCi0JCWlmIChlbGVtZW50RGVjbCAhPSBudWxsKSB7Ci0JCQlDTU5hbWVkTm9kZU1hcCBhdHRyaWJ1dGVzID0gZWxlbWVudERlY2wuZ2V0QXR0cmlidXRlcygpOwotCQkJU3RyaW5nIG5vcHJlZml4TmFtZSA9IERPTU5hbWVzcGFjZUhlbHBlci5nZXRVbnByZWZpeGVkTmFtZShhdHROYW1lKTsKLQkJCWlmIChhdHRyaWJ1dGVzICE9IG51bGwpIHsKLQkJCQlhdHRyRGVjbCA9IChDTUF0dHJpYnV0ZURlY2xhcmF0aW9uKSBhdHRyaWJ1dGVzLmdldE5hbWVkSXRlbShub3ByZWZpeE5hbWUpOwotCQkJCWlmIChhdHRyRGVjbCA9PSBudWxsKSB7Ci0JCQkJCWF0dHJEZWNsID0gKENNQXR0cmlidXRlRGVjbGFyYXRpb24pIGF0dHJpYnV0ZXMuZ2V0TmFtZWRJdGVtKGF0dE5hbWUpOwotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gYXR0ckRlY2w7Ci0JfQotCi0JLyoqCi0JICogUmV0cmVpdmVzIENNRWxlbWVudERlY2xhcmF0aW9uIGZvciBnaXZlbiBub2RlCi0JICogCi0JICogQHJldHVybiBDTUVsZW1lbnREZWNsYXJhdGlvbiAtIENNRWxlbWVudERlY2xhcmF0aW9uIG9mIG5vZGUgb3IKLQkgKiAgICAgICAgIDxjb2RlPm51bGw8L2NvZGU+IGlmIG5vdCBwb3NzaWJsZQotCSAqLwotCXByaXZhdGUgQ01FbGVtZW50RGVjbGFyYXRpb24gZ2V0Q01FbGVtZW50RGVjbGFyYXRpb24oRWxlbWVudCBlbGVtZW50KSB7Ci0JCUNNRWxlbWVudERlY2xhcmF0aW9uIHJlc3VsdCA9IG51bGw7Ci0KLQkJTW9kZWxRdWVyeSBtb2RlbFF1ZXJ5ID0gTW9kZWxRdWVyeVV0aWwuZ2V0TW9kZWxRdWVyeShlbGVtZW50LmdldE93bmVyRG9jdW1lbnQoKSk7Ci0JCWlmIChtb2RlbFF1ZXJ5ICE9IG51bGwpCi0JCQlyZXN1bHQgPSBtb2RlbFF1ZXJ5LmdldENNRWxlbWVudERlY2xhcmF0aW9uKGVsZW1lbnQpOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvbW9kZWwvQlVHMTI0ODM1U2V0U3R5bGVBdHRyaWJ1dGVWYWx1ZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvbW9kZWwvQlVHMTI0ODM1U2V0U3R5bGVBdHRyaWJ1dGVWYWx1ZVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODVkM2NlYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL21vZGVsL0JVRzEyNDgzNVNldFN0eWxlQXR0cmlidXRlVmFsdWVUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5tb2RlbDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuUHJvcENNUHJvcGVydHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklDU1NTdHlsZURlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSFRNTDQwTmFtZXNwYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMudXRpbHMuRmlsZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Eb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkVsZW1lbnRDU1NJbmxpbmVTdHlsZTsKLQotcHVibGljIGNsYXNzIEJVRzEyNDgzNVNldFN0eWxlQXR0cmlidXRlVmFsdWVUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCS8qKgotCSAqIFRlc3RzIHNldHRpbmcgc29tZSBjc3MgYXR0cmlidXRlIHZhbHVlcyBpbmNsdWRpbmcgc2V0dGluZyB0aGUgc2FtZQotCSAqIHZhbHVlIHNldmVyYWwgdGltZXMgZm9yIGRpZmZlcmVudCBhdHRyaWJ1dGVzCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFNldEF0dHJpYnV0ZVZhbHVlKCkgewotCQlmaW5hbCBTdHJpbmcgQUJTT0xVVEUgPSAiYWJzb2x1dGUiOwotCQlmaW5hbCBTdHJpbmcgT05FID0gIjEiOwotCQlmaW5hbCBTdHJpbmcgUFggPSAiNTBweCI7Ci0KLQkJSURPTU1vZGVsIG1vZGVsID0gRmlsZVV0aWwuY3JlYXRlSFRNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJRE9NRG9jdW1lbnQgZG9jID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJCUVsZW1lbnQgZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KEhUTUw0ME5hbWVzcGFjZS5FbGVtZW50TmFtZS5ESVYpOwotCQkJZWxlbWVudC5zZXRBdHRyaWJ1dGUoSFRNTDQwTmFtZXNwYWNlLkFUVFJfTkFNRV9JRCwgIkxheWVyMCIpOwotCQkJZWxlbWVudC5zZXRBdHRyaWJ1dGUoSFRNTDQwTmFtZXNwYWNlLkFUVFJfTkFNRV9TVFlMRSwgIiIpOwotCQkJc2V0SW5saW5lU3R5bGUoZWxlbWVudCwgUHJvcENNUHJvcGVydHkuUF9QT1NJVElPTiwgQUJTT0xVVEUpOwotCQkJc2V0SW5saW5lU3R5bGUoZWxlbWVudCwgUHJvcENNUHJvcGVydHkuUF9aX0lOREVYLCBPTkUpOwotCQkJc2V0SW5saW5lU3R5bGUoZWxlbWVudCwgUHJvcENNUHJvcGVydHkuUF9XSURUSCwgUFgpOwotCQkJc2V0SW5saW5lU3R5bGUoZWxlbWVudCwgUHJvcENNUHJvcGVydHkuUF9IRUlHSFQsIFBYKTsKLQkJCXNldElubGluZVN0eWxlKGVsZW1lbnQsIFByb3BDTVByb3BlcnR5LlBfVE9QLCBQWCk7Ci0JCQlzZXRJbmxpbmVTdHlsZShlbGVtZW50LCBQcm9wQ01Qcm9wZXJ0eS5QX0xFRlQsIFBYKTsKLQotCQkJYXNzZXJ0RXF1YWxzKEFCU09MVVRFLCBnZXRJbmxpbmVTdHlsZShlbGVtZW50LCBQcm9wQ01Qcm9wZXJ0eS5QX1BPU0lUSU9OKSk7Ci0JCQlhc3NlcnRFcXVhbHMoT05FLCBnZXRJbmxpbmVTdHlsZShlbGVtZW50LCBQcm9wQ01Qcm9wZXJ0eS5QX1pfSU5ERVgpKTsKLQkJCWFzc2VydEVxdWFscyhQWCwgZ2V0SW5saW5lU3R5bGUoZWxlbWVudCwgUHJvcENNUHJvcGVydHkuUF9XSURUSCkpOwotCQkJYXNzZXJ0RXF1YWxzKFBYLCBnZXRJbmxpbmVTdHlsZShlbGVtZW50LCBQcm9wQ01Qcm9wZXJ0eS5QX0hFSUdIVCkpOwotCQkJYXNzZXJ0RXF1YWxzKFBYLCBnZXRJbmxpbmVTdHlsZShlbGVtZW50LCBQcm9wQ01Qcm9wZXJ0eS5QX1RPUCkpOwotCQkJYXNzZXJ0RXF1YWxzKFBYLCBnZXRJbmxpbmVTdHlsZShlbGVtZW50LCBQcm9wQ01Qcm9wZXJ0eS5QX0xFRlQpKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgc2V0SW5saW5lU3R5bGUoRWxlbWVudCBlbGVtZW50LCBTdHJpbmcgbmFtZSwgU3RyaW5nIHZhbHVlKSB7Ci0JCUlDU1NTdHlsZURlY2xhcmF0aW9uIGRlY2wgPSBudWxsOwotCQl0cnkgewotCQkJZGVjbCA9IChJQ1NTU3R5bGVEZWNsYXJhdGlvbikgKChFbGVtZW50Q1NTSW5saW5lU3R5bGUpIGVsZW1lbnQpLmdldFN0eWxlKCk7Ci0JCX0KLQkJY2F0Y2ggKENsYXNzQ2FzdEV4Y2VwdGlvbiBleCkgewotCQkJLy8gZG8gbm90aGluZwotCQl9Ci0JCWlmIChkZWNsICE9IG51bGwpIHsKLQkJCVN0cmluZyBwcmlvcml0eSA9IGRlY2wuZ2V0UHJvcGVydHlQcmlvcml0eShuYW1lKTsKLQkJCWRlY2wuc2V0UHJvcGVydHkobmFtZSwgdmFsdWUsIHByaW9yaXR5KTsKLQkJfQotCX0KLQotCi0JcHJpdmF0ZSBTdHJpbmcgZ2V0SW5saW5lU3R5bGUoRWxlbWVudCBlbGVtZW50LCBTdHJpbmcgbmFtZSkgewotCQlTdHJpbmcgdmFsdWUgPSBudWxsOwotCQlJQ1NTU3R5bGVEZWNsYXJhdGlvbiBkZWNsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCWRlY2wgPSAoSUNTU1N0eWxlRGVjbGFyYXRpb24pICgoRWxlbWVudENTU0lubGluZVN0eWxlKSBlbGVtZW50KS5nZXRTdHlsZSgpOwotCQl9Ci0JCWNhdGNoIChDbGFzc0Nhc3RFeGNlcHRpb24gZXgpIHsKLQkJCS8vIGRvIG5vdGhpbmcKLQkJfQotCQlpZiAoZGVjbCAhPSBudWxsKSB7Ci0JCQl2YWx1ZSA9IGRlY2wuZ2V0UHJvcGVydHlWYWx1ZShuYW1lKTsKLQkJfQotCQlyZXR1cm4gdmFsdWU7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9tb2RlbC9HZXRPdmVycmlkZVN0eWxlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9tb2RlbC9HZXRPdmVycmlkZVN0eWxlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Mzk4MzMyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvbW9kZWwvR2V0T3ZlcnJpZGVTdHlsZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLm1vZGVsOwotCi0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnV0aWxzLkZpbGVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuRG9jdW1lbnRDU1M7Ci0KLXB1YmxpYyBjbGFzcyBHZXRPdmVycmlkZVN0eWxlVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgU3R5bGVUZXN0LgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIEdldE92ZXJyaWRlU3R5bGVUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBHZXRPdmVycmlkZVN0eWxlVGVzdCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgR2V0T3ZlcnJpZGVTdHlsZVRlc3QoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IEZpbGVVdGlsLmNyZWF0ZUhUTUxNb2RlbCgpOyAKLQkJdHJ5IHsKLQkJCW1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnNldFRleHQobnVsbCwgIjxzdHlsZT5wIHsJYm9yZGVyLWNvbG9yOiBibHVlOyBtYXJnaW46IDA7IH0gPC9zdHlsZT4gPHAgc3R5bGU9XCJib3JkZXItY29sb3I6IHJlZDsgbWFyZ2luOiAxO1wiPiIpOwotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlEb2N1bWVudENTUyBkZGQgPSAoRG9jdW1lbnRDU1MpIGRvY3VtZW50OwotCQkJTm9kZUxpc3QgbiA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJwIik7Ci0JCQlkZGQuZ2V0T3ZlcnJpZGVTdHlsZSgoRWxlbWVudCkgbi5pdGVtKDApLCAiIik7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9tb2RlbC9Nb2RlbE1vZGlmaWNhdGlvbnMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvbW9kZWwvTW9kZWxNb2RpZmljYXRpb25zLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjZmVjYjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9tb2RlbC9Nb2RlbE1vZGlmaWNhdGlvbnMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMwNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLm1vZGVsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkJhZExvY2F0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5IVE1MNDBOYW1lc3BhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy51dGlscy5UZXN0V3JpdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy51dGlsLk51bGxJbnB1dFN0cmVhbTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgTW9kZWxNb2RpZmljYXRpb25zIGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHVibGljIHZvaWQgdGVzdFBsYWluRG9jdW1lbnQoKSB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlJRG9jdW1lbnQgZG9jdW1lbnQgPSBuZXcgRG9jdW1lbnQoKTsKLQkJZG9jdW1lbnQuc2V0KCIiKTsKLQkJZG9jdW1lbnQucmVwbGFjZSgwLCAwLCAidGVzdCIpOwotCQlkb2N1bWVudC5zZXQoIiIpOwotCQlkb2N1bWVudC5yZXBsYWNlKDAsIDAsICJ0ZXN0MiIpOwotCQlhc3NlcnRUcnVlKHRydWUpOwotCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFJlcERvY3VtZW50SFRNTE1vZHMoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlJRE9NTW9kZWwgbW9kZWwgPSBudWxsOyAvLyBhc3N1bWVzIDAtYnl0ZSBodG1sIGVtcHR5IGZpbGUKLQotCQltb2RlbCA9IGNyZWF0ZUhUTUxNb2RlbCgpOwotCi0JCXRyeSB7Ci0JCQlJRE9NRG9jdW1lbnQgZG9jID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJCUVsZW1lbnQgZWxlID0gZG9jLmNyZWF0ZUVsZW1lbnQoSFRNTDQwTmFtZXNwYWNlLkVsZW1lbnROYW1lLlApOwotCQkJZG9jLmFwcGVuZENoaWxkKGVsZSk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KHRoaXMsIDAsIHN0cnVjdHVyZWREb2N1bWVudC5nZXRMZW5ndGgoKSwgIjx0YWc+dGV4dDwvdGFnPiIpOwotCQkJRWxlbWVudCBlbGUyID0gZG9jLmNyZWF0ZUVsZW1lbnQoSFRNTDQwTmFtZXNwYWNlLkVsZW1lbnROYW1lLlApOwotCQkJZG9jLmFwcGVuZENoaWxkKGVsZTIpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZXREb2N1bWVudFhNTE1vZHMoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlJRE9NTW9kZWwgbW9kZWwgPSBudWxsOyAvLyBhc3N1bWVzIDAtYnl0ZSBodG1sIGVtcHR5IGZpbGUKLQotCQltb2RlbCA9IGNyZWF0ZVhNTE1vZGVsKCk7Ci0KLQkJdHJ5IHsKLQkJCUlET01Eb2N1bWVudCBkb2MgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQkJRWxlbWVudCBlbGUgPSBkb2MuY3JlYXRlRWxlbWVudChIVE1MNDBOYW1lc3BhY2UuRWxlbWVudE5hbWUuUCk7Ci0JCQlkb2MuYXBwZW5kQ2hpbGQoZWxlKTsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0VGV4dCh0aGlzLCAiIik7Ci0JCQlFbGVtZW50IGVsZTIgPSBkb2MuY3JlYXRlRWxlbWVudChIVE1MNDBOYW1lc3BhY2UuRWxlbWVudE5hbWUuUCk7Ci0JCQlkb2MuYXBwZW5kQ2hpbGQoZWxlMik7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFJlcERvY3VtZW50SlNQTW9kcygpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IG51bGw7IC8vIGFzc3VtZXMgMC1ieXRlIGh0bWwgZW1wdHkgZmlsZQotCi0JCW1vZGVsID0gY3JlYXRlSlNQTW9kZWwoKTsKLQotCQl0cnkgewotCQkJSURPTURvY3VtZW50IGRvYyA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCQlFbGVtZW50IGVsZSA9IGRvYy5jcmVhdGVFbGVtZW50KEhUTUw0ME5hbWVzcGFjZS5FbGVtZW50TmFtZS5QKTsKLQkJCWRvYy5hcHBlbmRDaGlsZChlbGUpOwotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCXN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dCh0aGlzLCAwLCBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0TGVuZ3RoKCksICI8dGFnPnRleHQ8L3RhZz4iKTsKLQkJCUVsZW1lbnQgZWxlMiA9IGRvYy5jcmVhdGVFbGVtZW50KEhUTUw0ME5hbWVzcGFjZS5FbGVtZW50TmFtZS5QKTsKLQkJCWRvYy5hcHBlbmRDaGlsZChlbGUyKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2V0RG9jdW1lbnRIVE1MTW9kcygpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IG51bGw7IC8vIGFzc3VtZXMgMC1ieXRlIGh0bWwgZW1wdHkgZmlsZQotCi0JCW1vZGVsID0gY3JlYXRlSFRNTE1vZGVsKCk7Ci0KLQkJdHJ5IHsKLQkJCUlET01Eb2N1bWVudCBkb2MgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQkJRWxlbWVudCBlbGUgPSBkb2MuY3JlYXRlRWxlbWVudChIVE1MNDBOYW1lc3BhY2UuRWxlbWVudE5hbWUuUCk7Ci0JCQlkb2MuYXBwZW5kQ2hpbGQoZWxlKTsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0VGV4dCh0aGlzLCAiIik7Ci0JCQlFbGVtZW50IGVsZTIgPSBkb2MuY3JlYXRlRWxlbWVudChIVE1MNDBOYW1lc3BhY2UuRWxlbWVudE5hbWUuUCk7Ci0JCQlkb2MuYXBwZW5kQ2hpbGQoZWxlMik7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNldERvY3VtZW50SlNQTW9kcygpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IG51bGw7IC8vIGFzc3VtZXMgMC1ieXRlIGh0bWwgZW1wdHkgZmlsZQotCi0JCW1vZGVsID0gY3JlYXRlSlNQTW9kZWwoKTsKLQotCQl0cnkgewotCQkJSURPTURvY3VtZW50IGRvYyA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCQlFbGVtZW50IGVsZSA9IGRvYy5jcmVhdGVFbGVtZW50KEhUTUw0ME5hbWVzcGFjZS5FbGVtZW50TmFtZS5QKTsKLQkJCWRvYy5hcHBlbmRDaGlsZChlbGUpOwotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCXN0cnVjdHVyZWREb2N1bWVudC5zZXRUZXh0KHRoaXMsICIiKTsKLQkJCUVsZW1lbnQgZWxlMiA9IGRvYy5jcmVhdGVFbGVtZW50KEhUTUw0ME5hbWVzcGFjZS5FbGVtZW50TmFtZS5QKTsKLQkJCWRvYy5hcHBlbmRDaGlsZChlbGUyKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UmVwRG9jdW1lbnRYTUxNb2RzKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gbnVsbDsgLy8gYXNzdW1lcyAwLWJ5dGUgaHRtbCBlbXB0eSBmaWxlCi0KLQkJbW9kZWwgPSBjcmVhdGVYTUxNb2RlbCgpOwotCi0JCXRyeSB7Ci0JCQlJRE9NRG9jdW1lbnQgZG9jID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJCUVsZW1lbnQgZWxlID0gZG9jLmNyZWF0ZUVsZW1lbnQoSFRNTDQwTmFtZXNwYWNlLkVsZW1lbnROYW1lLlApOwotCQkJZG9jLmFwcGVuZENoaWxkKGVsZSk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KHRoaXMsIDAsIHN0cnVjdHVyZWREb2N1bWVudC5nZXRMZW5ndGgoKSwgIjx0YWc+dGV4dDwvdGFnPiIpOwotCQkJRWxlbWVudCBlbGUyID0gZG9jLmNyZWF0ZUVsZW1lbnQoSFRNTDQwTmFtZXNwYWNlLkVsZW1lbnROYW1lLlApOwotCQkJZG9jLmFwcGVuZENoaWxkKGVsZTIpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3REb2N1bWVudEhUTUxNb2RzKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gbnVsbDsgLy8gYXNzdW1lcyAwLWJ5dGUgaHRtbCBlbXB0eSBmaWxlCi0JCi0JCW1vZGVsID0gY3JlYXRlSFRNTE1vZGVsKCk7Ci0JCi0JCXRyeSB7Ci0JCQlJRE9NRG9jdW1lbnQgZG9jID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJCUVsZW1lbnQgZWxlID0gZG9jLmNyZWF0ZUVsZW1lbnQoSFRNTDQwTmFtZXNwYWNlLkVsZW1lbnROYW1lLlApOwotCQkJZG9jLmFwcGVuZENoaWxkKGVsZSk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KHRoaXMsIDAsIHN0cnVjdHVyZWREb2N1bWVudC5nZXRMZW5ndGgoKSwgIiIpOwotCQkJRWxlbWVudCBlbGUyID0gZG9jLmNyZWF0ZUVsZW1lbnQoSFRNTDQwTmFtZXNwYWNlLkVsZW1lbnROYW1lLlApOwotCQkJZG9jLmFwcGVuZENoaWxkKGVsZTIpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3REb2N1bWVudEpTUE1vZHMoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlJRE9NTW9kZWwgbW9kZWwgPSBudWxsOyAvLyBhc3N1bWVzIDAtYnl0ZSBodG1sIGVtcHR5IGZpbGUKLQkKLQkJbW9kZWwgPSBjcmVhdGVKU1BNb2RlbCgpOwotCQotCQl0cnkgewotCQkJSURPTURvY3VtZW50IGRvYyA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCQlFbGVtZW50IGVsZSA9IGRvYy5jcmVhdGVFbGVtZW50KEhUTUw0ME5hbWVzcGFjZS5FbGVtZW50TmFtZS5QKTsKLQkJCWRvYy5hcHBlbmRDaGlsZChlbGUpOwotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCXN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dCh0aGlzLCAwLCBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0TGVuZ3RoKCksICIiKTsKLQkJCUVsZW1lbnQgZWxlMiA9IGRvYy5jcmVhdGVFbGVtZW50KEhUTUw0ME5hbWVzcGFjZS5FbGVtZW50TmFtZS5QKTsKLQkJCWRvYy5hcHBlbmRDaGlsZChlbGUyKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RG9jdW1lbnRYTUxNb2RzKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gbnVsbDsgLy8gYXNzdW1lcyAwLWJ5dGUgaHRtbCBlbXB0eSBmaWxlCi0JCi0JCW1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkKLQkJdHJ5IHsKLQkJCUlET01Eb2N1bWVudCBkb2MgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQkJRWxlbWVudCBlbGUgPSBkb2MuY3JlYXRlRWxlbWVudChIVE1MNDBOYW1lc3BhY2UuRWxlbWVudE5hbWUuUCk7Ci0JCQlkb2MuYXBwZW5kQ2hpbGQoZWxlKTsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQucmVwbGFjZVRleHQodGhpcywgMCwgc3RydWN0dXJlZERvY3VtZW50LmdldExlbmd0aCgpLCAiIik7Ci0JCQlFbGVtZW50IGVsZTIgPSBkb2MuY3JlYXRlRWxlbWVudChIVE1MNDBOYW1lc3BhY2UuRWxlbWVudE5hbWUuUCk7Ci0JCQlkb2MuYXBwZW5kQ2hpbGQoZWxlMik7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0JLyoqCi0JICogQmUgc3VyZSB0byByZWxlYXNlIGFueSBtb2RlbHMgb2J0YWluZWQgZnJvbSB0aGlzIG1ldGhvZC4KLQkgKiAKLQkgKiBAcmV0dXJuCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbiAKLQkgKiBAdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgSURPTU1vZGVsIGNyZWF0ZVhNTE1vZGVsKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCi0JCW1vZGVsID0gbW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yRWRpdCgidGVzdC54bWwiLCBuZXcgTnVsbElucHV0U3RyZWFtKCksIG51bGwpOwotCi0JCS8vIGFsd2F5cyB1c2UgdGhlIHNhbWUgbGluZSBkZWxpbWl0ZXIgZm9yIHRoZXNlIHRlc3RzLCByZWdhcmRsZXNzCi0JCS8vIG9mCi0JCS8vIHBsYWZvcm0gb3IgcHJlZmVyZW5jZSBzZXR0aW5ncwotCQltb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXRMaW5lRGVsaW1pdGVyKFRlc3RXcml0ZXIuY29tbW9uRU9MKTsKLQkJcmV0dXJuIChJRE9NTW9kZWwpIG1vZGVsOwotCi0JfQotCi0JLyoqCi0JICogQmUgc3VyZSB0byByZWxlYXNlIGFueSBtb2RlbHMgb2J0YWluZWQgZnJvbSB0aGlzIG1ldGhvZC4KLQkgKiAKLQkgKiBAcmV0dXJuCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqIEB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbgotCSAqLwotCXByaXZhdGUgc3RhdGljIElET01Nb2RlbCBjcmVhdGVIVE1MTW9kZWwoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBudWxsOwotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0KLQkJbW9kZWwgPSBtb2RlbE1hbmFnZXIuZ2V0TW9kZWxGb3JFZGl0KCJ0ZXN0Lmh0bWwiLCBuZXcgTnVsbElucHV0U3RyZWFtKCksIG51bGwpOwotCi0JCS8vIGFsd2F5cyB1c2UgdGhlIHNhbWUgbGluZSBkZWxpbWl0ZXIgZm9yIHRoZXNlIHRlc3RzLCByZWdhcmRsZXNzCi0JCS8vIG9mCi0JCS8vIHBsYWZvcm0gb3IgcHJlZmVyZW5jZSBzZXR0aW5ncwotCQltb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXRMaW5lRGVsaW1pdGVyKFRlc3RXcml0ZXIuY29tbW9uRU9MKTsKLQkJcmV0dXJuIChJRE9NTW9kZWwpIG1vZGVsOwotCi0JfQotCi0JLyoqCi0JICogQmUgc3VyZSB0byByZWxlYXNlIGFueSBtb2RlbHMgb2J0YWluZWQgZnJvbSB0aGlzIG1ldGhvZC4KLQkgKiAKLQkgKiBAcmV0dXJuCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqIEB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbgotCSAqLwotCXByaXZhdGUgc3RhdGljIElET01Nb2RlbCBjcmVhdGVKU1BNb2RlbCgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0KLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0KLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCi0JCW1vZGVsID0gbW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yRWRpdCgidGVzdC54bWwiLCBuZXcgTnVsbElucHV0U3RyZWFtKCksIG51bGwpOwotCi0JCS8vIGFsd2F5cyB1c2UgdGhlIHNhbWUgbGluZSBkZWxpbWl0ZXIgZm9yIHRoZXNlIHRlc3RzLCByZWdhcmRsZXNzCi0JCS8vIG9mCi0JCS8vIHBsYWZvcm0gb3IgcHJlZmVyZW5jZSBzZXR0aW5ncwotCQltb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXRMaW5lRGVsaW1pdGVyKFRlc3RXcml0ZXIuY29tbW9uRU9MKTsKLQotCi0JCXJldHVybiAoSURPTU1vZGVsKSBtb2RlbDsKLQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9tb2RlbC9UZXN0Q2F0YWxvZ0NvbnRlbnRNb2RlbHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvbW9kZWwvVGVzdENhdGFsb2dDb250ZW50TW9kZWxzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4ZWVlZDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9tb2RlbC9UZXN0Q2F0YWxvZ0NvbnRlbnRNb2RlbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLm1vZGVsOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5IVE1MQ01Qcm9wZXJ0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvckhUTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnV0aWxzLlN0cmluZ1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01Eb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwubW9kZWxxdWVyeS5Nb2RlbFF1ZXJ5VXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0Q2F0YWxvZ0NvbnRlbnRNb2RlbHMgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIGNvbnRlbnRUZW1wbGF0ZSA9ICI8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJVVEYtOFwiID8+XG48IURPQ1RZUEUgaHRtbCAke01FVEhPRH0gJHtQVUJMSUN9ICR7U1lTVEVNfT5cbjxodG1sPlxuPGhlYWQ+XG48dGl0bGU+SW5zZXJ0IHRpdGxlIGhlcmU8L3RpdGxlPlxuPC9oZWFkPlxuPGJvZHk+XG48L2JvZHk+XG48L2h0bWw+IjsKLQotCXB1YmxpYyBUZXN0Q2F0YWxvZ0NvbnRlbnRNb2RlbHMoKSB7Ci0JCXRoaXMoIkhUTUwgQ29udGVudCBNb2RlbHMgZnJvbSBYTUwgQ2F0YWxvZyIpOwotCX0KLQotCXB1YmxpYyBUZXN0Q2F0YWxvZ0NvbnRlbnRNb2RlbHMoU3RyaW5nIHN0cmluZykgewotCQlzdXBlcihzdHJpbmcpOwotCX0KLQotCXByaXZhdGUgdm9pZCBhc3NlcnRJc05vdFhIVE1MQ29udGVudE1vZGVsKElET01Nb2RlbCBodG1sTW9kZWwpIHsKLQkJRWxlbWVudCBodG1sID0gaHRtbE1vZGVsLmdldERvY3VtZW50KCkuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0JCUNNRG9jdW1lbnQgY29ycmVzcG9uZGluZ0NNRG9jdW1lbnQgPSBNb2RlbFF1ZXJ5VXRpbC5nZXRNb2RlbFF1ZXJ5KGh0bWxNb2RlbCkuZ2V0Q29ycmVzcG9uZGluZ0NNRG9jdW1lbnQoaHRtbCk7Ci0JCWFzc2VydE5vdE51bGwoImNvbnRlbnQgbW9kZWwgZG9jdW1lbnQgbm90IGZvdW5kIiwgY29ycmVzcG9uZGluZ0NNRG9jdW1lbnQpOwotCQlhc3NlcnRUcnVlKCJkb2N1bWVudCBpcyB1bmV4cGVjdGVkbHkgWEhUTUwiLCBjb3JyZXNwb25kaW5nQ01Eb2N1bWVudC5zdXBwb3J0cyhIVE1MQ01Qcm9wZXJ0aWVzLklTX1hIVE1MKSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGFzc2VydElzWEhUTUxDb250ZW50TW9kZWwoSURPTU1vZGVsIGh0bWxNb2RlbCkgewotCQlFbGVtZW50IGh0bWwgPSBodG1sTW9kZWwuZ2V0RG9jdW1lbnQoKS5nZXREb2N1bWVudEVsZW1lbnQoKTsKLQkJQ01Eb2N1bWVudCBjb3JyZXNwb25kaW5nQ01Eb2N1bWVudCA9IE1vZGVsUXVlcnlVdGlsLmdldE1vZGVsUXVlcnkoaHRtbE1vZGVsKS5nZXRDb3JyZXNwb25kaW5nQ01Eb2N1bWVudChodG1sKTsKLQkJYXNzZXJ0Tm90TnVsbCgiY29udGVudCBtb2RlbCBkb2N1bWVudCBub3QgZm91bmQiLCBjb3JyZXNwb25kaW5nQ01Eb2N1bWVudCk7Ci0JCWFzc2VydFRydWUoImRvY3VtZW50IGlzIG5vdCBYSFRNTCIsIGNvcnJlc3BvbmRpbmdDTURvY3VtZW50LnN1cHBvcnRzKEhUTUxDTVByb3BlcnRpZXMuSVNfWEhUTUwpKTsKLQl9Ci0KLQlwcml2YXRlIElET01Nb2RlbCBjcmVhdGVIVE1MTW9kZWwoU3RyaW5nIHB1YmxpY0lkLCBTdHJpbmcgc3lzdGVtSWQpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gKElET01Nb2RlbCkgU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5jcmVhdGVVbk1hbmFnZWRTdHJ1Y3R1cmVkTW9kZWxGb3IoQ29udGVudFR5cGVJZEZvckhUTUwuQ29udGVudFR5cGVJRF9IVE1MKTsKLQkJU3RyaW5nIHNvdXJjZSA9IGNyZWF0ZVRlc3RDb250ZW50cyhwdWJsaWNJZCwgc3lzdGVtSWQpOwotCQltb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXQoc291cmNlKTsKLQkJcmV0dXJuIG1vZGVsOwotCX0KLQotCXByaXZhdGUgU3RyaW5nIGNyZWF0ZVRlc3RDb250ZW50cyhTdHJpbmcgcHVibGljSWQsIFN0cmluZyBzeXN0ZW1JZCkgewotCQlTdHJpbmcgcmVzdWx0ID0gbnVsbDsKLQkJaWYgKHN5c3RlbUlkICE9IG51bGwpIHsKLQkJCXJlc3VsdCA9IFN0cmluZ1V0aWxzLnJlcGxhY2UoY29udGVudFRlbXBsYXRlLCAiJHtTWVNURU19IiwgIlwiIiArIHN5c3RlbUlkICsgIlwiIik7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlyZXN1bHQgPSBTdHJpbmdVdGlscy5yZXBsYWNlKGNvbnRlbnRUZW1wbGF0ZSwgIiR7U1lTVEVNfSIsICIiKTsKLQkJfQotCQlpZiAocHVibGljSWQgIT0gbnVsbCkgewotCQkJcmVzdWx0ID0gU3RyaW5nVXRpbHMucmVwbGFjZShjb250ZW50VGVtcGxhdGUsICIke1BVQkxJQ30iLCAiXCIiICsgcHVibGljSWQgKyAiXCIiKTsKLQkJfQotCQllbHNlIHsKLQkJCXJlc3VsdCA9IFN0cmluZ1V0aWxzLnJlcGxhY2UoY29udGVudFRlbXBsYXRlLCAiJHtQVUJMSUN9IiwgIiIpOwotCQl9Ci0JCWlmIChwdWJsaWNJZCAhPSBudWxsICYmIHN5c3RlbUlkICE9IG51bGwpCi0JCQlyZXN1bHQgPSBTdHJpbmdVdGlscy5yZXBsYWNlKGNvbnRlbnRUZW1wbGF0ZSwgIiR7TUVUSE9EfSIsICJQVUJMSUMiKTsKLQkJZWxzZSBpZiAocHVibGljSWQgPT0gbnVsbCAmJiBzeXN0ZW1JZCAhPSBudWxsKQotCQkJcmVzdWx0ID0gU3RyaW5nVXRpbHMucmVwbGFjZShjb250ZW50VGVtcGxhdGUsICIke01FVEhPRH0iLCAiU1lTVEVNIik7Ci0JCWVsc2UKLQkJCXJlc3VsdCA9IFN0cmluZ1V0aWxzLnJlcGxhY2UoY29udGVudFRlbXBsYXRlLCAiJHtNRVRIT0R9IiwgIiIpOwotCi0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENIVE1MZHJhZnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJSURPTU1vZGVsIGh0bWxNb2RlbCA9IGNyZWF0ZUhUTUxNb2RlbCgiLS8vVzNDLy9EVEQgQ29tcGFjdCBIVE1MIDEuMCBEcmFmdC8vRU4iLCBudWxsKTsKLQkJYXNzZXJ0SXNOb3RYSFRNTENvbnRlbnRNb2RlbChodG1sTW9kZWwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RIVE1MNDAxRnJhbWVzZXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJSURPTU1vZGVsIGh0bWxNb2RlbCA9IGNyZWF0ZUhUTUxNb2RlbCgiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIEZyYW1lc2V0Ly9FTiIsICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9mcmFtZXNldC5kdGQiKTsKLQkJYXNzZXJ0SXNOb3RYSFRNTENvbnRlbnRNb2RlbChodG1sTW9kZWwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RIVE1MNDAxU3RyaWN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUlET01Nb2RlbCBodG1sTW9kZWwgPSBjcmVhdGVIVE1MTW9kZWwoIi0vL1czQy8vRFREIEhUTUwgNC4wMS8vRU4iLCAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvc3RyaWN0LmR0ZCIpOwotCQlhc3NlcnRJc05vdFhIVE1MQ29udGVudE1vZGVsKGh0bWxNb2RlbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEhUTUw0MDFUcmFuc2l0aW9uYWwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJSURPTU1vZGVsIGh0bWxNb2RlbCA9IGNyZWF0ZUhUTUxNb2RlbCgiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iLCAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIik7Ci0JCWFzc2VydElzTm90WEhUTUxDb250ZW50TW9kZWwoaHRtbE1vZGVsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0V01MMTEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJSURPTU1vZGVsIGh0bWxNb2RlbCA9IGNyZWF0ZUhUTUxNb2RlbCgiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIsIG51bGwpOwotCQlhc3NlcnRJc1hIVE1MQ29udGVudE1vZGVsKGh0bWxNb2RlbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFdNTDEzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUlET01Nb2RlbCBodG1sTW9kZWwgPSBjcmVhdGVIVE1MTW9kZWwoIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMy8vRU4iLCAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbDEzLmR0ZCIpOwotCQlhc3NlcnRJc1hIVE1MQ29udGVudE1vZGVsKGh0bWxNb2RlbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFhIVE1MMTBCYXNpYygpIHRocm93cyBFeGNlcHRpb24gewotCQlJRE9NTW9kZWwgaHRtbE1vZGVsID0gY3JlYXRlSFRNTE1vZGVsKCItLy9XM0MvL0RURCBYSFRNTCBCYXNpYyAxLjAvL0VOIiwgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLWJhc2ljL3hodG1sLWJhc2ljMTAuZHRkIik7Ci0JCWFzc2VydElzWEhUTUxDb250ZW50TW9kZWwoaHRtbE1vZGVsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0WEhUTUwxMEZyYW1lc2V0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUlET01Nb2RlbCBodG1sTW9kZWwgPSBjcmVhdGVIVE1MTW9kZWwoIi0vL1czQy8vRFREIFhIVE1MIDEuMCBGcmFtZXNldC8vRU4iLCAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtZnJhbWVzZXQuZHRkIik7Ci0JCWFzc2VydElzWEhUTUxDb250ZW50TW9kZWwoaHRtbE1vZGVsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0WEhUTUwxME1vYmlsZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlJRE9NTW9kZWwgaHRtbE1vZGVsID0gY3JlYXRlSFRNTE1vZGVsKCItLy9XQVBGT1JVTS8vRFREIFhIVE1MIE1vYmlsZSAxLjAvL0VOIiwgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC94aHRtbC1tb2JpbGUxMC5kdGQiKTsKLQkJYXNzZXJ0SXNYSFRNTENvbnRlbnRNb2RlbChodG1sTW9kZWwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RYSFRNTDEwU3RyaWN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUlET01Nb2RlbCBodG1sTW9kZWwgPSBjcmVhdGVIVE1MTW9kZWwoIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiwgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5kdGQiKTsKLQkJYXNzZXJ0SXNYSFRNTENvbnRlbnRNb2RlbChodG1sTW9kZWwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RYSFRNTDEwVHJhbnNpdGlvbmFsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUlET01Nb2RlbCBodG1sTW9kZWwgPSBjcmVhdGVIVE1MTW9kZWwoIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiwgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiKTsKLQkJYXNzZXJ0SXNYSFRNTENvbnRlbnRNb2RlbChodG1sTW9kZWwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RYSFRNTDExKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUlET01Nb2RlbCBodG1sTW9kZWwgPSBjcmVhdGVIVE1MTW9kZWwoIi0vL1czQy8vRFREIFhIVE1MIDEuMS8vRU4iLCAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxMS9EVEQveGh0bWwxMS5kdGQiKTsKLQkJYXNzZXJ0SXNYSFRNTENvbnRlbnRNb2RlbChodG1sTW9kZWwpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvbW9kZWwvVGVzdEZvck5QRUluQ1NTQ3JlYXRpb24uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvbW9kZWwvVGVzdEZvck5QRUluQ1NTQ3JlYXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzRiZjg3ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL21vZGVsL1Rlc3RGb3JOUEVJbkNTU0NyZWF0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLm1vZGVsOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmFkYXB0ZXJzLklTdHlsZVNoZWV0QWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSUNTU1N0eWxlUnVsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSUNTU1N0eWxlU2hlZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5IVE1MNDBOYW1lc3BhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy51dGlscy5GaWxlVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU5vZGVOb3RpZmllcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0Rm9yTlBFSW5DU1NDcmVhdGlvbiBleHRlbmRzIFRlc3RDYXNlIHsKLQotCi0JcHVibGljIHZvaWQgdGVzdENTU01vZGVsKCkgewotCi0JCUlET01Nb2RlbCBtb2RlbCA9IEZpbGVVdGlsLmNyZWF0ZUhUTUxNb2RlbCgpOwotCi0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJc3RydWN0dXJlZERvY3VtZW50LnNldChnZXRIVE1MRG9jdW1lbnRUZXh0KCkpOwotCi0JCQlJRE9NRG9jdW1lbnQgZG9jID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJLy8gZ2V0IGhlYWQgdGFnCi0JCQlOb2RlTGlzdCBsaXN0ID0gZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKEhUTUw0ME5hbWVzcGFjZS5FbGVtZW50TmFtZS5IRUFEKTsKLQkJCUVsZW1lbnQgaGVhZCA9IChFbGVtZW50KSBsaXN0Lml0ZW0oMCk7Ci0KLQkJCS8vIGNyZWF0ZSBhbmQgYXBwZW5kIHN0eWxlIGVsZW1lbnQKLQkJCUVsZW1lbnQgZWxlID0gZG9jLmNyZWF0ZUVsZW1lbnQoSFRNTDQwTmFtZXNwYWNlLkVsZW1lbnROYW1lLlNUWUxFKTsKLQkJCWVsZS5zZXRBdHRyaWJ1dGUoSFRNTDQwTmFtZXNwYWNlLkFUVFJfTkFNRV9UWVBFLCAidGV4dC9jc3MiKTsKLQotCQkJU3RyaW5nIGRlbGltID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuZ2V0TGluZURlbGltaXRlcigpOwotCQkJaWYgKGRlbGltID09IG51bGwpCi0JCQkJZGVsaW0gPSAiXG4iOy8vJE5PTi1OTFMtMSQKLQkJCVN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKGRlbGltKTsKLQkJCWJ1ZmZlci5hcHBlbmQoIjwhLS0iKTsvLyROT04tTkxTLTEkCi0JCQlidWZmZXIuYXBwZW5kKGRlbGltKTsKLQkJCWJ1ZmZlci5hcHBlbmQoIi0tPiIpOy8vJE5PTi1OTFMtMSQKLQkJCWJ1ZmZlci5hcHBlbmQoZGVsaW0pOwotCQkJVGV4dCB0ZXh0ID0gZG9jLmNyZWF0ZVRleHROb2RlKGJ1ZmZlci50b1N0cmluZygpKTsKLQkJCWVsZS5hcHBlbmRDaGlsZCh0ZXh0KTsKLQotCQkJaGVhZC5pbnNlcnRCZWZvcmUoZWxlLCBudWxsKTsKLQotCQkJLy8gZ2V0IGFkYXB0ZXIgZm9yIFN0eWxlU2hlZXQKLQkJCUlDU1NTdHlsZVNoZWV0IHNoZWV0ID0gKElDU1NTdHlsZVNoZWV0KSAoKElTdHlsZVNoZWV0QWRhcHRlcikgKChJTm9kZU5vdGlmaWVyKSBlbGUpLmdldEFkYXB0ZXJGb3IoSVN0eWxlU2hlZXRBZGFwdGVyLmNsYXNzKSkuZ2V0U2hlZXQoKTsKLQotCQkJLy8gY3JlYXRlIHN0eWxlIGRlY2xhcmF0aW9uCi0JCQlJQ1NTU3R5bGVSdWxlIHJ1bGUgPSBzaGVldC5jcmVhdGVDU1NTdHlsZVJ1bGUoKTsKLQkJCXJ1bGUuZ2V0U3R5bGUoKS5zZXRQcm9wZXJ0eSgiYmFja2dyb3VuZC1jb2xvciIsICJsaW1lIiwgIiIpOwotCQkJcnVsZS5nZXRTdHlsZSgpLnNldFByb3BlcnR5KCJiYWNrZ3JvdW5kLWNvbG9yIiwgImJsdWUiLCAiIik7Ci0JCQlydWxlLmdldFN0eWxlKCkuc2V0UHJvcGVydHkoImJhY2tncm91bmQtY29sb3IiLCAiIzAwODBmZiIsICIiKTsKLQotCQkJLy9tb2RlbC5zYXZlKCk7Ci0KLQotCQl9Ci0KLQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQotCX0KLQotCXByaXZhdGUgU3RyaW5nIGdldEhUTUxEb2N1bWVudFRleHQoKSB7Ci0JCXJldHVybiAiPGh0bWw+PGhlYWQ+PC9oZWFkPjxib2R5PjwvYm9keT48L2h0bWw+IjsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0FsbE1vZGVsUGFyc2VyVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0FsbE1vZGVsUGFyc2VyVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGVkMjI1Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9BbGxNb2RlbFBhcnNlclRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotCi1wdWJsaWMgY2xhc3MgQWxsTW9kZWxQYXJzZXJUZXN0cyB7Ci0KLQkvLwlwdWJsaWMgQWxsTW9kZWxQYXJzZXJUZXN0cyhTdHJpbmcgbmFtZSkgewotCS8vCQkvL3N1cGVyKG5hbWUpOwotCS8vCX0KLQotCXB1YmxpYyB2b2lkIGhvbGRPbGRUZXN0TWFpbigpIHsKLQkJcnVuVGVzdChuZXcgUGFyc2VyVGVzdCgpKTsKLQkJcnVuVGVzdChuZXcgUGFyc2VyVGVzdDIoKSk7Ci0JCXJ1blRlc3QobmV3IFBhcnNlclRlc3QzKCkpOwotCQlydW5UZXN0KG5ldyBQYXJzZXJUZXN0NCgpKTsKLQkJcnVuVGVzdChuZXcgVXBkYXRlclRlc3QoKSk7Ci0JCXJ1blRlc3QobmV3IFVwZGF0ZXJUZXN0MigpKTsKLQkJcnVuVGVzdChuZXcgVXBkYXRlclRlc3QzKCkpOwotCQlydW5UZXN0KG5ldyBVcGRhdGVyVGVzdDQoKSk7Ci0JCXJ1blRlc3QobmV3IFVwZGF0ZXJUZXN0NSgpKTsKLQkJcnVuVGVzdChuZXcgVXBkYXRlclRlc3Q2KCkpOwotCQlydW5UZXN0KG5ldyBVcGRhdGVyVGVzdDcoKSk7Ci0JCXJ1blRlc3QobmV3IFVwZGF0ZXJUZXN0OCgpKTsKLQkJcnVuVGVzdChuZXcgVXBkYXRlclRlc3Q5KCkpOwotCQlydW5UZXN0KG5ldyBVcGRhdGVyVGVzdDEwKCkpOwotCQlydW5UZXN0KG5ldyBVcGRhdGVyVGVzdDExKCkpOwotCQlydW5UZXN0KG5ldyBVcGRhdGVyVGVzdDEyKCkpOwotCQlydW5UZXN0KG5ldyBVcGRhdGVyVGVzdDEzKCkpOwotCQlydW5UZXN0KG5ldyBVcGRhdGVyVGVzdDE0KCkpOwotCQlydW5UZXN0KG5ldyBFbGVtZW50VGVzdCgpKTsKLQkJcnVuVGVzdChuZXcgRWxlbWVudFRlc3QyKCkpOwotCQlydW5UZXN0KG5ldyBFbGVtZW50VGVzdDMoKSk7Ci0JCXJ1blRlc3QobmV3IFRhYmxlVGVzdCgpKTsKLQkJcnVuVGVzdChuZXcgVGV4dFRlc3QoKSk7Ci0JCXJ1blRlc3QobmV3IFRleHRUZXN0MigpKTsKLQkJcnVuVGVzdChuZXcgVGV4dFRlc3QzKCkpOwotCQlydW5UZXN0KG5ldyBTcGxpdFRleHRUZXN0KCkpOwotCQlydW5UZXN0KG5ldyBTcGxpdFRleHRUZXN0MigpKTsKLQkJcnVuVGVzdChuZXcgU3BsaXRUZXh0VGVzdDMoKSk7Ci0JCXJ1blRlc3QobmV3IFNwbGl0VGV4dFRlc3Q0KCkpOwotCQlydW5UZXN0KG5ldyBTcGxpdFRleHRUZXN0NSgpKTsKLQkJcnVuVGVzdChuZXcgU3BsaXRUZXh0VGVzdDYoKSk7Ci0JCXJ1blRlc3QobmV3IFNwbGl0VGV4dFRlc3Q3KCkpOwotCQlydW5UZXN0KG5ldyBTcGxpdFRleHRUZXN0OCgpKTsKLQkJcnVuVGVzdChuZXcgRW1wdHlUZXh0VGVzdCgpKTsKLQkJcnVuVGVzdChuZXcgRW1wdHlUZXh0VGVzdDIoKSk7Ci0JCXJ1blRlc3QobmV3IEVtcHR5VGV4dFRlc3QzKCkpOwotCQlydW5UZXN0KG5ldyBBdHRyVGVzdCgpKTsKLQkJcnVuVGVzdChuZXcgQXR0clRlc3QyKCkpOwotCQlydW5UZXN0KG5ldyBFbnRpdHlUZXN0KCkpOwotCQlydW5UZXN0KG5ldyBFbnRpdHlUZXN0MigpKTsKLQkJcnVuVGVzdChuZXcgRW50aXR5VGVzdDMoKSk7Ci0JCXJ1blRlc3QobmV3IEVudGl0eVRlc3Q0KCkpOwotCQlydW5UZXN0KG5ldyBFbnRpdHlUZXN0NSgpKTsKLQkJcnVuVGVzdChuZXcgRW50aXR5VGVzdDYoKSk7Ci0JCXJ1blRlc3QobmV3IEVudGl0eVRlc3Q3KCkpOwotCQlydW5UZXN0KG5ldyBFbnRpdHlUZXN0OCgpKTsKLQkJcnVuVGVzdChuZXcgRW50aXR5VGVzdDkoKSk7Ci0JCXJ1blRlc3QobmV3IERvY1R5cGVUZXN0KCkpOwotCQlydW5UZXN0KG5ldyBDREFUQVNlY3Rpb25UZXN0KCkpOwotCQlydW5UZXN0KG5ldyBDREFUQVNlY3Rpb25UZXN0MigpKTsKLQkJcnVuVGVzdChuZXcgQ0RBVEFTZWN0aW9uVGVzdDMoKSk7Ci0JCXJ1blRlc3QobmV3IFBJVGVzdCgpKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFRlc3RTdWl0ZSBnZXRBbGxUZXN0cygpIHsKLQotCi0JCVRlc3RTdWl0ZSB0ZXN0U3VpdGUgPSBuZXcgVGVzdFN1aXRlKCk7Ci0KLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShQYXJzZXJUZXN0LmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShQYXJzZXJUZXN0Mi5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoUGFyc2VyVGVzdDMuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKFBhcnNlclRlc3Q0LmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShVcGRhdGVyVGVzdC5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoVXBkYXRlclRlc3QyLmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShVcGRhdGVyVGVzdDMuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKFVwZGF0ZXJUZXN0NC5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoVXBkYXRlclRlc3Q1LmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShVcGRhdGVyVGVzdDYuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKFVwZGF0ZXJUZXN0Ny5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoVXBkYXRlclRlc3Q4LmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShVcGRhdGVyVGVzdDkuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKFVwZGF0ZXJUZXN0MTAuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKFVwZGF0ZXJUZXN0MTEuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKFVwZGF0ZXJUZXN0MTIuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKFVwZGF0ZXJUZXN0MTMuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKFVwZGF0ZXJUZXN0MTQuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKEVsZW1lbnRUZXN0LmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShFbGVtZW50VGVzdDIuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKEVsZW1lbnRUZXN0My5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoVGFibGVUZXN0LmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShUZXh0VGVzdC5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoVGV4dFRlc3QyLmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShUZXh0VGVzdDMuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKFNwbGl0VGV4dFRlc3QuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKFNwbGl0VGV4dFRlc3QyLmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShTcGxpdFRleHRUZXN0My5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoU3BsaXRUZXh0VGVzdDQuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKFNwbGl0VGV4dFRlc3Q1LmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShTcGxpdFRleHRUZXN0Ni5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoU3BsaXRUZXh0VGVzdDcuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKFNwbGl0VGV4dFRlc3Q4LmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShFbXB0eVRleHRUZXN0LmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShFbXB0eVRleHRUZXN0Mi5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoRW1wdHlUZXh0VGVzdDMuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKEF0dHJUZXN0LmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShBdHRyVGVzdDIuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKEVudGl0eVRlc3QuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKEVudGl0eVRlc3QyLmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShFbnRpdHlUZXN0My5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoRW50aXR5VGVzdDQuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKEVudGl0eVRlc3Q1LmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShFbnRpdHlUZXN0Ni5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoRW50aXR5VGVzdDcuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKEVudGl0eVRlc3Q4LmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShFbnRpdHlUZXN0OS5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoRG9jVHlwZVRlc3QuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKENEQVRBU2VjdGlvblRlc3QuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKENEQVRBU2VjdGlvblRlc3QyLmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShDREFUQVNlY3Rpb25UZXN0My5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoUElUZXN0LmNsYXNzKTsKLQkJLy8gdGhlIGZvbGxvdyBpcyBmYWlybHkgbG9uZyBydW5uaW5nCi0JCS8vdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShUZXN0RXhhbXBsZUZpbGVzLmNsYXNzKTsKLQotCQlyZXR1cm4gdGVzdFN1aXRlOwotCX0KLQotCi0KLQlwcml2YXRlIHZvaWQgcnVuVGVzdChNb2RlbFRlc3QgdGVzdCkgewotCQl0cnkgewotCQkJdGVzdC50ZXN0TW9kZWwoKTsKLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JCQlNb2RlbFRlc3QucHJpbnRFeGNlcHRpb24oZXgpOwotCQl9Ci0JfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvQXR0clRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0F0dHJUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxNjE3MTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvQXR0clRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLQotcHVibGljIGNsYXNzIEF0dHJUZXN0IGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgQXR0clRlc3QuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgQXR0clRlc3QoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIEF0dHJUZXN0KCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBBdHRyVGVzdCgpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlSFRNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJLy9Eb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5zZXRUZXh0KHRoaXMsICI8YSBocmVmPVwiPCU9YyU+XCI+YTwvYT4iKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvQXR0clRlc3QyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9BdHRyVGVzdDIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODZiNDRjMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9BdHRyVGVzdDIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBBdHRyVGVzdDIgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBBdHRyVGVzdDIuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgQXR0clRlc3QyKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBBdHRyVGVzdDIoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IEF0dHJUZXN0MigpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotCQkJYS5zZXRBdHRyaWJ1dGUoImIiLCAiYyIpOwotCQkJYS5zZXRBdHRyaWJ1dGUoImQiLCAiZSIpOwotCQkJVGV4dCB0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoImYiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKGEpOwotCQkJYS5hcHBlbmRDaGlsZCh0KTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJQXR0ciBiID0gYS5nZXRBdHRyaWJ1dGVOb2RlKCJiIik7Ci0JCQliLnNldFByZWZpeCgieCIpOwotCi0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oImIubmFtZT0iICsgYi5nZXROYW1lKCkpOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJiLnZhbHVlPSIgKyBiLmdldFZhbHVlKCkpOwotCQkJU3RyaW5nIGFiID0gYS5nZXRBdHRyaWJ1dGUoImIiKTsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigiYSBiPSIgKyBhYik7Ci0JCQlTdHJpbmcgYXhiID0gYS5nZXRBdHRyaWJ1dGUoIng6YiIpOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJhIHg6Yj0iICsgYXhiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJYS5nZXRBdHRyaWJ1dGVOb2RlKCJkIikuc2V0UHJlZml4KCJ5Iik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9BdHRyVGVzdDMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0F0dHJUZXN0My5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjMxNWMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0F0dHJUZXN0My5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotcHVibGljIGNsYXNzIEF0dHJUZXN0MyBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEF0dHJUZXN0My4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBBdHRyVGVzdDMoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIEF0dHJUZXN0MygpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgQXR0clRlc3QzKCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVYTUxNb2RlbCgpOwotCQl0cnkgewotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnNldFRleHQodGhpcywgIjxhIHhtbG5zPSdkZWZhdWx0LXVyaScgeG1sbnM6Yj0nYi11cmknPjxjIGQ9J2QtdmFsdWUnIGI6ZT0nZS12YWx1ZScvPjwvYT4iKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJRWxlbWVudCBhID0gKEVsZW1lbnQpIGRvY3VtZW50LmdldEZpcnN0Q2hpbGQoKTsKLQkJCUVsZW1lbnQgYyA9IChFbGVtZW50KSBhLmdldEZpcnN0Q2hpbGQoKTsKLQotCQkJQXR0ciB4bWxucyA9IGEuZ2V0QXR0cmlidXRlTm9kZSgieG1sbnMiKTsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigieG1sbnMgWyIgKyB4bWxucy5nZXROYW1lc3BhY2VVUkkoKSArICJdIik7Ci0JCQlBdHRyIHhtbG5zX2IgPSBhLmdldEF0dHJpYnV0ZU5vZGUoInhtbG5zOmIiKTsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigieG1sbnM6YiBbIiArIHhtbG5zX2IuZ2V0TmFtZXNwYWNlVVJJKCkgKyAiXSIpOwotCQkJQXR0ciBkID0gYy5nZXRBdHRyaWJ1dGVOb2RlKCJkIik7Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oImQgWyIgKyBkLmdldE5hbWVzcGFjZVVSSSgpICsgIl0iKTsKLQkJCUF0dHIgYl9lID0gYy5nZXRBdHRyaWJ1dGVOb2RlKCJiOmUiKTsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigiYjplIFsiICsgYl9lLmdldE5hbWVzcGFjZVVSSSgpICsgIl0iKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0NEQVRBU2VjdGlvblRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0NEQVRBU2VjdGlvblRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTRhMDhmNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9DREFUQVNlY3Rpb25UZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uQ0RBVEFTZWN0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLXB1YmxpYyBjbGFzcyBDREFUQVNlY3Rpb25UZXN0IGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgQ0RBVEFTZWN0aW9uVGVzdC4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBDREFUQVNlY3Rpb25UZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBDREFUQVNlY3Rpb25UZXN0KCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBDREFUQVNlY3Rpb25UZXN0KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVYTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnNldFRleHQodGhpcywgIjxhPjwhW0NEQVRBW2NvbnRlbnRPZkNEQVRBU2VjdGlvbl1dPjwvYT4iKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJTm9kZSBhID0gZG9jdW1lbnQuZ2V0Rmlyc3RDaGlsZCgpOwotCQkJZm9yIChOb2RlIGNoaWxkID0gYS5nZXRGaXJzdENoaWxkKCk7IGNoaWxkICE9IG51bGw7IGNoaWxkID0gY2hpbGQuZ2V0TmV4dFNpYmxpbmcoKSkgewotCQkJCWlmIChjaGlsZC5nZXROb2RlVHlwZSgpICE9IE5vZGUuQ0RBVEFfU0VDVElPTl9OT0RFKQotCQkJCQljb250aW51ZTsKLQkJCQlDREFUQVNlY3Rpb24gY2RhdGEgPSAoQ0RBVEFTZWN0aW9uKSBjaGlsZDsKLQkJCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oY2RhdGEuZ2V0RGF0YSgpKTsKLQkJCX0KLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvQ0RBVEFTZWN0aW9uVGVzdDIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0NEQVRBU2VjdGlvblRlc3QyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjNjZlNmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvQ0RBVEFTZWN0aW9uVGVzdDIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uQ0RBVEFTZWN0aW9uOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBDREFUQVNlY3Rpb25UZXN0MiBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIENEQVRBU2VjdGlvblRlc3QyLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIENEQVRBU2VjdGlvblRlc3QyKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBDREFUQVNlY3Rpb25UZXN0MigpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgQ0RBVEFTZWN0aW9uVGVzdDIoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVhNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCUVsZW1lbnQgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKGEpOwotCQkJQ0RBVEFTZWN0aW9uIGNkYXRhID0gZG9jdW1lbnQuY3JlYXRlQ0RBVEFTZWN0aW9uKCJjb250ZW50T2ZDREFUQVNlY3Rpb24iKTsKLQkJCWEuYXBwZW5kQ2hpbGQoY2RhdGEpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oY2RhdGEuZ2V0RGF0YSgpKTsKLQotCQkJY2RhdGEuc2V0RGF0YSgibmV3IGNvbnRlbnQiKTsKLQotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oY2RhdGEuZ2V0RGF0YSgpKTsKLQotCQkJY2RhdGEuc2V0RGF0YSgibmV3IGNvbnRlbnQiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKGNkYXRhLmdldERhdGEoKSk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0NEQVRBU2VjdGlvblRlc3QzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9DREFUQVNlY3Rpb25UZXN0My5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZTdjYzNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0NEQVRBU2VjdGlvblRlc3QzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkNEQVRBU2VjdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgQ0RBVEFTZWN0aW9uVGVzdDMgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBDREFUQVNlY3Rpb25UZXN0My4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBDREFUQVNlY3Rpb25UZXN0MyhTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgQ0RBVEFTZWN0aW9uVGVzdDMoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IENEQVRBU2VjdGlvblRlc3QzKCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVYTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlFbGVtZW50IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Ci0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChhKTsKLQkJCUNEQVRBU2VjdGlvbiBjZGF0YSA9IGRvY3VtZW50LmNyZWF0ZUNEQVRBU2VjdGlvbigiY29udGVudE9mQ0RBVEFTZWN0aW9uIik7Ci0JCQlhLmFwcGVuZENoaWxkKGNkYXRhKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKGNkYXRhLmdldERhdGEoKSk7Ci0KLQkJCWNkYXRhLnNldERhdGEoIm5ldyA8IGNvbnRlbnQiKTsKLQotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oY2RhdGEuZ2V0RGF0YSgpKTsKLQotCQkJY2RhdGEuc2V0RGF0YSgibmV3ID4gY29udGVudCIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oY2RhdGEuZ2V0RGF0YSgpKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRG9jVHlwZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0RvY1R5cGVUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4NDc2NWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRG9jVHlwZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Eb2N1bWVudFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgRG9jVHlwZVRlc3QgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBEb2NUeXBlVGVzdC4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBEb2NUeXBlVGVzdChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgRG9jVHlwZVRlc3QoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IERvY1R5cGVUZXN0KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVIVE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCUlET01Eb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCUlET01Eb2N1bWVudFR5cGUgZG9jVHlwZSA9IChJRE9NRG9jdW1lbnRUeXBlKSBkb2N1bWVudC5jcmVhdGVEb2N0eXBlKCJIVE1MIik7Ci0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChkb2NUeXBlKTsKLQkJCUVsZW1lbnQgaHRtbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkhUTUwiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKGh0bWwpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlkb2NUeXBlLnNldFN5c3RlbUlkKCJzeXRlbSIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlkb2NUeXBlLnNldFB1YmxpY0lkKCJwdWJsaWMiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJZG9jdW1lbnQuaW5zZXJ0QmVmb3JlKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIgIiksIGRvY1R5cGUpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRWxlbWVudFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VsZW1lbnRUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkMDcxNGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRWxlbWVudFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTmFtZWROb2RlTWFwOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLXB1YmxpYyBjbGFzcyBFbGVtZW50VGVzdCBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEVsZW1lbnRUZXN0LgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIEVsZW1lbnRUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBFbGVtZW50VGVzdCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgRWxlbWVudCBjaGFuZ2VUYWdOYW1lKEVsZW1lbnQgZWxlbWVudCwgU3RyaW5nIHRhZ05hbWUpIHsKLQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBlbGVtZW50LmdldE93bmVyRG9jdW1lbnQoKTsKLQkJTm9kZSBwYXJlbnQgPSBlbGVtZW50LmdldFBhcmVudE5vZGUoKTsKLQkJRWxlbWVudCBuZXdFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTsKLQkJTmFtZWROb2RlTWFwIGF0dHJpYnV0ZXMgPSBlbGVtZW50LmdldEF0dHJpYnV0ZXMoKTsKLQkJd2hpbGUgKGF0dHJpYnV0ZXMuZ2V0TGVuZ3RoKCkgPiAwKSB7Ci0JCQlBdHRyIGF0dHIgPSAoQXR0cikgYXR0cmlidXRlcy5pdGVtKDApOwotCQkJYXR0ciA9IGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlTm9kZShhdHRyKTsKLQkJCW5ld0VsZW1lbnQuc2V0QXR0cmlidXRlTm9kZShhdHRyKTsKLQkJfQotCQl3aGlsZSAoZWxlbWVudC5oYXNDaGlsZE5vZGVzKCkpIHsKLQkJCU5vZGUgY2hpbGQgPSBlbGVtZW50LmdldEZpcnN0Q2hpbGQoKTsKLQkJCWNoaWxkID0gZWxlbWVudC5yZW1vdmVDaGlsZChjaGlsZCk7Ci0JCQluZXdFbGVtZW50LmFwcGVuZENoaWxkKGNoaWxkKTsKLQkJfQotCQlwYXJlbnQuaW5zZXJ0QmVmb3JlKG5ld0VsZW1lbnQsIGVsZW1lbnQpOwotCQlwYXJlbnQucmVtb3ZlQ2hpbGQoZWxlbWVudCk7Ci0JCXJldHVybiBuZXdFbGVtZW50OwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBFbGVtZW50VGVzdCgpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCAwLCAwLCAiPGE+PGIgZT1cImZcIiBjPVwiZFwiPjxnIC8+PGggLz48L2I+PC9hPiIpOwotCQkJTm9kZSBhID0gZG9jdW1lbnQuZ2V0Rmlyc3RDaGlsZCgpOwotCQkJRWxlbWVudCBiID0gKEVsZW1lbnQpIGEuZ2V0Rmlyc3RDaGlsZCgpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQkvL0VsZW1lbnQgaSA9Ci0JCQljaGFuZ2VUYWdOYW1lKGIsICJpIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbGVtZW50VGVzdDIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VsZW1lbnRUZXN0Mi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTIyODJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VsZW1lbnRUZXN0Mi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBFbGVtZW50VGVzdDIgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBFbGVtZW50VGVzdDIuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgRWxlbWVudFRlc3QyKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBFbGVtZW50VGVzdDIoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IEVsZW1lbnRUZXN0MigpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotCQkJRWxlbWVudCBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYiIpOwotCQkJVGV4dCB0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoImMiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKGEpOwotCQkJYS5hcHBlbmRDaGlsZChiKTsKLQkJCWIuYXBwZW5kQ2hpbGQodCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCWEuc2V0UHJlZml4KCJ4Iik7Ci0KLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigiYS50YWdOYW1lPSIgKyBhLmdldFRhZ05hbWUoKSk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCWIuc2V0UHJlZml4KCJ5Iik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbGVtZW50VGVzdDMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VsZW1lbnRUZXN0My5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTQxNTYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VsZW1lbnRUZXN0My5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBFbGVtZW50VGVzdDMgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBFbGVtZW50VGVzdDMuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgRWxlbWVudFRlc3QzKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBFbGVtZW50VGVzdDMoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IEVsZW1lbnRUZXN0MygpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgieDphIik7Ci0JCQlFbGVtZW50IGIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJiIik7Ci0JCQlUZXh0IHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiYyIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQoYSk7Ci0JCQlhLmFwcGVuZENoaWxkKGIpOwotCQkJYi5hcHBlbmRDaGlsZCh0KTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJYS5zZXRQcmVmaXgoIiIpOwotCi0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oImEudGFnTmFtZT0iICsgYS5nZXRUYWdOYW1lKCkpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlhLnNldFByZWZpeCgieSIpOwotCi0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oImEudGFnTmFtZT0iICsgYS5nZXRUYWdOYW1lKCkpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlhLnNldFByZWZpeCgieSIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbXB0eVRleHRUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbXB0eVRleHRUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxMzNjODAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRW1wdHlUZXh0VGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBFbXB0eVRleHRUZXN0IGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRW1wdHlUZXh0VGVzdC4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBFbXB0eVRleHRUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBFbXB0eVRleHRUZXN0KCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBFbXB0eVRleHRUZXN0KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVIVE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiUCIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQocCk7Ci0JCQlUZXh0IHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiYSIpOwotCQkJcC5hcHBlbmRDaGlsZCh0ZXh0KTsKLQkJCUVsZW1lbnQgYnIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJCUiIpOwotCQkJcC5hcHBlbmRDaGlsZChicik7Ci0JCQlUZXh0IHRleHQyID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiIpOwotCQkJcC5hcHBlbmRDaGlsZCh0ZXh0Mik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCVRleHQgdGV4dDMgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIik7Ci0JCQlwLmluc2VydEJlZm9yZSh0ZXh0MywgdGV4dDIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQl0ZXh0My5zZXREYXRhKCJiIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXAucmVtb3ZlQ2hpbGQodGV4dDIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRW1wdHlUZXh0VGVzdDIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VtcHR5VGV4dFRlc3QyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4OGY0MWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRW1wdHlUZXh0VGVzdDIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotCi1wdWJsaWMgY2xhc3MgRW1wdHlUZXh0VGVzdDIgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBFbXB0eVRleHRUZXN0Mi4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBFbXB0eVRleHRUZXN0MihTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgRW1wdHlUZXh0VGVzdDIoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IEVtcHR5VGV4dFRlc3QyKCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVIVE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiUCIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQocCk7Ci0JCQlUZXh0IHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIik7Ci0JCQlwLmFwcGVuZENoaWxkKHRleHQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQl0ZXh0LnNldERhdGEoImEiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJdGV4dC5zZXREYXRhKCIiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJRWxlbWVudCBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiQiIpOwotCQkJcC5hcHBlbmRDaGlsZChiKTsKLQkJCXAucmVtb3ZlQ2hpbGQodGV4dCk7Ci0JCQliLmFwcGVuZENoaWxkKHRleHQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQl0ZXh0LnNldERhdGEoImEiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VtcHR5VGV4dFRlc3QzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbXB0eVRleHRUZXN0My5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZWNlZGZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VtcHR5VGV4dFRlc3QzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uVGV4dDsKLQotcHVibGljIGNsYXNzIEVtcHR5VGV4dFRlc3QzIGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRW1wdHlUZXh0VGVzdDMuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgRW1wdHlUZXh0VGVzdDMoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIEVtcHR5VGV4dFRlc3QzKCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBFbXB0eVRleHRUZXN0MygpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJVGV4dCB0ZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQodGV4dCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCUVsZW1lbnQgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLQkJCWRvY3VtZW50Lmluc2VydEJlZm9yZShhLCB0ZXh0KTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VudGl0eVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VudGl0eVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjE1NGZlMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbnRpdHlUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uVGV4dDsKLQotcHVibGljIGNsYXNzIEVudGl0eVRlc3QgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBFbnRpdHlUZXN0LgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIEVudGl0eVRlc3QoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIEVudGl0eVRlc3QoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IEVudGl0eVRlc3QoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZUhUTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlFbGVtZW50IHAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJQIik7Ci0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChwKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJVGV4dCB0ZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiZndDsiKTsKLQkJCXAuYXBwZW5kQ2hpbGQodGV4dCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbnRpdHlUZXN0Mi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRW50aXR5VGVzdDIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTU5OGJiZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbnRpdHlUZXN0Mi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBFbnRpdHlUZXN0MiBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEVudGl0eVRlc3QyLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIEVudGl0eVRlc3QyKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBFbnRpdHlUZXN0MigpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgRW50aXR5VGVzdDIoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZUhUTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlFbGVtZW50IHAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJQIik7Ci0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChwKTsKLQkJCVRleHQgdGV4dCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJhIik7Ci0JCQlwLmFwcGVuZENoaWxkKHRleHQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQl0ZXh0LnNldERhdGEoImEmZ3Q7Iik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VudGl0eVRlc3QzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbnRpdHlUZXN0My5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTlkMGQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VudGl0eVRlc3QzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uVGV4dDsKLQotcHVibGljIGNsYXNzIEVudGl0eVRlc3QzIGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRW50aXR5VGVzdDMuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgRW50aXR5VGVzdDMoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIEVudGl0eVRlc3QzKCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBFbnRpdHlUZXN0MygpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlSFRNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCUVsZW1lbnQgcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlAiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKHApOwotCQkJVGV4dCB0ZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoImEiKTsKLQkJCXAuYXBwZW5kQ2hpbGQodGV4dCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXRleHQuc2V0RGF0YSgiYWIiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJdGV4dC5zZXREYXRhKCJhYiYiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJdGV4dC5zZXREYXRhKCJhYiZjIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXRleHQuc2V0RGF0YSgiZGFiJmMiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJdGV4dC5zZXREYXRhKCJkYWImY2UiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCi0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRW50aXR5VGVzdDQuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VudGl0eVRlc3Q0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwNzIzODQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRW50aXR5VGVzdDQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotCi1wdWJsaWMgY2xhc3MgRW50aXR5VGVzdDQgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBFbnRpdHlUZXN0NC4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBFbnRpdHlUZXN0NChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgRW50aXR5VGVzdDQoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IEVudGl0eVRlc3Q0KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVIVE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiUCIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQocCk7Ci0JCQlUZXh0IHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiYSZiIik7Ci0JCQlwLmFwcGVuZENoaWxkKHRleHQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlUZXh0IHRleHQyID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiIpOwotCQkJcC5pbnNlcnRCZWZvcmUodGV4dDIsIHRleHQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQl0ZXh0Mi5zZXREYXRhKCJjIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXRleHQyLnNldERhdGEoImNhJmIiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJcC5yZW1vdmVDaGlsZCh0ZXh0KTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCi0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRW50aXR5VGVzdDUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VudGl0eVRlc3Q1LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2N2Q0YWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRW50aXR5VGVzdDUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotCi1wdWJsaWMgY2xhc3MgRW50aXR5VGVzdDUgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBFbnRpdHlUZXN0NS4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBFbnRpdHlUZXN0NShTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgRW50aXR5VGVzdDUoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IEVudGl0eVRlc3Q1KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVIVE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiUCIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQocCk7Ci0JCQlUZXh0IHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiYSZiIik7Ci0JCQlwLmFwcGVuZENoaWxkKHRleHQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlUZXh0IHRleHQyID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoImEmYiIpOwotCQkJcC5pbnNlcnRCZWZvcmUodGV4dDIsIHRleHQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbnRpdHlUZXN0Ni5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRW50aXR5VGVzdDYuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWIyMWY4ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbnRpdHlUZXN0Ni5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBFbnRpdHlUZXN0NiBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEVudGl0eVRlc3Q2LgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIEVudGl0eVRlc3Q2KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBFbnRpdHlUZXN0NigpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgRW50aXR5VGVzdDYoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZUhUTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlFbGVtZW50IHAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJQIik7Ci0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChwKTsKLQkJCVRleHQgdGV4dCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJhJiIpOwotCQkJcC5hcHBlbmRDaGlsZCh0ZXh0KTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJVGV4dCB0ZXh0MiA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJhJiIpOwotCQkJcC5pbnNlcnRCZWZvcmUodGV4dDIsIHRleHQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbnRpdHlUZXN0Ny5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRW50aXR5VGVzdDcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzFjOGRkOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbnRpdHlUZXN0Ny5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotCi1wdWJsaWMgY2xhc3MgRW50aXR5VGVzdDcgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBFbnRpdHlUZXN0Ny4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBFbnRpdHlUZXN0NyhTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgRW50aXR5VGVzdDcoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IEVudGl0eVRlc3Q3KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVYTUxNb2RlbCgpOwotCQl0cnkgewotCQkJLy9Eb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0VGV4dCh0aGlzLCAiPGE+YSYjNjU7JiN4NDE7JnVuazsmdW5rJnVuazwvYT4iKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCi0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRW50aXR5VGVzdDguamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VudGl0eVRlc3Q4LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkN2Q0NzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRW50aXR5VGVzdDguamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLQotcHVibGljIGNsYXNzIEVudGl0eVRlc3Q4IGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRW50aXR5VGVzdDguCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgRW50aXR5VGVzdDgoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIEVudGl0eVRlc3Q4KCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBFbnRpdHlUZXN0OCgpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCS8vRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnNldFRleHQodGhpcywgIiZpYm07JnJ0cDsiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRW50aXR5VGVzdDkuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VudGl0eVRlc3Q5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4MDIyNGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRW50aXR5VGVzdDkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLQotcHVibGljIGNsYXNzIEVudGl0eVRlc3Q5IGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRW50aXR5VGVzdDkuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgRW50aXR5VGVzdDkoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIEVudGl0eVRlc3Q5KCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBFbnRpdHlUZXN0OSgpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCS8vRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnNldFRleHQodGhpcywgIiZsdDsiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KHRoaXMsIDQsIDAsICImZ3QiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KHRoaXMsIDcsIDAsICI7Iik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL01vZGVsVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvTW9kZWxUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiNmM5ZjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvTW9kZWxUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLkZpbGVXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uV3JpdGVyOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy51dGlscy5EYXRlVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnV0aWxzLkZpbGVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMudXRpbHMuU3RyaW5nQ29tcGFyZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy51dGlscy5UZXN0V3JpdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudXRpbHMuU3RyaW5nVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmRvY3VtZW50LlN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkNoZWNrZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgTW9kZWxUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgdGVzdFJlc3VsdHNEaXJlY3RvcnlQcmVmaXggPSAiUGFyc2VyUmVzdWx0cyI7Ci0JcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIGZpbGVFeHRlbnNpb24gPSAiLnR4dCI7Ci0JcHJvdGVjdGVkIFRlc3RXcml0ZXIgZk91dHB1dFdyaXRlciA9IG5ldyBUZXN0V3JpdGVyKCk7Ci0JcHJpdmF0ZSBpbnQgUkVBRF9CVUZGRVJfU0laRSA9IDQwOTY7Ci0KLQlwcml2YXRlIGJvb2xlYW4gZWNob1RvU3lzdGVtT3V0ID0gZmFsc2U7Ci0JcHJpdmF0ZSBib29sZWFuIHByaW50ZWRPbmNlOwotCXByaXZhdGUgYm9vbGVhbiBwcmludFN1bW1hcnlUb1N5c3RlbU91dDsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBNb2RlbFRlc3QuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgTW9kZWxUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCQl0cnkgewotCQkJcHJpbnRDbGFzcygpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JfQotCi0JcHVibGljIE1vZGVsVGVzdCgpIHsKLQkJdGhpcygiZHVtbXkiKTsKLQkJLy8JCXRyeSB7Ci0JCS8vCQkJcHJpbnRDbGFzcygpOwotCQkvLwkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkvLwkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCS8vCQl9Ci0JfQotCi0JcHVibGljIHN0YXRpYyBJRE9NTW9kZWwgY3JlYXRlSFRNTE1vZGVsKCkgewotCi0JCS8vcmV0dXJuIG5ldyBYTUxNb2RlbEltcGwoKTsKLQotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQotCQkJbW9kZWwgPSBtb2RlbE1hbmFnZXIuZ2V0TW9kZWxGb3JFZGl0KCJ0ZXN0Lmh0bWwiLCBuZXcgTnVsbElucHV0U3RyZWFtKCksIG51bGwpOwotCi0JCQkvLyBhbHdheXMgdXNlIHRoZSBzYW1lIGxpbmUgZGVsaW1pdGVyIGZvciB0aGVzZSB0ZXN0cywgcmVnYXJkbGVzcwotCQkJLy8gb2YKLQkJCS8vIHBsYWZvcm0gb3IgcHJlZmVyZW5jZSBzZXR0aW5ncwotCQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0TGluZURlbGltaXRlcihUZXN0V3JpdGVyLmNvbW1vbkVPTCk7Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCS8vYXNzZXJ0VHJ1ZSgiYmFzaWMgWE1MIGVtcHR5IG1vZGVsIGNvdWxkIG5vdCBiZSBjcmVhdGVkIiwgbW9kZWwgIT0KLQkJLy8gbnVsbCk7Ci0JCXJldHVybiAoSURPTU1vZGVsKSBtb2RlbDsKLQotCX0KLQotCXB1YmxpYyBzdGF0aWMgSURPTU1vZGVsIGNyZWF0ZVhNTE1vZGVsKCkgewotCi0JCS8vcmV0dXJuIG5ldyBYTUxNb2RlbEltcGwoKTsKLQotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJCS8vYXNzZXJ0VHJ1ZSgibW9kZWxNYW5hZ2VyIG11c3Qgbm90IGJlIG51bGwiLCBtb2RlbE1hbmFnZXIgIT0KLQkJCS8vIG51bGwpOwotCi0JCQltb2RlbCA9IG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvckVkaXQoInRlc3QueG1sIiwgbmV3IE51bGxJbnB1dFN0cmVhbSgpLCBudWxsKTsKLQotCQkJLy8gYWx3YXlzIHVzZSB0aGUgc2FtZSBsaW5lIGRlbGltaXRlciBmb3IgdGhlc2UgdGVzdHMsIHJlZ2FyZGxlc3MKLQkJCS8vIG9mCi0JCQkvLyBwbGFmb3JtIG9yIHByZWZlcmVuY2Ugc2V0dGluZ3MKLQkJCW1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnNldExpbmVEZWxpbWl0ZXIoVGVzdFdyaXRlci5jb21tb25FT0wpOwotCi0KLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJLy9hc3NlcnRUcnVlKCJiYXNpYyBYTUwgZW1wdHkgbW9kZWwgY291bGQgbm90IGJlIGNyZWF0ZWQiLCBtb2RlbCAhPQotCQkvLyBudWxsKTsKLQkJcmV0dXJuIChJRE9NTW9kZWwpIG1vZGVsOwotCi0JfQotCi0JLyoqCi0JICovCi0JcHJpdmF0ZSB2b2lkIHByaW50Q2xhc3MoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oZ2V0Q2xhc3MoKS5nZXROYW1lKCkpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBwcmludEV4Y2VwdGlvbihFeGNlcHRpb24gZXgpIHsKLQkJZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHByaW50Tm9kZShOb2RlIG5vZGUsIGludCBpbmRlbnQpIHsKLQkJdHJ5IHsKLQkJCVN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKDEwKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgaW5kZW50OyBpKyspCi0JCQkJYnVmZmVyLmFwcGVuZCgiLS0iKTsKLQkJCWJ1ZmZlci5hcHBlbmQoU3RyaW5nVXRpbHMuZXNjYXBlKG5vZGUudG9TdHJpbmcoKSkpOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKGJ1ZmZlci50b1N0cmluZygpKTsKLQkJCWluZGVudCsrOwotCQkJTm9kZSBjaGlsZCA9IG5vZGUuZ2V0Rmlyc3RDaGlsZCgpOwotCQkJd2hpbGUgKGNoaWxkICE9IG51bGwpIHsKLQkJCQlwcmludE5vZGUoY2hpbGQsIGluZGVudCk7Ci0JCQkJY2hpbGQgPSBjaGlsZC5nZXROZXh0U2libGluZygpOwotCQkJfQotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkJCXByaW50RXhjZXB0aW9uKGV4KTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHByaW50U291cmNlKElET01Nb2RlbCBtb2RlbCkgewotCQl0cnkgewotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJTb3VyY2UgOiIpOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLmdldFRleHQoKSk7Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oIiIpOwotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkJCXByaW50RXhjZXB0aW9uKGV4KTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHByaW50VHJlZShJRE9NTW9kZWwgbW9kZWwpIHsKLQkJdHJ5IHsKLQkJCXByaW50RmxhdE1vZGVsKG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpKTsKLQkJCW5ldyBTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25DaGVja2VyKGZPdXRwdXRXcml0ZXIpLmNoZWNrTW9kZWwobW9kZWwpOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJUcmVlIDoiKTsKLQkJCXByaW50Tm9kZShtb2RlbC5nZXREb2N1bWVudCgpLCAwKTsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigiIik7Ci0KLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JCQlwcmludEV4Y2VwdGlvbihleCk7Ci0JCX0KLQotCX0KLQotCXByb3RlY3RlZCB2b2lkIHNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKSB7Ci0JCXRyeSB7Ci0JCQlTdHJpbmcgdGVzdE91dHB1dERpcmVjdG9yeSA9IHRlc3RSZXN1bHRzRGlyZWN0b3J5UHJlZml4ICsgRGF0ZVV0aWwubm93KCk7Ci0JCQlTdHJpbmcgY3VycmVudEZpbGVuYW1lID0gZ2V0Q2xhc3MoKS5nZXROYW1lKCkgKyBmaWxlRXh0ZW5zaW9uOwotCQkJRmlsZSBmaWxlb3V0ID0gRmlsZVV0aWwubWFrZUZpbGVGb3IodGVzdE91dHB1dERpcmVjdG9yeSwgY3VycmVudEZpbGVuYW1lLCB0ZXN0UmVzdWx0c0RpcmVjdG9yeVByZWZpeCk7Ci0JCQlXcml0ZXIgZmlsZVdyaXRlciA9IG5ldyBGaWxlV3JpdGVyKGZpbGVvdXQpOwotCQkJZmlsZVdyaXRlci53cml0ZShmT3V0cHV0V3JpdGVyLnRvU3RyaW5nKCkpOwotCQkJZmlsZVdyaXRlci5jbG9zZSgpOwotCQkJY29tcGFyZVdpdGhQcmV2aW91c1Jlc3VsdHMoZk91dHB1dFdyaXRlciwgY3VycmVudEZpbGVuYW1lKTsKLQotCQkJaWYgKGVjaG9Ub1N5c3RlbU91dCkgewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbihmT3V0cHV0V3JpdGVyLnRvU3RyaW5nKCkpOwotCQkJfQotCi0JCQlmT3V0cHV0V3JpdGVyLmNsb3NlKCk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBNZXRob2QgY29tcGFyZVdpdGhQcmV2aW91c1Jlc3VsdHMuCi0JICogCi0JICogQHBhcmFtIG91dHB1dFdyaXRlcgotCSAqIEBwYXJhbSBjdXJyZW50RmlsZW5hbWUKLQkgKi8KLQlwcml2YXRlIHZvaWQgY29tcGFyZVdpdGhQcmV2aW91c1Jlc3VsdHMoVGVzdFdyaXRlciBvdXRwdXRXcml0ZXIsIFN0cmluZyBjdXJyZW50RmlsZW5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCWJvb2xlYW4gc3VjY2VzcyA9IGZhbHNlOwotCQlGaWxlIHByZXZpb3VzUmVzdWx0c0RpciA9IEZpbGVVdGlsLmdldFByZXZpb3VzUmVzdWx0c0RpcmVjdG9yeSh0ZXN0UmVzdWx0c0RpcmVjdG9yeVByZWZpeCk7Ci0JCWlmIChwcmV2aW91c1Jlc3VsdHNEaXIgIT0gbnVsbCkgewotCQkJU3RyaW5nIGN1cnJlbnRSZXN1bHRzID0gb3V0cHV0V3JpdGVyLnRvU3RyaW5nKCk7Ci0JCQlGaWxlIHByZXZpb3VzUmVzdWx0c0ZpbGUgPSBuZXcgRmlsZShwcmV2aW91c1Jlc3VsdHNEaXIsIGN1cnJlbnRGaWxlbmFtZSk7Ci0JCQlGaWxlUmVhZGVyIHByZXZpb3VzUmVzdWx0c0ZpbGVSZWFkZXIgPSBuZXcgRmlsZVJlYWRlcihwcmV2aW91c1Jlc3VsdHNGaWxlKTsKLQkJCVN0cmluZyBwcmV2aW91c1Jlc3VsdHMgPSByZWFkU3RyaW5nKHByZXZpb3VzUmVzdWx0c0ZpbGVSZWFkZXIpOwotCQkJU3RyaW5nQ29tcGFyZVV0aWwgc3RyaW5nQ29tcGFyZSA9IG5ldyBTdHJpbmdDb21wYXJlVXRpbCgpOwotCQkJLy8gdHJ5aW5nIHRvICJmb3JjZSIgdGhlIHNhbWUgbGluZWRlbGltdGVyIGRpZG4ndCB3b3JrIHdlbGwsCi0JCQkvLyBJIHRoaW5rIHNpbmNlIHRoZSBsaW5lIGRlbGltaXRlciBpcyBpbnB1dCBvbiBzb21lIHRlc3RzLAotCQkJLy8gYW5kIENWUyBpcyBsaWtlbHkgdG8gY2hhbmdlIGFueXdheSAoZm9yIEFTQ0lJIGZpbGVzKS4KLQkJCS8vIHNvIHdlJ2xsIGlnbm9yZSBpbiBvdXIgY29tcGFyaXNvbnMuIE5vdGU6IHdlIHdvdWxkbid0Ci0JCQkvLyB3YW50IHRvIGlnbm9yZSB3aGl0ZXNwYWNlLiBUaGVyZSBtaWdodCBhY3R1YWxseSBiZSBzb21lCi0JCQkvLyB0ZXN0cyB0aGF0IGFyZSBub3QgYXMgYWNjdXJhdGUgaWYgd2UgaWdub3JlIEVPTCwgYnV0IHRoZXJlCi0JCQkvLyBzZWVtcyB0byBiZSBubyBlYXN5IHdheSB0byBoYW5kbGUsIHdpdGggb3V0IGEgbG90IG9mIHRyb3VibGUuCi0JCQlpZiAoIXN0cmluZ0NvbXBhcmUuZXF1YWxzSWdub3JlTGluZVNlcGVyYXRvcihwcmV2aW91c1Jlc3VsdHMsIGN1cnJlbnRSZXN1bHRzKSkgewotCQkJCS8vIHByZXZpb3VzUmVzdWx0cy5lcXVhbHMoY3VycmVudFJlc3VsdHMpKSB7Ci0JCQkJLy8gZmFpbAotCQkJCXN1Y2Nlc3MgPSBmYWxzZTsKLQotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbihjdXJyZW50RmlsZW5hbWUgKyAiIGZhaWxlZCBjb21wYXJpc29uIHRvIHByZXZpb3VzIHJlc3VsdHMiKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlByZXZpb3VzOiAiKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4ocHJldmlvdXNSZXN1bHRzKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkN1cnJlbnQ6ICIpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbihjdXJyZW50UmVzdWx0cyk7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlzdWNjZXNzID0gdHJ1ZTsKLQkJCQlpZiAocHJpbnRTdW1tYXJ5VG9TeXN0ZW1PdXQpIHsKLQkJCQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCQkJCVN5c3RlbS5vdXQucHJpbnRsbihjdXJyZW50RmlsZW5hbWUgKyAiIGNvbXBhcmVkIG9rIik7Ci0JCQkJCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQkJCX0KLQkJCX0KLQkJfQotCQllbHNlIHsKLQkJCWlmICghcHJpbnRlZE9uY2UpIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIk5vIFByZXZpb3VzIERpcmVjdG9yeSBmb3VuZCAuLi4gY291bGRuJ3QgY29tcGFyZSAiICsgY3VycmVudEZpbGVuYW1lICsgIiB3aXRoIHByZXZpb3VzIHJlc3VsdHMiKTsKLQkJCQlwcmludGVkT25jZSA9IHRydWU7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCQl9Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSgiY3VycmVudCBpcyBub3QgZXF1YWwgdG8gcmVmZXJlbmNlIHJlc3VsdHMgZm9yICIgKyBjdXJyZW50RmlsZW5hbWUsIHN1Y2Nlc3MpOwotCX0KLQotCS8qKgotCSAqIE1ldGhvZCByZWFkU3RyaW5nLgotCSAqIAotCSAqIEBwYXJhbSBwcmV2aW91c1Jlc3VsdHNGaWxlUmVhZGVyCi0JICogQHJldHVybiBTdHJpbmcKLQkgKi8KLQlwcml2YXRlIFN0cmluZyByZWFkU3RyaW5nKEZpbGVSZWFkZXIgZmlsZVJlYWRlcikgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJcmV0dXJuIHJlYWRJbnB1dFN0cmVhbShmaWxlUmVhZGVyKTsKLQl9Ci0KLQlwcml2YXRlIFN0cmluZyByZWFkSW5wdXRTdHJlYW0oSW5wdXRTdHJlYW1SZWFkZXIgaW5wdXRTdHJlYW1SZWFkZXIpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCWludCBudW1SZWFkID0gMDsKLQkJU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJY2hhciB0QnVmZltdID0gbmV3IGNoYXJbUkVBRF9CVUZGRVJfU0laRV07Ci0JCXdoaWxlICgobnVtUmVhZCA9IGlucHV0U3RyZWFtUmVhZGVyLnJlYWQodEJ1ZmYsIDAsIHRCdWZmLmxlbmd0aCkpICE9IC0xKSB7Ci0JCQlidWZmZXIuYXBwZW5kKHRCdWZmLCAwLCBudW1SZWFkKTsKLQkJfQotCQkvLyByZW1lbWJlciAtLSB3ZSBkaWRuJ3Qgb3BlbiBzdHJlYW0gLi4uIHNvIHdlIGRvbid0IGNsb3NlIGl0Ci0JCXJldHVybiBidWZmZXIudG9TdHJpbmcoKTsKLQl9Ci0KLQlwdWJsaWMgYWJzdHJhY3Qgdm9pZCB0ZXN0TW9kZWwoKTsKLQotCXByb3RlY3RlZCB2b2lkIHByaW50RmxhdE1vZGVsKElTdHJ1Y3R1cmVkRG9jdW1lbnQgZmxhdE1vZGVsKSB7Ci0JCWZPdXRwdXRXcml0ZXIud3JpdGVsbigiIik7Ci0JCWZPdXRwdXRXcml0ZXIud3JpdGVsbigiU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOiIpOwotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGZsYXRub2RlID0gZmxhdE1vZGVsLmdldEZpcnN0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCk7Ci0JCXdoaWxlIChmbGF0bm9kZSAhPSBudWxsKSB7Ci0KLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbihmbGF0bm9kZS50b1N0cmluZygpKTsKLQkJCWZsYXRub2RlID0gZmxhdG5vZGUuZ2V0TmV4dCgpOwotCi0JCX0KLQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCIiKTsKLQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL05vZGVMaXN0VGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvTm9kZUxpc3RUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxMTNiZmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvTm9kZUxpc3RUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLXB1YmxpYyBjbGFzcyBOb2RlTGlzdFRlc3QgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBQSVRlc3QuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgTm9kZUxpc3RUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBOb2RlTGlzdFRlc3QoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IE5vZGVMaXN0VGVzdCgpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5zZXRUZXh0KHRoaXMsICI8cD48L3A+Iik7Ci0JCQlOb2RlIHBhcmVudCA9IGRvY3VtZW50LmdldEZpcnN0Q2hpbGQoKTsKLQotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCAxOyBpKyspIHsKLQkJCQlwYXJlbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYyIpKTsKLQkJCX0KLQotCQkJaXRlcmF0ZShwYXJlbnQpOwotCi0JCQlmb3IgKGludCBpID0gMTsgaSA8IDU7IGkrKykgewotCQkJCXBhcmVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjIikpOwotCQkJfQotCi0JCQlpdGVyYXRlKHBhcmVudCk7Ci0KLQkJCWZvciAoaW50IGkgPSA1OyBpIDwgMTA7IGkrKykgewotCQkJCXBhcmVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjIikpOwotCQkJfQotCi0JCQlpdGVyYXRlKHBhcmVudCk7Ci0KLQkJCWZvciAoaW50IGkgPSAxMDsgaSA8IDIwOyBpKyspIHsKLQkJCQlwYXJlbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYyIpKTsKLQkJCX0KLQotCQkJaXRlcmF0ZShwYXJlbnQpOwotCi0JCQlmb3IgKGludCBpID0gMjA7IGkgPCA1MDsgaSsrKSB7Ci0JCQkJcGFyZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImMiKSk7Ci0JCQl9Ci0KLQkJCWl0ZXJhdGUocGFyZW50KTsKLQotCQkJZm9yIChpbnQgaSA9IDUwOyBpIDwgMTAwOyBpKyspIHsKLQkJCQlwYXJlbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYyIpKTsKLQkJCX0KLQotCQkJaXRlcmF0ZShwYXJlbnQpOwotCi0JCQlmb3IgKGludCBpID0gMTAwOyBpIDwgMjAwOyBpKyspIHsKLQkJCQlwYXJlbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYyIpKTsKLQkJCX0KLQotCQkJaXRlcmF0ZShwYXJlbnQpOwotCi0JCQlmb3IgKGludCBpID0gMjAwOyBpIDwgNTAwOyBpKyspIHsKLQkJCQlwYXJlbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYyIpKTsKLQkJCX0KLQotCQkJaXRlcmF0ZShwYXJlbnQpOwotCi0JCQlmb3IgKGludCBpID0gNTAwOyBpIDwgMTAwMDsgaSsrKSB7Ci0JCQkJcGFyZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImMiKSk7Ci0JCQl9Ci0KLQkJCWl0ZXJhdGUocGFyZW50KTsKLQotCQkJZm9yIChpbnQgaSA9IDEwMDA7IGkgPCAyMDAwOyBpKyspIHsKLQkJCQlwYXJlbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYyIpKTsKLQkJCX0KLQotCQkJaXRlcmF0ZShwYXJlbnQpOwotCi0JCQlmb3IgKGludCBpID0gMjAwMDsgaSA8IDUwMDA7IGkrKykgewotCQkJCXBhcmVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjIikpOwotCQkJfQotCi0JCQlpdGVyYXRlKHBhcmVudCk7Ci0KLQkJCWZvciAoaW50IGkgPSA1MDAwOyBpIDwgMTAwMDA7IGkrKykgewotCQkJCXBhcmVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjIikpOwotCQkJfQotCi0JCQlpdGVyYXRlKHBhcmVudCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0JfQotCi0JcHJpdmF0ZSB2b2lkIGl0ZXJhdGUoTm9kZSBwYXJlbnQpIHsKLQkJbG9uZyBzdGFydCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQlpbnQgaSA9IDA7Ci0JCWludCB0ID0gMDsKLQkJd2hpbGUgKHQgPCAxMDAwKSB7Ci0JCQlOb2RlTGlzdCBjaGlsZE5vZGVzID0gcGFyZW50LmdldENoaWxkTm9kZXMoKTsKLQkJCWludCBsZW5ndGggPSBjaGlsZE5vZGVzLmdldExlbmd0aCgpOwotCQkJZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0JCQkJY2hpbGROb2Rlcy5pdGVtKGkpOwotCQkJfQotCQkJLy8gdGhlc2UgMiBsaW5lcyBhcmUgcmVxdWlyZWQgdG8gaW52YWxpZGF0ZSB0aGUgY2FjaGUKLQkJCXBhcmVudC5hcHBlbmRDaGlsZChwYXJlbnQuZ2V0T3duZXJEb2N1bWVudCgpLmNyZWF0ZVRleHROb2RlKCIiKSk7Ci0JCQlwYXJlbnQucmVtb3ZlQ2hpbGQocGFyZW50LmdldExhc3RDaGlsZCgpKTsKLQkJCXQrKzsKLQkJfQotCQlmbG9hdCBkID0gKChmbG9hdCkgKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIC0gc3RhcnQpKSAvIHQ7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbihkICsgIiBtcyBmb3IgIiArIGkgKyAiIGNoaWxkIG5vZGVzIik7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvTnVsbElucHV0U3RyZWFtLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9OdWxsSW5wdXRTdHJlYW0uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTlmZTQ3Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9OdWxsSW5wdXRTdHJlYW0uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBKZW5zIEx1a293c2tpL0lubm9vcHJhY3QgLSBpbml0aWFsIHJlbmFtaW5nL3Jlc3RydWN0dXJpbmcKLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLQotCi1jbGFzcyBOdWxsSW5wdXRTdHJlYW0gZXh0ZW5kcyBJbnB1dFN0cmVhbSB7Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIGphdmEuaW8uSW5wdXRTdHJlYW0jbWFyayhpbnQpCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCB2b2lkIG1hcmsoaW50IHJlYWRsaW1pdCkgewotCQkvLyBub3RoaW5nIHRvIGRvCi0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBqYXZhLmlvLklucHV0U3RyZWFtI21hcmtTdXBwb3J0ZWQoKQotCSAqLwotCXB1YmxpYyBib29sZWFuIG1hcmtTdXBwb3J0ZWQoKSB7Ci0JCS8vIHdlIGNhbiBtYXJrIG5vdGhpbmcuCi0JCS8vIGFuZCwgd2UgYXJlIHVzaW5nIHRoaXMgTnVsbCBjbGFzcyBzcGVjaWZpY2FsbHkgZm9yCi0JCS8vIGEgImZha2UiIHJlc2V0dGFibGUgc3RyZWFtLgotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIGphdmEuaW8uSW5wdXRTdHJlYW0jcmVhZCgpCi0JICovCi0JcHVibGljIGludCByZWFkKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQotCQlyZXR1cm4gLTE7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBqYXZhLmlvLklucHV0U3RyZWFtI3Jlc2V0KCkKLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgcmVzZXQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQkvLyBub3RoaW5nIHRvIGRvCi0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBqYXZhLmlvLklucHV0U3RyZWFtI3NraXAobG9uZykKLQkgKi8KLQlwdWJsaWMgbG9uZyBza2lwKGxvbmcgbikgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJcmV0dXJuIDA7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvUElUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9QSVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzFkMmJiZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9QSVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLlByb2Nlc3NpbmdJbnN0cnVjdGlvbjsKLQotcHVibGljIGNsYXNzIFBJVGVzdCBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFBJVGVzdC4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBQSVRlc3QoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIFBJVGVzdCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgUElUZXN0KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVYTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnNldFRleHQodGhpcywgIjxhPjw/ZWNobyAkUEhQX1NFTEY/PjwvYT4iKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJTm9kZSBhID0gZG9jdW1lbnQuZ2V0Rmlyc3RDaGlsZCgpOwotCQkJZm9yIChOb2RlIGNoaWxkID0gYS5nZXRGaXJzdENoaWxkKCk7IGNoaWxkICE9IG51bGw7IGNoaWxkID0gY2hpbGQuZ2V0TmV4dFNpYmxpbmcoKSkgewotCQkJCWlmIChjaGlsZC5nZXROb2RlVHlwZSgpICE9IE5vZGUuUFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFKQotCQkJCQljb250aW51ZTsKLQkJCQlQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gcGkgPSAoUHJvY2Vzc2luZ0luc3RydWN0aW9uKSBjaGlsZDsKLQkJCQlTdHJpbmcgdGFyZ2V0ID0gcGkuZ2V0VGFyZ2V0KCk7Ci0JCQkJaWYgKHRhcmdldCA9PSBudWxsKQotCQkJCQl0YXJnZXQgPSAibnVsbCI7Ci0JCQkJU3RyaW5nIGRhdGEgPSBwaS5nZXREYXRhKCk7Ci0JCQkJaWYgKGRhdGEgPT0gbnVsbCkKLQkJCQkJZGF0YSA9ICJudWxsIjsKLQkJCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oInRhcmdldCgiICsgdGFyZ2V0ICsgIikgZGF0YSAoIiArIGRhdGEgKyAiKSIpOwotCQkJfQotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9QYXJzZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9QYXJzZXJUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1OWY3YzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvUGFyc2VyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotcHVibGljIGNsYXNzIFBhcnNlclRlc3QgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBQYXJzZXJUZXN0LgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFBhcnNlclRlc3QoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIFBhcnNlclRlc3QoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFBhcnNlclRlc3QoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVhNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgMCwgMCwgIjxQPjxCPjwvQj48Qj48L0I+PC9QPjxQPjwvUD4iKTsKLQkJCU5vZGUgcCA9IGRvY3VtZW50LmdldEZpcnN0Q2hpbGQoKTsKLQkJCU5vZGUgYiA9IHAuZ2V0Rmlyc3RDaGlsZCgpOwotCQkJTm9kZSBiMiA9IGIuZ2V0TmV4dFNpYmxpbmcoKTsKLQkJCU5vZGUgcDIgPSBwLmdldE5leHRTaWJsaW5nKCk7Ci0JCQkvKgotCQkJICogRWxlbWVudCBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiUCIpOwotCQkJICogZG9jdW1lbnQuYXBwZW5kQ2hpbGQocCk7IEVsZW1lbnQgYiA9Ci0JCQkgKiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJCIik7IHAuYXBwZW5kQ2hpbGQoYik7IEVsZW1lbnQgYjIgPQotCQkJICogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiQiIpOyBwLmFwcGVuZENoaWxkKGIyKTsgRWxlbWVudCBwMiA9Ci0JCQkgKiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJQIik7IGRvY3VtZW50LmFwcGVuZENoaWxkKHAyKTsKLQkJCSAqLwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgMCwgMCwgImEiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsICgoSURPTU5vZGUpIGIpLmdldFN0YXJ0T2Zmc2V0KCksIDAsICJiIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCAoKElET01Ob2RlKSBiMikuZ2V0U3RhcnRPZmZzZXQoKSwgMCwgImMiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsICgoSURPTU5vZGUpIGIyKS5nZXRFbmRPZmZzZXQoKSwgMCwgImQiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsICgoSURPTU5vZGUpIHAyKS5nZXRTdGFydE9mZnNldCgpLCAwLCAiZSIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgKChJRE9NTm9kZSkgcDIpLmdldFN0YXJ0T2Zmc2V0KCkgKyAzLCAwLCAiZiIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgKChJRE9NTm9kZSkgcDIpLmdldEVuZE9mZnNldCgpLCAwLCAiZyIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9QYXJzZXJUZXN0Mi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvUGFyc2VyVGVzdDIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmIwNjE1MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9QYXJzZXJUZXN0Mi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTmFtZWROb2RlTWFwOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLXB1YmxpYyBjbGFzcyBQYXJzZXJUZXN0MiBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFBhcnNlclRlc3QyLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFBhcnNlclRlc3QyKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBQYXJzZXJUZXN0MigpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgUGFyc2VyVGVzdDIoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVhNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgMCwgMCwgIjxhIGI9XCJcIiAgYz1cImNcIj4iKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJRWxlbWVudCBhID0gKEVsZW1lbnQpIGRvY3VtZW50LmdldEZpcnN0Q2hpbGQoKTsKLQkJCU5hbWVkTm9kZU1hcCBhdHRyaWJ1dGVzID0gYS5nZXRBdHRyaWJ1dGVzKCk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGF0dHJpYnV0ZXMuZ2V0TGVuZ3RoKCk7IGkrKykgewotCQkJCU5vZGUgYXR0ciA9IGF0dHJpYnV0ZXMuaXRlbShpKTsKLQkJCQlTdHJpbmcgbmFtZSA9IGF0dHIuZ2V0Tm9kZU5hbWUoKTsKLQkJCQlTdHJpbmcgdmFsdWUgPSBhdHRyLmdldE5vZGVWYWx1ZSgpOwotCQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbihuYW1lICsgIj1bIiArIHZhbHVlICsgIl0iKTsKLQkJCX0KLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIDgsIDAsICJkIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCWEgPSAoRWxlbWVudCkgZG9jdW1lbnQuZ2V0Rmlyc3RDaGlsZCgpOwotCQkJYXR0cmlidXRlcyA9IGEuZ2V0QXR0cmlidXRlcygpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBhdHRyaWJ1dGVzLmdldExlbmd0aCgpOyBpKyspIHsKLQkJCQlOb2RlIGF0dHIgPSBhdHRyaWJ1dGVzLml0ZW0oaSk7Ci0JCQkJU3RyaW5nIG5hbWUgPSBhdHRyLmdldE5vZGVOYW1lKCk7Ci0JCQkJU3RyaW5nIHZhbHVlID0gYXR0ci5nZXROb2RlVmFsdWUoKTsKLQkJCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4obmFtZSArICI9WyIgKyB2YWx1ZSArICJdIik7Ci0JCQl9Ci0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCA4LCAxLCAiIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCWEgPSAoRWxlbWVudCkgZG9jdW1lbnQuZ2V0Rmlyc3RDaGlsZCgpOwotCQkJYXR0cmlidXRlcyA9IGEuZ2V0QXR0cmlidXRlcygpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBhdHRyaWJ1dGVzLmdldExlbmd0aCgpOyBpKyspIHsKLQkJCQlOb2RlIGF0dHIgPSBhdHRyaWJ1dGVzLml0ZW0oaSk7Ci0JCQkJU3RyaW5nIG5hbWUgPSBhdHRyLmdldE5vZGVOYW1lKCk7Ci0JCQkJU3RyaW5nIHZhbHVlID0gYXR0ci5nZXROb2RlVmFsdWUoKTsKLQkJCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4obmFtZSArICI9WyIgKyB2YWx1ZSArICJdIik7Ci0JCQl9Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9QYXJzZXJUZXN0My5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvUGFyc2VyVGVzdDMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGM0ZTcyMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9QYXJzZXJUZXN0My5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV2ZW50cy5TdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5OYW1lZE5vZGVNYXA7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotcHVibGljIGNsYXNzIFBhcnNlclRlc3QzIGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgUGFyc2VyVGVzdDMuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgUGFyc2VyVGVzdDMoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIFBhcnNlclRlc3QzKCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBQYXJzZXJUZXN0MygpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCS8vU3RydWN0dXJlZERvY3VtZW50RXZlbnQgZXZlbnQgPQotCQkJc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIDAsIDAsICI8YSBiICA+Iik7Ci0JCQkvLyBkb250J3MgcHJpbnQgaW5zdGFuY2Ugb2YgZXZlbnQsIG9yIG1hbnkgdGVzdHMgd2lsbCBmYWlsIHdoZW4KLQkJCS8vIGV2ZW50IGNsYXNzIGlzIGNoYW5nZWQgKGV4YWN0bHkgd2hhdCBpcyBub3QgbmVlZGVkIGZvciB1bml0Ci0JCQkvLyB0ZXN0cyEpCi0JCQkvLyBmT3V0cHV0V3JpdGVyLndyaXRlbG4oZXZlbnQudG9TdHJpbmcoKSk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCUVsZW1lbnQgYSA9IChFbGVtZW50KSBkb2N1bWVudC5nZXRGaXJzdENoaWxkKCk7Ci0JCQlOYW1lZE5vZGVNYXAgYXR0cmlidXRlcyA9IGEuZ2V0QXR0cmlidXRlcygpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBhdHRyaWJ1dGVzLmdldExlbmd0aCgpOyBpKyspIHsKLQkJCQlOb2RlIGF0dHIgPSBhdHRyaWJ1dGVzLml0ZW0oaSk7Ci0JCQkJU3RyaW5nIG5hbWUgPSBhdHRyLmdldE5vZGVOYW1lKCk7Ci0JCQkJU3RyaW5nIHZhbHVlID0gYXR0ci5nZXROb2RlVmFsdWUoKTsKLQkJCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4obmFtZSArICI9WyIgKyB2YWx1ZSArICJdIik7Ci0JCQl9Ci0KLQkJCVN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGV2ZW50MiA9IHN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCA0LCAxLCAiIik7Ci0JCQkvLyBJIHJlbW92ZWQgdGhpcyBwYXJ0IG9mIG91dHB1dCwgc2luY2UgcmVuYW1pbmcgY2xhc3Mgb3IgcGFja2FnZQotCQkJLy8gd2lsbCBjYXVzZSB0ZXN0IHRvIGZhaWwhCi0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oZXZlbnQyLnRvU3RyaW5nKCkpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlhID0gKEVsZW1lbnQpIGRvY3VtZW50LmdldEZpcnN0Q2hpbGQoKTsKLQkJCWF0dHJpYnV0ZXMgPSBhLmdldEF0dHJpYnV0ZXMoKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgYXR0cmlidXRlcy5nZXRMZW5ndGgoKTsgaSsrKSB7Ci0JCQkJTm9kZSBhdHRyID0gYXR0cmlidXRlcy5pdGVtKGkpOwotCQkJCVN0cmluZyBuYW1lID0gYXR0ci5nZXROb2RlTmFtZSgpOwotCQkJCVN0cmluZyB2YWx1ZSA9IGF0dHIuZ2V0Tm9kZVZhbHVlKCk7Ci0JCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKG5hbWUgKyAiPVsiICsgdmFsdWUgKyAiXSIpOwotCQkJfQotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9QYXJzZXJUZXN0NC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvUGFyc2VyVGVzdDQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTZkM2I2OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9QYXJzZXJUZXN0NC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotCi1wdWJsaWMgY2xhc3MgUGFyc2VyVGVzdDQgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBQYXJzZXJUZXN0NC4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBQYXJzZXJUZXN0NChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgUGFyc2VyVGVzdDQoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFBhcnNlclRlc3Q0KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVYTUxNb2RlbCgpOwotCQl0cnkgewotCi0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJLy9Eb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCAwLCAwLCAiPGE+XG5cbjwlIGEgJT5cbjwlIGIgJT5cbjwvYT4iKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIDQsIDAsICI8Iik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCA1LCAwLCAiYiIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgNiwgMCwgImMiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIDcsIDAsICJkIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCA4LCAwLCAiZSIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgOSwgMCwgIj4iKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvU291cmNlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvU291cmNlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjg2ZTQ4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1NvdXJjZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuSW52YWxpZENoYXJhY3RlckV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuU291cmNlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uVGV4dDsKLQotcHVibGljIGNsYXNzIFNvdXJjZVRlc3QgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBTb3VyY2VUZXN0LgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFNvdXJjZVRlc3QoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIFNvdXJjZVRlc3QoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFNvdXJjZVRlc3QoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZUhUTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlUZXh0IHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgidCIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQodCk7Ci0JCQlTb3VyY2VWYWxpZGF0b3IgdmFsaWRhdG9yID0gbmV3IFNvdXJjZVZhbGlkYXRvcih0KTsKLQotCQkJU3RyaW5nIHNvdXJjZSA9IG51bGw7Ci0JCQlTdHJpbmcgcmVzdWx0ID0gbnVsbDsKLQotCQkJc291cmNlID0gImFhYTxiYmI+Y2NjIjsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigic291cmNlOiAiICsgc291cmNlKTsKLQkJCXRyeSB7Ci0JCQkJdmFsaWRhdG9yLnZhbGlkYXRlU291cmNlKHNvdXJjZSk7Ci0JCQl9Ci0JCQljYXRjaCAoSW52YWxpZENoYXJhY3RlckV4Y2VwdGlvbiBleCkgewotCQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbihleC5nZXRNZXNzYWdlKCkpOwotCQkJfQotCQkJcmVzdWx0ID0gdmFsaWRhdG9yLmNvbnZlcnRTb3VyY2Uoc291cmNlKTsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigicmVzdWx0OiAiICsgcmVzdWx0KTsKLQotCQkJc291cmNlID0gImFhYSZhbXA7XCInYmJiJmd0OyZsdDtjY2MmcXVvdDsmIzY0OyI7Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oInNvdXJjZTogIiArIHNvdXJjZSk7Ci0JCQl0cnkgewotCQkJCXZhbGlkYXRvci52YWxpZGF0ZVNvdXJjZShzb3VyY2UpOwotCQkJfQotCQkJY2F0Y2ggKEludmFsaWRDaGFyYWN0ZXJFeGNlcHRpb24gZXgpIHsKLQkJCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oZXguZ2V0TWVzc2FnZSgpKTsKLQkJCX0KLQkJCXJlc3VsdCA9IHZhbGlkYXRvci5jb252ZXJ0U291cmNlKHNvdXJjZSk7Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oInJlc3VsdDogIiArIHJlc3VsdCk7Ci0KLQkJCXNvdXJjZSA9ICImYW1wOyYmIjsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigic291cmNlOiAiICsgc291cmNlKTsKLQkJCXRyeSB7Ci0JCQkJdmFsaWRhdG9yLnZhbGlkYXRlU291cmNlKHNvdXJjZSk7Ci0JCQl9Ci0JCQljYXRjaCAoSW52YWxpZENoYXJhY3RlckV4Y2VwdGlvbiBleCkgewotCQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbihleC5nZXRNZXNzYWdlKCkpOwotCQkJfQotCQkJcmVzdWx0ID0gdmFsaWRhdG9yLmNvbnZlcnRTb3VyY2Uoc291cmNlKTsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigicmVzdWx0OiAiICsgcmVzdWx0KTsKLQotCQkJc291cmNlID0gIiZiYmImPD5jY2MiOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJzb3VyY2U6ICIgKyBzb3VyY2UpOwotCQkJdHJ5IHsKLQkJCQl2YWxpZGF0b3IudmFsaWRhdGVTb3VyY2Uoc291cmNlKTsKLQkJCX0KLQkJCWNhdGNoIChJbnZhbGlkQ2hhcmFjdGVyRXhjZXB0aW9uIGV4KSB7Ci0JCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKGV4LmdldE1lc3NhZ2UoKSk7Ci0JCQl9Ci0JCQlyZXN1bHQgPSB2YWxpZGF0b3IuY29udmVydFNvdXJjZShzb3VyY2UpOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJyZXN1bHQ6ICIgKyByZXN1bHQpOwotCi0JCQlzb3VyY2UgPSAiJnVuazsmdW5rIjsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigic291cmNlOiAiICsgc291cmNlKTsKLQkJCXRyeSB7Ci0JCQkJdmFsaWRhdG9yLnZhbGlkYXRlU291cmNlKHNvdXJjZSk7Ci0JCQl9Ci0JCQljYXRjaCAoSW52YWxpZENoYXJhY3RlckV4Y2VwdGlvbiBleCkgewotCQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbihleC5nZXRNZXNzYWdlKCkpOwotCQkJfQotCQkJcmVzdWx0ID0gdmFsaWRhdG9yLmNvbnZlcnRTb3VyY2Uoc291cmNlKTsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigicmVzdWx0OiAiICsgcmVzdWx0KTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvU291cmNlVGVzdDIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1NvdXJjZVRlc3QyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3NjQyMjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvU291cmNlVGVzdDIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuSW52YWxpZENoYXJhY3RlckV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuU291cmNlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgU291cmNlVGVzdDIgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBTb3VyY2VUZXN0Mi4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBTb3VyY2VUZXN0MihTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgU291cmNlVGVzdDIoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFNvdXJjZVRlc3QyKCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVYTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlFbGVtZW50IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Ci0JCQlBdHRyIGIgPSBkb2N1bWVudC5jcmVhdGVBdHRyaWJ1dGUoImIiKTsKLQkJCWEuc2V0QXR0cmlidXRlTm9kZShiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKGEpOwotCQkJU291cmNlVmFsaWRhdG9yIHZhbGlkYXRvciA9IG5ldyBTb3VyY2VWYWxpZGF0b3IoYik7Ci0KLQkJCVN0cmluZyBzb3VyY2UgPSBudWxsOwotCQkJU3RyaW5nIHJlc3VsdCA9IG51bGw7Ci0KLQkJCXNvdXJjZSA9ICJhYWE8YmJiPmNjYyI7Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oInNvdXJjZTogIiArIHNvdXJjZSk7Ci0JCQl0cnkgewotCQkJCXZhbGlkYXRvci52YWxpZGF0ZVNvdXJjZShzb3VyY2UpOwotCQkJfQotCQkJY2F0Y2ggKEludmFsaWRDaGFyYWN0ZXJFeGNlcHRpb24gZXgpIHsKLQkJCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oZXguZ2V0TWVzc2FnZSgpKTsKLQkJCX0KLQkJCXJlc3VsdCA9IHZhbGlkYXRvci5jb252ZXJ0U291cmNlKHNvdXJjZSk7Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oInJlc3VsdDogIiArIHJlc3VsdCk7Ci0KLQkJCXNvdXJjZSA9ICJhYWEmYW1wO2JiYiZndDsmbHQ7Y2NjJnF1b3Q7JiM2NDsiOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJzb3VyY2U6ICIgKyBzb3VyY2UpOwotCQkJdHJ5IHsKLQkJCQl2YWxpZGF0b3IudmFsaWRhdGVTb3VyY2Uoc291cmNlKTsKLQkJCX0KLQkJCWNhdGNoIChJbnZhbGlkQ2hhcmFjdGVyRXhjZXB0aW9uIGV4KSB7Ci0JCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKGV4LmdldE1lc3NhZ2UoKSk7Ci0JCQl9Ci0JCQlyZXN1bHQgPSB2YWxpZGF0b3IuY29udmVydFNvdXJjZShzb3VyY2UpOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJyZXN1bHQ6ICIgKyByZXN1bHQpOwotCi0JCQlzb3VyY2UgPSAiJmFtcDsmJiI7Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oInNvdXJjZTogIiArIHNvdXJjZSk7Ci0JCQl0cnkgewotCQkJCXZhbGlkYXRvci52YWxpZGF0ZVNvdXJjZShzb3VyY2UpOwotCQkJfQotCQkJY2F0Y2ggKEludmFsaWRDaGFyYWN0ZXJFeGNlcHRpb24gZXgpIHsKLQkJCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oZXguZ2V0TWVzc2FnZSgpKTsKLQkJCX0KLQkJCXJlc3VsdCA9IHZhbGlkYXRvci5jb252ZXJ0U291cmNlKHNvdXJjZSk7Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oInJlc3VsdDogIiArIHJlc3VsdCk7Ci0KLQkJCXNvdXJjZSA9ICJcImFhYVwiIjsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigic291cmNlOiAiICsgc291cmNlKTsKLQkJCXRyeSB7Ci0JCQkJdmFsaWRhdG9yLnZhbGlkYXRlU291cmNlKHNvdXJjZSk7Ci0JCQl9Ci0JCQljYXRjaCAoSW52YWxpZENoYXJhY3RlckV4Y2VwdGlvbiBleCkgewotCQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbihleC5nZXRNZXNzYWdlKCkpOwotCQkJfQotCQkJcmVzdWx0ID0gdmFsaWRhdG9yLmNvbnZlcnRTb3VyY2Uoc291cmNlKTsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigicmVzdWx0OiAiICsgcmVzdWx0KTsKLQotCQkJc291cmNlID0gIlwiYSdhXCIiOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJzb3VyY2U6ICIgKyBzb3VyY2UpOwotCQkJdHJ5IHsKLQkJCQl2YWxpZGF0b3IudmFsaWRhdGVTb3VyY2Uoc291cmNlKTsKLQkJCX0KLQkJCWNhdGNoIChJbnZhbGlkQ2hhcmFjdGVyRXhjZXB0aW9uIGV4KSB7Ci0JCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKGV4LmdldE1lc3NhZ2UoKSk7Ci0JCQl9Ci0JCQlyZXN1bHQgPSB2YWxpZGF0b3IuY29udmVydFNvdXJjZShzb3VyY2UpOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJyZXN1bHQ6ICIgKyByZXN1bHQpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9Tb3VyY2VUZXN0My5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvU291cmNlVGVzdDMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjNjZDk5MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9Tb3VyY2VUZXN0My5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmRvY3VtZW50LkludmFsaWRDaGFyYWN0ZXJFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmRvY3VtZW50LlNvdXJjZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotcHVibGljIGNsYXNzIFNvdXJjZVRlc3QzIGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgU291cmNlVGVzdDMuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgU291cmNlVGVzdDMoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIFNvdXJjZVRlc3QzKCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBTb3VyY2VUZXN0MygpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotCQkJQXR0ciBiID0gZG9jdW1lbnQuY3JlYXRlQXR0cmlidXRlKCJiIik7Ci0JCQlhLnNldEF0dHJpYnV0ZU5vZGUoYik7Ci0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChhKTsKLQkJCVNvdXJjZVZhbGlkYXRvciB2YWxpZGF0b3IgPSBuZXcgU291cmNlVmFsaWRhdG9yKGIpOwotCi0JCQlTdHJpbmcgc291cmNlID0gbnVsbDsKLQkJCVN0cmluZyByZXN1bHQgPSBudWxsOwotCi0JCQlzb3VyY2UgPSAiPCUgYWFhICU+PCU9IGJiYiAlPi88JSEgY2NjICU+ZGRkIjsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigic291cmNlOiAiICsgc291cmNlKTsKLQkJCXRyeSB7Ci0JCQkJdmFsaWRhdG9yLnZhbGlkYXRlU291cmNlKHNvdXJjZSk7Ci0JCQl9Ci0JCQljYXRjaCAoSW52YWxpZENoYXJhY3RlckV4Y2VwdGlvbiBleCkgewotCQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbihleC5nZXRNZXNzYWdlKCkpOwotCQkJfQotCQkJcmVzdWx0ID0gdmFsaWRhdG9yLmNvbnZlcnRTb3VyY2Uoc291cmNlKTsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigicmVzdWx0OiAiICsgcmVzdWx0KTsKLQotCQkJc291cmNlID0gIjwlIGFhYSI7Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oInNvdXJjZTogIiArIHNvdXJjZSk7Ci0JCQl0cnkgewotCQkJCXZhbGlkYXRvci52YWxpZGF0ZVNvdXJjZShzb3VyY2UpOwotCQkJfQotCQkJY2F0Y2ggKEludmFsaWRDaGFyYWN0ZXJFeGNlcHRpb24gZXgpIHsKLQkJCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oZXguZ2V0TWVzc2FnZSgpKTsKLQkJCX0KLQkJCXJlc3VsdCA9IHZhbGlkYXRvci5jb252ZXJ0U291cmNlKHNvdXJjZSk7Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oInJlc3VsdDogIiArIHJlc3VsdCk7Ci0KLQkJCXNvdXJjZSA9ICI+PCAlIGFhYSAlPiI7Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oInNvdXJjZTogIiArIHNvdXJjZSk7Ci0JCQl0cnkgewotCQkJCXZhbGlkYXRvci52YWxpZGF0ZVNvdXJjZShzb3VyY2UpOwotCQkJfQotCQkJY2F0Y2ggKEludmFsaWRDaGFyYWN0ZXJFeGNlcHRpb24gZXgpIHsKLQkJCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oZXguZ2V0TWVzc2FnZSgpKTsKLQkJCX0KLQkJCXJlc3VsdCA9IHZhbGlkYXRvci5jb252ZXJ0U291cmNlKHNvdXJjZSk7Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oInJlc3VsdDogIiArIHJlc3VsdCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1NwbGl0VGV4dFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1NwbGl0VGV4dFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTIxZDM3OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9TcGxpdFRleHRUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uVGV4dDsKLQotcHVibGljIGNsYXNzIFNwbGl0VGV4dFRlc3QgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBTcGxpdFRleHRUZXN0LgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFNwbGl0VGV4dFRlc3QoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIFNwbGl0VGV4dFRlc3QoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFNwbGl0VGV4dFRlc3QoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZUhUTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlFbGVtZW50IHAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJQIik7Ci0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChwKTsKLQkJCVRleHQgdGV4dCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJhYWJiYmJjY2MiKTsKLQkJCXAuYXBwZW5kQ2hpbGQodGV4dCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCVRleHQgdGV4dDIgPSB0ZXh0LnNwbGl0VGV4dCgyKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJVGV4dCB0ZXh0MyA9IHRleHQyLnNwbGl0VGV4dCg0KTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJcC5yZW1vdmVDaGlsZCh0ZXh0Mik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXRleHQuYXBwZW5kRGF0YSgiZGRkZGRkZCIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQl0ZXh0My5hcHBlbmREYXRhKCJlZWUiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJcC5pbnNlcnRCZWZvcmUodGV4dDIsIHRleHQzKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvU3BsaXRUZXh0VGVzdDIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1NwbGl0VGV4dFRlc3QyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxMTZjZDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvU3BsaXRUZXh0VGVzdDIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotCi1wdWJsaWMgY2xhc3MgU3BsaXRUZXh0VGVzdDIgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBTcGxpdFRleHRUZXN0Mi4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBTcGxpdFRleHRUZXN0MihTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgU3BsaXRUZXh0VGVzdDIoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFNwbGl0VGV4dFRlc3QyKCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVIVE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiUCIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQocCk7Ci0JCQlUZXh0IHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiYWFiYmJiY2NjIik7Ci0JCQlwLmFwcGVuZENoaWxkKHRleHQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlUZXh0IHRleHQyID0gdGV4dC5zcGxpdFRleHQoMik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCVRleHQgdGV4dDMgPSB0ZXh0Mi5zcGxpdFRleHQoNCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXAucmVtb3ZlQ2hpbGQodGV4dDIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlFbGVtZW50IGIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJCIik7Ci0JCQliLmFwcGVuZENoaWxkKHRleHQyKTsKLQkJCXAuaW5zZXJ0QmVmb3JlKGIsIHRleHQzKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvU3BsaXRUZXh0VGVzdDMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1NwbGl0VGV4dFRlc3QzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwMjBkNGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvU3BsaXRUZXh0VGVzdDMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotCi1wdWJsaWMgY2xhc3MgU3BsaXRUZXh0VGVzdDMgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBTcGxpdFRleHRUZXN0My4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBTcGxpdFRleHRUZXN0MyhTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgU3BsaXRUZXh0VGVzdDMoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFNwbGl0VGV4dFRlc3QzKCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVIVE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiUCIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQocCk7Ci0JCQlUZXh0IHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiYWEiKTsKLQkJCXAuYXBwZW5kQ2hpbGQodGV4dCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCUVsZW1lbnQgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkIiKTsKLQkJCVRleHQgdGV4dDIgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiYmJiYiIpOwotCQkJYi5hcHBlbmRDaGlsZCh0ZXh0Mik7Ci0JCQlwLmFwcGVuZENoaWxkKGIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlUZXh0IHRleHQzID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoImNjYyIpOwotCQkJcC5hcHBlbmRDaGlsZCh0ZXh0Myk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXAucmVtb3ZlQ2hpbGQoYik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXAuaW5zZXJ0QmVmb3JlKGIsIHRleHQzKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCi0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvU3BsaXRUZXh0VGVzdDQuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1NwbGl0VGV4dFRlc3Q0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4ZDcwYzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvU3BsaXRUZXh0VGVzdDQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotCi1wdWJsaWMgY2xhc3MgU3BsaXRUZXh0VGVzdDQgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBTcGxpdFRleHRUZXN0NC4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBTcGxpdFRleHRUZXN0NChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgU3BsaXRUZXh0VGVzdDQoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFNwbGl0VGV4dFRlc3Q0KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVIVE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiUCIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQocCk7Ci0JCQlUZXh0IHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIik7Ci0JCQlwLmFwcGVuZENoaWxkKHRleHQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQl0ZXh0LmFwcGVuZERhdGEoImFhYSIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQl0ZXh0LmRlbGV0ZURhdGEoMCwgMyk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCVRleHQgdGV4dDIgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiY2NjYyIpOwotCQkJcC5pbnNlcnRCZWZvcmUodGV4dDIsIHRleHQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQl0ZXh0LmFwcGVuZERhdGEoImFhYSIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0KLQotCi0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1NwbGl0VGV4dFRlc3Q1LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9TcGxpdFRleHRUZXN0NS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjAwNGUxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1NwbGl0VGV4dFRlc3Q1LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uVGV4dDsKLQotcHVibGljIGNsYXNzIFNwbGl0VGV4dFRlc3Q1IGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgU3BsaXRUZXh0VGVzdDUuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgU3BsaXRUZXh0VGVzdDUoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIFNwbGl0VGV4dFRlc3Q1KCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBTcGxpdFRleHRUZXN0NSgpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlSFRNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCUVsZW1lbnQgcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlAiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKHApOwotCQkJVGV4dCB0ZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoImFhYmJiYmNjYyIpOwotCQkJcC5hcHBlbmRDaGlsZCh0ZXh0KTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJVGV4dCB0ZXh0MiA9IHRleHQuc3BsaXRUZXh0KDYpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlFbGVtZW50IGJyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiQlIiKTsKLQkJCXAuaW5zZXJ0QmVmb3JlKGJyLCB0ZXh0Mik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXRleHQyLnNldERhdGEoImNjY2QiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJdGV4dDIuc2V0RGF0YSgiY2NjZGUiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJVGV4dCB0ZXh0MyA9IHRleHQuc3BsaXRUZXh0KDIpOwotCQkJRWxlbWVudCBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiQiIpOwotCQkJYi5hcHBlbmRDaGlsZCh0ZXh0Myk7Ci0JCQlwLmluc2VydEJlZm9yZShiLCBicik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCVRleHQgdGV4dDQgPSB0ZXh0Mi5zcGxpdFRleHQoMyk7Ci0JCQlFbGVtZW50IGkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJJIik7Ci0JCQlpLmFwcGVuZENoaWxkKHRleHQyKTsKLQkJCXAuaW5zZXJ0QmVmb3JlKGksIHRleHQ0KTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCi0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvU3BsaXRUZXh0VGVzdDYuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1NwbGl0VGV4dFRlc3Q2LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1MTcwYzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvU3BsaXRUZXh0VGVzdDYuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotCi1wdWJsaWMgY2xhc3MgU3BsaXRUZXh0VGVzdDYgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBTcGxpdFRleHRUZXN0Ni4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBTcGxpdFRleHRUZXN0NihTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgU3BsaXRUZXh0VGVzdDYoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFNwbGl0VGV4dFRlc3Q2KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVIVE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiUCIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQocCk7Ci0JCQlUZXh0IHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiYWFiYmJiY2NjIik7Ci0JCQlwLmFwcGVuZENoaWxkKHRleHQpOwotCQkJVGV4dCB0ZXh0MiA9IHRleHQuc3BsaXRUZXh0KDIpOwotCQkJLy8gPT0+IC8vIFRleHQgdGV4dDMgPQotCQkJdGV4dDIuc3BsaXRUZXh0KDQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQl0ZXh0Mi5zZXREYXRhKCJiYmJiZCIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9TcGxpdFRleHRUZXN0Ny5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvU3BsaXRUZXh0VGVzdDcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQ3YWFmMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9TcGxpdFRleHRUZXN0Ny5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBTcGxpdFRleHRUZXN0NyBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFNwbGl0VGV4dFRlc3Q3LgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFNwbGl0VGV4dFRlc3Q3KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBTcGxpdFRleHRUZXN0NygpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgU3BsaXRUZXh0VGVzdDcoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZUhUTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlFbGVtZW50IHAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJQIik7Ci0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChwKTsKLQkJCVRleHQgdGV4dCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJhYWFhIik7Ci0JCQlUZXh0IHRleHQyID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoImJiYmIiKTsKLQkJCXAuYXBwZW5kQ2hpbGQodGV4dCk7Ci0JCQlwLmFwcGVuZENoaWxkKHRleHQyKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCi0JCQkvLyBkZWxldGUgYWNjcm9zcyBub2RlIGJvdW5kcnkKLQkJCW1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnJlcGxhY2VUZXh0KHRoaXMsIDYsIDMsICIiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCi0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvU3BsaXRUZXh0VGVzdDguamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1NwbGl0VGV4dFRlc3Q4LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3MTdmZDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvU3BsaXRUZXh0VGVzdDguamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotCi1wdWJsaWMgY2xhc3MgU3BsaXRUZXh0VGVzdDggZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBTcGxpdFRleHRUZXN0OC4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBTcGxpdFRleHRUZXN0OChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgU3BsaXRUZXh0VGVzdDgoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFNwbGl0VGV4dFRlc3Q4KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVIVE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiUCIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQocCk7Ci0JCQlUZXh0IHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiYWFhYSIpOwotCQkJVGV4dCB0ZXh0MiA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJiYmJiIik7Ci0JCQlwLmFwcGVuZENoaWxkKHRleHQpOwotCQkJcC5hcHBlbmRDaGlsZCh0ZXh0Mik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQotCQkJLy8gZGVsZXRlIGFjY3Jvc3Mgbm9kZSBib3VuZHJ5Ci0JCQltb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5yZXBsYWNlVGV4dCh0aGlzLCA0LCA2LCAiIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1RhYmxlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVGFibGVUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyMDVjZmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVGFibGVUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uVGV4dDsKLQotcHVibGljIGNsYXNzIFRhYmxlVGVzdCBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFRhYmxlVGVzdC4KLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBUYWJsZVRlc3QoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIFRhYmxlVGVzdCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgVGFibGVUZXN0KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVIVE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCUVsZW1lbnQgaHRtbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkhUTUwiKTsKLQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQoaHRtbCk7Ci0KLQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQlwcmludFRyZWUobW9kZWwpOwotCi0JCUVsZW1lbnQgYm9keSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkJPRFkiKTsKLQkJaHRtbC5hcHBlbmRDaGlsZChib2R5KTsKLQotCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJRWxlbWVudCB0YWJsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlRBQkxFIik7Ci0JCXRhYmxlLnNldEF0dHJpYnV0ZSgiYm9yZGVyIiwgIjEiKTsKLQkJRWxlbWVudCB0ZCA9IG51bGw7Ci0JCWZvciAoaW50IHJvdyA9IDA7IHJvdyA8IDI7IHJvdysrKSB7Ci0JCQlFbGVtZW50IHRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVFIiKTsKLQkJCXRhYmxlLmFwcGVuZENoaWxkKHRyKTsKLQkJCWZvciAoaW50IGNvbCA9IDA7IGNvbCA8IDI7IGNvbCsrKSB7Ci0JCQkJdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURCIpOwotCQkJCXRyLmFwcGVuZENoaWxkKHRkKTsKLQkJCX0KLQkJfQotCQlib2R5LmFwcGVuZENoaWxkKHRhYmxlKTsKLQotCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJRWxlbWVudCBmb250ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRk9OVCIpOwotCQlmb250LnNldEF0dHJpYnV0ZSgiY29sb3IiLCAicmVkIik7Ci0JCVRleHQgdGV4dCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJ0ZXh0Iik7Ci0JCWZvbnQuYXBwZW5kQ2hpbGQodGV4dCk7Ci0JCXRkLmFwcGVuZENoaWxkKGZvbnQpOwotCi0JCXByaW50U291cmNlKG1vZGVsKTsKLQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9UZXh0VGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVGV4dFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDBkMmU0NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9UZXh0VGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5DaGFyYWN0ZXJEYXRhOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBUZXh0VGVzdCBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFRleHRUZXN0LgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFRleHRUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBUZXh0VGVzdCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgVGV4dFRlc3QoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVhNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCUVsZW1lbnQgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKGEpOwotCQkJQ2hhcmFjdGVyRGF0YSB0ZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoInRleHQiKTsKLQkJCWEuYXBwZW5kQ2hpbGQodGV4dCk7Ci0KLQkJCXRleHQuc2V0RGF0YSgiaGVsbG8gJmx0OyIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4odGV4dC5nZXREYXRhKCkpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9UZXh0VGVzdDIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1RleHRUZXN0Mi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMWU3MDk2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1RleHRUZXN0Mi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5DaGFyYWN0ZXJEYXRhOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBUZXh0VGVzdDIgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBUZXh0VGVzdDIuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgVGV4dFRlc3QyKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBUZXh0VGVzdDIoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFRleHRUZXN0MigpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQoYSk7Ci0JCQlDaGFyYWN0ZXJEYXRhIHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgidGV4dCIpOwotCQkJYS5hcHBlbmRDaGlsZCh0ZXh0KTsKLQotCQkJdGV4dC5zZXROb2RlVmFsdWUoImhlbGxvICZsdDsiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKHRleHQuZ2V0Tm9kZVZhbHVlKCkpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9UZXh0VGVzdDMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1RleHRUZXN0My5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOTIxNzAxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1RleHRUZXN0My5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5kb2N1bWVudC5JbnZhbGlkQ2hhcmFjdGVyRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBUZXh0VGVzdDMgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBUZXh0VGVzdDMuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgVGV4dFRlc3QzKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBUZXh0VGVzdDMoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFRleHRUZXN0MygpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQoYSk7Ci0JCQlJRE9NTm9kZSB0ZXh0ID0gKElET01Ob2RlKSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgidGV4dCIpOwotCQkJYS5hcHBlbmRDaGlsZCh0ZXh0KTsKLQotCQkJdHJ5IHsKLQkJCQl0ZXh0LnNldFNvdXJjZSgiaGVsbG8gPCIpOwotCQkJfQotCQkJY2F0Y2ggKEludmFsaWRDaGFyYWN0ZXJFeGNlcHRpb24gZXgpIHsKLQkJCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oZXguZ2V0TWVzc2FnZSgpKTsKLQkJCX0KLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJdHJ5IHsKLQkJCQl0ZXh0LnNldFNvdXJjZSgiaGVsbG8gJmx0OyIpOwotCQkJfQotCQkJY2F0Y2ggKEludmFsaWRDaGFyYWN0ZXJFeGNlcHRpb24gZXgpIHsKLQkJCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oZXguZ2V0TWVzc2FnZSgpKTsKLQkJCX0KLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJdHJ5IHsKLQkJCQl0ZXh0LnNldFNvdXJjZSgiaGVsbG8gJnVuazsiKTsKLQkJCX0KLQkJCWNhdGNoIChJbnZhbGlkQ2hhcmFjdGVyRXhjZXB0aW9uIGV4KSB7Ci0JCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKGV4LmdldE1lc3NhZ2UoKSk7Ci0JCQl9Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXRyeSB7Ci0JCQkJdGV4dC5zZXRTb3VyY2UoImhlbGxvICYjNjU7Iik7Ci0JCQl9Ci0JCQljYXRjaCAoSW52YWxpZENoYXJhY3RlckV4Y2VwdGlvbiBleCkgewotCQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbihleC5nZXRNZXNzYWdlKCkpOwotCQkJfQotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQl0cnkgewotCQkJCXRleHQuc2V0U291cmNlKCJoZWxsbyAmIGdvb2QtYnllIik7Ci0JCQl9Ci0JCQljYXRjaCAoSW52YWxpZENoYXJhY3RlckV4Y2VwdGlvbiBleCkgewotCQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbihleC5nZXRNZXNzYWdlKCkpOwotCQkJfQotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzZkZTNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBVcGRhdGVyVGVzdCBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFVwZGF0ZXJUZXN0LgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFVwZGF0ZXJUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBVcGRhdGVyVGVzdCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgVXBkYXRlclRlc3QoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZUhUTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlFbGVtZW50IGh0bWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJIVE1MIik7Ci0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChodG1sKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJRWxlbWVudCBib2R5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiQk9EWSIpOwotCQkJaHRtbC5hcHBlbmRDaGlsZChib2R5KTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJRWxlbWVudCBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiUCIpOwotCQkJYm9keS5hcHBlbmRDaGlsZChwKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJVGV4dCB0ZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoInRleHQiKTsKLQkJCXAuYXBwZW5kQ2hpbGQodGV4dCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCUVsZW1lbnQgYnIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJCUiIpOwotCQkJcC5pbnNlcnRCZWZvcmUoYnIsIHRleHQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlFbGVtZW50IGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIklNRyIpOwotCQkJcC5hcHBlbmRDaGlsZChpbWcpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlwLnJlbW92ZUNoaWxkKHRleHQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlwLmluc2VydEJlZm9yZSh0ZXh0LCBpbWcpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlib2R5LnJlbW92ZUNoaWxkKHApOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlib2R5LmFwcGVuZENoaWxkKHApOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDEwLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDEwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmMzBkOTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3QxMC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVRleHRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotcHVibGljIGNsYXNzIFVwZGF0ZXJUZXN0MTAgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBVcGRhdGVyVGVzdDEwLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFVwZGF0ZXJUZXN0MTAoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIFVwZGF0ZXJUZXN0MTAoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFVwZGF0ZXJUZXN0MTAoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVhNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCUVsZW1lbnQgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKGEpOwotCQkJYS5zZXRBdHRyaWJ1dGUoImIiLCAiYyIpOwotCQkJRWxlbWVudCBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYiIpOwotCQkJYS5hcHBlbmRDaGlsZChiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uOiIpOwotCQkJSURPTU5vZGUgbm9kZSA9IChJRE9NTm9kZSkgYjsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gZmxhdE5vZGUgPSBub2RlLmdldFN0YXJ0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCk7Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oZmxhdE5vZGUuZ2V0VGV4dCgpKTsKLQkJCUl0ZXJhdG9yIGUgPSBmbGF0Tm9kZS5nZXRSZWdpb25zKCkuaXRlcmF0b3IoKTsKLQkJCWludCBpID0gMDsKLQkJCXdoaWxlIChlLmhhc05leHQoKSkgewotCQkJCUlUZXh0UmVnaW9uIHJlZ2lvbiA9IChJVGV4dFJlZ2lvbikgZS5uZXh0KCk7Ci0JCQkJYm9vbGVhbiBvayA9IHRydWU7IC8vIG5vIGxvbmdlciBoYXMgcGFyZW50LgotCQkJCQkJCQkgICAvLyAvLyhyZWdpb24uZ2V0UGFyZW50KCkgPT0gZmxhdE5vZGUpOwotCQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbihpICsgIigiICsgZmxhdE5vZGUuZ2V0VGV4dChyZWdpb24pICsgIikiICsgb2spOwotCQkJfQotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCIiKTsKLQotCQkJYi5zZXRBdHRyaWJ1dGUoImMiLCAiZCIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb246Iik7Ci0JCQlub2RlID0gKElET01Ob2RlKSBiOwotCQkJZmxhdE5vZGUgPSBub2RlLmdldFN0YXJ0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCk7Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oZmxhdE5vZGUuZ2V0VGV4dCgpKTsKLQkJCWUgPSBmbGF0Tm9kZS5nZXRSZWdpb25zKCkuaXRlcmF0b3IoKTsKLQkJCWkgPSAwOwotCQkJd2hpbGUgKGUuaGFzTmV4dCgpKSB7Ci0JCQkJSVRleHRSZWdpb24gcmVnaW9uID0gKElUZXh0UmVnaW9uKSBlLm5leHQoKTsKLQkJCQlib29sZWFuIG9rID0gdHJ1ZTsgLy8gbm8gbG9uZ2VyIGhhcyBwYXJlbnQuCi0JCQkJCQkJCSAgIC8vIChyZWdpb24uZ2V0UGFyZW50KCkgPT0gZmxhdE5vZGUpOwotCQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbihpICsgIigiICsgZmxhdE5vZGUuZ2V0VGV4dChyZWdpb24pICsgIikiICsgb2spOwotCQkJfQotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCIiKTsKLQotCQkJYS5zZXRBdHRyaWJ1dGUoImIiLCAiY2QiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uOiIpOwotCQkJbm9kZSA9IChJRE9NTm9kZSkgYjsKLQkJCWZsYXROb2RlID0gbm9kZS5nZXRTdGFydFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbigpOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKGZsYXROb2RlLmdldFRleHQoKSk7Ci0JCQllID0gZmxhdE5vZGUuZ2V0UmVnaW9ucygpLml0ZXJhdG9yKCk7Ci0JCQlpID0gMDsKLQkJCXdoaWxlIChlLmhhc05leHQoKSkgewotCQkJCUlUZXh0UmVnaW9uIHJlZ2lvbiA9IChJVGV4dFJlZ2lvbikgZS5uZXh0KCk7Ci0JCQkJYm9vbGVhbiBvayA9IHRydWU7IC8vIChyZWdpb24uZ2V0UGFyZW50KCkgPT0gZmxhdE5vZGUpOwotCQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbihpICsgIigiICsgZmxhdE5vZGUuZ2V0VGV4dChyZWdpb24pICsgIikiICsgb2spOwotCQkJfQotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCIiKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0MTEuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0MTEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjAwNDZkYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDExLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uVGV4dDsKLQotcHVibGljIGNsYXNzIFVwZGF0ZXJUZXN0MTEgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBVcGRhdGVyVGVzdDExLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFVwZGF0ZXJUZXN0MTEoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIFVwZGF0ZXJUZXN0MTEoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFVwZGF0ZXJUZXN0MTEoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVhNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCUVsZW1lbnQgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKGEpOwotCQkJVGV4dCB0ZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoImIiKTsKLQkJCWEuYXBwZW5kQ2hpbGQodGV4dCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXRleHQuc2V0RGF0YSgiYiIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDEyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDEyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1YzgyNmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3QxMi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgVXBkYXRlclRlc3QxMiBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFVwZGF0ZXJUZXN0MTIuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgVXBkYXRlclRlc3QxMihTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgVXBkYXRlclRlc3QxMigpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgVXBkYXRlclRlc3QxMigpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQoYSk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCUVsZW1lbnQgYTIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Ci0JCQlkb2N1bWVudC5pbnNlcnRCZWZvcmUoYTIsIGEpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlkb2N1bWVudC5yZW1vdmVDaGlsZChhMik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDEzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDEzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4MzlkNjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3QxMy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uVGV4dDsKLQotcHVibGljIGNsYXNzIFVwZGF0ZXJUZXN0MTMgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBVcGRhdGVyVGVzdDEzLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFVwZGF0ZXJUZXN0MTMoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIFVwZGF0ZXJUZXN0MTMoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFVwZGF0ZXJUZXN0MTMoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVhNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgMCwgMCwgIjxhPlxyXG48Yj5cclxuPC9hPiIpOwotCi0JCQlFbGVtZW50IGEgPSAoRWxlbWVudCkgZG9jdW1lbnQuZ2V0Rmlyc3RDaGlsZCgpOwotCQkJRWxlbWVudCBiID0gKEVsZW1lbnQpIGEuZ2V0TGFzdENoaWxkKCk7Ci0JCQlUZXh0IHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiICAiKTsKLQkJCWEuYXBwZW5kQ2hpbGQodGV4dCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCWEucmVtb3ZlQ2hpbGQoYik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0MTQuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0MTQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWI2MmQxMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDE0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci0KLXB1YmxpYyBjbGFzcyBVcGRhdGVyVGVzdDE0IGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgVXBkYXRlclRlc3QxNC4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBVcGRhdGVyVGVzdDE0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBVcGRhdGVyVGVzdDE0KCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBVcGRhdGVyVGVzdDE0KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVYTUxNb2RlbCgpOwotCQl0cnkgewotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCS8vRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgMCwgMCwgIjwlPSBhYWFhICU+Iik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCAyLCAwLCAiICIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDE1LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDE1LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlMDUxZjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3QxNS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotCi1wdWJsaWMgY2xhc3MgVXBkYXRlclRlc3QxNSBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFVwZGF0ZXJUZXN0MTUuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgVXBkYXRlclRlc3QxNShTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgVXBkYXRlclRlc3QxNSgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgVXBkYXRlclRlc3QxNSgpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJLy8gWE1MIGNhc2UKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQkvL0RvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIDAsIDAsICI8JT0gYWFhYSAlPjxQPiIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQkvLwlIVE1MIGNhc2UKLQkJCW1vZGVsID0gY3JlYXRlSFRNTE1vZGVsKCk7Ci0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCS8vZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgMCwgMCwgIjwlPSBhYWFhICU+PFA+Iik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0Mi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3QyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliOTljMjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3QyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotCi1wdWJsaWMgY2xhc3MgVXBkYXRlclRlc3QyIGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgVXBkYXRlclRlc3QyLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFVwZGF0ZXJUZXN0MihTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgVXBkYXRlclRlc3QyKCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBVcGRhdGVyVGVzdDIoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZUhUTUxNb2RlbCgpOwotCQl0cnkgewotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnNldFRleHQodGhpcywgIjxIVE1MPlxyXG48SEVBRD48L0hFQUQ+XHJcbjxCT0RZPjwvQk9EWT5cclxuPC9IVE1MPlxyXG4iKTsKLQkJCUVsZW1lbnQgaHRtbCA9IChFbGVtZW50KSBkb2N1bWVudC5nZXRGaXJzdENoaWxkKCk7Ci0JCQlFbGVtZW50IGhlYWQgPSAoRWxlbWVudCkgaHRtbC5nZXRGaXJzdENoaWxkKCkuZ2V0TmV4dFNpYmxpbmcoKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJRWxlbWVudCBtZXRhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiTUVUQSIpOwotCQkJbWV0YS5zZXRBdHRyaWJ1dGUoIm5hbWUiLCAiR0VORVJBVE9SIik7Ci0JCQltZXRhLnNldEF0dHJpYnV0ZSgiY29udGVudCIsICJVcGRhdGVyIFRlc3QgMiIpOwotCQkJaGVhZC5hcHBlbmRDaGlsZChtZXRhKTsKLQkJCVRleHQgdGV4dDQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiXHJcbiIpOwotCQkJaGVhZC5pbnNlcnRCZWZvcmUodGV4dDQsIG1ldGEpOwotCQkJVGV4dCB0ZXh0NSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJcclxuIik7Ci0JCQloZWFkLmFwcGVuZENoaWxkKHRleHQ1KTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJRWxlbWVudCB0aXRsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlRJVExFIik7Ci0JCQlUZXh0IHRleHQ2ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiIpOwotCQkJdGl0bGUuYXBwZW5kQ2hpbGQodGV4dDYpOwotCQkJaGVhZC5hcHBlbmRDaGlsZCh0aXRsZSk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0My5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDI4MTg4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0My5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBVcGRhdGVyVGVzdDMgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBVcGRhdGVyVGVzdDMuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgVXBkYXRlclRlc3QzKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBVcGRhdGVyVGVzdDMoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFVwZGF0ZXJUZXN0MygpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQoYSk7Ci0JCQlFbGVtZW50IGIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJiIik7Ci0JCQlhLmFwcGVuZENoaWxkKGIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlUZXh0IHQxID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIlxuIik7Ci0JCQlhLmluc2VydEJlZm9yZSh0MSwgYik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCVRleHQgdDIgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiXG4iKTsKLQkJCWEuYXBwZW5kQ2hpbGQodDIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDQuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0NC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjViMTM4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0NC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBVcGRhdGVyVGVzdDQgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBVcGRhdGVyVGVzdDQuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgVXBkYXRlclRlc3Q0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBVcGRhdGVyVGVzdDQoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFVwZGF0ZXJUZXN0NCgpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQoYSk7Ci0JCQlUZXh0IHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiYiIpOwotCQkJYS5hcHBlbmRDaGlsZCh0KTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJdC5zZXREYXRhKCJiIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0NS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3Q1LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0MWI3YTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3Q1LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotcHVibGljIGNsYXNzIFVwZGF0ZXJUZXN0NSBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFVwZGF0ZXJUZXN0NS4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBVcGRhdGVyVGVzdDUoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIFVwZGF0ZXJUZXN0NSgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgVXBkYXRlclRlc3Q1KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVYTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnNldFRleHQodGhpcywgIjxhPiZhcG9zOzwvYT4iKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJTm9kZSBhID0gZG9jdW1lbnQuZ2V0Rmlyc3RDaGlsZCgpOwotCQkJTm9kZSB0ID0gYS5nZXRGaXJzdENoaWxkKCk7Ci0JCQlhLnJlbW92ZUNoaWxkKHQpOwotCQkJYS5hcHBlbmRDaGlsZCh0KTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCi0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3Q2LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDYuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTc3MTVlNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDYuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotCi1wdWJsaWMgY2xhc3MgVXBkYXRlclRlc3Q2IGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgVXBkYXRlclRlc3Q2LgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFVwZGF0ZXJUZXN0NihTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgVXBkYXRlclRlc3Q2KCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBVcGRhdGVyVGVzdDYoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVhNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCUVsZW1lbnQgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKGEpOwotCQkJVGV4dCB0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoImIiKTsKLQkJCWEuYXBwZW5kQ2hpbGQodCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCWEucmVtb3ZlQ2hpbGQodCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCWEuYXBwZW5kQ2hpbGQodCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0Ny5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3Q3LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmNTdlMDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3Q3LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBVcGRhdGVyVGVzdDcgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBVcGRhdGVyVGVzdDcuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgVXBkYXRlclRlc3Q3KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBVcGRhdGVyVGVzdDcoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFVwZGF0ZXJUZXN0NygpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiUCIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQocCk7Ci0JCQlFbGVtZW50IGIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJCIik7Ci0JCQlwLmFwcGVuZENoaWxkKGIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlFbGVtZW50IGIyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiQiIpOwotCQkJcC5pbnNlcnRCZWZvcmUoYjIsIGIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDguamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0OC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZWE1NjY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0OC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgVXBkYXRlclRlc3Q4IGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgVXBkYXRlclRlc3Q4LgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFVwZGF0ZXJUZXN0OChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgVXBkYXRlclRlc3Q4KCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBVcGRhdGVyVGVzdDgoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVhNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCUVsZW1lbnQgcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlAiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKHApOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlFbGVtZW50IHAyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiUCIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQocDIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDkuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0OS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTZiN2E1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0OS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBVcGRhdGVyVGVzdDkgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBVcGRhdGVyVGVzdDkuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgVXBkYXRlclRlc3Q5KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBVcGRhdGVyVGVzdDkoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFVwZGF0ZXJUZXN0OSgpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlSFRNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCUVsZW1lbnQgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJTVFlMRSIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQoc3R5bGUpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlUZXh0IHRleHQyID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoInAiKTsKLQkJCXN0eWxlLmFwcGVuZENoaWxkKHRleHQyKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3RSZWdpb25DaGFuZ2VkLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdFJlZ2lvbkNoYW5nZWQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2RmZWYzOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdFJlZ2lvbkNoYW5nZWQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5ldmVudHMuUmVnaW9uQ2hhbmdlZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5ldmVudHMuU3RydWN0dXJlZERvY3VtZW50RXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLXB1YmxpYyBjbGFzcyBVcGRhdGVyVGVzdFJlZ2lvbkNoYW5nZWQgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBVcGRhdGVyVGVzdFJlZ2lvbkNoYW5nZWQuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgVXBkYXRlclRlc3RSZWdpb25DaGFuZ2VkKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBVcGRhdGVyVGVzdFJlZ2lvbkNoYW5nZWQoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFVwZGF0ZXJUZXN0UmVnaW9uQ2hhbmdlZCgpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5zZXRUZXh0KHRoaXMsICI8YSBiPSBjPjwvYT4iKTsKLQotCQkJTm9kZSBiZWZvcmUgPSBkb2N1bWVudC5nZXRGaXJzdENoaWxkKCk7Ci0KLQkJCVN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGZtRXZlbnQgPSBzdHJ1Y3R1cmVkRG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgNSwgMSwgIiIpOwotCQkJaWYgKGZtRXZlbnQgaW5zdGFuY2VvZiBSZWdpb25DaGFuZ2VkRXZlbnQpIHsKLQkJCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oIm9rOiBSZWdpb25DaGFuZ2VkRXZlbnQiKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigibm90IG9rOiAiICsgZm1FdmVudC5nZXRDbGFzcygpLmdldE5hbWUoKSk7Ci0JCQl9Ci0KLQkJCU5vZGUgYWZ0ZXIgPSBkb2N1bWVudC5nZXRGaXJzdENoaWxkKCk7Ci0KLQkJCWlmIChiZWZvcmUgIT0gYWZ0ZXIpIHsKLQkJCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oIm5vdCBvazogTm9kZSByZXBsYWNlZCIpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJvazogTm9kZSBub3QgcmVwbGFjZWQiKTsKLQkJCX0KLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvY3NzL1N0eWxlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvY3NzL1N0eWxlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZTMwMzM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL2Nzcy9TdHlsZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5jc3M7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5Nb2RlbFRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1N0eWxlU2hlZXQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uc3R5bGVzaGVldHMuRG9jdW1lbnRTdHlsZTsKLWltcG9ydCBvcmcudzNjLmRvbS5zdHlsZXNoZWV0cy5MaW5rU3R5bGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uc3R5bGVzaGVldHMuU3R5bGVTaGVldExpc3Q7Ci0KLXB1YmxpYyBjbGFzcyBTdHlsZVRlc3QgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBTdHlsZVRlc3QuCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgU3R5bGVUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBTdHlsZVRlc3QoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFN0eWxlVGVzdCgpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlSFRNTE1vZGVsKCk7IC8vbmV3IEhUTUxNb2RlbEltcGwoKTsKLQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCUVsZW1lbnQgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJTVFlMRSIpOwotCQlUZXh0IHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiQk9EWSB7IGNvbG9yIDogcmVkOyB9IFAgeyBjb2xvciA6IGdyZWVuOyB9IEIgeyBjb2xvciA6IGJsdWU7IH0iKTsKLQkJc3R5bGUuYXBwZW5kQ2hpbGQodGV4dCk7Ci0JCWRvY3VtZW50LmFwcGVuZENoaWxkKHN0eWxlKTsKLQotCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJRG9jdW1lbnRTdHlsZSBkcyA9IChEb2N1bWVudFN0eWxlKSBkb2N1bWVudDsKLQkJU3R5bGVTaGVldExpc3Qgc3NsID0gZHMuZ2V0U3R5bGVTaGVldHMoKTsKLQkJaWYgKHNzbC5nZXRMZW5ndGgoKSA+IDApIHsKLQkJCUNTU1N0eWxlU2hlZXQgc3MgPSAoQ1NTU3R5bGVTaGVldCkgc3NsLml0ZW0oMCk7Ci0JCQlzcy5kZWxldGVSdWxlKDEpOwotCQl9Ci0KLQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQlwcmludFRyZWUobW9kZWwpOwotCi0JCUxpbmtTdHlsZSBscyA9IChMaW5rU3R5bGUpIHN0eWxlOwotCQlDU1NTdHlsZVNoZWV0IHNzMiA9IChDU1NTdHlsZVNoZWV0KSBscy5nZXRTaGVldCgpOwotCQlpZiAoc3MyICE9IG51bGwpIHsKLQkJCXNzMi5kZWxldGVSdWxlKDApOwotCQl9Ci0KLQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQlwcmludFRyZWUobW9kZWwpOwotCi0JCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQotCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy90ZXh0L1N0eWxlQWRhcHRlclBlcmZUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3RleHQvU3R5bGVBZGFwdGVyUGVyZlRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjIyYzkyMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3RleHQvU3R5bGVBZGFwdGVyUGVyZlRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAJCU1hc2FraSBTYWl0b2ggKE1TQUlUT0hAanAuaWJtLmNvbSkKLSAqCQlTZWUgQnVnIDE1MzAwMCAgU3R5bGUgQWRhcHRlcnMgc2hvdWxkIGJlIGxhemllcgotICoJCWh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0xNTMwMDAKLSAqCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy50ZXh0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5IVE1MNDBOYW1lc3BhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Eb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci1pbXBvcnQgb3JnLnczYy5kb20uc3R5bGVzaGVldHMuTGlua1N0eWxlOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1wdWJsaWMgY2xhc3MgU3R5bGVBZGFwdGVyUGVyZlRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQkvKioKLQkgKiBjcml0ZXJpYSBmb3IgImZhaWwiLCBpbiBtc2VjcwotCSAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgTUFYX0VYUEVDVEVEX1RJTUUgPSA0MDAwOwotCi0JcHVibGljIHZvaWQgdGVzdFBlcmZvcm1hbmNlKCkgewotCQl0cnkgewotCQkJU3RyaW5nIGZpbGVuYW1lID0gInRlc3RmaWxlcy9odG1sL2V4YW1wbGUwNC5odG1sIjsKLQkJCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmdldE1vZGVsRm9yRWRpdChmaWxlbmFtZSwgZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKGZpbGVuYW1lKSwgbnVsbCk7Ci0JCQlpZiAobW9kZWwgaW5zdGFuY2VvZiBJRE9NTW9kZWwpIHsKLQkJCQlJRE9NRG9jdW1lbnQgZG9jID0gKChJRE9NTW9kZWwpIG1vZGVsKS5nZXREb2N1bWVudCgpOwotCQkJCU5vZGVMaXN0IG5vZGVzID0gZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKEhUTUw0ME5hbWVzcGFjZS5FbGVtZW50TmFtZS5TVFlMRSk7Ci0JCQkJaWYgKG5vZGVzICE9IG51bGwgJiYgbm9kZXMuZ2V0TGVuZ3RoKCkgPiAwKSB7Ci0JCQkJCU5vZGUgbm9kZSA9IG5vZGVzLml0ZW0oMCk7Ci0JCQkJCWlmIChub2RlIGluc3RhbmNlb2YgTGlua1N0eWxlKSB7Ci0JCQkJCQlsb25nIHN0YXJ0ID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCQkJCQkoKExpbmtTdHlsZSkgbm9kZSkuZ2V0U2hlZXQoKTsKLQkJCQkJCS8vIFN5c3RlbS5vdXQucHJpbnRsbigiZWxhcHNlZCB0aW1lID0gIiArIChTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSAtIHN0YXJ0KSk7Ci0JCQkJCQkvLyBUT0RPOiB3ZSBzaG91bGQgcHJvYmFibHkgdXNlIHNvbWV0aGluZyBsaWtzZSBvLmUuY29yZS5ydW50aW1lLlBlcmZvcm1hbmNlU3RhdHMKLQkJCQkJCS8vIEkgcGlja2VkIHRoZSBmb2xsb3dpbmcgZmFpbCBjcml0ZXJpYSBzaW1wbGUgc2luY2UgYmVmb3JlIGZpeCwgdGhlIHByaW50bGluIHJlcG9ydHMgYWJvdXQgNzAwMCAKLQkJCQkJCS8vIG9uIG15IGNvbXB1dGVyLCBidXQgd2l0aCBmaXgsIHJlcG9ydGVkIGFib3V0IDEwMDAuIAotCQkJCQkJLy8gVGhlIGFwcHJvcHJpYXRlIHRpbWUgbWF5IHZhcnkgZ3JlYXRseSBkZXBlbmRpbmcgb24gdGhlIGJ1aWxkL3Rlc3QgbWFjaGluZS4gCi0JCQkJCQkvLyBUaGlzIGlzIGp1c3QgdG8gY2F0Y2ggc29tZSBsYXJnZSBjaGFuZ2UgaW4gYmVoYXZpb3IKLQkJCQkJCWxvbmcgZWxhcHNlZFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSAtIHN0YXJ0OwotCQkJCQkJaWYgKGVsYXBzZWRUaW1lID4gTUFYX0VYUEVDVEVEX1RJTUUpIHsKLQkJCQkJCQlmYWlsKCJnZXRTaGVldCB0b29rIGxvbmdlciB0aGFuIGV4cGVjdGVkIHRoZSBleHBlY3RlZCAiICsgTUFYX0VYUEVDVEVEX1RJTUUgKyJtcyIpOwotCQkJCQkJfSAKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCWlmIChtb2RlbCAhPSBudWxsKQotCQkJCW1vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQl9Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3RleHQvVGVzdFN0cnVjdHVyZWRQYXJ0aXRpb25lckhUTUwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdGV4dC9UZXN0U3RydWN0dXJlZFBhcnRpdGlvbmVySFRNTC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZDQ4YTcxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdGV4dC9UZXN0U3RydWN0dXJlZFBhcnRpdGlvbmVySFRNTC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzE5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnRleHQ7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdCdWZmZXJJbnB1dFN0cmVhbTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuQmFkTG9jYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnRFeHRlbnNpb24zOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50UGFydGl0aW9uZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVHlwZWRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXh0LklIVE1MUGFydGl0aW9uczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkUGFydGl0aW9uaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS51dGlscy5TdHJpbmdVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGV4dC5JWE1MUGFydGl0aW9uczsKLQotaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuRGVjaW1hbEZvcm1hdDsKLQotcHVibGljIGNsYXNzIFRlc3RTdHJ1Y3R1cmVkUGFydGl0aW9uZXJIVE1MIGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHJpdmF0ZSBib29sZWFuIERFQlVHX1BSSU5UX1JFU1VMVCA9IGZhbHNlOwotCXByb3RlY3RlZCBJVHlwZWRSZWdpb25bXSBwYXJ0aXRpb25zID0gbnVsbDsKLQotCXByaXZhdGUgYm9vbGVhbiB1c2VGb3JtYXR0ZXIgPSB0cnVlOwotCXByb3RlY3RlZCBEZWNpbWFsRm9ybWF0IGZvcm1hdHRlcjsKLQotCXB1YmxpYyBUZXN0U3RydWN0dXJlZFBhcnRpdGlvbmVySFRNTChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQkJaWYgKERFQlVHX1BSSU5UX1JFU1VMVCAmJiB1c2VGb3JtYXR0ZXIpCi0JCQlmb3JtYXR0ZXIgPSBuZXcgRGVjaW1hbEZvcm1hdCgpOwotCX0KLQkKLQkvKioKLQkgKiBtdXN0IHJlbGVhc2UgbW9kZWwgKGZyb20gZWRpdCkgYWZ0ZXIKLQkgKiBAcGFyYW0gZmlsZW5hbWUgcmVsYXRpdmUgdG8gdGhpcyBjbGFzcyAoVGVzdFN0cnVjdHVyZWRQYXJ0aXRpb25lcikKLQkgKi8KLQlwcml2YXRlIElTdHJ1Y3R1cmVkTW9kZWwgZ2V0TW9kZWxGb3JFZGl0KFN0cmluZyBmaWxlbmFtZSkgewotCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQkJSW5wdXRTdHJlYW0gaW5TdHJlYW0gPSBnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0oZmlsZW5hbWUpOwotCQkJaWYgKGluU3RyZWFtID09IG51bGwpCi0JCQkJaW5TdHJlYW0gPSBuZXcgU3RyaW5nQnVmZmVySW5wdXRTdHJlYW0oIiIpOwotCQkJbW9kZWwgPSBtb2RlbE1hbmFnZXIuZ2V0TW9kZWxGb3JFZGl0KGZpbGVuYW1lLCBpblN0cmVhbSwgbnVsbCk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGV4KSB7Ci0JCQlleC5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQlyZXR1cm4gbW9kZWw7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3REaXNjb25uZWN0Q29ubmVjdCgpIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQltb2RlbCA9Z2V0TW9kZWxGb3JFZGl0KCJ0ZXN0ZmlsZXMvaHRtbC9leGFtcGxlMDEueG1sIik7Ci0JCQlpZihtb2RlbCAhPSBudWxsKSB7Ci0JCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzRG9jID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQkJYXNzZXJ0VHJ1ZSgic0RvYyBpbXBsZW1lbnRhdGlvbiBub3QgaW5zdGFuY2Ugb2YgSURvY3VtZW50RXh0ZW5zaW9uMyIsIHNEb2MgaW5zdGFuY2VvZiBJRG9jdW1lbnRFeHRlbnNpb24zKTsKLQkJCQotCQkJCUlEb2N1bWVudFBhcnRpdGlvbmVyIHBhcnRpdGlvbmVyID0gKChJRG9jdW1lbnRFeHRlbnNpb24zKXNEb2MpLmdldERvY3VtZW50UGFydGl0aW9uZXIoSVN0cnVjdHVyZWRQYXJ0aXRpb25pbmcuREVGQVVMVF9TVFJVQ1RVUkVEX1BBUlRJVElPTklORyk7Ci0JCQkJYXNzZXJ0VHJ1ZSgicGFydGl0aW9uZXIgZG9lc24ndCBpbXBsZW1lbnQgSVN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXIiLCBwYXJ0aXRpb25lciBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyKTsKLQkJCQkKLQkJCQlJU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lciBzdHAgPSAoSVN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXIpcGFydGl0aW9uZXI7Ci0JCQkJYXNzZXJ0Tm90TnVsbCgicGFydGl0aW9uZXIgd2FzIG51bGwgZm9yIHNEb2M6IiArIHNEb2MsIHBhcnRpdGlvbmVyKTsKLQkJCQl0cnkgewotCQkJCQlzdHAuZGlzY29ubmVjdCgpOwotCQkJCX0KLQkJCQljYXRjaChFeGNlcHRpb24gZSkgewotCQkJCQlhc3NlcnRUcnVlKCJwcm9ibGVtIGRpc2Nvbm5lY3Rpbmcgdy86IiArc0RvYyArICIvbiIgKyBlLCBmYWxzZSk7Ci0JCQkJfQotCQkJCXRyeSB7Ci0JCQkJCXN0cC5jb25uZWN0KHNEb2MpOwotCQkJCX0KLQkJCQljYXRjaChFeGNlcHRpb24gZSkgewotCQkJCQlhc3NlcnRUcnVlKCJwcm9ibGVtIGNvbm5lY3Rpbmcgdy86IiArIHNEb2MgKyAiL24iICsgZSwgZmFsc2UpOwotCQkJCX0KLQkJCX0KLQkJCWVsc2UgewotCQkJCWFzc2VydFRydWUoImNvdWxkIG5vdCByZXRyaWV2ZSBzdHJ1Y3R1cmVkIG1vZGVsIiwgZmFsc2UpOwotCQkJfQotCQl9Ci0JCWZpbmFsbHkgIHsKLQkJCWlmKG1vZGVsICE9IG51bGwpCi0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0JCi0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RHZXREZWZhdWx0UGFydGl0aW9uVHlwZSgpIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQltb2RlbCA9Z2V0TW9kZWxGb3JFZGl0KCJ0ZXN0ZmlsZXMvaHRtbC9leGFtcGxlMDEueG1sIik7Ci0JCQlpZihtb2RlbCAhPSBudWxsKSB7Ci0JCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzRG9jID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQkJYXNzZXJ0VHJ1ZSgic0RvYyBpbXBsZW1lbnRhdGlvbiBub3QgaW5zdGFuY2Ugb2YgSURvY3VtZW50RXh0ZW5zaW9uMyIsIHNEb2MgaW5zdGFuY2VvZiBJRG9jdW1lbnRFeHRlbnNpb24zKTsKLQkJCQotCQkJCUlEb2N1bWVudFBhcnRpdGlvbmVyIHBhcnRpdGlvbmVyID0gKChJRG9jdW1lbnRFeHRlbnNpb24zKXNEb2MpLmdldERvY3VtZW50UGFydGl0aW9uZXIoSVN0cnVjdHVyZWRQYXJ0aXRpb25pbmcuREVGQVVMVF9TVFJVQ1RVUkVEX1BBUlRJVElPTklORyk7Ci0JCQkJYXNzZXJ0VHJ1ZSgicGFydGl0aW9uZXIgZG9lc24ndCBpbXBsZW1lbnQgSVN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXIiLCBwYXJ0aXRpb25lciBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyKTsKLQkJCQkKLQkJCQlJU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lciBzdHAgPSAoSVN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXIpcGFydGl0aW9uZXI7Ci0JCQkJU3RyaW5nIGRlZmF1bHRQYXJ0aXRpb25UeXBlID0gc3RwLmdldERlZmF1bHRQYXJ0aXRpb25UeXBlKCk7Ci0JCQkJYXNzZXJ0VHJ1ZSgid3JvbmcgZGVmYXVsdCBwYXJ0aXRpb24gdHlwZSB3YXM6IFsiICsgZGVmYXVsdFBhcnRpdGlvblR5cGUgKyAiXSBzaG91bGQgYmU6IFsiICsgSVhNTFBhcnRpdGlvbnMuWE1MX0RFRkFVTFQgKyAiXSIsIGRlZmF1bHRQYXJ0aXRpb25UeXBlLmVxdWFscyhJWE1MUGFydGl0aW9ucy5YTUxfREVGQVVMVCkpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJYXNzZXJ0VHJ1ZSgiY291bGQgbm90IHJldHJpZXZlIHN0cnVjdHVyZWQgbW9kZWwiLCBmYWxzZSk7Ci0JCQl9Ci0JCX0KLQkJZmluYWxseSAgewotCQkJaWYobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQkKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEdldFBhcnRpdGlvblR5cGUoKSB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJbW9kZWwgPWdldE1vZGVsRm9yRWRpdCgidGVzdGZpbGVzL2h0bWwvZXhhbXBsZTAxLnhtbCIpOwotCQkJaWYobW9kZWwgIT0gbnVsbCkgewotCQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc0RvYyA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJCWFzc2VydFRydWUoInNEb2MgaW1wbGVtZW50YXRpb24gbm90IGluc3RhbmNlIG9mIElEb2N1bWVudEV4dGVuc2lvbjMiLCBzRG9jIGluc3RhbmNlb2YgSURvY3VtZW50RXh0ZW5zaW9uMyk7Ci0JCQkKLQkJCQlJRG9jdW1lbnRQYXJ0aXRpb25lciBwYXJ0aXRpb25lciA9ICgoSURvY3VtZW50RXh0ZW5zaW9uMylzRG9jKS5nZXREb2N1bWVudFBhcnRpdGlvbmVyKElTdHJ1Y3R1cmVkUGFydGl0aW9uaW5nLkRFRkFVTFRfU1RSVUNUVVJFRF9QQVJUSVRJT05JTkcpOwotCQkJCWFzc2VydFRydWUoInBhcml0aW9uZXIgZG9lc24ndCBpbXBsZW1lbnQgSVN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXIiLCBwYXJ0aXRpb25lciBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyKTsKLQkJCQkKLQkJCQlJU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lciBzdHAgPSAoSVN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXIpcGFydGl0aW9uZXI7Ci0JCQkJU3RyaW5nIGRlZmF1bHRQYXJ0aXRpb25UeXBlID0gc3RwLmdldERlZmF1bHRQYXJ0aXRpb25UeXBlKCk7Ci0JCQkJYXNzZXJ0VHJ1ZSgid3JvbmcgZGVmYXVsdCBwYXJ0aXRpb24gdHlwZSB3YXM6IFsiICsgZGVmYXVsdFBhcnRpdGlvblR5cGUgKyAiXSBzaG91bGQgYmU6IFsiICsgSVhNTFBhcnRpdGlvbnMuWE1MX0RFRkFVTFQgKyAiXSIsIGRlZmF1bHRQYXJ0aXRpb25UeXBlLmVxdWFscyhJWE1MUGFydGl0aW9ucy5YTUxfREVGQVVMVCkpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJYXNzZXJ0VHJ1ZSgiY291bGQgbm90IHJldHJpZXZlIHN0cnVjdHVyZWQgbW9kZWwiLCBmYWxzZSk7Ci0JCQl9Ci0JCX0KLQkJZmluYWxseSAgewotCQkJaWYobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQkKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEhUTUwxKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCWludCBleHBlY3RlZFBhcnRpdGlvbnMgPSA0OwotCQlpbnQgblBhcnRpdGlvbnMgPSBkb0NvbXB1dGVQYXJ0aXRpb25pbmdUZXN0KCJ0ZXN0ZmlsZXMvaHRtbC9leGFtcGxlMDEuaHRtbCIpOwotCQlhc3NlcnRUcnVlKCJ3cm9uZyBudW1iZXIgb2YgcGFydGl0aW9ucyIsIG5QYXJ0aXRpb25zID09IGV4cGVjdGVkUGFydGl0aW9ucyk7Ci0JCWNoZWNrU2VhbXMoKTsKLQkJdmVyaWZ5UGFydGl0aW9uVHlwZXMocGFydGl0aW9ucywgbmV3IFN0cmluZ1tde0lIVE1MUGFydGl0aW9ucy5IVE1MX0RFQ0xBUkFUSU9OLCBJSFRNTFBhcnRpdGlvbnMuSFRNTF9ERUZBVUxULCBJSFRNTFBhcnRpdGlvbnMuSFRNTF9DT01NRU5ULCBJSFRNTFBhcnRpdGlvbnMuSFRNTF9ERUZBVUxUfSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEhUTUwyKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCWludCBleHBlY3RlZFBhcnRpdGlvbnMgPSA3OwotCQkvL1RPRE8gTml0aW4sIHdlIG5lZWQgdG8gcmV2aWV3IHRoZSBVbmtub3duIHRvIFNjcmlwdCBjaGFuZ2UgKDgvMS8wMywgOTowMFBNKQotCQlpbnQgblBhcnRpdGlvbnMgPSBkb0NvbXB1dGVQYXJ0aXRpb25pbmdUZXN0KCJ0ZXN0ZmlsZXMvaHRtbC9leGFtcGxlMDIuaHRtbCIpOwotCQlhc3NlcnRUcnVlKCJ3cm9uZyBudW1iZXIgb2YgcGFydGl0aW9ucyIsIG5QYXJ0aXRpb25zID09IGV4cGVjdGVkUGFydGl0aW9ucyk7Ci0JCWNoZWNrU2VhbXMoKTsKLQkJdmVyaWZ5UGFydGl0aW9uVHlwZXMocGFydGl0aW9ucywgbmV3IFN0cmluZ1tde0lIVE1MUGFydGl0aW9ucy5IVE1MX0RFRkFVTFQsIElIVE1MUGFydGl0aW9ucy5TQ1JJUFQsIElIVE1MUGFydGl0aW9ucy5IVE1MX0RFRkFVTFQsIElIVE1MUGFydGl0aW9ucy5TQ1JJUFQsIElIVE1MUGFydGl0aW9ucy5IVE1MX0RFRkFVTFQsIElIVE1MUGFydGl0aW9ucy5TQ1JJUFQsIElIVE1MUGFydGl0aW9ucy5IVE1MX0RFRkFVTFR9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SFRNTDMoKSB0aHJvd3MgSU9FeGNlcHRpb24sIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJaW50IGV4cGVjdGVkUGFydGl0aW9ucyA9IDE7Ci0JCVN0cmluZyBmaWxlID0gInRlc3RmaWxlcy9odG1sL2V4YW1wbGUwMy5odG1sIjsKLQkJaW50IG5QYXJ0aXRpb25zID0gZG9Db21wdXRlUGFydGl0aW9uaW5nVGVzdChmaWxlKTsKLQkJYXNzZXJ0VHJ1ZSgid3JvbmcgbnVtYmVyIG9mIHBhcnRpdGlvbnMiLCBuUGFydGl0aW9ucyA9PSBleHBlY3RlZFBhcnRpdGlvbnMpOwotCQljaGVja1NlYW1zKCk7Ci0JCXZlcmlmeVBhcnRpdGlvblR5cGVzKHBhcnRpdGlvbnMsIG5ldyBTdHJpbmdbXXtJSFRNTFBhcnRpdGlvbnMuSFRNTF9ERUZBVUxUfSk7Ci0KLQkJLy8gMTIxIGlmIENSTEYKLQkJLy8gIElUeXBlZFJlZ2lvbiBzY3JpcHRQYXJ0aXRpb24gPSBnZXRQYXJ0aXRpb25UZXN0KGZpbGUsIDEyMSk7Ci0JCS8vIDExNiBpZiBMRiBvciBDUiBvbmx5Ci0JCS8vICBJVHlwZWRSZWdpb24gc2NyaXB0UGFydGl0aW9uID0gZ2V0UGFydGl0aW9uVGVzdChmaWxlLCAxMjEpOwotCi0JCUlUeXBlZFJlZ2lvbiBwYXJ0MSA9IGdldFBhcnRpdGlvblRlc3QoZmlsZSwgMTIxKTsKLQkJSVR5cGVkUmVnaW9uIHBhcnQyID0gZ2V0UGFydGl0aW9uVGVzdChmaWxlLCAxMTYpOwotCi0vLwkJYXNzZXJ0RXF1YWxzKCJwYXJ0aXRpb24gaXMgd3JvbmcgdHlwZSEiLCBzY3JpcHRQYXJ0aXRpb24uZ2V0VHlwZSgpLCBJSFRNTFBhcnRpdGlvbnMuU1RfU0NSSVBUKTsKLQkJLy8gdGhlIGNyaXRpY2FsIHBvc2l0aW9uIGlzIHN1cnJvdW5kZWQgd2l0aCBIVE1MID4gNSBjaGFyYWN0ZXJzIGluIGVpdGhlciBkaXJlY3Rpb247IHRoaXMgc2hvdWxkIGJlIGdvb2QgZW5vdWdoCi0JCWFzc2VydFRydWUoInBhcnRpdGlvbiBpcyB3cm9uZyB0eXBlISA6KCIgKyBwYXJ0MS5nZXRUeXBlKCkgKyAifCIgKyBwYXJ0Mi5nZXRUeXBlKCkgKyAiKSIsIHBhcnQxLmdldFR5cGUoKS5lcXVhbHMoSUhUTUxQYXJ0aXRpb25zLlNDUklQVCkgfHwgcGFydDIuZ2V0VHlwZSgpLmVxdWFscyhJSFRNTFBhcnRpdGlvbnMuU0NSSVBUKSk7Ci0JCWFzc2VydFRydWUoInBhcnRpdGlvbiBpcyBub3QgemVybyBsZW5ndGghIiwgKHBhcnQxLmdldExlbmd0aCgpID09IDAgfHwgcGFydDIuZ2V0TGVuZ3RoKCkgPT0gMCkpOwotCX0KLQkKLQkvKioKLQkgKiBFbnN1cmUgdGhhdCB0aGUgY3VycmVudCBsaXN0IG9mIHBhcnRpdGlvbnMgYXJlIGFsbCBhZGphY2VudCB0byBvbmUgYW5vdGhlcgotCSAqLwotCXByb3RlY3RlZCB2b2lkIGNoZWNrU2VhbXMoKSB7Ci0JCWlmIChwYXJ0aXRpb25zID09IG51bGwpCi0JCQlyZXR1cm47Ci0JCWludCBvZmZzZXQgPSAwOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHBhcnRpdGlvbnMubGVuZ3RoOyBpKyspIHsKLQkJCWFzc2VydEVxdWFscygicGFydGl0aW9ucyBhcmUgbm90IGNvbnRpZ3VvdXMhIiwgcGFydGl0aW9uc1tpXS5nZXRPZmZzZXQoKSwgb2Zmc2V0KTsKLQkJCW9mZnNldCA9IHBhcnRpdGlvbnNbaV0uZ2V0T2Zmc2V0KCkgKyBwYXJ0aXRpb25zW2ldLmdldExlbmd0aCgpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQ29tcHV0ZSB0aGUgcGFydGl0aW9ucyBmb3IgdGhlIGdpdmVuIGZpbGVuYW1lIHVzaW5nIHRoZSBkZWZhdWx0IHBhcnRpdGlvbmVyCi0JICogZm9yIHRoYXQgZmlsZSB0eXBlLgotCSAqIAotCSAqIEBwYXJhbSBmaWxlbmFtZQotCSAqIEByZXR1cm4gaW50Ci0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqIEB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24KLQkgKi8KLQlwcm90ZWN0ZWQgaW50IGRvQ29tcHV0ZVBhcnRpdGlvbmluZ1Rlc3QoU3RyaW5nIGZpbGVuYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24sIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlucHV0U3RyZWFtIGluU3RyZWFtID0gZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKGZpbGVuYW1lKTsKLQkJaWYgKGluU3RyZWFtID09IG51bGwpCi0JCQlpblN0cmVhbSA9IG5ldyBTdHJpbmdCdWZmZXJJbnB1dFN0cmVhbSgiIik7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBtb2RlbE1hbmFnZXIuZ2V0TW9kZWxGb3JFZGl0KGZpbGVuYW1lLCBpblN0cmVhbSwgbnVsbCk7Ci0KLQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJaWYgKERFQlVHX1BSSU5UX1JFU1VMVCAmJiB1c2VGb3JtYXR0ZXIpIHsKLQkJCWRvdWJsZSBiYXNlVGVuID0gTWF0aC5sb2coMTApOwotCQkJZm9ybWF0dGVyLnNldE1pbmltdW1JbnRlZ2VyRGlnaXRzKChpbnQpIChNYXRoLmxvZyhzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0TGVuZ3RoKCkpIC8gYmFzZVRlbikgKyAxKTsKLQkJCWZvcm1hdHRlci5zZXRHcm91cGluZ1VzZWQoZmFsc2UpOwotCQl9Ci0KLQkJcGFydGl0aW9ucyA9IHN0cnVjdHVyZWREb2N1bWVudC5jb21wdXRlUGFydGl0aW9uaW5nKDAsIHN0cnVjdHVyZWREb2N1bWVudC5nZXRMZW5ndGgoKSk7Ci0JCWlmIChERUJVR19QUklOVF9SRVNVTFQpIHsKLQkJCVN0cmluZyBjb250ZW50cyA9IG51bGw7Ci0KLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiXG5maWxlbmFtZTogIiArIGZpbGVuYW1lKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgcGFydGl0aW9ucy5sZW5ndGg7IGkrKykgewotCQkJCXRyeSB7Ci0JCQkJCWNvbnRlbnRzID0gc3RydWN0dXJlZERvY3VtZW50LmdldChwYXJ0aXRpb25zW2ldLmdldE9mZnNldCgpLCBwYXJ0aXRpb25zW2ldLmdldExlbmd0aCgpKTsKLQkJCQl9Ci0JCQkJY2F0Y2ggKEJhZExvY2F0aW9uRXhjZXB0aW9uIGUpIHsKLQkJCQkJY29udGVudHMgPSAiKmVycm9yKiI7Ci0JCQkJfQotCQkJCWlmICh1c2VGb3JtYXR0ZXIpCi0JCQkJCVN5c3RlbS5vdXQucHJpbnRsbihmb3JtYXR0ZXIuZm9ybWF0KHBhcnRpdGlvbnNbaV0uZ2V0T2Zmc2V0KCkpICsgIjoiICsgZm9ybWF0dGVyLmZvcm1hdChwYXJ0aXRpb25zW2ldLmdldExlbmd0aCgpKSArICIgLSAiICsgcGFydGl0aW9uc1tpXS5nZXRUeXBlKCkgKyAiIFsiICsgU3RyaW5nVXRpbHMuZXNjYXBlKGNvbnRlbnRzKSArICJdIik7Ci0JCQkJZWxzZQotCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4ocGFydGl0aW9uc1tpXSArICIgWyIgKyBTdHJpbmdVdGlscy5lc2NhcGUoY29udGVudHMpICsgIl0iKTsKLQkJCX0KLQkJfQotCQljaGVja1NlYW1zKCk7Ci0JCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQlpblN0cmVhbS5jbG9zZSgpOwotCi0JCWlmIChwYXJ0aXRpb25zID09IG51bGwpCi0JCQlyZXR1cm4gLTE7Ci0JCXJldHVybiBwYXJ0aXRpb25zLmxlbmd0aDsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIHNpbmdsZSBwYXJ0aXRpb24gYXQgdGhlIGdpdmVuIG9mZnNldCBmb3IgdGhlIGdpdmVuIGZpbGUsIHVzaW5nIHRoZQotCSAqIGRlZmF1bHQgcGFydGl0aW9uZXIgZm9yIHRoYXQgZmlsZSB0eXBlLiAgVGhpcyB0ZXN0IGFsbG93cyBmb3IgdmVyaWZ5aW5nIHRoZSB6ZXJvLWxlbmd0aAotCSAqIHBhcnRpdGlvbmluZyBiZWhhdmlvci4KLQkgKiAKLQkgKiBAcGFyYW0gZmlsZW5hbWUKLQkgKiBAcGFyYW0gb2Zmc2V0Ci0JICogQHJldHVybiBJVHlwZWRSZWdpb24KLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCi0JICogQHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbgotCSAqLwotCXByb3RlY3RlZCBJVHlwZWRSZWdpb24gZ2V0UGFydGl0aW9uVGVzdChTdHJpbmcgZmlsZW5hbWUsIGludCBvZmZzZXQpIHRocm93cyBJT0V4Y2VwdGlvbiwgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlucHV0U3RyZWFtIGluU3RyZWFtID0gZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKGZpbGVuYW1lKTsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvckVkaXQoZmlsZW5hbWUsIGluU3RyZWFtLCBudWxsKTsKLQotCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCi0JCXBhcnRpdGlvbnMgPSBudWxsOwotCQlJVHlwZWRSZWdpb24gcGFydGl0aW9uID0gc3RydWN0dXJlZERvY3VtZW50LmdldFBhcnRpdGlvbihvZmZzZXQpOwotCQlpZiAoREVCVUdfUFJJTlRfUkVTVUxUKSB7Ci0JCQlTdHJpbmcgY29udGVudHMgPSBudWxsOwotCi0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlxuZmlsZW5hbWU6ICIgKyBmaWxlbmFtZSk7Ci0JCQl0cnkgewotCQkJCWNvbnRlbnRzID0gc3RydWN0dXJlZERvY3VtZW50LmdldChwYXJ0aXRpb24uZ2V0T2Zmc2V0KCksIHBhcnRpdGlvbi5nZXRMZW5ndGgoKSk7Ci0JCQl9Ci0JCQljYXRjaCAoQmFkTG9jYXRpb25FeGNlcHRpb24gZSkgewotCQkJCWNvbnRlbnRzID0gIiplcnJvcioiOwotCQkJfQotCQkJU3lzdGVtLm91dC5wcmludGxuKHBhcnRpdGlvbiArICIgWyIgKyBTdHJpbmdVdGlscy5lc2NhcGUoY29udGVudHMpICsgIl0iKTsKLQkJfQotCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJaW5TdHJlYW0uY2xvc2UoKTsKLQotCQlyZXR1cm4gcGFydGl0aW9uOwotCX0KLQotCS8qKgotCSAqIFZlcmlmaWVzIHRoYXQgdGhlIGdpdmVuIHBhcnRpdGlvbnMgYXJlIG9mIHRoZSBnaXZlbiBwYXJ0aXRpb24gdHlwZXMKLQkgKiBAcGFyYW0gdHlwZWRSZWdpb25zCi0JICogQHBhcmFtIHR5cGVzCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgdmVyaWZ5UGFydGl0aW9uVHlwZXMoSVR5cGVkUmVnaW9uIGFjdHVhbFR5cGVkUmVnaW9uc1tdLCBTdHJpbmcgZXhwZWN0ZWRUeXBlc1tdKSB7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgZXhwZWN0ZWRUeXBlcy5sZW5ndGg7IGkrKykKLQkJCWFzc2VydEVxdWFscygicGFydGl0aW9uIHR5cGUgbWlzbWF0Y2hlZCIsIGV4cGVjdGVkVHlwZXNbaV0sIGFjdHVhbFR5cGVkUmVnaW9uc1tpXS5nZXRUeXBlKCkpOwotCX0KLQotCS8qKgotCSAqIFZlcmlmaWVzIHRoYXQgdGhlIGdpdmVuIHBhcnRpdGlvbnMgYmVnaW4gYXQgdGhlIGdpdmVuIG9mZnNldHMKLQkgKiBAcGFyYW0gdHlwZWRSZWdpb25zCi0JICogQHBhcmFtIHR5cGVzCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgdmVyaWZ5UGFydGl0aW9uUmVnaW9ucyhJVHlwZWRSZWdpb24gdHlwZWRSZWdpb25zW10sIGludCBvZmZzZXRzW10pIHsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBvZmZzZXRzLmxlbmd0aDsgaSsrKSB7Ci0JCQlhc3NlcnRFcXVhbHMoIm9mZnNldCBtaXNtYXRjaGVkIiwgdHlwZWRSZWdpb25zW2ldLmdldE9mZnNldCgpLCBvZmZzZXRzW2ldKTsKLQkJCWlmIChpID4gMCkgewotCQkJCWFzc2VydEVxdWFscygibGVuZ3RocyBtaXNhbGlnbmVkIiwgdHlwZWRSZWdpb25zW2ldLmdldE9mZnNldCgpLCB0eXBlZFJlZ2lvbnNbaSAtIDFdLmdldE9mZnNldCgpICsgdHlwZWRSZWdpb25zW2kgLSAxXS5nZXRMZW5ndGgoKSk7Ci0JCQl9Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3RleHQvdGVzdGZpbGVzL2h0bWwvZXhhbXBsZTAxLmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3RleHQvdGVzdGZpbGVzL2h0bWwvZXhhbXBsZTAxLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhMGZmZTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy90ZXh0L3Rlc3RmaWxlcy9odG1sL2V4YW1wbGUwMS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBTWVNURU0gbm9uc2Vuc2U+Ci08aHRtbD4KLTxibzwhLS1jb21tZW50cy0tPmR5PgotYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTwvYm9keT48L2h0bWw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3RleHQvdGVzdGZpbGVzL2h0bWwvZXhhbXBsZTAyLmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3RleHQvdGVzdGZpbGVzL2h0bWwvZXhhbXBsZTAyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwMjg2YzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy90ZXh0L3Rlc3RmaWxlcy9odG1sL2V4YW1wbGUwMi5odG1sCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy90ZXh0L3Rlc3RmaWxlcy9odG1sL2V4YW1wbGUwMy5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy90ZXh0L3Rlc3RmaWxlcy9odG1sL2V4YW1wbGUwMy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzhkYWYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdGV4dC90ZXN0ZmlsZXMvaHRtbC9leGFtcGxlMDMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPGh0bWw+PGhlYWQ+Ci08TUVUQSBjcmVhdG9yPXdzc2EvNC4wcHJlMTE5PgotPHRpdGxlPlNjcmlwdCBUZXN0czwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLTxTY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPjwvU0NSSVBUPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy90ZXh0L3Rlc3RmaWxlcy9odG1sL2V4YW1wbGUwNC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy90ZXh0L3Rlc3RmaWxlcy9odG1sL2V4YW1wbGUwNC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODA3OGVmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdGV4dC90ZXN0ZmlsZXMvaHRtbC9leGFtcGxlMDQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIyODMgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08SFRNTD4KLTxIRUFEPgotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVMtQVNDSUkiPgotPE1FVEEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJJQk0gU29mdHdhcmUgRGV2ZWxvcG1lbnQgUGxhdGZvcm0iPgotPFRJVExFPmVtcHR5Lmh0bTwvVElUTEU+Ci08U1RZTEUgdHlwZT0idGV4dC9jc3MiPgotPCEtLQotLmNsYXNzMCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMSB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMiB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMyB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMyB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNSB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNiB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNyB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzOCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzOSB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMTAgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczExIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MxMiB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMTMgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczEzIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MxNCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMTUgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczE2IHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MxNyB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMTggewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczE5IHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MyMCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMjEgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczIyIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MyMyB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMjMgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczI0IHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MyNSB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMjYgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczI3IHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MyOCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMjkgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczMwIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MzMSB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMzIgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczMzIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MzMyB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMzQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczM1IHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MzNiB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMzcgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczM4IHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MzOSB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNDAgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczQxIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M0MiB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNDMgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczQzIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M0NCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNDUgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczQ2IHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M0NyB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNDggewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczQ5IHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M1MCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNTEgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczUyIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M1MyB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNTMgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczU0IHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M1NSB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNTYgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczU3IHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M1OCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNTkgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczYwIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M2MSB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNjIgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczYzIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M2MyB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNjQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczY1IHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M2NiB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNjcgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczY4IHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M2OSB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNzAgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczcxIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M3MiB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNzMgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczczIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M3NCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNzUgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczc2IHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M3NyB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNzggewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczc5IHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M4MCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzODEgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczgyIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M4MyB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzODMgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczg0IHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M4NSB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzODYgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczg3IHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M4OCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzODkgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczkwIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M5MSB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzOTIgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczkzIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M5MyB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzOTQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczk1IHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M5NiB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzOTcgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczk4IHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M5OSB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMCBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMSBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMiBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMyBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMyBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNCBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNSBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNiBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNyBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzOCBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzOSBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMTAgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczExIFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MxMiBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMTMgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczEzIFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MxNCBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMTUgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczE2IFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MxNyBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMTggVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczE5IFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MyMCBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMjEgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczIyIFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MyMyBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMjMgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczI0IFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MyNSBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMjYgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczI3IFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MyOCBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMjkgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczMwIFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MzMSBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMzIgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczMzIFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MzMyBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMzQgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczM1IFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MzNiBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMzcgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczM4IFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MzOSBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNDAgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczQxIFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M0MiBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNDMgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczQzIFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M0NCBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNDUgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczQ2IFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M0NyBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNDggVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczQ5IFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M1MCBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNTEgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczUyIFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M1MyBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNTMgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczU0IFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M1NSBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNTYgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczU3IFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M1OCBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNTkgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczYwIFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M2MSBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNjIgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczYzIFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M2MyBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNjQgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczY1IFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M2NiBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNjcgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczY4IFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M2OSBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNzAgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczcxIFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M3MiBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNzMgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczczIFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M3NCBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNzUgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczc2IFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M3NyBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNzggVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczc5IFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M4MCBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzODEgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczgyIFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M4MyBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzODMgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczg0IFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M4NSBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzODYgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczg3IFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M4OCBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzODkgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczkwIFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M5MSBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzOTIgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczkzIFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M5MyBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzOTQgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczk1IFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M5NiBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzOTcgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczk4IFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M5OSBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLS0+Ci08L1NUWUxFPgotPC9IRUFEPgotPEJPRFk+Ci08VEFCTEUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotCTxUQk9EWT4KLQkJPFRSPgotCQkJPFREIGNvbHNwYW49IjIiPjxUQUJMRSBib3JkZXI9IjEiPgotCQkJCTxUQk9EWT4KLQkJCQkJPFRSPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJPC9UUj4KLQkJCQk8L1RCT0RZPgotCQkJPC9UQUJMRT4KLQkJCTwvVEQ+PC9UUj4KLQkJPFRSPgotCQkJPFREIHJvd3NwYW49IjQiPgotCQkJPFRBQkxFIGJvcmRlcj0iMSI+Ci0JCQkJPFRCT0RZPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCTwvVEJPRFk+Ci0JCQk8L1RBQkxFPgotCQkJPC9URD4KLQkJCTxURD4KLQkJCTxUQUJMRSBib3JkZXI9IjEiPgotCQkJCTxUQk9EWT4KLQkJCQkJPFRSPgotCQkJCQkJPFREPmE8L1REPgotCQkJCQkJPFREPmI8L1REPgotCQkJCQkJPFREPmM8L1REPgotCQkJCQkJPFREPmQ8L1REPgotCQkJCQkJPFREPmU8L1REPgotCQkJCQkJPFREPmY8L1REPgotCQkJCQkJPFREPmc8L1REPgotCQkJCQkJPFREPmg8L1REPgotCQkJCQkJPFREPmk8L1REPgotCQkJCQkJPFREPmo8L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+YTwvVEQ+Ci0JCQkJCQk8VEQ+YjwvVEQ+Ci0JCQkJCQk8VEQ+YzwvVEQ+Ci0JCQkJCQk8VEQ+ZDwvVEQ+Ci0JCQkJCQk8VEQ+ZTwvVEQ+Ci0JCQkJCQk8VEQ+ZjwvVEQ+Ci0JCQkJCQk8VEQ+ZzwvVEQ+Ci0JCQkJCQk8VEQ+aDwvVEQ+Ci0JCQkJCQk8VEQ+aTwvVEQ+Ci0JCQkJCQk8VEQ+ajwvVEQ+Ci0JCQkJCTwvVFI+Ci0JCQkJCTxUUj4KLQkJCQkJCTxURD5hPC9URD4KLQkJCQkJCTxURD5iPC9URD4KLQkJCQkJCTxURD5jPC9URD4KLQkJCQkJCTxURD5kPC9URD4KLQkJCQkJCTxURD5lPC9URD4KLQkJCQkJCTxURD5mPC9URD4KLQkJCQkJCTxURD5nPC9URD4KLQkJCQkJCTxURD5oPC9URD4KLQkJCQkJCTxURD5pPC9URD4KLQkJCQkJCTxURD5qPC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPmE8L1REPgotCQkJCQkJPFREPmI8L1REPgotCQkJCQkJPFREPmM8L1REPgotCQkJCQkJPFREPmQ8L1REPgotCQkJCQkJPFREPmU8L1REPgotCQkJCQkJPFREPmY8L1REPgotCQkJCQkJPFREPmc8L1REPgotCQkJCQkJPFREPmg8L1REPgotCQkJCQkJPFREPmk8L1REPgotCQkJCQkJPFREPmo8L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+YTwvVEQ+Ci0JCQkJCQk8VEQ+YjwvVEQ+Ci0JCQkJCQk8VEQ+YzwvVEQ+Ci0JCQkJCQk8VEQ+ZDwvVEQ+Ci0JCQkJCQk8VEQ+ZTwvVEQ+Ci0JCQkJCQk8VEQ+ZjwvVEQ+Ci0JCQkJCQk8VEQ+ZzwvVEQ+Ci0JCQkJCQk8VEQ+aDwvVEQ+Ci0JCQkJCQk8VEQ+aTwvVEQ+Ci0JCQkJCQk8VEQ+ajwvVEQ+Ci0JCQkJCTwvVFI+Ci0JCQkJCTxUUj4KLQkJCQkJCTxURD5hPC9URD4KLQkJCQkJCTxURD5iPC9URD4KLQkJCQkJCTxURD5jPC9URD4KLQkJCQkJCTxURD5kPC9URD4KLQkJCQkJCTxURD5lPC9URD4KLQkJCQkJCTxURD5mPC9URD4KLQkJCQkJCTxURD5nPC9URD4KLQkJCQkJCTxURD5oPC9URD4KLQkJCQkJCTxURD5pPC9URD4KLQkJCQkJCTxURD5qPC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPmE8L1REPgotCQkJCQkJPFREPmI8L1REPgotCQkJCQkJPFREPmM8L1REPgotCQkJCQkJPFREPmQ8L1REPgotCQkJCQkJPFREPmU8L1REPgotCQkJCQkJPFREPmY8L1REPgotCQkJCQkJPFREPmc8L1REPgotCQkJCQkJPFREPmg8L1REPgotCQkJCQkJPFREPmk8L1REPgotCQkJCQkJPFREPmo8L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+YTwvVEQ+Ci0JCQkJCQk8VEQ+YjwvVEQ+Ci0JCQkJCQk8VEQ+YzwvVEQ+Ci0JCQkJCQk8VEQ+ZDwvVEQ+Ci0JCQkJCQk8VEQ+ZTwvVEQ+Ci0JCQkJCQk8VEQ+ZjwvVEQ+Ci0JCQkJCQk8VEQ+ZzwvVEQ+Ci0JCQkJCQk8VEQ+aDwvVEQ+Ci0JCQkJCQk8VEQ+aTwvVEQ+Ci0JCQkJCQk8VEQ+ajwvVEQ+Ci0JCQkJCTwvVFI+Ci0JCQkJCTxUUj4KLQkJCQkJCTxURD5hPC9URD4KLQkJCQkJCTxURD5iPC9URD4KLQkJCQkJCTxURD5jPC9URD4KLQkJCQkJCTxURD5kPC9URD4KLQkJCQkJCTxURD5lPC9URD4KLQkJCQkJCTxURD5mPC9URD4KLQkJCQkJCTxURD5nPC9URD4KLQkJCQkJCTxURD5oPC9URD4KLQkJCQkJCTxURD5pPC9URD4KLQkJCQkJCTxURD5qPC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPmE8L1REPgotCQkJCQkJPFREPmI8L1REPgotCQkJCQkJPFREPmM8L1REPgotCQkJCQkJPFREPmQ8L1REPgotCQkJCQkJPFREPmU8L1REPgotCQkJCQkJPFREPmY8L1REPgotCQkJCQkJPFREPmc8L1REPgotCQkJCQkJPFREPmg8L1REPgotCQkJCQkJPFREPmk8L1REPgotCQkJCQkJPFREPmo8L1REPgotCQkJCQk8L1RSPgotCQkJCTwvVEJPRFk+Ci0JCQk8L1RBQkxFPgotCQkJPC9URD4KLQkJPC9UUj4KLQkJPFRSPjxURD4KLQkJCTxUQUJMRSBib3JkZXI9IjEiPgotCQkJCTxUQk9EWT4KLQkJCQkJPFRSPgotCQkJCQkJPFREPmE8L1REPgotCQkJCQkJPFREPmI8L1REPgotCQkJCQkJPFREPmM8L1REPgotCQkJCQkJPFREPmQ8L1REPgotCQkJCQkJPFREPmU8L1REPgotCQkJCQkJPFREPmY8L1REPgotCQkJCQkJPFREPmc8L1REPgotCQkJCQkJPFREPmg8L1REPgotCQkJCQkJPFREPmk8L1REPgotCQkJCQkJPFREPmo8L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+YTwvVEQ+Ci0JCQkJCQk8VEQ+YjwvVEQ+Ci0JCQkJCQk8VEQ+YzwvVEQ+Ci0JCQkJCQk8VEQ+ZDwvVEQ+Ci0JCQkJCQk8VEQ+ZTwvVEQ+Ci0JCQkJCQk8VEQ+ZjwvVEQ+Ci0JCQkJCQk8VEQ+ZzwvVEQ+Ci0JCQkJCQk8VEQ+aDwvVEQ+Ci0JCQkJCQk8VEQ+aTwvVEQ+Ci0JCQkJCQk8VEQ+ajwvVEQ+Ci0JCQkJCTwvVFI+Ci0JCQkJCTxUUj4KLQkJCQkJCTxURD5hPC9URD4KLQkJCQkJCTxURD5iPC9URD4KLQkJCQkJCTxURD5jPC9URD4KLQkJCQkJCTxURD5kPC9URD4KLQkJCQkJCTxURD5lPC9URD4KLQkJCQkJCTxURD5mPC9URD4KLQkJCQkJCTxURD5nPC9URD4KLQkJCQkJCTxURD5oPC9URD4KLQkJCQkJCTxURD5pPC9URD4KLQkJCQkJCTxURD5qPC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPmE8L1REPgotCQkJCQkJPFREPmI8L1REPgotCQkJCQkJPFREPmM8L1REPgotCQkJCQkJPFREPmQ8L1REPgotCQkJCQkJPFREPmU8L1REPgotCQkJCQkJPFREPmY8L1REPgotCQkJCQkJPFREPmc8L1REPgotCQkJCQkJPFREPmg8L1REPgotCQkJCQkJPFREPmk8L1REPgotCQkJCQkJPFREPmo8L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+YTwvVEQ+Ci0JCQkJCQk8VEQ+YjwvVEQ+Ci0JCQkJCQk8VEQ+YzwvVEQ+Ci0JCQkJCQk8VEQ+ZDwvVEQ+Ci0JCQkJCQk8VEQ+ZTwvVEQ+Ci0JCQkJCQk8VEQ+ZjwvVEQ+Ci0JCQkJCQk8VEQ+ZzwvVEQ+Ci0JCQkJCQk8VEQ+aDwvVEQ+Ci0JCQkJCQk8VEQ+aTwvVEQ+Ci0JCQkJCQk8VEQ+ajwvVEQ+Ci0JCQkJCTwvVFI+Ci0JCQkJCTxUUj4KLQkJCQkJCTxURD5hPC9URD4KLQkJCQkJCTxURD5iPC9URD4KLQkJCQkJCTxURD5jPC9URD4KLQkJCQkJCTxURD5kPC9URD4KLQkJCQkJCTxURD5lPC9URD4KLQkJCQkJCTxURD5mPC9URD4KLQkJCQkJCTxURD5nPC9URD4KLQkJCQkJCTxURD5oPC9URD4KLQkJCQkJCTxURD5pPC9URD4KLQkJCQkJCTxURD5qPC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPmE8L1REPgotCQkJCQkJPFREPmI8L1REPgotCQkJCQkJPFREPmM8L1REPgotCQkJCQkJPFREPmQ8L1REPgotCQkJCQkJPFREPmU8L1REPgotCQkJCQkJPFREPmY8L1REPgotCQkJCQkJPFREPmc8L1REPgotCQkJCQkJPFREPmg8L1REPgotCQkJCQkJPFREPmk8L1REPgotCQkJCQkJPFREPmo8L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+YTwvVEQ+Ci0JCQkJCQk8VEQ+YjwvVEQ+Ci0JCQkJCQk8VEQ+YzwvVEQ+Ci0JCQkJCQk8VEQ+ZDwvVEQ+Ci0JCQkJCQk8VEQ+ZTwvVEQ+Ci0JCQkJCQk8VEQ+ZjwvVEQ+Ci0JCQkJCQk8VEQ+ZzwvVEQ+Ci0JCQkJCQk8VEQ+aDwvVEQ+Ci0JCQkJCQk8VEQ+aTwvVEQ+Ci0JCQkJCQk8VEQ+ajwvVEQ+Ci0JCQkJCTwvVFI+Ci0JCQkJCTxUUj4KLQkJCQkJCTxURD5hPC9URD4KLQkJCQkJCTxURD5iPC9URD4KLQkJCQkJCTxURD5jPC9URD4KLQkJCQkJCTxURD5kPC9URD4KLQkJCQkJCTxURD5lPC9URD4KLQkJCQkJCTxURD5mPC9URD4KLQkJCQkJCTxURD5nPC9URD4KLQkJCQkJCTxURD5oPC9URD4KLQkJCQkJCTxURD5pPC9URD4KLQkJCQkJCTxURD5qPC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPmE8L1REPgotCQkJCQkJPFREPmI8L1REPgotCQkJCQkJPFREPmM8L1REPgotCQkJCQkJPFREPmQ8L1REPgotCQkJCQkJPFREPmU8L1REPgotCQkJCQkJPFREPmY8L1REPgotCQkJCQkJPFREPmc8L1REPgotCQkJCQkJPFREPmg8L1REPgotCQkJCQkJPFREPmk8L1REPgotCQkJCQkJPFREPmo8L1REPgotCQkJCQk8L1RSPgotCQkJCTwvVEJPRFk+Ci0JCQk8L1RBQkxFPgotCQkJPC9URD4KLQkJPC9UUj4KLQkJPFRSPjxURD4KLQkJCTxUQUJMRSBib3JkZXI9IjEiPgotCQkJCTxUQk9EWT4KLQkJCQkJPFRSPgotCQkJCQkJPFREPmE8L1REPgotCQkJCQkJPFREPmI8L1REPgotCQkJCQkJPFREPmM8L1REPgotCQkJCQkJPFREPmQ8L1REPgotCQkJCQkJPFREPmU8L1REPgotCQkJCQkJPFREPmY8L1REPgotCQkJCQkJPFREPmc8L1REPgotCQkJCQkJPFREPmg8L1REPgotCQkJCQkJPFREPmk8L1REPgotCQkJCQkJPFREPmo8L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+YTwvVEQ+Ci0JCQkJCQk8VEQ+YjwvVEQ+Ci0JCQkJCQk8VEQ+YzwvVEQ+Ci0JCQkJCQk8VEQ+ZDwvVEQ+Ci0JCQkJCQk8VEQ+ZTwvVEQ+Ci0JCQkJCQk8VEQ+ZjwvVEQ+Ci0JCQkJCQk8VEQ+ZzwvVEQ+Ci0JCQkJCQk8VEQ+aDwvVEQ+Ci0JCQkJCQk8VEQ+aTwvVEQ+Ci0JCQkJCQk8VEQ+ajwvVEQ+Ci0JCQkJCTwvVFI+Ci0JCQkJCTxUUj4KLQkJCQkJCTxURD5hPC9URD4KLQkJCQkJCTxURD5iPC9URD4KLQkJCQkJCTxURD5jPC9URD4KLQkJCQkJCTxURD5kPC9URD4KLQkJCQkJCTxURD5lPC9URD4KLQkJCQkJCTxURD5mPC9URD4KLQkJCQkJCTxURD5nPC9URD4KLQkJCQkJCTxURD5oPC9URD4KLQkJCQkJCTxURD5pPC9URD4KLQkJCQkJCTxURD5qPC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPmE8L1REPgotCQkJCQkJPFREPmI8L1REPgotCQkJCQkJPFREPmM8L1REPgotCQkJCQkJPFREPmQ8L1REPgotCQkJCQkJPFREPmU8L1REPgotCQkJCQkJPFREPmY8L1REPgotCQkJCQkJPFREPmc8L1REPgotCQkJCQkJPFREPmg8L1REPgotCQkJCQkJPFREPmk8L1REPgotCQkJCQkJPFREPmo8L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+YTwvVEQ+Ci0JCQkJCQk8VEQ+YjwvVEQ+Ci0JCQkJCQk8VEQ+YzwvVEQ+Ci0JCQkJCQk8VEQ+ZDwvVEQ+Ci0JCQkJCQk8VEQ+ZTwvVEQ+Ci0JCQkJCQk8VEQ+ZjwvVEQ+Ci0JCQkJCQk8VEQ+ZzwvVEQ+Ci0JCQkJCQk8VEQ+aDwvVEQ+Ci0JCQkJCQk8VEQ+aTwvVEQ+Ci0JCQkJCQk8VEQ+ajwvVEQ+Ci0JCQkJCTwvVFI+Ci0JCQkJCTxUUj4KLQkJCQkJCTxURD5hPC9URD4KLQkJCQkJCTxURD5iPC9URD4KLQkJCQkJCTxURD5jPC9URD4KLQkJCQkJCTxURD5kPC9URD4KLQkJCQkJCTxURD5lPC9URD4KLQkJCQkJCTxURD5mPC9URD4KLQkJCQkJCTxURD5nPC9URD4KLQkJCQkJCTxURD5oPC9URD4KLQkJCQkJCTxURD5pPC9URD4KLQkJCQkJCTxURD5qPC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPmE8L1REPgotCQkJCQkJPFREPmI8L1REPgotCQkJCQkJPFREPmM8L1REPgotCQkJCQkJPFREPmQ8L1REPgotCQkJCQkJPFREPmU8L1REPgotCQkJCQkJPFREPmY8L1REPgotCQkJCQkJPFREPmc8L1REPgotCQkJCQkJPFREPmg8L1REPgotCQkJCQkJPFREPmk8L1REPgotCQkJCQkJPFREPmo8L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+YTwvVEQ+Ci0JCQkJCQk8VEQ+YjwvVEQ+Ci0JCQkJCQk8VEQ+YzwvVEQ+Ci0JCQkJCQk8VEQ+ZDwvVEQ+Ci0JCQkJCQk8VEQ+ZTwvVEQ+Ci0JCQkJCQk8VEQ+ZjwvVEQ+Ci0JCQkJCQk8VEQ+ZzwvVEQ+Ci0JCQkJCQk8VEQ+aDwvVEQ+Ci0JCQkJCQk8VEQ+aTwvVEQ+Ci0JCQkJCQk8VEQ+ajwvVEQ+Ci0JCQkJCTwvVFI+Ci0JCQkJCTxUUj4KLQkJCQkJCTxURD5hPC9URD4KLQkJCQkJCTxURD5iPC9URD4KLQkJCQkJCTxURD5jPC9URD4KLQkJCQkJCTxURD5kPC9URD4KLQkJCQkJCTxURD5lPC9URD4KLQkJCQkJCTxURD5mPC9URD4KLQkJCQkJCTxURD5nPC9URD4KLQkJCQkJCTxURD5oPC9URD4KLQkJCQkJCTxURD5pPC9URD4KLQkJCQkJCTxURD5qPC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPmE8L1REPgotCQkJCQkJPFREPmI8L1REPgotCQkJCQkJPFREPmM8L1REPgotCQkJCQkJPFREPmQ8L1REPgotCQkJCQkJPFREPmU8L1REPgotCQkJCQkJPFREPmY8L1REPgotCQkJCQkJPFREPmc8L1REPgotCQkJCQkJPFREPmg8L1REPgotCQkJCQkJPFREPmk8L1REPgotCQkJCQkJPFREPmo8L1REPgotCQkJCQk8L1RSPgotCQkJCTwvVEJPRFk+Ci0JCQk8L1RBQkxFPgotCQkJPC9URD4KLQkJPC9UUj4KLQkJPFRSPjxURD4KLQkJCTxUQUJMRSBib3JkZXI9IjEiPgotCQkJCTxUQk9EWT4KLQkJCQkJPFRSPgotCQkJCQkJPFREPmE8L1REPgotCQkJCQkJPFREPmI8L1REPgotCQkJCQkJPFREPmM8L1REPgotCQkJCQkJPFREPmQ8L1REPgotCQkJCQkJPFREPmU8L1REPgotCQkJCQkJPFREPmY8L1REPgotCQkJCQkJPFREPmc8L1REPgotCQkJCQkJPFREPmg8L1REPgotCQkJCQkJPFREPmk8L1REPgotCQkJCQkJPFREPmo8L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+YTwvVEQ+Ci0JCQkJCQk8VEQ+YjwvVEQ+Ci0JCQkJCQk8VEQ+YzwvVEQ+Ci0JCQkJCQk8VEQ+ZDwvVEQ+Ci0JCQkJCQk8VEQ+ZTwvVEQ+Ci0JCQkJCQk8VEQ+ZjwvVEQ+Ci0JCQkJCQk8VEQ+ZzwvVEQ+Ci0JCQkJCQk8VEQ+aDwvVEQ+Ci0JCQkJCQk8VEQ+aTwvVEQ+Ci0JCQkJCQk8VEQ+ajwvVEQ+Ci0JCQkJCTwvVFI+Ci0JCQkJCTxUUj4KLQkJCQkJCTxURD5hPC9URD4KLQkJCQkJCTxURD5iPC9URD4KLQkJCQkJCTxURD5jPC9URD4KLQkJCQkJCTxURD5kPC9URD4KLQkJCQkJCTxURD5lPC9URD4KLQkJCQkJCTxURD5mPC9URD4KLQkJCQkJCTxURD5nPC9URD4KLQkJCQkJCTxURD5oPC9URD4KLQkJCQkJCTxURD5pPC9URD4KLQkJCQkJCTxURD5qPC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPmE8L1REPgotCQkJCQkJPFREPmI8L1REPgotCQkJCQkJPFREPmM8L1REPgotCQkJCQkJPFREPmQ8L1REPgotCQkJCQkJPFREPmU8L1REPgotCQkJCQkJPFREPmY8L1REPgotCQkJCQkJPFREPmc8L1REPgotCQkJCQkJPFREPmg8L1REPgotCQkJCQkJPFREPmk8L1REPgotCQkJCQkJPFREPmo8L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+YTwvVEQ+Ci0JCQkJCQk8VEQ+YjwvVEQ+Ci0JCQkJCQk8VEQ+YzwvVEQ+Ci0JCQkJCQk8VEQ+ZDwvVEQ+Ci0JCQkJCQk8VEQ+ZTwvVEQ+Ci0JCQkJCQk8VEQ+ZjwvVEQ+Ci0JCQkJCQk8VEQ+ZzwvVEQ+Ci0JCQkJCQk8VEQ+aDwvVEQ+Ci0JCQkJCQk8VEQ+aTwvVEQ+Ci0JCQkJCQk8VEQ+ajwvVEQ+Ci0JCQkJCTwvVFI+Ci0JCQkJCTxUUj4KLQkJCQkJCTxURD5hPC9URD4KLQkJCQkJCTxURD5iPC9URD4KLQkJCQkJCTxURD5jPC9URD4KLQkJCQkJCTxURD5kPC9URD4KLQkJCQkJCTxURD5lPC9URD4KLQkJCQkJCTxURD5mPC9URD4KLQkJCQkJCTxURD5nPC9URD4KLQkJCQkJCTxURD5oPC9URD4KLQkJCQkJCTxURD5pPC9URD4KLQkJCQkJCTxURD5qPC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPmE8L1REPgotCQkJCQkJPFREPmI8L1REPgotCQkJCQkJPFREPmM8L1REPgotCQkJCQkJPFREPmQ8L1REPgotCQkJCQkJPFREPmU8L1REPgotCQkJCQkJPFREPmY8L1REPgotCQkJCQkJPFREPmc8L1REPgotCQkJCQkJPFREPmg8L1REPgotCQkJCQkJPFREPmk8L1REPgotCQkJCQkJPFREPmo8L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+YTwvVEQ+Ci0JCQkJCQk8VEQ+YjwvVEQ+Ci0JCQkJCQk8VEQ+YzwvVEQ+Ci0JCQkJCQk8VEQ+ZDwvVEQ+Ci0JCQkJCQk8VEQ+ZTwvVEQ+Ci0JCQkJCQk8VEQ+ZjwvVEQ+Ci0JCQkJCQk8VEQ+ZzwvVEQ+Ci0JCQkJCQk8VEQ+aDwvVEQ+Ci0JCQkJCQk8VEQ+aTwvVEQ+Ci0JCQkJCQk8VEQ+ajwvVEQ+Ci0JCQkJCTwvVFI+Ci0JCQkJCTxUUj4KLQkJCQkJCTxURD5hPC9URD4KLQkJCQkJCTxURD5iPC9URD4KLQkJCQkJCTxURD5jPC9URD4KLQkJCQkJCTxURD5kPC9URD4KLQkJCQkJCTxURD5lPC9URD4KLQkJCQkJCTxURD5mPC9URD4KLQkJCQkJCTxURD5nPC9URD4KLQkJCQkJCTxURD5oPC9URD4KLQkJCQkJCTxURD5pPC9URD4KLQkJCQkJCTxURD5qPC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPmE8L1REPgotCQkJCQkJPFREPmI8L1REPgotCQkJCQkJPFREPmM8L1REPgotCQkJCQkJPFREPmQ8L1REPgotCQkJCQkJPFREPmU8L1REPgotCQkJCQkJPFREPmY8L1REPgotCQkJCQkJPFREPmc8L1REPgotCQkJCQkJPFREPmg8L1REPgotCQkJCQkJPFREPmk8L1REPgotCQkJCQkJPFREPmo8L1REPgotCQkJCQk8L1RSPgotCQkJCTwvVEJPRFk+Ci0JCQk8L1RBQkxFPgotCQkJPC9URD4KLQkJPC9UUj4KLQk8L1RCT0RZPgotPC9UQUJMRT4KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdXRpbHMvQ29tbW9uWE1MLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3V0aWxzL0NvbW1vblhNTC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NGUxNmEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdXRpbHMvQ29tbW9uWE1MLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMudXRpbHM7Ci0KLQotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKLQotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlcjsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5OwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5PdXRwdXRLZXlzOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uU291cmNlOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXI7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRmFjdG9yeTsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRmFjdG9yeUNvbmZpZ3VyYXRpb25FcnJvcjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLmRvbS5ET01Tb3VyY2U7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5zdHJlYW0uU3RyZWFtUmVzdWx0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5Mb2dnZXI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci0KLS8qKgotICovCi1wdWJsaWMgY2xhc3MgQ29tbW9uWE1MIHsKLQotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIERvY3VtZW50QnVpbGRlciBnZXREb2N1bWVudEJ1aWxkZXIoKSB7Ci0JCURvY3VtZW50QnVpbGRlciByZXN1bHQgPSBudWxsOwotCQl0cnkgewotCQkJcmVzdWx0ID0gRG9jdW1lbnRCdWlsZGVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpLm5ld0RvY3VtZW50QnVpbGRlcigpOwotCQl9Ci0JCWNhdGNoIChQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIGUpIHsKLQkJCUxvZ2dlci5sb2dFeGNlcHRpb24oZSk7Ci0JCX0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBEb2N1bWVudEJ1aWxkZXIgZ2V0RG9jdW1lbnRCdWlsZGVyKGJvb2xlYW4gdmFsaWRhdGluZykgewotCQlEb2N1bWVudEJ1aWxkZXIgcmVzdWx0ID0gbnVsbDsKLQkJdHJ5IHsKLQkJCURvY3VtZW50QnVpbGRlckZhY3RvcnkgaW5zdGFuY2UgPSBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0JCQlpbnN0YW5jZS5zZXRWYWxpZGF0aW5nKHZhbGlkYXRpbmcpOwotCQkJcmVzdWx0ID0gaW5zdGFuY2UubmV3RG9jdW1lbnRCdWlsZGVyKCk7Ci0JCX0KLQkJY2F0Y2ggKFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gZSkgewotCQkJTG9nZ2VyLmxvZ0V4Y2VwdGlvbihlKTsKLQkJfQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBzZXJpYWxpemUoRG9jdW1lbnQgZG9jdW1lbnQsIE91dHB1dFN0cmVhbSBvc3RyZWFtKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTb3VyY2UgZG9tU291cmNlID0gbmV3IERPTVNvdXJjZShkb2N1bWVudCk7Ci0JCXRyeSB7Ci0JCQlUcmFuc2Zvcm1lciBzZXJpYWxpemVyID0gVHJhbnNmb3JtZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCkubmV3VHJhbnNmb3JtZXIoKTsKLQkJCXRyeSB7Ci0JCQkJc2VyaWFsaXplci5zZXRPdXRwdXRQcm9wZXJ0eShPdXRwdXRLZXlzLklOREVOVCwgInllcyIpOwotCQkJCXNlcmlhbGl6ZXIuc2V0T3V0cHV0UHJvcGVydHkoIntodHRwOi8veG1sLmFwYWNoZS5vcmcveHNsdH1pbmRlbnQtYW1vdW50IiwgIjQiKTsKLQkJCQlzZXJpYWxpemVyLnNldE91dHB1dFByb3BlcnR5KE91dHB1dEtleXMuRU5DT0RJTkcsICJVVEYtMTYiKTsKLQkJCX0KLQkJCWNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgewotCQkJCS8vIHVuc3VwcG9ydGVkIHByb3BlcnRpZXMKLQkJCX0KLQkJCXNlcmlhbGl6ZXIudHJhbnNmb3JtKGRvbVNvdXJjZSwgbmV3IFN0cmVhbVJlc3VsdChvc3RyZWFtKSk7Ci0JCX0KLQkJY2F0Y2ggKFRyYW5zZm9ybWVyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQl0aHJvdyBuZXcgSU9FeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwotCQl9Ci0JCWNhdGNoIChUcmFuc2Zvcm1lckZhY3RvcnlDb25maWd1cmF0aW9uRXJyb3IgZSkgewotCQkJdGhyb3cgbmV3IElPRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKLQkJfQotCQljYXRjaCAoVHJhbnNmb3JtZXJFeGNlcHRpb24gZSkgewotCQkJdGhyb3cgbmV3IElPRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKLQkJfQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3V0aWxzL0RhdGVVdGlsLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3V0aWxzL0RhdGVVdGlsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxNzEwYTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy91dGlscy9EYXRlVXRpbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMudXRpbHM7Ci0KLWltcG9ydCBjb20uaWJtLmljdS50ZXh0LkRhdGVGb3JtYXQ7Ci1pbXBvcnQgY29tLmlibS5pY3UudGV4dC5TaW1wbGVEYXRlRm9ybWF0OwotaW1wb3J0IGphdmEudXRpbC5DYWxlbmRhcjsKLWltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKLQotLyoqCi0gKiBAYXV0aG9yIGRhdmlkdwotICoKLSAqIFRvIGNoYW5nZSB0aGlzIGdlbmVyYXRlZCBjb21tZW50IGVkaXQgdGhlIHRlbXBsYXRlIHZhcmlhYmxlICJ0eXBlY29tbWVudCI6Ci0gKiBXaW5kb3c+UHJlZmVyZW5jZXM+SmF2YT5UZW1wbGF0ZXMuCi0gKiBUbyBlbmFibGUgYW5kIGRpc2FibGUgdGhlIGNyZWF0aW9uIG9mIHR5cGUgY29tbWVudHMgZ28gdG8KLSAqIFdpbmRvdz5QcmVmZXJlbmNlcz5KYXZhPkNvZGUgR2VuZXJhdGlvbi4KLSAqLwotcHVibGljIGNsYXNzIERhdGVVdGlsIHsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBBbGxUZXN0cy4KLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXByaXZhdGUgc3RhdGljIFN0cmluZyBub3cgPSBudWxsOwotCi0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBub3coKSB7Ci0JCS8vIGp1c3QgY2FsY3VsYXRlIG9uY2UsIHNvIHdob2xlIHJ1biBhcyBzYW1lIHRpbWVzdGFtcAotCQlpZiAoRGF0ZVV0aWwubm93ID09IG51bGwpIHsKLQkJCURhdGVGb3JtYXQgZm9ybWF0ID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoInl5eXknLSdNTSctJ2RkJy0na2snLSdtbSctJ3NzIik7Ci0JCQlDYWxlbmRhciBjYWxlbmRhciA9IENhbGVuZGFyLmdldEluc3RhbmNlKCk7Ci0JCQlEYXRlIHRvZGF5ID0gY2FsZW5kYXIuZ2V0VGltZSgpOwotCQkJRGF0ZVV0aWwubm93ID0gZm9ybWF0LmZvcm1hdCh0b2RheSk7Ci0JCX0KLQkJcmV0dXJuIERhdGVVdGlsLm5vdzsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdXRpbHMvRmlsZVV0aWwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdXRpbHMvRmlsZVV0aWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzdiOTc0Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3V0aWxzL0ZpbGVVdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMudXRpbHM7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlbmFtZUZpbHRlcjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLnV0aWwuTnVsbElucHV0U3RyZWFtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLQotLyoqCi0gKiBAYXV0aG9yIGRhdmlkdwotICoKLSAqLwotcHVibGljIGNsYXNzIEZpbGVVdGlsIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMiOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvbW1vbkVPTCA9ICJcclxuIjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBmTGluZVNlcGFyYXRvciA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBmUGF0aFNlcGFyYXRvciA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgicGF0aC5zZXBhcmF0b3IiKTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBmRmlsZVNlcGFyYXRvciA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgiZmlsZS5zZXBhcmF0b3IiKTsKLQotCXN0YXRpYyBGaWxlIHByZXZpb3VzUmVzdWx0c0RpcmVjdG9yeSA9IG51bGw7Ci0Jc3RhdGljIHByaXZhdGUgU3RyaW5nIGxvZ1N1YkRpcmVjdG9yeVBhdGg7Ci0KLQlwcml2YXRlIHN0YXRpYyBib29sZWFuIG5vdFRyaWVkWWV0ID0gdHJ1ZTsKLQlzdGF0aWMgaW50IHVuaXF1ZU51bSA9IDA7Ci0KLQlwdWJsaWMgc3RhdGljIGNsYXNzIERpckZpbGVuYW1lRmlsdGVyIGltcGxlbWVudHMgRmlsZW5hbWVGaWx0ZXIgewotCQlTdHJpbmcgc3RhcnRPZkFjY2VwdGFibGVOYW1lczsKLQotCQlwdWJsaWMgRGlyRmlsZW5hbWVGaWx0ZXIoU3RyaW5nIHN0YXJ0T2ZEaXJOYW1lKSB7Ci0JCQlzdGFydE9mQWNjZXB0YWJsZU5hbWVzID0gc3RhcnRPZkRpck5hbWU7Ci0JCX0KLQotCQkvKioKLQkJICogQHNlZSBqYXZhLmlvLkZpbGVGaWx0ZXIjYWNjZXB0KEZpbGUpCi0JCSAqLwotCQlwdWJsaWMgYm9vbGVhbiBhY2NlcHQoRmlsZSBwYXRobmFtZSwgU3RyaW5nIGZpbGVuYW1lKSB7Ci0JCQkvLyB3ZSdsbCBqdXN0IGFzc3VtZSBpZiBpdCBzdGFydHMgd2l0aCByaWdodCBrZXksIGl0IGlzIGEgZGlyZWN0b3J5IC4uLiBmb3Igbm93Ci0JCQlyZXR1cm4gZmlsZW5hbWUuc3RhcnRzV2l0aChzdGFydE9mQWNjZXB0YWJsZU5hbWVzKTsKLQkJfQotCi0JfQotCi0JcHVibGljIHN0YXRpYyBGaWxlIGdldFByZXZpb3VzUmVzdWx0c0RpcmVjdG9yeShTdHJpbmcgZGlyZWN0b3J5Um9vdE5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCWlmIChwcmV2aW91c1Jlc3VsdHNEaXJlY3RvcnkgPT0gbnVsbCAmJiBub3RUcmllZFlldCkgewotCQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShQTFVHSU5fSUQpOwotCQkJVVJMIHVybCA9IGJ1bmRsZS5nZXRFbnRyeSgiLyIpOyAvLyROT04tTkxTLTEkCi0KLQkJCVVSTCBmaW5hbHVybCA9IEZpbGVMb2NhdG9yLnRvRmlsZVVSTCh1cmwpOwotCQkJU3RyaW5nIGZpbmFsRmlsZSA9IGZpbmFsdXJsLmdldFBhdGgoKTsKLQotCQkJRmlsZSBwbHVnaW5Ib21lRGlyID0gbmV3IEZpbGUoZmluYWxGaWxlKTsKLQkJCUZpbGVuYW1lRmlsdGVyIGRpckZpbHRlciA9IG5ldyBEaXJGaWxlbmFtZUZpbHRlcihkaXJlY3RvcnlSb290TmFtZSk7Ci0JCQlGaWxlW10gYWxsRGlycyA9IHBsdWdpbkhvbWVEaXIubGlzdEZpbGVzKGRpckZpbHRlcik7Ci0KLQkJCS8vIGFzc3VtZSBmaXJzdCBpbiBsaXN0IGlzIG5ld2VzdCwgdGhlbiBzdGFydCBsb29raW5nIHdpdGggdGhlIAotCQkJLy8gc2Vjb25kIGl0ZW0gLi4uIGp1c3QgdG8gYXZvaWQgIm51bGwiIGNhc2UgY2hlY2tpbmcKLQkJCWlmIChhbGxEaXJzLmxlbmd0aCA+IDApIHsKLQkJCQlGaWxlIGN1cnJlbnROZXdlc3QgPSBhbGxEaXJzWzBdOwotCQkJCWZvciAoaW50IGkgPSAxOyBpIDwgYWxsRGlycy5sZW5ndGg7IGkrKykgewotCQkJCQlGaWxlIGN1cnJlbnQgPSBhbGxEaXJzW2ldOwotCQkJCQkvLyBOT1RFOiB3ZSBnbyBieSBtb2RpZmllZCBkYXRlLCBub3QgYnkgdGhlIGFjdHVhbCB0aW1lIHN0YW1wIGluIG5hbWUuCi0JCQkJCS8vIFRoaXMgc2hvdWxkIHdvcmsgZm9yIGFsbCBub3JtYWwgY2FzZXMsIGJ1dCBtYXkgbm90IGlmIHNvbWVvbmUgZG9lcyBzb21lCi0JCQkJCS8vICJmdW5ueSIgY29weWluZywgb3IgdXBkYXRpbmcgZnJvbSByZXBvc2l0b3J5LgotCQkJCQlpZiAoY3VycmVudC5sYXN0TW9kaWZpZWQoKSA+IGN1cnJlbnROZXdlc3QubGFzdE1vZGlmaWVkKCkpIHsKLQkJCQkJCWN1cnJlbnROZXdlc3QgPSBjdXJyZW50OwotCQkJCQl9Ci0JCQkJfQotCQkJCXByZXZpb3VzUmVzdWx0c0RpcmVjdG9yeSA9IGN1cnJlbnROZXdlc3Q7Ci0JCQl9Ci0JCQlub3RUcmllZFlldCA9IGZhbHNlOwotCQl9Ci0JCXJldHVybiBwcmV2aW91c1Jlc3VsdHNEaXJlY3Rvcnk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBGaWxlIG1ha2VGaWxlRm9yKFN0cmluZyBkaXJlY3RvcnksIFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIHRlc3RSZXN1bHRzRGlyZWN0b3J5UHJlZml4KSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKFBMVUdJTl9JRCk7Ci0JCVVSTCB1cmwgPSBidW5kbGUuZ2V0RW50cnkoIi8iKTsgIC8vJE5PTi1OTFMtMSQKLQkJVVJMIGxvY2FsVVJMID0gRmlsZUxvY2F0b3IudG9GaWxlVVJMKHVybCk7Ci0JCVN0cmluZyBpbnN0YWxsUGF0aCA9IGxvY2FsVVJMLmdldFBhdGgoKTsKLQkJU3RyaW5nIHRvdGFsRGlyZWN0b3J5ID0gaW5zdGFsbFBhdGggKyBkaXJlY3Rvcnk7Ci0JCVN0cmluZyB0b3RhbFBhdGggPSB0b3RhbERpcmVjdG9yeSArICIvIiArIGZpbGVuYW1lOwotCQlVUkwgdG90YWxVUkwgPSBuZXcgVVJMKHVybCwgdG90YWxQYXRoKTsKLQkJLy9VUkwgZmluYWx1cmwgPSBQbGF0Zm9ybS5hc0xvY2FsVVJMKHRvdGFsVVJMKTsKLQkJU3RyaW5nIGZpbmFsRmlsZSA9IHRvdGFsVVJMLmdldEZpbGUoKTsKLQkJRmlsZSBmaWxlID0gbmV3IEZpbGUoZmluYWxGaWxlKTsKLQkJU3RyaW5nIGZpbmFsUGF0aCA9IGZpbGUuZ2V0UGFyZW50KCk7Ci0JCUZpbGUgZGlyID0gbmV3IEZpbGUoZmluYWxQYXRoKTsKLQkJaWYgKCFkaXIuZXhpc3RzKCkpIHsKLQkJCS8vIGEgbGl0dGxlIHNhZmV0eSBuZXQsIGJlIHN1cmUgdGhlIHByZXZpb3VzIG5ld2VzdCBkaXJlY3RvcnkKLQkJCS8vIGlzIGluaXRpYWxpemVkLCBqdXN0IGluIGNhc2Ugbm8gb25lIGVsc2UgaGFzIGRvbmUgc28KLQkJCWlmICh0ZXN0UmVzdWx0c0RpcmVjdG9yeVByZWZpeCAhPSBudWxsICYmIHRlc3RSZXN1bHRzRGlyZWN0b3J5UHJlZml4Lmxlbmd0aCgpID4gMCkgewotCQkJCUZpbGVVdGlsLmdldFByZXZpb3VzUmVzdWx0c0RpcmVjdG9yeSh0ZXN0UmVzdWx0c0RpcmVjdG9yeVByZWZpeCk7Ci0JCQl9Ci0JCQkvLyBub3cgaXRzICJzYWZlIiB0byBtYWtlIHRoZSBuZXcgb25lCi0JCQlkaXIubWtkaXJzKCk7Ci0JCX0KLQkJcmV0dXJuIGZpbGU7Ci0JfQotCi0JLyoqCi0JICogSnVzdCBhIGdlbmVyYWwgdXRpbGl0eSBtZXRob2QKLQkgKiBAcGFyYW0gZmlsZW5hbWUKLQkgKiBAcmV0dXJuIFN0cmluZwotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEV4dGVuc2lvbihTdHJpbmcgZmlsZW5hbWUpIHsKLQkJU3RyaW5nIGV4dGVuc2lvbiA9IG51bGw7Ci0JCWludCBkb3RQb3N0aW9uID0gZmlsZW5hbWUubGFzdEluZGV4T2YoJy4nKTsKLQkJaWYgKGRvdFBvc3Rpb24gPiAtMSkgewotCQkJZXh0ZW5zaW9uID0gZmlsZW5hbWUuc3Vic3RyaW5nKGRvdFBvc3Rpb24gKyAxKTsKLQkJfQotCQllbHNlIHsKLQkJCWV4dGVuc2lvbiA9IG5ldyBTdHJpbmcoKTsKLQkJfQotCQlyZXR1cm4gZXh0ZW5zaW9uOwotCX0KLQotCS8qKgotCSAqIEdlbmVyYWwgcHVycG9zZSB1dGlsaXR5IG1ldGhvZCB0byBlbnN1cmUgdGhlIGxvZwotCSAqIGRpcmVjdG9yeSBleGlzdHMsIGFuZCByZXR1cm5zIHRoZSBuYW1lLiAKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRMb2dEaXJlY3RvcnkoKSB7Ci0JCWlmIChsb2dTdWJEaXJlY3RvcnlQYXRoID09IG51bGwpIHsKLQkJCVN0cmluZyBtYWluRGlyZWN0b3J5ID0gIi9sb2dzIjsKLQkJCUZpbGUgZGlyID0gbmV3IEZpbGUobWFpbkRpcmVjdG9yeSk7Ci0JCQllbnN1cmVFeGlzdHMoZGlyKTsKLQkJCVN0cmluZyBzdWJEaXJlY3RvcnkgPSBUaW1lc3RhbXBVdGlsLnRpbWVzdGFtcCgpOwotCQkJbG9nU3ViRGlyZWN0b3J5UGF0aCA9IG1haW5EaXJlY3RvcnkgKyAiLyIgKyBzdWJEaXJlY3Rvcnk7Ci0JCQlGaWxlIHN1YmRpciA9IG5ldyBGaWxlKGxvZ1N1YkRpcmVjdG9yeVBhdGgpOwotCQkJZW5zdXJlRXhpc3RzKHN1YmRpcik7Ci0JCX0KLQkJcmV0dXJuIGxvZ1N1YkRpcmVjdG9yeVBhdGg7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGVuc3VyZUV4aXN0cyhGaWxlIGRpcikgewotCQlpZiAoIWRpci5leGlzdHMoKSkgewotCQkJZGlyLm1rZGlycygpOwotCQl9Ci0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UGVyZm9ybWFuY2VPdXRwdXRMb2dOYW1lKCkgewotCQlTdHJpbmcgcmVzdWx0ID0gbnVsbDsKLQkJU3RyaW5nIGRpcmVjdG9yeU5hbWUgPSBGaWxlVXRpbC5nZXRMb2dEaXJlY3RvcnkoKTsKLQkJU3RyaW5nIGV4dGVuc2lvbiA9ICIub3V0IjsKLQkJU3RyaW5nIGJhc2VOYW1lID0gInNlZFRlc3RzIjsKLQkJbG9uZyBub3cgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJU3RyaW5nIG5vd1N0ciA9IFN0cmluZy52YWx1ZU9mKG5vdyk7Ci0JCXJlc3VsdCA9IGRpcmVjdG9yeU5hbWUgKyBGaWxlVXRpbC5mRmlsZVNlcGFyYXRvciArIGJhc2VOYW1lICsgbm93U3RyICsgZXh0ZW5zaW9uOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQlwdWJsaWMgc3RhdGljIElET01Nb2RlbCBjcmVhdGVIVE1MTW9kZWwoKSB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBudWxsOwotCQl0cnkgewotCi0JCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0KLQkJCW1vZGVsID0gbW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yRWRpdCgidGVzdCIgKyB1bmlxdWVOdW0rKyArICIuaHRtbCIsIG5ldyBOdWxsSW5wdXRTdHJlYW0oKSwgbnVsbCk7IC8vJE5PTi1OTFMtMSQKLQotCQkJLy8gYWx3YXlzIHVzZSB0aGUgc2FtZSBsaW5lIGRlbGltaXRlciBmb3IgdGhlc2UgdGVzdHMsIHJlZ2FyZGxlc3MKLQkJCS8vIG9mIHBsYWZvcm0gb3IgcHJlZmVyZW5jZSBzZXR0aW5ncwotCQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0TGluZURlbGltaXRlcihjb21tb25FT0wpOwotCi0KLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJcmV0dXJuICAoSURPTU1vZGVsKSBtb2RlbDsKLQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy91dGlscy9TdHJpbmdDb21wYXJlVXRpbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy91dGlscy9TdHJpbmdDb21wYXJlVXRpbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMzNiYTZhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdXRpbHMvU3RyaW5nQ29tcGFyZVV0aWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy51dGlsczsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdSZWFkZXI7Ci0KLXB1YmxpYyBjbGFzcyBTdHJpbmdDb21wYXJlVXRpbCB7Ci0KLQlwdWJsaWMgYm9vbGVhbiBlcXVhbHNJZ25vcmVMaW5lU2VwZXJhdG9yKFN0cmluZyBzdHJpbmcxLCBTdHJpbmcgc3RyaW5nMikgewotCi0JCWlmIChzdHJpbmcxID09IG51bGwpCi0JCQlyZXR1cm4gZmFsc2U7Ci0JCWlmIChzdHJpbmcyID09IG51bGwpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJU3RyaW5nUmVhZGVyIHMxUmVhZGVyID0gbmV3IFN0cmluZ1JlYWRlcihzdHJpbmcxKTsKLQkJU3RyaW5nUmVhZGVyIHMyUmVhZGVyID0gbmV3IFN0cmluZ1JlYWRlcihzdHJpbmcyKTsKLQotCQkvLyBhc3N1bWUgdHJ1ZSB1bmxlc3MgZmluZCBldmlkZW5jZSB0byB0aGUgY29udHJhcnkKLQkJYm9vbGVhbiByZXN1bHQgPSB0cnVlOwotCQlpbnQgczFDaGFyID0gLTE7Ci0JCWludCBzMkNoYXIgPSAtMTsKLQkJZG8gewotCi0JCQlzMUNoYXIgPSBnZXROZXh0Q2hhcihzMVJlYWRlcik7Ci0KLQkJCXMyQ2hhciA9IGdldE5leHRDaGFyKHMyUmVhZGVyKTsKLQotCQkJaWYgKHMxQ2hhciAhPSBzMkNoYXIpIHsKLQkJCQlyZXN1bHQgPSBmYWxzZTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQl3aGlsZSAoczFDaGFyICE9IC0xICYmIHMyQ2hhciAhPSAtMSk7Ci0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQkvKioKLQkgKiBNZXRob2QgZ2V0TmV4dENoYXIuCi0JICogQHBhcmFtIHMxUmVhZGVyCi0JICogQHJldHVybiBjaGFyCi0JICovCi0JcHJpdmF0ZSBpbnQgZ2V0TmV4dENoYXIoU3RyaW5nUmVhZGVyIHJlYWRlcikgewotCQlpbnQgbmV4dENoYXIgPSAtMTsKLQkJdHJ5IHsKLQkJCW5leHRDaGFyID0gcmVhZGVyLnJlYWQoKTsKLQkJCXdoaWxlIChpc0VPTChuZXh0Q2hhcikpIHsKLQkJCQluZXh0Q2hhciA9IHJlYWRlci5yZWFkKCk7Ci0JCQl9Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJcmV0dXJuIG5leHRDaGFyOwotCX0KLQotCXByaXZhdGUgYm9vbGVhbiBpc0VPTChpbnQgYUNoYXIpIHsKLQkJcmV0dXJuIChhQ2hhciA9PSAnXG4nIHx8IGFDaGFyID09ICdccicpOwotCX0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdXRpbHMvVGVzdFJ1bnRpbWVFeGNlcHRpb24uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdXRpbHMvVGVzdFJ1bnRpbWVFeGNlcHRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzA5YTBlZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3V0aWxzL1Rlc3RSdW50aW1lRXhjZXB0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy51dGlsczsKLQotCi0KLS8qKgotICogVGhlIFNvdXJjZUVkaXRpbmdSdW50aW1lRXhjZXB0aW9uIGlzIG9mdGVuIHRocm93biBieSBTb3VyY2UgRWRpdG9yIG1ldGhvZHMgd2hlbgotICogYSBzZXJ2aWNlIHdlIHVzZSB0aHJvd3MgYSBjaGVja2VkIGV4Y2VwdGlvbiwgYnV0IHdlIHdhbnQgdG8gY29udmVydCBhbmQgdHJlYXQKLSAqIGFzIGEgcnVudGltZSBleGNlcHRpb24uIChTdWNoIGFzIEJhZExvY2F0aW9uRXhjZXB0aW9uIGlzIGEgY29tbW9uIGV4YW1wbGUpLgotICovCi1wdWJsaWMgY2xhc3MgVGVzdFJ1bnRpbWVFeGNlcHRpb24gZXh0ZW5kcyBSdW50aW1lRXhjZXB0aW9uIHsKLQkvKioKLQkgKiBEZWZhdWx0IDxjb2RlPnNlcmlhbFZlcnNpb25VSUQ8L2NvZGU+Ci0JICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7Ci0JcHJpdmF0ZSBUaHJvd2FibGUgb3JpZ2luYWxFeGNlcHRpb247Ci0KLQlwdWJsaWMgVGVzdFJ1bnRpbWVFeGNlcHRpb24oKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIFRlc3RSdW50aW1lRXhjZXB0aW9uKFN0cmluZyBzKSB7Ci0JCXN1cGVyKHMpOwotCX0KLQotCS8qKgotCSAqIFRoaXMgZm9ybSBvZiB0aGUgY29uc3RydWN0b3IgaXMgdXNlZCB0byB3cmFwcGVyIGFub3RoZXIgZXhjZXB0aW9uLgotCSAqLwotCXB1YmxpYyBUZXN0UnVudGltZUV4Y2VwdGlvbihUaHJvd2FibGUgdCkgewotCQlzdXBlcigpOwotCQlvcmlnaW5hbEV4Y2VwdGlvbiA9IHQ7Ci0JfQotCi0JLyoqCi0JICogVGhpcyBmb3JtIG9mIHRoZSBjb25zdHJ1Y3RvciBpcyB1c2VkIHRvIHdyYXBwZXIgYW5vdGhlciBleGNlcHRpb24sIGJ1dCBzdGlsbAotCSAqIHByb3ZpZGUgYSBuZXcgZGVzY3JpcHRpdmUgbWVzc2FnZS4KLQkgKi8KLQlwdWJsaWMgVGVzdFJ1bnRpbWVFeGNlcHRpb24oVGhyb3dhYmxlIHQsIFN0cmluZyBzKSB7Ci0JCXN1cGVyKHMpOwotCQlvcmlnaW5hbEV4Y2VwdGlvbiA9IHQ7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRNZXNzYWdlKCkgewotCQlTdHJpbmcgcmVzdWx0ID0gc3VwZXIuZ2V0TWVzc2FnZSgpOwotCQlpZiAoKHJlc3VsdCAhPSBudWxsKSAmJiAoIXJlc3VsdC5lbmRzV2l0aCgiLiIpKSkgLy8kTk9OLU5MUy0xJAotCQkJcmVzdWx0ID0gcmVzdWx0ICsgIi4iOyAvLyROT04tTkxTLTEkCi0JCWlmIChvcmlnaW5hbEV4Y2VwdGlvbiAhPSBudWxsKSB7Ci0JCQlTdHJpbmcgZW1iZWRkZWRNZXNzYWdlID0gb3JpZ2luYWxFeGNlcHRpb24uZ2V0TWVzc2FnZSgpOwotCQkJLy8gbm90IGFsbCBleGNlcHRpb25zIChlLmcuIG1hbnkgTnVsbFBvaW50ZXIgZXhjZXB0aW9uKSBoYXZlIG1lc3NhZ2VzCi0JCQlTdHJpbmcgb3JpZ2luYWxFcnJvciA9ICJPcmlnaW5hbCBlcnJvcjoiOwkvLyROT04tTkxTLTEkCi0JCQlpZiAoZW1iZWRkZWRNZXNzYWdlICE9IG51bGwpCi0JCQkJcmVzdWx0ID0gcmVzdWx0ICsgIiAgIiArIG9yaWdpbmFsRXJyb3IgKyAiICIgKyBlbWJlZGRlZE1lc3NhZ2U7Ly8kTk9OLU5MUy0yJC8vJE5PTi1OTFMtMSQKLQkJCWVsc2UKLQkJCQlyZXN1bHQgPSByZXN1bHQgKyAiICAiICsgb3JpZ2luYWxFcnJvciArICIgIiArIG9yaWdpbmFsRXhjZXB0aW9uLnRvU3RyaW5nKCk7Ly8kTk9OLU5MUy0yJC8vJE5PTi1OTFMtMSQKLQkJfQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCXB1YmxpYyBUaHJvd2FibGUgZ2V0T3JpZ2luYWxFeGNlcHRpb24oKSB7Ci0JCXJldHVybiBvcmlnaW5hbEV4Y2VwdGlvbjsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotCQkvLyB3ZSBkb24ndCBwdXQgc3VwZXIudG9TdHJpbmcgb3IgZ2V0Q2xhc3MgdG8gImhpZGUiIHRoYXQgaXQgd2FzIGEKLQkJLy8gU291cmNlRWRpdGluZyBleGNlcHRpb24gKG90aGVyd2lzZSwgZm9jdXMgZ29lcyBvbiB0aGF0LAotCQkvLyBpbnN0ZWFkIG9mIG9yaWdpbmFsIGV4Y2VwdGlvbi4KLQkJU3RyaW5nIG1lc3NhZ2UgPSBnZXRNZXNzYWdlKCk7Ci0JCS8vIG1lc3NhZ2Ugc2hvdWxkIG5ldmVyIGJlIG51bGwgLi4uIGJ1dCBqdXN0IGluIGNhc2UKLQkJcmV0dXJuIChtZXNzYWdlICE9IG51bGwpID8gbWVzc2FnZSA6IHN1cGVyLnRvU3RyaW5nKCk7Ci0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3V0aWxzL1Rlc3RXcml0ZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdXRpbHMvVGVzdFdyaXRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTNmNTYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdXRpbHMvVGVzdFdyaXRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnV0aWxzOwotCi1pbXBvcnQgamF2YS5pby5TdHJpbmdXcml0ZXI7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0V3JpdGVyIGV4dGVuZHMgU3RyaW5nV3JpdGVyIHsKLQkvLyB3ZSBkb24ndCByZWFsbHkgd2FudCB0byB1c2UgdGhlIHN5c3RlbSBFT0wsIHNpbmNlCi0JLy8gd2Ugd2FudCBhIGNvbW1vbiBvbmNlIGFjcm9zcyBwbGF0Zm9ybXMsIENWUywgZXRjLgotCXB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIGNvbW1vbkVPTCA9ICJcclxuIjsKLQotCS8vU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpOyAKLQotCXB1YmxpYyB2b2lkIHdyaXRlbG4oU3RyaW5nIGxpbmUpIHsKLQkJd3JpdGUobGluZSk7Ci0JCXdyaXRlKGNvbW1vbkVPTCk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdXRpbHMvVGltZXN0YW1wVXRpbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy91dGlscy9UaW1lc3RhbXBVdGlsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0YWMzYjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy91dGlscy9UaW1lc3RhbXBVdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy51dGlsczsKLQotaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuRGF0ZUZvcm1hdDsKLWltcG9ydCBjb20uaWJtLmljdS50ZXh0LlNpbXBsZURhdGVGb3JtYXQ7Ci1pbXBvcnQgamF2YS51dGlsLkNhbGVuZGFyOwotaW1wb3J0IGphdmEudXRpbC5EYXRlOwotCi0vKioKLSAqIEBhdXRob3IgZGF2aWR3Ci0gKgotICogVGhpcyBjbGFzcyBwcm92aWRlcyBvbmUgdGltZXN0YW1wIHBlciBWTSBydW4uCi0gKiAoVGVjaG5pY2FsbHksIHBlciBjbGFzcyBsb2FkaW5nLikKLSAqLwotcHVibGljIGNsYXNzIFRpbWVzdGFtcFV0aWwgewotCi0JcHJpdmF0ZSBzdGF0aWMgRGF0ZSB0aW1lc3RhbXAgPSBudWxsOwotCXByaXZhdGUgc3RhdGljIERhdGVGb3JtYXQgc2hvcnRGb3JtYXQgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgieXl5eSctJ01NJy0nZGQiKTsKLQkvLwlwcml2YXRlIHN0YXRpYyBEYXRlRm9ybWF0IGxvbmdGb3JtYXQgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgieXl5eSctJ01NJy0nZGQnLSdrayctJ21tJy0nc3MiKTsKLQotCXByaXZhdGUgc3RhdGljIFN0cmluZyBub3dTaG9ydCA9IG51bGw7Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyB0aW1lc3RhbXAoKSB7Ci0KLQkJaWYgKFRpbWVzdGFtcFV0aWwubm93U2hvcnQgPT0gbnVsbCkgewotCQkJVGltZXN0YW1wVXRpbC5ub3dTaG9ydCA9IHNob3J0Rm9ybWF0LmZvcm1hdChlbnN1cmVUaW1lc3RhbXAoKSk7Ci0JCX0KLQkJcmV0dXJuIFRpbWVzdGFtcFV0aWwubm93U2hvcnQ7Ci0JfQotCi0JcHJvdGVjdGVkIHN0YXRpYyBEYXRlIGVuc3VyZVRpbWVzdGFtcCgpIHsKLQkJLy8ganVzdCBjYWxjdWxhdGUgJ3RpbWVzdGFtcCcgb25jZSBwZXIgY2xhc3MgbG9hZGluZywgCi0JCS8vIHNvIHRoaXMgJ3RpbWVzdGFtcCcgcmVtYWlucyB0aGUgc2FtZSBkdXJpbmcgCi0JCS8vIGVudGlyZSBydW4uIAotCQlpZiAoVGltZXN0YW1wVXRpbC50aW1lc3RhbXAgPT0gbnVsbCkgewotCQkJQ2FsZW5kYXIgY2FsZW5kYXIgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOwotCQkJVGltZXN0YW1wVXRpbC50aW1lc3RhbXAgPSBjYWxlbmRhci5nZXRUaW1lKCk7Ci0JCX0KLQkJcmV0dXJuIFRpbWVzdGFtcFV0aWwudGltZXN0YW1wOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy91dGlscy9Xb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdXRpbHMvV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzNzBhY2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy91dGlscy9Xb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy51dGlsczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotCi1jbGFzcyBXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IgaW1wbGVtZW50cyBJUHJvZ3Jlc3NNb25pdG9yIHsKLQlwcml2YXRlIGJvb2xlYW4gZmluaXNoZWQgPSBmYWxzZTsKLQotCXB1YmxpYyB2b2lkIGJlZ2luVGFzayhTdHJpbmcgbmFtZSwgaW50IHRvdGFsV29yaykgewotCQkvLyB3ZSBkb250JyBjYXJlCi0JfQotCi0JcHVibGljIHZvaWQgZG9uZSgpIHsKLQkJZmluaXNoZWQgPSB0cnVlOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzRmluaXNoZWQoKSB7Ci0JCXJldHVybiBmaW5pc2hlZDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBpbnRlcm5hbFdvcmtlZChkb3VibGUgd29yaykgewotCQkvLyB3ZSBkb250JyBjYXJlCi0JfQotCi0JcHVibGljIGJvb2xlYW4gaXNDYW5jZWxlZCgpIHsKLQkJcmV0dXJuIGZpbmlzaGVkOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldENhbmNlbGVkKGJvb2xlYW4gdmFsdWUpIHsKLQkJaWYgKHZhbHVlID09IHRydWUpCi0JCQlmaW5pc2hlZCA9IHRydWU7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0VGFza05hbWUoU3RyaW5nIG5hbWUpIHsKLQkJLy8gd2UgZG9uJ3QgY2FyZQotCX0KLQotCXB1YmxpYyB2b2lkIHN1YlRhc2soU3RyaW5nIG5hbWUpIHsKLQkJLy8gd2UgZG9uJ3QgY2FyZQotCX0KLQotCXB1YmxpYyB2b2lkIHdvcmtlZChpbnQgd29yaykgewotCQkvLyB3ZSBkb24ndCBjYXJlCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3Rlc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NjkyOTI2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvdGVzdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLQotPHByb2plY3QKLSAgICBuYW1lPSJ0ZXN0c3VpdGUiCi0gICAgZGVmYXVsdD0icnVuIgotICAgIGJhc2VkaXI9Ii4iPgotICAgIAotICAgIDwhLS0gVGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGlzIHNjcmlwdCAtLT4KLSAgICA8IS0tICR7ZWNsaXBzZS1ob21lfSAgIC0tPgotICAgIDwhLS0gJHtidWlsZERpcmVjdG9yeX0gIC0tPgotICAgIDwhLS0gJHtidWlsZExhYmVsfSAgICAgICAgLS0+Ci0KLSAgICA8IS0tIHNob3VsZCBiZSBsaXR0bGUgbmVlZCB0byBjaGFuZ2Ugd2hhdCdzIGFib3ZlICAtLT4KLQotCTxwcm9wZXJ0eQotCQluYW1lPSJwbHVnaW4tbmFtZSIKLQkJdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9ImNsYXNzbmFtZSIKLSAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMuSFRNTENvcmVUZXN0U3VpdGUiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9InRlc3RUeXBlIgotICAgICAgICB2YWx1ZT0iY29yZS10ZXN0IiAvPgotCi0gICAgPCEtLSBzaG91bGQgYmUgbGl0dGxlIG5lZWQgdG8gY2hhbmdlIHdoYXQncyBiZWxvdyAtLT4KLQotICAgIDxlY2hvIG1lc3NhZ2U9ImJhc2VkaXI6ICR7YmFzZWRpcn0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iZWNsaXBzZS1ob21lOiAke2VjbGlwc2UtaG9tZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iYnVpbGREaXJlY3Rvcnk6ICR7YnVpbGREaXJlY3Rvcnl9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9InBsdWdpbi1uYW1lOiAke3BsdWdpbi1uYW1lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJjbGFzc25hbWU6ICR7Y2xhc3NuYW1lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJ0ZXN0VHlwZSAke3Rlc3RUeXBlfSIgLz4KLQotCi0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9ImxpYnJhcnktZmlsZSIKLSAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4xLjAvbGlicmFyeS54bWwiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9IndvcmtzcGFjZSIKLSAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9qdW5pdHdvcmtzcGFjZXMvJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgIAotICAgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4KLSAgICA8IS0tIGFsbCB0ZXN0cyB0aGF0IGFyZSB0byBiZSBydW4uIEluaXRpYWxpemF0aW9uIGZvciBpbmRpdmlkdWFsIHRlc3RzIC0tPgotICAgIDwhLS0gc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIC0tPgotICAgIDx0YXJnZXQgbmFtZT0iaW5pdCI+Ci0gICAgICAgIDx0c3RhbXAgLz4KLSAgICAgICAgPGRlbGV0ZT4KLSAgICAgICAgICAgIDxmaWxlc2V0Ci0gICAgICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iCi0gICAgICAgICAgICAgICAgaW5jbHVkZXM9IiR7cGx1Z2luLW5hbWV9Lip4bWwiIC8+Ci0gICAgICAgIDwvZGVsZXRlPgotICAgICAgICA8IS0tIG1ha2UgZGlyZWN0b3J5LCBpbiBjYXNlIHBhdGggZG9lc24ndCBleGlzdCB5ZXQgLS0+Ci0gICAgICAgIDxta2RpciBkaXI9IiR7d29ya3NwYWNlfSIgLz4KLSAgICAgICAgPCEtLSAgYnV0IGRlbGV0ZSB0byBtYWtlIHN1cmUgZnJlc2ggY29udGVudHMtLT4KLSAgICAgICAgPGRlbGV0ZQotICAgICAgICAgICAgZGlyPSIke3dvcmtzcGFjZX0iCi0gICAgICAgICAgICBxdWlldD0idHJ1ZSIgLz4KLQotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9InN1aXRlIj4KLQotICAgICAgICA8YW50Ci0gICAgICAgICAgICB0YXJnZXQ9IiR7dGVzdFR5cGV9IgotICAgICAgICAgICAgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iZGF0YS1kaXIiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7d29ya3NwYWNlfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9InBsdWdpbi1uYW1lIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImNsYXNzbmFtZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtjbGFzc25hbWV9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0icGx1Z2luLXBhdGgiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICA8L2FudD4KLQotICAgICAgICA8Y29weQotICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIgotICAgICAgICAgICAgZmlsZT0iJHt3b3Jrc3BhY2V9Ly5tZXRhZGF0YS8ubG9nIgotICAgICAgICAgICAgdG9maWxlPSIke2J1aWxkRGlyZWN0b3J5fS8ke2J1aWxkTGFiZWx9L3Rlc3RSZXN1bHRzL2NvbnNvbGVsb2dzLyR7cGx1Z2luLW5hbWV9LmNvbnNvbGVsb2cudHh0IiAvPgotCi0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGNvZGUgdG8gY2xlYW51cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBhZnRlciAtLT4KLSAgICA8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+Ci0gICAgPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgotICAgIDx0YXJnZXQgbmFtZT0iY2xlYW51cCI+Ci0gICAgICAgIDwhLS0gdXN1YWxseSBubyBuZWVkIHRvIGRlbGV0ZSB3b3Jrc3BhY2UgdW50aWwgbmV4dCBydW4sIGFuZCBsZWF2aW5nIGl0IGFsbG93cyBpbnNwZWN0aW9uIC0tPgotICAgICAgICA8IS0tIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIiAvPiAtLT4KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4KLSAgICA8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+Ci0gICAgPHRhcmdldAotICAgICAgICBuYW1lPSJydW4iCi0gICAgICAgIGRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+Ci0gICAgICAgIDxhbnQKLSAgICAgICAgICAgIHRhcmdldD0iY29sbGVjdCIKLSAgICAgICAgICAgIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLSAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImluY2x1ZGVzIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfS4qeG1sIiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0ib3V0cHV0LWZpbGUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIgLz4KLSAgICAgICAgPC9hbnQ+Ci0gICAgPC90YXJnZXQ+Ci0KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2U3MzkzMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS40Ii8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTlkZmI3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLWJpbgotYnVpbGQueG1sCi10ZW1wLmZvbGRlcgotaHRtbGVuY29kaW5ndGVzdHMuamFyCi1qYXZhQ29tcGlsZXIuaHRtbGVuY29kaW5ndGVzdHMuamFyLmFyZ3MKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwNjhiNWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZzwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmYTVjOTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozMiBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWVuY29kaW5nLzxwcm9qZWN0Pj1JU08tODg1OS0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkZDhiNWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotI1N1biBBcHIgMTYgMTQ6Mzc6MjEgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmNsZWFuT3V0cHV0Rm9sZGVyPWNsZWFuCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmR1cGxpY2F0ZVJlc291cmNlVGFzaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmludmFsaWRDbGFzc3BhdGg9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLnJlc291cmNlQ29weUV4Y2x1c2lvbkZpbHRlcj0qLmxhdW5jaAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2lyY3VsYXJDbGFzc3BhdGg9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aC5leGNsdXNpb25QYXR0ZXJucz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGgubXVsdGlwbGVPdXRwdXRMb2NhdGlvbnM9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS40Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kb2MuY29tbWVudC5zdXBwb3J0PWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLm1heFByb2JsZW1QZXJVbml0PTEwMAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc0RlcHJlY2F0ZWRSZWY9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NOb3RWaXNpYmxlUmVmPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzVmlzaWJpbGl0eT1wcml2YXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzT3ZlcnJpZGluZz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNWaXNpYmlsaXR5PXB1YmxpYwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc092ZXJyaWRpbmc9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXByaXZhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnNhZmVUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExhYmVsPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS4zCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5pbmNvbXBhdGlibGVKREtMZXZlbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGxldGVDbGFzc3BhdGg9ZXJyb3IKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjJhYzY1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjM5IEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotaW50ZXJuYWwuZGVmYXVsdC5jb21wbGlhbmNlPWRlZmF1bHQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU5MzY4Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjMyIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcuZW5hYmxlLnByb2plY3QucmVmYWN0b3JpbmcuaGlzdG9yeT1mYWxzZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3MjQ5NTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLSNTdW4gQXByIDE2IDE0OjA1OjI5IEVEVCAyMDA2Ci1jb21waWxlcnMucC5idWlsZD0wCi1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLmlsbGVnYWwtYXR0LXZhbHVlPTAKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0wCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0wCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy5wLnVudXNlZC1lbGVtZW50LW9yLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkNzRjODUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUuMAotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMzAwLnF1YWxpZmllcgotQnVuZGxlLUNsYXNzUGF0aDogaHRtbGVuY29kaW5ndGVzdHMuamFyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy5IVE1MRW5jb2RpbmdUZXN0c1BsdWdpbgotQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IuMAotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcsCi0gb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcuaHRtbAotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKLSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLAotIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLAotIG9yZy5qdW5pdDtidW5kbGUtdmVyc2lvbj0iWzMuOC4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlCi1CdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS40CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy9hYm91dC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE5OWRmMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSwgMjAwODwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQ5YTNlYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotc291cmNlLmh0bWxlbmNvZGluZ3Rlc3RzLmphciA9IHNyYy8KLW91dHB1dC5odG1sZW5jb2Rpbmd0ZXN0cy5qYXIgPSBiaW4vCi1iaW4uaW5jbHVkZXMgPSBodG1sZW5jb2Rpbmd0ZXN0cy5qYXIsXAotICAgICAgICAgICAgICAgdGVzdGZpbGVzLyxcCi0gICAgICAgICAgICAgICB0ZXN0LnhtbCxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcwotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy9wbHVnaW4ucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNDliNTMyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBwcm9wZXJ0aWVzIGZpbGUgZm9yIG9yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nCi1CdW5kbGUtVmVuZG9yLjAgPSBFY2xpcHNlLm9yZwotQnVuZGxlLU5hbWUuMCA9IEhUTUwgRW5jb2RpbmcgVGVzdHMgUGx1Zy1pbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC90ZXN0cy9lbmNvZGluZy9IVE1MRW5jb2RpbmdUZXN0U3VpdGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC90ZXN0cy9lbmNvZGluZy9IVE1MRW5jb2RpbmdUZXN0U3VpdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk0NThmNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdGVzdHMvZW5jb2RpbmcvSFRNTEVuY29kaW5nVGVzdFN1aXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2Rpbmc7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcuaHRtbC5IVE1MRW5jb2RpbmdUZXN0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy5odG1sLkhUTUxIZWFkVG9rZW5pemVyVGVzdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLmh0bWwuVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uRm9ySFRNTDsKLQotcHVibGljIGNsYXNzIEhUTUxFbmNvZGluZ1Rlc3RTdWl0ZSBleHRlbmRzIFRlc3RTdWl0ZSB7Ci0KLQlwcml2YXRlIHN0YXRpYyBDbGFzc1tdIGNsYXNzZXMgPSBuZXcgQ2xhc3NbXXtIVE1MRW5jb2RpbmdUZXN0cy5jbGFzcywgSFRNTEhlYWRUb2tlbml6ZXJUZXN0ZXIuY2xhc3MsIFRlc3RDb250ZW50VHlwZURldGVjdGlvbkZvckhUTUwuY2xhc3N9OwotCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IEhUTUxFbmNvZGluZ1Rlc3RTdWl0ZSgpOwotCX0KLQotCXB1YmxpYyBIVE1MRW5jb2RpbmdUZXN0U3VpdGUoKSB7Ci0JCXN1cGVyKCJIVE1MIEVuY29kaW5nIFRlc3QgU3VpdGUiKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjbGFzc2VzLmxlbmd0aDsgaSsrKSB7Ci0JCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoY2xhc3Nlc1tpXSwgY2xhc3Nlc1tpXS5nZXROYW1lKCkpKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEBwYXJhbSB0aGVDbGFzcwotCSAqLwotCXB1YmxpYyBIVE1MRW5jb2RpbmdUZXN0U3VpdGUoQ2xhc3MgdGhlQ2xhc3MpIHsKLQkJc3VwZXIodGhlQ2xhc3MpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSB0aGVDbGFzcwotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIEhUTUxFbmNvZGluZ1Rlc3RTdWl0ZShDbGFzcyB0aGVDbGFzcywgU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIodGhlQ2xhc3MsIG5hbWUpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIEhUTUxFbmNvZGluZ1Rlc3RTdWl0ZShTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdGVzdHMvZW5jb2RpbmcvSFRNTEVuY29kaW5nVGVzdHNQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC90ZXN0cy9lbmNvZGluZy9IVE1MRW5jb2RpbmdUZXN0c1BsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNzIxNjJmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC90ZXN0cy9lbmNvZGluZy9IVE1MRW5jb2RpbmdUZXN0c1BsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZzsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLQotLyoqCi0gKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSAqLwotcHVibGljIGNsYXNzIEhUTUxFbmNvZGluZ1Rlc3RzUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHsKLQkvLyBUaGUgc2hhcmVkIGluc3RhbmNlLgotCXByaXZhdGUgc3RhdGljIEhUTUxFbmNvZGluZ1Rlc3RzUGx1Z2luIHBsdWdpbjsKLQotCXB1YmxpYyBzdGF0aWMgTGlzdCBnZXRBbGxUZXN0RmlsZXMoU3RyaW5nIHRvcERpck5hbWUpIHsKLQkJTGlzdCByZXN1bHQgPSBudWxsOwotCQlVUkwgaW5zdGFsbFVSTCA9IGdldEluc3RhbGxMb2NhdGlvbigpOwotCQkvLyBTdHJpbmcgc2NoZW1lID0gaW5zdGFsbFVSTC5nZXRQcm90b2NvbCgpOwotCQlTdHJpbmcgcGF0aCA9IGluc3RhbGxVUkwuZ2V0UGF0aCgpOwotCQlTdHJpbmcgbG9jYXRpb24gPSBwYXRoICsgdG9wRGlyTmFtZTsKLQkJRmlsZSB0b3BEaXIgPSBuZXcgRmlsZShsb2NhdGlvbik7Ci0JCWlmICghdG9wRGlyLmlzRGlyZWN0b3J5KCkpIHsKLQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24odG9wRGlyTmFtZSArICIgaXMgbm90IGEgZGlyZWN0b3J5Iik7Ci0JCX0KLQkJcmVzdWx0ID0gZ2V0RmlsZXNJbkRpcih0b3BEaXIpOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIEhUTUxFbmNvZGluZ1Rlc3RzUGx1Z2luIGdldERlZmF1bHQoKSB7Ci0JCXJldHVybiBwbHVnaW47Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgTGlzdCBnZXRGaWxlc0luRGlyKEZpbGUgdG9wRGlyKSB7Ci0JCUxpc3QgZmlsZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCUZpbGVbXSB0b3BGaWxlcyA9IHRvcERpci5saXN0RmlsZXMoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCB0b3BGaWxlcy5sZW5ndGg7IGkrKykgewotCQkJRmlsZSBmaWxlID0gdG9wRmlsZXNbaV07Ci0JCQlpZiAoZmlsZS5pc0ZpbGUoKSkgewotCQkJCWZpbGVzLmFkZChmaWxlKTsKLQkJCX0KLQkJCWVsc2UgaWYgKGZpbGUuaXNEaXJlY3RvcnkoKSAmJiAhZmlsZS5nZXROYW1lKCkuZW5kc1dpdGgoIkNWUyIpKSB7Ci0JCQkJTGlzdCBpbm5lckZpbGVzID0gZ2V0RmlsZXNJbkRpcihmaWxlKTsKLQkJCQlmaWxlcy5hZGRBbGwoaW5uZXJGaWxlcyk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGZpbGVzOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgVVJMIGdldEluc3RhbGxMb2NhdGlvbigpIHsKLQkJVVJMIGluc3RhbGxMb2NhdGlvbiA9IFBsYXRmb3JtLmdldEJ1bmRsZSgib3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmciKS5nZXRFbnRyeSgiLyIpOwotCQlVUkwgcmVzb2x2ZWRMb2NhdGlvbiA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlyZXNvbHZlZExvY2F0aW9uID0gRmlsZUxvY2F0b3IucmVzb2x2ZShpbnN0YWxsTG9jYXRpb24pOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBpbXBvc3NpYmxlCi0JCQl0aHJvdyBuZXcgRXJyb3IoZSk7Ci0JCX0KLQkJcmV0dXJuIHJlc29sdmVkTG9jYXRpb247Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc3RyaW5nIGZyb20gdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwgb3IgJ2tleScgaWYgbm90Ci0JICogZm91bmQuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UmVzb3VyY2VTdHJpbmcoU3RyaW5nIGtleSkgewotCQlSZXNvdXJjZUJ1bmRsZSBidW5kbGUgPSBIVE1MRW5jb2RpbmdUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UmVzb3VyY2VCdW5kbGUoKTsKLQkJdHJ5IHsKLQkJCXJldHVybiAoYnVuZGxlICE9IG51bGwgPyBidW5kbGUuZ2V0U3RyaW5nKGtleSkgOiBrZXkpOwotCQl9Ci0JCWNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgewotCQkJcmV0dXJuIGtleTsKLQkJfQotCX0KLQotCXB1YmxpYyBzdGF0aWMgRmlsZSBnZXRUZXN0RmlsZShTdHJpbmcgZmlsZXBhdGgpIHsKLQkJVVJMIGluc3RhbGxVUkwgPSBnZXRJbnN0YWxsTG9jYXRpb24oKTsKLQkJLy8gU3RyaW5nIHNjaGVtZSA9IGluc3RhbGxVUkwuZ2V0UHJvdG9jb2woKTsKLQkJU3RyaW5nIHBhdGggPSBpbnN0YWxsVVJMLmdldFBhdGgoKTsKLQkJU3RyaW5nIGxvY2F0aW9uID0gcGF0aCArIGZpbGVwYXRoOwotCQlGaWxlIHJlc3VsdCA9IG5ldyBGaWxlKGxvY2F0aW9uKTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFJlYWRlciBnZXRUZXN0UmVhZGVyKFN0cmluZyBmaWxlcGF0aCkgdGhyb3dzIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiB7Ci0JCVVSTCBpbnN0YWxsVVJMID0gZ2V0SW5zdGFsbExvY2F0aW9uKCk7Ci0JCS8vIFN0cmluZyBzY2hlbWUgPSBpbnN0YWxsVVJMLmdldFByb3RvY29sKCk7Ci0JCVN0cmluZyBwYXRoID0gaW5zdGFsbFVSTC5nZXRQYXRoKCk7Ci0JCVN0cmluZyBsb2NhdGlvbiA9IHBhdGggKyBmaWxlcGF0aDsKLQkJUmVhZGVyIHJlc3VsdCA9IG5ldyBGaWxlUmVhZGVyKGxvY2F0aW9uKTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB3b3Jrc3BhY2UgaW5zdGFuY2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBJV29ya3NwYWNlIGdldFdvcmtzcGFjZSgpIHsKLQkJcmV0dXJuIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKTsKLQl9Ci0KLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIEhUTUxFbmNvZGluZ1Rlc3RzUGx1Z2luKCkgewotCQlzdXBlcigpOwotCQlwbHVnaW4gPSB0aGlzOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwKLQkgKi8KLQlwdWJsaWMgUmVzb3VyY2VCdW5kbGUgZ2V0UmVzb3VyY2VCdW5kbGUoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3Rlc3RzL2VuY29kaW5nL2h0bWwvSFRNTEVuY29kaW5nVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC90ZXN0cy9lbmNvZGluZy9odG1sL0hUTUxFbmNvZGluZ1Rlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyNjI4M2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3Rlc3RzL2VuY29kaW5nL2h0bWwvSFRNTEVuY29kaW5nVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcuaHRtbDsKLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci1pbXBvcnQgamF2YS5uaW8uY2hhcnNldC5DaGFyc2V0OwotaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuQ2hhcnNldERlY29kZXI7Ci1pbXBvcnQgamF2YS5uaW8uY2hhcnNldC5Db2RpbmdFcnJvckFjdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaW50ZXJuYWwuY29udGVudHR5cGUuSFRNTFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy5IVE1MRW5jb2RpbmdUZXN0c1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuRW5jb2RpbmdNZW1lbnRvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5JUmVzb3VyY2VDaGFyc2V0RGV0ZWN0b3I7Ci0KLXB1YmxpYyBjbGFzcyBIVE1MRW5jb2RpbmdUZXN0cyBleHRlbmRzIFRlc3RDYXNlIHsKLQotCS8qKgotCSAqIEVuc3VyZXMgdGhhdCBhbiBJbnB1dFN0cmVhbSBoYXMgbWFyay9yZXNldCBzdXBwb3J0LgotCSAqLwotCXByaXZhdGUgc3RhdGljIElucHV0U3RyZWFtIGdldE1hcmtTdXBwb3J0ZWRTdHJlYW0oSW5wdXRTdHJlYW0gb3JpZ2luYWwpIHsKLQkJaWYgKG9yaWdpbmFsID09IG51bGwpCi0JCQlyZXR1cm4gbnVsbDsKLQkJaWYgKG9yaWdpbmFsLm1hcmtTdXBwb3J0ZWQoKSkKLQkJCXJldHVybiBvcmlnaW5hbDsKLQkJcmV0dXJuIG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKG9yaWdpbmFsKTsKLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBmaWxlRGlyID0gImh0bWwvIjsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBmaWxlSG9tZSA9ICJ0ZXN0ZmlsZXMvIjsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBmaWxlTG9jYXRpb24gPSBmaWxlSG9tZSArIGZpbGVEaXI7Ci0JcHJpdmF0ZSBpbnQgUkVBRF9CVUZGRVJfU0laRSA9IDgwMDA7Ci0KLQlwdWJsaWMgSFRNTEVuY29kaW5nVGVzdHMoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGRvVGVzdEZpbGVTdHJlYW0oU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgZXhwZWN0ZWRJQU5BRW5jb2RpbmcsIElSZXNvdXJjZUNoYXJzZXREZXRlY3RvciBkZXRlY3RvcikgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJRmlsZSBmaWxlID0gSFRNTEVuY29kaW5nVGVzdHNQbHVnaW4uZ2V0VGVzdEZpbGUoZmlsZW5hbWUpOwotCQlpZiAoIWZpbGUuZXhpc3RzKCkpCi0JCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKGZpbGVuYW1lICsgIiB3YXMgbm90IGZvdW5kIik7Ci0JCUlucHV0U3RyZWFtIGlucHV0U3RyZWFtID0gbmV3IEZpbGVJbnB1dFN0cmVhbShmaWxlKTsKLQkJLy8gSW5wdXRTdHJlYW0gaW5TdHJlYW0gPSBnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0oZmlsZW5hbWUpOwotCQlJbnB1dFN0cmVhbSBpc3RyZWFtID0gZ2V0TWFya1N1cHBvcnRlZFN0cmVhbShpbnB1dFN0cmVhbSk7Ci0JCXRyeSB7Ci0JCQlkZXRlY3Rvci5zZXQoaXN0cmVhbSk7Ci0JCQlFbmNvZGluZ01lbWVudG8gZW5jb2RpbmdNZW1lbnRvID0gKChIVE1MUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKWRldGVjdG9yKS5nZXRFbmNvZGluZ01lbWVudG8oKTsKLQkJCVN0cmluZyBmb3VuZElBTkFFbmNvZGluZyA9IG51bGw7Ci0JCQlpZiAoZW5jb2RpbmdNZW1lbnRvICE9IG51bGwpIHsKLQkJCQlmb3VuZElBTkFFbmNvZGluZyA9IGVuY29kaW5nTWVtZW50by5nZXRKYXZhQ2hhcnNldE5hbWUoKTsKLQkJCX0KLQkJCS8vIEkgY2hhbmdlZCBtYW55ICJlcXVhbHMiIHRvICJlcXVhbHNJZ25vcmVDYXNlIiBvbiAxMS80LzIwMDIsCi0JCQkvLyBzaW5jZQotCQkJLy8gc29tZSBpc3N1ZXMgd2l0aCBTSElGVF9KSVMgdnMuIFNoaWZ0X0pJUyB3ZXJlIGNhdXNpbmcgZmFpbHVyZXMuCi0JCQkvLyBXZSBkbyB3YW50IHRvIGJlIHRvbGVyYW50IG9uIGlucHV0LCBhbmQgYWNjZXB0IGVpdGhlciwgYnV0IEkKLQkJCS8vIHRoaW5rCi0JCQkvLyB0aGF0IFN1cHBvcnRlZEphdmFFbmNvZGluZ3MgbmVlZHMgdG8gYmUgY2hhbmdlZCB0byAicmVjb21tZW5kIgotCQkJLy8gU2hpZnRfSklTLgotCQkJYm9vbGVhbiBleHBlY3RlZElBTkFSZXN1bHQgPSBmYWxzZTsKLQkJCWlmIChleHBlY3RlZElBTkFFbmNvZGluZyA9PSBudWxsKSB7Ci0JCQkJZXhwZWN0ZWRJQU5BUmVzdWx0ID0gKGV4cGVjdGVkSUFOQUVuY29kaW5nID09IGZvdW5kSUFOQUVuY29kaW5nKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCWV4cGVjdGVkSUFOQVJlc3VsdCA9IGV4cGVjdGVkSUFOQUVuY29kaW5nLmVxdWFsc0lnbm9yZUNhc2UoZm91bmRJQU5BRW5jb2RpbmcpOwotCQkJfQotCi0JCQlhc3NlcnRUcnVlKCJlbmNvZGluZyB0ZXN0IGZpbGUgIiArIGZpbGVuYW1lICsgIiBleHBlY3RlZDogIiArIGV4cGVjdGVkSUFOQUVuY29kaW5nICsgIiBmb3VuZDogIiArIGZvdW5kSUFOQUVuY29kaW5nLCBleHBlY3RlZElBTkFSZXN1bHQpOwotCQkJLy8gYSB2ZXJ5IHNpbXBsZSByZWFkIHRlc3QgLi4uIHdpbGwgY2F1c2UgSlVuaXQgZXJyb3IgKG5vdCBmYWlsKQotCQkJLy8gaWYKLQkJCS8vIHRocm93cyBleGNlcHRpb24uCi0JCQlpZiAoZXhwZWN0ZWRJQU5BRW5jb2RpbmcgIT0gbnVsbCkgewotCQkJCWVuc3VyZUNhblJlYWQoZmlsZW5hbWUsIGZvdW5kSUFOQUVuY29kaW5nLCBpc3RyZWFtKTsKLQkJCX0KLQotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKGlzdHJlYW0gIT0gbnVsbCkgewotCQkJCWlzdHJlYW0uY2xvc2UoKTsKLQkJCX0KLQkJCWlmIChpbnB1dFN0cmVhbSAhPSBudWxsKSB7Ci0JCQkJaW5wdXRTdHJlYW0uY2xvc2UoKTsKLQkJCX0KLQkJfQotCX0KLQotCS8qKgotCSAqIFRoaXMgbWV0aG9kIGp1c3QgcmVhZHMgdG8gc3RyZWFtLCB0byBiZSBzdXJlIGl0IGNhbiBiZSByZWFkIHBlcgotCSAqIGVuY29kaW5nLCB3aXRob3V0IGV4Y2VwdGlvbi4KLQkgKi8KLQlwcml2YXRlIHZvaWQgZW5zdXJlQ2FuUmVhZChTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyBlbmNvZGluZywgSW5wdXRTdHJlYW0gaW5TdHJlYW0pIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUNoYXJzZXQgY2hhcnNldCA9IENoYXJzZXQuZm9yTmFtZShlbmNvZGluZyk7Ci0JCUNoYXJzZXREZWNvZGVyIGNoYXJzZXREZWNvZGVyID0gY2hhcnNldC5uZXdEZWNvZGVyKCk7Ci0JCWNoYXJzZXREZWNvZGVyLm9uTWFsZm9ybWVkSW5wdXQoQ29kaW5nRXJyb3JBY3Rpb24uUkVQT1JUKTsKLQkJY2hhcnNldERlY29kZXIub25Vbm1hcHBhYmxlQ2hhcmFjdGVyKENvZGluZ0Vycm9yQWN0aW9uLlJFUE9SVCk7Ci0KLQkJSW5wdXRTdHJlYW1SZWFkZXIgcmVhZGVyID0gbmV3IElucHV0U3RyZWFtUmVhZGVyKGluU3RyZWFtLCBjaGFyc2V0RGVjb2Rlcik7Ci0JCVN0cmluZ0J1ZmZlciBzdHJpbmdCdWZmZXIgPSByZWFkSW5wdXRTdHJlYW0ocmVhZGVyKTsKLQkJaWYgKERFQlVHKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihmaWxlbmFtZSk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oc3RyaW5nQnVmZmVyLnRvU3RyaW5nKCkpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmdCdWZmZXIgcmVhZElucHV0U3RyZWFtKFJlYWRlciByZWFkZXIpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0KLQkJU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJaW50IG51bVJlYWQgPSAwOwotCQljaGFyIHRCdWZmW10gPSBuZXcgY2hhcltSRUFEX0JVRkZFUl9TSVpFXTsKLQkJd2hpbGUgKChudW1SZWFkID0gcmVhZGVyLnJlYWQodEJ1ZmYsIDAsIHRCdWZmLmxlbmd0aCkpICE9IC0xKSB7Ci0JCQlidWZmZXIuYXBwZW5kKHRCdWZmLCAwLCBudW1SZWFkKTsKLQkJfQotCQlyZXR1cm4gYnVmZmVyOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RFbXB0eUZpbGUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiRW1wdHlGaWxlLmh0bWwiOwotCQkvLyBIVE1MIGhhcyBubyBzcGVjIGRlZmF1bHQgZW5jb2RpbmcuIFdpbGwgdXNlIHBsYXRmb3JtIGRlZmF1bHQgZW5jb2RpbmcuCi0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsIFN5c3RlbS5nZXRQcm9wZXJ0eSgiZmlsZS5lbmNvZGluZyIpLCBuZXcgSFRNTFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJJbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0Lmh0bWwiOwotCQlTdHJpbmcgaWFuYUluRmlsZSA9ICJVVEYtOCI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsIGlhbmFJbkZpbGUsIG5ldyBIVE1MUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNdWx0aU5vbkRlZmF1bHQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiTXVsdGlOb25EZWZhdWx0Lmh0bWwiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCAiSVNPLTg4NTktNiIsIG5ldyBIVE1MUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3ROb0VuY29kaW5nKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIk5vRW5jb2RpbmcuaHRtbCI7Ci0JCS8vIEhUTUwgaGFzIG5vIHNwZWMgZGVmYXVsdCBlbmNvZGluZy4gV2lsbCB1c2UgcGxhdGZvcm0gZGVmYXVsdCBlbmNvZGluZy4KLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgU3lzdGVtLmdldFByb3BlcnR5KCJmaWxlLmVuY29kaW5nIiksIG5ldyBIVE1MUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3Rub3F1b3RlcygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJub3F1b3Rlcy5odG1sIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgIlVURi04IiwgbmV3IEhUTUxSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9ybWFsTm9uRGVmYXVsdCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJOb3JtYWxOb25EZWZhdWx0Lmh0bWwiOwotCQlTdHJpbmcgaWFuYUluRmlsZSA9ICJVVEYtOCI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsIGlhbmFJbkZpbGUsIG5ldyBIVE1MUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0VVRGMTZCRSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ1dGYxNmJlLmh0bWwiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCAiVVRGLTE2QkUiLCBuZXcgSFRNTFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFVURjE2TEUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidXRmMTZsZS5odG1sIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgIlVURi0xNkxFIiwgbmV3IEhUTUxSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RVVEYxNkxFTm9RdW90ZXMoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAibm9xdW90ZXNVVEYxNmxlLmh0bWwiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCAiVVRGLTE2TEUiLCBuZXcgSFRNTFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFVURjE2Qk9NKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gdGhpcy5maWxlTG9jYXRpb24gKyAidXRmMTZCT00uaHRtbCI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsICJVVEYtMTYiLCBuZXcgSFRNTFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC90ZXN0cy9lbmNvZGluZy9odG1sL0hUTUxIZWFkVG9rZW5pemVyVGVzdGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdGVzdHMvZW5jb2RpbmcvaHRtbC9IVE1MSGVhZFRva2VuaXplclRlc3Rlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhY2E1OGE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC90ZXN0cy9lbmNvZGluZy9odG1sL0hUTUxIZWFkVG9rZW5pemVyVGVzdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLmh0bWw7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotaW1wb3J0IGphdmEudXRpbC5yZWdleC5QYXR0ZXJuOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5pbnRlcm5hbC5jb250ZW50dHlwZS5IVE1MSGVhZFRva2VuaXplcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmludGVybmFsLmNvbnRlbnR0eXBlLkhUTUxIZWFkVG9rZW5pemVyQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaW50ZXJuYWwuY29udGVudHR5cGUuSGVhZFBhcnNlclRva2VuOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLkhUTUxFbmNvZGluZ1Rlc3RzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50dHlwZS5FbmNvZGluZ1BhcnNlckNvbnN0YW50czsKLQotcHVibGljIGNsYXNzIEhUTUxIZWFkVG9rZW5pemVyVGVzdGVyIGV4dGVuZHMgVGVzdENhc2UgewotCXByaXZhdGUgYm9vbGVhbiBERUJVRyA9IGZhbHNlOwotCXByaXZhdGUgU3RyaW5nIGZDaGFyc2V0OwotCi0JcHJpdmF0ZSBTdHJpbmcgZkNvbnRlbnRUeXBlVmFsdWU7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZURpciA9ICJodG1sLyI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZUhvbWUgPSAidGVzdGZpbGVzLyI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZUxvY2F0aW9uID0gdGhpcy5maWxlSG9tZSArIHRoaXMuZmlsZURpcjsKLQlwcml2YXRlIFN0cmluZyBmUGFnZUVuY29kaW5nVmFsdWUgPSBudWxsOwotCXByaXZhdGUgU3RyaW5nIGZYTUxEZWNFbmNvZGluZ05hbWU7Ci0KLQlwcml2YXRlIHZvaWQgZG9UZXN0RmlsZShTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyBleHBlY3RlZE5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsIGV4cGVjdGVkTmFtZSwgbnVsbCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGRvVGVzdEZpbGUoU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgZXhwZWN0ZWROYW1lLCBTdHJpbmcgZmluYWxUb2tlblR5cGUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUhUTUxIZWFkVG9rZW5pemVyIHRva2VuaXplciA9IG51bGw7Ci0JCVJlYWRlciBmaWxlUmVhZGVyID0gbnVsbDsKLQkJdHJ5IHsKLQkJCWlmICh0aGlzLkRFQlVHKSB7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCIgICAgICAgIiArIGZpbGVuYW1lKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJCX0KLQkJCWZpbGVSZWFkZXIgPSBIVE1MRW5jb2RpbmdUZXN0c1BsdWdpbi5nZXRUZXN0UmVhZGVyKGZpbGVuYW1lKTsKLQkJCXRva2VuaXplciA9IG5ldyBIVE1MSGVhZFRva2VuaXplcihmaWxlUmVhZGVyKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJFcnJvciBvcGVuaW5nIGZpbGUgXCIiICsgZmlsZW5hbWUgKyAiXCIiKTsKLQkJfQotCi0JCUhlYWRQYXJzZXJUb2tlbiByZXN1bHRUb2tlbiA9IG51bGw7Ci0JCUhlYWRQYXJzZXJUb2tlbiB0b2tlbiA9IHBhcnNlSGVhZGVyKHRva2VuaXplcik7Ci0JCVN0cmluZyByZXN1bHRWYWx1ZSA9IGdldEFwcHJvcHJpYXRlRW5jb2RpbmcoKTsKLQkJZmlsZVJlYWRlci5jbG9zZSgpOwotCQlpZiAoZmluYWxUb2tlblR5cGUgIT0gbnVsbCkgewotCQkJYXNzZXJ0VHJ1ZSgiZGlkIG5vdCBlbmQgYXMgZXhwZWN0ZWQuIGZvdW5kOiAgIiArIHRva2VuLmdldFR5cGUoKSwgZmluYWxUb2tlblR5cGUuZXF1YWxzKHRva2VuLmdldFR5cGUoKSkpOwotCQl9Ci0JCWVsc2UgewotCQkJaWYgKGV4cGVjdGVkTmFtZSA9PSBudWxsKSB7Ci0JCQkJYXNzZXJ0VHJ1ZSgiZXhwZWN0ZWQgbm8gZW5jb2RpbmcsIGJ1dCBmb3VuZDogIiArIHJlc3VsdFZhbHVlLCByZXN1bHRUb2tlbiA9PSBudWxsKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCS8vIFRPRE86IG5lZWQgdG8gd29yayBvbiBjYXNlIGlzc3VlcwotCQkJCWFzc2VydFRydWUoImV4cGVjdGVkICIgKyBleHBlY3RlZE5hbWUgKyAiIGJ1dCBmb3VuZCAiICsgcmVzdWx0VmFsdWUsIGV4cGVjdGVkTmFtZS5lcXVhbHMocmVzdWx0VmFsdWUudG9VcHBlckNhc2UoKSkpOwotCQkJfQotCQl9Ci0KLQl9Ci0KLQkvLyBwdWJsaWMgdm9pZCB0ZXN0TWFsZm9ybWVkTm9FbmNvZGluZygpIHsKLQkvLyBTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiTWFsZm9ybWVkTm9FbmNvZGluZy5qc3AiOwotCS8vIGRvVGVzdEZpbGUoZmlsZW5hbWUpOwotCS8vIH0KLQkvLyBwdWJsaWMgdm9pZCB0ZXN0TWFsZm9ybWVkTm9FbmNvZGluZ1hTTCgpIHsKLQkvLyBTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiTWFsZm9ybWVkTm9FbmNvZGluZ1hTTC5qc3AiOwotCS8vIGRvVGVzdEZpbGUoZmlsZW5hbWUpOwotCS8vIH0KLQkvLyBwdWJsaWMgdm9pZCB0ZXN0Tm9FbmNvZGluZygpIHsKLQkvLyBTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiTm9FbmNvZGluZy5qc3AiOwotCS8vIGRvVGVzdEZpbGUoZmlsZW5hbWUpOwotCS8vIH0KLQkvLyBwdWJsaWMgdm9pZCB0ZXN0Tm9ybWFsTm9uRGVmYXVsdCgpIHsKLQkvLyBTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiTm9ybWFsTm9uRGVmYXVsdC5qc3AiOwotCS8vIGRvVGVzdEZpbGUoZmlsZW5hbWUpOwotCS8vIH0KLQkvLyBwdWJsaWMgdm9pZCB0ZXN0Tm9ybWFsUGFnZUNhc2VOb25EZWZhdWx0KCkgewotCS8vIFN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJOb3JtYWxQYWdlQ2FzZU5vbkRlZmF1bHQuanNwIjsKLQkvLyBkb1Rlc3RGaWxlKGZpbGVuYW1lKTsKLQkvLyB9Ci0JLy8gcHVibGljIHZvaWQgdGVzdGRlZmVjdDIyMzM2NSgpIHsKLQkvLyBTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiU2VsQ29sQmVhblJvdzEyUmVzdWx0c0Zvcm0uanNwIjsKLQkvLyBkb1Rlc3RGaWxlKGZpbGVuYW1lKTsKLQkvLyB9Ci0JLyoqCi0JICogcmV0dXJucyBlbmNvZGluZyBhY2NvcmRpbmcgdG8gcHJpb3JpdHk6IDEuIFhNTCBEZWNsYXJhdGlvbiAyLiBwYWdlCi0JICogZGlyZWN0aXZlIHBhZ2VFbmNvZGluZyBuYW1lIDMuIHBhZ2UgZGlyZWN0aXZlIGNvbnRlbnRUeXBlIGNoYXJzZXQgbmFtZQotCSAqLwotCXByaXZhdGUgU3RyaW5nIGdldEFwcHJvcHJpYXRlRW5jb2RpbmcoKSB7Ci0JCVN0cmluZyByZXN1bHQgPSBudWxsOwotCQlpZiAodGhpcy5mWE1MRGVjRW5jb2RpbmdOYW1lICE9IG51bGwpIHsKLQkJCXJlc3VsdCA9IHRoaXMuZlhNTERlY0VuY29kaW5nTmFtZTsKLQkJfQotCQllbHNlIGlmICh0aGlzLmZQYWdlRW5jb2RpbmdWYWx1ZSAhPSBudWxsKSB7Ci0JCQlyZXN1bHQgPSB0aGlzLmZQYWdlRW5jb2RpbmdWYWx1ZTsKLQkJfQotCQllbHNlIGlmICh0aGlzLmZDaGFyc2V0ICE9IG51bGwpIHsKLQkJCXJlc3VsdCA9IHRoaXMuZkNoYXJzZXQ7Ci0JCX0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gaXNMZWdhbFN0cmluZyhTdHJpbmcgdG9rZW5UeXBlKSB7Ci0JCWJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0JCWlmICh0b2tlblR5cGUgPT0gbnVsbCkgewotCQkJcmVzdWx0ID0gZmFsc2U7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlyZXN1bHQgPSB0b2tlblR5cGUuZXF1YWxzKEVuY29kaW5nUGFyc2VyQ29uc3RhbnRzLlN0cmluZ1ZhbHVlKSB8fCB0b2tlblR5cGUuZXF1YWxzKEVuY29kaW5nUGFyc2VyQ29uc3RhbnRzLlVuRGVsaW1pdGVkU3RyaW5nVmFsdWUpIHx8IHRva2VuVHlwZS5lcXVhbHMoRW5jb2RpbmdQYXJzZXJDb25zdGFudHMuSW52YWxpZFRlcm1pbmF0ZWRTdHJpbmdWYWx1ZSkgfHwgdG9rZW5UeXBlLmVxdWFscyhFbmNvZGluZ1BhcnNlckNvbnN0YW50cy5JbnZhbGlkVGVybWludGF0ZWRVbkRlbGltaXRlZFN0cmluZ1ZhbHVlKTsKLQkJfQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCXByaXZhdGUgdm9pZCBwYXJzZUNvbnRlbnRUeXBlVmFsdWUoU3RyaW5nIGNvbnRlbnRUeXBlKSB7Ci0JCVBhdHRlcm4gcGF0dGVybiA9IFBhdHRlcm4uY29tcGlsZSgiO1xccypjaGFyc2V0XFxzKj1cXHMqIik7Ci0JCVN0cmluZ1tdIHBhcnRzID0gcGF0dGVybi5zcGxpdChjb250ZW50VHlwZSk7Ci0JCWlmIChwYXJ0cy5sZW5ndGggPiAwKSB7Ci0JCQkvLyBpZiBvbmx5IG9uZSBpdGVtLCBpdCBjYW4gc3RpbGwgYmUgY2hhcnNldCBpbnN0ZWFkIG9mCi0JCQkvLyBjb250ZW50VHlwZQotCQkJaWYgKHBhcnRzLmxlbmd0aCA9PSAxKSB7Ci0JCQkJaWYgKHBhcnRzWzBdLmxlbmd0aCgpID4gNikgewotCQkJCQlTdHJpbmcgY2hlY2tGb3JDaGFyc2V0ID0gcGFydHNbMF0uc3Vic3RyaW5nKDAsIDcpOwotCQkJCQlpZiAoY2hlY2tGb3JDaGFyc2V0LmVxdWFsc0lnbm9yZUNhc2UoImNoYXJzZXQiKSkgewotCQkJCQkJaW50IGVxcG9zID0gcGFydHNbMF0uaW5kZXhPZignPScpOwotCQkJCQkJZXFwb3MgPSBlcXBvcyArIDE7Ci0JCQkJCQlpZiAoZXFwb3MgPCBwYXJ0c1swXS5sZW5ndGgoKSkgewotCQkJCQkJCXRoaXMuZkNoYXJzZXQgPSBwYXJ0c1swXS5zdWJzdHJpbmcoZXFwb3MpOwotCQkJCQkJCXRoaXMuZkNoYXJzZXQgPSB0aGlzLmZDaGFyc2V0LnRyaW0oKTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCWVsc2UgewotCQkJCS8vIGZDb250ZW50VHlwZSA9IHBhcnRzWzBdOwotCQkJfQotCi0JCX0KLQkJaWYgKHBhcnRzLmxlbmd0aCA+IDEpIHsKLQkJCXRoaXMuZkNoYXJzZXQgPSBwYXJ0c1sxXTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEdpdmUncyBwcmlvcml0eSB0byBlbmNvZGluZyB2YWx1ZSwgaWYgZm91bmQgZWxzZSwgbG9va3MgZm9yIGNvbnRlbnRUeXBlCi0JICogdmFsdWU7Ci0JICovCi0JcHJpdmF0ZSBIZWFkUGFyc2VyVG9rZW4gcGFyc2VIZWFkZXIoSFRNTEhlYWRUb2tlbml6ZXIgdG9rZW5pemVyKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQl0aGlzLmZQYWdlRW5jb2RpbmdWYWx1ZSA9IG51bGw7Ci0JCXRoaXMuZkNoYXJzZXQgPSBudWxsOwotCQkvKgotCQkgKiBpZiAodG9rZW5UeXBlID09IFhNTEhlYWRUb2tlbml6ZXJDb25zdGFudHMuWE1MRGVsRW5jb2RpbmcpIHsgaWYKLQkJICogKHRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpIHsgSVRleHRIZWFkUmVnaW9uIHZhbHVlVG9rZW4gPQotCQkgKiB0b2tlbml6ZXIuZ2V0TmV4dFRva2VuKCk7IFN0cmluZyB2YWx1ZVRva2VuVHlwZSA9Ci0JCSAqIHZhbHVlVG9rZW4uZ2V0VHlwZSgpOyBpZiAoaXNMZWdhbCh2YWx1ZVRva2VuVHlwZSkpIHsgcmVzdWx0VmFsdWUgPQotCQkgKiB2YWx1ZVRva2VuLmdldFRleHQoKTsgaWYgKERFQlVHKSB7IFN5c3RlbS5vdXQucHJpbnRsbigiWE1MIEhlYWQKLQkJICogVG9rZW5pemVyIEZvdW5kIEVuY29kaW5nOiAiICsgcmVzdWx0VmFsdWUpOyB9IH0gfSB9Ci0JCSAqLwotCQlIZWFkUGFyc2VyVG9rZW4gdG9rZW4gPSBudWxsOwotCQlIZWFkUGFyc2VyVG9rZW4gZmluYWxUb2tlbiA9IG51bGw7Ci0JCWRvIHsKLQkJCXRva2VuID0gdG9rZW5pemVyLmdldE5leHRUb2tlbigpOwotCQkJaWYgKHRoaXMuREVCVUcpIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4odG9rZW4pOwotCQkJfQotCQkJU3RyaW5nIHRva2VuVHlwZSA9IHRva2VuLmdldFR5cGUoKTsKLQkJCWlmKGNhbkhhbmRsZUFzVW5pY29kZVN0cmVhbSh0b2tlblR5cGUpKSB7Ci0JCQkJCi0JCQl9Ci0JCQlpZiAodG9rZW5UeXBlID09IEhUTUxIZWFkVG9rZW5pemVyQ29uc3RhbnRzLk1ldGFUYWdDb250ZW50VHlwZSkgewotCQkJCWlmICh0b2tlbml6ZXIuaGFzTW9yZVRva2VucygpKSB7Ci0JCQkJCUhlYWRQYXJzZXJUb2tlbiB2YWx1ZVRva2VuID0gdG9rZW5pemVyLmdldE5leHRUb2tlbigpOwotCQkJCQlpZiAodGhpcy5ERUJVRykgewotCQkJCQkJU3lzdGVtLm91dC5wcmludGxuKHZhbHVlVG9rZW4pOwotCQkJCQl9Ci0JCQkJCVN0cmluZyB2YWx1ZVRva2VuVHlwZSA9IHZhbHVlVG9rZW4uZ2V0VHlwZSgpOwotCQkJCQlpZiAoaXNMZWdhbFN0cmluZyh2YWx1ZVRva2VuVHlwZSkpIHsKLQkJCQkJCXRoaXMuZkNvbnRlbnRUeXBlVmFsdWUgPSB2YWx1ZVRva2VuLmdldFRleHQoKTsKLQotCQkJCQl9Ci0JCQkJfQotCQkJfQotCi0JCX0KLQkJd2hpbGUgKHRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpOwotCQlpZiAodGhpcy5mQ29udGVudFR5cGVWYWx1ZSAhPSBudWxsKSB7Ci0JCQlwYXJzZUNvbnRlbnRUeXBlVmFsdWUodGhpcy5mQ29udGVudFR5cGVWYWx1ZSk7Ci0JCX0KLQkJZmluYWxUb2tlbiA9IHRva2VuOwotCQlyZXR1cm4gZmluYWxUb2tlbjsKLQotCX0KLQkKLQlwcml2YXRlIGJvb2xlYW4gY2FuSGFuZGxlQXNVbmljb2RlU3RyZWFtKFN0cmluZyB0b2tlblR5cGUpIHsKLQkJYm9vbGVhbiBjYW5IYW5kbGVBc1VuaWNvZGUgPSBmYWxzZTsKLQkJaWYgKHRva2VuVHlwZSA9PSBFbmNvZGluZ1BhcnNlckNvbnN0YW50cy5VVEY4M0J5dGVCT00pIHsKLQkJCWNhbkhhbmRsZUFzVW5pY29kZSA9IHRydWU7Ci0JCQl0aGlzLmZDaGFyc2V0ID0gIlVURi04IjsgLy8kTk9OLU5MUy0xJAotCQl9Ci0JCWVsc2UgaWYgKHRva2VuVHlwZSA9PSBFbmNvZGluZ1BhcnNlckNvbnN0YW50cy5VVEYxNkJFIHx8IHRva2VuVHlwZSA9PSBFbmNvZGluZ1BhcnNlckNvbnN0YW50cy5VVEYxNkxFKSB7Ci0JCQljYW5IYW5kbGVBc1VuaWNvZGUgPSB0cnVlOwotCQkJdGhpcy5mQ2hhcnNldCA9ICJVVEYtMTYiOyAvLyROT04tTkxTLTEkCi0JCX0KLQkJcmV0dXJuIGNhbkhhbmRsZUFzVW5pY29kZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QmVzdENhc2UoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSB0aGlzLmZpbGVMb2NhdGlvbiArICJOb3JtYWxOb25EZWZhdWx0Lmh0bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiVVRGLTgiKTsKLQotCX0KLQotCS8vIHB1YmxpYyB2b2lkIHRlc3RJbGxGb3JtZWQoKSB7Ci0JLy8gU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInRlc3RJbGxGb3JtZWQuanNwIjsKLQkvLyBkb1Rlc3RGaWxlKGZpbGVuYW1lKTsKLQkvLyB9Ci0JLy8gcHVibGljIHZvaWQgdGVzdElsbEZvcm1lZDIoKSB7Ci0JLy8gU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInRlc3RJbGxGb3JtZWQyLmpzcCI7Ci0JLy8gZG9UZXN0RmlsZShmaWxlbmFtZSk7Ci0JLy8gfQotCS8vIHB1YmxpYyB2b2lkIHRlc3RJbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0KCkgewotCS8vIFN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJJbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0LmpzcCI7Ci0JLy8gZG9UZXN0RmlsZShmaWxlbmFtZSk7Ci0JLy8gfQotCXB1YmxpYyB2b2lkIHRlc3RFbXB0eUZpbGUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSB0aGlzLmZpbGVMb2NhdGlvbiArICJFbXB0eUZpbGUuaHRtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RJbGxGb3JtZWROb3JtYWxOb25EZWZhdWx0KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gdGhpcy5maWxlTG9jYXRpb24gKyAiSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5odG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIlVURi04Iik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdExhcmdlQ2FzZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IHRoaXMuZmlsZUxvY2F0aW9uICsgIkxhcmdlTm9uRGVmYXVsdC5odG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIklTTy04ODU5LTEiKTsKLQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RMYXJnZU5vRW5jb2RpbmcoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSB0aGlzLmZpbGVMb2NhdGlvbiArICJMYXJnZU5vRW5jb2RpbmcuaHRtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsIG51bGwsIEVuY29kaW5nUGFyc2VyQ29uc3RhbnRzLk1BWF9DSEFSU19SRUFDSEVEKTsKLQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNdWx0aU5vbkRlZmF1bHQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSB0aGlzLmZpbGVMb2NhdGlvbiArICJNdWx0aU5vbkRlZmF1bHQuaHRtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJJU08tODg1OS02Iik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5vRW5jb2RpbmcoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSB0aGlzLmZpbGVMb2NhdGlvbiArICJOb0VuY29kaW5nLmh0bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0bm9xdW90ZXMoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSB0aGlzLmZpbGVMb2NhdGlvbiArICJub3F1b3Rlcy5odG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIlVURi04Iik7Ci0KLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdG5vcXVvdGVzVVRGMTZsZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IHRoaXMuZmlsZUxvY2F0aW9uICsgIm5vcXVvdGVzVVRGMTZsZS5odG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIlVURi0xNkxFIik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RVVEYxNmxlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gdGhpcy5maWxlTG9jYXRpb24gKyAidXRmMTZsZS5odG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIlVURi0xNkxFIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFVURjE2YmUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSB0aGlzLmZpbGVMb2NhdGlvbiArICJ1dGYxNmJlLmh0bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiVVRGLTE2QkUiKTsKLQl9Ci0JCi0JLyoKLQkJc3VuLmlvLk1hbGZvcm1lZElucHV0RXhjZXB0aW9uCi0JCWF0IHN1bi5pby5CeXRlVG9DaGFyVVRGOC5jb252ZXJ0KEJ5dGVUb0NoYXJVVEY4LmphdmE6MjYyKQotCQlhdCBzdW4ubmlvLmNzLlN0cmVhbURlY29kZXIkQ29udmVydGVyU0QuY29udmVydEludG8oU3RyZWFtRGVjb2Rlci5qYXZhOjMxNCkKLQkJYXQgc3VuLm5pby5jcy5TdHJlYW1EZWNvZGVyJENvbnZlcnRlclNELmltcGxSZWFkKFN0cmVhbURlY29kZXIuamF2YTozNjQpCi0JCWF0IHN1bi5uaW8uY3MuU3RyZWFtRGVjb2Rlci5yZWFkKFN0cmVhbURlY29kZXIuamF2YToyNTApCi0JCWF0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXIucmVhZChJbnB1dFN0cmVhbVJlYWRlci5qYXZhOjIxMikKLQkJYXQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5pbnRlcm5hbC5jb250ZW50dHlwZS5IVE1MSGVhZFRva2VuaXplci55eV9hZHZhbmNlKEhUTUxIZWFkVG9rZW5pemVyLmphdmE6MzQwKQotCQlhdCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmludGVybmFsLmNvbnRlbnR0eXBlLkhUTUxIZWFkVG9rZW5pemVyLnByaW1HZXROZXh0VG9rZW4oSFRNTEhlYWRUb2tlbml6ZXIuamF2YTo0NzcpCi0JCWF0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaW50ZXJuYWwuY29udGVudHR5cGUuSFRNTEhlYWRUb2tlbml6ZXIuZ2V0TmV4dFRva2VuKEhUTUxIZWFkVG9rZW5pemVyLmphdmE6MjMyKQotCQlhdCBvcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy5odG1sLkhUTUxIZWFkVG9rZW5pemVyVGVzdGVyLnBhcnNlSGVhZGVyKEhUTUxIZWFkVG9rZW5pemVyVGVzdGVyLmphdmE6MTc1KQotCQlhdCBvcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy5odG1sLkhUTUxIZWFkVG9rZW5pemVyVGVzdGVyLmRvVGVzdEZpbGUoSFRNTEhlYWRUb2tlbml6ZXJUZXN0ZXIuamF2YTo1NykKLQkJYXQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcuaHRtbC5IVE1MSGVhZFRva2VuaXplclRlc3Rlci5kb1Rlc3RGaWxlKEhUTUxIZWFkVG9rZW5pemVyVGVzdGVyLmphdmE6MzcpCi0JCWF0IG9yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLmh0bWwuSFRNTEhlYWRUb2tlbml6ZXJUZXN0ZXIudGVzdFVURjE2Qk9NKEhUTUxIZWFkVG9rZW5pemVyVGVzdGVyLmphdmE6MjkzKQotCSovCi0KLQlwdWJsaWMgdm9pZCB0ZXN0VVRGMTZCT00oKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQkvLyBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MjQzNzM1Ci0vLwkJU3RyaW5nIGZpbGVuYW1lID0gdGhpcy5maWxlTG9jYXRpb24gKyAidXRmMTZCT00uaHRtbCI7Ci0vLwkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIlVURi0xNiIpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC90ZXN0cy9lbmNvZGluZy9odG1sL1Rlc3RDb250ZW50VHlwZURldGVjdGlvbkZvckhUTUwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC90ZXN0cy9lbmNvZGluZy9odG1sL1Rlc3RDb250ZW50VHlwZURldGVjdGlvbkZvckhUTUwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGM3ZWEyNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdGVzdHMvZW5jb2RpbmcvaHRtbC9UZXN0Q29udGVudFR5cGVEZXRlY3Rpb25Gb3JIVE1MLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy5odG1sOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcucmVhZC5UZXN0Q29udGVudFR5cGVEZXRlY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBUZXN0Q29udGVudFR5cGVEZXRlY3Rpb25Gb3JIVE1MIGV4dGVuZHMgVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uIHsKLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTU3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmh0bWxzb3VyY2UiLCAidGVzdGZpbGVzL2h0bWwvRW1wdHlGaWxlLmh0bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTU4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmh0bWxzb3VyY2UiLCAidGVzdGZpbGVzL2h0bWwvSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5odG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5odG1sc291cmNlIiwgInRlc3RmaWxlcy9odG1sL0xhcmdlTm9FbmNvZGluZy5odG1sIiwgbnVsbCk7Ci0JfQotCi0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmh0bWxzb3VyY2UiLCAidGVzdGZpbGVzL2h0bWwvTGFyZ2VOb25EZWZhdWx0Lmh0bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmh0bWxzb3VyY2UiLCAidGVzdGZpbGVzL2h0bWwvTXVsdGlOb25EZWZhdWx0Lmh0bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmh0bWxzb3VyY2UiLCAidGVzdGZpbGVzL2h0bWwvTm9FbmNvZGluZy5odG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5odG1sc291cmNlIiwgInRlc3RmaWxlcy9odG1sL25vcXVvdGVzLmh0bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmh0bWxzb3VyY2UiLCAidGVzdGZpbGVzL2h0bWwvTm9ybWFsTm9uRGVmYXVsdC5odG1sIiwgbnVsbCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaHRtbHNvdXJjZSIsICJ0ZXN0ZmlsZXMvaHRtbC91dGYxNmJlLmh0bWwiLCBudWxsKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5odG1sc291cmNlIiwgInRlc3RmaWxlcy9odG1sL3V0ZjE2bGUuaHRtbCIsIG51bGwpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmh0bWxzb3VyY2UiLCAidGVzdGZpbGVzL2h0bWwvbm9xdW90ZXNVVEYxNmxlLmh0bWwiLCBudWxsKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5odG1sc291cmNlIiwgInRlc3RmaWxlcy9odG1sL3V0ZjE2Qk9NLmh0bWwiLCBudWxsKTsKLQl9Ci0JCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy90ZXN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYmJmNzcyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci0KLTxwcm9qZWN0Ci0gICAgbmFtZT0idGVzdHN1aXRlIgotICAgIGRlZmF1bHQ9InJ1biIKLSAgICBiYXNlZGlyPSIuIj4KLSAgICAKLSAgICA8IS0tIFRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyBzaG91bGQgYmUgcGFzc2VkIGludG8gdGhpcyBzY3JpcHQgLS0+Ci0gICAgPCEtLSAke2VjbGlwc2UtaG9tZX0gICAtLT4KLSAgICA8IS0tICR7YnVpbGREaXJlY3Rvcnl9ICAtLT4KLSAgICA8IS0tICR7YnVpbGRMYWJlbH0gICAgICAgIC0tPgotCi0gICAgPCEtLSBzaG91bGQgYmUgbGl0dGxlIG5lZWQgdG8gY2hhbmdlIHdoYXQncyBhYm92ZSAgLS0+Ci0KLQk8cHJvcGVydHkKLQkJbmFtZT0icGx1Z2luLW5hbWUiCi0JCXZhbHVlPSJvcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZyIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0iY2xhc3NuYW1lIgotICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcuSFRNTEVuY29kaW5nVGVzdFN1aXRlIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJ0ZXN0VHlwZSIKLSAgICAgICAgdmFsdWU9ImNvcmUtdGVzdCIgLz4KLQotICAgIDwhLS0gc2hvdWxkIGJlIGxpdHRsZSBuZWVkIHRvIGNoYW5nZSB3aGF0J3MgYmVsb3cgLS0+Ci0KLSAgICA8ZWNobyBtZXNzYWdlPSJiYXNlZGlyOiAke2Jhc2VkaXJ9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImVjbGlwc2UtaG9tZTogJHtlY2xpcHNlLWhvbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImJ1aWxkRGlyZWN0b3J5OiAke2J1aWxkRGlyZWN0b3J5fSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJwbHVnaW4tbmFtZTogJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iY2xhc3NuYW1lOiAke2NsYXNzbmFtZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0idGVzdFR5cGUgJHt0ZXN0VHlwZX0iIC8+Ci0KLQotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJsaWJyYXJ5LWZpbGUiCi0gICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMS4wL2xpYnJhcnkueG1sIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJ3b3Jrc3BhY2UiCi0gICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vanVuaXR3b3Jrc3BhY2VzLyR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICAKLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGFsbCBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBmb3IgLS0+Ci0gICAgPCEtLSBhbGwgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcnVuLiBJbml0aWFsaXphdGlvbiBmb3IgaW5kaXZpZHVhbCB0ZXN0cyAtLT4KLSAgICA8IS0tIHNob3VsZCBiZSBkb25lIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgc3VpdGUgdGFyZ2V0LiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9ImluaXQiPgotICAgICAgICA8dHN0YW1wIC8+Ci0gICAgICAgIDxkZWxldGU+Ci0gICAgICAgICAgICA8ZmlsZXNldAotICAgICAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9IgotICAgICAgICAgICAgICAgIGluY2x1ZGVzPSIke3BsdWdpbi1uYW1lfS4qeG1sIiAvPgotICAgICAgICA8L2RlbGV0ZT4KLSAgICAgICAgPCEtLSBtYWtlIGRpcmVjdG9yeSwgaW4gY2FzZSBwYXRoIGRvZXNuJ3QgZXhpc3QgeWV0IC0tPgotICAgICAgICA8bWtkaXIgZGlyPSIke3dvcmtzcGFjZX0iIC8+Ci0gICAgICAgIDwhLS0gIGJ1dCBkZWxldGUgdG8gbWFrZSBzdXJlIGZyZXNoIGNvbnRlbnRzLS0+Ci0gICAgICAgIDxkZWxldGUKLSAgICAgICAgICAgIGRpcj0iJHt3b3Jrc3BhY2V9IgotICAgICAgICAgICAgcXVpZXQ9InRydWUiIC8+Ci0KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgZGVmaW5lcyB0aGUgdGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4gLS0+Ci0gICAgPHRhcmdldCBuYW1lPSJzdWl0ZSI+Ci0KLSAgICAgICAgPGFudAotICAgICAgICAgICAgdGFyZ2V0PSIke3Rlc3RUeXBlfSIKLSAgICAgICAgICAgIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLSAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImRhdGEtZGlyIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3dvcmtzcGFjZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJwbHVnaW4tbmFtZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJjbGFzc25hbWUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7Y2xhc3NuYW1lfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9InBsdWdpbi1wYXRoIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy8ke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgPC9hbnQ+Ci0KLSAgICAgICAgPGNvcHkKLSAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIKLSAgICAgICAgICAgIGZpbGU9IiR7d29ya3NwYWNlfS8ubWV0YWRhdGEvLmxvZyIKLSAgICAgICAgICAgIHRvZmlsZT0iJHtidWlsZERpcmVjdG9yeX0vJHtidWlsZExhYmVsfS90ZXN0UmVzdWx0cy9jb25zb2xlbG9ncy8ke3BsdWdpbi1uYW1lfS5jb25zb2xlbG9nLnR4dCIgLz4KLQotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBjb2RlIHRvIGNsZWFudXAgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgYWZ0ZXIgLS0+Ci0gICAgPCEtLSBhZnRlciBhbGwgb2YgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4uIFlvdSBjYW4gdXNlIHRoaXMgdGFyZ2V0IHRvIC0tPgotICAgIDwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9ImNsZWFudXAiPgotICAgICAgICA8IS0tIHVzdWFsbHkgbm8gbmVlZCB0byBkZWxldGUgd29ya3NwYWNlIHVudGlsIG5leHQgcnVuLCBhbmQgbGVhdmluZyBpdCBhbGxvd3MgaW5zcGVjdGlvbiAtLT4KLSAgICAgICAgPCEtLSA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIgLz4gLS0+Ci0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+Ci0gICAgPCEtLSBhZnRlciBhbGwgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4gc2hvdWxkIGdvIGhlcmUuIC0tPgotICAgIDx0YXJnZXQKLSAgICAgICAgbmFtZT0icnVuIgotICAgICAgICBkZXBlbmRzPSJpbml0LHN1aXRlLGNsZWFudXAiPgotICAgICAgICA8YW50Ci0gICAgICAgICAgICB0YXJnZXQ9ImNvbGxlY3QiCi0gICAgICAgICAgICBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iCi0gICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJpbmNsdWRlcyIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0uKnhtbCIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9Im91dHB1dC1maWxlIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfS54bWwiIC8+Ci0gICAgICAgIDwvYW50PgotICAgIDwvdGFyZ2V0PgotCi08L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvRW1wdHlGaWxlLmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9FbXB0eUZpbGUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9FbXB0eUZpbGUuaHRtbAorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9JbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9JbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmOGI1YzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotPEhFQUQ+Ci08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04PgotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktNiI+Ci08TUVUQSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9IklCTSBXZWJTcGhlcmUgU3R1ZGlvIj4KLTxUSVRMRT5JQk0gV2ViU3BoZXJlIFNhbXBsZXMgR2FsbGVyeTwvVElUTEU+Ci08L0hFQUQ+Ci08RlJBTUVTRVQgcm93cz0iNzUsKiI+Ci0JPEZSQU1FIG5hbWU9InRpdGxlIiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBmcmFtZWJvcmRlcj0iMCIgc3JjPSJNZW51L1RpdGxlLmh0bWwiIHNjcm9sbGluZz0iTk8iIG5vcmVzaXplPgotCTxGUkFNRVNFVCBjb2xzPSIxNjAsKiI+Ci0JCTxGUkFNRSBuYW1lPSJtZW51IiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBmcmFtZWJvcmRlcj0iMCIgc3JjPSJNZW51L01lbnUuaHRtbCIgc2Nyb2xsaW5nPSJhdXRvIiBub3Jlc2l6ZT4KLQkJPEZSQU1FIG5hbWU9Im1haW4iIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiIGZyYW1lYm9yZGVyPSIwIiBzcmM9Ik1lbnUvU2FtcGxlc0ludHJvLmh0bWwiIHNjcm9sbGluZz0iYXV0byIgbm9yZXNpemU+Ci0JPC9GUkFNRVNFVD4KLQk8Tk9GUkFNRVM+Ci0JPEJPRFk+Ci0JPFA+VG8gdmlldyB0aGlzIHBhZ2UsIHlvdSBuZWVkIGEgYnJvd3NlciB0aGF0IHN1cHBvcnRzIGZyYW1lcy48L1A+Ci0JPC9CT0RZPgotCTwvTk9GUkFNRVM+Ci08L0ZSQU1FU0VUPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvTGFyZ2VOb0VuY29kaW5nLmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9MYXJnZU5vRW5jb2RpbmcuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODRjYTYwZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9MYXJnZU5vRW5jb2RpbmcuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDY2NCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy9EVEQvIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLQotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iTW96aWxsYS80LjcgW2VuXSAoV2luTlQ7IFUpIFtOZXRzY2FwZV0iPgotPE1FVEEgY29udGVudD0idGV4dC9jc3MiIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSI+Ci08dGl0bGU+c21va2U8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci08aDI+IFNtb2tlIFRlc3QgLSBYTUwgRWRpdG9yPC9oMj4KLUxhc3QgdXBkYXRlZDogSnVuZSAyNSwgMjAwMQotPFA+VGhpcyBTbW9rZSBUZXN0IHByaW1hcmlseSBmb2N1c2VzIG9uIHRoZSBSVFAgcG9ydGlvbiBvZiB0aGUgWE1MIAotRWRpdGlvciwgd2hpY2ggaXMgdGhlIFNvdXJjZSBwYWdlIG9mIHRoZSBYTUwgRWRpdG9yLiBJdCBhbHNvIHBlcmZvcm1zIAotc29tZSBpbnRlZ3JhdGlvbiB0ZXN0aW5nLiBGb3IgZXhhbXBsZSwgaXQgdGVzdHMgc3luY2hyb25pemF0aW9uIGJldHdlZW4gCi10aGUgRGVzaWduIGFuZCBTb3VyY2UgcGFnZXMgb2YgdGhlIFhNTCBFZGl0b3IsIGFzIHdlbGwgYXMgd2l0aCB0aGUgCi1PdXRsaW5lIGFuZCBQcm9wZXJ0aWVzIHZpZXdzLiBJdCBhbHNvIHZlcmlmaWVzIHRoYXQgZmlsZXMgY3JlYXRlZCAKLXRocm91Z2ggdGhlIFhNTCBGaWxlIHdpemFyZCBhbmQgcmVmZXJlbmNlcyB0byB0aGUgWE1MIENhdGFsb2cgYXJlIAotc3VwcG9ydGVkIGFzIGV4cGVjdGVkLjwvUD4KLTxQPjxGT05UIGNvbG9yPSIjZmYwMDAwIj48Qj5OT1RFPC9CPjogWE1MIGZpbGVzIGFyZSBjYXNlLXNlbnNpdGl2ZSBzbyBiZSBzdXJlIHRoYXQgdGhpbmdzIGFwcGVhciAKLWV4YWN0bHkgYXMgbm90ZWQuPC9GT05UPjwvUD4KLQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgICAgICAgICAgICAgICAgICAgICAgU2V0dXAKLSAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tPgotPEgyPjxGT05UIGNvbG9yPSIjMDAwMGZmIj5TZXR1cDwvRk9OVD48L0gyPgotPFA+PEI+U3RhcnRpbmcgQ2xlYW48L0I+PC9QPgotPHVsPgotICAgIDxsaT4gRGVsZXRlIGFueSBleGlzdGluZyB3b3JrYmVuY2g8L2xpPgotICAgIDxsaT4gU3RhcnQgRWNsaXBzZTwvbGk+Ci08L3VsPgotPFA+PEI+T3BlbiBhbiBYTUwgUGVyc3BlY3RpdmU8QlI+Ci08L0I+PC9QPgotPFVMPgotICAgIDxMST5TZWxlY3QgdGhlIDxCPk9wZW4gUGVyc3BlY3RpdmU8L0I+IHRvb2xiYXIgYnV0dG9uIGluIHRoZSB1cHBlciBsZWZ0PC9MST4KLSAgICA8TEk+U2VsZWN0IDxCPk90aGVyLi4uPC9CPjwvTEk+Ci0gICAgPExJPlNlbGVjdCA8Qj5YTUw8L0I+PC9MST4KLSAgICA8TEk+VmVyaWZ5IHRoZSBmb2xsb3dpbmcgdmlld3MgYXBwZWFyIGluIHRoZSBYTUwgcGVyc3BlY3RpdmU6IDxGT05UIGNvbG9yPSIjZmYwMDAwIj5UaGUgbG9jYXRpb24gb2YgdGhlIE91dGxpbmUgYW5kIE5hdmlnYXRvciB2aWV3cyBhcmUgcmV2ZXJzZWQgZnJvbSB0aGUgUmVzb3VyY2UgYW5kIFdlYiBwZXJzcGVjdGl2ZXMuIERvIHdlIHdhbnQgdG8gdHJ5IHRvIGJlIGNvbnNpc3RlbnQgYWNyb3NzIHRoZSBwZXJzcGVjdGl2ZXM/IEFsc28sIEkgb3BlbmVkIDxCPmRlZmVjdDwvQj4gMTc3NjY0IHRvIGVuYWJsZSBlYXN5IGFjY2VzcyB0byB0aGUgUHJvcGVydGllcyB2aWV3IGZyb20gd2l0aGluIHRoZSBYTUwgcGVyc3BlY3RpdmUuIElmIHRoaXMgdmlldyBpc24ndCBpbmNsdWRlZCBpbiB0aGUgUGVyc3BlY3RpdmUgYmVjYXVzZSBpdHMgdXNlIGlzIGxpbWl0ZWQsIHRoZW4gcmVjb21tZW5kIHdlIGF0IGxlYXN0IHByb3ZpZGUgYSBTaG93IG9yIEhpZGUgUHJvcGVydGllcyBWaWV3IHRvb2xiYXIgYnV0dG9uIChzaW1pbGFyIHRvIHRoZSBidXR0b25zIHRoYXQgUGFnZSBEZXNpZ25lciBwcm92aWRlcykuPC9GT05UPjwvTEk+Ci08L1VMPgotPFA+PEI+UHJvamVjdCBDcmVhdGlvbiBhbmQgRmlsZSBJbXBvcnRzPEJSPgotPC9CPjwvUD4KLTxVTD4KLSAgICA8TEk+Q3JlYXRlIGEgUHJvamVjdCwgPEI+WE1MVGVzdDI8L0I+IDwvTEk+Ci0gICAgPExJPkltcG9ydCB0aGUgZm9sbG93aW5nIGZpbGVzIGludG8gdGhpcyBwcm9qZWN0OgotICAgIDxVTD4KLSAgICAgICAgPExJPjxCPlB1cmNoYXNlT3JkZXIueHNkPC9CPjwvTEk+Ci0gICAgICAgIDxMST48Qj5JbnZvaWNlLmR0ZDwvQj48L0xJPgotICAgIDxMST48Qj5Kb2JEZXNjLnhtbDwvQj48L0xJPgotICAgIDxMST48Qj5XaXJlbGVzcy54bWw8L0I+PC9MST4KLSAgICA8TEk+PEI+Z290Y2hhVENCZWFucy5zZXQ8L0I+PC9MST4KLSAgICA8TEk+PEI+QVRTLmR0ZDwvQj48L0xJPgotICAgIDxMST48Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+YW55IG90aGVycz88L0ZPTlQ+PC9MST4KLSAgICA8L1VMPgotICAgIDwvTEk+Ci08L1VMPgotCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgICAgICAgICAgICAgICAgIENyZWF0ZS9PcGVuL0VkaXQgdGVzdCBjYXNlcwotICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0+Ci08SDI+PEZPTlQgY29sb3I9IiMwMDAwZmYiPkNyZWF0ZS9PcGVuL0VkaXQgdGVzdCBjYXNlczwvRk9OVD48L0gyPgotPFA+PEI+Q3JlYXRlIGFuIFhNTCBGaWxlIGZyb20gc2NyYXRjaDwvQj48L1A+Ci08VUw+Ci0gICAgPExJPlNlbGVjdCB0aGUgPEI+Q3JlYXRlIGEgbmV3IFhNTCBmaWxlPC9CPiB0b29sYmFyIGJ1dHRvbi48L0xJPgotICAgIDxMST5WZXJpZnkgdGhlIENyZWF0ZSBhIFhNTCBGaWxlIHdpemFyZCBhcHBlYXJzIGFuZCB0aGUgRmluaXNoIGJ1dHRvbiBpcyBkaXNhYmxlZC4gPEZPTlQgY29sb3I9IiNmZjAwMDAiPjxCPkRFRkVDVDo8L0I+IDE3NzY2MCAtIFhNTCBGaWxlIHdpemFyZDogZGlzYWJsZSBGaW5pc2ggYnV0dG9uIG9uIHRoZSBmaXJzdCBwYWdlPC9GT05UPi48L0xJPgotICAgIDxMST5BY2NlcHQgdGhlIGRlZmF1bHQgdG8gPEI+Q3JlYXRlIGEgbmV3IFhNTCBmaWxlPC9CPjwvTEk+Ci0gICAgPExJPkdvIHRvIHRoZSBOZXh0IHBhZ2UKLSAgICA8VUw+Ci0gICAgICAgIDxMST5TZWxlY3QgPEI+WE1MVGVzdDI8L0I+IGFzIHRoZSBmb2xkZXI8L0xJPgotICAgICAgICA8TEk+U3BlY2lmeSBhIEZpbGUgbmFtZSBvZiA8Qj5mcm9tU2NyYXRjaDwvQj48L0xJPgotICAgICAgICA8TEk+U2VsZWN0IDxCPkZpbmlzaDwvQj48L0xJPgotICAgIDwvVUw+Ci0gICAgPC9MST4KLSAgICA8TEk+VmVyaWZ5IHRoZSBmb2xsb3dpbmc6Ci0gICAgPFVMPgotICAgICAgICA8TEk+ZnJvbVNjcmF0Y2gueG1sIGFwcGVhcnMgaW4gdGhlIE5hdmlnYXRvciB2aWV3LjwvTEk+Ci0gICAgICAgIDxMST5mcm9tU2NyYXRjaC54bWwgaXMgb3BlbiB0byB0aGUgRGVzaWduIHBhZ2Ugb2YgdGhlIFhNTCBFZGl0b3IgYW5kIGhhcyBmb2N1cy48L0xJPgotICAgICAgICA8TEk+dGhlIERlc2lnbiB0YWIgYXBwZWFycyBiZWZvcmUgdGhlIFNvdXJjZSB0YWIgaW4gdGhlIFhNTCBFZGl0b3IuPC9MST4KLSAgICAgICAgPExJPnRoZSBEZXNpZ24gYW5kIFNvdXJjZSBwYWdlIHNob3cgbm8gY29udGVudC48L0xJPgotICAgICAgICA8TEk+dGhlIE91dGxpbmUgYW5kIFByb3BlcnRpZXMgdmlld3Mgc2hvdyBub3RoaW5nLjwvTEk+Ci0gICAgPC9VTD4KLSAgICA8L0xJPgotICAgIDxMST5Td2l0Y2ggdG8gdGhlIFNvdXJjZSBwYWdlLiBWZXJpZnkgdGhlIGN1cnNvciBhcHBlYXJzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUuPC9MST4KLSAgICA8TEk+UmlnaHQgbW91c2UgYnV0dG9uIDIgYW5kIHZlcmlmeSBhIHBvcHVwIG1lbnUgYXBwZWFycy48L0xJPgotICAgIDxMST5IaXQgPEI+Q3RybCtTcGFjZTwvQj4uIFZlcmlmeSB0aGUgY29udGVudCBhc3Npc3QgcHJvcG9zYWwgbGlzdCBhcHBlYXJzLjwvTEk+Ci0gICAgPExJPlNlbGVjdCA8Qj4mbHQ7P3htbCB2ZXJzaW9uPSZxdW90OzEuMCZxdW90OyBlbmNvZGluZz0mcXVvdDtVVEYtOCZxdW90Oz8mZ3Q7PC9CPjwvTEk+Ci0gICAgPExJPlZlcmlmeSAmbHQ7P3htbCB2ZXJzaW9uPSZxdW90OzEuMCZxdW90OyBlbmNvZGluZz0mcXVvdDtVVEYtOCZxdW90Oz8mZ3Q7IGlzIGluc2VydGVkIGFuZCBhcHBlYXJzIHN5bnRheCBoaWdobGlnaHRlZCBhbmQgYW4gZW50cnkgYXBwZWFycyBmb3IgaXQgaW4gdGhlIE91dGxpbmUgdmlldy48L0xJPgotICAgIDxMST5Qb3NpdGlvbiB0aGUgY3Vyc29yIHdpdGhpbiB0aGUgWE1MIGRlY2xhcmF0aW9uIGFuZCB2ZXJpZnkgPEI+dmVyc2lvbjwvQj4gYW5kIDxCPmVuY29kaW5nPC9CPiBhcHBlYXIgaW4gdGhlIFByb3BlcnRpZXMgdmlldy4gPEZPTlQgY29sb3I9IiNmZjAwMDAiPlRoaXMgdXNlZCB0byB3b3JrLCBidXQgbm93IGl0J3Mgbm90IHdvcmtpbmcuIE9wZW5lZCA8Qj5kZWZlY3Q8L0I+IDE3NzY2MiAtIFhNTCBkZWNsYXJhdGlvbiBhdHRyaWJ1dGVzIG5vdCBhcHBlYXJpbmcgaW4gUHJvcGVydGllcyB2aWV3LiBJZiB3ZSBkZWNpZGUgdG8gbm90IHRyZWF0IHZlcnNpb24gYW5kIGVuY29kaW5nIGFzIGF0dHJpYnV0ZXMsIHRoZW4gdGhpcyBzdGVwIHNob3VsZCBiZSByZW1vdmVkLjwvRk9OVD48L0xJPgotICAgIDxMST5Db250aW51ZSB0byB0aGUgbmV4dCBzZWN0aW9uLjwvTEk+Ci08L1VMPgotPFA+PEI+SWRlbnRpZnkgYSBsb2NhbCBEVEQgKDwvQj52ZXJpZmllcyBhIERURCBpcyBpbW1lZGlhdGVseSByZWNvZ25pemVkOyBpbiB0aGUgcGFzdCwgeW91IGhhZCB0byBjbG9zZSBhbmQgcmVvcGVuIHRoZSBXb3JrYmVuY2g8Qj4pPC9CPjwvUD4KLTxVTD4KLSAgICA8TEk+VHlwZSB0aGUgZm9sbG93aW5nIGFmdGVyIHRoZSBYTUwgZGVjbGFyYXRpb24gaW4gPEI+ZnJvbVNjcmF0Y2gueG1sPC9CPjogPEI+Jmx0OyFET0NUWVBFIEludm9pY2UgU1lTVEVNICZxdW90O0ludm9pY2UuZHRkJnF1b3Q7Jmd0OzwvQj4uIFRoZSB0ZXh0IHNob3VsZCBiZSBzeW50YXggaGlnaGxpZ2h0ZWQgYXMgeW91IHR5cGUgYW5kIHlvdSBzaG91bGQgc2VlIGFuIGVudHJ5IGdldCBhZGRlZCB0byB0aGUgT3V0bGluZSB2aWV3LjwvTEk+Ci0gICAgPExJPkhpdCA8Qj5FbnRlcjwvQj4gdG8gY3JlYXRlIGEgbmV3IGxpbmUgYWZ0ZXIgdGhlIERPQ1RZUEUgZGVjbGFyYXRpb24uPC9MST4KLSAgICA8TEk+SGl0IDxCPkN0cmwrU3BhY2U8L0I+LlZlcmlmeSBvbmx5IDxCPkludm9pY2U8L0I+IGFuZCA8Qj5jb21tZW50PC9CPiBhcHBlYXIgaW4gdGhlIHByb3Bvc2FsIGxpc3QuICg8Qj5OT1RFPC9CPjogPEI+SW52b2ljZTwvQj4gaXMgdGhlIHJvb3QgZWxlbWVudCk8L0xJPgotICAgIDxMST5IaXQgPEI+RW50ZXI8L0I+IHRvIGFjY2VwdCA8Qj5JbnZvaWNlPC9CPiBhcyBhIHNlbGVjdGlvbi4gVmVyaWZ5IHRoZSBJbnZvaWNlIHN0YXJ0IGFuZCBlbmQgdGFncyBhcmUgaW5zZXJ0ZWQgaW50byB0aGUgU291cmNlIGFuZCB0aGUgY3Vyc29yIGFwcGVhcnMgYmV0d2VlbiB0aGVtLiBBbiBlbGVtZW50IGVudHJ5IHNob3VsZCBhcHBlYXIgZm9yIEludm9pY2UgaW4gdGhlIE91dGxpbmUgdmlldy4gKDxCPk5PVEU8L0I+OiBYTUwgaXMgY2FzZS1zZW5zaXRpdmUgc28gYmUgc3VyZSB5b3Ugc2VlIEludm9pY2UgYW5kIG5vdCBpbnZvaWNlIGV2ZXJ5d2hlcmUpLjwvTEk+Ci0gICAgPExJPkhpdCA8Qj5DdHJsK1NwYWNlPC9CPi4gVmVyaWZ5IHRoZSBmb2xsb3dpbmcgYXBwZWFycyBpbiB0aGUgcHJvcG9zYWwgbGlzdCAoaW4gdGhlIG9yZGVyIHNob3duKTogPEZPTlQgY29sb3I9IiNmZjAwMDAiPkl0ZW0gaXMgYXBwZWFyaW5nIGJlZm9yZSBIZWFkZXIuIFRoZSBkZWZhdWx0IGlzIG5vdCB0byBzb3J0IHRoZSBsaXN0IGFscGhhYmV0aWNhbGx5LiBUaGF0IG1lYW5zIHRoZSBsaXN0IHNob3VsZCBiZSBzb3J0ZWQgYmFzZWQgb24gdGhlIG9yZGVyIGluIHdoaWNoIHRoZSBjaGlsZCB0YWdzIGFyZSBkZWZpbmVkIGluIHRoZSBlbGVtZW50IGRlZmluaXRpb24gZm9yIEludm9pY2UgaW4gdGhlIERURC4gSW4gb3RoZXIgd29yZHMsIHVzZXJzIHNob3VsZCBzZWUgY2hpbGQgdGFncyBsaXN0ZWQgYWNjb3JkaW5nIHRvIHRoZWlyIHNlcXVlbmNpbmcgb3JkZXIgaW4gdGhlIERURCwgd2hpY2ggdGhlIERURCBFZGl0b3Igc2hvd3MuIFZpb2xhdGluZyB0aGUgc2VxdWVuY2luZyBvcmRlciBjYXVzZXMgYW4gWE1MIGZpbGUgdG8gYmVjb21lIG5vdCB2YWxpZC4gPEI+REVGRUNUOjwvQj4gMTc3NjY4PC9GT05UPgotICAgIDxVTD4KLSAgICAgICAgPExJPkhlYWRlcjwvTEk+Ci0gICAgICAgIDxMST5JdGVtPC9MST4KLSAgICAgICAgPExJPmNvbW1lbnQ8L0xJPgotICAgIDwvVUw+Ci0gICAgPC9MST4KLSAgICA8TEk+SGl0IDxCPkVudGVyPC9CPiB0byBhY2NlcHQgPEI+SGVhZGVyPC9CPiBhcyBhIHNlbGVjdGlvbi48L0xJPgotICAgIDxMST5WZXJpZnkgdGhlIFNvdXJjZSBub3cgbG9va3MgbGlrZSB0aGUgZm9sbG93aW5nIGFuZCB0aGUgY3Vyc29yIGFwcGVhcnMgYmVmb3JlIDxCPmludm9pY2VOdW1iZXI8L0I+OjxJTUcgYm9yZGVyPSIwIiBoZWlnaHQ9IjgzIiBzcmM9ImlkZW50aWZ5RFRELmpwZyIgd2lkdGg9IjQ4NSI+PC9MST4KLSAgICA8TEk+VmVyaWZ5IDxCPkhlYWRlcjwvQj4gYXBwZWFycyBuZXN0ZWQgdW5kZXIgPEI+SW52b2ljZTwvQj4gaW4gdGhlIE91dGxpbmUgdmlldy48L0xJPgotICA8TEk+Q2xvc2UgdGhpcyBmaWxlLCBhbmQgcmVzcG9uZCA8Qj5ZZXM8L0I+IHdoZW4gcHJvbXB0ZWQgdG8gc2F2ZSB0aGUgY2hhbmdlcy48L0xJPgotICA8TEk+UmVvcGVuIHRoZSBmaWxlIGFuZCB2ZXJpZnkgdGhlIGNoYW5nZXMgd2VyZSBzYXZlZC48L0xJPgotICA8TEk+Q2xvc2UgdGhlIGZpbGUuIFZlcmlmeSBubyBzYXZlIGNoYW5nZXMgcHJvbXB0IGFwcGVhcnMuPC9MST4KLTwvVUw+Ci08UD48Qj5DcmVhdGUgYW4gWE1MIEZpbGUgZnJvbSBhbiBpbXBvcnRlZCBEVEQ8L0I+PC9QPgotPFVMPgotICAgIDxMST5TZWxlY3QgdGhlIDxCPkZpbGUtJmd0O05ldy0mZ3Q7WE1MIEZpbGU8L0I+LjwvTEk+Ci0gICAgPExJPlZlcmlmeSB0aGUgQ3JlYXRlIGEgWE1MIEZpbGUgd2l6YXJkIGFwcGVhcnMuPC9MST4KLSAgICA8TEk+U2VsZWN0IHRvIDxCPkNyZWF0ZSBhIG5ldyBYTUwgZmlsZSBmcm9tIGEgRFREIGZpbGU8L0I+PC9MST4KLSAgICA8TEk+R28gdG8gdGhlIE5leHQgcGFnZQotICAgIDxVTD4KLSAgICAgICAgPExJPlNlbGVjdCA8Qj5YTUxUZXN0MjwvQj4gYXMgdGhlIGZvbGRlcjwvTEk+Ci0gICAgICAgIDxMST5TcGVjaWZ5IGEgRmlsZSBuYW1lIG9mIDxCPmZyb21Mb2NhbERURDwvQj48L0xJPgotICAgICAgICA8TEk+R28gdG8gdGhlIE5leHQgcGFnZTwvTEk+Ci0gICAgPC9VTD4KLSAgICA8L0xJPgotICAgIDxMST5TZWxlY3QgdGhlIDxCPkltcG9ydCBGaWxlPC9CPiBidXR0b24KLSAgICA8VUw+Ci0gICAgICAgIDxMST5Vc2UgdGhlIEJyb3dzZSBidXR0b24gdG8gZmluZCA8Qj50ZXN0Y2FzZS5kdGQ8L0I+PC9MST4KLSAgICAgICAgPExJPlNlbGVjdCA8Qj5YTUxUZXN0MjwvQj4gYXMgdGhlIGZvbGRlci4gPEZPTlQgY29sb3I9IiNmZjAwMDAiPldvdWxkIGJlIG5pY2UgaWYgdGhpcyB3ZXJlIGFscmVhZHkgZmlsbGVkIGluLiBPcGVuIGEgZGVmZWN0LjwvRk9OVD48L0xJPgotICAgICAgICA8TEk+U2VsZWN0IDxCPkZpbmlzaDwvQj4gdG8gY2xvc2UgdGhlIEltcG9ydCBGaWxlIHdpemFyZDwvTEk+Ci0gICAgPC9VTD4KLSAgICA8L0xJPgotICAgIDxMST5FeHBhbmQgPEI+WE1MdGVzdDI8L0I+IGFuZCB0aGVuIHNlbGVjdCA8Qj50ZXN0Y2FzZS5kdGQ8L0I+LiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+V2FzIGV4cGVjdGluZyB0byBzZWUgdGhlIGltcG9ydGVkIGZpbGUgc2VsZWN0ZWQgaW4gdGhlIFdvcmtiZW5jaCBmaWxlcyBsaXN0LCBidXQgaXQgd2Fzbid0LiBPcGVuIGEgZGVmZWN0LjwvRk9OVD48L0xJPgotICAgIDxMST5HbyB0byB0aGUgTmV4dCBwYWdlLjwvTEk+Ci0gICAgPExJPlNlbGVjdCA8Qj50ZXN0Y2FzZTwvQj4gYXMgdGhlIFJvb3QgRWxlbWVudC48L0xJPgotICAgIDxMST5BY2NlcHQgdGhlIGRlZmF1bHQgdG8gPEI+Q3JlYXRlIHJlcXVpcmVkIGNvbnRlbnQgb25seTwvQj4uPC9MST4KLSAgICA8TEk+VmVyaWZ5IDxCPnRlc3RjYXNlLmR0ZDwvQj4gYXBwZWFycyBhcyB0aGUgU3lzdGVtIElkLjwvTEk+Ci0gICAgPExJPlNlbGVjdCBGaW5pc2guIFZlcmlmeSA8Qj5mcm9tTG9jYWxEVEQueG1sPC9CPiBhcHBlYXJzIGluIHRoZSBYTUwgRWRpdG9yLiBWZXJpZnkgdGhlIFNvdXJjZSBwYWdlIGxvb2tzIGxpa2UgdGhlIGZvbGxvd2luZzogPElNRyBib3JkZXI9IjAiIGhlaWdodD0iMjkwIiBzcmM9ImltcG9ydERURC5qcGciIHdpZHRoPSI2NjAiPjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIE91dGxpbmUgdmlldyBhbmQgdGhlIGZvcm1hdHRpbmcgaW5kZW50YXRpb24gcmVmbGVjdCB0aGUgcHJvcGVyIGVsZW1lbnQvdGFnIGhpZXJhcmNoeS4gSGVyZSdzIHdoYXQgdGhlIE91dGxpbmUgdmlldyBzaG91bGQgbG9vayBsaWtlOjxJTUcgYm9yZGVyPSIwIiBoZWlnaHQ9IjI5NyIgc3JjPSJvdXRsaW5lMS5qcGciIHdpZHRoPSI2NTUiPjwvTEk+Ci0gIDxMST5WZXJpZnkgc2VsZWN0aW9uIHN5bmNocm9uaXphdGlvbiBiZXR3ZWVuIHRoZSBEZXNpZ24gcGFnZSwgU291cmNlIHBhZ2UsIE91dGxpbmUgdmlldywgCi0gICAgICAgIGFuZCBQcm9wZXJ0aWVzIHZpZXcuCi0gICAgPFVMPgotICAgICAgICA8TEk+RnJvbSB0aGUgU291cmNlIHBhZ2UsIGNsaWNrIHdpdGhpbiB0aGUgPEI+aGVhZGVyPC9CPiBzdGFydCB0YWcuIAotICAgICAgICAgICAgVmVyaWZ5IDxCPmhlYWRlcjwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIE91dGxpbmUgdmlldyBhbmQgaW4gdGhlIERlc2lnbiAKLSAgICAgICAgICAgIHBhZ2UgYW5kIHRoYXQgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIGFuZCBwcm9wZXJ0eSB2YWx1ZXMgYXBwZWFyIGluIHRoZSAKLSAgICAgICAgICAgIFByb3BlcnRpZXMgdmlldzoKLSAgICAgICAgPFRBQkxFIGJvcmRlcj0iMSI+Ci0gICAgICAgICAgICA8VEJPRFk+Ci0gICAgICAgICAgICAgICAgPFRSPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9IjEwMCI+PEI+UHJvcGVydHk8L0I+PC9URD4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSI3NiI+PEI+VmFsdWU8L0I+PC9URD4KLSAgICAgICAgICAgICAgICA8L1RSPgotICAgICAgICAgICAgICAgIDxUUj4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSIxMDAiPmNhdGVnb3J5PC9URD4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSI3NiI+d2VidG9vbDwvVEQ+Ci0gICAgICAgICAgICAgICAgPC9UUj4KLSAgICAgICAgICAgICAgICA8VFI+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iMTAwIj5udW1iZXI8L1REPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9Ijc2Ij5pZHZhbHVlMDwvVEQ+Ci0gICAgICAgICAgICAgICAgPC9UUj4KLSAgICAgICAgICAgICAgICA8VFI+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iMTAwIj5zdGF0ZTwvVEQ+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iNzYiPiZuYnNwOzwvVEQ+Ci0gICAgICAgICAgICAgICAgPC9UUj4KLSAgICAgICAgICAgICAgICA8VFI+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iMTAwIj5zdWJDYXRlZ29yeTwvVEQ+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iNzYiPkFjY2Vzc2FiaWxpdHk8L1REPgotICAgICAgICAgICAgICAgIDwvVFI+Ci0gICAgICAgICAgICAgICAgPFRSPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9IjEwMCI+c3ViU3ViQ2F0ZWdvcnk8L1REPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9Ijc2Ij4mbmJzcDs8L1REPgotICAgICAgICAgICAgICAgIDwvVFI+Ci0gICAgICAgICAgICA8L1RCT0RZPgotICAgICAgICA8L1RBQkxFPgotICAgICAgICA8L0xJPgotCTxMST5Gcm9tIHRoZSBPdXRsaW5lIHZpZXcsIHNlbGVjdCB0aGUgPEI+dGVzdEJ1Y2tldDwvQj4gdGFnLgotICAgICAgICAgICAgVmVyaWZ5IDxCPnRlc3RCdWNrZXQ8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBEZXNpZ24gcGFnZSBhbmQgdGhlIGN1cnJlbnQgbWFya2VyCi0gICAgICAgICAgICBpbiB0aGUgbGVmdGhhbmQgbWFyZ2luIG9mIHRoZSBTb3VyY2UgcGFnZSBpbmRpY2F0ZXMgdGhlIHJhbmdlIG9mIHRoZSAKLSAgICAgICAgICAgIDxCPnRlc3RCdWNrZXQ8L0I+IHRhZy4gVGhlIFByb3BlcnRpZXMgdmlldyBzaG91bGQgc2hvdyBhIHByb3BlcnR5IG9mIDxCPnR5cGU8L0I+Ci0gICAgICAgICAgICB3aXRoIGEgdmFsdWUgb2YgPEI+Q29tcG9uZW50VGVzdDwvQj4uCi0gICAgICAgIDwvTEk+Ci0gICAgPC9VTD4gICAKLSAgICA8L0xJPiAKLSAgICA8TEk+VmVyaWZ5IGVkaXQgc3luY2hyb25pemF0aW9uIGJldHdlZW4gdGhlIERlc2lnbiBwYWdlLCBTb3VyY2UgcGFnZSwgYW5kIAotICAgICAgICBQcm9wZXJ0aWVzIHZpZXcgKGZvY3VzIGhlcmUgaXMgb24gYWRkaW5nIGF0dHJpYnV0ZXMgYW5kIGF0dHJpYnV0ZSB2YWx1ZXMpLgotICAgIDxVTD4KLSAgICAgICAgPExJPkZyb20gdGhlIFNvdXJjZSBwYWdlLCB1c2UgY29udGVudCBhc3Npc3QgdG8gaW5zZXJ0IGFuIGF0dHJpYnV0ZSBhbmQgYXR0cmlidXRlIHZhbHVlCi0gICAgICAgICAgICBmb3IgdGhlIDxCPmhlYWRlcjwvQj4gc3RhcnQgdGFnLgotICAgICAgICAgICAgPFVMPgotICAgICAgICAgICAgPExJPlBvc2l0aW9uIHRoZSBjdXJzb3IgYWZ0ZXIgdGhlIDxCPmNhdGVnb3J5PC9CPiBhdHRyaWJ1dGUgaW4gdGhlIDxCPmhlYWRlcjwvQj4gc3RhcnQgdGFnLjwvTEk+Ci0gICAgICAgICAgICA8TEk+VHlwZSA8Qj5zcGFjZTwvQj4gYW5kIHRoZW4gaGl0IHByb21wdCBmb3IgY29udGVudCBhc3Npc3QuPC9MST4KLSAgICAgICAgICAgIDxMST5WZXJpZnkgb25seSA8Qj5zdGF0ZTwvQj4gYW5kIDxCPnN1YlN1YkNhdGVnb3J5PC9CPiBhcHBlYXIgaW4gdGhlIHByb3Bvc2FsIGxpc3QgKGNvbnRlbnQgYXNzaXN0IGlzIHNtYXJ0IGVub3VnaCBub3QgdG8gbGlzdCBhbnkgYXR0cmlidXRlcyB0aGF0IGFscmVhZHkgZXhpc3QgaW4gdGhlIHN0YXJ0IHRhZyBzaW5jZSBhdHRyaWJ1dGVzIGNhbiBvbmx5IGFwcGVhciBvbmNlLiA8Rk9OVCBjb2xvcj0iIzAwMDBmZiI+Q29vbCE8L0ZPTlQ+KS48L0xJPgotICAgICAgICAgICAgPExJPlNlbGVjdCA8Qj5zdGF0ZTwvQj4uPC9MST4gICAKLSAgICAgICAgICAgIDxMST5WZXJpZnkgPEI+c3RhdGU9IlVuZGVyQ29uc3RydWN0aW9uIjwvQj4gaXMgaW5zZXJ0ZWQgaW4gdGhlIFNvdXJjZSBwYWdlIChjb250ZW50IGFzc2lzdCBhdXRvbWF0aWNhbGx5IGluc2VydHMgYW55IGRlZmF1bHQgdmFsdWVzLiA8Rk9OVCBjb2xvcj0iIzAwMDBmZiI+Q29vbCE8L0ZPTlQ+KS4gVmVyaWZ5IHRoZSBEZXNpZ24gcGFnZSBhbmQgUHJvcGVydGllcyB2aWV3IHJlZmxlY3QgdGhpcyBjaGFuZ2UuPC9MST4gICAgICAgICAKLSAgICAgICAgICAgIDwvVUw+Ci0gICAgICAgIDwvTEk+Ci0gICAgICAgIDxMST5Gcm9tIHRoZSBQcm9wZXJ0aWVzIHZpZXcsIHVwZGF0ZSB0aGUgPEI+c3RhdGU8L0I+IGF0dHJpYnV0ZSB2YWx1ZSB0byAiVW5kZXJSZXZpZXciIAotICAgICAgICAgICAgKGEgcHVsbGRvd24gbGlzdCBvZiB2YWx1ZXMgc2hvdWxkIGJlIGF2YWlsYWJsZSkuIFZlcmlmeSB0aGUgY2hhbmdlIGlzIHJlZmxlY3RlZAotICAgICAgICAgICAgaW4gdGhlIFNvdXJjZSBhbmQgRGVzaWduIHBhZ2VzLgotICAgICAgICA8L0xJPgotICAgICAgICA8TEk+RnJvbSB0aGUgRGVzaWduIHBhZ2UsIGFkZCBhbiBhdHRyaWJ1dGUgYW5kIGF0dHJpYnV0ZSB2YWx1ZSB0byB0aGUgPEI+aGVhZGVyPC9CPiB0YWcuCi0gICAgICAgICAgICA8VUw+Ci0gICAgICAgICAgICA8TEk+QnJpbmcgdXAgdGhlIHBvcHVwIG1lbnUgZm9yIHRoZSA8Qj5oZWFkZXI8L0I+IHRhZy48L0xJPgotICAgICAgICAgICAgPExJPlNlbGVjdCA8Qj5BZGQgQXR0cmlidXRlLT5zdWJTdWJDYXRlZ29yeTwvQj4gZnJvbSB0aGUgcG9wdXAgbWVudSAoaXQncyBzbWFydAotICAgICAgICAgICAgICAgIGVub3VnaCB0byBrbm93IHdoaWNoIGF0dHJpYnV0ZXMgaGF2ZW4ndCBiZWVuIHNwZWNpZmllZCB5ZXQgLi4uIGxpa2UgY29udGVudCAKLSAgICAgICAgICAgICAgICBhc3Npc3QuIENvb2whKS48L0xJPgotICAgICAgICAgICAgPExJPlR5cGUgaW4gYSB2YWx1ZSBvZiA8Qj5LZXlib2FyZCBzdXBwb3J0PC9CPi48L0xJPgotICAgICAgICAgICAgPExJPlZlcmlmeSB0aGUgY2hhbmdlIGlzIHJlZmxlY3RlZCBpbiB0aGUgU291cmNlIHBhZ2UgYW5kIFByb3BlcnRpZXMgdmlldzwvTEk+Ci0gICAgICAgICAgICA8L1VMPgotICAgICAgICA8L0xJPgotICAgIDwvVUw+Ci0gICAgPC9MST4KLTwvVUw+Ci08UD48Qj5PcGVuIGFuIFhNTCBGaWxlIHRoYXQgcmVmZXJlbmNlcyBhIHJlbW90ZSBEVEQ8L0I+PC9QPgotPFVMPgotICAgIDxMST5PcGVuIHRoZSA8Qj5XaXJlbGVzcy54bWw8L0I+IGZpbGUuPC9MST4KLSAgICA8TEk+VmVyaWZ5IGl0IGxvb2tzIGxpa2UgdGhlIGZvbGxvd2luZyBpbiB0aGUgU291cmNlIHBhZ2U6PElNRyBib3JkZXI9IjAiIGhlaWdodD0iMjM5IiBzcmM9IndpcmVsZXNzLmpwZyIgd2lkdGg9IjY1NiI+PC9MST4KLSAgICA8TEk+VmVyaWZ5IHRoZSBPdXRsaW5lIHZpZXcgYW5kIHRoZSBmb3JtYXR0aW5nIGluZGVudGF0aW9uIHJlZmxlY3QgdGhlIHByb3BlciAKLSAgICAgICAgZWxlbWVudC90YWcgaGllcmFyY2h5LiBIZXJlJ3Mgd2hhdCB0aGUgT3V0bGluZSB2aWV3IHNob3VsZCBsb29rIGxpa2U6IDxJTUcgYm9yZGVyPSIwIiBoZWlnaHQ9IjE4OSIgc3JjPSJvdXRsaW5lMi5qcGciIHdpZHRoPSI2NTYiPjwvTEk+IAotICAgIDxMST5WZXJpZnkgY29udGVudCBhc3Npc3QgPEZPTlQgY29sb3I9IiNmZjAwMDAiPkRlZmVjdCAxNzYzNzkgKGluIHZlcmlmeSBzdGF0ZSwgYnV0IHN0aWxsIG5vdCB3b3JraW5nKTwvRk9OVD4uPC9MST4KLSAgICAgICAgPFVMPgotICAgICAgICAgICA8TEk+Q3JlYXRlIGEgbmV3IGxpbmUgYWZ0ZXIgdGhlIDxCPndtbDwvQj4gc3RhcnQgdGFnLjwvTEk+Ci0gICAgICAgICAgIDxMST5Qcm9tcHQgZm9yIGNvbnRlbnQgYXNzaXN0IG9uIHRoZSBuZXcgbGluZS48L0xJPgotICAgICAgICAgICA8TEk+VmVyaWZ5IHRoZSBmb2xsb3dpbmcgYXBwZWFyIGFzIHByb3Bvc2FscyAoaW4gdGhlIG9yZGVyIHNob3duKTogCi0gICAgICAgICAgICAgICA8VUw+Ci0gICAgICAgICAgICAgICAgICAgPExJPmhlYWQ8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST50ZW1wbGF0ZTwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPmNhcmQ8L0xJPgotICAgICAgICAgICAgICAgPC9VTD4KLSAgICAgICAgICAgPC9MST4KLSAgICAgICAgICAgPExJPkNyZWF0ZSBhIG5ldyBsaW5lIGFmdGVyIHRoZSA8Qj53bWw8L0I+IHN0YXJ0IHRhZy48L0xJPgotICAgICAgICAgICA8TEk+VHlwZSBhIHNwYWNlIGJlZm9yZSB0aGUgZW5kaW5nIGRlbGltaXRlciBvbiB0aGUgY2FyZCBzdGFydCB0YWcuPC9MST4KLSAgICAgICAgICAgPExJPlByb21wdCBmb3IgY29udGVudCBhc3Npc3Q8L0xJPgotICAgICAgICAgICA8TEk+VmVyaWZ5IHRoZSBmb2xsb3dpbmcgYXBwZWFyIGFzIHByb3Bvc2FscyAobm90IG5lY2Vzc2FyaWx5IGluIHRoZQotICAgICAgICAgICAgICAgb3JkZXIgc2hvd24pLiAKLSAgICAgICAgICAgICAgIDxVTD4KLSAgICAgICAgICAgICAgICAgICA8TEk+dGl0bGU8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST5uZXdjb250ZXh0PC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+b3JkZXJlZDwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPnhtbDpsYW5nPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+b25lbnRlcmJhY2t3YXJkPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+b250aW1lcjwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPmlkPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+Y2xhc3M8L0xJPgotICAgICAgICAgICAgICAgPC9VTD4KLSAgICAgICAgICAgPC9MST4KLSAgICAgICAgICAgPExJPlBvc2l0aW9uIHRoZSBjdXJzb3Igd2l0aGluIHRoZSA8Qj5tZXRob2Q8L0I+IGF0dHJpYnV0ZSB2YWx1ZSBpbiB0aGUgPEI+Z288L0I+IHN0YXJ0IHRhZy48L0xJPgotICAgICAgICAgICA8TEk+UHJvbXB0IGZvciBjb250ZW50IGFzc2lzdDwvTEk+Ci0gICAgICAgICAgIDxMST5WZXJpZnkgPEI+cG9zdDwvQj4gYW5kIDxCPmdldDwvQj4gYXBwZWFyIGFzIHByb3Bvc2Fscy48L0xJPgotICAgICAgICA8L1VMPgotICAgIDxMST5WZXJpZnkgc2VsZWN0aW9uIHN5bmNocm9uaXphdGlvbiBiZXR3ZWVuIHRoZSBEZXNpZ24gcGFnZSwgU291cmNlIHBhZ2UsIE91dGxpbmUgdmlldywgCi0gICAgICAgIGFuZCBQcm9wZXJ0aWVzIHZpZXcuCi0gICAgPFVMPgotICAgICAgICA8TEk+RnJvbSB0aGUgU291cmNlIHBhZ2UsIGNsaWNrIHdpdGhpbiB0aGUgPEI+Y2FyZDwvQj4gc3RhcnQgdGFnLiAKLSAgICAgICAgICAgIFZlcmlmeSA8Qj5jYXJkPC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgT3V0bGluZSB2aWV3IGFuZCBpbiB0aGUgRGVzaWduIAotICAgICAgICAgICAgcGFnZSBhbmQgdGhhdCB0aGUgY29udGVudCBhc3Npc3QgcHJvcG9zYWxzIGxpc3RlZCBhYm92ZSBmb3IgdGhlCi0gICAgICAgICAgICA8Qj5jYXJkPC9CPiB0YWcgYXBwZWFyIGFzIHByb3BlcnRpZXMgaW4gdGhlIFByb3BlcnRpZXMgdmlldy4gTm8gdmFsdWVzIHNob3VsZCBhcHBlYXIgZm9yIHRoZXNlIHByb3BlcnRpZXMuPC9MST4KLQk8TEk+RnJvbSB0aGUgT3V0bGluZSB2aWV3LCBzZWxlY3QgdGhlIDxCPnBvc3RmaWVsZDwvQj4gdGFnLgotICAgICAgICAgICAgVmVyaWZ5IDxCPnBvc3RmaWVsZDwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIERlc2lnbiBwYWdlIGFuZCB0aGUgY3VycmVudCBtYXJrZXIKLSAgICAgICAgICAgIGluIHRoZSBsZWZ0aGFuZCBtYXJnaW4gb2YgdGhlIFNvdXJjZSBwYWdlIGluZGljYXRlcyB0aGUgcmFuZ2Ugb2YgdGhlIAotICAgICAgICAgICAgPEI+cG9zdGZpZWxkPC9CPiB0YWcuIFRoZSBQcm9wZXJ0aWVzIHZpZXcgc2hvdWxkIHNob3cgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzLAotICAgICAgICAgICAgbm9uZSBvZiB3aGljaCBzaG91bGQgaGF2ZSBhIHZhbHVlOgotICAgICAgICAgICAgICAgPFVMPgotICAgICAgICAgICAgICAgICAgIDxMST5uYW1lPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+dmFsdWU8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST5pZDwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPmNsYXNzPC9MST4KLSAgICAgICAgICAgICAgIDwvVUw+Ci0gICAgICAgICAgIDwvTEk+Ci0gICAgPC9VTD4gICAKLSAgICA8L0xJPgotICAgIDxMST5WZXJpZnkgZWRpdCBzeW5jaHJvbml6YXRpb24gYmV0d2VlbiB0aGUgRGVzaWduIHBhZ2UsIFNvdXJjZSBwYWdlLCBPdXRsaW5lIHZpZXcsIGFuZCAKLSAgICAgICAgUHJvcGVydGllcyB2aWV3IChmb2N1cyBoZXJlIGlzIG9uIGFkZGluZyBlbGVtZW50cy90YWdzKS4KLSAgICA8VUw+Ci0gICAgICAgIDxMST5Gcm9tIHRoZSBTb3VyY2UgcGFnZSwgY29weSBhbmQgcGFzdGUgdGhlIDxCPmNhcmQ8L0I+IHRhZy4KLSAgICAgICAgICAgIDxVTD4KLSAgICAgICAgICAgIDxMST5Qb3NpdGlvbiB0aGUgY3Vyc29yIGluIHRoZSA8Qj5jYXJkPC9CPiBzdGFydCB0YWcuPC9MST4KLSAgICAgICAgICAgIDxMST5Ob3RpY2UgdGhlIHJhbmdlIG9mIHRoZSA8Qj5jYXJkPC9CPiB0YWcgaW4gdGhlIGxlZnRoYW5kIG1hcmdpbiBhcmVhLjwvTEk+Ci0gICAgICAgICAgICA8TEk+Q29weSB0aGlzIHJhbmdlIG9mIGxpbmVzIHVzaW5nIHRoZSA8Qj5FZGl0LT5Db3B5PC9CPiBwdWxsZG93biBtZW51IHNlbGVjdGlvbi48L0xJPgotICAgICAgICAgICAgPExJPlBhc3RlIGFmdGVyIHRoZSA8Qj5jYXJkPC9CPiBlbmQgdGFnIHVzaW5nIEN0cmwrVi48L0xJPgotICAgICAgICAgICAgPExJPlZlcmlmeSB0aGUgYXBwcm9wcmlhdGUgbGluZXMgd2VyZSBwYXN0ZWQgbiB0aGUgU291cmNlIHBhZ2UuCi0gICAgICAgICAgICAgICAgVmVyaWZ5IHRoZSBEZXNpZ24gcGFnZSwgT3V0bGluZSB2aWV3LCBhbmQgdGhlIFByb3BlcnRpZXMgCi0gICAgICAgICAgICAgICAgdmlldyByZWZsZWN0IHRoaXMgY2hhbmdlLjwvTEk+ICAgICAgICAgCi0gICAgICAgICAgICA8L1VMPgotICAgICAgICA8L0xJPgotICAgICAgICA8TEk+RnJvbSB0aGUgRGVzaWduIHBhZ2UsIGFkZCBhbm90aGVyIDxCPmNhcmQ8L0I+IHRhZy4KLSAgICAgICAgICAgIDxVTD4KLSAgICAgICAgICAgIDxMST5CcmluZyB1cCB0aGUgcG9wdXAgbWVudSBmb3IgdGhlIDxCPndtbDwvQj4gdGFnLjwvTEk+Ci0gICAgICAgICAgICA8TEk+U2VsZWN0IDxCPkFkZCBDaGlsZC0+Y2FyZDwvQj4gZnJvbSB0aGUgcG9wdXAgbWVudS48L0xJPgotICAgICAgICAgICAgPExJPlZlcmlmeSB0aGUgU291cmNlIHBhZ2UsIE91dGxpbmUgdmlldywgYW5kIHRoZSBQcm9wZXJ0aWVzCi0gICAgICAgICAgICAgICAgdmlldyByZWZsZWN0IHRoaXMgY2hhbmdlLiBOT1RFOiBpdCBzaG91bGQgaGF2ZSBnZW5lcmF0ZWQgb3V0Ci0gICAgICAgICAgICAgICAgdGhlIHNhbWUgdGhpbmcgYXMgdGhlIG9yaWdpbmFsIGNhcmQgdGFnLCB3aXRoIHRoZSBleGNlcHRpb24KLSAgICAgICAgICAgICAgICB0aGF0IGEgPEI+bWV0aG9kPC9CPiBhdHRyaWJ1dGUgc2hvdWxkIG5vdCBleGlzdCBpbiB0aGUgPEI+Z288L0I+IHN0YXJ0IHRhZy4gPC9MST4KLSAgICAgICAgICAgIDwvVUw+Ci0gICAgICAgIDwvTEk+Ci0gICAgPC9VTD4KLSAgICA8L0xJPiAKLTwvVUw+Ci08UD48Qj5DcmVhdGUgYW5kIFZhbGlkYXRlIGFuIFhNTCBGaWxlIGZyb20gYSBzY2hlbWE8L0I+PEJSPgotCi08UD4odGhlc2Ugc3RlcHMgYXJlIHRha2VuIGZyb20gdGhlICdEZXNpZ24nIHNtb2tlIHRlc3QsIGV4Y2VwdCB0aGUgU291cmNlIFBhZ2UgaXMgdGhlIGZvY3VzKTwvUD4KLTx1bD4KLTxsaT4KLVJpZ2h0IG1vdXNlIGJ1dHRvbiAyIG9uIHRoZSBQdXJjaGFzZU9yZGVyLnhzZCBhbmQgc2VsZWN0IDxiPkNyZWF0ZSBYTUwKLUZpbGU8L2I+LjwvbGk+Ci0KLTxsaT4KLUFjY2VwdCB0aGUgZGVmYXVsdCBmaWxlIG5hbWVzLjwvbGk+Ci0KLTxsaT4KLUluIHRoZSBTZWxlY3QgUm9vdCBFbGVtZW50IHBhZ2UsIGNob29zZSA8Yj5wdXJjaGFzZU9yZGVyPC9iPiBhcyByb290IGVsZW1lbnQuPC9saT4KLQotPGxpPgotQ2hvb3NlIDxiPkNyZWF0ZSByZXF1aXJlZCBhbmQgb3B0aW9uYWwgY29udGVudDwvYj4gdG8gY3JlYXRlIGEgbWluaW1hbAotZG9jdW1lbnQuPC9saT4KLQotPGxpPgotRW50ZXIgPGI+cG88L2I+IGFzIHRoZSBuYW1lc3BhY2UgcHJlZml4LjwvbGk+Ci0KLTxsaT5PbiBGaW5pc2gsIGEgUHVyY2hhc2VPcmRlci54bWwgaXMgY3JlYXRlZCBhbmQgdGhlIFhNTCBFZGl0b3IgaXMgb3BlbmVkLiAoU2VsZWN0IFNvdXJjZSBQYWdlIGlmIG5vdCBhbHJlYWR5IHRoZXJlLik8L2xpPgotCi08bGk+Ci1SdW4gVmFsaWRhdGUuIFRoZSBQdXJjaGFzZU9yZGVyLnhtbCBzaG91bGQgYmUgaW52YWxpZC48L2xpPgotCi08bGk+Ci1Eb3VibGUgY2xpY2sgb24gdGhlIGVycm9yIG1lc3NhZ2UuIEl0IHNob3VsZCBiZSBwb3NpdGlvbmVkIHRvIHRoZSBsaW5lCi1pbiBlcnJvciwgaS5lLiB0aGUgPGI+cGFydE51bTwvYj4gYXR0cmlidXRlLiBJdCBpcyBpbnZhbGlkIGJlY2F1c2UgdGhlCi12YWx1ZSBpcyBub3Qgc2V0IHRvIG1hdGNoIHRoZSBYTUwgc2NoZW1hIHBhdHRlcm4gZmFjZXQgImQzLVtBLVpdezJ9IiAoMwotZGlnaXRzIGZvbGxvd2VkIGJ5IDIgY2hhcmFjdGVycykuPC9saT4KLQotPGxpPkluIHRoZSBTb3VyY2UgVmlldywgbG9jYXRlIHRoZSA8Yj5wYXJ0TnVtPC9iPiBhdHRyaWJ1dGUgdW5kZXIgZWxlbWVudCBpdGVtLgotRW50ZXIgdGhlIHZhbHVlIDMzMy1BQi48L2xpPgotCi08bGk+Ci1SdW4gVmFsaWRhdGUuIFRoZSBQdXJjaGFzZU9yZGVyLnhtbCBkb2N1bWVudCBzaG91bGQgbm93IGJlIHZhbGlkLjwvbGk+Ci08L1VMPgotPFVMPgotICA8TEk+Ci0gIDxIUj48L0xJPgotICA8bGk+UGxhY2UgdGhlIGN1cnNvciBhZnRlciB0aGUgJmx0O2l0ZW1zJmd0OyB0YWcgYW5kIGJlc3VyZSAiaXRlbSIgaXMgCi0gIGxpc3RlZCBpbiB0aGUgY29udGVudCBhc3Npc3QgbGlzdC4gPC9saT4KLTxsaT5SZW5hbWUgdGhlIHB1cmNoYXNlT3JkZXIueHNkIHRvLCBzYXksIHB1cmNoYXNlT3JkZXJIT0xELnhzZDwvbGk+Ci08bGk+VmVyaWZ5IHRoYXQgY29udGVudCBhc3Npc3Qgc3RpbGwgZ2l2ZXMgeW91ICJpdGVtIiBhcyBhYm92ZS48L2xpPgotPGxpPk5vdyBzZWxlY3QgdGhlICJSZWxvYWQgRGVwZW5kYW5jaWVzIiBidXR0b24uPC9saT4KLTxsaT5WZXJpZnkgdGhhdCBub3cgY29udGVudCBhc3Npc3Qgbm8gbG9uZ2VyIGxpc3RzIGFueSBpdGVtcyBvdGhlciAKLXRoYXQgdGhlIG1hY3JvICJjb21tZW50Ii48L2xpPgotPGxpPlJlcGVhdCBtYWtpbmcgcHVyY2hhc2VPcmRlci54c2Qgd29ya2FibGUgYWdhaW4uPC9saT4KLTwvdWw+Ci08UD48L1A+PFA+PC9QPjxQPjwvUD48UD48L1A+PFA+PC9QPjwvUD4KLTxQPjxCPk9wZW4gYW4gWE1MIEZpbGUgZm9yIGEgc2hpcHBlZCBEVEQgY2F0YWxvZyBlbnRyeTwvQj48QlI+Ci08QlI+Ci1bcHV0IGluIG9wdGlvbmFsIHNlY3Rpb24gLi4gdGhpcyBpc24ndCBhIGN1c3RvbWVyIHNjZW5lcmlvXTxCUj4KLVRvIHZlcmlmeSB0aGF0IHNoaXBwZWQgRFREcyBhcmUgd29ya2luZzo8QlI+Ci08VUw+Ci08TEk+Ci1Vc2UgYSB3ZWIgcHJvamVjdCB3aXRoIGEgc3RhbmRhcmQgd2ViLnhtbCBmaWxlIGluIGl0LiBCZSBzdXJlIAotdGhlcmUgaXMgbm8gd2ViLWFwcF8yXzIuZHRkIGZpbGUgaW4gdGhlIGRpcmVjdG9yeS4gSW4gdGhlIHdlYi54bWwgZmlsZSAKLWl0c2VsZiwgbWFuZ2xlIHRoZSB3ZWItYXBwXzJfMi5kdGQgZmlsZW5hbWUgaW4gdGhlIHN5c3RlbSBpZCBhIGxpdHRsZSwgc3VjaCBhcyAKLWNoYW5nZSBpdCB0byB4ZWItYXBwXzJfMi5kdGQgdG8gYmUgc3VyZSBpdCBjYW4ndCBiZSBmb3VuZCB2aWEgdGhlCi1ub3JtYWwgaHR0cCBtZXRob2QgKFRoaXMgaXNuJ3QgcmVhbGx5IG5lY2Vzc2FyeSBmb3IgdGhlIGZ1bnRpb24gdG8gd29yaywKLWl0cyBqdXN0IHRvIGJlIHN1cmUgb25seSB0aGUgY2F0YWxvZyBmdW5jdGlvbiBpcyBpbiBlZmZlY3QpLgotPC9MST4KLTxMST4KLUdvIHRvIHRoZSBwcmVmZXJlbmNlcyBwYWdlLCBhbmQgb3BlbiB0aGUgWE1MIENhdGFsb2cuIFZlcmlmeSB0aGVyZSAKLWlzIGFuIGVudHJ5IGZvciAtLy9TdW4gTWljcm9zeXN0ZW1zLCBJbmMuLy9EVEQgV2ViIEFwcGxpY2F0aW9uIDIuMi8vRU4uCi08L0xJPgotPExJPgotT25jZSBhbGwgdGhlIHByZXAgd29yayBpcyBkb25lIChmaWxlcyBkZWxldGVkLCB0ZXh0IG1vZGlmaWVkKSwgeW91IHNob3VsZCAKLWV4aXQgYW5kIHJlc3RhcnQgRWNsaXBzZSB0byBiZSBzdXJlIHlvdSBoYXZlIGEgZnJlc2ggc3RhcnQuCi08L0xJPgotPExJPgotT3BlbiB0aGUgd2ViLnhtbCBmaWxlIGFuZCBiZSBzdXJlIHRoYXQgY29udGVudCBhc3Npc3Qgd29ya3MgZm9yIHRoYXQgZmlsZS4KLUZvciBleGFtcGxlLCByaWdodCBhZnRlciB0aGUgZW5kIG9mIHRoZSAmbHQ7L2Rpc3BsYXktbmFtZSZndDsgdGFnLCBjdHJsLXNwYWNlIAotc2hvdWxkIHByb3ZpZGUgYSBsb25nIGxpc3Qgb2YgZWxlbWVudHMsIHN0YXJ0aW5nIHdpdGggc2VydmxldCwgc2VydmxldC1tYXBwaW5nLCBldGMuCi1UaGlzIGluZGljYXRlcyB0aGUgc2hpcHBlZCBEVEQgZnVuY3Rpb24gaXMgd29ya2luZyBhbmQgY29uZmlndXJlZCAKLWNvcnJlY3RseSAoYXQgbGVhc3QgZm9yIHRoZSB3ZWIueG1sIGZpbGUpLgotPC9MST4KLTwvVUw+Ci08L1A+Ci08UD48Qj5DcmVhdGUgYW4gWE1MIEZpbGUgZnJvbSBhIG5ldyBEVEQgY2F0YWxvZyBlbnRyeTwvQj48QlI+PElNRyBib3JkZXI9IjAiIGhlaWdodD0iNjMiIHNyYz0idTAxMWFuaS5naWYiIHdpZHRoPSI2MyI+PC9QPgotCi08Yj5UaGUgZm9sbG93aW5nIGNvbWVzIGRpcmVjdGx5IGZyb20gdGhlICdEZXNpZ24nIFNtb2tlIFRlc3Q6IFhNTCBDYXRhbG9nIGZvciBYTUwgU2NoZW1hPC9iPgotPHVsPgotPGxpPgotUnVuIFZhbGlkYXRlIG9uIFB1cmNoYXNlT3JkZXIueG1sIHRvIG1ha2Ugc3VyZSBpdCBpcyB2YWxpZDwvbGk+Ci0KLTxsaT4KLUNyZWF0ZSBhIG5ldyBwcm9qZWN0LCBYTUxUZXN0MjwvbGk+Ci0KLTxsaT4KLU1vdmUgdGhlIFB1cmNoYXNlT3JkZXIueHNkIGludG8gWE1MVGVzdDIuPC9saT4KLQotPGxpPgotUnVuIFZhbGlkYXRlIG9uIFB1cmNoYXNlT3JkZXIueG1sLiBZb3Ugd2lsbCBub3RpY2UgdGhhdCBpdCBpcyBubyBsb25nZXIKLXZhbGlkLiBUaGUgZXJyb3IgbWVzc2FnZSBzaG91bGQgZ2l2ZSB5b3UgYSBoaW50IHRoYXQgdGhlIGZpbGUgUHVyY2hhc2VPcmRlci54c2QKLWNhbiBubyBsb25nZXIgYmUgZm91bmQuPC9saT4KLQotPGxpPgotT3BlbiB0aGUgV2luZG93LT5QcmVmZXJlbmNlcyBhbmQgc2VsZWN0IHRoZSBYTUwgQ2F0YWxvZy48L2xpPgotCi08bGk+Ci1FbnRlciB0aGUgcGFpciA8Yj5JZCA9IFB1cmNoYXNlT3JkZXIueHNkIFVyaSA9IGY6XGVjbGlwc2VcWE1MVGVzdDJcUHVyY2hhc2VPcmRlci54c2Q8L2I+PC9saT4KLQotPGJyPk9yIGFsdGVybmF0aXZlbHksIHlvdSBjYW4gdXNlIGEgcmVsYXRpdmUgcGF0aCB0byB0aGUgaW5zdGFsbCBkaXJlY3RvcnkKLW9mIHRoZSB3b3JrYmVuY2ggYXMgZm9sbG93czoKLTxicj48Yj5JZCA9IFB1cmNoYXNlT3JkZXIueHNkIFVyaSA9IC5cWE1MVGVzdDJcUHVyY2hhc2VPcmRlci54c2Q8L2I+Ci08bGk+Ci1DbGljayBvbiB0aGUgUmVsb2FkIGJ1dHRvbiB0byByZWxvYWQgdGhlIGNhdGFsb2cgc2V0dGluZ3MuPC9saT4KLQotPGxpPgotUnVuIFZhbGlkYXRlLiBUaGUgUHVyY2hhc2VPcmRlci54bWwgZG9jdW1lbnQgc2hvdWxkIG5vdyBiZSB2YWxpZC48L2xpPgotPC91bD4KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgICAgICAgICAgICAgICAgICBTYXZlL1ZhbGlkYXRlIHRlc3QgY2FzZXMKLSAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tPgotPEgyPjxGT05UIGNvbG9yPSIjMDAwMGZmIj5TYXZlL1ZhbGlkYXRlIHRlc3QgY2FzZXM8L0ZPTlQ+PC9IMj4KLTxQPjxCPlNhdmluZyBhbiBYTUwgRmlsZTwvQj48QlI+Ci0oTk9URTogdGhlIDxCPklkZW50aWZ5IGEgbG9jYWwgRFREPC9CPiB0ZXN0IGNhc2UgdGVzdHMgdGhlIHNhdmUgcHJvbXB0IG9uIGEgZmlsZSBjbG9zZS4pPC9QPgotPFVMPgotICA8TEk+SWYgYW55IGZpbGVzIGFyZSBvcGVuLCBzZWxlY3QgPEI+RmlsZS0mZ3Q7Q2xvc2UgQWxsPC9CPiAob3IgPEI+Q3RybCtTaGlmdCtGNDwvQj4pIHRvIGNsb3NlIHRoZW0uPC9MST4KLSAgPExJPk9wZW4gYW55IHhtbCBmaWxlIGluIHRoZSA8Qj5YTUxUZXN0MjwvQj4gcHJvamVjdC48L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBmb2xsb3dpbmcgKG5vLWNoYW5nZXMtbWFkZSBjb25kaXRpb24pOgotICA8VUw+Ci0gICAgPExJPjxCPkZpbGUtJmd0O1NhdmU8L0I+IGlzIGRpc2FibGVkLjwvTEk+Ci0gICAgPExJPjxCPkZpbGUtJmd0O1NhdmUgQWxsPC9CPiBpcyBkaXNhYmxlZC48L0xJPgotICAgIDxMST48Qj5GaWxlLSZndDtTYXZlIEFzPC9CPiBpcyBlbmFibGVkLjwvTEk+Ci0gICAgPExJPnRoZSA8Qj5TYXZlPC9CPiB0b29sYmFyIGJ1dHRvbiAoYSBkaXNrZXR0ZSkgaXMgZGlzYWJsZWQuPC9MST4KLSAgICA8TEk+dGhlIDxCPlNhdmUgQXM8L0I+IHRvb2xiYXIgYnV0dG9uIGlzIGVuYWJsZWQuPC9MST4KLSAgICA8TEk+PEI+U2F2ZTwvQj4gaXMgZGlzYWJsZWQgb24gdGhlIFNvdXJjZSBwb3B1cCBtZW51LiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+V291bGQgYmUgbmljZSBpZiB0aGUgRGVzaWduIHBvcHVwIG1lbnUgYWxzbyBoYWQgYSBTYXZlIHNlbGVjdGlvbi4gT3BlbiBhIHN1Z2dlc3Rpb24gZGVmZWN0LjwvRk9OVD48L0xJPgotICAgIDxMST5ubyA8Qj4qPC9CPiBhcHBlYXJzIGluIHRoZSBmaWxlIHRhYi48L0xJPgotICA8L1VMPjwvTEk+Ci0gIDxMST5NYWtlIGEgY2hhbmdlIGluIHRoZSBTb3VyY2UgcGFnZS48L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBmb2xsb3dpbmcgKGNoYW5nZXMtbWFkZSBjb25kaXRpb24pOgotICA8VUw+Ci0gICAgPExJPjxCPkZpbGUtJmd0O1NhdmU8L0I+IGlzIGVuYWJsZWQuPC9MST4KLSAgICA8TEk+PEI+RmlsZS0mZ3Q7U2F2ZSBBbGw8L0I+IGlzIGVuYWJsZWQ8L0xJPgotICAgIDxMST50aGUgPEI+U2F2ZTwvQj4gdG9vbGJhciBidXR0b24gKGEgZGlza2V0dGUpIGlzIGVuYWJsZWQuPC9MST4KLSAgICA8TEk+PEI+U2F2ZTwvQj4gaXMgZW5hYmxlZCBvbiB0aGUgU291cmNlIHBvcHVwIG1lbnUuPC9MST4KLSAgICA8TEk+YSA8Qj4qPC9CPiBhcHBlYXJzIGluIHRoZSBmaWxlIHRhYi48L0xJPgotICA8L1VMPjwvTEk+Ci0gIDxMST5IaXQgPEI+Q3RybCtTPC9CPi4gPC9MST4KLSAgPExJPlZlcmlmeSB0aGUgbm8tY2hhbmdlcy1tYWRlIGNvbmRpdGlvbnMgYXBwbHkuPC9MST4KLSAgPExJPk1ha2UgYSBjaGFuZ2UgaW4gdGhlIERlc2lnbiBwYWdlLjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIGNoYW5nZXMtbWFkZSBjb25kaXRpb25zIGFwcGx5LjwvTEk+Ci0gIDxMST5GaWxlLSZndDtTYXZlIEFsbDxCPjwvQj4uPC9MST4KLSAgPExJPlZlcmlmeSB0aGUgbm8tY2hhbmdlcy1tYWRlIGNvbmRpdGlvbnMgYXBwbHkuPC9MST4KLSAgPExJPk1ha2UgYSBjaGFuZ2UgaW4gdGhlIFByb3BlcnRpZXMgdmlldy48L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBjaGFuZ2VzLW1hZGUgY29uZGl0aW9ucyBhcHBseS48L0xJPgotICA8TEk+U2VsZWN0IDxCPlNhdmU8L0I+IGZyb20gdGhlIFNvdXJjZSBwb3B1cCBtZW51LjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIG5vLWNoYW5nZXMtbWFkZSBjb25kaXRpb25zIGFwcGx5LjwvTEk+Ci0gIDxMST5DbG9zZSBhbmQgdGhlbiByZW9wZW4gdGhlIGZpbGUuPC9MST4KLSAgPExJPlZlcmlmeSB0aGUgY2hhbmdlcyB0aGF0IHdlcmUgbWFkZSBpbiB0aGUgcHJldmlvdXMgc3RlcHMgYXBwZWFyIGluIHRoZSBEZXNpZ24gYW5kIFNvdXJjZSBwYWdlcy48L0xJPgotPC9VTD4KLTxQPjxCPlNhdmluZyBhbiBYTUwgRmlsZSBhY3Jvc3MgbXVsdGlwbGUgcGVyc3BlY3RpdmVzIChvcHRpb25hbCk8L0I+PC9QPgotPFVMPgotICA8TEk+T3BlbiBhbnkgeG1sIGZpbGUgaW4gdGhlIDxCPlhNTFRlc3QyPC9CPiBwcm9qZWN0LjwvTEk+Ci0gIDxMST5NYWtlIGEgY2hhbmdlIHRvIHRoZSBmaWxlLjwvTEk+Ci0gIDxMST5PcGVuIGFub3RoZXIgWE1MIFBlcnNwZWN0aXZlIGJ5OgotICA8VUw+Ci0gICAgPExJPjxCPnNlbGVjdGluZyBQZXJzcGVjdGl2ZS0mZ3Q7T3Blbi0mZ3Q7T3RoZXIuLi48L0I+PC9MST4KLSAgICA8TEk+d2hpbGUgaG9sZGluZyBkb3duIHRoZSA8Qj5TaGlmdDwvQj4ga2V5LCBzZWxlY3QgPEI+WE1MPC9CPi48L0xJPgotICA8L1VMPjwvTEk+Ci0gIDxMST5WZXJpZnkgYW5vdGhlciBYTUwgUGVyc3BlY3RpdmUgYnV0dG9uIGFwcGVhcnMgaW4gdGhlIGxlZnRoYW5kIHNpZGUgb2YgdGhlIFdvcmtiZW5jaCB0byByZXByZXNlbnQgdGhpcyBzZWNvbmQgcGVyc3BlY3RpdmUuPC9MST4KLSAgPExJPk9wZW4gdGhlIHNhbWUgeG1sIGZpbGUgYXMgaW4gdGhlIGZpcnN0IHN0ZXAgYWJvdmUuPC9MST4KLSAgPExJPlZlcmlmeSB0aGUgY2hhbmdlcy1tYWRlIGNvbmRpdGlvbnMgYXBwbHkgaW4gYm90aCBYTUwgUGVyc3BlY3RpdmVzIGFuZCB2ZXJpZnkgdGhhdCB0aGUgY2hhbmdlcyBtYWRlIHRvIHRoZSBmaWxlIGluIHRoZSBmaXJzdCBwZXJzcGVjdGl2ZSBhcHBlYXIgaW4gdGhlIHNhbWUgZmlsZSBpbiB0aGUgc2Vjb25kIHBlcnNwZWN0aXZlLiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+VGhlICogbmV2ZXIgYXBwZWFycyBpbiB0aGUgZmlsZSB0YWIgb2YgdGhlIHNlY29uZCBwZXJzcGVjdGl2ZSBldmVuIHdoZW4gbWFrZSBjaGFuZ2VzIHRvIHRoZSBmaWxlIGluIHRoZSBzZWNvbmQgcGVyc3BlY3RpdmUuIFRhbGsgdG8gRGF2aWQuPC9GT05UPjwvTEk+Ci0gIDxMST5NYWtlIHNvbWUgY2hhbmdlcyB0byB0aGUgZmlsZSBpbiB0aGUgc2Vjb25kIHBlcnNwZWN0aXZlLjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlc2UgY2hhbmdlcyBhcHBlYXIgaW4gdGhlIHNhbWUgZmlsZSBpbiB0aGUgZmlyc3QgcGVyc3BlY3RpdmUuPC9MST4KLSAgPExJPkNsb3NlIHRoZSBmaWxlIGluIHRoZSBzZWNvbmQgcGVyc3BlY3RpdmUgYW5kIHJlc3BvbmQgPEI+WWVzPC9CPiB0byB0aGUgc2F2ZSBjaGFuZ2VzIHByb21wdC48L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBuby1jaGFuZ2VzLW1hZGUgY29uZGl0aW9uIGFwcGxpZXMgaW4gdGhlIGZpcnN0IHBlcnNwZWN0aXZlLjwvTEk+Ci08L1VMPgotPFA+PEI+VmFsaWRhdGluZyBhIG5vbiB3ZWxsIGZvcm1lZCBYTUwgRmlsZSAobm8gRFREL1NjaGVtYSk8L0I+PEJSPgotKE5PVEU6IGl0J3MgaW1wb3J0YW50IHRoYXQgdGhlIGZvbGxvd2luZyBiZSB0eXBlZCBpbi4gVGhpcyB0ZXN0IGNhc2UgdHJpZXMgdG8gY292ZXIgc29tZSBvZiB0aGUgbW9yZSBjb21tb24gZXJyb3JzIHRoYXQgcmVuZGVyIGFuIFhNTCBmaWxlIGFzIG5vdCBiZWluZyB3ZWxsLWZvcm1lZC4gSXQgaXMgbm90IGludGVuZGVkIHRvIHZlcmlmeSB0aGF0IGFsbCBwb3NzaWJsZSBlcnJvcnMgYXJlIGJlaW5nIGRldGVjdGVkIGFuZCBncmFjZWZ1bGx5IGhhbmRsZWQuICk8L1A+Ci08VUw+Ci0gIDxMST5TZWxlY3QgdGhlIDxCPkNyZWF0ZSBhIG5ldyBYTUwgZmlsZTwvQj4gdG9vbGJhciBidXR0b24uPC9MST48TEk+QWNjZXB0IHRoZSBkZWZhdWx0IHRvIDxCPkNyZWF0ZSBhIG5ldyBYTUwgZmlsZTwvQj48L0xJPgotICA8TEk+R28gdG8gdGhlIE5leHQgcGFnZQotICAgIDxVTD4KLSAgICAgICAgPExJPlNlbGVjdCA8Qj5YTUxUZXN0MjwvQj4gYXMgdGhlIGZvbGRlcjwvTEk+Ci0gICAgICAgIDxMST5TcGVjaWZ5IGEgRmlsZSBuYW1lIG9mIDxCPk5vbldlbGxGb3JtZWQ8L0I+PC9MST4KLSAgICAgICAgPExJPlNlbGVjdCA8Qj5GaW5pc2g8L0I+PC9MST4KLSAgPC9VTD48L0xJPgotICA8TEk+UHJvbXB0IGZvciBjb250ZW50IGFzc2lzdC48L0xJPgotICA8TEk+U2VsZWN0IDxCPiZsdDs/eG1sIHZlcnNpb249JnF1b3Q7MS4wJnF1b3Q7IGVuY29kaW5nPSZxdW90O1VURi04JnF1b3Q7PyZndDsuPC9CPjwvTEk+Ci0gIDxMST5DcmVhdGUgYSBuZXcgbGluZSBhZnRlciB0aGUgWE1MIGRlY2xhcmF0aW9uLjwvTEk+Ci0gIDxMST5Qcm9tcHQgZm9yIGNvbnRlbnQgYXNzaXN0LjwvTEk+Ci0gIDxMST5TZWxlY3QgY29tbWVudC48L0xJPgotICA8TEk+RW1iZWQgbW9yZSB0aGFuIDIgY29uc2VjdXRpdmUgZGFzaGVzIGluIHRoZSBjb21tZW50LiAKLSAgICAgICAgPEZPTlQgY29sb3I9IiMwMDAwZmYiPihOT1RFOiBtb3JlIHRoYW4gMiBjb25zZWN1dGl2ZSBkYXNoZXMgY2FuIG5vdCBiZSBlbWJlZGRlZCB3aXRoaW4gYSBjb21tZW50KTwvRk9OVD48L0xJPgotICA8TEk+VHlwZSBpbiB0aGUgcmVtYWluaW5nIGxpbmVzIGFzIHNob3duIGJlbG93OiAKLSAgICAgICAgPEZPTlQgY29sb3I9IiNmZjAwMDAiPihJIGNhbid0IHNob3cgdGhlIGxpbmVzIHVudGlsIGRlZmVjdCAxNzc3NTUgaXMgZml4ZWQgLi4uIHVudGlsIHRoZW4sIGhlcmUncyB0aGUgdHlwZSBvZiB0aGluZ3MgdGhhdCBjYXVzZSAKLSAgICAgICAgYSBkb2N1bWVudCB0byBub3QgYmUgd2VsbC1mb3JtZWQpOjwvRk9OVD4KLSAgPFVMPgotICAgIDxMST5jcmVhdGUgYSBzdGFydCBhbmQgZW5kIHRhZyB0aGF0IGRvbid0IG1hdGNoIGluIHRoZWlyIGNhc2Ugc2Vuc2l0aXZpdHkgCi0gICAgICAgIChlLmcuLCAmbHQ7dGFnJmd0OyBhbmQgJmx0Oy9UYWcmZ3Q7KS4gPC9MST4KLSAgICA8TEk+Y3JlYXRlIGEgc3RhcnQgYW5kIGVuZCB0YWcgd2hlcmUgdGhlIHN0YXJ0IHRhZyBjb250YWlucyBhbiBhdHRyaWJ1dGUgdmFsdWUgdGhhdCBpcyBub3QgCi0gICAgICAgIGVuY2xvc2VkIGluIHF1b3Rlcy4KLSAgICAgICAgPEZPTlQgY29sb3I9IiMwMDAwZmYiPihOT1RFOiB0aGlzIGlzIHBlcm1pdHRlZCBpbiBIVE1MLCBidXQgbm90IFhNTCk8L0ZPTlQ+PC9MST4KLSAgICA8TEk+Y3JlYXRlIHRhZ3MgdGhhdCBhcmUgbm90IHByb3Blcmx5IG5lc3RlZC4KLSAgICAgICAgPEZPTlQgY29sb3I9IiMwMDAwZmYiPihOT1RFOiBhIGNoaWxkIHRhZyBtdXN0IGJlIGNvbXBsZXRlZCBiZWZvcmUgaXRzIHBhcmVudCB0YWcpPC9GT05UPjwvTEk+Ci0gICAgPExJPmNyZWF0ZSBhIHN0YXJ0IHRhZyB3aXRob3V0IGEgY29ycmVzb25kaW5nIGVuZCB0YWcuCi0gICAgICAgIDxGT05UIGNvbG9yPSIjMDAwMGZmIj4oTk9URTogYWxsIHN0YXJ0IHRhZ3MgbXVzdCBoYXZlIGEgY29ycmVzcG9uZGluZyBlbmQgdGFnIHVubGVzcyB0aGUgCi0gICAgICAgIHRhZyBpcyBhbiBlbXB0eSB0YWcsIGluIHdoaWNoIGNhc2UgdGhlIHNob3J0aGFuZCB2ZXJzaW9uIGNhbiBiZSB1c2VkICgmbHQ7c2hvcnRUYWcvJmd0OykpLjwvRk9OVD48L0xJPgotICAgIDxMST5kbyBub3QgcHJvdmlkZSBhbiBhdHRyaWJ1dGUgdmFsdWUgKD0mcXVvdDt2YWx1ZSZxdW90OykuCi0gICAgICAgIDxGT05UIGNvbG9yPSIjMDAwMGZmIj4oTk9URTogdGhpcyBpcyBwZXJtaXR0ZWQgaW4gSFRNTCBmb3IgdGhvc2UgYXR0cmlidXRlcyB0aGF0IGhhdmUgCi0gICAgICAgIG9ubHkgb25lIHZhbHVlLCBidXQgaXQncyBub3QgdmFsaWQgaW4gWE1MKTwvRk9OVD48L0xJPgotICAgICA8TEk+ZGVmaW5lIGFuIGF0dHJpYnV0ZSBtb3JlIHRoYW4gb25jZSBpbiBhIHN0YXJ0IHRhZy48L0xJPgotICA8L1VMPjwvTEk+Ci0gIDxMST5TYXZlIHRoZSBmaWxlLjwvTEk+Ci0gIDxMST5WZXJpZnkgZXJyb3JzIGFyZSBsaXN0ZWQgaW4gdGhlIFRhc2tzIHZpZXcgZm9yIHRoZSBhYm92ZSB2aW9sYXRpb25zIGFuZCB0aGF0IGVycm9yIG1hcmtlcnMgYXBwZWFyIG9uIHRoZSBhcHByb3ByaWF0ZSAKLSAgICAgICAgIGxpbmVzIGluIHRoZSBTb3VyY2UgcGFnZS4gPEZPTlQgY29sb3I9IiNmZjAwMDAiPkknbSBub3Qgc3VyZSBob3cgdGhlIERlc2lnbiBwYWdlIGhhbmRsZXMgYW55IG9mIHRoZXNlIHZpb2xhdGlvbnMgCi0gICAgICAgICBhbmQgd2hhdCB3aWxsIGFwcGVhciBpbiB0aGUgT3V0bGluZSBhbmQgUHJvcGVydGllcyB2aWV3LiBUYWxrIHRvIENyYWlnIGFuZCBEYXZpZC48L0ZPTlQ+PC9MST4KLSAgPExJPlJlb3BlbiB0aGUgZmlsZSBhbmQgdmVyaWZ5IGV2ZXJ5dGhpbmcgd2FzIHNhdmVkLjwvTEk+Ci08L1VMPgotCi0KLTxQPjxCPlZhbGlkYXRlIGFuIFhNTCBGaWxlIGJhc2VkIG9uIGEgRFREPC9CPjwvUD4KLTxVTD4KLTxMST5PcGVuIDxCPmZyb21TY3JhdGNoLnhtbDwvQj4uPC9MST4KLTxMST5EZWxldGUgYSBjaGFyYWN0ZXIgZnJvbSBvbmUgb2YgdGhlIHN0YXJ0IHRhZ3MgKG1pc3R5cGluZyBhIHRhZyBpcyBub3QgdW5jb21tb24pLjwvTEk+Ci08TEk+UHJvbXB0IGZvciBjb250ZW50IGFzc2lzdCB3aXRoaW4gdGhlIGJhZCB0YWcuIFZlcmlmeSBhIG1lc3NhZ2UgYXBwZWFycyBpbiB0aGUgc3RhdHVzIGFyZWEKLW9mIHRoZSBXb3JrYmVuY2ggaW5kaWNhdGluZyB0aGF0IHRoZSBiYWQgdGFnIGlzIGFuIHVua25vd24gdGFnLjwvTEk+Ci08TEk+U2VsZWN0IHRoZSA8Qj5WYWxpZGF0ZTwvQj4gdG9vbGJhciBidXR0b24uPC9MST4KLTxMST5WZXJpZnkgYW4gZXJyb3IgYXBwZWFycyBpbiB0aGUgVGFza3MgdmlldyBhbmQgYW4gZXJyb3IgbWFya2VyIGFwcGVhcnMgaW4gdGhlIFNvdXJjZSBwYWdlCi10byBmbGFnIHRoZSBpbnZhbGlkIHRhZy48L0xJPgotPExJPlNlbGVjdCA8Qj5FZGl0LT5VbmRvPC9CPiBmcm9tIHRoZSBTb3VyY2UgcGFnZS48L0xJPgotPExJPlZlcmlmeSB0aGUgYmFkIHRhZyBlcnJvciBubyBsb25nZXIgYXBwZWFycyBpbiB0aGUgVGFza3Mgdmlldy48L0xJPgotPExJPlJlbW92ZSB0aGUgPEI+SGVhZGVyPC9CPiBlbmQgdGFnIGZyb20gdGhlIFNvdXJjZSBwYWdlLjwvTEk+Ci08TEk+U2F2ZSB0aGUgZmlsZS48L0xJPgotPExJPlZlcmlmeSBhbiBlcnJvciBhcHBlYXJzIGluIHRoZSBUYXNrcyB2aWV3IGluZGljYXRpbmcgdGhhdCB0aGUgPEI+SGVhZGVyPC9CPiBlbmQgdGFnIGlzIG1pc3Npbmc8L0xJPgotPExJPkNsb3NlIHRoZSBmaWxlLCByZXNwb25kaW5nIDxCPlllczwvQj4gdG8gdGhlIHNhdmUgY2hhbmdlcyBwcm9tcHQuPC9MST4KLTxMST5Eb3VibGUtY2xpY2sgb24gdGhlIGVycm9yIGluIHRoZSBUYXNrcyB2aWV3LCBhbmQgdmVyaWZ5IDxCPmZyb21TY3JhdGNoLnhtbDwvQj4gb3BlbnMgdG8gdGhlCi1hcHByb3ByaWF0ZSBsaW5lIGluIHRoZSBTb3VyY2UgcGFnZSBvZiB0aGUgWE1MIEVkaXRvci48L0xJPgotPExJPkhlcmUncyBzb21lIG90aGVyIHZpb2xhdGlvbnMgdGhhdCBjYW4gYmUgYXR0ZW1wdGVkOgotPFVMPgotPExJPlNwZWNpZnkgYSBiYWQgYXR0cmlidXRlLjwvTEk+Ci08TEk+U3BlY2lmeSBhIGJhZCBhdHRyaWJ1dGUgdmFsdWUuPC9MST4KLTxMST5TcGVjaWZ5IGNoaWxkIHRhZ3Mgb3V0IG9mIHNlcXVlbmNpbmcgb3JkZXI8L0xJPgotPExJPlZpb2xhdGUgdGhlIG9jY3VycmVuY2UgaW5kaWNhdG9yIGZvciBhIHRhZyAoZS5nLiwgaWYgdGhlIERURCBzaG93cyA/LCB0aGVuIG9ubHkKLTAgb3IgMSBvY2N1cnJlbmNlcyBvZiB0aGUgdGFnIGlzIHBlcm1pdHRlZCkuCi08L1VMPjwvTEk+Ci08TEk+U2F2ZSB0aGUgZmlsZS48L0xJPgotPExJPlZlcmlmeSBlcnJvcnMgYXJlIGxpc3RlZCBpbiB0aGUgVGFza3MgdmlldyBmb3IgdGhlIGFib3ZlIHZpb2xhdGlvbnMgYW5kIHRoYXQgZXJyb3IgbWFya2VycyBhcHBlYXIgb24gdGhlIGFwcHJvcHJpYXRlIAotbGluZXMgaW4gdGhlIFNvdXJjZSBwYWdlLiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+SSdtIG5vdCBzdXJlIGhvdyB0aGUgRGVzaWduIHBhZ2UgaGFuZGxlcyBhbnkgb2YgdGhlc2UgdmlvbGF0aW9ucyAKLWFuZCB3aGF0IHdpbGwgYXBwZWFyIGluIHRoZSBPdXRsaW5lIGFuZCBQcm9wZXJ0aWVzIHZpZXcuIFRhbGsgdG8gQ3JhaWcgYW5kIERhdmlkLjwvRk9OVD48L0xJPgotPExJPlJlb3BlbiB0aGUgZmlsZSBhbmQgdmVyaWZ5IGV2ZXJ5dGhpbmcgd2FzIHNhdmVkLjwvTEk+Ci08L1VMPgotCi08IS0tICByZW1vdmVkIHNpbmNlIGRvbmUgZWxzZXdoZXJlIGFzIHBhcnQgb2Ygb3RoZXIgc2NlbmVyaW9zCi08UD48Qj5WYWxpZGF0ZSBhbiBYTUwgRmlsZSBiYXNlZCBvbiBhIFNjaGVtYTwvQj48QlI+Ci0tLT4KLTxJTUcgYm9yZGVyPSIwIiBoZWlnaHQ9IjYzIiBzcmM9InUwMTFhbmkuZ2lmIiB3aWR0aD0iNjMiPjwvUD4KLQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlIFNwZWNpZmljIHRlc3QgY2FzZXMKLSAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tPgotPEgyPjxCPjxGT05UIGNvbG9yPSIjMDAwMGZmIj5Tb3VyY2UgU3BlY2lmaWMgdGVzdCBjYXNlcyAob3B0aW9uYWwpPC9GT05UPjwvQj48L0gyPgotPFA+PEI+VXNpbmcgdGhlIEF1dG8gQ29tcGxldGlvbiBDb250ZW50IEFzc2lzdCBQcmVmZXJlbmNlPC9CPjxCUj4KLTxVTD4KLTxMST5PcGVuIGEgYW55IFhNTCBmaWxlIHRoYXQgaGFzIGVub3VnaCB0YWdzIHRvIHByb3ZpZGUgc3ludGF4IGhpZ2h0bGlnaHRpbmcuPC9MST4KLTxMST5XaGlsZSB0aGF0IGZpbGUgaXMgbGVmdCBvcGVuLCBnbyB0byB0aGUgUHJlZmVyZW5jZXMgcGFnZSwgc2VsZWN0Ci1YTUwgRWRpdG9yLCB0aGVuIFNvdXJjZSBTdHlsZXMuIDwvTEk+Ci08TEk+T24gdGhhdCBwYWdlLCB1c2UgdGhlIG1vdXNlIHRvICJzZWxlY3QiIGEgdGFnIG5hbWUuIFRoZSB0YWcgbmFtZSBpcyBub3QgbGl0ZXJhbGx5Ci1zZWxlY3RlZCwgYnV0IHdoZW4geW91IGNsaWNrIG9uIGFuIGVsZW1lbnQgaW4gdGhlIGV4YW1wbGUgdGV4dCwgdGhlIGxpc3QKLWFib3ZlIGl0IHdpbGwgZGlzcGxheSB0aGUgdHlwZSBvZiBlbGVtZW50IGl0IGlzLCBhbmQgd2hhdCBpdHMgY3VycmVudCBjb2xvcnMgYXJlLjwvTEk+Ci08TEk+Rm9yICJ0YWcgbmFtZSIsIHNlbGVjdCB0aGUgYm9sZCBjaGVjayBib3guIFRoZW4gcHJlc3MgQXBwbHksIGFuZCB5b3Ugc2hvdWxkCi1zZWUgdGhlIGNoYW5nZSB0YWtlIGVmZmVjdCBpbiB5b3VyIGFjdGl2ZSBlZGl0b3IuPC9MST4KLTxMST5TZWxlY3QgIkRlZmF1bHRzIiBhbmQgbWFrZSBzdXJlIHRoZSB0YWcgbmFtZXMgYXJlIHNldCBiYWNrIHRvIG5vdCBib2xkLjwvTEk+Ci08L1VMPgotPElNRyBib3JkZXI9IjAiIGhlaWdodD0iNjMiIHNyYz0idTAxMWFuaS5naWYiIHdpZHRoPSI2MyI+PC9QPgotPFA+PEI+RG91YmxlLUNsaWNraW5nIFdpdGhpbiB0aGUgU291cmNlPC9CPiA8QlI+Ci0oTk9URTogaWYgeW91IGNvbnRpbnVlIHRvIGRvdWJsZS1jbGljayBhdCBhIGdpdmVuIGN1cnNvciBwb3NpdGlvbiwgdGhlIHNlbGVjdGlvbiBhcmVhIHdpbGwgY29udGludWUgdG8gZXhwYW5kLiBXaGVuIHRoZSBtYXhpbXVtIHJlZ2lvbiBhcmVhIGhhcyBiZWVuIHJlYWNoZWQsIHRoZSBuZXh0IGRvdWJsZS1jbGljayB3aWxsIGNhdXNlIHRoZSBvcmlnaW5hbCBzZWxlY3Rpb24uIFNvLCB0aGUgc2VsZWN0aW9ucyB3aWxsIHdyYXAvY3ljbGUuIDxGT05UIGNvbG9yPSIjMDAwMGZmIj5Db29sITwvRk9OVD4pLjwvUD4KLTxVTD4KLSAgPExJPk9wZW4gPEI+Sm9iRGVzYy54bWw8L0I+LjwvTEk+Ci0gIDxMST5Eb3VibGUtY2xpY2tpbmcgd2l0aGluIHRhZyBjb250ZW50OgotICA8VUw+Ci0gICAgPExJPkRvdWJsZS1jbGljayB3aXRoaW4gPEI+TWlkZGxld2FyZTwvQj4gb24gbGluZSA3LjwvTEk+Ci0gICAgPExJPlZlcmlmeSA8Qj5NaWRkbGV3YXJlPC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgU291cmNlIGFuZCBEZXNpZ24gcGFnZXMgYW5kIDxCPkJ1c1R5cGU8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBPdXRsaW5lIHZpZXcuIDxGT05UIGNvbG9yPSIjZmYwMDAwIj5Ob3Qgc3VyZSB3aGF0IHRoZSBQcm9wZXJ0aWVzIHZpZXcgaXMgc3VwcG9zZWQgdG8gc2hvdy4gSXQgZ29lcyBibGFuay4gU2VlIGRlZmVjdCAxNzc3NTMuIEFsc28sIDxCPk1pZGRsZXdhcmU8L0I+IHdhc24ndCBzZWxlY3RlZCBpbiB0aGUgRGVzaWduIHBhZ2UgYXMgaGFkIGV4cGVjdGVkLiBUaGUgRGVzaWduIHBhZ2Ugb25seSBzZWVtcyB0byBzdGF5IGluIHN5bmMgYXQgdGhlIGVsZW1lbnQvdGFnIGxldmVsIGxpa2UgdGhlIE91dGxpbmUgdmlldy4gVGFsayB0byBDcmFpZyBhYm91dCB0aGlzLjwvRk9OVD48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2sgYWdhaW4gYXQgdGhlIHNhbWUgY3Vyc29yIHBvc2l0aW9uLjwvTEk+Ci0gICAgPExJPlZlcmlmeSA8Qj5BcHBsaWNhdGlvbiBhbmQgTWlkZGxld2FyZSBTb2Z0d2FyZTwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIFNvdXJjZSBhbmQgRGVzaWduIHBhZ2VzIGFuZCA8Qj5CdXNUeXBlPC9CPiByZW1haW5zIHRvIGJlIHRoZSBvbmx5IHRoaW5nIHNlbGVjdGVkIGluIHRoZSBPdXRsaW5lIHZpZXcuPC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNraW5nIGFnYWluIHdpbGwgY2F1c2UgY3ljbGluZyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzZWxlY3Rpb24uPC9MST4KLSAgPC9VTD48L0xJPgotICA8TEk+RG91YmxlLWNsaWNraW5nIHdpdGhpbiBhIHRhZyBuYW1lOgotICA8VUw+Ci0gICAgPExJPkRvdWJsZS1jbGljayB3aXRoaW4gPEI+SG93VG9BcHBseTwvQj4gb24gbGluZSA2MS48L0xJPgotICAgIDxMST5WZXJpZnkgPEI+SG93VG9BcHBseTwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIFNvdXJjZSBwYWdlLCBEZXNpZ24gcGFnZSwgYW5kIE91dGxpbmUgdmlldy4gCi0gICAgICAgIDxCPmNsYXNzPC9CPiwgPEI+ZGlzdHJpYnV0ZTwvQj4sIDxCPmlkPC9CPiwgYW5kIDxCPm5hbWU8L0I+IHNob3VsZCBhcHBlYXIgaW4gdGhlIAotICAgICAgICBQcm9wZXJ0aWVzIHZpZXcuIE9ubHkgPEI+ZGlzdHJpYnV0ZTwvQj4gc2hvdWxkIHNob3cgYSB2YWx1ZS48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2sgYWdhaW4gYXQgdGhlIHNhbWUgY3Vyc29yIHBvc2l0aW9uLjwvTEk+Ci0gICAgPExJPlZlcmlmeSB0aGUgd2hvbGUgPEI+SG93VG9BcHBseTwvQj4gc3RhcnQgdGFnIChpbmNsdWRpbmcgaXRzIGRlbGltaXRlcnMpIGlzIHNlbGVjdGVkIAotICAgICAgICBpbiB0aGUgU291cmNlIHBhZ2UuIDxCPkhvd1RvQXBwbHk8L0I+IHNob3VsZCByZW1haW4gc2VsZWN0ZWQgaW4KLSAgICAgICAgdGhlIERlc2lnbiBwYWdlIGFuZCBPdXRsaW5lIHZpZXcuIDxCPjxGT05UIGNvbG9yPSIjZmYwMDAwIj5Ib3dUb0FwcGx5PC9GT05UPjwvQj48Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+IGFuZCBhbGwgZGVzY2VuZGVudHMgYmVjb21lIHNlbGVjdGVkIGluIHRoZSBPdXRsaW5lIHZpZXcgKGRlZmVjdCAxNzc3NTIpLiBBbHNvLCB0aGUgUHJvcGVydGllcyB2aWV3IHNob3dzIG5vIHByb3BlcnRpZXMgKGRlZmVjdCAxNzc3NTMpLjwvRk9OVD48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2tpbmcgYWdhaW4gd2lsbCBjYXVzZSBjeWNsaW5nIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNlbGVjdGlvbi48L0xJPgotICA8L1VMPjwvTEk+Ci0gIDxMST5Eb3VibGUtY2xpY2tpbmcgd2l0aGluIGFuIGF0dHJpYnV0ZSBuYW1lOgotICA8VUw+Ci0gICAgPExJPlR5cGUgPEI+Q3RybCtFbmQ8L0I+IHRvIHBvc2l0aW9uIHRoZSBjdXJzb3IgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZS48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2sgd2l0aGluIDxCPmRpc3RyaWJ1dGU8L0I+IG9uIGxpbmUgNjEuIFZlcmlmeSA8Qj5kaXN0cmlidXRlPC9CPiBpcyBzZWxlY3RlZCAKLSAgICAgICAgaW4gdGhlIFNvdXJjZSBwYWdlIGFuZCA8Qj5Ib3dUb0FwcGx5PC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgRGVzaWduIHBhZ2UgYW5kIE91dGxpbmUgCi0gICAgICAgIHZpZXcuIDxCPmNsYXNzPC9CPiwgPEI+ZGlzdHJpYnV0ZTwvQj4sIDxCPmlkPC9CPiwgYW5kIDxCPm5hbWU8L0I+IHNob3VsZCBhcHBlYXIgaW4gCi0gICAgICAgIHRoZSBQcm9wZXJ0aWVzIHZpZXcuIE9ubHkgPEI+ZGlzdHJpYnV0ZTwvQj4gc2hvdWxkIHNob3cgYSB2YWx1ZS48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2sgYXQgdGhlIHNhbWUgY3Vyc29yIHBvc2l0aW9uLiBWZXJpZnkgPEI+ZGlzdHJpYnV0ZT0iaW50ZXJuYWwiPC9CPiBpcwotICAgICAgICBzZWxlY3RlZCBpbiB0aGUgU291cmNlLiBOb3RoaW5nIHNob3VsZCBjaGFuZ2UgaW4gdGhlIERlc2lnbiBwYWdlIG9yIHZpZXdzLjwvTEk+ICAgICAgICAgICAgICAgICAKLSAgICA8TEk+RG91YmxlLWNsaWNrIGF0IHRoZSBzYW1lIGN1cnNvciBwb3NpdGlvbi4gVmVyaWZ5IHRoZSB3aG9sZSA8Qj5Ib3dUb0FwcGx5PC9CPiBzdGFydCB0YWcgaXMgc2VsZWN0ZWQgaW4gdGhlIFNvdXJjZSBwYWdlIChpbmNsdWRpbmcgaXRzIGRlbGltaXRlcnMpLiBOb3RoaW5nIHNob3VsZCBjaGFuZ2UgaW4gdGhlIERlc2lnbiBwYWdlIG9yIHZpZXdzLjxCPjxGT05UIGNvbG9yPSIjZmYwMDAwIj5Ib3dUb0FwcGx5PC9GT05UPjwvQj48Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+IGFuZCBhbGwgZGVzY2VuZGVudHMgYmVjb21lIHNlbGVjdGVkIGluIHRoZSBPdXRsaW5lIHZpZXcgKGRlZmVjdCAxNzc3NTIpLiBBbHNvLCB0aGUgUHJvcGVydGllcyB2aWV3IHNob3dzIG5vIHByb3BlcnRpZXMgKGRlZmVjdCAxNzc3NTMpLjwvRk9OVD48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2tpbmcgYWdhaW4gd2lsbCBjYXVzZSBjeWNsaW5nIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNlbGVjdGlvbi48L0xJPgotICA8L1VMPjwvTEk+Ci0gPExJPkRvdWJsZS1jbGlja2luZyB3aXRoaW4gYW4gYXR0cmlidXRlIHZhbHVlOgotICA8VUw+Ci0gICAgPExJPlR5cGUgPEI+Q3RybCtIb21lPC9CPiB0byBwb3NpdGlvbiB0aGUgY3Vyc29yIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUuPC9MST4KLSAgICA8TEk+U2Nyb2xsIGRvd24gc3VjaCB0aGF0IGxpbmUgNjEgaXMgdmlzaWJsZS48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2sgd2l0aGluIDxCPmludGVybmFsPC9CPiBvbiBsaW5lIDYxLiBWZXJpZnkgPEI+aW50ZXJuYWw8L0I+IGlzIHNlbGVjdGVkIAotICAgICAgICBpbiB0aGUgU291cmNlIHBhZ2UgYW5kIDxCPkhvd1RvQXBwbHk8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBEZXNpZ24gcGFnZSBhbmQgT3V0bGluZSAKLSAgICAgICAgdmlldy4gPEI+Y2xhc3M8L0I+LCA8Qj5kaXN0cmlidXRlPC9CPiwgPEI+aWQ8L0I+LCBhbmQgPEI+bmFtZTwvQj4gc2hvdWxkIGFwcGVhciBpbiAKLSAgICAgICAgdGhlIFByb3BlcnRpZXMgdmlldy4gT25seSA8Qj5kaXN0cmlidXRlPC9CPiBzaG91bGQgc2hvdyBhIHZhbHVlLjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGljayBhdCB0aGUgc2FtZSBjdXJzb3IgcG9zaXRpb24uIFZlcmlmeSA8Qj4iaW50ZXJuYWwiPC9CPiBpcwotICAgICAgICBzZWxlY3RlZCBpbiB0aGUgU291cmNlLiBOb3RoaW5nIHNob3VsZCBjaGFuZ2UgaW4gdGhlIERlc2lnbiBwYWdlIG9yIHZpZXdzLjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGljayBhdCB0aGUgc2FtZSBjdXJzb3IgcG9zaXRpb24uIFZlcmlmeSA8Qj5kaXN0cmlidXRlPSJpbnRlcm5hbCI8L0I+IGlzCi0gICAgICAgIHNlbGVjdGVkIGluIHRoZSBTb3VyY2UuIE5vdGhpbmcgc2hvdWxkIGNoYW5nZSBpbiB0aGUgRGVzaWduIHBhZ2Ugb3Igdmlld3MuPC9MST4gICAgICAgICAgICAgICAgIAotICAgIDxMST5Eb3VibGUtY2xpY2sgYXQgdGhlIHNhbWUgY3Vyc29yIHBvc2l0aW9uLiBWZXJpZnkgdGhlIHdob2xlIDxCPkhvd1RvQXBwbHk8L0I+IHN0YXJ0IHRhZyBpcyBzZWxlY3RlZCBpbiB0aGUgU291cmNlIHBhZ2UgKGluY2x1ZGluZyBpdHMgZGVsaW1pdGVycykuIE5vdGhpbmcgc2hvdWxkIGNoYW5nZSBpbiB0aGUgRGVzaWduIHBhZ2Ugb3Igdmlld3MuIDxCPjxGT05UIGNvbG9yPSIjZmYwMDAwIj5Ib3dUb0FwcGx5PC9GT05UPjwvQj48Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+IGFuZCBhbGwgZGVzY2VuZGVudHMgYmVjb21lIHNlbGVjdGVkIGluIHRoZSBPdXRsaW5lIHZpZXcgKGRlZmVjdCAxNzc3NTIpLiBBbHNvLCB0aGUgUHJvcGVydGllcyB2aWV3IHNob3dzIG5vIHByb3BlcnRpZXMgKGRlZmVjdCAxNzc3NTMpLjwvRk9OVD48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2tpbmcgYWdhaW4gd2lsbCBjYXVzZSBjeWNsaW5nIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNlbGVjdGlvbi48L0xJPgotICA8L1VMPjwvTEk+Ci08L1VMPgotCi08UD48Qj5Gb3JtYXR0aW5nIGEgRmlsZSBDcmVhdGVkIGJ5IERpZmZlcmVudCBFZGl0b3JzPC9CPjxCUj4KLTx1bD4KLTxsaT4KLUltcG9ydCB0aGUgPGI+Sm9iUG9zdGluZy5kdGQ8L2I+IGFuZCA8Yj5Kb2JEZXNjLnhtbDwvYj48L2xpPgotCi08bGk+Ci1PcGVuIHRoZSBKb2JEZXNjLnhtbC4gQ2hlY2sgdGhlIHNvdXJjZSBmb3IgaW5kZW50YXRpb24gdG8gc2VlIGlmIGl0IHByZXNlcnZlcwotdGhlIHdoaXRlIHNwYWNlIGZyb20gdGhlIG9yaWdpbmFsIGRvY3VtZW50LjwvbGk+Ci0KLTxsaT4KLVRoZSBvcmlnbmFsIGRvY3VtZW50IHVzZXMgc3BhY2VzIGFuZCB0YWJzLCBzbyB0aGUgZm9ybWF0dGluZyB3aWxsIGFwcGVhciBhIGxpdHRsZSB3cm9uZy4KLUJ5IHVzaW5nIHRoZSByaWdodC9sZWZ0IGFycm93cywgdmVyaWZ5IHRoYXQgc29tZSBzcGFjZSBpcyBzcGFjZXMgYW5kIHNvbWUgc3BhY2UKLWlzIHRhYiBjaGFyYWN0ZXJzLjwvbGk+Ci08TEk+VXNlICdmb3JtYXQgZG9jdW1lbnQnIHRvIGJlIHN1cmUgaXQgZm9ybWF0cy4gPC9MST4KLTxMST5UaGUgZGVmYXVsdCBpcyB0byBmb3JtYXQgd2l0aCBzcGFjZXMgLi4uIHZlcmlmeSBvbmx5IHNwYWNlcyByZW1haW4gaW4gZmlsZSwgbm90IHRhYiBjaGFyYWN0ZXMuIAotKEp1c3QgYSBsaXR0bGUgbW92ZW1lbnQgd2l0aCB0aGUgYXJyb3cga2V5cyBzaG91bGQgc3VmZmljZS48L0xJPgotPExJPkdvIHRvIHRoZSBwcmVmZXJlbmNlIHBhZ2UgdG8gY2hhbmdlIHRoZSBmb3JtYXQgc2V0dGluZ3MgZm9yIHRoZSBYTUwgRWRpdG9yCi10byB1c2UgdGhlIHRhYiBjaGFyYWN0ZXIgaW5zdGVhZCBvZiA0IHNwYWNlcy4gV2hpbGUgdGhlcmUsIHZlcmlmeSB0aGF0IHRoZSBkaWFsb2cKLXdpbGwgbm90IGFsbG93IG90aGVyIHZhbHVlcyB0byBiZSBpbnRlcmVkIGV4Y2VwdCAid2hpdGVzcGFjZSIgLi4uJ1x0J3MgYW5kIGJsYW5rcy4KLTwvTEk+Ci08TEk+Rm9ybWF0IHRoZSBkb2N1bWVudCBhZ2FpbiBhbmQgYmUgc3VyZSB0aGlzIHRpbWUgdGFiIGNoYXJhY3RlcnMgd2VyZSB1c2VkLjwvTEk+Ci08L3VsPgotPElNRyBib3JkZXI9IjAiIGhlaWdodD0iNjMiIHNyYz0idTAxMWFuaS5naWYiIHdpZHRoPSI2MyI+PC9QPgotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgICAgICAgICAgICAgICAgICAgICAgT3RoZXIgdGVzdCBjYXNlcwotICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0+Ci08SDI+PEI+PEZPTlQgY29sb3I9IiMwMDAwZmYiPk90aGVyIHRlc3QgY2FzZXM8L0ZPTlQ+PC9CPjwvSDI+Ci08UD48Qj5Bc3NvY2lhdGUgdGhlIFhNTCBFZGl0b3IgdG8gYSBuZXcgZmlsZSB0eXBlPC9CPjwvUD4KLTxVTD4KLSAgPExJPldpbmRvdy0mZ3Q7UHJlZmVyZW5jZXM8Qj48L0I+LjwvTEk+Ci0gIDxMST5FeHBhbmQgPEI+V29ya2JlbmNoPC9CPi48L0xJPgotICA8TEk+U2VsZWN0IDxCPkZpbGUgRWRpdG9yczwvQj4uPC9MST4KLSAgPExJPlNlbGVjdCB0aGUgPEI+QWRkPC9CPiBidXR0b24gdG8gYWRkIGEgbmV3IGZpbGUgdHlwZS48L0xJPgotICA8TEk+U3BlY2lmeSBhIGZpbGUgdHlwZSBvZiA8Qj4qLnNldDwvQj4gYW5kIHRoZW4gY2xvc2UgdGhlIEFkZCBkaWFsb2cuPC9MST4KLSAgPExJPlZlcmlmeSA8Qj4qLnNldDwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIGxpc3Qgb2YgZmlsZSB0eXBlcy48L0xJPgotICA8TEk+U2VsZWN0IHRoZSA8Qj5BZGQ8L0I+IGJ1dHRvbiB0byBhc3NvY2lhdGUgdGhlIFhNTCBFZGl0b3IgdG8gdGhlIG5ldyBmaWxlIHR5cGUuPC9MST4KLSAgPExJPlNlbGVjdCA8Qj5YTUwgRWRpdG9yPC9CPiBmcm9tIHRoZSBsaXN0IG9mIGVkaXRvcnMuIFZlcmlmeSBpdCBhcHBlYXJzIHdpdGggaXRzIG93biBzcGVjaWFsIGljb24uIENsb3NlIHRoZSBkaWFsb2cuIDxGT05UIGNvbG9yPSIjZmYwMDAwIj5OT1RFOiB3YWl0aW5nIHRvIGhlYXIgYmFjayBmcm9tIE9USSBvbiBob3cgY2FuIHByZXZlbnQgMiBYTUwgRWRpdG9yIGVudHJpZXMgZnJvbSBhcHBlYXJpbmcgaW4gdGhlIGxpc3QuPC9GT05UPjwvTEk+Ci0gIDxMST5WZXJpZnkgPEI+WE1MIEVkaXRvcjwvQj4gYXBwZWFycyBhcyB0aGUgZGVmYXVsdCBlZGl0b3Igbm93IGZvciB0aGUgPEI+Ki5zZXQ8L0I+IGZpbGUgdHlwZS48L0xJPgotICA8TEk+T3BlbiA8Qj5nb3RjaGFUQ0JlYW5zLnNldDwvQj4gZnJvbSB0aGUgTmF2aWdhdG9yIHZpZXcuIFZlcmlmeSBpdCBvcGVucyB0byB0aGUgWE1MIEVkaXRvci48L0xJPgotPC9VTD4KLTxQPjxGT05UIGNvbG9yPSIjMDAwMGZmIj5USEUgRU5EITwvRk9OVD48L1A+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9MYXJnZU5vbkRlZmF1bHQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL0xhcmdlTm9uRGVmYXVsdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYmNkZDE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL0xhcmdlTm9uRGVmYXVsdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjY1ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDL0RURC8gSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotCi08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Ci08bWV0YSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9Ik1vemlsbGEvNC43IFtlbl0gKFdpbk5UOyBVKSBbTmV0c2NhcGVdIj4KLTxNRVRBIGNvbnRlbnQ9InRleHQvY3NzIiBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiPgotPHRpdGxlPnNtb2tlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotPGgyPiBTbW9rZSBUZXN0IC0gWE1MIEVkaXRvcjwvaDI+Ci1MYXN0IHVwZGF0ZWQ6IEp1bmUgMjUsIDIwMDEKLTxQPlRoaXMgU21va2UgVGVzdCBwcmltYXJpbHkgZm9jdXNlcyBvbiB0aGUgUlRQIHBvcnRpb24gb2YgdGhlIFhNTCAKLUVkaXRpb3IsIHdoaWNoIGlzIHRoZSBTb3VyY2UgcGFnZSBvZiB0aGUgWE1MIEVkaXRvci4gSXQgYWxzbyBwZXJmb3JtcyAKLXNvbWUgaW50ZWdyYXRpb24gdGVzdGluZy4gRm9yIGV4YW1wbGUsIGl0IHRlc3RzIHN5bmNocm9uaXphdGlvbiBiZXR3ZWVuIAotdGhlIERlc2lnbiBhbmQgU291cmNlIHBhZ2VzIG9mIHRoZSBYTUwgRWRpdG9yLCBhcyB3ZWxsIGFzIHdpdGggdGhlIAotT3V0bGluZSBhbmQgUHJvcGVydGllcyB2aWV3cy4gSXQgYWxzbyB2ZXJpZmllcyB0aGF0IGZpbGVzIGNyZWF0ZWQgCi10aHJvdWdoIHRoZSBYTUwgRmlsZSB3aXphcmQgYW5kIHJlZmVyZW5jZXMgdG8gdGhlIFhNTCBDYXRhbG9nIGFyZSAKLXN1cHBvcnRlZCBhcyBleHBlY3RlZC48L1A+Ci08UD48Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+PEI+Tk9URTwvQj46IFhNTCBmaWxlcyBhcmUgY2FzZS1zZW5zaXRpdmUgc28gYmUgc3VyZSB0aGF0IHRoaW5ncyBhcHBlYXIgCi1leGFjdGx5IGFzIG5vdGVkLjwvRk9OVD48L1A+Ci0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFNldHVwCi0gICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLT4KLTxIMj48Rk9OVCBjb2xvcj0iIzAwMDBmZiI+U2V0dXA8L0ZPTlQ+PC9IMj4KLTxQPjxCPlN0YXJ0aW5nIENsZWFuPC9CPjwvUD4KLTx1bD4KLSAgICA8bGk+IERlbGV0ZSBhbnkgZXhpc3Rpbmcgd29ya2JlbmNoPC9saT4KLSAgICA8bGk+IFN0YXJ0IEVjbGlwc2U8L2xpPgotPC91bD4KLTxQPjxCPk9wZW4gYW4gWE1MIFBlcnNwZWN0aXZlPEJSPgotPC9CPjwvUD4KLTxVTD4KLSAgICA8TEk+U2VsZWN0IHRoZSA8Qj5PcGVuIFBlcnNwZWN0aXZlPC9CPiB0b29sYmFyIGJ1dHRvbiBpbiB0aGUgdXBwZXIgbGVmdDwvTEk+Ci0gICAgPExJPlNlbGVjdCA8Qj5PdGhlci4uLjwvQj48L0xJPgotICAgIDxMST5TZWxlY3QgPEI+WE1MPC9CPjwvTEk+Ci0gICAgPExJPlZlcmlmeSB0aGUgZm9sbG93aW5nIHZpZXdzIGFwcGVhciBpbiB0aGUgWE1MIHBlcnNwZWN0aXZlOiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+VGhlIGxvY2F0aW9uIG9mIHRoZSBPdXRsaW5lIGFuZCBOYXZpZ2F0b3Igdmlld3MgYXJlIHJldmVyc2VkIGZyb20gdGhlIFJlc291cmNlIGFuZCBXZWIgcGVyc3BlY3RpdmVzLiBEbyB3ZSB3YW50IHRvIHRyeSB0byBiZSBjb25zaXN0ZW50IGFjcm9zcyB0aGUgcGVyc3BlY3RpdmVzPyBBbHNvLCBJIG9wZW5lZCA8Qj5kZWZlY3Q8L0I+IDE3NzY2NCB0byBlbmFibGUgZWFzeSBhY2Nlc3MgdG8gdGhlIFByb3BlcnRpZXMgdmlldyBmcm9tIHdpdGhpbiB0aGUgWE1MIHBlcnNwZWN0aXZlLiBJZiB0aGlzIHZpZXcgaXNuJ3QgaW5jbHVkZWQgaW4gdGhlIFBlcnNwZWN0aXZlIGJlY2F1c2UgaXRzIHVzZSBpcyBsaW1pdGVkLCB0aGVuIHJlY29tbWVuZCB3ZSBhdCBsZWFzdCBwcm92aWRlIGEgU2hvdyBvciBIaWRlIFByb3BlcnRpZXMgVmlldyB0b29sYmFyIGJ1dHRvbiAoc2ltaWxhciB0byB0aGUgYnV0dG9ucyB0aGF0IFBhZ2UgRGVzaWduZXIgcHJvdmlkZXMpLjwvRk9OVD48L0xJPgotPC9VTD4KLTxQPjxCPlByb2plY3QgQ3JlYXRpb24gYW5kIEZpbGUgSW1wb3J0czxCUj4KLTwvQj48L1A+Ci08VUw+Ci0gICAgPExJPkNyZWF0ZSBhIFByb2plY3QsIDxCPlhNTFRlc3QyPC9CPiA8L0xJPgotICAgIDxMST5JbXBvcnQgdGhlIGZvbGxvd2luZyBmaWxlcyBpbnRvIHRoaXMgcHJvamVjdDoKLSAgICA8VUw+Ci0gICAgICAgIDxMST48Qj5QdXJjaGFzZU9yZGVyLnhzZDwvQj48L0xJPgotICAgICAgICA8TEk+PEI+SW52b2ljZS5kdGQ8L0I+PC9MST4KLSAgICA8TEk+PEI+Sm9iRGVzYy54bWw8L0I+PC9MST4KLSAgICA8TEk+PEI+V2lyZWxlc3MueG1sPC9CPjwvTEk+Ci0gICAgPExJPjxCPmdvdGNoYVRDQmVhbnMuc2V0PC9CPjwvTEk+Ci0gICAgPExJPjxCPkFUUy5kdGQ8L0I+PC9MST4KLSAgICA8TEk+PEZPTlQgY29sb3I9IiNmZjAwMDAiPmFueSBvdGhlcnM/PC9GT05UPjwvTEk+Ci0gICAgPC9VTD4KLSAgICA8L0xJPgotPC9VTD4KLQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgICAgICAgICAgICAgICBDcmVhdGUvT3Blbi9FZGl0IHRlc3QgY2FzZXMKLSAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tPgotPEgyPjxGT05UIGNvbG9yPSIjMDAwMGZmIj5DcmVhdGUvT3Blbi9FZGl0IHRlc3QgY2FzZXM8L0ZPTlQ+PC9IMj4KLTxQPjxCPkNyZWF0ZSBhbiBYTUwgRmlsZSBmcm9tIHNjcmF0Y2g8L0I+PC9QPgotPFVMPgotICAgIDxMST5TZWxlY3QgdGhlIDxCPkNyZWF0ZSBhIG5ldyBYTUwgZmlsZTwvQj4gdG9vbGJhciBidXR0b24uPC9MST4KLSAgICA8TEk+VmVyaWZ5IHRoZSBDcmVhdGUgYSBYTUwgRmlsZSB3aXphcmQgYXBwZWFycyBhbmQgdGhlIEZpbmlzaCBidXR0b24gaXMgZGlzYWJsZWQuIDxGT05UIGNvbG9yPSIjZmYwMDAwIj48Qj5ERUZFQ1Q6PC9CPiAxNzc2NjAgLSBYTUwgRmlsZSB3aXphcmQ6IGRpc2FibGUgRmluaXNoIGJ1dHRvbiBvbiB0aGUgZmlyc3QgcGFnZTwvRk9OVD4uPC9MST4KLSAgICA8TEk+QWNjZXB0IHRoZSBkZWZhdWx0IHRvIDxCPkNyZWF0ZSBhIG5ldyBYTUwgZmlsZTwvQj48L0xJPgotICAgIDxMST5HbyB0byB0aGUgTmV4dCBwYWdlCi0gICAgPFVMPgotICAgICAgICA8TEk+U2VsZWN0IDxCPlhNTFRlc3QyPC9CPiBhcyB0aGUgZm9sZGVyPC9MST4KLSAgICAgICAgPExJPlNwZWNpZnkgYSBGaWxlIG5hbWUgb2YgPEI+ZnJvbVNjcmF0Y2g8L0I+PC9MST4KLSAgICAgICAgPExJPlNlbGVjdCA8Qj5GaW5pc2g8L0I+PC9MST4KLSAgICA8L1VMPgotICAgIDwvTEk+Ci0gICAgPExJPlZlcmlmeSB0aGUgZm9sbG93aW5nOgotICAgIDxVTD4KLSAgICAgICAgPExJPmZyb21TY3JhdGNoLnhtbCBhcHBlYXJzIGluIHRoZSBOYXZpZ2F0b3Igdmlldy48L0xJPgotICAgICAgICA8TEk+ZnJvbVNjcmF0Y2gueG1sIGlzIG9wZW4gdG8gdGhlIERlc2lnbiBwYWdlIG9mIHRoZSBYTUwgRWRpdG9yIGFuZCBoYXMgZm9jdXMuPC9MST4KLSAgICAgICAgPExJPnRoZSBEZXNpZ24gdGFiIGFwcGVhcnMgYmVmb3JlIHRoZSBTb3VyY2UgdGFiIGluIHRoZSBYTUwgRWRpdG9yLjwvTEk+Ci0gICAgICAgIDxMST50aGUgRGVzaWduIGFuZCBTb3VyY2UgcGFnZSBzaG93IG5vIGNvbnRlbnQuPC9MST4KLSAgICAgICAgPExJPnRoZSBPdXRsaW5lIGFuZCBQcm9wZXJ0aWVzIHZpZXdzIHNob3cgbm90aGluZy48L0xJPgotICAgIDwvVUw+Ci0gICAgPC9MST4KLSAgICA8TEk+U3dpdGNoIHRvIHRoZSBTb3VyY2UgcGFnZS4gVmVyaWZ5IHRoZSBjdXJzb3IgYXBwZWFycyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlLjwvTEk+Ci0gICAgPExJPlJpZ2h0IG1vdXNlIGJ1dHRvbiAyIGFuZCB2ZXJpZnkgYSBwb3B1cCBtZW51IGFwcGVhcnMuPC9MST4KLSAgICA8TEk+SGl0IDxCPkN0cmwrU3BhY2U8L0I+LiBWZXJpZnkgdGhlIGNvbnRlbnQgYXNzaXN0IHByb3Bvc2FsIGxpc3QgYXBwZWFycy48L0xJPgotICAgIDxMST5TZWxlY3QgPEI+Jmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7VVRGLTgmcXVvdDs/Jmd0OzwvQj48L0xJPgotICAgIDxMST5WZXJpZnkgJmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7VVRGLTgmcXVvdDs/Jmd0OyBpcyBpbnNlcnRlZCBhbmQgYXBwZWFycyBzeW50YXggaGlnaGxpZ2h0ZWQgYW5kIGFuIGVudHJ5IGFwcGVhcnMgZm9yIGl0IGluIHRoZSBPdXRsaW5lIHZpZXcuPC9MST4KLSAgICA8TEk+UG9zaXRpb24gdGhlIGN1cnNvciB3aXRoaW4gdGhlIFhNTCBkZWNsYXJhdGlvbiBhbmQgdmVyaWZ5IDxCPnZlcnNpb248L0I+IGFuZCA8Qj5lbmNvZGluZzwvQj4gYXBwZWFyIGluIHRoZSBQcm9wZXJ0aWVzIHZpZXcuIDxGT05UIGNvbG9yPSIjZmYwMDAwIj5UaGlzIHVzZWQgdG8gd29yaywgYnV0IG5vdyBpdCdzIG5vdCB3b3JraW5nLiBPcGVuZWQgPEI+ZGVmZWN0PC9CPiAxNzc2NjIgLSBYTUwgZGVjbGFyYXRpb24gYXR0cmlidXRlcyBub3QgYXBwZWFyaW5nIGluIFByb3BlcnRpZXMgdmlldy4gSWYgd2UgZGVjaWRlIHRvIG5vdCB0cmVhdCB2ZXJzaW9uIGFuZCBlbmNvZGluZyBhcyBhdHRyaWJ1dGVzLCB0aGVuIHRoaXMgc3RlcCBzaG91bGQgYmUgcmVtb3ZlZC48L0ZPTlQ+PC9MST4KLSAgICA8TEk+Q29udGludWUgdG8gdGhlIG5leHQgc2VjdGlvbi48L0xJPgotPC9VTD4KLTxQPjxCPklkZW50aWZ5IGEgbG9jYWwgRFREICg8L0I+dmVyaWZpZXMgYSBEVEQgaXMgaW1tZWRpYXRlbHkgcmVjb2duaXplZDsgaW4gdGhlIHBhc3QsIHlvdSBoYWQgdG8gY2xvc2UgYW5kIHJlb3BlbiB0aGUgV29ya2JlbmNoPEI+KTwvQj48L1A+Ci08VUw+Ci0gICAgPExJPlR5cGUgdGhlIGZvbGxvd2luZyBhZnRlciB0aGUgWE1MIGRlY2xhcmF0aW9uIGluIDxCPmZyb21TY3JhdGNoLnhtbDwvQj46IDxCPiZsdDshRE9DVFlQRSBJbnZvaWNlIFNZU1RFTSAmcXVvdDtJbnZvaWNlLmR0ZCZxdW90OyZndDs8L0I+LiBUaGUgdGV4dCBzaG91bGQgYmUgc3ludGF4IGhpZ2hsaWdodGVkIGFzIHlvdSB0eXBlIGFuZCB5b3Ugc2hvdWxkIHNlZSBhbiBlbnRyeSBnZXQgYWRkZWQgdG8gdGhlIE91dGxpbmUgdmlldy48L0xJPgotICAgIDxMST5IaXQgPEI+RW50ZXI8L0I+IHRvIGNyZWF0ZSBhIG5ldyBsaW5lIGFmdGVyIHRoZSBET0NUWVBFIGRlY2xhcmF0aW9uLjwvTEk+Ci0gICAgPExJPkhpdCA8Qj5DdHJsK1NwYWNlPC9CPi5WZXJpZnkgb25seSA8Qj5JbnZvaWNlPC9CPiBhbmQgPEI+Y29tbWVudDwvQj4gYXBwZWFyIGluIHRoZSBwcm9wb3NhbCBsaXN0LiAoPEI+Tk9URTwvQj46IDxCPkludm9pY2U8L0I+IGlzIHRoZSByb290IGVsZW1lbnQpPC9MST4KLSAgICA8TEk+SGl0IDxCPkVudGVyPC9CPiB0byBhY2NlcHQgPEI+SW52b2ljZTwvQj4gYXMgYSBzZWxlY3Rpb24uIFZlcmlmeSB0aGUgSW52b2ljZSBzdGFydCBhbmQgZW5kIHRhZ3MgYXJlIGluc2VydGVkIGludG8gdGhlIFNvdXJjZSBhbmQgdGhlIGN1cnNvciBhcHBlYXJzIGJldHdlZW4gdGhlbS4gQW4gZWxlbWVudCBlbnRyeSBzaG91bGQgYXBwZWFyIGZvciBJbnZvaWNlIGluIHRoZSBPdXRsaW5lIHZpZXcuICg8Qj5OT1RFPC9CPjogWE1MIGlzIGNhc2Utc2Vuc2l0aXZlIHNvIGJlIHN1cmUgeW91IHNlZSBJbnZvaWNlIGFuZCBub3QgaW52b2ljZSBldmVyeXdoZXJlKS48L0xJPgotICAgIDxMST5IaXQgPEI+Q3RybCtTcGFjZTwvQj4uIFZlcmlmeSB0aGUgZm9sbG93aW5nIGFwcGVhcnMgaW4gdGhlIHByb3Bvc2FsIGxpc3QgKGluIHRoZSBvcmRlciBzaG93bik6IDxGT05UIGNvbG9yPSIjZmYwMDAwIj5JdGVtIGlzIGFwcGVhcmluZyBiZWZvcmUgSGVhZGVyLiBUaGUgZGVmYXVsdCBpcyBub3QgdG8gc29ydCB0aGUgbGlzdCBhbHBoYWJldGljYWxseS4gVGhhdCBtZWFucyB0aGUgbGlzdCBzaG91bGQgYmUgc29ydGVkIGJhc2VkIG9uIHRoZSBvcmRlciBpbiB3aGljaCB0aGUgY2hpbGQgdGFncyBhcmUgZGVmaW5lZCBpbiB0aGUgZWxlbWVudCBkZWZpbml0aW9uIGZvciBJbnZvaWNlIGluIHRoZSBEVEQuIEluIG90aGVyIHdvcmRzLCB1c2VycyBzaG91bGQgc2VlIGNoaWxkIHRhZ3MgbGlzdGVkIGFjY29yZGluZyB0byB0aGVpciBzZXF1ZW5jaW5nIG9yZGVyIGluIHRoZSBEVEQsIHdoaWNoIHRoZSBEVEQgRWRpdG9yIHNob3dzLiBWaW9sYXRpbmcgdGhlIHNlcXVlbmNpbmcgb3JkZXIgY2F1c2VzIGFuIFhNTCBmaWxlIHRvIGJlY29tZSBub3QgdmFsaWQuIDxCPkRFRkVDVDo8L0I+IDE3NzY2ODwvRk9OVD4KLSAgICA8VUw+Ci0gICAgICAgIDxMST5IZWFkZXI8L0xJPgotICAgICAgICA8TEk+SXRlbTwvTEk+Ci0gICAgICAgIDxMST5jb21tZW50PC9MST4KLSAgICA8L1VMPgotICAgIDwvTEk+Ci0gICAgPExJPkhpdCA8Qj5FbnRlcjwvQj4gdG8gYWNjZXB0IDxCPkhlYWRlcjwvQj4gYXMgYSBzZWxlY3Rpb24uPC9MST4KLSAgICA8TEk+VmVyaWZ5IHRoZSBTb3VyY2Ugbm93IGxvb2tzIGxpa2UgdGhlIGZvbGxvd2luZyBhbmQgdGhlIGN1cnNvciBhcHBlYXJzIGJlZm9yZSA8Qj5pbnZvaWNlTnVtYmVyPC9CPjo8SU1HIGJvcmRlcj0iMCIgaGVpZ2h0PSI4MyIgc3JjPSJpZGVudGlmeURURC5qcGciIHdpZHRoPSI0ODUiPjwvTEk+Ci0gICAgPExJPlZlcmlmeSA8Qj5IZWFkZXI8L0I+IGFwcGVhcnMgbmVzdGVkIHVuZGVyIDxCPkludm9pY2U8L0I+IGluIHRoZSBPdXRsaW5lIHZpZXcuPC9MST4KLSAgPExJPkNsb3NlIHRoaXMgZmlsZSwgYW5kIHJlc3BvbmQgPEI+WWVzPC9CPiB3aGVuIHByb21wdGVkIHRvIHNhdmUgdGhlIGNoYW5nZXMuPC9MST4KLSAgPExJPlJlb3BlbiB0aGUgZmlsZSBhbmQgdmVyaWZ5IHRoZSBjaGFuZ2VzIHdlcmUgc2F2ZWQuPC9MST4KLSAgPExJPkNsb3NlIHRoZSBmaWxlLiBWZXJpZnkgbm8gc2F2ZSBjaGFuZ2VzIHByb21wdCBhcHBlYXJzLjwvTEk+Ci08L1VMPgotPFA+PEI+Q3JlYXRlIGFuIFhNTCBGaWxlIGZyb20gYW4gaW1wb3J0ZWQgRFREPC9CPjwvUD4KLTxVTD4KLSAgICA8TEk+U2VsZWN0IHRoZSA8Qj5GaWxlLSZndDtOZXctJmd0O1hNTCBGaWxlPC9CPi48L0xJPgotICAgIDxMST5WZXJpZnkgdGhlIENyZWF0ZSBhIFhNTCBGaWxlIHdpemFyZCBhcHBlYXJzLjwvTEk+Ci0gICAgPExJPlNlbGVjdCB0byA8Qj5DcmVhdGUgYSBuZXcgWE1MIGZpbGUgZnJvbSBhIERURCBmaWxlPC9CPjwvTEk+Ci0gICAgPExJPkdvIHRvIHRoZSBOZXh0IHBhZ2UKLSAgICA8VUw+Ci0gICAgICAgIDxMST5TZWxlY3QgPEI+WE1MVGVzdDI8L0I+IGFzIHRoZSBmb2xkZXI8L0xJPgotICAgICAgICA8TEk+U3BlY2lmeSBhIEZpbGUgbmFtZSBvZiA8Qj5mcm9tTG9jYWxEVEQ8L0I+PC9MST4KLSAgICAgICAgPExJPkdvIHRvIHRoZSBOZXh0IHBhZ2U8L0xJPgotICAgIDwvVUw+Ci0gICAgPC9MST4KLSAgICA8TEk+U2VsZWN0IHRoZSA8Qj5JbXBvcnQgRmlsZTwvQj4gYnV0dG9uCi0gICAgPFVMPgotICAgICAgICA8TEk+VXNlIHRoZSBCcm93c2UgYnV0dG9uIHRvIGZpbmQgPEI+dGVzdGNhc2UuZHRkPC9CPjwvTEk+Ci0gICAgICAgIDxMST5TZWxlY3QgPEI+WE1MVGVzdDI8L0I+IGFzIHRoZSBmb2xkZXIuIDxGT05UIGNvbG9yPSIjZmYwMDAwIj5Xb3VsZCBiZSBuaWNlIGlmIHRoaXMgd2VyZSBhbHJlYWR5IGZpbGxlZCBpbi4gT3BlbiBhIGRlZmVjdC48L0ZPTlQ+PC9MST4KLSAgICAgICAgPExJPlNlbGVjdCA8Qj5GaW5pc2g8L0I+IHRvIGNsb3NlIHRoZSBJbXBvcnQgRmlsZSB3aXphcmQ8L0xJPgotICAgIDwvVUw+Ci0gICAgPC9MST4KLSAgICA8TEk+RXhwYW5kIDxCPlhNTHRlc3QyPC9CPiBhbmQgdGhlbiBzZWxlY3QgPEI+dGVzdGNhc2UuZHRkPC9CPi4gPEZPTlQgY29sb3I9IiNmZjAwMDAiPldhcyBleHBlY3RpbmcgdG8gc2VlIHRoZSBpbXBvcnRlZCBmaWxlIHNlbGVjdGVkIGluIHRoZSBXb3JrYmVuY2ggZmlsZXMgbGlzdCwgYnV0IGl0IHdhc24ndC4gT3BlbiBhIGRlZmVjdC48L0ZPTlQ+PC9MST4KLSAgICA8TEk+R28gdG8gdGhlIE5leHQgcGFnZS48L0xJPgotICAgIDxMST5TZWxlY3QgPEI+dGVzdGNhc2U8L0I+IGFzIHRoZSBSb290IEVsZW1lbnQuPC9MST4KLSAgICA8TEk+QWNjZXB0IHRoZSBkZWZhdWx0IHRvIDxCPkNyZWF0ZSByZXF1aXJlZCBjb250ZW50IG9ubHk8L0I+LjwvTEk+Ci0gICAgPExJPlZlcmlmeSA8Qj50ZXN0Y2FzZS5kdGQ8L0I+IGFwcGVhcnMgYXMgdGhlIFN5c3RlbSBJZC48L0xJPgotICAgIDxMST5TZWxlY3QgRmluaXNoLiBWZXJpZnkgPEI+ZnJvbUxvY2FsRFRELnhtbDwvQj4gYXBwZWFycyBpbiB0aGUgWE1MIEVkaXRvci4gVmVyaWZ5IHRoZSBTb3VyY2UgcGFnZSBsb29rcyBsaWtlIHRoZSBmb2xsb3dpbmc6IDxJTUcgYm9yZGVyPSIwIiBoZWlnaHQ9IjI5MCIgc3JjPSJpbXBvcnREVEQuanBnIiB3aWR0aD0iNjYwIj48L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBPdXRsaW5lIHZpZXcgYW5kIHRoZSBmb3JtYXR0aW5nIGluZGVudGF0aW9uIHJlZmxlY3QgdGhlIHByb3BlciBlbGVtZW50L3RhZyBoaWVyYXJjaHkuIEhlcmUncyB3aGF0IHRoZSBPdXRsaW5lIHZpZXcgc2hvdWxkIGxvb2sgbGlrZTo8SU1HIGJvcmRlcj0iMCIgaGVpZ2h0PSIyOTciIHNyYz0ib3V0bGluZTEuanBnIiB3aWR0aD0iNjU1Ij48L0xJPgotICA8TEk+VmVyaWZ5IHNlbGVjdGlvbiBzeW5jaHJvbml6YXRpb24gYmV0d2VlbiB0aGUgRGVzaWduIHBhZ2UsIFNvdXJjZSBwYWdlLCBPdXRsaW5lIHZpZXcsIAotICAgICAgICBhbmQgUHJvcGVydGllcyB2aWV3LgotICAgIDxVTD4KLSAgICAgICAgPExJPkZyb20gdGhlIFNvdXJjZSBwYWdlLCBjbGljayB3aXRoaW4gdGhlIDxCPmhlYWRlcjwvQj4gc3RhcnQgdGFnLiAKLSAgICAgICAgICAgIFZlcmlmeSA8Qj5oZWFkZXI8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBPdXRsaW5lIHZpZXcgYW5kIGluIHRoZSBEZXNpZ24gCi0gICAgICAgICAgICBwYWdlIGFuZCB0aGF0IHRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyBhbmQgcHJvcGVydHkgdmFsdWVzIGFwcGVhciBpbiB0aGUgCi0gICAgICAgICAgICBQcm9wZXJ0aWVzIHZpZXc6Ci0gICAgICAgIDxUQUJMRSBib3JkZXI9IjEiPgotICAgICAgICAgICAgPFRCT0RZPgotICAgICAgICAgICAgICAgIDxUUj4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSIxMDAiPjxCPlByb3BlcnR5PC9CPjwvVEQ+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iNzYiPjxCPlZhbHVlPC9CPjwvVEQ+Ci0gICAgICAgICAgICAgICAgPC9UUj4KLSAgICAgICAgICAgICAgICA8VFI+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iMTAwIj5jYXRlZ29yeTwvVEQ+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iNzYiPndlYnRvb2w8L1REPgotICAgICAgICAgICAgICAgIDwvVFI+Ci0gICAgICAgICAgICAgICAgPFRSPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9IjEwMCI+bnVtYmVyPC9URD4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSI3NiI+aWR2YWx1ZTA8L1REPgotICAgICAgICAgICAgICAgIDwvVFI+Ci0gICAgICAgICAgICAgICAgPFRSPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9IjEwMCI+c3RhdGU8L1REPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9Ijc2Ij4mbmJzcDs8L1REPgotICAgICAgICAgICAgICAgIDwvVFI+Ci0gICAgICAgICAgICAgICAgPFRSPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9IjEwMCI+c3ViQ2F0ZWdvcnk8L1REPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9Ijc2Ij5BY2Nlc3NhYmlsaXR5PC9URD4KLSAgICAgICAgICAgICAgICA8L1RSPgotICAgICAgICAgICAgICAgIDxUUj4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSIxMDAiPnN1YlN1YkNhdGVnb3J5PC9URD4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSI3NiI+Jm5ic3A7PC9URD4KLSAgICAgICAgICAgICAgICA8L1RSPgotICAgICAgICAgICAgPC9UQk9EWT4KLSAgICAgICAgPC9UQUJMRT4KLSAgICAgICAgPC9MST4KLQk8TEk+RnJvbSB0aGUgT3V0bGluZSB2aWV3LCBzZWxlY3QgdGhlIDxCPnRlc3RCdWNrZXQ8L0I+IHRhZy4KLSAgICAgICAgICAgIFZlcmlmeSA8Qj50ZXN0QnVja2V0PC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgRGVzaWduIHBhZ2UgYW5kIHRoZSBjdXJyZW50IG1hcmtlcgotICAgICAgICAgICAgaW4gdGhlIGxlZnRoYW5kIG1hcmdpbiBvZiB0aGUgU291cmNlIHBhZ2UgaW5kaWNhdGVzIHRoZSByYW5nZSBvZiB0aGUgCi0gICAgICAgICAgICA8Qj50ZXN0QnVja2V0PC9CPiB0YWcuIFRoZSBQcm9wZXJ0aWVzIHZpZXcgc2hvdWxkIHNob3cgYSBwcm9wZXJ0eSBvZiA8Qj50eXBlPC9CPgotICAgICAgICAgICAgd2l0aCBhIHZhbHVlIG9mIDxCPkNvbXBvbmVudFRlc3Q8L0I+LgotICAgICAgICA8L0xJPgotICAgIDwvVUw+ICAgCi0gICAgPC9MST4gCi0gICAgPExJPlZlcmlmeSBlZGl0IHN5bmNocm9uaXphdGlvbiBiZXR3ZWVuIHRoZSBEZXNpZ24gcGFnZSwgU291cmNlIHBhZ2UsIGFuZCAKLSAgICAgICAgUHJvcGVydGllcyB2aWV3IChmb2N1cyBoZXJlIGlzIG9uIGFkZGluZyBhdHRyaWJ1dGVzIGFuZCBhdHRyaWJ1dGUgdmFsdWVzKS4KLSAgICA8VUw+Ci0gICAgICAgIDxMST5Gcm9tIHRoZSBTb3VyY2UgcGFnZSwgdXNlIGNvbnRlbnQgYXNzaXN0IHRvIGluc2VydCBhbiBhdHRyaWJ1dGUgYW5kIGF0dHJpYnV0ZSB2YWx1ZQotICAgICAgICAgICAgZm9yIHRoZSA8Qj5oZWFkZXI8L0I+IHN0YXJ0IHRhZy4KLSAgICAgICAgICAgIDxVTD4KLSAgICAgICAgICAgIDxMST5Qb3NpdGlvbiB0aGUgY3Vyc29yIGFmdGVyIHRoZSA8Qj5jYXRlZ29yeTwvQj4gYXR0cmlidXRlIGluIHRoZSA8Qj5oZWFkZXI8L0I+IHN0YXJ0IHRhZy48L0xJPgotICAgICAgICAgICAgPExJPlR5cGUgPEI+c3BhY2U8L0I+IGFuZCB0aGVuIGhpdCBwcm9tcHQgZm9yIGNvbnRlbnQgYXNzaXN0LjwvTEk+Ci0gICAgICAgICAgICA8TEk+VmVyaWZ5IG9ubHkgPEI+c3RhdGU8L0I+IGFuZCA8Qj5zdWJTdWJDYXRlZ29yeTwvQj4gYXBwZWFyIGluIHRoZSBwcm9wb3NhbCBsaXN0IChjb250ZW50IGFzc2lzdCBpcyBzbWFydCBlbm91Z2ggbm90IHRvIGxpc3QgYW55IGF0dHJpYnV0ZXMgdGhhdCBhbHJlYWR5IGV4aXN0IGluIHRoZSBzdGFydCB0YWcgc2luY2UgYXR0cmlidXRlcyBjYW4gb25seSBhcHBlYXIgb25jZS4gPEZPTlQgY29sb3I9IiMwMDAwZmYiPkNvb2whPC9GT05UPikuPC9MST4KLSAgICAgICAgICAgIDxMST5TZWxlY3QgPEI+c3RhdGU8L0I+LjwvTEk+ICAgCi0gICAgICAgICAgICA8TEk+VmVyaWZ5IDxCPnN0YXRlPSJVbmRlckNvbnN0cnVjdGlvbiI8L0I+IGlzIGluc2VydGVkIGluIHRoZSBTb3VyY2UgcGFnZSAoY29udGVudCBhc3Npc3QgYXV0b21hdGljYWxseSBpbnNlcnRzIGFueSBkZWZhdWx0IHZhbHVlcy4gPEZPTlQgY29sb3I9IiMwMDAwZmYiPkNvb2whPC9GT05UPikuIFZlcmlmeSB0aGUgRGVzaWduIHBhZ2UgYW5kIFByb3BlcnRpZXMgdmlldyByZWZsZWN0IHRoaXMgY2hhbmdlLjwvTEk+ICAgICAgICAgCi0gICAgICAgICAgICA8L1VMPgotICAgICAgICA8L0xJPgotICAgICAgICA8TEk+RnJvbSB0aGUgUHJvcGVydGllcyB2aWV3LCB1cGRhdGUgdGhlIDxCPnN0YXRlPC9CPiBhdHRyaWJ1dGUgdmFsdWUgdG8gIlVuZGVyUmV2aWV3IiAKLSAgICAgICAgICAgIChhIHB1bGxkb3duIGxpc3Qgb2YgdmFsdWVzIHNob3VsZCBiZSBhdmFpbGFibGUpLiBWZXJpZnkgdGhlIGNoYW5nZSBpcyByZWZsZWN0ZWQKLSAgICAgICAgICAgIGluIHRoZSBTb3VyY2UgYW5kIERlc2lnbiBwYWdlcy4KLSAgICAgICAgPC9MST4KLSAgICAgICAgPExJPkZyb20gdGhlIERlc2lnbiBwYWdlLCBhZGQgYW4gYXR0cmlidXRlIGFuZCBhdHRyaWJ1dGUgdmFsdWUgdG8gdGhlIDxCPmhlYWRlcjwvQj4gdGFnLgotICAgICAgICAgICAgPFVMPgotICAgICAgICAgICAgPExJPkJyaW5nIHVwIHRoZSBwb3B1cCBtZW51IGZvciB0aGUgPEI+aGVhZGVyPC9CPiB0YWcuPC9MST4KLSAgICAgICAgICAgIDxMST5TZWxlY3QgPEI+QWRkIEF0dHJpYnV0ZS0+c3ViU3ViQ2F0ZWdvcnk8L0I+IGZyb20gdGhlIHBvcHVwIG1lbnUgKGl0J3Mgc21hcnQKLSAgICAgICAgICAgICAgICBlbm91Z2ggdG8ga25vdyB3aGljaCBhdHRyaWJ1dGVzIGhhdmVuJ3QgYmVlbiBzcGVjaWZpZWQgeWV0IC4uLiBsaWtlIGNvbnRlbnQgCi0gICAgICAgICAgICAgICAgYXNzaXN0LiBDb29sISkuPC9MST4KLSAgICAgICAgICAgIDxMST5UeXBlIGluIGEgdmFsdWUgb2YgPEI+S2V5Ym9hcmQgc3VwcG9ydDwvQj4uPC9MST4KLSAgICAgICAgICAgIDxMST5WZXJpZnkgdGhlIGNoYW5nZSBpcyByZWZsZWN0ZWQgaW4gdGhlIFNvdXJjZSBwYWdlIGFuZCBQcm9wZXJ0aWVzIHZpZXc8L0xJPgotICAgICAgICAgICAgPC9VTD4KLSAgICAgICAgPC9MST4KLSAgICA8L1VMPgotICAgIDwvTEk+Ci08L1VMPgotPFA+PEI+T3BlbiBhbiBYTUwgRmlsZSB0aGF0IHJlZmVyZW5jZXMgYSByZW1vdGUgRFREPC9CPjwvUD4KLTxVTD4KLSAgICA8TEk+T3BlbiB0aGUgPEI+V2lyZWxlc3MueG1sPC9CPiBmaWxlLjwvTEk+Ci0gICAgPExJPlZlcmlmeSBpdCBsb29rcyBsaWtlIHRoZSBmb2xsb3dpbmcgaW4gdGhlIFNvdXJjZSBwYWdlOjxJTUcgYm9yZGVyPSIwIiBoZWlnaHQ9IjIzOSIgc3JjPSJ3aXJlbGVzcy5qcGciIHdpZHRoPSI2NTYiPjwvTEk+Ci0gICAgPExJPlZlcmlmeSB0aGUgT3V0bGluZSB2aWV3IGFuZCB0aGUgZm9ybWF0dGluZyBpbmRlbnRhdGlvbiByZWZsZWN0IHRoZSBwcm9wZXIgCi0gICAgICAgIGVsZW1lbnQvdGFnIGhpZXJhcmNoeS4gSGVyZSdzIHdoYXQgdGhlIE91dGxpbmUgdmlldyBzaG91bGQgbG9vayBsaWtlOiA8SU1HIGJvcmRlcj0iMCIgaGVpZ2h0PSIxODkiIHNyYz0ib3V0bGluZTIuanBnIiB3aWR0aD0iNjU2Ij48L0xJPiAKLSAgICA8TEk+VmVyaWZ5IGNvbnRlbnQgYXNzaXN0IDxGT05UIGNvbG9yPSIjZmYwMDAwIj5EZWZlY3QgMTc2Mzc5IChpbiB2ZXJpZnkgc3RhdGUsIGJ1dCBzdGlsbCBub3Qgd29ya2luZyk8L0ZPTlQ+LjwvTEk+Ci0gICAgICAgIDxVTD4KLSAgICAgICAgICAgPExJPkNyZWF0ZSBhIG5ldyBsaW5lIGFmdGVyIHRoZSA8Qj53bWw8L0I+IHN0YXJ0IHRhZy48L0xJPgotICAgICAgICAgICA8TEk+UHJvbXB0IGZvciBjb250ZW50IGFzc2lzdCBvbiB0aGUgbmV3IGxpbmUuPC9MST4KLSAgICAgICAgICAgPExJPlZlcmlmeSB0aGUgZm9sbG93aW5nIGFwcGVhciBhcyBwcm9wb3NhbHMgKGluIHRoZSBvcmRlciBzaG93bik6IAotICAgICAgICAgICAgICAgPFVMPgotICAgICAgICAgICAgICAgICAgIDxMST5oZWFkPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+dGVtcGxhdGU8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST5jYXJkPC9MST4KLSAgICAgICAgICAgICAgIDwvVUw+Ci0gICAgICAgICAgIDwvTEk+Ci0gICAgICAgICAgIDxMST5DcmVhdGUgYSBuZXcgbGluZSBhZnRlciB0aGUgPEI+d21sPC9CPiBzdGFydCB0YWcuPC9MST4KLSAgICAgICAgICAgPExJPlR5cGUgYSBzcGFjZSBiZWZvcmUgdGhlIGVuZGluZyBkZWxpbWl0ZXIgb24gdGhlIGNhcmQgc3RhcnQgdGFnLjwvTEk+Ci0gICAgICAgICAgIDxMST5Qcm9tcHQgZm9yIGNvbnRlbnQgYXNzaXN0PC9MST4KLSAgICAgICAgICAgPExJPlZlcmlmeSB0aGUgZm9sbG93aW5nIGFwcGVhciBhcyBwcm9wb3NhbHMgKG5vdCBuZWNlc3NhcmlseSBpbiB0aGUKLSAgICAgICAgICAgICAgIG9yZGVyIHNob3duKS4gCi0gICAgICAgICAgICAgICA8VUw+Ci0gICAgICAgICAgICAgICAgICAgPExJPnRpdGxlPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+bmV3Y29udGV4dDwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPm9yZGVyZWQ8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST54bWw6bGFuZzwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPm9uZW50ZXJiYWNrd2FyZDwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPm9udGltZXI8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST5pZDwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPmNsYXNzPC9MST4KLSAgICAgICAgICAgICAgIDwvVUw+Ci0gICAgICAgICAgIDwvTEk+Ci0gICAgICAgICAgIDxMST5Qb3NpdGlvbiB0aGUgY3Vyc29yIHdpdGhpbiB0aGUgPEI+bWV0aG9kPC9CPiBhdHRyaWJ1dGUgdmFsdWUgaW4gdGhlIDxCPmdvPC9CPiBzdGFydCB0YWcuPC9MST4KLSAgICAgICAgICAgPExJPlByb21wdCBmb3IgY29udGVudCBhc3Npc3Q8L0xJPgotICAgICAgICAgICA8TEk+VmVyaWZ5IDxCPnBvc3Q8L0I+IGFuZCA8Qj5nZXQ8L0I+IGFwcGVhciBhcyBwcm9wb3NhbHMuPC9MST4KLSAgICAgICAgPC9VTD4KLSAgICA8TEk+VmVyaWZ5IHNlbGVjdGlvbiBzeW5jaHJvbml6YXRpb24gYmV0d2VlbiB0aGUgRGVzaWduIHBhZ2UsIFNvdXJjZSBwYWdlLCBPdXRsaW5lIHZpZXcsIAotICAgICAgICBhbmQgUHJvcGVydGllcyB2aWV3LgotICAgIDxVTD4KLSAgICAgICAgPExJPkZyb20gdGhlIFNvdXJjZSBwYWdlLCBjbGljayB3aXRoaW4gdGhlIDxCPmNhcmQ8L0I+IHN0YXJ0IHRhZy4gCi0gICAgICAgICAgICBWZXJpZnkgPEI+Y2FyZDwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIE91dGxpbmUgdmlldyBhbmQgaW4gdGhlIERlc2lnbiAKLSAgICAgICAgICAgIHBhZ2UgYW5kIHRoYXQgdGhlIGNvbnRlbnQgYXNzaXN0IHByb3Bvc2FscyBsaXN0ZWQgYWJvdmUgZm9yIHRoZQotICAgICAgICAgICAgPEI+Y2FyZDwvQj4gdGFnIGFwcGVhciBhcyBwcm9wZXJ0aWVzIGluIHRoZSBQcm9wZXJ0aWVzIHZpZXcuIE5vIHZhbHVlcyBzaG91bGQgYXBwZWFyIGZvciB0aGVzZSBwcm9wZXJ0aWVzLjwvTEk+Ci0JPExJPkZyb20gdGhlIE91dGxpbmUgdmlldywgc2VsZWN0IHRoZSA8Qj5wb3N0ZmllbGQ8L0I+IHRhZy4KLSAgICAgICAgICAgIFZlcmlmeSA8Qj5wb3N0ZmllbGQ8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBEZXNpZ24gcGFnZSBhbmQgdGhlIGN1cnJlbnQgbWFya2VyCi0gICAgICAgICAgICBpbiB0aGUgbGVmdGhhbmQgbWFyZ2luIG9mIHRoZSBTb3VyY2UgcGFnZSBpbmRpY2F0ZXMgdGhlIHJhbmdlIG9mIHRoZSAKLSAgICAgICAgICAgIDxCPnBvc3RmaWVsZDwvQj4gdGFnLiBUaGUgUHJvcGVydGllcyB2aWV3IHNob3VsZCBzaG93IHRoZSBmb2xsb3dpbmcgcHJvcGVydGllcywKLSAgICAgICAgICAgIG5vbmUgb2Ygd2hpY2ggc2hvdWxkIGhhdmUgYSB2YWx1ZToKLSAgICAgICAgICAgICAgIDxVTD4KLSAgICAgICAgICAgICAgICAgICA8TEk+bmFtZTwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPnZhbHVlPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+aWQ8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST5jbGFzczwvTEk+Ci0gICAgICAgICAgICAgICA8L1VMPgotICAgICAgICAgICA8L0xJPgotICAgIDwvVUw+ICAgCi0gICAgPC9MST4KLSAgICA8TEk+VmVyaWZ5IGVkaXQgc3luY2hyb25pemF0aW9uIGJldHdlZW4gdGhlIERlc2lnbiBwYWdlLCBTb3VyY2UgcGFnZSwgT3V0bGluZSB2aWV3LCBhbmQgCi0gICAgICAgIFByb3BlcnRpZXMgdmlldyAoZm9jdXMgaGVyZSBpcyBvbiBhZGRpbmcgZWxlbWVudHMvdGFncykuCi0gICAgPFVMPgotICAgICAgICA8TEk+RnJvbSB0aGUgU291cmNlIHBhZ2UsIGNvcHkgYW5kIHBhc3RlIHRoZSA8Qj5jYXJkPC9CPiB0YWcuCi0gICAgICAgICAgICA8VUw+Ci0gICAgICAgICAgICA8TEk+UG9zaXRpb24gdGhlIGN1cnNvciBpbiB0aGUgPEI+Y2FyZDwvQj4gc3RhcnQgdGFnLjwvTEk+Ci0gICAgICAgICAgICA8TEk+Tm90aWNlIHRoZSByYW5nZSBvZiB0aGUgPEI+Y2FyZDwvQj4gdGFnIGluIHRoZSBsZWZ0aGFuZCBtYXJnaW4gYXJlYS48L0xJPgotICAgICAgICAgICAgPExJPkNvcHkgdGhpcyByYW5nZSBvZiBsaW5lcyB1c2luZyB0aGUgPEI+RWRpdC0+Q29weTwvQj4gcHVsbGRvd24gbWVudSBzZWxlY3Rpb24uPC9MST4KLSAgICAgICAgICAgIDxMST5QYXN0ZSBhZnRlciB0aGUgPEI+Y2FyZDwvQj4gZW5kIHRhZyB1c2luZyBDdHJsK1YuPC9MST4KLSAgICAgICAgICAgIDxMST5WZXJpZnkgdGhlIGFwcHJvcHJpYXRlIGxpbmVzIHdlcmUgcGFzdGVkIG4gdGhlIFNvdXJjZSBwYWdlLgotICAgICAgICAgICAgICAgIFZlcmlmeSB0aGUgRGVzaWduIHBhZ2UsIE91dGxpbmUgdmlldywgYW5kIHRoZSBQcm9wZXJ0aWVzIAotICAgICAgICAgICAgICAgIHZpZXcgcmVmbGVjdCB0aGlzIGNoYW5nZS48L0xJPiAgICAgICAgIAotICAgICAgICAgICAgPC9VTD4KLSAgICAgICAgPC9MST4KLSAgICAgICAgPExJPkZyb20gdGhlIERlc2lnbiBwYWdlLCBhZGQgYW5vdGhlciA8Qj5jYXJkPC9CPiB0YWcuCi0gICAgICAgICAgICA8VUw+Ci0gICAgICAgICAgICA8TEk+QnJpbmcgdXAgdGhlIHBvcHVwIG1lbnUgZm9yIHRoZSA8Qj53bWw8L0I+IHRhZy48L0xJPgotICAgICAgICAgICAgPExJPlNlbGVjdCA8Qj5BZGQgQ2hpbGQtPmNhcmQ8L0I+IGZyb20gdGhlIHBvcHVwIG1lbnUuPC9MST4KLSAgICAgICAgICAgIDxMST5WZXJpZnkgdGhlIFNvdXJjZSBwYWdlLCBPdXRsaW5lIHZpZXcsIGFuZCB0aGUgUHJvcGVydGllcwotICAgICAgICAgICAgICAgIHZpZXcgcmVmbGVjdCB0aGlzIGNoYW5nZS4gTk9URTogaXQgc2hvdWxkIGhhdmUgZ2VuZXJhdGVkIG91dAotICAgICAgICAgICAgICAgIHRoZSBzYW1lIHRoaW5nIGFzIHRoZSBvcmlnaW5hbCBjYXJkIHRhZywgd2l0aCB0aGUgZXhjZXB0aW9uCi0gICAgICAgICAgICAgICAgdGhhdCBhIDxCPm1ldGhvZDwvQj4gYXR0cmlidXRlIHNob3VsZCBub3QgZXhpc3QgaW4gdGhlIDxCPmdvPC9CPiBzdGFydCB0YWcuIDwvTEk+Ci0gICAgICAgICAgICA8L1VMPgotICAgICAgICA8L0xJPgotICAgIDwvVUw+Ci0gICAgPC9MST4gCi08L1VMPgotPFA+PEI+Q3JlYXRlIGFuZCBWYWxpZGF0ZSBhbiBYTUwgRmlsZSBmcm9tIGEgc2NoZW1hPC9CPjxCUj4KLQotPFA+KHRoZXNlIHN0ZXBzIGFyZSB0YWtlbiBmcm9tIHRoZSAnRGVzaWduJyBzbW9rZSB0ZXN0LCBleGNlcHQgdGhlIFNvdXJjZSBQYWdlIGlzIHRoZSBmb2N1cyk8L1A+Ci08dWw+Ci08bGk+Ci1SaWdodCBtb3VzZSBidXR0b24gMiBvbiB0aGUgUHVyY2hhc2VPcmRlci54c2QgYW5kIHNlbGVjdCA8Yj5DcmVhdGUgWE1MCi1GaWxlPC9iPi48L2xpPgotCi08bGk+Ci1BY2NlcHQgdGhlIGRlZmF1bHQgZmlsZSBuYW1lcy48L2xpPgotCi08bGk+Ci1JbiB0aGUgU2VsZWN0IFJvb3QgRWxlbWVudCBwYWdlLCBjaG9vc2UgPGI+cHVyY2hhc2VPcmRlcjwvYj4gYXMgcm9vdCBlbGVtZW50LjwvbGk+Ci0KLTxsaT4KLUNob29zZSA8Yj5DcmVhdGUgcmVxdWlyZWQgYW5kIG9wdGlvbmFsIGNvbnRlbnQ8L2I+IHRvIGNyZWF0ZSBhIG1pbmltYWwKLWRvY3VtZW50LjwvbGk+Ci0KLTxsaT4KLUVudGVyIDxiPnBvPC9iPiBhcyB0aGUgbmFtZXNwYWNlIHByZWZpeC48L2xpPgotCi08bGk+T24gRmluaXNoLCBhIFB1cmNoYXNlT3JkZXIueG1sIGlzIGNyZWF0ZWQgYW5kIHRoZSBYTUwgRWRpdG9yIGlzIG9wZW5lZC4gKFNlbGVjdCBTb3VyY2UgUGFnZSBpZiBub3QgYWxyZWFkeSB0aGVyZS4pPC9saT4KLQotPGxpPgotUnVuIFZhbGlkYXRlLiBUaGUgUHVyY2hhc2VPcmRlci54bWwgc2hvdWxkIGJlIGludmFsaWQuPC9saT4KLQotPGxpPgotRG91YmxlIGNsaWNrIG9uIHRoZSBlcnJvciBtZXNzYWdlLiBJdCBzaG91bGQgYmUgcG9zaXRpb25lZCB0byB0aGUgbGluZQotaW4gZXJyb3IsIGkuZS4gdGhlIDxiPnBhcnROdW08L2I+IGF0dHJpYnV0ZS4gSXQgaXMgaW52YWxpZCBiZWNhdXNlIHRoZQotdmFsdWUgaXMgbm90IHNldCB0byBtYXRjaCB0aGUgWE1MIHNjaGVtYSBwYXR0ZXJuIGZhY2V0ICJkMy1bQS1aXXsyfSIgKDMKLWRpZ2l0cyBmb2xsb3dlZCBieSAyIGNoYXJhY3RlcnMpLjwvbGk+Ci0KLTxsaT5JbiB0aGUgU291cmNlIFZpZXcsIGxvY2F0ZSB0aGUgPGI+cGFydE51bTwvYj4gYXR0cmlidXRlIHVuZGVyIGVsZW1lbnQgaXRlbS4KLUVudGVyIHRoZSB2YWx1ZSAzMzMtQUIuPC9saT4KLQotPGxpPgotUnVuIFZhbGlkYXRlLiBUaGUgUHVyY2hhc2VPcmRlci54bWwgZG9jdW1lbnQgc2hvdWxkIG5vdyBiZSB2YWxpZC48L2xpPgotPC9VTD4KLTxVTD4KLSAgPExJPgotICA8SFI+PC9MST4KLSAgPGxpPlBsYWNlIHRoZSBjdXJzb3IgYWZ0ZXIgdGhlICZsdDtpdGVtcyZndDsgdGFnIGFuZCBiZXN1cmUgIml0ZW0iIGlzIAotICBsaXN0ZWQgaW4gdGhlIGNvbnRlbnQgYXNzaXN0IGxpc3QuIDwvbGk+Ci08bGk+UmVuYW1lIHRoZSBwdXJjaGFzZU9yZGVyLnhzZCB0bywgc2F5LCBwdXJjaGFzZU9yZGVySE9MRC54c2Q8L2xpPgotPGxpPlZlcmlmeSB0aGF0IGNvbnRlbnQgYXNzaXN0IHN0aWxsIGdpdmVzIHlvdSAiaXRlbSIgYXMgYWJvdmUuPC9saT4KLTxsaT5Ob3cgc2VsZWN0IHRoZSAiUmVsb2FkIERlcGVuZGFuY2llcyIgYnV0dG9uLjwvbGk+Ci08bGk+VmVyaWZ5IHRoYXQgbm93IGNvbnRlbnQgYXNzaXN0IG5vIGxvbmdlciBsaXN0cyBhbnkgaXRlbXMgb3RoZXIgCi10aGF0IHRoZSBtYWNybyAiY29tbWVudCIuPC9saT4KLTxsaT5SZXBlYXQgbWFraW5nIHB1cmNoYXNlT3JkZXIueHNkIHdvcmthYmxlIGFnYWluLjwvbGk+Ci08L3VsPgotPFA+PC9QPjxQPjwvUD48UD48L1A+PFA+PC9QPjxQPjwvUD48L1A+Ci08UD48Qj5PcGVuIGFuIFhNTCBGaWxlIGZvciBhIHNoaXBwZWQgRFREIGNhdGFsb2cgZW50cnk8L0I+PEJSPgotPEJSPgotW3B1dCBpbiBvcHRpb25hbCBzZWN0aW9uIC4uIHRoaXMgaXNuJ3QgYSBjdXN0b21lciBzY2VuZXJpb108QlI+Ci1UbyB2ZXJpZnkgdGhhdCBzaGlwcGVkIERURHMgYXJlIHdvcmtpbmc6PEJSPgotPFVMPgotPExJPgotVXNlIGEgd2ViIHByb2plY3Qgd2l0aCBhIHN0YW5kYXJkIHdlYi54bWwgZmlsZSBpbiBpdC4gQmUgc3VyZSAKLXRoZXJlIGlzIG5vIHdlYi1hcHBfMl8yLmR0ZCBmaWxlIGluIHRoZSBkaXJlY3RvcnkuIEluIHRoZSB3ZWIueG1sIGZpbGUgCi1pdHNlbGYsIG1hbmdsZSB0aGUgd2ViLWFwcF8yXzIuZHRkIGZpbGVuYW1lIGluIHRoZSBzeXN0ZW0gaWQgYSBsaXR0bGUsIHN1Y2ggYXMgCi1jaGFuZ2UgaXQgdG8geGViLWFwcF8yXzIuZHRkIHRvIGJlIHN1cmUgaXQgY2FuJ3QgYmUgZm91bmQgdmlhIHRoZQotbm9ybWFsIGh0dHAgbWV0aG9kIChUaGlzIGlzbid0IHJlYWxseSBuZWNlc3NhcnkgZm9yIHRoZSBmdW50aW9uIHRvIHdvcmssCi1pdHMganVzdCB0byBiZSBzdXJlIG9ubHkgdGhlIGNhdGFsb2cgZnVuY3Rpb24gaXMgaW4gZWZmZWN0KS4KLTwvTEk+Ci08TEk+Ci1HbyB0byB0aGUgcHJlZmVyZW5jZXMgcGFnZSwgYW5kIG9wZW4gdGhlIFhNTCBDYXRhbG9nLiBWZXJpZnkgdGhlcmUgCi1pcyBhbiBlbnRyeSBmb3IgLS8vU3VuIE1pY3Jvc3lzdGVtcywgSW5jLi8vRFREIFdlYiBBcHBsaWNhdGlvbiAyLjIvL0VOLgotPC9MST4KLTxMST4KLU9uY2UgYWxsIHRoZSBwcmVwIHdvcmsgaXMgZG9uZSAoZmlsZXMgZGVsZXRlZCwgdGV4dCBtb2RpZmllZCksIHlvdSBzaG91bGQgCi1leGl0IGFuZCByZXN0YXJ0IEVjbGlwc2UgdG8gYmUgc3VyZSB5b3UgaGF2ZSBhIGZyZXNoIHN0YXJ0LgotPC9MST4KLTxMST4KLU9wZW4gdGhlIHdlYi54bWwgZmlsZSBhbmQgYmUgc3VyZSB0aGF0IGNvbnRlbnQgYXNzaXN0IHdvcmtzIGZvciB0aGF0IGZpbGUuCi1Gb3IgZXhhbXBsZSwgcmlnaHQgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUgJmx0Oy9kaXNwbGF5LW5hbWUmZ3Q7IHRhZywgY3RybC1zcGFjZSAKLXNob3VsZCBwcm92aWRlIGEgbG9uZyBsaXN0IG9mIGVsZW1lbnRzLCBzdGFydGluZyB3aXRoIHNlcnZsZXQsIHNlcnZsZXQtbWFwcGluZywgZXRjLgotVGhpcyBpbmRpY2F0ZXMgdGhlIHNoaXBwZWQgRFREIGZ1bmN0aW9uIGlzIHdvcmtpbmcgYW5kIGNvbmZpZ3VyZWQgCi1jb3JyZWN0bHkgKGF0IGxlYXN0IGZvciB0aGUgd2ViLnhtbCBmaWxlKS4KLTwvTEk+Ci08L1VMPgotPC9QPgotPFA+PEI+Q3JlYXRlIGFuIFhNTCBGaWxlIGZyb20gYSBuZXcgRFREIGNhdGFsb2cgZW50cnk8L0I+PEJSPjxJTUcgYm9yZGVyPSIwIiBoZWlnaHQ9IjYzIiBzcmM9InUwMTFhbmkuZ2lmIiB3aWR0aD0iNjMiPjwvUD4KLQotPGI+VGhlIGZvbGxvd2luZyBjb21lcyBkaXJlY3RseSBmcm9tIHRoZSAnRGVzaWduJyBTbW9rZSBUZXN0OiBYTUwgQ2F0YWxvZyBmb3IgWE1MIFNjaGVtYTwvYj4KLTx1bD4KLTxsaT4KLVJ1biBWYWxpZGF0ZSBvbiBQdXJjaGFzZU9yZGVyLnhtbCB0byBtYWtlIHN1cmUgaXQgaXMgdmFsaWQ8L2xpPgotCi08bGk+Ci1DcmVhdGUgYSBuZXcgcHJvamVjdCwgWE1MVGVzdDI8L2xpPgotCi08bGk+Ci1Nb3ZlIHRoZSBQdXJjaGFzZU9yZGVyLnhzZCBpbnRvIFhNTFRlc3QyLjwvbGk+Ci0KLTxsaT4KLVJ1biBWYWxpZGF0ZSBvbiBQdXJjaGFzZU9yZGVyLnhtbC4gWW91IHdpbGwgbm90aWNlIHRoYXQgaXQgaXMgbm8gbG9uZ2VyCi12YWxpZC4gVGhlIGVycm9yIG1lc3NhZ2Ugc2hvdWxkIGdpdmUgeW91IGEgaGludCB0aGF0IHRoZSBmaWxlIFB1cmNoYXNlT3JkZXIueHNkCi1jYW4gbm8gbG9uZ2VyIGJlIGZvdW5kLjwvbGk+Ci0KLTxsaT4KLU9wZW4gdGhlIFdpbmRvdy0+UHJlZmVyZW5jZXMgYW5kIHNlbGVjdCB0aGUgWE1MIENhdGFsb2cuPC9saT4KLQotPGxpPgotRW50ZXIgdGhlIHBhaXIgPGI+SWQgPSBQdXJjaGFzZU9yZGVyLnhzZCBVcmkgPSBmOlxlY2xpcHNlXFhNTFRlc3QyXFB1cmNoYXNlT3JkZXIueHNkPC9iPjwvbGk+Ci0KLTxicj5PciBhbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHVzZSBhIHJlbGF0aXZlIHBhdGggdG8gdGhlIGluc3RhbGwgZGlyZWN0b3J5Ci1vZiB0aGUgd29ya2JlbmNoIGFzIGZvbGxvd3M6Ci08YnI+PGI+SWQgPSBQdXJjaGFzZU9yZGVyLnhzZCBVcmkgPSAuXFhNTFRlc3QyXFB1cmNoYXNlT3JkZXIueHNkPC9iPgotPGxpPgotQ2xpY2sgb24gdGhlIFJlbG9hZCBidXR0b24gdG8gcmVsb2FkIHRoZSBjYXRhbG9nIHNldHRpbmdzLjwvbGk+Ci0KLTxsaT4KLVJ1biBWYWxpZGF0ZS4gVGhlIFB1cmNoYXNlT3JkZXIueG1sIGRvY3VtZW50IHNob3VsZCBub3cgYmUgdmFsaWQuPC9saT4KLTwvdWw+Ci08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgICAgICAgICAgICAgICAgICAgU2F2ZS9WYWxpZGF0ZSB0ZXN0IGNhc2VzCi0gICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLT4KLTxIMj48Rk9OVCBjb2xvcj0iIzAwMDBmZiI+U2F2ZS9WYWxpZGF0ZSB0ZXN0IGNhc2VzPC9GT05UPjwvSDI+Ci08UD48Qj5TYXZpbmcgYW4gWE1MIEZpbGU8L0I+PEJSPgotKE5PVEU6IHRoZSA8Qj5JZGVudGlmeSBhIGxvY2FsIERURDwvQj4gdGVzdCBjYXNlIHRlc3RzIHRoZSBzYXZlIHByb21wdCBvbiBhIGZpbGUgY2xvc2UuKTwvUD4KLTxVTD4KLSAgPExJPklmIGFueSBmaWxlcyBhcmUgb3Blbiwgc2VsZWN0IDxCPkZpbGUtJmd0O0Nsb3NlIEFsbDwvQj4gKG9yIDxCPkN0cmwrU2hpZnQrRjQ8L0I+KSB0byBjbG9zZSB0aGVtLjwvTEk+Ci0gIDxMST5PcGVuIGFueSB4bWwgZmlsZSBpbiB0aGUgPEI+WE1MVGVzdDI8L0I+IHByb2plY3QuPC9MST4KLSAgPExJPlZlcmlmeSB0aGUgZm9sbG93aW5nIChuby1jaGFuZ2VzLW1hZGUgY29uZGl0aW9uKToKLSAgPFVMPgotICAgIDxMST48Qj5GaWxlLSZndDtTYXZlPC9CPiBpcyBkaXNhYmxlZC48L0xJPgotICAgIDxMST48Qj5GaWxlLSZndDtTYXZlIEFsbDwvQj4gaXMgZGlzYWJsZWQuPC9MST4KLSAgICA8TEk+PEI+RmlsZS0mZ3Q7U2F2ZSBBczwvQj4gaXMgZW5hYmxlZC48L0xJPgotICAgIDxMST50aGUgPEI+U2F2ZTwvQj4gdG9vbGJhciBidXR0b24gKGEgZGlza2V0dGUpIGlzIGRpc2FibGVkLjwvTEk+Ci0gICAgPExJPnRoZSA8Qj5TYXZlIEFzPC9CPiB0b29sYmFyIGJ1dHRvbiBpcyBlbmFibGVkLjwvTEk+Ci0gICAgPExJPjxCPlNhdmU8L0I+IGlzIGRpc2FibGVkIG9uIHRoZSBTb3VyY2UgcG9wdXAgbWVudS4gPEZPTlQgY29sb3I9IiNmZjAwMDAiPldvdWxkIGJlIG5pY2UgaWYgdGhlIERlc2lnbiBwb3B1cCBtZW51IGFsc28gaGFkIGEgU2F2ZSBzZWxlY3Rpb24uIE9wZW4gYSBzdWdnZXN0aW9uIGRlZmVjdC48L0ZPTlQ+PC9MST4KLSAgICA8TEk+bm8gPEI+KjwvQj4gYXBwZWFycyBpbiB0aGUgZmlsZSB0YWIuPC9MST4KLSAgPC9VTD48L0xJPgotICA8TEk+TWFrZSBhIGNoYW5nZSBpbiB0aGUgU291cmNlIHBhZ2UuPC9MST4KLSAgPExJPlZlcmlmeSB0aGUgZm9sbG93aW5nIChjaGFuZ2VzLW1hZGUgY29uZGl0aW9uKToKLSAgPFVMPgotICAgIDxMST48Qj5GaWxlLSZndDtTYXZlPC9CPiBpcyBlbmFibGVkLjwvTEk+Ci0gICAgPExJPjxCPkZpbGUtJmd0O1NhdmUgQWxsPC9CPiBpcyBlbmFibGVkPC9MST4KLSAgICA8TEk+dGhlIDxCPlNhdmU8L0I+IHRvb2xiYXIgYnV0dG9uIChhIGRpc2tldHRlKSBpcyBlbmFibGVkLjwvTEk+Ci0gICAgPExJPjxCPlNhdmU8L0I+IGlzIGVuYWJsZWQgb24gdGhlIFNvdXJjZSBwb3B1cCBtZW51LjwvTEk+Ci0gICAgPExJPmEgPEI+KjwvQj4gYXBwZWFycyBpbiB0aGUgZmlsZSB0YWIuPC9MST4KLSAgPC9VTD48L0xJPgotICA8TEk+SGl0IDxCPkN0cmwrUzwvQj4uIDwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIG5vLWNoYW5nZXMtbWFkZSBjb25kaXRpb25zIGFwcGx5LjwvTEk+Ci0gIDxMST5NYWtlIGEgY2hhbmdlIGluIHRoZSBEZXNpZ24gcGFnZS48L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBjaGFuZ2VzLW1hZGUgY29uZGl0aW9ucyBhcHBseS48L0xJPgotICA8TEk+RmlsZS0mZ3Q7U2F2ZSBBbGw8Qj48L0I+LjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIG5vLWNoYW5nZXMtbWFkZSBjb25kaXRpb25zIGFwcGx5LjwvTEk+Ci0gIDxMST5NYWtlIGEgY2hhbmdlIGluIHRoZSBQcm9wZXJ0aWVzIHZpZXcuPC9MST4KLSAgPExJPlZlcmlmeSB0aGUgY2hhbmdlcy1tYWRlIGNvbmRpdGlvbnMgYXBwbHkuPC9MST4KLSAgPExJPlNlbGVjdCA8Qj5TYXZlPC9CPiBmcm9tIHRoZSBTb3VyY2UgcG9wdXAgbWVudS48L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBuby1jaGFuZ2VzLW1hZGUgY29uZGl0aW9ucyBhcHBseS48L0xJPgotICA8TEk+Q2xvc2UgYW5kIHRoZW4gcmVvcGVuIHRoZSBmaWxlLjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIGNoYW5nZXMgdGhhdCB3ZXJlIG1hZGUgaW4gdGhlIHByZXZpb3VzIHN0ZXBzIGFwcGVhciBpbiB0aGUgRGVzaWduIGFuZCBTb3VyY2UgcGFnZXMuPC9MST4KLTwvVUw+Ci08UD48Qj5TYXZpbmcgYW4gWE1MIEZpbGUgYWNyb3NzIG11bHRpcGxlIHBlcnNwZWN0aXZlcyAob3B0aW9uYWwpPC9CPjwvUD4KLTxVTD4KLSAgPExJPk9wZW4gYW55IHhtbCBmaWxlIGluIHRoZSA8Qj5YTUxUZXN0MjwvQj4gcHJvamVjdC48L0xJPgotICA8TEk+TWFrZSBhIGNoYW5nZSB0byB0aGUgZmlsZS48L0xJPgotICA8TEk+T3BlbiBhbm90aGVyIFhNTCBQZXJzcGVjdGl2ZSBieToKLSAgPFVMPgotICAgIDxMST48Qj5zZWxlY3RpbmcgUGVyc3BlY3RpdmUtJmd0O09wZW4tJmd0O090aGVyLi4uPC9CPjwvTEk+Ci0gICAgPExJPndoaWxlIGhvbGRpbmcgZG93biB0aGUgPEI+U2hpZnQ8L0I+IGtleSwgc2VsZWN0IDxCPlhNTDwvQj4uPC9MST4KLSAgPC9VTD48L0xJPgotICA8TEk+VmVyaWZ5IGFub3RoZXIgWE1MIFBlcnNwZWN0aXZlIGJ1dHRvbiBhcHBlYXJzIGluIHRoZSBsZWZ0aGFuZCBzaWRlIG9mIHRoZSBXb3JrYmVuY2ggdG8gcmVwcmVzZW50IHRoaXMgc2Vjb25kIHBlcnNwZWN0aXZlLjwvTEk+Ci0gIDxMST5PcGVuIHRoZSBzYW1lIHhtbCBmaWxlIGFzIGluIHRoZSBmaXJzdCBzdGVwIGFib3ZlLjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIGNoYW5nZXMtbWFkZSBjb25kaXRpb25zIGFwcGx5IGluIGJvdGggWE1MIFBlcnNwZWN0aXZlcyBhbmQgdmVyaWZ5IHRoYXQgdGhlIGNoYW5nZXMgbWFkZSB0byB0aGUgZmlsZSBpbiB0aGUgZmlyc3QgcGVyc3BlY3RpdmUgYXBwZWFyIGluIHRoZSBzYW1lIGZpbGUgaW4gdGhlIHNlY29uZCBwZXJzcGVjdGl2ZS4gPEZPTlQgY29sb3I9IiNmZjAwMDAiPlRoZSAqIG5ldmVyIGFwcGVhcnMgaW4gdGhlIGZpbGUgdGFiIG9mIHRoZSBzZWNvbmQgcGVyc3BlY3RpdmUgZXZlbiB3aGVuIG1ha2UgY2hhbmdlcyB0byB0aGUgZmlsZSBpbiB0aGUgc2Vjb25kIHBlcnNwZWN0aXZlLiBUYWxrIHRvIERhdmlkLjwvRk9OVD48L0xJPgotICA8TEk+TWFrZSBzb21lIGNoYW5nZXMgdG8gdGhlIGZpbGUgaW4gdGhlIHNlY29uZCBwZXJzcGVjdGl2ZS48L0xJPgotICA8TEk+VmVyaWZ5IHRoZXNlIGNoYW5nZXMgYXBwZWFyIGluIHRoZSBzYW1lIGZpbGUgaW4gdGhlIGZpcnN0IHBlcnNwZWN0aXZlLjwvTEk+Ci0gIDxMST5DbG9zZSB0aGUgZmlsZSBpbiB0aGUgc2Vjb25kIHBlcnNwZWN0aXZlIGFuZCByZXNwb25kIDxCPlllczwvQj4gdG8gdGhlIHNhdmUgY2hhbmdlcyBwcm9tcHQuPC9MST4KLSAgPExJPlZlcmlmeSB0aGUgbm8tY2hhbmdlcy1tYWRlIGNvbmRpdGlvbiBhcHBsaWVzIGluIHRoZSBmaXJzdCBwZXJzcGVjdGl2ZS48L0xJPgotPC9VTD4KLTxQPjxCPlZhbGlkYXRpbmcgYSBub24gd2VsbCBmb3JtZWQgWE1MIEZpbGUgKG5vIERURC9TY2hlbWEpPC9CPjxCUj4KLShOT1RFOiBpdCdzIGltcG9ydGFudCB0aGF0IHRoZSBmb2xsb3dpbmcgYmUgdHlwZWQgaW4uIFRoaXMgdGVzdCBjYXNlIHRyaWVzIHRvIGNvdmVyIHNvbWUgb2YgdGhlIG1vcmUgY29tbW9uIGVycm9ycyB0aGF0IHJlbmRlciBhbiBYTUwgZmlsZSBhcyBub3QgYmVpbmcgd2VsbC1mb3JtZWQuIEl0IGlzIG5vdCBpbnRlbmRlZCB0byB2ZXJpZnkgdGhhdCBhbGwgcG9zc2libGUgZXJyb3JzIGFyZSBiZWluZyBkZXRlY3RlZCBhbmQgZ3JhY2VmdWxseSBoYW5kbGVkLiApPC9QPgotPFVMPgotICA8TEk+U2VsZWN0IHRoZSA8Qj5DcmVhdGUgYSBuZXcgWE1MIGZpbGU8L0I+IHRvb2xiYXIgYnV0dG9uLjwvTEk+PExJPkFjY2VwdCB0aGUgZGVmYXVsdCB0byA8Qj5DcmVhdGUgYSBuZXcgWE1MIGZpbGU8L0I+PC9MST4KLSAgPExJPkdvIHRvIHRoZSBOZXh0IHBhZ2UKLSAgICA8VUw+Ci0gICAgICAgIDxMST5TZWxlY3QgPEI+WE1MVGVzdDI8L0I+IGFzIHRoZSBmb2xkZXI8L0xJPgotICAgICAgICA8TEk+U3BlY2lmeSBhIEZpbGUgbmFtZSBvZiA8Qj5Ob25XZWxsRm9ybWVkPC9CPjwvTEk+Ci0gICAgICAgIDxMST5TZWxlY3QgPEI+RmluaXNoPC9CPjwvTEk+Ci0gIDwvVUw+PC9MST4KLSAgPExJPlByb21wdCBmb3IgY29udGVudCBhc3Npc3QuPC9MST4KLSAgPExJPlNlbGVjdCA8Qj4mbHQ7P3htbCB2ZXJzaW9uPSZxdW90OzEuMCZxdW90OyBlbmNvZGluZz0mcXVvdDtVVEYtOCZxdW90Oz8mZ3Q7LjwvQj48L0xJPgotICA8TEk+Q3JlYXRlIGEgbmV3IGxpbmUgYWZ0ZXIgdGhlIFhNTCBkZWNsYXJhdGlvbi48L0xJPgotICA8TEk+UHJvbXB0IGZvciBjb250ZW50IGFzc2lzdC48L0xJPgotICA8TEk+U2VsZWN0IGNvbW1lbnQuPC9MST4KLSAgPExJPkVtYmVkIG1vcmUgdGhhbiAyIGNvbnNlY3V0aXZlIGRhc2hlcyBpbiB0aGUgY29tbWVudC4gCi0gICAgICAgIDxGT05UIGNvbG9yPSIjMDAwMGZmIj4oTk9URTogbW9yZSB0aGFuIDIgY29uc2VjdXRpdmUgZGFzaGVzIGNhbiBub3QgYmUgZW1iZWRkZWQgd2l0aGluIGEgY29tbWVudCk8L0ZPTlQ+PC9MST4KLSAgPExJPlR5cGUgaW4gdGhlIHJlbWFpbmluZyBsaW5lcyBhcyBzaG93biBiZWxvdzogCi0gICAgICAgIDxGT05UIGNvbG9yPSIjZmYwMDAwIj4oSSBjYW4ndCBzaG93IHRoZSBsaW5lcyB1bnRpbCBkZWZlY3QgMTc3NzU1IGlzIGZpeGVkIC4uLiB1bnRpbCB0aGVuLCBoZXJlJ3MgdGhlIHR5cGUgb2YgdGhpbmdzIHRoYXQgY2F1c2UgCi0gICAgICAgIGEgZG9jdW1lbnQgdG8gbm90IGJlIHdlbGwtZm9ybWVkKTo8L0ZPTlQ+Ci0gIDxVTD4KLSAgICA8TEk+Y3JlYXRlIGEgc3RhcnQgYW5kIGVuZCB0YWcgdGhhdCBkb24ndCBtYXRjaCBpbiB0aGVpciBjYXNlIHNlbnNpdGl2aXR5IAotICAgICAgICAoZS5nLiwgJmx0O3RhZyZndDsgYW5kICZsdDsvVGFnJmd0OykuIDwvTEk+Ci0gICAgPExJPmNyZWF0ZSBhIHN0YXJ0IGFuZCBlbmQgdGFnIHdoZXJlIHRoZSBzdGFydCB0YWcgY29udGFpbnMgYW4gYXR0cmlidXRlIHZhbHVlIHRoYXQgaXMgbm90IAotICAgICAgICBlbmNsb3NlZCBpbiBxdW90ZXMuCi0gICAgICAgIDxGT05UIGNvbG9yPSIjMDAwMGZmIj4oTk9URTogdGhpcyBpcyBwZXJtaXR0ZWQgaW4gSFRNTCwgYnV0IG5vdCBYTUwpPC9GT05UPjwvTEk+Ci0gICAgPExJPmNyZWF0ZSB0YWdzIHRoYXQgYXJlIG5vdCBwcm9wZXJseSBuZXN0ZWQuCi0gICAgICAgIDxGT05UIGNvbG9yPSIjMDAwMGZmIj4oTk9URTogYSBjaGlsZCB0YWcgbXVzdCBiZSBjb21wbGV0ZWQgYmVmb3JlIGl0cyBwYXJlbnQgdGFnKTwvRk9OVD48L0xJPgotICAgIDxMST5jcmVhdGUgYSBzdGFydCB0YWcgd2l0aG91dCBhIGNvcnJlc29uZGluZyBlbmQgdGFnLgotICAgICAgICA8Rk9OVCBjb2xvcj0iIzAwMDBmZiI+KE5PVEU6IGFsbCBzdGFydCB0YWdzIG11c3QgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgZW5kIHRhZyB1bmxlc3MgdGhlIAotICAgICAgICB0YWcgaXMgYW4gZW1wdHkgdGFnLCBpbiB3aGljaCBjYXNlIHRoZSBzaG9ydGhhbmQgdmVyc2lvbiBjYW4gYmUgdXNlZCAoJmx0O3Nob3J0VGFnLyZndDspKS48L0ZPTlQ+PC9MST4KLSAgICA8TEk+ZG8gbm90IHByb3ZpZGUgYW4gYXR0cmlidXRlIHZhbHVlICg9JnF1b3Q7dmFsdWUmcXVvdDspLgotICAgICAgICA8Rk9OVCBjb2xvcj0iIzAwMDBmZiI+KE5PVEU6IHRoaXMgaXMgcGVybWl0dGVkIGluIEhUTUwgZm9yIHRob3NlIGF0dHJpYnV0ZXMgdGhhdCBoYXZlIAotICAgICAgICBvbmx5IG9uZSB2YWx1ZSwgYnV0IGl0J3Mgbm90IHZhbGlkIGluIFhNTCk8L0ZPTlQ+PC9MST4KLSAgICAgPExJPmRlZmluZSBhbiBhdHRyaWJ1dGUgbW9yZSB0aGFuIG9uY2UgaW4gYSBzdGFydCB0YWcuPC9MST4KLSAgPC9VTD48L0xJPgotICA8TEk+U2F2ZSB0aGUgZmlsZS48L0xJPgotICA8TEk+VmVyaWZ5IGVycm9ycyBhcmUgbGlzdGVkIGluIHRoZSBUYXNrcyB2aWV3IGZvciB0aGUgYWJvdmUgdmlvbGF0aW9ucyBhbmQgdGhhdCBlcnJvciBtYXJrZXJzIGFwcGVhciBvbiB0aGUgYXBwcm9wcmlhdGUgCi0gICAgICAgICBsaW5lcyBpbiB0aGUgU291cmNlIHBhZ2UuIDxGT05UIGNvbG9yPSIjZmYwMDAwIj5JJ20gbm90IHN1cmUgaG93IHRoZSBEZXNpZ24gcGFnZSBoYW5kbGVzIGFueSBvZiB0aGVzZSB2aW9sYXRpb25zIAotICAgICAgICAgYW5kIHdoYXQgd2lsbCBhcHBlYXIgaW4gdGhlIE91dGxpbmUgYW5kIFByb3BlcnRpZXMgdmlldy4gVGFsayB0byBDcmFpZyBhbmQgRGF2aWQuPC9GT05UPjwvTEk+Ci0gIDxMST5SZW9wZW4gdGhlIGZpbGUgYW5kIHZlcmlmeSBldmVyeXRoaW5nIHdhcyBzYXZlZC48L0xJPgotPC9VTD4KLQotCi08UD48Qj5WYWxpZGF0ZSBhbiBYTUwgRmlsZSBiYXNlZCBvbiBhIERURDwvQj48L1A+Ci08VUw+Ci08TEk+T3BlbiA8Qj5mcm9tU2NyYXRjaC54bWw8L0I+LjwvTEk+Ci08TEk+RGVsZXRlIGEgY2hhcmFjdGVyIGZyb20gb25lIG9mIHRoZSBzdGFydCB0YWdzIChtaXN0eXBpbmcgYSB0YWcgaXMgbm90IHVuY29tbW9uKS48L0xJPgotPExJPlByb21wdCBmb3IgY29udGVudCBhc3Npc3Qgd2l0aGluIHRoZSBiYWQgdGFnLiBWZXJpZnkgYSBtZXNzYWdlIGFwcGVhcnMgaW4gdGhlIHN0YXR1cyBhcmVhCi1vZiB0aGUgV29ya2JlbmNoIGluZGljYXRpbmcgdGhhdCB0aGUgYmFkIHRhZyBpcyBhbiB1bmtub3duIHRhZy48L0xJPgotPExJPlNlbGVjdCB0aGUgPEI+VmFsaWRhdGU8L0I+IHRvb2xiYXIgYnV0dG9uLjwvTEk+Ci08TEk+VmVyaWZ5IGFuIGVycm9yIGFwcGVhcnMgaW4gdGhlIFRhc2tzIHZpZXcgYW5kIGFuIGVycm9yIG1hcmtlciBhcHBlYXJzIGluIHRoZSBTb3VyY2UgcGFnZQotdG8gZmxhZyB0aGUgaW52YWxpZCB0YWcuPC9MST4KLTxMST5TZWxlY3QgPEI+RWRpdC0+VW5kbzwvQj4gZnJvbSB0aGUgU291cmNlIHBhZ2UuPC9MST4KLTxMST5WZXJpZnkgdGhlIGJhZCB0YWcgZXJyb3Igbm8gbG9uZ2VyIGFwcGVhcnMgaW4gdGhlIFRhc2tzIHZpZXcuPC9MST4KLTxMST5SZW1vdmUgdGhlIDxCPkhlYWRlcjwvQj4gZW5kIHRhZyBmcm9tIHRoZSBTb3VyY2UgcGFnZS48L0xJPgotPExJPlNhdmUgdGhlIGZpbGUuPC9MST4KLTxMST5WZXJpZnkgYW4gZXJyb3IgYXBwZWFycyBpbiB0aGUgVGFza3MgdmlldyBpbmRpY2F0aW5nIHRoYXQgdGhlIDxCPkhlYWRlcjwvQj4gZW5kIHRhZyBpcyBtaXNzaW5nPC9MST4KLTxMST5DbG9zZSB0aGUgZmlsZSwgcmVzcG9uZGluZyA8Qj5ZZXM8L0I+IHRvIHRoZSBzYXZlIGNoYW5nZXMgcHJvbXB0LjwvTEk+Ci08TEk+RG91YmxlLWNsaWNrIG9uIHRoZSBlcnJvciBpbiB0aGUgVGFza3MgdmlldywgYW5kIHZlcmlmeSA8Qj5mcm9tU2NyYXRjaC54bWw8L0I+IG9wZW5zIHRvIHRoZQotYXBwcm9wcmlhdGUgbGluZSBpbiB0aGUgU291cmNlIHBhZ2Ugb2YgdGhlIFhNTCBFZGl0b3IuPC9MST4KLTxMST5IZXJlJ3Mgc29tZSBvdGhlciB2aW9sYXRpb25zIHRoYXQgY2FuIGJlIGF0dGVtcHRlZDoKLTxVTD4KLTxMST5TcGVjaWZ5IGEgYmFkIGF0dHJpYnV0ZS48L0xJPgotPExJPlNwZWNpZnkgYSBiYWQgYXR0cmlidXRlIHZhbHVlLjwvTEk+Ci08TEk+U3BlY2lmeSBjaGlsZCB0YWdzIG91dCBvZiBzZXF1ZW5jaW5nIG9yZGVyPC9MST4KLTxMST5WaW9sYXRlIHRoZSBvY2N1cnJlbmNlIGluZGljYXRvciBmb3IgYSB0YWcgKGUuZy4sIGlmIHRoZSBEVEQgc2hvd3MgPywgdGhlbiBvbmx5Ci0wIG9yIDEgb2NjdXJyZW5jZXMgb2YgdGhlIHRhZyBpcyBwZXJtaXR0ZWQpLgotPC9VTD48L0xJPgotPExJPlNhdmUgdGhlIGZpbGUuPC9MST4KLTxMST5WZXJpZnkgZXJyb3JzIGFyZSBsaXN0ZWQgaW4gdGhlIFRhc2tzIHZpZXcgZm9yIHRoZSBhYm92ZSB2aW9sYXRpb25zIGFuZCB0aGF0IGVycm9yIG1hcmtlcnMgYXBwZWFyIG9uIHRoZSBhcHByb3ByaWF0ZSAKLWxpbmVzIGluIHRoZSBTb3VyY2UgcGFnZS4gPEZPTlQgY29sb3I9IiNmZjAwMDAiPkknbSBub3Qgc3VyZSBob3cgdGhlIERlc2lnbiBwYWdlIGhhbmRsZXMgYW55IG9mIHRoZXNlIHZpb2xhdGlvbnMgCi1hbmQgd2hhdCB3aWxsIGFwcGVhciBpbiB0aGUgT3V0bGluZSBhbmQgUHJvcGVydGllcyB2aWV3LiBUYWxrIHRvIENyYWlnIGFuZCBEYXZpZC48L0ZPTlQ+PC9MST4KLTxMST5SZW9wZW4gdGhlIGZpbGUgYW5kIHZlcmlmeSBldmVyeXRoaW5nIHdhcyBzYXZlZC48L0xJPgotPC9VTD4KLQotPCEtLSAgcmVtb3ZlZCBzaW5jZSBkb25lIGVsc2V3aGVyZSBhcyBwYXJ0IG9mIG90aGVyIHNjZW5lcmlvcwotPFA+PEI+VmFsaWRhdGUgYW4gWE1MIEZpbGUgYmFzZWQgb24gYSBTY2hlbWE8L0I+PEJSPgotLS0+Ci08SU1HIGJvcmRlcj0iMCIgaGVpZ2h0PSI2MyIgc3JjPSJ1MDExYW5pLmdpZiIgd2lkdGg9IjYzIj48L1A+Ci0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZSBTcGVjaWZpYyB0ZXN0IGNhc2VzCi0gICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLT4KLTxIMj48Qj48Rk9OVCBjb2xvcj0iIzAwMDBmZiI+U291cmNlIFNwZWNpZmljIHRlc3QgY2FzZXMgKG9wdGlvbmFsKTwvRk9OVD48L0I+PC9IMj4KLTxQPjxCPlVzaW5nIHRoZSBBdXRvIENvbXBsZXRpb24gQ29udGVudCBBc3Npc3QgUHJlZmVyZW5jZTwvQj48QlI+Ci08VUw+Ci08TEk+T3BlbiBhIGFueSBYTUwgZmlsZSB0aGF0IGhhcyBlbm91Z2ggdGFncyB0byBwcm92aWRlIHN5bnRheCBoaWdodGxpZ2h0aW5nLjwvTEk+Ci08TEk+V2hpbGUgdGhhdCBmaWxlIGlzIGxlZnQgb3BlbiwgZ28gdG8gdGhlIFByZWZlcmVuY2VzIHBhZ2UsIHNlbGVjdAotWE1MIEVkaXRvciwgdGhlbiBTb3VyY2UgU3R5bGVzLiA8L0xJPgotPExJPk9uIHRoYXQgcGFnZSwgdXNlIHRoZSBtb3VzZSB0byAic2VsZWN0IiBhIHRhZyBuYW1lLiBUaGUgdGFnIG5hbWUgaXMgbm90IGxpdGVyYWxseQotc2VsZWN0ZWQsIGJ1dCB3aGVuIHlvdSBjbGljayBvbiBhbiBlbGVtZW50IGluIHRoZSBleGFtcGxlIHRleHQsIHRoZSBsaXN0Ci1hYm92ZSBpdCB3aWxsIGRpc3BsYXkgdGhlIHR5cGUgb2YgZWxlbWVudCBpdCBpcywgYW5kIHdoYXQgaXRzIGN1cnJlbnQgY29sb3JzIGFyZS48L0xJPgotPExJPkZvciAidGFnIG5hbWUiLCBzZWxlY3QgdGhlIGJvbGQgY2hlY2sgYm94LiBUaGVuIHByZXNzIEFwcGx5LCBhbmQgeW91IHNob3VsZAotc2VlIHRoZSBjaGFuZ2UgdGFrZSBlZmZlY3QgaW4geW91ciBhY3RpdmUgZWRpdG9yLjwvTEk+Ci08TEk+U2VsZWN0ICJEZWZhdWx0cyIgYW5kIG1ha2Ugc3VyZSB0aGUgdGFnIG5hbWVzIGFyZSBzZXQgYmFjayB0byBub3QgYm9sZC48L0xJPgotPC9VTD4KLTxJTUcgYm9yZGVyPSIwIiBoZWlnaHQ9IjYzIiBzcmM9InUwMTFhbmkuZ2lmIiB3aWR0aD0iNjMiPjwvUD4KLTxQPjxCPkRvdWJsZS1DbGlja2luZyBXaXRoaW4gdGhlIFNvdXJjZTwvQj4gPEJSPgotKE5PVEU6IGlmIHlvdSBjb250aW51ZSB0byBkb3VibGUtY2xpY2sgYXQgYSBnaXZlbiBjdXJzb3IgcG9zaXRpb24sIHRoZSBzZWxlY3Rpb24gYXJlYSB3aWxsIGNvbnRpbnVlIHRvIGV4cGFuZC4gV2hlbiB0aGUgbWF4aW11bSByZWdpb24gYXJlYSBoYXMgYmVlbiByZWFjaGVkLCB0aGUgbmV4dCBkb3VibGUtY2xpY2sgd2lsbCBjYXVzZSB0aGUgb3JpZ2luYWwgc2VsZWN0aW9uLiBTbywgdGhlIHNlbGVjdGlvbnMgd2lsbCB3cmFwL2N5Y2xlLiA8Rk9OVCBjb2xvcj0iIzAwMDBmZiI+Q29vbCE8L0ZPTlQ+KS48L1A+Ci08VUw+Ci0gIDxMST5PcGVuIDxCPkpvYkRlc2MueG1sPC9CPi48L0xJPgotICA8TEk+RG91YmxlLWNsaWNraW5nIHdpdGhpbiB0YWcgY29udGVudDoKLSAgPFVMPgotICAgIDxMST5Eb3VibGUtY2xpY2sgd2l0aGluIDxCPk1pZGRsZXdhcmU8L0I+IG9uIGxpbmUgNy48L0xJPgotICAgIDxMST5WZXJpZnkgPEI+TWlkZGxld2FyZTwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIFNvdXJjZSBhbmQgRGVzaWduIHBhZ2VzIGFuZCA8Qj5CdXNUeXBlPC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgT3V0bGluZSB2aWV3LiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+Tm90IHN1cmUgd2hhdCB0aGUgUHJvcGVydGllcyB2aWV3IGlzIHN1cHBvc2VkIHRvIHNob3cuIEl0IGdvZXMgYmxhbmsuIFNlZSBkZWZlY3QgMTc3NzUzLiBBbHNvLCA8Qj5NaWRkbGV3YXJlPC9CPiB3YXNuJ3Qgc2VsZWN0ZWQgaW4gdGhlIERlc2lnbiBwYWdlIGFzIGhhZCBleHBlY3RlZC4gVGhlIERlc2lnbiBwYWdlIG9ubHkgc2VlbXMgdG8gc3RheSBpbiBzeW5jIGF0IHRoZSBlbGVtZW50L3RhZyBsZXZlbCBsaWtlIHRoZSBPdXRsaW5lIHZpZXcuIFRhbGsgdG8gQ3JhaWcgYWJvdXQgdGhpcy48L0ZPTlQ+PC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNrIGFnYWluIGF0IHRoZSBzYW1lIGN1cnNvciBwb3NpdGlvbi48L0xJPgotICAgIDxMST5WZXJpZnkgPEI+QXBwbGljYXRpb24gYW5kIE1pZGRsZXdhcmUgU29mdHdhcmU8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBTb3VyY2UgYW5kIERlc2lnbiBwYWdlcyBhbmQgPEI+QnVzVHlwZTwvQj4gcmVtYWlucyB0byBiZSB0aGUgb25seSB0aGluZyBzZWxlY3RlZCBpbiB0aGUgT3V0bGluZSB2aWV3LjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGlja2luZyBhZ2FpbiB3aWxsIGNhdXNlIGN5Y2xpbmcgYmFjayB0byB0aGUgb3JpZ2luYWwgc2VsZWN0aW9uLjwvTEk+Ci0gIDwvVUw+PC9MST4KLSAgPExJPkRvdWJsZS1jbGlja2luZyB3aXRoaW4gYSB0YWcgbmFtZToKLSAgPFVMPgotICAgIDxMST5Eb3VibGUtY2xpY2sgd2l0aGluIDxCPkhvd1RvQXBwbHk8L0I+IG9uIGxpbmUgNjEuPC9MST4KLSAgICA8TEk+VmVyaWZ5IDxCPkhvd1RvQXBwbHk8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBTb3VyY2UgcGFnZSwgRGVzaWduIHBhZ2UsIGFuZCBPdXRsaW5lIHZpZXcuIAotICAgICAgICA8Qj5jbGFzczwvQj4sIDxCPmRpc3RyaWJ1dGU8L0I+LCA8Qj5pZDwvQj4sIGFuZCA8Qj5uYW1lPC9CPiBzaG91bGQgYXBwZWFyIGluIHRoZSAKLSAgICAgICAgUHJvcGVydGllcyB2aWV3LiBPbmx5IDxCPmRpc3RyaWJ1dGU8L0I+IHNob3VsZCBzaG93IGEgdmFsdWUuPC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNrIGFnYWluIGF0IHRoZSBzYW1lIGN1cnNvciBwb3NpdGlvbi48L0xJPgotICAgIDxMST5WZXJpZnkgdGhlIHdob2xlIDxCPkhvd1RvQXBwbHk8L0I+IHN0YXJ0IHRhZyAoaW5jbHVkaW5nIGl0cyBkZWxpbWl0ZXJzKSBpcyBzZWxlY3RlZCAKLSAgICAgICAgaW4gdGhlIFNvdXJjZSBwYWdlLiA8Qj5Ib3dUb0FwcGx5PC9CPiBzaG91bGQgcmVtYWluIHNlbGVjdGVkIGluCi0gICAgICAgIHRoZSBEZXNpZ24gcGFnZSBhbmQgT3V0bGluZSB2aWV3LiA8Qj48Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+SG93VG9BcHBseTwvRk9OVD48L0I+PEZPTlQgY29sb3I9IiNmZjAwMDAiPiBhbmQgYWxsIGRlc2NlbmRlbnRzIGJlY29tZSBzZWxlY3RlZCBpbiB0aGUgT3V0bGluZSB2aWV3IChkZWZlY3QgMTc3NzUyKS4gQWxzbywgdGhlIFByb3BlcnRpZXMgdmlldyBzaG93cyBubyBwcm9wZXJ0aWVzIChkZWZlY3QgMTc3NzUzKS48L0ZPTlQ+PC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNraW5nIGFnYWluIHdpbGwgY2F1c2UgY3ljbGluZyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzZWxlY3Rpb24uPC9MST4KLSAgPC9VTD48L0xJPgotICA8TEk+RG91YmxlLWNsaWNraW5nIHdpdGhpbiBhbiBhdHRyaWJ1dGUgbmFtZToKLSAgPFVMPgotICAgIDxMST5UeXBlIDxCPkN0cmwrRW5kPC9CPiB0byBwb3NpdGlvbiB0aGUgY3Vyc29yIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUuPC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNrIHdpdGhpbiA8Qj5kaXN0cmlidXRlPC9CPiBvbiBsaW5lIDYxLiBWZXJpZnkgPEI+ZGlzdHJpYnV0ZTwvQj4gaXMgc2VsZWN0ZWQgCi0gICAgICAgIGluIHRoZSBTb3VyY2UgcGFnZSBhbmQgPEI+SG93VG9BcHBseTwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIERlc2lnbiBwYWdlIGFuZCBPdXRsaW5lIAotICAgICAgICB2aWV3LiA8Qj5jbGFzczwvQj4sIDxCPmRpc3RyaWJ1dGU8L0I+LCA8Qj5pZDwvQj4sIGFuZCA8Qj5uYW1lPC9CPiBzaG91bGQgYXBwZWFyIGluIAotICAgICAgICB0aGUgUHJvcGVydGllcyB2aWV3LiBPbmx5IDxCPmRpc3RyaWJ1dGU8L0I+IHNob3VsZCBzaG93IGEgdmFsdWUuPC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNrIGF0IHRoZSBzYW1lIGN1cnNvciBwb3NpdGlvbi4gVmVyaWZ5IDxCPmRpc3RyaWJ1dGU9ImludGVybmFsIjwvQj4gaXMKLSAgICAgICAgc2VsZWN0ZWQgaW4gdGhlIFNvdXJjZS4gTm90aGluZyBzaG91bGQgY2hhbmdlIGluIHRoZSBEZXNpZ24gcGFnZSBvciB2aWV3cy48L0xJPiAgICAgICAgICAgICAgICAgCi0gICAgPExJPkRvdWJsZS1jbGljayBhdCB0aGUgc2FtZSBjdXJzb3IgcG9zaXRpb24uIFZlcmlmeSB0aGUgd2hvbGUgPEI+SG93VG9BcHBseTwvQj4gc3RhcnQgdGFnIGlzIHNlbGVjdGVkIGluIHRoZSBTb3VyY2UgcGFnZSAoaW5jbHVkaW5nIGl0cyBkZWxpbWl0ZXJzKS4gTm90aGluZyBzaG91bGQgY2hhbmdlIGluIHRoZSBEZXNpZ24gcGFnZSBvciB2aWV3cy48Qj48Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+SG93VG9BcHBseTwvRk9OVD48L0I+PEZPTlQgY29sb3I9IiNmZjAwMDAiPiBhbmQgYWxsIGRlc2NlbmRlbnRzIGJlY29tZSBzZWxlY3RlZCBpbiB0aGUgT3V0bGluZSB2aWV3IChkZWZlY3QgMTc3NzUyKS4gQWxzbywgdGhlIFByb3BlcnRpZXMgdmlldyBzaG93cyBubyBwcm9wZXJ0aWVzIChkZWZlY3QgMTc3NzUzKS48L0ZPTlQ+PC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNraW5nIGFnYWluIHdpbGwgY2F1c2UgY3ljbGluZyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzZWxlY3Rpb24uPC9MST4KLSAgPC9VTD48L0xJPgotIDxMST5Eb3VibGUtY2xpY2tpbmcgd2l0aGluIGFuIGF0dHJpYnV0ZSB2YWx1ZToKLSAgPFVMPgotICAgIDxMST5UeXBlIDxCPkN0cmwrSG9tZTwvQj4gdG8gcG9zaXRpb24gdGhlIGN1cnNvciBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlLjwvTEk+Ci0gICAgPExJPlNjcm9sbCBkb3duIHN1Y2ggdGhhdCBsaW5lIDYxIGlzIHZpc2libGUuPC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNrIHdpdGhpbiA8Qj5pbnRlcm5hbDwvQj4gb24gbGluZSA2MS4gVmVyaWZ5IDxCPmludGVybmFsPC9CPiBpcyBzZWxlY3RlZCAKLSAgICAgICAgaW4gdGhlIFNvdXJjZSBwYWdlIGFuZCA8Qj5Ib3dUb0FwcGx5PC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgRGVzaWduIHBhZ2UgYW5kIE91dGxpbmUgCi0gICAgICAgIHZpZXcuIDxCPmNsYXNzPC9CPiwgPEI+ZGlzdHJpYnV0ZTwvQj4sIDxCPmlkPC9CPiwgYW5kIDxCPm5hbWU8L0I+IHNob3VsZCBhcHBlYXIgaW4gCi0gICAgICAgIHRoZSBQcm9wZXJ0aWVzIHZpZXcuIE9ubHkgPEI+ZGlzdHJpYnV0ZTwvQj4gc2hvdWxkIHNob3cgYSB2YWx1ZS48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2sgYXQgdGhlIHNhbWUgY3Vyc29yIHBvc2l0aW9uLiBWZXJpZnkgPEI+ImludGVybmFsIjwvQj4gaXMKLSAgICAgICAgc2VsZWN0ZWQgaW4gdGhlIFNvdXJjZS4gTm90aGluZyBzaG91bGQgY2hhbmdlIGluIHRoZSBEZXNpZ24gcGFnZSBvciB2aWV3cy48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2sgYXQgdGhlIHNhbWUgY3Vyc29yIHBvc2l0aW9uLiBWZXJpZnkgPEI+ZGlzdHJpYnV0ZT0iaW50ZXJuYWwiPC9CPiBpcwotICAgICAgICBzZWxlY3RlZCBpbiB0aGUgU291cmNlLiBOb3RoaW5nIHNob3VsZCBjaGFuZ2UgaW4gdGhlIERlc2lnbiBwYWdlIG9yIHZpZXdzLjwvTEk+ICAgICAgICAgICAgICAgICAKLSAgICA8TEk+RG91YmxlLWNsaWNrIGF0IHRoZSBzYW1lIGN1cnNvciBwb3NpdGlvbi4gVmVyaWZ5IHRoZSB3aG9sZSA8Qj5Ib3dUb0FwcGx5PC9CPiBzdGFydCB0YWcgaXMgc2VsZWN0ZWQgaW4gdGhlIFNvdXJjZSBwYWdlIChpbmNsdWRpbmcgaXRzIGRlbGltaXRlcnMpLiBOb3RoaW5nIHNob3VsZCBjaGFuZ2UgaW4gdGhlIERlc2lnbiBwYWdlIG9yIHZpZXdzLiA8Qj48Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+SG93VG9BcHBseTwvRk9OVD48L0I+PEZPTlQgY29sb3I9IiNmZjAwMDAiPiBhbmQgYWxsIGRlc2NlbmRlbnRzIGJlY29tZSBzZWxlY3RlZCBpbiB0aGUgT3V0bGluZSB2aWV3IChkZWZlY3QgMTc3NzUyKS4gQWxzbywgdGhlIFByb3BlcnRpZXMgdmlldyBzaG93cyBubyBwcm9wZXJ0aWVzIChkZWZlY3QgMTc3NzUzKS48L0ZPTlQ+PC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNraW5nIGFnYWluIHdpbGwgY2F1c2UgY3ljbGluZyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzZWxlY3Rpb24uPC9MST4KLSAgPC9VTD48L0xJPgotPC9VTD4KLQotPFA+PEI+Rm9ybWF0dGluZyBhIEZpbGUgQ3JlYXRlZCBieSBEaWZmZXJlbnQgRWRpdG9yczwvQj48QlI+Ci08dWw+Ci08bGk+Ci1JbXBvcnQgdGhlIDxiPkpvYlBvc3RpbmcuZHRkPC9iPiBhbmQgPGI+Sm9iRGVzYy54bWw8L2I+PC9saT4KLQotPGxpPgotT3BlbiB0aGUgSm9iRGVzYy54bWwuIENoZWNrIHRoZSBzb3VyY2UgZm9yIGluZGVudGF0aW9uIHRvIHNlZSBpZiBpdCBwcmVzZXJ2ZXMKLXRoZSB3aGl0ZSBzcGFjZSBmcm9tIHRoZSBvcmlnaW5hbCBkb2N1bWVudC48L2xpPgotCi08bGk+Ci1UaGUgb3JpZ25hbCBkb2N1bWVudCB1c2VzIHNwYWNlcyBhbmQgdGFicywgc28gdGhlIGZvcm1hdHRpbmcgd2lsbCBhcHBlYXIgYSBsaXR0bGUgd3JvbmcuCi1CeSB1c2luZyB0aGUgcmlnaHQvbGVmdCBhcnJvd3MsIHZlcmlmeSB0aGF0IHNvbWUgc3BhY2UgaXMgc3BhY2VzIGFuZCBzb21lIHNwYWNlCi1pcyB0YWIgY2hhcmFjdGVycy48L2xpPgotPExJPlVzZSAnZm9ybWF0IGRvY3VtZW50JyB0byBiZSBzdXJlIGl0IGZvcm1hdHMuIDwvTEk+Ci08TEk+VGhlIGRlZmF1bHQgaXMgdG8gZm9ybWF0IHdpdGggc3BhY2VzIC4uLiB2ZXJpZnkgb25seSBzcGFjZXMgcmVtYWluIGluIGZpbGUsIG5vdCB0YWIgY2hhcmFjdGVzLiAKLShKdXN0IGEgbGl0dGxlIG1vdmVtZW50IHdpdGggdGhlIGFycm93IGtleXMgc2hvdWxkIHN1ZmZpY2UuPC9MST4KLTxMST5HbyB0byB0aGUgcHJlZmVyZW5jZSBwYWdlIHRvIGNoYW5nZSB0aGUgZm9ybWF0IHNldHRpbmdzIGZvciB0aGUgWE1MIEVkaXRvcgotdG8gdXNlIHRoZSB0YWIgY2hhcmFjdGVyIGluc3RlYWQgb2YgNCBzcGFjZXMuIFdoaWxlIHRoZXJlLCB2ZXJpZnkgdGhhdCB0aGUgZGlhbG9nCi13aWxsIG5vdCBhbGxvdyBvdGhlciB2YWx1ZXMgdG8gYmUgaW50ZXJlZCBleGNlcHQgIndoaXRlc3BhY2UiIC4uLidcdCdzIGFuZCBibGFua3MuCi08L0xJPgotPExJPkZvcm1hdCB0aGUgZG9jdW1lbnQgYWdhaW4gYW5kIGJlIHN1cmUgdGhpcyB0aW1lIHRhYiBjaGFyYWN0ZXJzIHdlcmUgdXNlZC48L0xJPgotPC91bD4KLTxJTUcgYm9yZGVyPSIwIiBoZWlnaHQ9IjYzIiBzcmM9InUwMTFhbmkuZ2lmIiB3aWR0aD0iNjMiPjwvUD4KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIE90aGVyIHRlc3QgY2FzZXMKLSAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tPgotPEgyPjxCPjxGT05UIGNvbG9yPSIjMDAwMGZmIj5PdGhlciB0ZXN0IGNhc2VzPC9GT05UPjwvQj48L0gyPgotPFA+PEI+QXNzb2NpYXRlIHRoZSBYTUwgRWRpdG9yIHRvIGEgbmV3IGZpbGUgdHlwZTwvQj48L1A+Ci08VUw+Ci0gIDxMST5XaW5kb3ctJmd0O1ByZWZlcmVuY2VzPEI+PC9CPi48L0xJPgotICA8TEk+RXhwYW5kIDxCPldvcmtiZW5jaDwvQj4uPC9MST4KLSAgPExJPlNlbGVjdCA8Qj5GaWxlIEVkaXRvcnM8L0I+LjwvTEk+Ci0gIDxMST5TZWxlY3QgdGhlIDxCPkFkZDwvQj4gYnV0dG9uIHRvIGFkZCBhIG5ldyBmaWxlIHR5cGUuPC9MST4KLSAgPExJPlNwZWNpZnkgYSBmaWxlIHR5cGUgb2YgPEI+Ki5zZXQ8L0I+IGFuZCB0aGVuIGNsb3NlIHRoZSBBZGQgZGlhbG9nLjwvTEk+Ci0gIDxMST5WZXJpZnkgPEI+Ki5zZXQ8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBsaXN0IG9mIGZpbGUgdHlwZXMuPC9MST4KLSAgPExJPlNlbGVjdCB0aGUgPEI+QWRkPC9CPiBidXR0b24gdG8gYXNzb2NpYXRlIHRoZSBYTUwgRWRpdG9yIHRvIHRoZSBuZXcgZmlsZSB0eXBlLjwvTEk+Ci0gIDxMST5TZWxlY3QgPEI+WE1MIEVkaXRvcjwvQj4gZnJvbSB0aGUgbGlzdCBvZiBlZGl0b3JzLiBWZXJpZnkgaXQgYXBwZWFycyB3aXRoIGl0cyBvd24gc3BlY2lhbCBpY29uLiBDbG9zZSB0aGUgZGlhbG9nLiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+Tk9URTogd2FpdGluZyB0byBoZWFyIGJhY2sgZnJvbSBPVEkgb24gaG93IGNhbiBwcmV2ZW50IDIgWE1MIEVkaXRvciBlbnRyaWVzIGZyb20gYXBwZWFyaW5nIGluIHRoZSBsaXN0LjwvRk9OVD48L0xJPgotICA8TEk+VmVyaWZ5IDxCPlhNTCBFZGl0b3I8L0I+IGFwcGVhcnMgYXMgdGhlIGRlZmF1bHQgZWRpdG9yIG5vdyBmb3IgdGhlIDxCPiouc2V0PC9CPiBmaWxlIHR5cGUuPC9MST4KLSAgPExJPk9wZW4gPEI+Z290Y2hhVENCZWFucy5zZXQ8L0I+IGZyb20gdGhlIE5hdmlnYXRvciB2aWV3LiBWZXJpZnkgaXQgb3BlbnMgdG8gdGhlIFhNTCBFZGl0b3IuPC9MST4KLTwvVUw+Ci08UD48Rk9OVCBjb2xvcj0iIzAwMDBmZiI+VEhFIEVORCE8L0ZPTlQ+PC9QPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvTXVsdGlOb25EZWZhdWx0Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9NdWx0aU5vbkRlZmF1bHQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjc3MjExMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9NdWx0aU5vbkRlZmF1bHQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLTxIRUFEPgotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Ci08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS02Ij4KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPE1FVEEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJJQk0gV2ViU3BoZXJlIFN0dWRpbyI+Ci08VElUTEU+SUJNIFdlYlNwaGVyZSBTYW1wbGVzIEdhbGxlcnk8L1RJVExFPgotPC9IRUFEPgotPEZSQU1FU0VUIHJvd3M9Ijc1LCoiPgotCTxGUkFNRSBuYW1lPSJ0aXRsZSIgbWFyZ2lud2lkdGg9IjAiIG1hcmdpbmhlaWdodD0iMCIgZnJhbWVib3JkZXI9IjAiIHNyYz0iTWVudS9UaXRsZS5odG1sIiBzY3JvbGxpbmc9Ik5PIiBub3Jlc2l6ZT4KLQk8RlJBTUVTRVQgY29scz0iMTYwLCoiPgotCQk8RlJBTUUgbmFtZT0ibWVudSIgbWFyZ2lud2lkdGg9IjAiIG1hcmdpbmhlaWdodD0iMCIgZnJhbWVib3JkZXI9IjAiIHNyYz0iTWVudS9NZW51Lmh0bWwiIHNjcm9sbGluZz0iYXV0byIgbm9yZXNpemU+Ci0JCTxGUkFNRSBuYW1lPSJtYWluIiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBmcmFtZWJvcmRlcj0iMCIgc3JjPSJNZW51L1NhbXBsZXNJbnRyby5odG1sIiBzY3JvbGxpbmc9ImF1dG8iIG5vcmVzaXplPgotCTwvRlJBTUVTRVQ+Ci0JPE5PRlJBTUVTPgotCTxCT0RZPgotCTxQPlRvIHZpZXcgdGhpcyBwYWdlLCB5b3UgbmVlZCBhIGJyb3dzZXIgdGhhdCBzdXBwb3J0cyBmcmFtZXMuPC9QPgotCTwvQk9EWT4KLQk8L05PRlJBTUVTPgotPC9GUkFNRVNFVD4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL05vRW5jb2RpbmcuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL05vRW5jb2RpbmcuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDcwZTRmZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9Ob0VuY29kaW5nLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi08SEVBRD4KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgotPE1FVEEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJJQk0gV2ViU3BoZXJlIFN0dWRpbyI+Ci08VElUTEU+SUJNIFdlYlNwaGVyZSBTYW1wbGVzIEdhbGxlcnk8L1RJVExFPgotPC9IRUFEPgotPEZSQU1FU0VUIHJvd3M9Ijc1LCoiPgotCTxGUkFNRSBuYW1lPSJ0aXRsZSIgbWFyZ2lud2lkdGg9IjAiIG1hcmdpbmhlaWdodD0iMCIgZnJhbWVib3JkZXI9IjAiIHNyYz0iTWVudS9UaXRsZS5odG1sIiBzY3JvbGxpbmc9Ik5PIiBub3Jlc2l6ZT4KLQk8RlJBTUVTRVQgY29scz0iMTYwLCoiPgotCQk8RlJBTUUgbmFtZT0ibWVudSIgbWFyZ2lud2lkdGg9IjAiIG1hcmdpbmhlaWdodD0iMCIgZnJhbWVib3JkZXI9IjAiIHNyYz0iTWVudS9NZW51Lmh0bWwiIHNjcm9sbGluZz0iYXV0byIgbm9yZXNpemU+Ci0JCTxGUkFNRSBuYW1lPSJtYWluIiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBmcmFtZWJvcmRlcj0iMCIgc3JjPSJNZW51L1NhbXBsZXNJbnRyby5odG1sIiBzY3JvbGxpbmc9ImF1dG8iIG5vcmVzaXplPgotCTwvRlJBTUVTRVQ+Ci0JPE5PRlJBTUVTPgotCTxCT0RZPgotCTxQPlRvIHZpZXcgdGhpcyBwYWdlLCB5b3UgbmVlZCBhIGJyb3dzZXIgdGhhdCBzdXBwb3J0cyBmcmFtZXMuPC9QPgotCTwvQk9EWT4KLQk8L05PRlJBTUVTPgotPC9GUkFNRVNFVD4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL05vcm1hbE5vbkRlZmF1bHQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL05vcm1hbE5vbkRlZmF1bHQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmEzMGM5Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9Ob3JtYWxOb25EZWZhdWx0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08SEVBRD4KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPE1FVEEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJJQk0gV2ViU3BoZXJlIFN0dWRpbyI+Ci08VElUTEU+SUJNIFdlYlNwaGVyZSBTYW1wbGVzIEdhbGxlcnk8L1RJVExFPgotPC9IRUFEPgotPEZSQU1FU0VUIHJvd3M9Ijc1LCoiPgotCTxGUkFNRSBuYW1lPSJ0aXRsZSIgbWFyZ2lud2lkdGg9IjAiIG1hcmdpbmhlaWdodD0iMCIgZnJhbWVib3JkZXI9IjAiIHNyYz0iTWVudS9UaXRsZS5odG1sIiBzY3JvbGxpbmc9Ik5PIiBub3Jlc2l6ZT4KLQk8RlJBTUVTRVQgY29scz0iMTYwLCoiPgotCQk8RlJBTUUgbmFtZT0ibWVudSIgbWFyZ2lud2lkdGg9IjAiIG1hcmdpbmhlaWdodD0iMCIgZnJhbWVib3JkZXI9IjAiIHNyYz0iTWVudS9NZW51Lmh0bWwiIHNjcm9sbGluZz0iYXV0byIgbm9yZXNpemU+Ci0JCTxGUkFNRSBuYW1lPSJtYWluIiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBmcmFtZWJvcmRlcj0iMCIgc3JjPSJNZW51L1NhbXBsZXNJbnRyby5odG1sIiBzY3JvbGxpbmc9ImF1dG8iIG5vcmVzaXplPgotCTwvRlJBTUVTRVQ+Ci0JPE5PRlJBTUVTPgotCTxCT0RZPgotCTxQPlRvIHZpZXcgdGhpcyBwYWdlLCB5b3UgbmVlZCBhIGJyb3dzZXIgdGhhdCBzdXBwb3J0cyBmcmFtZXMuPC9QPgotCTwvQk9EWT4KLQk8L05PRlJBTUVTPgotPC9GUkFNRVNFVD4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL25vcXVvdGVzLmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9ub3F1b3Rlcy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTRjZGU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL25vcXVvdGVzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi08SEVBRD4KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PXRleHQvaHRtbDsgY2hhcnNldD1VVEYtOD4KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTYiPgotPE1FVEEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJJQk0gV2ViU3BoZXJlIFN0dWRpbyI+Ci08VElUTEU+SUJNIFdlYlNwaGVyZSBTYW1wbGVzIEdhbGxlcnk8L1RJVExFPgotPC9IRUFEPgotPEZSQU1FU0VUIHJvd3M9Ijc1LCoiPgotCTxGUkFNRSBuYW1lPSJ0aXRsZSIgbWFyZ2lud2lkdGg9IjAiIG1hcmdpbmhlaWdodD0iMCIgZnJhbWVib3JkZXI9IjAiIHNyYz0iTWVudS9UaXRsZS5odG1sIiBzY3JvbGxpbmc9Ik5PIiBub3Jlc2l6ZT4KLQk8RlJBTUVTRVQgY29scz0iMTYwLCoiPgotCQk8RlJBTUUgbmFtZT0ibWVudSIgbWFyZ2lud2lkdGg9IjAiIG1hcmdpbmhlaWdodD0iMCIgZnJhbWVib3JkZXI9IjAiIHNyYz0iTWVudS9NZW51Lmh0bWwiIHNjcm9sbGluZz0iYXV0byIgbm9yZXNpemU+Ci0JCTxGUkFNRSBuYW1lPSJtYWluIiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBmcmFtZWJvcmRlcj0iMCIgc3JjPSJNZW51L1NhbXBsZXNJbnRyby5odG1sIiBzY3JvbGxpbmc9ImF1dG8iIG5vcmVzaXplPgotCTwvRlJBTUVTRVQ+Ci0JPE5PRlJBTUVTPgotCTxCT0RZPgotCTxQPlRvIHZpZXcgdGhpcyBwYWdlLCB5b3UgbmVlZCBhIGJyb3dzZXIgdGhhdCBzdXBwb3J0cyBmcmFtZXMuPC9QPgotCTwvQk9EWT4KLQk8L05PRlJBTUVTPgotPC9GUkFNRVNFVD4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL25vcXVvdGVzVVRGMTZsZS5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvbm9xdW90ZXNVVEYxNmxlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjYmQ1MTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvbm9xdW90ZXNVVEYxNmxlLmh0bWwKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC91dGYxNkJPTS5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvdXRmMTZCT00uaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzE5MTVmNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC91dGYxNkJPTS5odG1sCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvdXRmMTZiZS5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvdXRmMTZiZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYWZlNjliLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL3V0ZjE2YmUuaHRtbAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL3V0ZjE2bGUuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL3V0ZjE2bGUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjRlZmI2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC91dGYxNmxlLmh0bWwKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2U3MzkzMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS40Ii8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYWE4MzcyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLWJpbgotYmluLnByb2plY3QKLWJ1aWxkLnhtbAotaHRtbHVpdGVzdHMuamFyCi10ZW1wLmZvbGRlcgotamF2YUNvbXBpbGVyLmh0bWx1aXRlc3RzLmphci5hcmdzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOWY0MDFmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHM8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZmE1YzkxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMDQgMDM6MzY6MzIgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1lbmNvZGluZy88cHJvamVjdD49SVNPLTg4NTktMQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZGQ4YjVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLSNTdW4gQXByIDE2IDE0OjM3OjIxIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5jbGVhbk91dHB1dEZvbGRlcj1jbGVhbgotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5kdXBsaWNhdGVSZXNvdXJjZVRhc2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5pbnZhbGlkQ2xhc3NwYXRoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5yZXNvdXJjZUNvcHlFeGNsdXNpb25GaWx0ZXI9Ki5sYXVuY2gKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNpcmN1bGFyQ2xhc3NwYXRoPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGguZXhjbHVzaW9uUGF0dGVybnM9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLm11bHRpcGxlT3V0cHV0TG9jYXRpb25zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZG9jLmNvbW1lbnQuc3VwcG9ydD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5tYXhQcm9ibGVtUGVyVW5pdD0xMDAKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NEZXByZWNhdGVkUmVmPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzTm90VmlzaWJsZVJlZj1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHJpdmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c092ZXJyaWRpbmc9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wdWJsaWMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wcml2YXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5zYWZlVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMYWJlbD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wYXRpYmxlSkRLTGV2ZWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5pbmNvbXBsZXRlQ2xhc3NwYXRoPWVycm9yCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWYyYWM2NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozOSBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWludGVybmFsLmRlZmF1bHQuY29tcGxpYW5jZT1kZWZhdWx0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1OTM2OGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozMiBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLmVuYWJsZS5wcm9qZWN0LnJlZmFjdG9yaW5nLmhpc3Rvcnk9ZmFsc2UKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzI0OTU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0jU3VuIEFwciAxNiAxNDowNToyOSBFRFQgMjAwNgotY29tcGlsZXJzLnAuYnVpbGQ9MAotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0xCi1jb21waWxlcnMucC5pbGxlZ2FsLWF0dC12YWx1ZT0wCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0wCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMucC51bnVzZWQtZWxlbWVudC1vci1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnVzZS1wcm9qZWN0PXRydWUKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODk4YjQ4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lLjAKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzOyBzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMzAwLnF1YWxpZmllcgotQnVuZGxlLUNsYXNzUGF0aDogaHRtbHVpdGVzdHMuamFyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy5IVE1MVUlUZXN0c1BsdWdpbgotQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IuMAotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMsCi0gb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMudmlld2VyCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UudWksCi0gb3JnLmVjbGlwc2UuamZhY2UudGV4dCwKLSBvcmcuZWNsaXBzZS53c3QuaHRtbC51aSwKLSBvcmcuZWNsaXBzZS53c3QueG1sLnVpLAotIG9yZy5lY2xpcHNlLndzdC5zc2UudWksCi0gb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZSwKLSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLAotIG9yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC50ZXh0ZWRpdG9yLAotIG9yZy5qdW5pdDtidW5kbGUtdmVyc2lvbj0iWzMuOC4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UudWkudmlld3MsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLAotIGNvbS5pYm0uaWN1Ci1FY2xpcHNlLUxhenlTdGFydDogdHJ1ZQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS40Ci1CdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvYWJvdXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTlkZjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUsIDIwMDg8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4NGU2NGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLWJpbi5pbmNsdWRlcyA9IHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgdGVzdC54bWwsXAotICAgICAgICAgICAgICAgaHRtbHVpdGVzdHMuamFyLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIGljb25zLyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcwotamFycy5jb21waWxlLm9yZGVyID0gaHRtbHVpdGVzdHMuamFyCi1zb3VyY2UuaHRtbHVpdGVzdHMuamFyID0gc3JjLwotb3V0cHV0Lmh0bWx1aXRlc3RzLmphciA9IGJpbi8KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL2ljb25zL3NvdXJjZUVkaXRvci5naWYgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9pY29ucy9zb3VyY2VFZGl0b3IuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NWViZGI4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL2ljb25zL3NvdXJjZUVkaXRvci5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDk2NmJiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBwcm9wZXJ0aWVzIGZpbGUgZm9yIG9yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzCi1CdW5kbGUtVmVuZG9yLjAgPSBFY2xpcHNlLm9yZwotQnVuZGxlLU5hbWUuMCA9IFN0cnVjdHVyZWQgU291cmNlIEVkaXRvciBmb3IgSFRNTCBUZXN0cwotdmlldy5uYW1lLjAgPSBFbWJlZGRlZCBIVE1MIFN0cnVjdHVyZWQgVGV4dCBWaWV3ZXIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9wbHVnaW4ueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmY5ZGNiMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLTxwbHVnaW4+Ci0KLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS52aWV3cyI+Ci0JCTx2aWV3Ci0JCQluYW1lPSIldmlldy5uYW1lLjAiCi0JCQlpY29uPSIkbmwkL2ljb25zL3NvdXJjZUVkaXRvci5naWYiCi0JCQljYXRlZ29yeT0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cyIKLQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy52aWV3ZXIuVmlld2VyVGVzdEhUTUwiCi0JCQlpZD0ib3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMudmlld2VyLlZpZXdlclRlc3RIVE1MIj4KLQkJPC92aWV3PgotCTwvZXh0ZW5zaW9uPgotCi08L3BsdWdpbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC91aS90ZXN0cy9IVE1MVUlQcmVmZXJlbmNlc1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC91aS90ZXN0cy9IVE1MVUlQcmVmZXJlbmNlc1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmRhZDA5ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdWkvdGVzdHMvSFRNTFVJUHJlZmVyZW5jZXNUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLklQcmVmZXJlbmNlU3RvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkuaW50ZXJuYWwuSFRNTFVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLnVpLmludGVybmFsLnByZWZlcmVuY2VzLkhUTUxVSVByZWZlcmVuY2VOYW1lczsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVFeGNlcHRpb247Ci0KLS8qKgotICogVGhlIHB1cnBvc2Ugb2YgdGhpcyB0ZXN0IGlzIHRvIHZlcmlmeSB0aGUgdmFsaWRpdHkgb2YgdGhlIEhUTUwgU291cmNlCi0gKiBlZGl0b3IgcHJlZmVyZW5jZXMuIFRlc3RzIGluY2x1ZGUgc2V0dGluZy9nZXR0aW5nIHByZWZlcmVuY2VzLgotICogCi0gKiBOT1RFOiBUaGlzIHRlc3Qgc2hvdWxkIGJlIHByZWZvcm1lZCBvbiBhIGNsZWFuIHdvcmtzcGFjZS4gSWYgcGVyZm9ybWVkIG9uCi0gKiBhbiBleGlzdGluZyB3b3Jrc3BhY2UsIHRoaXMgdGVzdCB3aWxsIG1hbmlwdWxhdGUgcHJlZmVyZW5jZXMgaW4gdGhlCi0gKiB3b3Jrc3BhY2UsIHRob3VnaCBhdHRlbXB0cyB3aWxsIGJlIG1hZGUgdG8gcmVzdG9yZSBvcmlnaW5hbCB2YWx1ZXMgYWZ0ZXIKLSAqIHRlc3RpbmcuCi0gKi8KLXB1YmxpYyBjbGFzcyBIVE1MVUlQcmVmZXJlbmNlc1Rlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JLyoqCi0JICogVGVzdHMgZXhpc3RhbmNlIG9mIHByZWZlcmVuY2UgdmFsdWVzIHdoZW4gZ2V0dGluZyBwcmVmZXJlbmNlIHZhbHVlcwotCSAqIHRocm91Z2ggUGxhdGZvcm0uZ2V0UHJlZmVyZW5jZXNTZXJ2aWNlKCkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0QnVuZGxlR2V0UHJlZmVyZW5jZXMoKSB7Ci0JCWZpbmFsIFN0cmluZyBidW5kbGVOYW1lID0gIm9yZy5lY2xpcHNlLndzdC5odG1sLnVpIjsKLQotCQkvLyBuZWVkIHRvIHN0YXJ0IHVwIGJ1bmRsZSBmb3IgZGVmYXVsdCB2YWx1ZXMgdG8gYmUgbG9hZGVkCi0JCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoYnVuZGxlTmFtZSk7Ci0JCXRyeSB7Ci0JCQlpZiAoYnVuZGxlICE9IG51bGwpCi0JCQkJYnVuZGxlLnN0YXJ0KCk7Ci0JCQllbHNlCi0JCQkJZmFpbCgiR2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIGJlY2F1c2UgY291bGQgbm90IGZpbmQgYnVuZGxlOiAiICsgYnVuZGxlTmFtZSk7Ci0JCX0gY2F0Y2ggKEJ1bmRsZUV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCJHZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgYmVjYXVzZSBvZiBleGNlcHRpb24gc3RhcnRpbmcgYnVuZGxlOiAiICsgYnVuZGxlTmFtZSArICIgZXhjZXB0aW9uOiAiICsgZSk7Ci0JCX0KLQotCQlidW5kbGVHZXRQcmVmZXJlbmNlKGJ1bmRsZU5hbWUsIEhUTUxVSVByZWZlcmVuY2VOYW1lcy5BVVRPX1BST1BPU0UpOwotCQlidW5kbGVHZXRQcmVmZXJlbmNlKGJ1bmRsZU5hbWUsIEhUTUxVSVByZWZlcmVuY2VOYW1lcy5BVVRPX1BST1BPU0VfQ09ERSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGJ1bmRsZUdldFByZWZlcmVuY2UoU3RyaW5nIGJ1bmRsZU5hbWUsIFN0cmluZyBwcmVmS2V5KSB7Ci0JCVN0cmluZyBkZWZhdWx0VmFsdWUgPSBMb25nLnRvU3RyaW5nKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpKTsgLy8gcmFuZG9tCi0JCQkJCQkJCQkJCQkJCQkJCQkJLy8gc3RyaW5nCi0KLQkJU3RyaW5nIHZhbHVlID0gUGxhdGZvcm0uZ2V0UHJlZmVyZW5jZXNTZXJ2aWNlKCkuZ2V0U3RyaW5nKGJ1bmRsZU5hbWUsIHByZWZLZXksIGRlZmF1bHRWYWx1ZSwgbnVsbCk7Ci0JCWFzc2VydE5vdFNhbWUoIkdldCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCB1c2luZyBQbGF0Zm9ybS5nZXRQcmVmZXJlbmNlc1NlcnZpY2UuIEtleTogIiArIHByZWZLZXksIGRlZmF1bHRWYWx1ZSwgdmFsdWUpOwotCX0KLQotCS8qKgotCSAqIFRlc3RzIGRlZmF1bHQgdmFsdWVzIG9mIHByZWZlcmVuY2VzLgotCSAqIAotCSAqIE5PVEU6IEV4cGVjdGVkIGRlZmF1bHQgdmFsdWVzIGFyZSBoYXJkLWNvZGVkLCBzbyBpZiBkZWZhdWx0IHZhbHVlcyBkbwotCSAqIGdldCBjaGFuZ2VkLCBhc3NlcnRpb25zIG5lZWQgdG8gYmUgdXBkYXRlZCBhcyB3ZWxsCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFBsdWdpbkdldERlZmF1bHRQcmVmZXJlbmNlcygpIHsKLQkJSVByZWZlcmVuY2VTdG9yZSBzdG9yZSA9IEhUTUxVSVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCk7Ci0KLQkJcGx1Z2luR2V0RGVmYXVsdFByZWZlcmVuY2Uoc3RvcmUsIEhUTUxVSVByZWZlcmVuY2VOYW1lcy5BVVRPX1BST1BPU0UsIEJvb2xlYW4udG9TdHJpbmcodHJ1ZSkpOwotCQlwbHVnaW5HZXREZWZhdWx0UHJlZmVyZW5jZShzdG9yZSwgSFRNTFVJUHJlZmVyZW5jZU5hbWVzLkFVVE9fUFJPUE9TRV9DT0RFLCAiPD0iKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgcGx1Z2luR2V0RGVmYXVsdFByZWZlcmVuY2UoSVByZWZlcmVuY2VTdG9yZSBzdG9yZSwgU3RyaW5nIHByZWZLZXksIFN0cmluZyBleHBlY3RlZCkgewotCQlTdHJpbmcgZGVmYXVsdFZhbHVlID0gc3RvcmUuZ2V0RGVmYXVsdFN0cmluZyhwcmVmS2V5KTsKLQkJYXNzZXJ0RXF1YWxzKCJHZXQgZGVmYXVsdCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCB1c2luZyBwbHVnaW4uZ2V0UHJlZmVyZW5jZVN0b3JlLiBLZXk6ICIgKyBwcmVmS2V5LCBleHBlY3RlZCwgZGVmYXVsdFZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0cyBzZXR0aW5nIHByZWZlcmVuY2UgdmFsdWVzIGJ5IHNldHRpbmcgcHJlZmVyZW5jZSB2YWx1ZSB0byBiZSBhCi0JICogY2VydGFpbiB2YWx1ZSwgdGhlbiBnZXR0aW5nIHRoZSBwcmVmZXJlbmNlIHZhbHVlIHRvIHZlcmlmeSBpdCB3YXMgc2V0LgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RQbHVnaW5TZXRQcmVmZXJlbmNlcygpIHsKLQkJSVByZWZlcmVuY2VTdG9yZSBzdG9yZSA9IEhUTUxVSVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCk7Ci0KLQkJcGx1Z2luU2V0UHJlZmVyZW5jZUJvb2xlYW4oc3RvcmUsIEhUTUxVSVByZWZlcmVuY2VOYW1lcy5BVVRPX1BST1BPU0UpOwotCQlwbHVnaW5TZXRQcmVmZXJlbmNlU3RyaW5nKHN0b3JlLCBIVE1MVUlQcmVmZXJlbmNlTmFtZXMuQVVUT19QUk9QT1NFX0NPREUpOwotCX0KLQotCXByaXZhdGUgdm9pZCBwbHVnaW5TZXRQcmVmZXJlbmNlQm9vbGVhbihJUHJlZmVyZW5jZVN0b3JlIHN0b3JlLCBTdHJpbmcgcHJlZktleSkgewotCQlib29sZWFuIG9yaWdpbmFsVmFsdWUgPSBzdG9yZS5nZXRCb29sZWFuKHByZWZLZXkpOwotCQlib29sZWFuIGV4cGVjdGVkVmFsdWUgPSAhb3JpZ2luYWxWYWx1ZTsKLQkJc3RvcmUuc2V0VmFsdWUocHJlZktleSwgZXhwZWN0ZWRWYWx1ZSk7Ci0JCWJvb2xlYW4gZm91bmRWYWx1ZSA9IHN0b3JlLmdldEJvb2xlYW4ocHJlZktleSk7Ci0JCWFzc2VydEVxdWFscygiU2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIHVzaW5nIHBsdWdpbi5nZXRQcmVmZXJlbmNlU3RvcmUuIEtleTogIiArIHByZWZLZXkgKyAiICBleHBlY3RlZDogIiArIGV4cGVjdGVkVmFsdWUgKyAiIGZvdW5kOiAiICsgZm91bmRWYWx1ZSwgZXhwZWN0ZWRWYWx1ZSwgZm91bmRWYWx1ZSk7Ci0KLQkJLy8gYXR0ZW1wdCB0byByZXN0b3JlIG9yaWdpbmFsIHByZWZlcmVuY2UgdmFsdWUKLQkJc3RvcmUuc2V0VmFsdWUocHJlZktleSwgb3JpZ2luYWxWYWx1ZSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHBsdWdpblNldFByZWZlcmVuY2VTdHJpbmcoSVByZWZlcmVuY2VTdG9yZSBzdG9yZSwgU3RyaW5nIHByZWZLZXkpIHsKLQkJU3RyaW5nIG9yaWdpbmFsVmFsdWUgPSBzdG9yZS5nZXRTdHJpbmcocHJlZktleSk7Ci0JCVN0cmluZyBleHBlY3RlZFZhbHVlID0gTG9uZy50b1N0cmluZyhTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSk7IC8vIHJhbmRvbQotCQkJCQkJCQkJCQkJCQkJCQkJCS8vIHN0cmluZwotCQlzdG9yZS5zZXRWYWx1ZShwcmVmS2V5LCBleHBlY3RlZFZhbHVlKTsKLQkJU3RyaW5nIGZvdW5kVmFsdWUgPSBzdG9yZS5nZXRTdHJpbmcocHJlZktleSk7Ci0JCWFzc2VydEVxdWFscygiU2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIHVzaW5nIHBsdWdpbi5nZXRQcmVmZXJlbmNlU3RvcmUuIEtleTogIiArIHByZWZLZXkgKyAiICBleHBlY3RlZDogIiArIGV4cGVjdGVkVmFsdWUgKyAiIGZvdW5kOiAiICsgZm91bmRWYWx1ZSwgZXhwZWN0ZWRWYWx1ZSwgZm91bmRWYWx1ZSk7Ci0KLQkJLy8gYXR0ZW1wdCB0byByZXN0b3JlIG9yaWdpbmFsIHByZWZlcmVuY2UgdmFsdWUKLQkJc3RvcmUuc2V0VmFsdWUocHJlZktleSwgb3JpZ2luYWxWYWx1ZSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3VpL3Rlc3RzL0hUTUxVSVRlc3RTdWl0ZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3VpL3Rlc3RzL0hUTUxVSVRlc3RTdWl0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZDg1NjRmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC91aS90ZXN0cy9IVE1MVUlUZXN0U3VpdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLnZpZXdlci5UZXN0Vmlld2VyQ29uZmlndXJhdGlvbkhUTUw7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi0KLQotcHVibGljIGNsYXNzIEhUTUxVSVRlc3RTdWl0ZSBleHRlbmRzIGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGUgewotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBIVE1MVUlUZXN0U3VpdGUoKTsKLQl9Ci0KLQlwdWJsaWMgSFRNTFVJVGVzdFN1aXRlKCkgewotCQlzdXBlcigiSFRNTCBVSSBUZXN0U3VpdGUiKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFZlcmlmeUVkaXRvclBsdWdpbi5jbGFzcykpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoSFRNTFVJUHJlZmVyZW5jZXNUZXN0LmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0Vmlld2VyQ29uZmlndXJhdGlvbkhUTUwuY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RFZGl0b3JDb25maWd1cmF0aW9uSFRNTC5jbGFzcykpOwotCQkvLwkJYWRkVGVzdChuZXcgU1NFTW9kZWxUZXN0U3VpdGUoKSk7Ci0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdWkvdGVzdHMvSFRNTFVJVGVzdHNQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC91aS90ZXN0cy9IVE1MVUlUZXN0c1BsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZWNhZWMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC91aS90ZXN0cy9IVE1MVUlUZXN0c1BsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0czsKLQotaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLQotLyoqCi0gKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSAqLwotcHVibGljIGNsYXNzIEhUTUxVSVRlc3RzUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHsKLQkvL1RoZSBzaGFyZWQgaW5zdGFuY2UuCi0JcHJpdmF0ZSBzdGF0aWMgSFRNTFVJVGVzdHNQbHVnaW4gcGx1Z2luOwotCS8vUmVzb3VyY2UgYnVuZGxlLgotCXByaXZhdGUgUmVzb3VyY2VCdW5kbGUgcmVzb3VyY2VCdW5kbGU7Ci0KLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIEhUTUxVSVRlc3RzUGx1Z2luKCkgewotCQlzdXBlcigpOwotCQlwbHVnaW4gPSB0aGlzOwotCQl0cnkgewotCQkJcmVzb3VyY2VCdW5kbGUgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoIm9yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLlNTRUZvckhUTUxUZXN0c1BsdWdpblJlc291cmNlcyIpOwotCQl9Ci0JCWNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24geCkgewotCQkJcmVzb3VyY2VCdW5kbGUgPSBudWxsOwotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSFRNTFVJVGVzdHNQbHVnaW4gZ2V0RGVmYXVsdCgpIHsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzdHJpbmcgZnJvbSB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLAotCSAqIG9yICdrZXknIGlmIG5vdCBmb3VuZC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRSZXNvdXJjZVN0cmluZyhTdHJpbmcga2V5KSB7Ci0JCVJlc291cmNlQnVuZGxlIGJ1bmRsZSA9IEhUTUxVSVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRSZXNvdXJjZUJ1bmRsZSgpOwotCQl0cnkgewotCQkJcmV0dXJuIChidW5kbGUgIT0gbnVsbCkgPyBidW5kbGUuZ2V0U3RyaW5nKGtleSkgOiBrZXk7Ci0JCX0KLQkJY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7Ci0JCQlyZXR1cm4ga2V5OwotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLAotCSAqLwotCXB1YmxpYyBSZXNvdXJjZUJ1bmRsZSBnZXRSZXNvdXJjZUJ1bmRsZSgpIHsKLQkJcmV0dXJuIHJlc291cmNlQnVuZGxlOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdWkvdGVzdHMvTG9nZ2VyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdWkvdGVzdHMvTG9nZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkZjE0ZGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3VpL3Rlc3RzL0xvZ2dlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0czsKLQotaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuU3RyaW5nVG9rZW5pemVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLQotLyoqCi0gKiBTbWFsbCBjb252ZW5pZW5jZSBjbGFzcyB0byBsb2cgbWVzc2FnZXMgdG8gcGx1Z2luJ3MgbG9nIGZpbGUgYW5kIGFsc28sIGlmIGRlc2lyZWQsCi0gKiB0aGUgY29uc29sZS4gVGhpcyBjbGFzcyBzaG91bGQgb25seSBiZSB1c2VkIGJ5IGNsYXNzZXMgaW4gdGhpcyBwbHVnaW4uIE90aGVyCi0gKiBwbHVnaW5zIHNob3VsZCBtYWtlIHRoZWlyIG93biBjb3B5LCB3aXRoIGFwcHJvcHJpYXRlIElELgotICovCi1wdWJsaWMgY2xhc3MgTG9nZ2VyIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzIjsgLy8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRSQUNFRklMVEVSX0xPQ0FUSU9OID0gIi9kZWJ1Zy90cmFjZWZpbHRlciI7IC8vJE5PTi1OTFMtMSQKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9LID0gSVN0YXR1cy5PSzsgLy8gMAotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElORk8gPSBJU3RhdHVzLklORk87IC8vIDEKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXQVJOSU5HID0gSVN0YXR1cy5XQVJOSU5HOyAvLyAyCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVJST1IgPSBJU3RhdHVzLkVSUk9SOyAvLyA0Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPS19ERUJVRyA9IDIwMCArIE9LOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElORk9fREVCVUcgPSAyMDAgKyBJTkZPOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdBUk5JTkdfREVCVUcgPSAyMDAgKyBXQVJOSU5HOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SX0RFQlVHID0gMjAwICsgRVJST1I7Ci0KLQkvKioKLQkgKiBBZGRzIG1lc3NhZ2UgdG8gbG9nLgotCSAqIEBwYXJhbSBsZXZlbCBzZXZlcml0eSBsZXZlbCBvZiB0aGUgbWVzc2FnZSAoT0ssIElORk8sIFdBUk5JTkcsIEVSUk9SLCBPS19ERUJVRywgSU5GT19ERUJVRywgV0FSTklOR19ERUJVRywgRVJST1JfREVCVUcpCi0JICogQHBhcmFtIG1lc3NhZ2UgdGV4dCB0byBhZGQgdG8gdGhlIGxvZwotCSAqIEBwYXJhbSBleGNlcHRpb24gZXhjZXB0aW9uIHRocm93bgotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgdm9pZCBfbG9nKGludCBsZXZlbCwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJaWYgKGxldmVsID09IE9LX0RFQlVHIHx8IGxldmVsID09IElORk9fREVCVUcgfHwgbGV2ZWwgPT0gV0FSTklOR19ERUJVRyB8fCBsZXZlbCA9PSBFUlJPUl9ERUJVRykgewotCQkJaWYgKCFpc0RlYnVnZ2luZygpKQotCQkJCXJldHVybjsKLQkJfQotCi0JCWludCBzZXZlcml0eSA9IElTdGF0dXMuT0s7Ci0JCXN3aXRjaCAobGV2ZWwpIHsKLQkJCWNhc2UgSU5GT19ERUJVRyA6Ci0JCQljYXNlIElORk8gOgotCQkJCXNldmVyaXR5ID0gSVN0YXR1cy5JTkZPOwotCQkJCWJyZWFrOwotCQkJY2FzZSBXQVJOSU5HX0RFQlVHIDoKLQkJCWNhc2UgV0FSTklORyA6Ci0JCQkJc2V2ZXJpdHkgPSBJU3RhdHVzLldBUk5JTkc7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEVSUk9SX0RFQlVHIDoKLQkJCWNhc2UgRVJST1IgOgotCQkJCXNldmVyaXR5ID0gSVN0YXR1cy5FUlJPUjsKLQkJfQotCQltZXNzYWdlID0gKG1lc3NhZ2UgIT0gbnVsbCkgPyBtZXNzYWdlIDogIm51bGwiOyAvLyROT04tTkxTLTEkCi0JCVN0YXR1cyBzdGF0dXNPYmogPSBuZXcgU3RhdHVzKHNldmVyaXR5LCBQTFVHSU5fSUQsIHNldmVyaXR5LCBtZXNzYWdlLCBleGNlcHRpb24pOwotCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKFBMVUdJTl9JRCk7Ci0JCWlmIChidW5kbGUgIT0gbnVsbCkgCi0JCQlQbGF0Zm9ybS5nZXRMb2coYnVuZGxlKS5sb2coc3RhdHVzT2JqKTsKLQl9Ci0KLQkvKioKLQkgKiBQcmludHMgbWVzc2FnZSB0byBsb2cgaWYgY2F0ZWdvcnkgbWF0Y2hlcyAvZGVidWcvdHJhY2VmaWx0ZXIgb3B0aW9uLgotCSAqIEBwYXJhbSBtZXNzYWdlIHRleHQgdG8gcHJpbnQKLQkgKiBAcGFyYW0gY2F0ZWdvcnkgY2F0ZWdvcnkgb2YgdGhlIG1lc3NhZ2UsIHRvIGJlIGNvbXBhcmVkIHdpdGggL2RlYnVnL3RyYWNlZmlsdGVyCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyB2b2lkIF90cmFjZShTdHJpbmcgY2F0ZWdvcnksIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCWlmIChpc1RyYWNpbmcoY2F0ZWdvcnkpKSB7Ci0JCQltZXNzYWdlID0gKG1lc3NhZ2UgIT0gbnVsbCkgPyBtZXNzYWdlIDogIm51bGwiOyAvLyROT04tTkxTLTEkCi0JCQlTdGF0dXMgc3RhdHVzT2JqID0gbmV3IFN0YXR1cyhJU3RhdHVzLk9LLCBQTFVHSU5fSUQsIElTdGF0dXMuT0ssIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKFBMVUdJTl9JRCk7Ci0JCQlpZiAoYnVuZGxlICE9IG51bGwpIAotCQkJCVBsYXRmb3JtLmdldExvZyhidW5kbGUpLmxvZyhzdGF0dXNPYmopOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQHJldHVybiB0cnVlIGlmIHRoZSBwbGF0Zm9ybSBpcyBkZWJ1Z2dpbmcKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNEZWJ1Z2dpbmcoKSB7Ci0JCXJldHVybiBQbGF0Zm9ybS5pbkRlYnVnTW9kZSgpOwotCX0KLQotCS8qKgotCSAqIERldGVybWluZXMgaWYgY3VycmVudGx5IHRyYWNpbmcgYSBjYXRlZ29yeQotCSAqIEBwYXJhbSBjYXRlZ29yeQotCSAqIEByZXR1cm4gdHJ1ZSBpZiB0cmFjaW5nIGNhdGVnb3J5LCBmYWxzZSBvdGhlcndpc2UKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNUcmFjaW5nKFN0cmluZyBjYXRlZ29yeSkgewotCQlpZiAoIWlzRGVidWdnaW5nKCkpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJU3RyaW5nIHRyYWNlRmlsdGVyID0gUGxhdGZvcm0uZ2V0RGVidWdPcHRpb24oUExVR0lOX0lEICsgVFJBQ0VGSUxURVJfTE9DQVRJT04pOwotCQlpZiAodHJhY2VGaWx0ZXIgIT0gbnVsbCkgewotCQkJU3RyaW5nVG9rZW5pemVyIHRva2VuaXplciA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodHJhY2VGaWx0ZXIsICIsIik7IC8vJE5PTi1OTFMtMSQKLQkJCXdoaWxlICh0b2tlbml6ZXIuaGFzTW9yZVRva2VucygpKSB7Ci0JCQkJU3RyaW5nIGNhdCA9IHRva2VuaXplci5uZXh0VG9rZW4oKS50cmltKCk7Ci0JCQkJaWYgKGNhdGVnb3J5LmVxdWFscyhjYXQpKSB7Ci0JCQkJCXJldHVybiB0cnVlOwotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZyhpbnQgbGV2ZWwsIFN0cmluZyBtZXNzYWdlKSB7Ci0JCV9sb2cobGV2ZWwsIG1lc3NhZ2UsIG51bGwpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2coaW50IGxldmVsLCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfbG9nKGxldmVsLCBtZXNzYWdlLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFeGNlcHRpb24oU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX2xvZyhFUlJPUiwgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nRXhjZXB0aW9uKFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX2xvZyhFUlJPUiwgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgdHJhY2VFeGNlcHRpb24oU3RyaW5nIGNhdGVnb3J5LCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfdHJhY2UoY2F0ZWdvcnksIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHRyYWNlRXhjZXB0aW9uKFN0cmluZyBjYXRlZ29yeSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfdHJhY2UoY2F0ZWdvcnksIGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCksIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHRyYWNlKFN0cmluZyBjYXRlZ29yeSwgU3RyaW5nIG1lc3NhZ2UpIHsKLQkJX3RyYWNlKGNhdGVnb3J5LCBtZXNzYWdlLCBudWxsKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdWkvdGVzdHMvVGVzdEVkaXRvckNvbmZpZ3VyYXRpb25IVE1MLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdWkvdGVzdHMvVGVzdEVkaXRvckNvbmZpZ3VyYXRpb25IVE1MLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwMTdjOTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3VpL3Rlc3RzL1Rlc3RFZGl0b3JDb25maWd1cmF0aW9uSFRNTC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgSmVucyBMdWtvd3NraS9Jbm5vb3ByYWN0IC0gaW5pdGlhbCByZW5hbWluZy9yZXN0cnVjdHVyaW5nCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JIVE1MOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGV4dC5JSFRNTFBhcnRpdGlvbnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkuU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uSFRNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC51aS5pbnRlcm5hbC50YWdpbmZvLkhUTUxUYWdJbmZvSG92ZXJQcm9jZXNzb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudmlld3MuY29udGVudG91dGxpbmUuSFRNTENvbnRlbnRPdXRsaW5lQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLkV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS52aWV3cy5wcm9wZXJ0aWVzLlhNTFByb3BlcnR5U2hlZXRDb25maWd1cmF0aW9uOwotCi0vKioKLSAqIFRlc3RzIHJldHJpZXZpbmcgZWRpdG9yIGNvbnRyaWJ1dGlvbnMgZm9yIGh0bWwgY29udGVudCB0eXBlCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0RWRpdG9yQ29uZmlndXJhdGlvbkhUTUwgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHVibGljIHZvaWQgdGVzdEdldFNvdXJjZVZpZXdlckNvbmZpZ3VyYXRpb24oKSB7Ci0JCU9iamVjdCBvID0gRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlci5nZXRJbnN0YW5jZSgpLmdldENvbmZpZ3VyYXRpb24oRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlci5TT1VSQ0VWSUVXRVJDT05GSUdVUkFUSU9OLCBDb250ZW50VHlwZUlkRm9ySFRNTC5Db250ZW50VHlwZUlEX0hUTUwpOwotCQlhc3NlcnROb3ROdWxsKCJubyBzb3VyY2Ugdmlld2VyIGNvbmZpZ3VyYXRpb24gZm9yICIgKyBDb250ZW50VHlwZUlkRm9ySFRNTC5Db250ZW50VHlwZUlEX0hUTUwsIG8pOwotCQkvLyBjaGVjayBmb3Igb3Zlci1xdWFsaWZpZWQgc3ViY2xhc3NlcwotCQlhc3NlcnRFcXVhbHMoInVuZXhwZWN0ZWQgc291cmNlIHZpZXdlciBjb25maWd1cmF0aW9uIGZvciAiICsgQ29udGVudFR5cGVJZEZvckhUTUwuQ29udGVudFR5cGVJRF9IVE1MLCBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25IVE1MLmNsYXNzLCBvLmdldENsYXNzKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRDb250ZW50T3V0bGluZVZpZXdlckNvbmZpZ3VyYXRpb24oKSB7Ci0JCU9iamVjdCBvID0gRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlci5nZXRJbnN0YW5jZSgpLmdldENvbmZpZ3VyYXRpb24oRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlci5DT05URU5UT1VUTElORUNPTkZJR1VSQVRJT04sIENvbnRlbnRUeXBlSWRGb3JIVE1MLkNvbnRlbnRUeXBlSURfSFRNTCk7Ci0JCWFzc2VydE5vdE51bGwoIm5vIGNvbnRlbnQgb3V0bGluZSB2aWV3ZXIgY29uZmlndXJhdGlvbiBmb3IgIiArIENvbnRlbnRUeXBlSWRGb3JIVE1MLkNvbnRlbnRUeXBlSURfSFRNTCwgbyk7Ci0JCS8vIGNoZWNrIGZvciBvdmVyLXF1YWxpZmllZCBzdWJjbGFzc2VzCi0JCWFzc2VydEVxdWFscygidW5leHBlY3RlZCBjb250ZW50IG91dGxpbmUgdmlld2VyIGNvbmZpZ3VyYXRpb24gZm9yICIgKyBDb250ZW50VHlwZUlkRm9ySFRNTC5Db250ZW50VHlwZUlEX0hUTUwsIEhUTUxDb250ZW50T3V0bGluZUNvbmZpZ3VyYXRpb24uY2xhc3MsIG8uZ2V0Q2xhc3MoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldFByb3BlcnR5U2hlZXRDb25maWd1cmF0aW9uKCkgewotCQlPYmplY3QgbyA9IEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuZ2V0SW5zdGFuY2UoKS5nZXRDb25maWd1cmF0aW9uKEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuUFJPUEVSVFlTSEVFVENPTkZJR1VSQVRJT04sIENvbnRlbnRUeXBlSWRGb3JIVE1MLkNvbnRlbnRUeXBlSURfSFRNTCk7Ci0JCWFzc2VydE5vdE51bGwoIm5vIHByb3BlcnR5IHNoZWV0IGNvbmZpZ3VyYXRpb24gZm9yICIgKyBDb250ZW50VHlwZUlkRm9ySFRNTC5Db250ZW50VHlwZUlEX0hUTUwsIG8pOwotCQkvLyBjaGVjayBmb3Igb3Zlci1xdWFsaWZpZWQgc3ViY2xhc3NlcwotCQlhc3NlcnRFcXVhbHMoInVuZXhwZWN0ZWQgcHJvcGVydHkgc2hlZXQgY29uZmlndXJhdGlvbiBmb3IgIiArIENvbnRlbnRUeXBlSWRGb3JIVE1MLkNvbnRlbnRUeXBlSURfSFRNTCwgWE1MUHJvcGVydHlTaGVldENvbmZpZ3VyYXRpb24uY2xhc3MsIG8uZ2V0Q2xhc3MoKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RHZXREb2N1bWVudGF0aW9uVGV4dEhvdmVyKCkgewotCQlPYmplY3QgbyA9IEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuZ2V0SW5zdGFuY2UoKS5nZXRDb25maWd1cmF0aW9uKEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuRE9DVU1FTlRBVElPTlRFWFRIT1ZFUiwgSUhUTUxQYXJ0aXRpb25zLkhUTUxfREVGQVVMVCk7Ci0JCWFzc2VydE5vdE51bGwoIm5vIGRvY3VtZW50YXRpb24gdGV4dCBob3ZlciBmb3IgIiArIElIVE1MUGFydGl0aW9ucy5IVE1MX0RFRkFVTFQsIG8pOwotCQkvLyBjaGVjayBmb3Igb3Zlci1xdWFsaWZpZWQgc3ViY2xhc3NlcwotCQlhc3NlcnRFcXVhbHMoInVuZXhwZWN0ZWQgZG9jdW1lbnRhdGlvbiB0ZXh0IGhvdmVyIGZvciAiICsgSUhUTUxQYXJ0aXRpb25zLkhUTUxfREVGQVVMVCwgSFRNTFRhZ0luZm9Ib3ZlclByb2Nlc3Nvci5jbGFzcywgby5nZXRDbGFzcygpKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdWkvdGVzdHMvVmVyaWZ5RWRpdG9yUGx1Z2luLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdWkvdGVzdHMvVmVyaWZ5RWRpdG9yUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjN2I5NGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3VpL3Rlc3RzL1ZlcmlmeUVkaXRvclBsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC51aS5pbnRlcm5hbC5IVE1MVUlQbHVnaW47Ci0KLQotcHVibGljIGNsYXNzIFZlcmlmeUVkaXRvclBsdWdpbiBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXB1YmxpYyB2b2lkIHRlc3RQbHVnaW5FeGlzdHMoKSB7Ci0JCS8vIFRPRE86IHNlZSBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9ODE1MjcKLQkJYXNzZXJ0VHJ1ZSh0cnVlKTsKLQkJUGx1Z2luIHBsdWdpbiA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlwbHVnaW4gPSBIVE1MVUlQbHVnaW4uZ2V0SW5zdGFuY2UoKTsKLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCXBsdWdpbiA9IG51bGw7Ci0JCX0KLQkJYXNzZXJ0Tm90TnVsbCgiZWRpdG9yIHBsdWdpbiBjb3VsZCBub3QgYmUgaW5zdGFudGlhdGVkIiwgcGx1Z2luKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdWkvdGVzdHMvdmlld2VyL1Rlc3RWaWV3ZXJDb25maWd1cmF0aW9uSFRNTC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3VpL3Rlc3RzL3ZpZXdlci9UZXN0Vmlld2VyQ29uZmlndXJhdGlvbkhUTUwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQ3M2JhZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdWkvdGVzdHMvdmlld2VyL1Rlc3RWaWV3ZXJDb25maWd1cmF0aW9uSFRNTC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy52aWV3ZXI7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklBdXRvRWRpdFN0cmF0ZWd5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSUluZm9ybWF0aW9uQ29udHJvbENyZWF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVGV4dERvdWJsZUNsaWNrU3RyYXRlZ3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVGV4dEhvdmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuY29udGVudGFzc2lzdC5JQ29udGVudEFzc2lzdGFudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmZvcm1hdHRlci5JQ29udGVudEZvcm1hdHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0Lmh5cGVybGluay5JSHlwZXJsaW5rRGV0ZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5pbmZvcm1hdGlvbi5JSW5mb3JtYXRpb25QcmVzZW50ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5yZWNvbmNpbGVyLklSZWNvbmNpbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuc291cmNlLklBbm5vdGF0aW9uSG92ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGV4dC5JSFRNTFBhcnRpdGlvbnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkuU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uSFRNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy5Mb2dnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5TdHJ1Y3R1cmVkVGV4dFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnByb3Zpc2lvbmFsLnN0eWxlLkxpbmVTdHlsZVByb3ZpZGVyOwotCi0vKioKLSAqIEBhdXRob3IgcGF2ZXJ5Ci0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0Vmlld2VyQ29uZmlndXJhdGlvbkhUTUwgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0gICAgCi0JcHJpdmF0ZSBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25IVE1MIGZDb25maWcgPSBudWxsOwotCXByaXZhdGUgYm9vbGVhbiBmRGlzcGxheUV4aXN0cyA9IHRydWU7Ci0JcHJpdmF0ZSBTdHJ1Y3R1cmVkVGV4dFZpZXdlciBmVmlld2VyID0gbnVsbDsKLQlwcml2YXRlIGJvb2xlYW4gaXNTZXR1cCA9IGZhbHNlOwotCQotICAgIHB1YmxpYyBUZXN0Vmlld2VyQ29uZmlndXJhdGlvbkhUTUwoKSB7Ci0gICAgICAgIHN1cGVyKCJUZXN0Vmlld2VyQ29uZmlndXJhdGlvbkhUTUwiKTsKLSAgICB9Ci0gICAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJCi0gICAgCXN1cGVyLnNldFVwKCk7Ci0JCWlmKCF0aGlzLmlzU2V0dXApewotCQkJc2V0VXBWaWV3ZXJDb25maWd1cmF0aW9uKCk7Ci0JCQl0aGlzLmlzU2V0dXAgPSB0cnVlOwotCQl9Ci0gICAgfQotCQotCXByaXZhdGUgdm9pZCBzZXRVcFZpZXdlckNvbmZpZ3VyYXRpb24oKSB7Ci0KLQkJaWYoRGlzcGxheS5nZXRDdXJyZW50KCkgIT0gbnVsbCkgewotCQkJCi0JCQlTaGVsbCBzaGVsbCA9IG51bGw7Ci0JCQlDb21wb3NpdGUgcGFyZW50ID0gbnVsbDsKLQkJCQotCQkJaWYoUGxhdGZvcm1VSS5pc1dvcmtiZW5jaFJ1bm5pbmcoKSkgewotCQkJCXNoZWxsID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRTaGVsbCgpOwotCQkJfQotCQkJZWxzZSB7CQotCQkJCXNoZWxsID0gbmV3IFNoZWxsKERpc3BsYXkuZ2V0Q3VycmVudCgpKTsKLQkJCX0KLQkJCXBhcmVudCA9IG5ldyBDb21wb3NpdGUoc2hlbGwsIFNXVC5OT05FKTsKLQkJCQotCQkJLy8gZHVtbXkgdmlld2VyCi0JCQlmVmlld2VyID0gbmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyKHBhcmVudCwgbnVsbCwgbnVsbCwgZmFsc2UsIFNXVC5OT05FKTsKLQkJCWZDb25maWcgPSBuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uSFRNTCgpOwotCQl9Ci0JCWVsc2UgewotCQkJZkRpc3BsYXlFeGlzdHMgPSBmYWxzZTsKLQkJCUxvZ2dlci5sb2coTG9nZ2VyLklORk8sICJSZW1lbWJlciwgdmlld2VyIGNvbmZpZ3VyYXRpb24gdGVzdHMgYXJlIG5vdCBydW4gYmVjYXVzZSB3b3JrYmVuY2ggaXMgbm90IG9wZW4gKG5vcm1hbCBvbiBidWlsZCBtYWNoaW5lKSIpOwotCQl9Ci0JfQotICAgIAotCS8qKgotCSAqIE5vdCBuZWNlc3NhcnkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0QW5ub3RhdGlvbkhvdmVyKCkgewotCQkKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQlJQW5ub3RhdGlvbkhvdmVyIGhvdmVyID0gZkNvbmZpZy5nZXRBbm5vdGF0aW9uSG92ZXIoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoIkFubm90YXRpb25Ib3ZlciBpcyBudWxsIiwgaG92ZXIpOwotICAgIH0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0QXV0b0VkaXRTdHJhdGVnaWVzKCkgewotCQkKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQlJQXV0b0VkaXRTdHJhdGVneVtdIHN0cmF0ZWdpZXMgPSBmQ29uZmlnLmdldEF1dG9FZGl0U3RyYXRlZ2llcyhmVmlld2VyLCBJSFRNTFBhcnRpdGlvbnMuSFRNTF9ERUZBVUxUKTsKLQkJYXNzZXJ0Tm90TnVsbChzdHJhdGVnaWVzKTsKLQkJYXNzZXJ0VHJ1ZSgidGhlcmUgYXJlIG5vIGF1dG8gZWRpdCBzdHJhdGVnaWVzIiwgc3RyYXRlZ2llcy5sZW5ndGg+MCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RHZXRDb25maWd1cmVkQ29udGVudFR5cGVzKCkgewotCQkKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQlTdHJpbmdbXSBjb25maWd1cmVkQ29udGVudFR5cGVzID0gZkNvbmZpZy5nZXRDb25maWd1cmVkQ29udGVudFR5cGVzKGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKGNvbmZpZ3VyZWRDb250ZW50VHlwZXMpOwotCQlhc3NlcnRUcnVlKCJ0aGVyZSBhcmUgbm8gY29uZmlndXJlZCBjb250ZW50IHR5cGVzIiwgY29uZmlndXJlZENvbnRlbnRUeXBlcy5sZW5ndGggPiAxKTsKLQl9Ci0JCi0JLyoqCi0JICogTm90IG5lY2Vzc2FyeQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RHZXRDb250ZW50QXNzaXN0YW50KCkgewotCQkKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQlJQ29udGVudEFzc2lzdGFudCBjYSA9IGZDb25maWcuZ2V0Q29udGVudEFzc2lzdGFudChmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgidGhlcmUgaXMgbm8gY29udGVudCBhc3Npc3RhbnQiLCBjYSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RHZXRDb250ZW50Rm9ybWF0dGVyKCkgewotCQkKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQlJQ29udGVudEZvcm1hdHRlciBjZiA9IGZDb25maWcuZ2V0Q29udGVudEZvcm1hdHRlcihmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgidGhlcmUgaXMgbm8gY29udGVudCBmb3JtYXR0ZXIiLCBjZik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RHZXREb3VibGVDbGlja1N0cmF0ZWd5KCkgewotCQkKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQlTdHJpbmdbXSBjb250ZW50VHlwZXMgPSBmQ29uZmlnLmdldENvbmZpZ3VyZWRDb250ZW50VHlwZXMoZlZpZXdlcik7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY29udGVudFR5cGVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlJVGV4dERvdWJsZUNsaWNrU3RyYXRlZ3kgc3RyYXRlZ3kgPSBmQ29uZmlnLmdldERvdWJsZUNsaWNrU3RyYXRlZ3koZlZpZXdlciwgY29udGVudFR5cGVzW2ldKTsKLQkJCWlmKHN0cmF0ZWd5ICE9IG51bGwpIHsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSgidGhlcmUgYXJlIG5vIGNvbmZpZ3VyZWQgZG91YmxlIGNsaWNrIHN0cmF0ZWdpZXMiLCBmYWxzZSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RHZXRIeXBlcmxpbmtEZXRlY3RvcnMoKSB7Ci0JCQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCUlIeXBlcmxpbmtEZXRlY3RvcltdIGRldGVjdG9ycyA9IGZDb25maWcuZ2V0SHlwZXJsaW5rRGV0ZWN0b3JzKGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKCJ0aGVyZSBhcmUgbm8gaHlwZXJsaW5rIGRldGVjdG9ycyIsIGRldGVjdG9ycyk7Ci0JCWFzc2VydFRydWUoInRoZXJlIGFyZSBubyBoeXBlcmxpbmsgZGV0ZWN0b3JzIiwgZGV0ZWN0b3JzLmxlbmd0aCA+IDEpOwotCX0KLQkKLSAgICBwdWJsaWMgdm9pZCB0ZXN0R2V0SW5kZW50UHJlZml4ZXMoKSB7Ci0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJU3RyaW5nW10gY29udGVudFR5cGVzID0gZkNvbmZpZy5nZXRDb25maWd1cmVkQ29udGVudFR5cGVzKGZWaWV3ZXIpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbnRlbnRUeXBlcy5sZW5ndGg7IGkrKykgewotCQkJU3RyaW5nIHByZWZpeGVzW10gPSBmQ29uZmlnLmdldEluZGVudFByZWZpeGVzKGZWaWV3ZXIsIGNvbnRlbnRUeXBlc1tpXSk7Ci0JCQlpZihwcmVmaXhlcyAhPSBudWxsKSB7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQl9Ci0JCWFzc2VydFRydWUoInRoZXJlIGFyZSBubyBjb25maWd1cmVkIGluZGVudCBwcmVmaXhlcyIsIGZhbHNlKTsKLQl9Ci0gICAgCi0JLyoqCi0JICogTm90IG5lY2Vzc2FyeQotCSAqLwotICAgIHB1YmxpYyB2b2lkIHRlc3RHZXRJbmZvcm1hdGlvbkNvbnRyb2xDcmVhdG9yKCkgewotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCUlJbmZvcm1hdGlvbkNvbnRyb2xDcmVhdG9yIGluZm9DcmVhdG9yID0gZkNvbmZpZy5nZXRJbmZvcm1hdGlvbkNvbnRyb2xDcmVhdG9yKGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKCJJbmZvcm1hdGlvbkNvbnRyb2xDcmVhdG9yIGlzIG51bGwiLCBpbmZvQ3JlYXRvcik7Ci0gICAgfQotCQotCS8qKgotCSAqIE5vdCBuZWNlc3NhcnkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0SW5mb3JtYXRpb25QcmVzZW50ZXIoKSB7Ci0JCQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCUlJbmZvcm1hdGlvblByZXNlbnRlciBwcmVzZW50ZXIgPSBmQ29uZmlnLmdldEluZm9ybWF0aW9uUHJlc2VudGVyKGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKCJJbmZvcm1hdGlvblByZXNlbnRlciBpcyBudWxsIiwgcHJlc2VudGVyKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEdldExpbmVTdHlsZVByb3ZpZGVycygpIHsKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQlTdHJpbmdbXSBjb250ZW50VHlwZXMgPSBmQ29uZmlnLmdldENvbmZpZ3VyZWRDb250ZW50VHlwZXMoZlZpZXdlcik7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY29udGVudFR5cGVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlMaW5lU3R5bGVQcm92aWRlciBwcm92aWRlcnNbXSA9IGZDb25maWcuZ2V0TGluZVN0eWxlUHJvdmlkZXJzKGZWaWV3ZXIsIGNvbnRlbnRUeXBlc1tpXSk7Ci0JCQlpZihwcm92aWRlcnMgIT0gbnVsbCkgewotCQkJCXJldHVybjsKLQkJCX0KLQkJfQotCQlhc3NlcnRUcnVlKCJ0aGVyZSBhcmUgbm8gY29uZmlndXJlZCBsaW5lIHN0eWxlIHByb3ZpZGVycyIsIGZhbHNlKTsKLQl9Ci0JCi0JLyoqCi0JICogTm90IG5lY2Vzc2FyeQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RHZXRSZWNvbmNpbGVyKCkgewotCQkKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQlJUmVjb25jaWxlciByID0gZkNvbmZpZy5nZXRSZWNvbmNpbGVyKGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKCJSZWNvbmNpbGVyIGlzIG51bGwiLCByKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEdldFRleHRIb3ZlcigpIHsKLQkJCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCi0JCVN0cmluZ1tdIGhvdmVyUGFydGl0aW9ucyA9IG5ldyBTdHJpbmdbXXtJSFRNTFBhcnRpdGlvbnMuSFRNTF9ERUZBVUxULCBJSFRNTFBhcnRpdGlvbnMuU0NSSVBUfTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBob3ZlclBhcnRpdGlvbnMubGVuZ3RoOyBpKyspIHsKLQkJCUlUZXh0SG92ZXIgaG92ZXIgPSBmQ29uZmlnLmdldFRleHRIb3ZlcihmVmlld2VyLCBob3ZlclBhcnRpdGlvbnNbaV0sIFNXVC5OT05FKTsKLQkJCWFzc2VydE5vdE51bGwoImhvdmVyIHdhcyBudWxsIGZvciBwYXJ0aXRpb246ICIgKyBob3ZlclBhcnRpdGlvbnNbaV0sIGhvdmVyKTsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC91aS90ZXN0cy92aWV3ZXIvVmlld2VyVGVzdEhUTUwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC91aS90ZXN0cy92aWV3ZXIvVmlld2VyVGVzdEhUTUwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGFiMjExNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdWkvdGVzdHMvdmlld2VyL1ZpZXdlclRlc3RIVE1MLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLnZpZXdlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklDb250cmlidXRpb25NYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5EaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSkZhY2VSZXNvdXJjZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LldpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQnVzeUluZGljYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklNZW1lbnRvOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklWaWV3U2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LlZpZXdQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IuSVRleHRFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuSUNvbnRlbnRPdXRsaW5lUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JIVE1MOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLnVpLlN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbkhUTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLkluZGV4ZWRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5TdHJ1Y3R1cmVkVGV4dEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLlN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLlN0cnVjdHVyZWRUZXh0Vmlld2VyOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci0KLXB1YmxpYyBjbGFzcyBWaWV3ZXJUZXN0SFRNTCBleHRlbmRzIFZpZXdQYXJ0IHsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBTU0VfRURJVE9SX0ZPTlQgPSAib3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXh0Zm9udCI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgREVGQVVMVF9WSUVXRVJfQ09OVEVOVFMgPSAiPCFET0NUWVBFIEhUTUwgUFVCTElDIFwiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU5cIj5cbjxIVE1MPlxuCTxIRUFEPlxuCQk8TUVUQSBodHRwLWVxdWl2PVwiQ29udGVudC1UeXBlXCIgY29udGVudD1cInRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xXCI+XG4JCTxUSVRMRT5wbGFjZSB0aXRsZSBoZXJlPC9USVRMRT5cbgk8L0hFQUQ+XG4JPEJPRFk+XG4JCXBsYWNlIGNvbnRlbnQgaGVyZQlcbjxzY3JpcHQ+XG5cInRleHRcIjtcbjwvU0NSSVBUPlxuPC9CT0RZPlxuPC9IVE1MPiI7Ci0KLQlwcml2YXRlIFN0cnVjdHVyZWRUZXh0Vmlld2VyIGZTb3VyY2VWaWV3ZXIgPSBudWxsOwotCXByaXZhdGUgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uIGZDb25maWcgPSBudWxsOwotCXByaXZhdGUgSUNvbnRlbnRPdXRsaW5lUGFnZSBmQ29udGVudE91dGxpbmVQYWdlID0gbnVsbDsKLQlwcml2YXRlIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgZkhpZ2hsaWdodFJhbmdlTGlzdGVuZXIgPSBudWxsOwotCi0JLyoqCi0JICogU2V0cyB0aGUgdmlld2VyJ3MgaGlnaGxpZ2h0aW5nIHRleHQgcmFuZ2UgdG8gdGhlIHRleHQgcmFuZ2UgaW5kaWNhdGVkCi0JICogYnkgdGhlIHNlbGVjdGVkIE5vZGVzLgotCSAqLwotCXByb3RlY3RlZCBjbGFzcyBOb2RlUmFuZ2VTZWxlY3Rpb25MaXN0ZW5lciBpbXBsZW1lbnRzIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgewotCQlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgewotCQkJaWYgKCFldmVudC5nZXRTZWxlY3Rpb24oKS5pc0VtcHR5KCkgJiYgZXZlbnQuZ2V0U2VsZWN0aW9uKCkgaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgewotCQkJCUlTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbiA9IChJU3RydWN0dXJlZFNlbGVjdGlvbikgZXZlbnQuZ2V0U2VsZWN0aW9uKCk7Ci0JCQkJSW5kZXhlZFJlZ2lvbiBzdGFydE5vZGUgPSAoSW5kZXhlZFJlZ2lvbikgc2VsZWN0aW9uLmdldEZpcnN0RWxlbWVudCgpOwotCQkJCUluZGV4ZWRSZWdpb24gZW5kTm9kZSA9IChJbmRleGVkUmVnaW9uKSBzZWxlY3Rpb24udG9BcnJheSgpW3NlbGVjdGlvbi5zaXplKCkgLSAxXTsKLQotCQkJCWlmIChzdGFydE5vZGUgaW5zdGFuY2VvZiBBdHRyKQotCQkJCQlzdGFydE5vZGUgPSAoSW5kZXhlZFJlZ2lvbikgKChBdHRyKSBzdGFydE5vZGUpLmdldE93bmVyRWxlbWVudCgpOwotCQkJCWlmIChlbmROb2RlIGluc3RhbmNlb2YgQXR0cikKLQkJCQkJZW5kTm9kZSA9IChJbmRleGVkUmVnaW9uKSAoKEF0dHIpIGVuZE5vZGUpLmdldE93bmVyRWxlbWVudCgpOwotCi0JCQkJaW50IHN0YXJ0ID0gc3RhcnROb2RlLmdldFN0YXJ0T2Zmc2V0KCk7Ci0JCQkJaW50IGVuZCA9IGVuZE5vZGUuZ2V0RW5kT2Zmc2V0KCk7Ci0KLQkJCQlmU291cmNlVmlld2VyLnJlc2V0VmlzaWJsZVJlZ2lvbigpOwotCQkJCWZTb3VyY2VWaWV3ZXIuc2V0VmlzaWJsZVJlZ2lvbihzdGFydCwgZW5kIC0gc3RhcnQpOwotCQkJCWZTb3VyY2VWaWV3ZXIuc2V0U2VsZWN0ZWRSYW5nZShzdGFydCwgMCk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlmU291cmNlVmlld2VyLnJlc2V0VmlzaWJsZVJlZ2lvbigpOwotCQkJfQotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIGNsYXNzIE51bWJlcklucHV0RGlhbG9nIGV4dGVuZHMgRGlhbG9nIHsKLQkJcHVibGljIE51bWJlcklucHV0RGlhbG9nKFNoZWxsIHNoZWxsKSB7Ci0JCQlzdXBlcihzaGVsbCk7Ci0JCX0KLQotCQlwdWJsaWMgVGV4dCBzdGFydDsKLQkJaW50IHN0YXJ0VmFsdWU7Ci0JCXB1YmxpYyBUZXh0IGxlbmd0aDsKLQkJaW50IGxlbmd0aFZhbHVlOwotCi0JCXByb3RlY3RlZCBDb250cm9sIGNyZWF0ZURpYWxvZ0FyZWEoQ29tcG9zaXRlIHBhcmVudCkgewotCQkJQ29tcG9zaXRlIGNvbXBvc2l0ZSA9IChDb21wb3NpdGUpIHN1cGVyLmNyZWF0ZURpYWxvZ0FyZWEocGFyZW50KTsKLQkJCUNvbXBvc2l0ZSBjb250YWluZXIgPSBuZXcgQ29tcG9zaXRlKGNvbXBvc2l0ZSwgU1dULk5VTEwpOwotCQkJY29udGFpbmVyLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCkpOwotCQkJY29udGFpbmVyLnNldExheW91dChuZXcgR3JpZExheW91dCgyLCB0cnVlKSk7Ci0JCQlzZXRTaGVsbFN0eWxlKGdldFNoZWxsKCkuZ2V0U3R5bGUoKSB8IFNXVC5SRVNJWkUpOwotCi0JCQlMYWJlbCBsYWJlbCA9IG5ldyBMYWJlbChjb250YWluZXIsIFNXVC5OVUxMKTsKLQkJCWxhYmVsLnNldFRleHQoIlN0YXJ0Iik7Ci0JCQlsYWJlbC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0JPVEgpKTsKLQotCQkJbGFiZWwgPSBuZXcgTGFiZWwoY29udGFpbmVyLCBTV1QuTlVMTCk7Ci0JCQlsYWJlbC5zZXRUZXh0KCJMZW5ndGgiKTsKLQkJCWxhYmVsLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCkpOwotCi0JCQlzdGFydCA9IG5ldyBUZXh0KGNvbnRhaW5lciwgU1dULkJPUkRFUik7Ci0JCQlzdGFydFZhbHVlID0gZlNvdXJjZVZpZXdlci5nZXRWaXNpYmxlUmVnaW9uKCkuZ2V0T2Zmc2V0KCk7Ci0JCQlzdGFydC5zZXRUZXh0KCIiICsgc3RhcnRWYWx1ZSk7Ci0JCQlzdGFydC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0JPVEgpKTsKLQotCQkJbGVuZ3RoID0gbmV3IFRleHQoY29udGFpbmVyLCBTV1QuQk9SREVSKTsKLQkJCWxlbmd0aFZhbHVlID0gZlNvdXJjZVZpZXdlci5nZXRWaXNpYmxlUmVnaW9uKCkuZ2V0TGVuZ3RoKCk7Ci0JCQlsZW5ndGguc2V0VGV4dCgiIiArIGxlbmd0aFZhbHVlKTsKLQkJCWxlbmd0aC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0JPVEgpKTsKLQotCQkJLy8JCQlzdGFydC5hZGRNb2RpZnlMaXN0ZW5lcihuZXcgTW9kaWZ5TGlzdGVuZXIoKSB7Ci0JCQkvLwkJCQlwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KE1vZGlmeUV2ZW50IGUpIHsKLQkJCS8vCQkJCQlpZiAoZS53aWRnZXQgPT0gc3RhcnQpIHsKLQkJCS8vCQkJCQkJdHJ5IHsKLQkJCS8vCQkJCQkJCXN0YXJ0VmFsdWUgPSBJbnRlZ2VyLmRlY29kZShzdGFydC5nZXRUZXh0KCkpLmludFZhbHVlKCk7Ci0JCQkvLwkJCQkJCX0KLQkJCS8vCQkJCQkJY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlMikgewotCQkJLy8JCQkJCQkJc3RhcnRWYWx1ZSA9IDA7Ci0JCQkvLwkJCQkJCX0KLQkJCS8vCQkJCQl9Ci0JCQkvLwkJCQl9Ci0JCQkvLwkJCX0pOwotCQkJLy8JCQlsZW5ndGguYWRkTW9kaWZ5TGlzdGVuZXIobmV3IE1vZGlmeUxpc3RlbmVyKCkgewotCQkJLy8JCQkJcHVibGljIHZvaWQgbW9kaWZ5VGV4dChNb2RpZnlFdmVudCBlKSB7Ci0JCQkvLwkJCQkJaWYgKGUud2lkZ2V0ID09IGxlbmd0aCkgewotCQkJLy8JCQkJCQl0cnkgewotCQkJLy8JCQkJCQkJbGVuZ3RoVmFsdWUgPSBJbnRlZ2VyLmRlY29kZShsZW5ndGguZ2V0VGV4dCgpKS5pbnRWYWx1ZSgpOwotCQkJLy8JCQkJCQl9Ci0JCQkvLwkJCQkJCWNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZTIpIHsKLQkJCS8vCQkJCQkJCWxlbmd0aFZhbHVlID0gMDsKLQkJCS8vCQkJCQkJfQotCQkJLy8JCQkJCX0KLQkJCS8vCQkJCX0KLQkJCS8vCQkJfSk7Ci0KLQkJCXJldHVybiBjb21wb3NpdGU7Ci0JCX0KLQotCQkvKgotCQkgKiAobm9uLUphdmFkb2MpCi0JCSAqIAotCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nI29rUHJlc3NlZCgpCi0JCSAqLwotCQlwcm90ZWN0ZWQgdm9pZCBva1ByZXNzZWQoKSB7Ci0JCQl0cnkgewotCQkJCXN0YXJ0VmFsdWUgPSBJbnRlZ2VyLmRlY29kZShzdGFydC5nZXRUZXh0KCkpLmludFZhbHVlKCk7Ci0JCQl9Ci0JCQljYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUyKSB7Ci0JCQkJc3RhcnRWYWx1ZSA9IDA7Ci0JCQl9Ci0JCQl0cnkgewotCQkJCWxlbmd0aFZhbHVlID0gSW50ZWdlci5kZWNvZGUobGVuZ3RoLmdldFRleHQoKSkuaW50VmFsdWUoKTsKLQkJCX0KLQkJCWNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZTIpIHsKLQkJCQlsZW5ndGhWYWx1ZSA9IDA7Ci0JCQl9Ci0JCQlzdXBlci5va1ByZXNzZWQoKTsKLQkJfQotCX0KLQotCXByb3RlY3RlZCB2b2lkIGFkZEFjdGlvbnMoSUNvbnRyaWJ1dGlvbk1hbmFnZXIgbWdyKSB7Ci0JCWlmIChtZ3IgIT0gbnVsbCkgewotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJOZXcgSFRNTCI7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlzdXBlci5ydW4oKTsKLQkJCQkJQnVzeUluZGljYXRvci5zaG93V2hpbGUoZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLCBuZXcgUnVubmFibGUoKSB7Ci0JCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCQkJc2V0dXBWaWV3ZXJGb3JOZXcoKTsKLQkJCQkJCQlmU291cmNlVmlld2VyLnNldEVkaXRhYmxlKHRydWUpOwotCQkJCQkJfQotCQkJCQl9KTsKLQkJCQl9Ci0JCQl9KTsKLQkJCW1nci5hZGQobmV3IFNlcGFyYXRvcigpKTsKLQkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkJCXJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkJCXJldHVybiAiQ2hhbmdlIFZpc2liaWxpdHkiOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJc3VwZXIucnVuKCk7Ci0JCQkJCU51bWJlcklucHV0RGlhbG9nIGRsZyA9IG5ldyBOdW1iZXJJbnB1dERpYWxvZyhmU291cmNlVmlld2VyLmdldENvbnRyb2woKS5nZXRTaGVsbCgpKTsKLQkJCQkJaW50IHByb2NlZWQgPSBkbGcub3BlbigpOwotCQkJCQlpZiAocHJvY2VlZCA9PSBXaW5kb3cuQ0FOQ0VMKQotCQkJCQkJcmV0dXJuOwotCQkJCQlmU291cmNlVmlld2VyLnJlc2V0VmlzaWJsZVJlZ2lvbigpOwotCQkJCQlmU291cmNlVmlld2VyLnNldFZpc2libGVSZWdpb24oZGxnLnN0YXJ0VmFsdWUsIGRsZy5sZW5ndGhWYWx1ZSk7Ci0JCQkJfQotCQkJfSk7Ci0JCQltZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQkJCQlyZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJCQlyZXR1cm4gIlNob3cgQWxsIjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlmU291cmNlVmlld2VyLnJlc2V0VmlzaWJsZVJlZ2lvbigpOwotCQkJCX0KLQkJCX0pOwotCQkJbWdyLmFkZChuZXcgU2VwYXJhdG9yKCkpOwotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJDaGFuZ2UgVmlzaWJpbGl0eSBpbiBFZGl0b3IiOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJc3VwZXIucnVuKCk7Ci0JCQkJCVN0cnVjdHVyZWRUZXh0Vmlld2VyIHNvdXJjZVZpZXdlciA9IG51bGw7Ci0JCQkJCUlFZGl0b3JQYXJ0IHBhcnQgPSBnZXRWaWV3U2l0ZSgpLmdldFdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKTsKLQkJCQkJaWYgKHBhcnQgIT0gbnVsbCAmJiBwYXJ0IGluc3RhbmNlb2YgU3RydWN0dXJlZFRleHRFZGl0b3IpIHsKLQkJCQkJCXNvdXJjZVZpZXdlciA9ICgoU3RydWN0dXJlZFRleHRFZGl0b3IpIHBhcnQpLmdldFRleHRWaWV3ZXIoKTsKLQkJCQkJfQotCQkJCQlpZiAoc291cmNlVmlld2VyICE9IG51bGwpIHsKLQkJCQkJCU51bWJlcklucHV0RGlhbG9nIGRsZyA9IG5ldyBOdW1iZXJJbnB1dERpYWxvZyhzb3VyY2VWaWV3ZXIuZ2V0Q29udHJvbCgpLmdldFNoZWxsKCkpOwotCQkJCQkJaW50IHByb2NlZWQgPSBkbGcub3BlbigpOwotCQkJCQkJaWYgKHByb2NlZWQgPT0gV2luZG93LkNBTkNFTCkKLQkJCQkJCQlyZXR1cm47Ci0JCQkJCQlzb3VyY2VWaWV3ZXIucmVzZXRWaXNpYmxlUmVnaW9uKCk7Ci0JCQkJCQlzb3VyY2VWaWV3ZXIuc2V0VmlzaWJsZVJlZ2lvbihkbGcuc3RhcnRWYWx1ZSwgZGxnLmxlbmd0aFZhbHVlKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0pOwotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJTaG93IEFsbCBpbiBFZGl0b3IiOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJc3VwZXIucnVuKCk7Ci0JCQkJCVN0cnVjdHVyZWRUZXh0Vmlld2VyIHNvdXJjZVZpZXdlciA9IG51bGw7Ci0JCQkJCUlFZGl0b3JQYXJ0IHBhcnQgPSBnZXRWaWV3U2l0ZSgpLmdldFdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKTsKLQkJCQkJaWYgKHBhcnQgIT0gbnVsbCAmJiBwYXJ0IGluc3RhbmNlb2YgU3RydWN0dXJlZFRleHRFZGl0b3IpIHsKLQkJCQkJCXNvdXJjZVZpZXdlciA9ICgoU3RydWN0dXJlZFRleHRFZGl0b3IpIHBhcnQpLmdldFRleHRWaWV3ZXIoKTsKLQkJCQkJfQotCQkJCQlpZiAoc291cmNlVmlld2VyICE9IG51bGwpIHsKLQkJCQkJCXNvdXJjZVZpZXdlci5yZXNldFZpc2libGVSZWdpb24oKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0pOwotCQkJbWdyLmFkZChuZXcgU2VwYXJhdG9yKCkpOwotCQkJLy8gbm8gbG9uZ2VyIGFibGUgdG8gc2V0IGlucHV0IHRvIE5VTEwKLQkJCS8vCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJLy8JCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQkJLy8JCQkJCXJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJLy8JCQkJfQotCQkJLy8KLQkJCS8vCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkvLwkJCQkJcmV0dXJuICJTZXQgSW5wdXQgdG8gTlVMTCI7Ci0JCQkvLwkJCQl9Ci0JCQkvLwkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkvLwkJCQkJc3VwZXIucnVuKCk7Ci0JCQkvLwkJCQkJdmlld2VyLnNldElucHV0KG51bGwpOwotCQkJLy8JCQkJfQotCQkJLy8JCQl9KTsKLQkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkJCXJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkJCXJldHVybiAiVGFrZSBJbnB1dCBmcm9tIEFjdGl2ZSBFZGl0b3IiOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJc3VwZXIucnVuKCk7Ci0JCQkJCUlUZXh0RWRpdG9yIHRleHRFZGl0b3IgPSBnZXRBY3RpdmVFZGl0b3IoKTsKLQkJCQkJaWYgKHRleHRFZGl0b3IgIT0gbnVsbCkgewotCQkJCQkJc2V0dXBWaWV3ZXJGb3JFZGl0b3IodGV4dEVkaXRvcik7Ci0JCQkJCQlmU291cmNlVmlld2VyLnNldEVkaXRhYmxlKHRydWUpOwotCQkJCQl9Ci0JCQkJfQotCQkJfSk7Ci0JCQltZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQkJCQlyZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJCQlyZXR1cm4gIlRha2UgSW5wdXQgYW5kIEZvbGxvdyBTZWxlY3Rpb24iOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJc3VwZXIucnVuKCk7Ci0JCQkJCWZvbGxvd1NlbGVjdGlvbigpOwotCQkJCQlmU291cmNlVmlld2VyLnNldEVkaXRhYmxlKHRydWUpOwotCQkJCX0KLQkJCX0pOwotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJUYWtlIElucHV0IGFuZCBGb2xsb3cgU2VsZWN0aW9uIEFzIFJlYWRPbmx5IjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlmb2xsb3dTZWxlY3Rpb24oKTsKLQkJCQkJZlNvdXJjZVZpZXdlci5zZXRFZGl0YWJsZShmYWxzZSk7Ci0JCQkJfQotCQkJfSk7Ci0JCQltZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQkJCQlyZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJCQlyZXR1cm4gIlN0b3AgRm9sbG93aW5nIFNlbGVjdGlvbiI7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlzdXBlci5ydW4oKTsKLQkJCQkJc3RvcEZvbGxvd1NlbGVjdGlvbigpOwotCQkJCX0KLQkJCX0pOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydCNjcmVhdGVQYXJ0Q29udHJvbChDb21wb3NpdGUpCi0JICovCi0JcHVibGljIHZvaWQgY3JlYXRlUGFydENvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgewotCQlJQ29udHJpYnV0aW9uTWFuYWdlciBtZ3IgPSBnZXRWaWV3U2l0ZSgpLmdldEFjdGlvbkJhcnMoKS5nZXRNZW51TWFuYWdlcigpOwotCQlhZGRBY3Rpb25zKG1ncik7Ci0KLQkJLy8gY3JlYXRlIHNvdXJjZSB2aWV3ZXIgJiBpdHMgY29udGVudCB0eXBlLXNwZWNpZmljIHZpZXdlcgotCQkvLyBjb25maWd1cmF0aW9uCi0JCWZTb3VyY2VWaWV3ZXIgPSBuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXIocGFyZW50LCBudWxsLCBudWxsLCBmYWxzZSwgU1dULk5PTkUpOwotCQlmQ29uZmlnID0gbmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbkhUTUwoKTsKLQotCQkvLyBzZXQgdXAgdGhlIHZpZXdlciB3aXRoIGEgZG9jdW1lbnQgJiB2aWV3ZXIgY29uZmlnCi0JCXNldHVwVmlld2VyRm9yTmV3KCk7Ci0KLQkJc2V0dXBWaWV3ZXJQcmVmZXJlbmNlcygpOwotCX0KLQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQjZGlzcG9zZSgpCi0JICovCi0JcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLQkJc3RvcEZvbGxvd1NlbGVjdGlvbigpOwotCQlmU291cmNlVmlld2VyLnVuY29uZmlndXJlKCk7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydCNzZXRGb2N1cygpCi0JICovCi0JcHVibGljIHZvaWQgc2V0Rm9jdXMoKSB7Ci0JCWlmIChmU291cmNlVmlld2VyLmdldENvbnRyb2woKSAhPSBudWxsICYmICFmU291cmNlVmlld2VyLmdldENvbnRyb2woKS5pc0Rpc3Bvc2VkKCkpCi0JCQlmU291cmNlVmlld2VyLmdldENvbnRyb2woKS5zZXRGb2N1cygpOwotCX0KLQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVZpZXdQYXJ0I2luaXQoSVZpZXdTaXRlLCBJTWVtZW50bykKLQkgKi8KLQlwdWJsaWMgdm9pZCBpbml0KElWaWV3U2l0ZSBzaXRlLCBJTWVtZW50byBtZW1lbnRvKSB0aHJvd3MgUGFydEluaXRFeGNlcHRpb24gewotCQlzdXBlci5pbml0KHNpdGUsIG1lbWVudG8pOwotCX0KLQotCS8qKgotCSAqIFNldCB1cCBzb3VyY2Ugdmlld2VyIHdpdGggYW55IGFkZGl0aW9uYWwgcHJlZmVyZW5jZXMgaXQgc2hvdWxkIGhhdmUgRXg6Ci0JICogZm9udCwgdGFiIHdpZHRoCi0JICovCi0JcHJpdmF0ZSB2b2lkIHNldHVwVmlld2VyUHJlZmVyZW5jZXMoKSB7Ci0JCWZTb3VyY2VWaWV3ZXIuZ2V0VGV4dFdpZGdldCgpLnNldEZvbnQoSkZhY2VSZXNvdXJjZXMuZ2V0Rm9udChTU0VfRURJVE9SX0ZPTlQpKTsKLQl9Ci0KLQkvKioKLQkgKiBTZXQgdXAgc291cmNlIHZpZXdlciB3aXRoIGEgbmV3IGRvY3VtZW50ICYgY29uZmlndXJlIGl0Ci0JICovCi0JcHJpdmF0ZSB2b2lkIHNldHVwVmlld2VyRm9yTmV3KCkgewotCQlzdG9wRm9sbG93U2VsZWN0aW9uKCk7IC8vIGlmIHdhcyBmb2xsb3dpbmcgc2VsZWN0aW9uLCBzdG9wCi0KLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJRG9jdW1lbnQgZG9jID0gbW9kZWxNYW5hZ2VyLmNyZWF0ZVN0cnVjdHVyZWREb2N1bWVudEZvcihDb250ZW50VHlwZUlkRm9ySFRNTC5Db250ZW50VHlwZUlEX0hUTUwpOwotCQlkb2Muc2V0KERFRkFVTFRfVklFV0VSX0NPTlRFTlRTKTsKLQotCQlmU291cmNlVmlld2VyLnNldERvY3VtZW50KGRvYyk7Ci0JCS8vIG5lZWQgdG8gcmVjb25maWd1cmUgYWZ0ZXIgc2V0IGRvY3VtZW50IGp1c3Qgc28gaGlnaGxpZ2h0ZXIgd29ya3MKLQkJZlNvdXJjZVZpZXdlci5jb25maWd1cmUoZkNvbmZpZyk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgY3VycmVudCBhY3RpdmUgdGV4dCBlZGl0b3IgaWYgcG9zc2libGUKLQkgKiAKLQkgKiBAcmV0dXJuIElUZXh0RWRpdG9yCi0JICovCi0JcHJpdmF0ZSBJVGV4dEVkaXRvciBnZXRBY3RpdmVFZGl0b3IoKSB7Ci0JCUlUZXh0RWRpdG9yIGVkaXRvciA9IG51bGw7Ci0JCUlFZGl0b3JQYXJ0IGVkaXRvclBhcnQgPSBnZXRTaXRlKCkuZ2V0V29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpOwotCQlpZiAoZWRpdG9yUGFydCBpbnN0YW5jZW9mIElUZXh0RWRpdG9yKQotCQkJZWRpdG9yID0gKElUZXh0RWRpdG9yKSBlZGl0b3JQYXJ0OwotCQlpZiAoZWRpdG9yID09IG51bGwgJiYgZWRpdG9yUGFydCAhPSBudWxsKQotCQkJZWRpdG9yID0gKElUZXh0RWRpdG9yKSBlZGl0b3JQYXJ0LmdldEFkYXB0ZXIoSVRleHRFZGl0b3IuY2xhc3MpOwotCQlyZXR1cm4gZWRpdG9yOwotCX0KLQotCS8qKgotCSAqIFNldHMgdXAgdGhlIHZpZXdlciB3aXRoIHRoZSBzYW1lIGRvY3VtZW50L2lucHV0IGFzIHRoZSBnaXZlbiBlZGl0b3IKLQkgKiAKLQkgKiBAcGFyYW0gSVRleHRFZGl0b3IKLQkgKiAgICAgICAgICAgIGVkaXRvciAtIHRoZSBlZGl0b3IgdG8gdXNlICpjYW5ub3QgdG8gYmUgbnVsbCoKLQkgKi8KLQlwcml2YXRlIHZvaWQgc2V0dXBWaWV3ZXJGb3JFZGl0b3IoSVRleHRFZGl0b3IgZWRpdG9yKSB7Ci0JCXN0b3BGb2xsb3dTZWxlY3Rpb24oKTsgLy8gaWYgd2FzIGZvbGxvd2luZyBzZWxlY3Rpb24sIHN0b3AKLQkJSURvY3VtZW50IGRvYyA9IGVkaXRvci5nZXREb2N1bWVudFByb3ZpZGVyKCkuZ2V0RG9jdW1lbnQoZWRpdG9yLmdldEVkaXRvcklucHV0KCkpOwotCQlmU291cmNlVmlld2VyLnNldERvY3VtZW50KGRvYyk7Ci0KLQkJLy8gbmVlZCB0byByZWNvbmZpZ3VyZSBhZnRlciBzZXQgZG9jdW1lbnQganVzdCBzbyBoaWdobGlnaHRlciB3b3JrcwotCQlmU291cmNlVmlld2VyLmNvbmZpZ3VyZShuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uSFRNTCgpKTsKLQl9Ci0KLQkvKioKLQkgKiBIb29rcyB1cCB0aGUgdmlld2VyIHRvIGZvbGxvdyB0aGUgc2VsZWN0aW9uIG1hZGUgaW4gdGhlIGFjdGl2ZSBlZGl0b3IKLQkgKi8KLQlwcml2YXRlIHZvaWQgZm9sbG93U2VsZWN0aW9uKCkgewotCQlJVGV4dEVkaXRvciBlZGl0b3IgPSBnZXRBY3RpdmVFZGl0b3IoKTsKLQkJaWYgKGVkaXRvciAhPSBudWxsKSB7Ci0JCQlzZXR1cFZpZXdlckZvckVkaXRvcihlZGl0b3IpOwotCQkJaWYgKGZIaWdobGlnaHRSYW5nZUxpc3RlbmVyID09IG51bGwpCi0JCQkJZkhpZ2hsaWdodFJhbmdlTGlzdGVuZXIgPSBuZXcgTm9kZVJhbmdlU2VsZWN0aW9uTGlzdGVuZXIoKTsKLQotCQkJZkNvbnRlbnRPdXRsaW5lUGFnZSA9ICgoSUNvbnRlbnRPdXRsaW5lUGFnZSkgZWRpdG9yLmdldEFkYXB0ZXIoSUNvbnRlbnRPdXRsaW5lUGFnZS5jbGFzcykpOwotCQkJaWYgKGZDb250ZW50T3V0bGluZVBhZ2UgIT0gbnVsbCkgewotCQkJCWZDb250ZW50T3V0bGluZVBhZ2UuYWRkU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKGZIaWdobGlnaHRSYW5nZUxpc3RlbmVyKTsKLQotCQkJCWlmICghZkNvbnRlbnRPdXRsaW5lUGFnZS5nZXRTZWxlY3Rpb24oKS5pc0VtcHR5KCkgJiYgZkNvbnRlbnRPdXRsaW5lUGFnZS5nZXRTZWxlY3Rpb24oKSBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7Ci0JCQkJCWZTb3VyY2VWaWV3ZXIucmVzZXRWaXNpYmxlUmVnaW9uKCk7Ci0KLQkJCQkJT2JqZWN0W10gbm9kZXMgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBmQ29udGVudE91dGxpbmVQYWdlLmdldFNlbGVjdGlvbigpKS50b0FycmF5KCk7Ci0JCQkJCUluZGV4ZWRSZWdpb24gc3RhcnROb2RlID0gKEluZGV4ZWRSZWdpb24pIG5vZGVzWzBdOwotCQkJCQlJbmRleGVkUmVnaW9uIGVuZE5vZGUgPSAoSW5kZXhlZFJlZ2lvbikgbm9kZXNbbm9kZXMubGVuZ3RoIC0gMV07Ci0KLQkJCQkJaWYgKHN0YXJ0Tm9kZSBpbnN0YW5jZW9mIEF0dHIpCi0JCQkJCQlzdGFydE5vZGUgPSAoSW5kZXhlZFJlZ2lvbikgKChBdHRyKSBzdGFydE5vZGUpLmdldE93bmVyRWxlbWVudCgpOwotCQkJCQlpZiAoZW5kTm9kZSBpbnN0YW5jZW9mIEF0dHIpCi0JCQkJCQllbmROb2RlID0gKEluZGV4ZWRSZWdpb24pICgoQXR0cikgZW5kTm9kZSkuZ2V0T3duZXJFbGVtZW50KCk7Ci0KLQkJCQkJaW50IHN0YXJ0ID0gc3RhcnROb2RlLmdldFN0YXJ0T2Zmc2V0KCk7Ci0JCQkJCWludCBlbmQgPSBlbmROb2RlLmdldEVuZE9mZnNldCgpOwotCi0JCQkJCWZTb3VyY2VWaWV3ZXIuc2V0VmlzaWJsZVJlZ2lvbihzdGFydCwgZW5kIC0gc3RhcnQpOwotCQkJCQlmU291cmNlVmlld2VyLnNldFNlbGVjdGVkUmFuZ2Uoc3RhcnQsIDApOwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQotCS8qKgotCSAqIENlYXNlIGZvbGxvd2luZyB0aGUgc2VsZWN0aW9uIG1hZGUgaW4gdGhlIGVkaXRvcgotCSAqLwotCXByaXZhdGUgdm9pZCBzdG9wRm9sbG93U2VsZWN0aW9uKCkgewotCQlpZiAoZkNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7Ci0JCQlmQ29udGVudE91dGxpbmVQYWdlLnJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihmSGlnaGxpZ2h0UmFuZ2VMaXN0ZW5lcik7Ci0JCQlmU291cmNlVmlld2VyLnJlc2V0VmlzaWJsZVJlZ2lvbigpOwotCQkJZkNvbnRlbnRPdXRsaW5lUGFnZSA9IG51bGw7Ci0JCX0KLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3Rlc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvdGVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiYTZhYzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvdGVzdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLQotPHByb2plY3QKLSAgICBuYW1lPSJ0ZXN0c3VpdGUiCi0gICAgZGVmYXVsdD0icnVuIgotICAgIGJhc2VkaXI9Ii4iPgotICAgIAotICAgIDwhLS0gVGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGlzIHNjcmlwdCAtLT4KLSAgICA8IS0tICR7ZWNsaXBzZS1ob21lfSAgIC0tPgotICAgIDwhLS0gJHtidWlsZERpcmVjdG9yeX0gIC0tPgotICAgIDwhLS0gJHtidWlsZExhYmVsfSAgICAgICAgLS0+Ci0KLSAgICA8IS0tIHNob3VsZCBiZSBsaXR0bGUgbmVlZCB0byBjaGFuZ2Ugd2hhdCdzIGFib3ZlICAtLT4KLQk8cHJvcGVydHkKLQkJbmFtZT0icGx1Z2luLW5hbWUiCi0JCXZhbHVlPSJvcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cyIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0iY2xhc3NuYW1lIgotICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMuSFRNTFVJVGVzdFN1aXRlIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJ0ZXN0VHlwZSIKLSAgICAgICAgdmFsdWU9InVpLXRlc3QiIC8+Ci0KLSAgICA8IS0tIHNob3VsZCBiZSBsaXR0bGUgbmVlZCB0byBjaGFuZ2Ugd2hhdCdzIGJlbG93IC0tPgotCi0gICAgPGVjaG8gbWVzc2FnZT0iYmFzZWRpcjogJHtiYXNlZGlyfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJlY2xpcHNlLWhvbWU6ICR7ZWNsaXBzZS1ob21lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJidWlsZERpcmVjdG9yeTogJHtidWlsZERpcmVjdG9yeX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0icGx1Z2luLW5hbWU6ICR7cGx1Z2luLW5hbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImNsYXNzbmFtZTogJHtjbGFzc25hbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9InRlc3RUeXBlICR7dGVzdFR5cGV9IiAvPgotCi0KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0ibGlicmFyeS1maWxlIgotICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2UudGVzdF8zLjEuMC9saWJyYXJ5LnhtbCIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0id29ya3NwYWNlIgotICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L2p1bml0d29ya3NwYWNlcy8ke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgCi0gICAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPgotICAgIDwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+Ci0gICAgPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+Ci0gICAgPHRhcmdldCBuYW1lPSJpbml0Ij4KLSAgICAgICAgPHRzdGFtcCAvPgotICAgICAgICA8ZGVsZXRlPgotICAgICAgICAgICAgPGZpbGVzZXQKLSAgICAgICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSIKLSAgICAgICAgICAgICAgICBpbmNsdWRlcz0iJHtwbHVnaW4tbmFtZX0uKnhtbCIgLz4KLSAgICAgICAgPC9kZWxldGU+Ci0gICAgICAgIDwhLS0gbWFrZSBkaXJlY3RvcnksIGluIGNhc2UgcGF0aCBkb2Vzbid0IGV4aXN0IHlldCAtLT4KLSAgICAgICAgPG1rZGlyIGRpcj0iJHt3b3Jrc3BhY2V9IiAvPgotICAgICAgICA8IS0tICBidXQgZGVsZXRlIHRvIG1ha2Ugc3VyZSBmcmVzaCBjb250ZW50cy0tPgotICAgICAgICA8ZGVsZXRlCi0gICAgICAgICAgICBkaXI9IiR7d29ya3NwYWNlfSIKLSAgICAgICAgICAgIHF1aWV0PSJ0cnVlIiAvPgotCi0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGRlZmluZXMgdGhlIHRlc3RzIHRoYXQgbmVlZCB0byBiZSBydW4uIC0tPgotICAgIDx0YXJnZXQgbmFtZT0ic3VpdGUiPgotCi0gICAgICAgIDxhbnQKLSAgICAgICAgICAgIHRhcmdldD0iJHt0ZXN0VHlwZX0iCi0gICAgICAgICAgICBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iCi0gICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJkYXRhLWRpciIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHt3b3Jrc3BhY2V9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0icGx1Z2luLW5hbWUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iY2xhc3NuYW1lIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke2NsYXNzbmFtZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJwbHVnaW4tcGF0aCIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgIDwvYW50PgotCi0gICAgICAgIDxjb3B5Ci0gICAgICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiCi0gICAgICAgICAgICBmaWxlPSIke3dvcmtzcGFjZX0vLm1ldGFkYXRhLy5sb2ciCi0gICAgICAgICAgICB0b2ZpbGU9IiR7YnVpbGREaXJlY3Rvcnl9LyR7YnVpbGRMYWJlbH0vdGVzdFJlc3VsdHMvY29uc29sZWxvZ3MvJHtwbHVnaW4tbmFtZX0uY29uc29sZWxvZy50eHQiIC8+Ci0KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgotICAgIDwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4KLSAgICA8IS0tIGRlbGV0ZSB0ZW1wb3JhcnkgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZC4gLS0+Ci0gICAgPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KLSAgICAgICAgPCEtLSB1c3VhbGx5IG5vIG5lZWQgdG8gZGVsZXRlIHdvcmtzcGFjZSB1bnRpbCBuZXh0IHJ1biwgYW5kIGxlYXZpbmcgaXQgYWxsb3dzIGluc3BlY3Rpb24gLS0+Ci0gICAgICAgIDwhLS0gPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiIC8+IC0tPgotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSB0ZXN0IHN1aXRlLiBBbnkgYWN0aW9ucyB0aGF0IG5lZWQgdG8gaGFwcGVuIC0tPgotICAgIDwhLS0gYWZ0ZXIgYWxsIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuIHNob3VsZCBnbyBoZXJlLiAtLT4KLSAgICA8dGFyZ2V0Ci0gICAgICAgIG5hbWU9InJ1biIKLSAgICAgICAgZGVwZW5kcz0iaW5pdCxzdWl0ZSxjbGVhbnVwIj4KLSAgICAgICAgPGFudAotICAgICAgICAgICAgdGFyZ2V0PSJjb2xsZWN0IgotICAgICAgICAgICAgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iaW5jbHVkZXMiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Lip4bWwiIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJvdXRwdXQtZmlsZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0ueG1sIiAvPgotICAgICAgICA8L2FudD4KLSAgICA8L3RhcmdldD4KLQotPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlLnRlc3RzLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS50ZXN0cy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZmJiN2EyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlLnRlc3RzLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjQiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLmNvcmUudGVzdHMvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS50ZXN0cy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDJiZTA4OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS50ZXN0cy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlLnRlc3RzPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLmNvcmUudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4MWI4M2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLmNvcmUudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiBUZXN0cyBQbHVnLWluCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS50ZXN0cztzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMAotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLmNvcmUudGVzdHMuQWN0aXZhdG9yCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAotIG9yZy5qdW5pdCwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjEuMzAwLDEuMi4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLmNvcmUsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXM7YnVuZGxlLXZlcnNpb249IlszLjQuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMS4wLDEuMi4wKSIKLUJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5Ci1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjQKLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS50ZXN0cywKLSBvcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS50ZXN0cy50cmFuc2xhdGlvbgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLmNvcmUudGVzdHMvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0ZDJlNGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLmNvcmUudGVzdHMvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotc291cmNlLi4gPSBzcmMvCi1vdXRwdXQuLiA9IGJpbi8KLWJpbi5pbmNsdWRlcyA9IE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICAuCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2pzZHQvd2ViL2NvcmUvdGVzdHMvQWN0aXZhdG9yLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2pzZHQvd2ViL2NvcmUvdGVzdHMvQWN0aXZhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkN2M2MzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9qc2R0L3dlYi9jb3JlL3Rlc3RzL0FjdGl2YXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS50ZXN0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7Ci0KLS8qKgotICogVGhlIGFjdGl2YXRvciBjbGFzcyBjb250cm9scyB0aGUgcGx1Zy1pbiBsaWZlIGN5Y2xlCi0gKi8KLXB1YmxpYyBjbGFzcyBBY3RpdmF0b3IgZXh0ZW5kcyBQbHVnaW4gewotCi0JCi0JcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHX0NPTlNPTEUgPSBmYWxzZTsKLQkKLQkvLyBUaGUgcGx1Zy1pbiBJRAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS50ZXN0cyI7Ci0KLQkvLyBUaGUgc2hhcmVkIGluc3RhbmNlCi0JcHJpdmF0ZSBzdGF0aWMgQWN0aXZhdG9yIHBsdWdpbjsKLQkKLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IKLQkgKi8KLQlwdWJsaWMgQWN0aXZhdG9yKCkgewotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbnMjc3RhcnQob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCi0JICovCi0JcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc3RhcnQoY29udGV4dCk7Ci0JCXBsdWdpbiA9IHRoaXM7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luI3N0b3Aob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCi0JICovCi0JcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlwbHVnaW4gPSBudWxsOwotCQlzdXBlci5zdG9wKGNvbnRleHQpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZQotCSAqCi0JICogQHJldHVybiB0aGUgc2hhcmVkIGluc3RhbmNlCi0JICovCi0JcHVibGljIHN0YXRpYyBBY3RpdmF0b3IgZ2V0RGVmYXVsdCgpIHsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvanNkdC93ZWIvY29yZS90ZXN0cy90cmFuc2xhdGlvbi9BbGxXZWJDb3JlVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvanNkdC93ZWIvY29yZS90ZXN0cy90cmFuc2xhdGlvbi9BbGxXZWJDb3JlVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODU1Y2EzZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2pzZHQvd2ViL2NvcmUvdGVzdHMvdHJhbnNsYXRpb24vQWxsV2ViQ29yZVRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlLnRlc3RzLnRyYW5zbGF0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotcHVibGljIGNsYXNzIEFsbFdlYkNvcmVUZXN0cyB7Ci0KLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCVRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBUZXN0U3VpdGUoKTsKLQkJLy8kSlVuaXQtQkVHSU4kCi0KLQkJLy8kSlVuaXQtRU5EJAotCQlzdWl0ZS5hZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdEh0bWxUcmFuc2xhdGlvbi5jbGFzcywgIlRlc3RIdG1sVHJhbnNsYXRpb24iKSk7Ci0JCXJldHVybiBzdWl0ZTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvanNkdC93ZWIvY29yZS90ZXN0cy90cmFuc2xhdGlvbi9UZXN0SHRtbFRyYW5zbGF0aW9uLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2pzZHQvd2ViL2NvcmUvdGVzdHMvdHJhbnNsYXRpb24vVGVzdEh0bWxUcmFuc2xhdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMTI5MWFmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvanNkdC93ZWIvY29yZS90ZXN0cy90cmFuc2xhdGlvbi9UZXN0SHRtbFRyYW5zbGF0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTkgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS50ZXN0cy50cmFuc2xhdGlvbjsKLQotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdXcml0ZXI7Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLmNvcmUuamF2YXNjcmlwdC5JSnNUcmFuc2xhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS5qYXZhc2NyaXB0LkpzVHJhbnNsYXRpb25BZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlLmphdmFzY3JpcHQuSnNUcmFuc2xhdGlvbkFkYXB0ZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlLnRlc3RzLkFjdGl2YXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotCi0KLQotcHVibGljIGNsYXNzIFRlc3RIdG1sVHJhbnNsYXRpb24gZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQkKLQlwcm90ZWN0ZWQgSU1vZGVsTWFuYWdlciBmTW9kZWxNYW5hZ2VyID0gbnVsbDsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgdGVzdEZpbGVzRGlyZWN0b3J5ID0gInRlc3RGaWxlcyI7Ci0JcHVibGljIFRlc3RIdG1sVHJhbnNsYXRpb24oKXsKLQkJZk1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RIVE1MRm9ybWF0KCkgewotCQkvLyBnZXQgbW9kZWwKLQkJSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwgPSBnZXRNb2RlbCgidGVzdDEuaHRtbCIpOwotCQlhc3NlcnROb3ROdWxsKCJtaXNzaW5nIHRlc3QgbW9kZWwiLCBzdHJ1Y3R1cmVkTW9kZWwpOwotCQkKLQkJLy8gY29tcGFyZQotCQlTdHJpbmcgZm9ybWF0dGVkID0gc3RydWN0dXJlZE1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLmdldCgpOwotCQlTdHJpbmcgZXhwZWN0ZWRGaWxlTmFtZSA9ICJ0ZXN0MS5odG1sIjsKLQkJU3RyaW5nIGV4cGVjdGVkID0gZ2V0RmlsZShleHBlY3RlZEZpbGVOYW1lKTsKLQkJCi0JCUpzVHJhbnNsYXRpb25BZGFwdGVyRmFjdG9yeS5zZXR1cEFkYXB0ZXJGYWN0b3J5KHN0cnVjdHVyZWRNb2RlbCk7Ci0JCUpzVHJhbnNsYXRpb25BZGFwdGVyIHRyYW5zbGF0aW9uQWRhcHRlciA9IChKc1RyYW5zbGF0aW9uQWRhcHRlcikgKChJRE9NTW9kZWwpIHN0cnVjdHVyZWRNb2RlbCkuZ2V0RG9jdW1lbnQoKS5nZXRBZGFwdGVyRm9yKElKc1RyYW5zbGF0aW9uLmNsYXNzKTsKLQkJSUpzVHJhbnNsYXRpb24gdHJhbnNsYXRpb24gPSB0cmFuc2xhdGlvbkFkYXB0ZXIuZ2V0SnNUcmFuc2xhdGlvbihmYWxzZSk7Ci0JCWFzc2VydFRydWUoImV4cGVjdGVkIGZ1bmN0aW9uIGRlZmluaXRpb24gaXMgbWlzc2luZyIsIHRyYW5zbGF0aW9uLmdldEpzVGV4dCgpLmluZGV4T2YoImZ1bmN0aW9uIGJsYWgoKSIpID49IDApOwotCi0JCS8vIHJlbGVhc2UgbW9kZWwKLQkJc3RydWN0dXJlZE1vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotCX0KLQotCXByb3RlY3RlZCBTdHJpbmcgcmVhZEZpbGUoU3RyaW5nIGZpbGVOYW1lKSB7CQkKLQkJU3RyaW5nIGlucHV0U3RyaW5nID0gbnVsbDsKLQkJSW5wdXRTdHJlYW0gZmlsZUlucHV0U3RyZWFtID0gbnVsbDsKLQotCQl0cnkgewotCQkJVVJMIHVybCA9IEFjdGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0RW50cnkoZmlsZU5hbWUpOwotCQkJZmlsZUlucHV0U3RyZWFtID0gdXJsLm9wZW5TdHJlYW0oKTsKLQotCQkJYnl0ZVtdIGlucHV0QnVmZmVyID0gbmV3IGJ5dGVbMTAyNF07Ci0JCQlpbnB1dFN0cmluZyA9IG5ldyBTdHJpbmcoKTsKLQkJCWludCBieXRlc1JlYWQgPSAtMTsKLQotCQkJd2hpbGUgKHRydWUpIHsKLQkJCQlieXRlc1JlYWQgPSBmaWxlSW5wdXRTdHJlYW0ucmVhZChpbnB1dEJ1ZmZlcik7Ci0JCQkJaWYgKGJ5dGVzUmVhZCA9PSAtMSkKLQkJCQkJYnJlYWs7Ci0JCQkJU3RyaW5nIGJ1ZmZlclN0cmluZyA9IG5ldyBTdHJpbmcoaW5wdXRCdWZmZXIpOwotCQkJCWJ1ZmZlclN0cmluZyA9IGJ1ZmZlclN0cmluZy5zdWJzdHJpbmcoMCwgYnl0ZXNSZWFkKTsKLQkJCQlpbnB1dFN0cmluZyA9IGlucHV0U3RyaW5nLmNvbmNhdChidWZmZXJTdHJpbmcpOwotCQkJfQotCi0JCQlpZiAoZmlsZUlucHV0U3RyZWFtICE9IG51bGwpCi0JCQkJZmlsZUlucHV0U3RyZWFtLmNsb3NlKCk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGV4Y2VwdGlvbikgewotCQkJU3RyaW5nV3JpdGVyIHMgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0JCQlleGNlcHRpb24ucHJpbnRTdGFja1RyYWNlKG5ldyBQcmludFdyaXRlcihzKSk7Ci0JCQlmYWlsKHMudG9TdHJpbmcoKSk7Ci0JCX0KLQotCQlyZXR1cm4gaW5wdXRTdHJpbmc7Ci0JfQotCi0JcHJvdGVjdGVkIHN0YXRpYyB2b2lkIHByaW50RXhjZXB0aW9uKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKLQkJZXhjZXB0aW9uLnByaW50U3RhY2tUcmFjZSgpOwotCX0KLQotCXByb3RlY3RlZCBJU3RydWN0dXJlZE1vZGVsIGdldE1vZGVsKFN0cmluZyBmaWxlTmFtZSkgewotCQlJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbCA9IG51bGw7Ci0JCUlucHV0U3RyZWFtIGlucHV0U3RyZWFtID0gbnVsbDsKLQotCQl0cnkgewotCQkJU3RyaW5nIGlucHV0ID0gZ2V0RmlsZShmaWxlTmFtZSk7Ci0JCQlpbnB1dFN0cmVhbSA9IG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShpbnB1dC5nZXRCeXRlcygiVVRGOCIpKTsKLQkJCVN0cmluZyBpZCA9IGlucHV0U3RyZWFtLnRvU3RyaW5nKCkuY29uY2F0KGZpbGVOYW1lKTsKLQkJCQotCQkJc3RydWN0dXJlZE1vZGVsID0gZk1vZGVsTWFuYWdlci5nZXRNb2RlbEZvclJlYWQoaWQsIGlucHV0U3RyZWFtLCBudWxsKTsKLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgewotCQkJU3RyaW5nV3JpdGVyIHMgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0JCQlleGNlcHRpb24ucHJpbnRTdGFja1RyYWNlKG5ldyBQcmludFdyaXRlcihzKSk7Ci0JCQlmYWlsKHMudG9TdHJpbmcoKSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQl0cnkgewotCQkJCWlucHV0U3RyZWFtLmNsb3NlKCk7Ci0JCQl9Ci0JCQljYXRjaCAoSU9FeGNlcHRpb24gZXhjZXB0aW9uKSB7Ci0JCQkJLy8gc2hvdWxkIGFscmVhZHkgYmUgY2xvc2VkCi0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gc3RydWN0dXJlZE1vZGVsOwotCX0KLQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0RmlsZShTdHJpbmcgZmlsZU5hbWUpIHsKLQkJcmV0dXJuIHJlYWRGaWxlKCIvdGVzdGZpbGVzLyIuY29uY2F0KGZpbGVOYW1lKSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLmNvcmUudGVzdHMvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS50ZXN0cy90ZXN0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWUxNDJkNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS50ZXN0cy90ZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLQ0KLTxwcm9qZWN0DQotICAgIG5hbWU9InRlc3RzdWl0ZSINCi0gICAgZGVmYXVsdD0icnVuIg0KLSAgICBiYXNlZGlyPSIuIj4NCi0gICAgDQotICAgIDwhLS0gVGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGlzIHNjcmlwdCAtLT4NCi0gICAgPCEtLSAke2VjbGlwc2UtaG9tZX0gICAtLT4NCi0gICAgPCEtLSAke2J1aWxkRGlyZWN0b3J5fSAgLS0+DQotICAgIDwhLS0gJHtidWlsZExhYmVsfSAgICAgICAgLS0+DQotDQotICAgIDwhLS0gc2hvdWxkIGJlIGxpdHRsZSBuZWVkIHRvIGNoYW5nZSB3aGF0J3MgYWJvdmUgIC0tPg0KLSAgICA8cHJvcGVydHkNCi0gICAgICAgIG5hbWU9InBsdWdpbi1uYW1lIg0KLSAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlLnRlc3RzIiAvPg0KLSAgICA8cHJvcGVydHkNCi0gICAgICAgIG5hbWU9ImNsYXNzbmFtZSINCi0gICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS50ZXN0cy50cmFuc2xhdGlvbi5BbGxXZWJDb3JlVGVzdHMiIC8+DQotICAgIDxwcm9wZXJ0eQ0KLSAgICAgICAgbmFtZT0idGVzdFR5cGUiDQotICAgICAgICB2YWx1ZT0iY29yZS10ZXN0IiAvPg0KLQ0KLSAgICA8IS0tIHNob3VsZCBiZSBsaXR0bGUgbmVlZCB0byBjaGFuZ2Ugd2hhdCdzIGJlbG93IC0tPg0KLQ0KLSAgICA8ZWNobyBtZXNzYWdlPSJiYXNlZGlyOiAke2Jhc2VkaXJ9IiAvPg0KLSAgICA8ZWNobyBtZXNzYWdlPSJlY2xpcHNlLWhvbWU6ICR7ZWNsaXBzZS1ob21lfSIgLz4NCi0gICAgPGVjaG8gbWVzc2FnZT0iYnVpbGREaXJlY3Rvcnk6ICR7YnVpbGREaXJlY3Rvcnl9IiAvPg0KLSAgICA8ZWNobyBtZXNzYWdlPSJwbHVnaW4tbmFtZTogJHtwbHVnaW4tbmFtZX0iIC8+DQotICAgIDxlY2hvIG1lc3NhZ2U9ImNsYXNzbmFtZTogJHtjbGFzc25hbWV9IiAvPg0KLSAgICA8ZWNobyBtZXNzYWdlPSJ0ZXN0VHlwZSAke3Rlc3RUeXBlfSIgLz4NCi0NCi0NCi0gICAgPHByb3BlcnR5DQotICAgICAgICBuYW1lPSJsaWJyYXJ5LWZpbGUiDQotICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2UudGVzdF8zLjEuMC9saWJyYXJ5LnhtbCIgLz4NCi0gICAgPHByb3BlcnR5DQotICAgICAgICBuYW1lPSJ3b3Jrc3BhY2UiDQotICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L2p1bml0d29ya3NwYWNlcy8ke3BsdWdpbi1uYW1lfSIgLz4NCi0gICAgICAgIA0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGFsbCBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBmb3IgLS0+DQotICAgIDwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+DQotICAgIDwhLS0gc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIC0tPg0KLSAgICA8dGFyZ2V0IG5hbWU9ImluaXQiPg0KLSAgICAgICAgPHRzdGFtcCAvPg0KLSAgICAgICAgPGRlbGV0ZT4NCi0gICAgICAgICAgICA8ZmlsZXNldA0KLSAgICAgICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSINCi0gICAgICAgICAgICAgICAgaW5jbHVkZXM9IiR7cGx1Z2luLW5hbWV9Lip4bWwiIC8+DQotICAgICAgICA8L2RlbGV0ZT4NCi0gICAgICAgIDwhLS0gbWFrZSBkaXJlY3RvcnksIGluIGNhc2UgcGF0aCBkb2Vzbid0IGV4aXN0IHlldCAtLT4NCi0gICAgICAgIDxta2RpciBkaXI9IiR7d29ya3NwYWNlfSIgLz4NCi0gICAgICAgIDwhLS0gIGJ1dCBkZWxldGUgdG8gbWFrZSBzdXJlIGZyZXNoIGNvbnRlbnRzLS0+DQotICAgICAgICA8ZGVsZXRlDQotICAgICAgICAgICAgZGlyPSIke3dvcmtzcGFjZX0iDQotICAgICAgICAgICAgcXVpZXQ9InRydWUiIC8+DQotDQotICAgIDwvdGFyZ2V0Pg0KLQ0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGRlZmluZXMgdGhlIHRlc3RzIHRoYXQgbmVlZCB0byBiZSBydW4uIC0tPg0KLSAgICA8dGFyZ2V0IG5hbWU9InN1aXRlIj4NCi0NCi0gICAgICAgIDxhbnQNCi0gICAgICAgICAgICB0YXJnZXQ9IiR7dGVzdFR5cGV9Ig0KLSAgICAgICAgICAgIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSINCi0gICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+DQotICAgICAgICAgICAgPHByb3BlcnR5DQotICAgICAgICAgICAgICAgIG5hbWU9ImRhdGEtZGlyIg0KLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHt3b3Jrc3BhY2V9IiAvPg0KLSAgICAgICAgICAgIDxwcm9wZXJ0eQ0KLSAgICAgICAgICAgICAgICBuYW1lPSJwbHVnaW4tbmFtZSINCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9IiAvPg0KLSAgICAgICAgICAgIDxwcm9wZXJ0eQ0KLSAgICAgICAgICAgICAgICBuYW1lPSJjbGFzc25hbWUiDQotICAgICAgICAgICAgICAgIHZhbHVlPSIke2NsYXNzbmFtZX0iIC8+DQotICAgICAgICAgICAgPHByb3BlcnR5DQotICAgICAgICAgICAgICAgIG5hbWU9InBsdWdpbi1wYXRoIg0KLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iIC8+DQotICAgICAgICA8L2FudD4NCi0NCi0gICAgICAgIDxjb3B5DQotICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIg0KLSAgICAgICAgICAgIGZpbGU9IiR7d29ya3NwYWNlfS8ubWV0YWRhdGEvLmxvZyINCi0gICAgICAgICAgICB0b2ZpbGU9IiR7YnVpbGREaXJlY3Rvcnl9LyR7YnVpbGRMYWJlbH0vdGVzdFJlc3VsdHMvY29uc29sZWxvZ3MvJHtwbHVnaW4tbmFtZX0uY29uc29sZWxvZy50eHQiIC8+DQotDQotICAgIDwvdGFyZ2V0Pg0KLQ0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGNvZGUgdG8gY2xlYW51cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBhZnRlciAtLT4NCi0gICAgPCEtLSBhZnRlciBhbGwgb2YgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4uIFlvdSBjYW4gdXNlIHRoaXMgdGFyZ2V0IHRvIC0tPg0KLSAgICA8IS0tIGRlbGV0ZSB0ZW1wb3JhcnkgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZC4gLS0+DQotICAgIDx0YXJnZXQgbmFtZT0iY2xlYW51cCI+DQotICAgICAgICA8IS0tIHVzdWFsbHkgbm8gbmVlZCB0byBkZWxldGUgd29ya3NwYWNlIHVudGlsIG5leHQgcnVuLCBhbmQgbGVhdmluZyBpdCBhbGxvd3MgaW5zcGVjdGlvbiAtLT4NCi0gICAgICAgIDwhLS0gPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiIC8+IC0tPg0KLSAgICA8L3RhcmdldD4NCi0NCi0gICAgPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSB0ZXN0IHN1aXRlLiBBbnkgYWN0aW9ucyB0aGF0IG5lZWQgdG8gaGFwcGVuIC0tPg0KLSAgICA8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+DQotICAgIDx0YXJnZXQNCi0gICAgICAgIG5hbWU9InJ1biINCi0gICAgICAgIGRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+DQotICAgICAgICA8YW50DQotICAgICAgICAgICAgdGFyZ2V0PSJjb2xsZWN0Ig0KLSAgICAgICAgICAgIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSINCi0gICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+DQotICAgICAgICAgICAgPHByb3BlcnR5DQotICAgICAgICAgICAgICAgIG5hbWU9ImluY2x1ZGVzIg0KLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0uKnhtbCIgLz4NCi0gICAgICAgICAgICA8cHJvcGVydHkNCi0gICAgICAgICAgICAgICAgbmFtZT0ib3V0cHV0LWZpbGUiDQotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfS54bWwiIC8+DQotICAgICAgICA8L2FudD4NCi0gICAgPC90YXJnZXQ+DQotDQotPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi5jb3JlLnRlc3RzL3Rlc3RGaWxlcy90ZXN0MS5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLmNvcmUudGVzdHMvdGVzdEZpbGVzL3Rlc3QxLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhNTNjNzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLmNvcmUudGVzdHMvdGVzdEZpbGVzL3Rlc3QxLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTxodG1sPgotPHNjcmlwdD4KLWZ1bmN0aW9uIGJsYWgoKXsKLQotCi0KLX0KLTwvc2NyaXB0PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmYmI3YTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjQiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZTZjM2Y1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0czwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxZDkxYzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogVGVzdHMgUGx1Zy1pbgotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzO3NpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4wCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMuQWN0aXZhdG9yCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAotIG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMsCi0gb3JnLmp1bml0LAotIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZSwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLAotIG9yZy5lY2xpcHNlLndzdC5qc2R0LmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0LmpzZHQudWksCi0gb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLmNvcmUsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMsCi0gb3JnLmVjbGlwc2UudWkuaWRlLAotIG9yZy5lY2xpcHNlLmpmYWNlLAotIG9yZy5lY2xpcHNlLnVpLndvcmtiZW5jaCwKLSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC51aQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS40Ci1CdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cywKLSBvcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMudHJhbnNsYXRpb24KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0ZDJlNGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLXNvdXJjZS4uID0gc3JjLwotb3V0cHV0Li4gPSBiaW4vCi1iaW4uaW5jbHVkZXMgPSBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgLgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL3BsdWdpbi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDUxZDc3OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPD9lY2xpcHNlIHZlcnNpb249IjMuMyI/Pg0KLTxwbHVnaW4+DQotICAgIDxleHRlbnNpb24NCi0gICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLmNvbW1hbmRzIj4NCi0JICAgIDxjb21tYW5kDQotCSAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnNob3dUcmFuc2xhdGlvbiINCi0JICAgICAgICAgIG5hbWU9IiVfVUlfU0hPV19UUkFOU0xBVElPTiI+DQotCSAgICA8L2NvbW1hbmQ+DQotCTwvZXh0ZW5zaW9uPg0KLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5iaW5kaW5ncyI+DQotICAgICAgPCEtLSAgd2luMzI6ICBNMT1DVFJMLCAgICBNMj1TSElGVCwgTTM9QUxULCBNND0tDQotICAgICAgICAgICAgY2FyYm9uOiBNMT1DT01NQU5ELCBNMj1TSElGVCwgTTM9QUxULCBNND1DVFJMDQotICAgICAgICAgICAgZ3RrOiA/IA0KLSAgICAgIC0tPg0KLQkJPGtleQ0KLQkJCXNlcXVlbmNlPSJNMStNMis4Ig0KLQkJCWNvbnRleHRJZD0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS5zdHJ1Y3R1cmVkVGV4dEVkaXRvclNjb3BlIg0KLQkJCWNvbW1hbmRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnNob3dUcmFuc2xhdGlvbiINCi0JCQlzY2hlbWVJZD0ib3JnLmVjbGlwc2UudWkuZGVmYXVsdEFjY2VsZXJhdG9yQ29uZmlndXJhdGlvbiIvPg0KLQk8L2V4dGVuc2lvbj4NCi0gICAgPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkuaGFuZGxlcnMiPg0KLSAgICAgICA8aGFuZGxlcg0KLSAgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzLnRyYW5zbGF0aW9uLlNob3dUcmFuc2xhdGlvbkhhbmRsZXIiDQotICAgICAgICAgICAgIGNvbW1hbmRJZD0ib3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnNob3dUcmFuc2xhdGlvbiI+DQotICAgICAgIDwvaGFuZGxlcj4NCi0JPC9leHRlbnNpb24+DQotPC9wbHVnaW4+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvanNkdC93ZWIvdWkvdGVzdHMvQWN0aXZhdG9yLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9qc2R0L3dlYi91aS90ZXN0cy9BY3RpdmF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTA3NGYwMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9qc2R0L3dlYi91aS90ZXN0cy9BY3RpdmF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKLQotLyoqCi0gKiBUaGUgYWN0aXZhdG9yIGNsYXNzIGNvbnRyb2xzIHRoZSBwbHVnLWluIGxpZmUgY3ljbGUKLSAqLwotcHVibGljIGNsYXNzIEFjdGl2YXRvciBleHRlbmRzIFBsdWdpbiB7Ci0KLQkvLyBUaGUgcGx1Zy1pbiBJRAotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMiOwotCi0JLy8gVGhlIHNoYXJlZCBpbnN0YW5jZQotCXByaXZhdGUgc3RhdGljIEFjdGl2YXRvciBwbHVnaW47Ci0JCi0JLyoqCi0JICogVGhlIGNvbnN0cnVjdG9yCi0JICovCi0JcHVibGljIEFjdGl2YXRvcigpIHsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW5zI3N0YXJ0KG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQotCSAqLwotCXB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnN0YXJ0KGNvbnRleHQpOwotCQlwbHVnaW4gPSB0aGlzOwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbiNzdG9wKG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQotCSAqLwotCXB1YmxpYyB2b2lkIHN0b3AoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJcGx1Z2luID0gbnVsbDsKLQkJc3VwZXIuc3RvcChjb250ZXh0KTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UKLQkgKgotCSAqIEByZXR1cm4gdGhlIHNoYXJlZCBpbnN0YW5jZQotCSAqLwotCXB1YmxpYyBzdGF0aWMgQWN0aXZhdG9yIGdldERlZmF1bHQoKSB7Ci0JCXJldHVybiBwbHVnaW47Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9qc2R0L3dlYi91aS90ZXN0cy9BbGxXZWJVSVRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9qc2R0L3dlYi91aS90ZXN0cy9BbGxXZWJVSVRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliMTc5ZTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvanNkdC93ZWIvdWkvdGVzdHMvQWxsV2ViVUlUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHM7Ci0KLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLXB1YmxpYyBjbGFzcyBBbGxXZWJVSVRlc3RzIHsKLQotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJVGVzdFN1aXRlIHN1aXRlID0gbmV3IFRlc3RTdWl0ZSgpOwotCQkvLyAkSlVuaXQtQkVHSU4kCi0KLQkJLy8gJEpVbml0LUVORCQKLQkJcmV0dXJuIHN1aXRlOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvanNkdC93ZWIvdWkvdGVzdHMvdHJhbnNsYXRpb24vSlNUcmFuc2xhdGlvbkVkaXRvcklucHV0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9qc2R0L3dlYi91aS90ZXN0cy90cmFuc2xhdGlvbi9KU1RyYW5zbGF0aW9uRWRpdG9ySW5wdXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODVlNDdkMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9qc2R0L3dlYi91aS90ZXN0cy90cmFuc2xhdGlvbi9KU1RyYW5zbGF0aW9uRWRpdG9ySW5wdXQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCi0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KLSAqIA0KLSAqIENvbnRyaWJ1dG9yczoNCi0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotDQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMudHJhbnNsYXRpb247DQotDQotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07DQotDQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklTdG9yYWdlOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VEZXNjcmlwdG9yOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkRvY3VtZW50Ow0KLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JUGVyc2lzdGFibGVFbGVtZW50Ow0KLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JU3RvcmFnZUVkaXRvcklucHV0Ow0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS5qYXZhc2NyaXB0LklKc1RyYW5zbGF0aW9uOw0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS5qYXZhc2NyaXB0LkpzVHJhbnNsYXRpb25BZGFwdGVyOw0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwudXRpbC5Eb2N1bWVudElucHV0U3RyZWFtOw0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOw0KLQ0KLS8qKg0KLSAqIEBhdXRob3Igbml0aW4NCi0gKiANCi0gKi8NCi1wdWJsaWMgY2xhc3MgSlNUcmFuc2xhdGlvbkVkaXRvcklucHV0IGltcGxlbWVudHMgSVN0b3JhZ2VFZGl0b3JJbnB1dCB7DQotCXByaXZhdGUgY2xhc3MgSlNQVHJhbnNsYXRpb25TdG9yYWdlIGltcGxlbWVudHMgSVN0b3JhZ2Ugew0KLQkJLyoqDQotCQkgKiANCi0JCSAqLw0KLQkJcHVibGljIEpTUFRyYW5zbGF0aW9uU3RvcmFnZShJRE9NTW9kZWwganNwTW9kZWwpIHsNCi0JCQlmTW9kZWwgPSBqc3BNb2RlbDsNCi0JCX0NCi0NCi0JCS8qDQotCQkgKiAobm9uLUphdmFkb2MpDQotCQkgKiANCi0JCSAqIEBzZWUNCi0JCSAqIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlI2dldEFkYXB0ZXIoamF2YS5sYW5nLkNsYXNzKQ0KLQkJICovDQotCQlwdWJsaWMgT2JqZWN0IGdldEFkYXB0ZXIoQ2xhc3MgYWRhcHRlcikgew0KLQkJCXJldHVybiBmTW9kZWwuZ2V0QWRhcHRlcihhZGFwdGVyKTsNCi0JCX0NCi0NCi0JCS8qDQotCQkgKiAobm9uLUphdmFkb2MpDQotCQkgKiANCi0JCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVN0b3JhZ2UjZ2V0Q29udGVudHMoKQ0KLQkJICovDQotCQlwdWJsaWMgSW5wdXRTdHJlYW0gZ2V0Q29udGVudHMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7DQotCQkJcmV0dXJuIG5ldyBEb2N1bWVudElucHV0U3RyZWFtKG5ldyBEb2N1bWVudChnZXRUcmFuc2xhdGlvbkFkYXB0ZXIoKS5nZXRKc1RyYW5zbGF0aW9uKGZhbHNlKS5nZXRKc1RleHQoKSkpOw0KLQkJfQ0KLQ0KLQkJLyoNCi0JCSAqIChub24tSmF2YWRvYykNCi0JCSAqIA0KLQkJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JU3RvcmFnZSNnZXRGdWxsUGF0aCgpDQotCQkgKi8NCi0JCXB1YmxpYyBJUGF0aCBnZXRGdWxsUGF0aCgpIHsNCi0JCQlyZXR1cm4gbmV3IFBhdGgoZ2V0VHJhbnNsYXRpb25BZGFwdGVyKCkuZ2V0SnNUcmFuc2xhdGlvbihmYWxzZSkuZ2V0SmF2YVBhdGgoKSk7DQotCQl9DQotDQotCQkvKg0KLQkJICogKG5vbi1KYXZhZG9jKQ0KLQkJICogDQotCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklTdG9yYWdlI2dldE5hbWUoKQ0KLQkJICovDQotCQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7DQotCQkJcmV0dXJuIG5ldyBQYXRoKGZNb2RlbC5nZXRCYXNlTG9jYXRpb24oKSkubGFzdFNlZ21lbnQoKSArICIuanMiOw0KLQkJfQ0KLQ0KLQkJLyoNCi0JCSAqIChub24tSmF2YWRvYykNCi0JCSAqIA0KLQkJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JU3RvcmFnZSNpc1JlYWRPbmx5KCkNCi0JCSAqLw0KLQkJcHVibGljIGJvb2xlYW4gaXNSZWFkT25seSgpIHsNCi0JCQlyZXR1cm4gdHJ1ZTsNCi0JCX0NCi0JfQ0KLQ0KLQlJRE9NTW9kZWwgZk1vZGVsOw0KLQ0KLQlwcml2YXRlIEpTUFRyYW5zbGF0aW9uU3RvcmFnZSBmU3RvcmFnZTsNCi0NCi0JLyoqDQotCSAqIA0KLQkgKi8NCi0JcHVibGljIEpTVHJhbnNsYXRpb25FZGl0b3JJbnB1dChJRE9NTW9kZWwgbW9kZWwpIHsNCi0JCWZTdG9yYWdlID0gbmV3IEpTUFRyYW5zbGF0aW9uU3RvcmFnZShtb2RlbCk7DQotCX0NCi0NCi0JLyoNCi0JICogKG5vbi1KYXZhZG9jKQ0KLQkgKiANCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQjZXhpc3RzKCkNCi0JICovDQotCXB1YmxpYyBib29sZWFuIGV4aXN0cygpIHsNCi0JCXJldHVybiBmYWxzZTsNCi0JfQ0KLQ0KLQkvKg0KLQkgKiAobm9uLUphdmFkb2MpDQotCSAqIA0KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlI2dldEFkYXB0ZXIoamF2YS5sYW5nLkNsYXNzKQ0KLQkgKi8NCi0JcHVibGljIE9iamVjdCBnZXRBZGFwdGVyKENsYXNzIGFkYXB0ZXIpIHsNCi0JCXJldHVybiBmTW9kZWwuZ2V0QWRhcHRlcihhZGFwdGVyKTsNCi0JfQ0KLQ0KLQkvKg0KLQkgKiAobm9uLUphdmFkb2MpDQotCSAqIA0KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dCNnZXRJbWFnZURlc2NyaXB0b3IoKQ0KLQkgKi8NCi0JcHVibGljIEltYWdlRGVzY3JpcHRvciBnZXRJbWFnZURlc2NyaXB0b3IoKSB7DQotCQlyZXR1cm4gbnVsbDsNCi0JfQ0KLQ0KLQkvKg0KLQkgKiAobm9uLUphdmFkb2MpDQotCSAqIA0KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dCNnZXROYW1lKCkNCi0JICovDQotCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsNCi0JCXJldHVybiBmU3RvcmFnZS5nZXROYW1lKCk7DQotCX0NCi0NCi0JLyoNCi0JICogKG5vbi1KYXZhZG9jKQ0KLQkgKiANCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQjZ2V0UGVyc2lzdGFibGUoKQ0KLQkgKi8NCi0JcHVibGljIElQZXJzaXN0YWJsZUVsZW1lbnQgZ2V0UGVyc2lzdGFibGUoKSB7DQotCQlyZXR1cm4gbnVsbDsNCi0JfQ0KLQ0KLQkvKg0KLQkgKiAobm9uLUphdmFkb2MpDQotCSAqIA0KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklTdG9yYWdlRWRpdG9ySW5wdXQjZ2V0U3RvcmFnZSgpDQotCSAqLw0KLQlwdWJsaWMgSVN0b3JhZ2UgZ2V0U3RvcmFnZSgpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsNCi0JCXJldHVybiBmU3RvcmFnZTsNCi0JfQ0KLQ0KLQkvKg0KLQkgKiAobm9uLUphdmFkb2MpDQotCSAqIA0KLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dCNnZXRUb29sVGlwVGV4dCgpDQotCSAqLw0KLQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgew0KLQkJcmV0dXJuIGZNb2RlbC5nZXRCYXNlTG9jYXRpb24oKTsNCi0JfQ0KLQ0KLQlKc1RyYW5zbGF0aW9uQWRhcHRlciBnZXRUcmFuc2xhdGlvbkFkYXB0ZXIoKSB7DQotCQlKc1RyYW5zbGF0aW9uQWRhcHRlciBhZGFwdGVyID0gKEpzVHJhbnNsYXRpb25BZGFwdGVyKSBmTW9kZWwuZ2V0RG9jdW1lbnQoKS5nZXRBZGFwdGVyRm9yKElKc1RyYW5zbGF0aW9uLmNsYXNzKTsNCi0JCXJldHVybiBhZGFwdGVyOw0KLQl9DQotDQotDQotfQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2pzZHQvd2ViL3VpL3Rlc3RzL3RyYW5zbGF0aW9uL1Nob3dUcmFuc2xhdGlvbkhhbmRsZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5qc2R0LndlYi51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2pzZHQvd2ViL3VpL3Rlc3RzL3RyYW5zbGF0aW9uL1Nob3dUcmFuc2xhdGlvbkhhbmRsZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmFkOWQxNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9qc2R0L3dlYi91aS90ZXN0cy90cmFuc2xhdGlvbi9TaG93VHJhbnNsYXRpb25IYW5kbGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCi0gKiANCi0gKiBDb250cmlidXRvcnM6DQotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLQ0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzLnRyYW5zbGF0aW9uOw0KLQ0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsNCi0NCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5BYnN0cmFjdEhhbmRsZXI7DQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXZlbnQ7DQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXhjZXB0aW9uOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JTWFya2VyOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7DQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7DQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5qb2JzLkpvYjsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5Qb3NpdGlvbjsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5zb3VyY2UuQW5ub3RhdGlvbjsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5zb3VyY2UuSUFubm90YXRpb25Nb2RlbDsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5Ow0KLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsNCi1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVN0b3JhZ2VFZGl0b3JJbnB1dDsNCi1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247DQotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7DQotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmhhbmRsZXJzLkhhbmRsZXJVdGlsOw0KLWltcG9ydCBvcmcuZWNsaXBzZS51aS5pZGUuSURFOw0KLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wcm9ncmVzcy5VSUpvYjsNCi1pbXBvcnQgb3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5Bbm5vdGF0aW9uVHlwZUxvb2t1cDsNCi1pbXBvcnQgb3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5JVGV4dEVkaXRvcjsNCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmpzZHQuY29yZS5jb21waWxlci5JUHJvYmxlbTsNCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmpzZHQudWkuSmF2YVNjcmlwdFVJOw0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS5qYXZhc2NyaXB0LklKc1RyYW5zbGF0aW9uOw0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuanNkdC53ZWIuY29yZS5qYXZhc2NyaXB0LkpzVHJhbnNsYXRpb25BZGFwdGVyOw0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU5vZGVBZGFwdGVyOw0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOw0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU5vZGU7DQotDQotDQotLyoqDQotICogT3BlbnMgdGhlIGN1cnJlbnQgbWFya3VwIGVkaXRvcidzIGN1cnJlbnQgdHJhbnNsYXRlZCBzb3VyY2UgaW4gdGhlIEphdmFTY3JpcHQgZWRpdG9yDQotICogDQotICogSW52b2tlIHdpdGggTTErTTIrOA0KLSAqIA0KLSAqIEBhdXRob3Igbml0aW4NCi0gKi8NCi1wdWJsaWMgY2xhc3MgU2hvd1RyYW5zbGF0aW9uSGFuZGxlciBleHRlbmRzIEFic3RyYWN0SGFuZGxlciB7DQotDQotCS8qKg0KLQkgKiANCi0JICovDQotCXB1YmxpYyBTaG93VHJhbnNsYXRpb25IYW5kbGVyKCkgew0KLQl9DQotDQotDQotCS8qDQotCSAqIChub24tSmF2YWRvYykNCi0JICogDQotCSAqIEBzZWUNCi0JICogb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5JSGFuZGxlciNleGVjdXRlKG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMNCi0JICogLkV4ZWN1dGlvbkV2ZW50KQ0KLQkgKi8NCi0JcHVibGljIE9iamVjdCBleGVjdXRlKGZpbmFsIEV4ZWN1dGlvbkV2ZW50IGV2ZW50KSB0aHJvd3MgRXhlY3V0aW9uRXhjZXB0aW9uIHsNCi0JCS8vIElERS5vcGVuRWRpdG9yKGV2ZW50LmdldEFwcGxpY2F0aW9uQ29udGV4dCgpLCBjcmVhdGVFZGl0b3JJbnB1dCgpLA0KLQkJLy8gSmF2YVVJLklEX0NVX0VESVRPUiwgdHJ1ZSk7DQotCQlJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IEhhbmRsZXJVdGlsLmdldEN1cnJlbnRTZWxlY3Rpb24oZXZlbnQpOw0KLQkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7DQotCQkJTGlzdCBsaXN0ID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbikgc2VsZWN0aW9uKS50b0xpc3QoKTsNCi0JCQlpZiAoIWxpc3QuaXNFbXB0eSgpKSB7DQotCQkJCWlmIChsaXN0LmdldCgwKSBpbnN0YW5jZW9mIElET01Ob2RlKSB7DQotCQkJCQlmaW5hbCBJRE9NTW9kZWwgbW9kZWwgPSAoKElET01Ob2RlKSBsaXN0LmdldCgwKSkuZ2V0TW9kZWwoKTsNCi0JCQkJCUlOb2RlQWRhcHRlciBhZGFwdGVyID0gbW9kZWwuZ2V0RG9jdW1lbnQoKS5nZXRBZGFwdGVyRm9yKElKc1RyYW5zbGF0aW9uLmNsYXNzKTsNCi0JCQkJCWlmIChhZGFwdGVyICE9IG51bGwpIHsNCi0JCQkJCQlKb2Igb3BlbmVyID0gbmV3IFVJSm9iKCJPcGVuaW5nIEphdmFTY3JpcHQgVHJhbnNsYXRpb24iKSB7DQotCQkJCQkJCXB1YmxpYyBJU3RhdHVzIHJ1bkluVUlUaHJlYWQoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7DQotCQkJCQkJCQlKc1RyYW5zbGF0aW9uQWRhcHRlciB0cmFuc2xhdGlvbkFkYXB0ZXIgPSAoSnNUcmFuc2xhdGlvbkFkYXB0ZXIpIG1vZGVsLmdldERvY3VtZW50KCkuZ2V0QWRhcHRlckZvcihJSnNUcmFuc2xhdGlvbi5jbGFzcyk7DQotCQkJCQkJCQlmaW5hbCBJSnNUcmFuc2xhdGlvbiB0cmFuc2xhdGlvbiA9IHRyYW5zbGF0aW9uQWRhcHRlci5nZXRKc1RyYW5zbGF0aW9uKGZhbHNlKTsNCi0NCi0JCQkJCQkJCS8vIGNyZWF0ZSBhbiBJRWRpdG9ySW5wdXQgZm9yIHRoZSBKYXZhIGVkaXRvcg0KLQkJCQkJCQkJZmluYWwgSVN0b3JhZ2VFZGl0b3JJbnB1dCBpbnB1dCA9IG5ldyBKU1RyYW5zbGF0aW9uRWRpdG9ySW5wdXQobW9kZWwpOw0KLQkJCQkJCQkJdHJ5IHsNCi0JCQkJCQkJCQlJRWRpdG9yUGFydCBlZGl0b3IgPSBJREUub3BlbkVkaXRvcihQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKSwgaW5wdXQsIEphdmFTY3JpcHRVSS5JRF9DVV9FRElUT1IsIHRydWUpOw0KLQkJCQkJCQkJCS8vIE5vdyBhZGQgdGhlIHByb2JsZW1zIHdlIGZvdW5kDQotCQkJCQkJCQkJaWYgKGVkaXRvciBpbnN0YW5jZW9mIElUZXh0RWRpdG9yKSB7DQotCQkJCQkJCQkJCUlBbm5vdGF0aW9uTW9kZWwgYW5ub3RhdGlvbk1vZGVsID0gKChJVGV4dEVkaXRvcikgZWRpdG9yKS5nZXREb2N1bWVudFByb3ZpZGVyKCkuZ2V0QW5ub3RhdGlvbk1vZGVsKGlucHV0KTsNCi0JCQkJCQkJCQkJdHJhbnNsYXRpb24ucmVjb25jaWxlQ29tcGlsYXRpb25Vbml0KCk7DQotCQkJCQkJCQkJCUxpc3QgcHJvYmxlbXNMaXN0ID0gdHJhbnNsYXRpb24uZ2V0UHJvYmxlbXMoKTsNCi0JCQkJCQkJCQkJSVByb2JsZW1bXSBwcm9ibGVtcyA9IChJUHJvYmxlbVtdKSBwcm9ibGVtc0xpc3QudG9BcnJheShuZXcgSVByb2JsZW1bcHJvYmxlbXNMaXN0LnNpemUoKV0pOw0KLQkJCQkJCQkJCQlBbm5vdGF0aW9uVHlwZUxvb2t1cCBsb29rdXAgPSBuZXcgQW5ub3RhdGlvblR5cGVMb29rdXAoKTsNCi0JCQkJCQkJCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9ibGVtcy5sZW5ndGg7IGkrKykgew0KLS8vCQkJCQkJCQkJCQlpZiAocHJvYmxlbXNbaV0gaW5zdGFuY2VvZiBJSlNQUHJvYmxlbSkNCi0vLwkJCQkJCQkJCQkJCWNvbnRpbnVlOw0KLQkJCQkJCQkJCQkJaW50IGxlbmd0aCA9IHByb2JsZW1zW2ldLmdldFNvdXJjZUVuZCgpIC0gcHJvYmxlbXNbaV0uZ2V0U291cmNlU3RhcnQoKSArIDE7DQotCQkJCQkJCQkJCQlQb3NpdGlvbiBwb3NpdGlvbiA9IG5ldyBQb3NpdGlvbihwcm9ibGVtc1tpXS5nZXRTb3VyY2VTdGFydCgpLCBsZW5ndGgpOw0KLQkJCQkJCQkJCQkJQW5ub3RhdGlvbiBhbm5vdGF0aW9uID0gbnVsbDsNCi0JCQkJCQkJCQkJCVN0cmluZyB0eXBlID0gbG9va3VwLmdldEFubm90YXRpb25UeXBlKElNYXJrZXIuUFJPQkxFTSwgSU1hcmtlci5TRVZFUklUWV9JTkZPKTsNCi0JCQkJCQkJCQkJCWlmIChwcm9ibGVtc1tpXS5pc0Vycm9yKCkpIHsNCi0JCQkJCQkJCQkJCQl0eXBlID0gbG9va3VwLmdldEFubm90YXRpb25UeXBlKElNYXJrZXIuUFJPQkxFTSwgSU1hcmtlci5TRVZFUklUWV9FUlJPUik7DQotCQkJCQkJCQkJCQl9DQotCQkJCQkJCQkJCQllbHNlIGlmIChwcm9ibGVtc1tpXS5pc1dhcm5pbmcoKSkgew0KLQkJCQkJCQkJCQkJCXR5cGUgPSBsb29rdXAuZ2V0QW5ub3RhdGlvblR5cGUoSU1hcmtlci5QUk9CTEVNLCBJTWFya2VyLlNFVkVSSVRZX1dBUk5JTkcpOw0KLQkJCQkJCQkJCQkJfQ0KLQkJCQkJCQkJCQkJYW5ub3RhdGlvbiA9IG5ldyBBbm5vdGF0aW9uKHR5cGUsIGZhbHNlLCBwcm9ibGVtc1tpXS5nZXRNZXNzYWdlKCkpOw0KLQkJCQkJCQkJCQkJaWYgKGFubm90YXRpb24gIT0gbnVsbCkgew0KLQkJCQkJCQkJCQkJCWFubm90YXRpb25Nb2RlbC5hZGRBbm5vdGF0aW9uKGFubm90YXRpb24sIHBvc2l0aW9uKTsNCi0JCQkJCQkJCQkJCX0NCi0JCQkJCQkJCQkJfQ0KLQkJCQkJCQkJCX0NCi0JCQkJCQkJCX0NCi0JCQkJCQkJCWNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBlKSB7DQotCQkJCQkJCQkJZS5wcmludFN0YWNrVHJhY2UoKTsNCi0JCQkJCQkJCQlEaXNwbGF5LmdldEN1cnJlbnQoKS5iZWVwKCk7DQotCQkJCQkJCQl9DQotCQkJCQkJCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsNCi0JCQkJCQkJfQ0KLQkJCQkJCX07DQotCQkJCQkJb3BlbmVyLnNldFN5c3RlbShmYWxzZSk7DQotCQkJCQkJb3BlbmVyLnNldFVzZXIodHJ1ZSk7DQotCQkJCQkJb3BlbmVyLnNjaGVkdWxlKCk7DQotCQkJCQl9DQotCQkJCX0NCi0JCQl9DQotCQl9DQotCQlyZXR1cm4gbnVsbDsNCi0JfQ0KLX0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMvdGVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4ZTAwMWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzL3Rlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTE0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotDQotPHByb2plY3QNCi0gICAgbmFtZT0idGVzdHN1aXRlIg0KLSAgICBkZWZhdWx0PSJydW4iDQotICAgIGJhc2VkaXI9Ii4iPg0KLSAgICANCi0gICAgPCEtLSBUaGUgZm9sbG93aW5nIHByb3BlcnRpZXMgc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPg0KLSAgICA8IS0tICR7ZWNsaXBzZS1ob21lfSAgIC0tPg0KLSAgICA8IS0tICR7YnVpbGREaXJlY3Rvcnl9ICAtLT4NCi0gICAgPCEtLSAke2J1aWxkTGFiZWx9ICAgICAgICAtLT4NCi0NCi0gICAgPCEtLSBzaG91bGQgYmUgbGl0dGxlIG5lZWQgdG8gY2hhbmdlIHdoYXQncyBhYm92ZSAgLS0+DQotICAgIDxwcm9wZXJ0eQ0KLSAgICAgICAgbmFtZT0icGx1Z2luLW5hbWUiDQotICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LmpzZHQud2ViLnVpLnRlc3RzIiAvPg0KLSAgICA8cHJvcGVydHkNCi0gICAgICAgIG5hbWU9ImNsYXNzbmFtZSINCi0gICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QuanNkdC53ZWIudWkudGVzdHMuQWxsV2ViVUlUZXN0cyIgLz4NCi0gICAgPHByb3BlcnR5DQotICAgICAgICBuYW1lPSJ0ZXN0VHlwZSINCi0gICAgICAgIHZhbHVlPSJ1aS10ZXN0IiAvPg0KLQ0KLSAgICA8IS0tIHNob3VsZCBiZSBsaXR0bGUgbmVlZCB0byBjaGFuZ2Ugd2hhdCdzIGJlbG93IC0tPg0KLQ0KLSAgICA8ZWNobyBtZXNzYWdlPSJiYXNlZGlyOiAke2Jhc2VkaXJ9IiAvPg0KLSAgICA8ZWNobyBtZXNzYWdlPSJlY2xpcHNlLWhvbWU6ICR7ZWNsaXBzZS1ob21lfSIgLz4NCi0gICAgPGVjaG8gbWVzc2FnZT0iYnVpbGREaXJlY3Rvcnk6ICR7YnVpbGREaXJlY3Rvcnl9IiAvPg0KLSAgICA8ZWNobyBtZXNzYWdlPSJwbHVnaW4tbmFtZTogJHtwbHVnaW4tbmFtZX0iIC8+DQotICAgIDxlY2hvIG1lc3NhZ2U9ImNsYXNzbmFtZTogJHtjbGFzc25hbWV9IiAvPg0KLSAgICA8ZWNobyBtZXNzYWdlPSJ0ZXN0VHlwZSAke3Rlc3RUeXBlfSIgLz4NCi0NCi0NCi0gICAgPHByb3BlcnR5DQotICAgICAgICBuYW1lPSJsaWJyYXJ5LWZpbGUiDQotICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2UudGVzdF8zLjEuMC9saWJyYXJ5LnhtbCIgLz4NCi0gICAgPHByb3BlcnR5DQotICAgICAgICBuYW1lPSJ3b3Jrc3BhY2UiDQotICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L2p1bml0d29ya3NwYWNlcy8ke3BsdWdpbi1uYW1lfSIgLz4NCi0gICAgICAgIA0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGFsbCBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBmb3IgLS0+DQotICAgIDwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+DQotICAgIDwhLS0gc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIC0tPg0KLSAgICA8dGFyZ2V0IG5hbWU9ImluaXQiPg0KLSAgICAgICAgPHRzdGFtcCAvPg0KLSAgICAgICAgPGRlbGV0ZT4NCi0gICAgICAgICAgICA8ZmlsZXNldA0KLSAgICAgICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSINCi0gICAgICAgICAgICAgICAgaW5jbHVkZXM9IiR7cGx1Z2luLW5hbWV9Lip4bWwiIC8+DQotICAgICAgICA8L2RlbGV0ZT4NCi0gICAgICAgIDwhLS0gbWFrZSBkaXJlY3RvcnksIGluIGNhc2UgcGF0aCBkb2Vzbid0IGV4aXN0IHlldCAtLT4NCi0gICAgICAgIDxta2RpciBkaXI9IiR7d29ya3NwYWNlfSIgLz4NCi0gICAgICAgIDwhLS0gIGJ1dCBkZWxldGUgdG8gbWFrZSBzdXJlIGZyZXNoIGNvbnRlbnRzLS0+DQotICAgICAgICA8ZGVsZXRlDQotICAgICAgICAgICAgZGlyPSIke3dvcmtzcGFjZX0iDQotICAgICAgICAgICAgcXVpZXQ9InRydWUiIC8+DQotDQotICAgIDwvdGFyZ2V0Pg0KLQ0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGRlZmluZXMgdGhlIHRlc3RzIHRoYXQgbmVlZCB0byBiZSBydW4uIC0tPg0KLSAgICA8dGFyZ2V0IG5hbWU9InN1aXRlIj4NCi0NCi0gICAgICAgIDxhbnQNCi0gICAgICAgICAgICB0YXJnZXQ9IiR7dGVzdFR5cGV9Ig0KLSAgICAgICAgICAgIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSINCi0gICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+DQotICAgICAgICAgICAgPHByb3BlcnR5DQotICAgICAgICAgICAgICAgIG5hbWU9ImRhdGEtZGlyIg0KLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHt3b3Jrc3BhY2V9IiAvPg0KLSAgICAgICAgICAgIDxwcm9wZXJ0eQ0KLSAgICAgICAgICAgICAgICBuYW1lPSJwbHVnaW4tbmFtZSINCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9IiAvPg0KLSAgICAgICAgICAgIDxwcm9wZXJ0eQ0KLSAgICAgICAgICAgICAgICBuYW1lPSJjbGFzc25hbWUiDQotICAgICAgICAgICAgICAgIHZhbHVlPSIke2NsYXNzbmFtZX0iIC8+DQotICAgICAgICAgICAgPHByb3BlcnR5DQotICAgICAgICAgICAgICAgIG5hbWU9InBsdWdpbi1wYXRoIg0KLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iIC8+DQotICAgICAgICA8L2FudD4NCi0NCi0gICAgICAgIDxjb3B5DQotICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIg0KLSAgICAgICAgICAgIGZpbGU9IiR7d29ya3NwYWNlfS8ubWV0YWRhdGEvLmxvZyINCi0gICAgICAgICAgICB0b2ZpbGU9IiR7YnVpbGREaXJlY3Rvcnl9LyR7YnVpbGRMYWJlbH0vdGVzdFJlc3VsdHMvY29uc29sZWxvZ3MvJHtwbHVnaW4tbmFtZX0uY29uc29sZWxvZy50eHQiIC8+DQotDQotICAgIDwvdGFyZ2V0Pg0KLQ0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGNvZGUgdG8gY2xlYW51cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBhZnRlciAtLT4NCi0gICAgPCEtLSBhZnRlciBhbGwgb2YgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4uIFlvdSBjYW4gdXNlIHRoaXMgdGFyZ2V0IHRvIC0tPg0KLSAgICA8IS0tIGRlbGV0ZSB0ZW1wb3JhcnkgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZC4gLS0+DQotICAgIDx0YXJnZXQgbmFtZT0iY2xlYW51cCI+DQotICAgICAgICA8IS0tIHVzdWFsbHkgbm8gbmVlZCB0byBkZWxldGUgd29ya3NwYWNlIHVudGlsIG5leHQgcnVuLCBhbmQgbGVhdmluZyBpdCBhbGxvd3MgaW5zcGVjdGlvbiAtLT4NCi0gICAgICAgIDwhLS0gPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiIC8+IC0tPg0KLSAgICA8L3RhcmdldD4NCi0NCi0gICAgPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSB0ZXN0IHN1aXRlLiBBbnkgYWN0aW9ucyB0aGF0IG5lZWQgdG8gaGFwcGVuIC0tPg0KLSAgICA8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+DQotICAgIDx0YXJnZXQNCi0gICAgICAgIG5hbWU9InJ1biINCi0gICAgICAgIGRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+DQotICAgICAgICA8YW50DQotICAgICAgICAgICAgdGFyZ2V0PSJjb2xsZWN0Ig0KLSAgICAgICAgICAgIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSINCi0gICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+DQotICAgICAgICAgICAgPHByb3BlcnR5DQotICAgICAgICAgICAgICAgIG5hbWU9ImluY2x1ZGVzIg0KLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0uKnhtbCIgLz4NCi0gICAgICAgICAgICA8cHJvcGVydHkNCi0gICAgICAgICAgICAgICAgbmFtZT0ib3V0cHV0LWZpbGUiDQotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfS54bWwiIC8+DQotICAgICAgICA8L2FudD4NCi0gICAgPC90YXJnZXQ+DQotDQotPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2YzYwMjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMvIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNCIvPgotCTxjbGFzc3BhdGhlbnRyeSBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiIGtpbmQ9ImNvbiI+Ci0JCTxhY2Nlc3NydWxlcz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49Im9yZy9lY2xpcHNlL3dzdC8qKiIvPgotCQk8L2FjY2Vzc3J1bGVzPgotCTwvY2xhc3NwYXRoZW50cnk+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy8uY3ZzaWdub3JlIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiMmZmMmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLWJpbgotYnVpbGQueG1sCi10ZW1wLmZvbGRlcgotc3NlbW9kZWx0ZXN0cy5qYXIKLWphdmFDb21waWxlci5zc2Vtb2RlbHRlc3RzLmphci5hcmdzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwNzNmZjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+PC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZmE1YzkxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjMyIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotZW5jb2RpbmcvPHByb2plY3Q+PUlTTy04ODU5LTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlYzU3NTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNNb24gQXByIDE3IDAxOjQ4OjM5IEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotbGluZS5zZXBhcmF0b3I9XHJcbgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmN2JhYzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLSNTYXQgQXVnIDE5IDE2OjMxOjQzIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5jbGVhbk91dHB1dEZvbGRlcj1jbGVhbgotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5kdXBsaWNhdGVSZXNvdXJjZVRhc2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5pbnZhbGlkQ2xhc3NwYXRoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5yZXNvdXJjZUNvcHlFeGNsdXNpb25GaWx0ZXI9Ki5sYXVuY2gKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNpcmN1bGFyQ2xhc3NwYXRoPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGguZXhjbHVzaW9uUGF0dGVybnM9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLm11bHRpcGxlT3V0cHV0TG9jYXRpb25zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZG9jLmNvbW1lbnQuc3VwcG9ydD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5tYXhQcm9ibGVtUGVyVW5pdD0xMDAKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NEZXByZWNhdGVkUmVmPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzTm90VmlzaWJsZVJlZj1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHJpdmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c092ZXJyaWRpbmc9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wdWJsaWMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wcml2YXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuc2FmZVR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGF0aWJsZUpES0xldmVsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wbGV0ZUNsYXNzcGF0aD1lcnJvcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzAxYzdhZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotI01vbiBBcHIgMTcgMDE6NDg6MzkgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1pbnRlcm5hbC5kZWZhdWx0LmNvbXBsaWFuY2U9ZGVmYXVsdAotb3JnLmVjbGlwc2UuamR0LnVpLnRleHQuY3VzdG9tX2NvZGVfdGVtcGxhdGVzPTw/eG1sIHZlcnNpb25cPSIxLjAiIGVuY29kaW5nXD0iVVRGLTgiPz5cclxuPHRlbXBsYXRlcy8+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU5MzY4Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozMiBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLmVuYWJsZS5wcm9qZWN0LnJlZmFjdG9yaW5nLmhpc3Rvcnk9ZmFsc2UKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjNTIyYmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0jTW9uIEFwciAxNyAwMjowMTozMyBFRFQgMjAwNgotY29tcGlsZXJzLmluY29tcGF0aWJsZS1lbnZpcm9ubWVudD0wCi1jb21waWxlcnMucC5idWlsZD0wCi1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLmlsbGVnYWwtYXR0LXZhbHVlPTAKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0wCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0wCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy5wLnVudXNlZC1lbGVtZW50LW9yLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTJmYTE3ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUuMAotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzCi1CdW5kbGUtVmVyc2lvbjogMS4wLjMwMC5xdWFsaWZpZXIKLUJ1bmRsZS1DbGFzc1BhdGg6IHNzZW1vZGVsdGVzdHMuamFyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMuU1NFTW9kZWxUZXN0c1BsdWdpbgotQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IuMAotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLAotIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5hZGFwdGRvbSwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMuZG9jdW1lbnQsCi0gb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLmV2ZW50cywKLSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMuZXhhbXBsZXMsCi0gb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLmxpZmUsCi0gb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLnRocmVhZGluZwotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLAotIG9yZy5qdW5pdDtidW5kbGUtdmVyc2lvbj0iWzMuOC4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKLSBjb20uaWJtLmljdQotQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL2Fib3V0Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE5OWRmMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUsIDIwMDg8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjQxZTdmNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLWJpbi5pbmNsdWRlcyA9IHNzZW1vZGVsdGVzdHMuamFyLFwKLSAgICAgICAgICAgICAgIHRlc3QueG1sLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzCi1zb3VyY2Uuc3NlbW9kZWx0ZXN0cy5qYXIgPSBzcmMvCi1vdXRwdXQuc3NlbW9kZWx0ZXN0cy5qYXIgPSBiaW4vCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3Y2EyZTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBwcm9wZXJ0aWVzIGZpbGUgZm9yIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cwotQnVuZGxlLVZlbmRvci4wID0gRWNsaXBzZS5vcmcKLUJ1bmRsZS1OYW1lLjAgPSBUZXN0cyBQbHVnLWluClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvRXhpc3RlbmNlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvRXhpc3RlbmNlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTljY2RjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL0V4aXN0ZW5jZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzOwotCi0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuU1NFQ29yZVBsdWdpbjsKLQotCi1wdWJsaWMgY2xhc3MgRXhpc3RlbmNlVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXB1YmxpYyB2b2lkIHRlc3RQbHVnaW5FeGlzdHMoKXsKLQkJYXNzZXJ0Tm90TnVsbChTU0VDb3JlUGx1Z2luLmdldERlZmF1bHQoKSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvTG9nZ2VyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9Mb2dnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjY5MjI1ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9Mb2dnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzOwotCi1pbXBvcnQgY29tLmlibS5pY3UudXRpbC5TdHJpbmdUb2tlbml6ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotCi0vKioKLSAqIFNtYWxsIGNvbnZlbmllbmNlIGNsYXNzIHRvIGxvZyBtZXNzYWdlcyB0byBwbHVnaW4ncyBsb2cgZmlsZSBhbmQgYWxzbywgaWYgZGVzaXJlZCwKLSAqIHRoZSBjb25zb2xlLiBUaGlzIGNsYXNzIHNob3VsZCBvbmx5IGJlIHVzZWQgYnkgY2xhc3NlcyBpbiB0aGlzIHBsdWdpbi4gT3RoZXIKLSAqIHBsdWdpbnMgc2hvdWxkIG1ha2UgdGhlaXIgb3duIGNvcHksIHdpdGggYXBwcm9wcmlhdGUgSUQuCi0gKi8KLXB1YmxpYyBjbGFzcyBMb2dnZXIgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzIjsgLy8kTk9OLU5MUy0xJAotCQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUUkFDRUZJTFRFUl9MT0NBVElPTiA9ICIvZGVidWcvdHJhY2VmaWx0ZXIiOyAvLyROT04tTkxTLTEkCi0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPSyA9IElTdGF0dXMuT0s7IC8vIDAKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTkZPID0gSVN0YXR1cy5JTkZPOyAvLyAxCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV0FSTklORyA9IElTdGF0dXMuV0FSTklORzsgLy8gMgotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SID0gSVN0YXR1cy5FUlJPUjsgLy8gNAotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT0tfREVCVUcgPSAyMDAgKyBPSzsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTkZPX0RFQlVHID0gMjAwICsgSU5GTzsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXQVJOSU5HX0RFQlVHID0gMjAwICsgV0FSTklORzsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFUlJPUl9ERUJVRyA9IDIwMCArIEVSUk9SOwotCi0JLyoqCi0JICogQWRkcyBtZXNzYWdlIHRvIGxvZy4KLQkgKiBAcGFyYW0gbGV2ZWwgc2V2ZXJpdHkgbGV2ZWwgb2YgdGhlIG1lc3NhZ2UgKE9LLCBJTkZPLCBXQVJOSU5HLCBFUlJPUiwgT0tfREVCVUcsIElORk9fREVCVUcsIFdBUk5JTkdfREVCVUcsIEVSUk9SX0RFQlVHKQotCSAqIEBwYXJhbSBtZXNzYWdlIHRleHQgdG8gYWRkIHRvIHRoZSBsb2cKLQkgKiBAcGFyYW0gZXhjZXB0aW9uIGV4Y2VwdGlvbiB0aHJvd24KLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIHZvaWQgX2xvZyhpbnQgbGV2ZWwsIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCWlmIChsZXZlbCA9PSBPS19ERUJVRyB8fCBsZXZlbCA9PSBJTkZPX0RFQlVHIHx8IGxldmVsID09IFdBUk5JTkdfREVCVUcgfHwgbGV2ZWwgPT0gRVJST1JfREVCVUcpIHsKLQkJCWlmICghaXNEZWJ1Z2dpbmcoKSkKLQkJCQlyZXR1cm47Ci0JCX0KLQotCQlpbnQgc2V2ZXJpdHkgPSBJU3RhdHVzLk9LOwotCQlzd2l0Y2ggKGxldmVsKSB7Ci0JCQljYXNlIElORk9fREVCVUcgOgotCQkJY2FzZSBJTkZPIDoKLQkJCQlzZXZlcml0eSA9IElTdGF0dXMuSU5GTzsKLQkJCQlicmVhazsKLQkJCWNhc2UgV0FSTklOR19ERUJVRyA6Ci0JCQljYXNlIFdBUk5JTkcgOgotCQkJCXNldmVyaXR5ID0gSVN0YXR1cy5XQVJOSU5HOwotCQkJCWJyZWFrOwotCQkJY2FzZSBFUlJPUl9ERUJVRyA6Ci0JCQljYXNlIEVSUk9SIDoKLQkJCQlzZXZlcml0eSA9IElTdGF0dXMuRVJST1I7Ci0JCX0KLQkJbWVzc2FnZSA9IChtZXNzYWdlICE9IG51bGwpID8gbWVzc2FnZSA6ICJudWxsIjsgLy8kTk9OLU5MUy0xJAotCQlTdGF0dXMgc3RhdHVzT2JqID0gbmV3IFN0YXR1cyhzZXZlcml0eSwgUExVR0lOX0lELCBzZXZlcml0eSwgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShQTFVHSU5fSUQpOwotCQlpZiAoYnVuZGxlICE9IG51bGwpIAotCQkJUGxhdGZvcm0uZ2V0TG9nKGJ1bmRsZSkubG9nKHN0YXR1c09iaik7Ci0JfQotCi0JLyoqCi0JICogUHJpbnRzIG1lc3NhZ2UgdG8gbG9nIGlmIGNhdGVnb3J5IG1hdGNoZXMgL2RlYnVnL3RyYWNlZmlsdGVyIG9wdGlvbi4KLQkgKiBAcGFyYW0gbWVzc2FnZSB0ZXh0IHRvIHByaW50Ci0JICogQHBhcmFtIGNhdGVnb3J5IGNhdGVnb3J5IG9mIHRoZSBtZXNzYWdlLCB0byBiZSBjb21wYXJlZCB3aXRoIC9kZWJ1Zy90cmFjZWZpbHRlcgotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgdm9pZCBfdHJhY2UoU3RyaW5nIGNhdGVnb3J5LCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlpZiAoaXNUcmFjaW5nKGNhdGVnb3J5KSkgewotCQkJbWVzc2FnZSA9IChtZXNzYWdlICE9IG51bGwpID8gbWVzc2FnZSA6ICJudWxsIjsgLy8kTk9OLU5MUy0xJAotCQkJU3RhdHVzIHN0YXR1c09iaiA9IG5ldyBTdGF0dXMoSVN0YXR1cy5PSywgUExVR0lOX0lELCBJU3RhdHVzLk9LLCBtZXNzYWdlLCBleGNlcHRpb24pOwotCQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShQTFVHSU5fSUQpOwotCQkJaWYgKGJ1bmRsZSAhPSBudWxsKSAKLQkJCQlQbGF0Zm9ybS5nZXRMb2coYnVuZGxlKS5sb2coc3RhdHVzT2JqKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgcGxhdGZvcm0gaXMgZGVidWdnaW5nCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzRGVidWdnaW5nKCkgewotCQlyZXR1cm4gUGxhdGZvcm0uaW5EZWJ1Z01vZGUoKTsKLQl9Ci0KLQkvKioKLQkgKiBEZXRlcm1pbmVzIGlmIGN1cnJlbnRseSB0cmFjaW5nIGEgY2F0ZWdvcnkKLQkgKiBAcGFyYW0gY2F0ZWdvcnkKLQkgKiBAcmV0dXJuIHRydWUgaWYgdHJhY2luZyBjYXRlZ29yeSwgZmFsc2Ugb3RoZXJ3aXNlCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzVHJhY2luZyhTdHJpbmcgY2F0ZWdvcnkpIHsKLQkJaWYgKCFpc0RlYnVnZ2luZygpKQotCQkJcmV0dXJuIGZhbHNlOwotCi0JCVN0cmluZyB0cmFjZUZpbHRlciA9IFBsYXRmb3JtLmdldERlYnVnT3B0aW9uKFBMVUdJTl9JRCArIFRSQUNFRklMVEVSX0xPQ0FUSU9OKTsKLQkJaWYgKHRyYWNlRmlsdGVyICE9IG51bGwpIHsKLQkJCVN0cmluZ1Rva2VuaXplciB0b2tlbml6ZXIgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHRyYWNlRmlsdGVyLCAiLCIpOyAvLyROT04tTkxTLTEkCi0JCQl3aGlsZSAodG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSkgewotCQkJCVN0cmluZyBjYXQgPSB0b2tlbml6ZXIubmV4dFRva2VuKCkudHJpbSgpOwotCQkJCWlmIChjYXRlZ29yeS5lcXVhbHMoY2F0KSkgewotCQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2coaW50IGxldmVsLCBTdHJpbmcgbWVzc2FnZSkgewotCQlfbG9nKGxldmVsLCBtZXNzYWdlLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nKGludCBsZXZlbCwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX2xvZyhsZXZlbCwgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nRXhjZXB0aW9uKFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV9sb2coRVJST1IsIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZ0V4Y2VwdGlvbihUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV9sb2coRVJST1IsIGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCksIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHRyYWNlRXhjZXB0aW9uKFN0cmluZyBjYXRlZ29yeSwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX3RyYWNlKGNhdGVnb3J5LCBtZXNzYWdlLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCB0cmFjZUV4Y2VwdGlvbihTdHJpbmcgY2F0ZWdvcnksIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX3RyYWNlKGNhdGVnb3J5LCBleGNlcHRpb24uZ2V0TWVzc2FnZSgpLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCB0cmFjZShTdHJpbmcgY2F0ZWdvcnksIFN0cmluZyBtZXNzYWdlKSB7Ci0JCV90cmFjZShjYXRlZ29yeSwgbWVzc2FnZSwgbnVsbCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvU1NFTW9kZWxUZXN0U3VpdGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL1NTRU1vZGVsVGVzdFN1aXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2NTQzMGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvU1NFTW9kZWxUZXN0U3VpdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLmRvY3VtZW50LlRlc3RPYmplY3RzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5ldmVudHMuVGVzdEFib3V0VG9CZUNoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMuZXZlbnRzLlRlc3ROZXdEb2N1bWVudENvbnRlbnRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMuZXZlbnRzLlRlc3ROZXdEb2N1bWVudEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5ldmVudHMuVGVzdE5vQ2hhbmdlRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLmV2ZW50cy5UZXN0UmVnaW9uQ2hhbmdlZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5ldmVudHMuVGVzdFJlZ2lvbnNSZXBsYWNlZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5ldmVudHMuVGVzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50OwotCi0KLXB1YmxpYyBjbGFzcyBTU0VNb2RlbFRlc3RTdWl0ZSBleHRlbmRzIFRlc3RTdWl0ZSB7Ci0KLQkvKioKLQkgKiB0byBnZXQgcGlja2VkIHVwIGJ5IEJWVAotCSAqIAotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgU1NFTW9kZWxUZXN0U3VpdGUoKTsKLQl9Ci0KLQkvLyBub3QgcmVhZHkgZm9yIHRocmVhZGVkIHRlc3RzLCB5ZXQuCi0JLy8gcHJpdmF0ZSBzdGF0aWMgQ2xhc3NbXSBjbGFzc2VzID0gbmV3Ci0JLy8gQ2xhc3NbXXtUZXN0T2ZUaHJlYWRMb2NhbEltcHJvdmVtZW50LmNsYXNzLAotCS8vIFRlc3RPZlRocmVhZExvY2FsV2l0aENoYW5nZXMuY2xhc3MsIFRlc3RDcmVhdGlvbi5jbGFzc307Ci0KLQkvLyBwcml2YXRlIHN0YXRpYyBDbGFzc1tdIGNsYXNzZXMgPSBuZXcgQ2xhc3NbXXtUZXN0Q3JlYXRpb24uY2xhc3MsCi0JLy8gVGVzdERvY3VtZW50UmVhZGVyLmNsYXNzfTsKLQkvLyBwcml2YXRlIHN0YXRpYyBDbGFzc1tdIGNsYXNzZXMgPSBuZXcgQ2xhc3NbXXtUZXN0Q3JlYXRpb24uY2xhc3MsCi0JLy8gVGVzdERvY3VtZW50UmVhZGVyLmNsYXNzLCBUZXN0Q2hhclNlcXVlbmNlUmVhZGVyLmNsYXNzLAotCS8vIFRlc3RSZWdpb25NYXRjaGVzLmNsYXNzfTsKLQotCXByaXZhdGUgc3RhdGljIENsYXNzW10gY2xhc3NlcyA9IG5ldyBDbGFzc1tde0V4aXN0ZW5jZVRlc3QuY2xhc3MsIFRlc3RPYmplY3RzLmNsYXNzLCBUZXN0TmV3RG9jdW1lbnRDb250ZW50RXZlbnQuY2xhc3MsIFRlc3RBYm91dFRvQmVDaGFuZ2VkRXZlbnQuY2xhc3MsIFRlc3ROZXdEb2N1bWVudEV2ZW50LmNsYXNzLCBUZXN0Tm9DaGFuZ2VFdmVudC5jbGFzcywgVGVzdFJlZ2lvbkNoYW5nZWRFdmVudC5jbGFzcyxUZXN0UmVnaW9uc1JlcGxhY2VkRXZlbnQuY2xhc3MsVGVzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50LmNsYXNzfTsKLQotCXB1YmxpYyBTU0VNb2RlbFRlc3RTdWl0ZSgpIHsKLQkJc3VwZXIoIlNTRSBNb2RlbCBCYXNpYyBUZXN0IFN1aXRlIik7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY2xhc3Nlcy5sZW5ndGg7IGkrKykgewotCQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKGNsYXNzZXNbaV0sIGNsYXNzZXNbaV0uZ2V0TmFtZSgpKSk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgU1NFTW9kZWxUZXN0U3VpdGUoQ2xhc3MgdGhlQ2xhc3MsIFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKHRoZUNsYXNzLCBuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgU1NFTW9kZWxUZXN0U3VpdGUoQ2xhc3MgdGhlQ2xhc3MpIHsKLQkJc3VwZXIodGhlQ2xhc3MpOwotCX0KLQotCXB1YmxpYyBTU0VNb2RlbFRlc3RTdWl0ZShTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9TU0VNb2RlbFRlc3RzUGx1Z2luLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9TU0VNb2RlbFRlc3RzUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiZDY3MGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvU1NFTW9kZWxUZXN0c1BsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci0KLS8qKgotICogVGhlIG1haW4gcGx1Z2luIGNsYXNzIHRvIGJlIHVzZWQgaW4gdGhlIGRlc2t0b3AuCi0gKi8KLXB1YmxpYyBjbGFzcyBTU0VNb2RlbFRlc3RzUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHsKLQkvL1RoZSBzaGFyZWQgaW5zdGFuY2UuCi0JcHJpdmF0ZSBzdGF0aWMgU1NFTW9kZWxUZXN0c1BsdWdpbiBwbHVnaW47Ci0JLy9SZXNvdXJjZSBidW5kbGUuCi0JcHJpdmF0ZSBSZXNvdXJjZUJ1bmRsZSByZXNvdXJjZUJ1bmRsZTsKLQotCS8qKgotCSAqIFRoZSBjb25zdHJ1Y3Rvci4KLQkgKi8KLQlwdWJsaWMgU1NFTW9kZWxUZXN0c1BsdWdpbigpIHsKLQkJc3VwZXIoKTsKLQkJcGx1Z2luID0gdGhpczsKLQkJdHJ5IHsKLQkJCXJlc291cmNlQnVuZGxlID0gUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKCJvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMuVGVzdHNQbHVnaW5SZXNvdXJjZXMiKTsKLQkJfQotCQljYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIHgpIHsKLQkJCXJlc291cmNlQnVuZGxlID0gbnVsbDsKLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFNTRU1vZGVsVGVzdHNQbHVnaW4gZ2V0RGVmYXVsdCgpIHsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB3b3Jrc3BhY2UgaW5zdGFuY2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBJV29ya3NwYWNlIGdldFdvcmtzcGFjZSgpIHsKLQkJcmV0dXJuIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzdHJpbmcgZnJvbSB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLAotCSAqIG9yICdrZXknIGlmIG5vdCBmb3VuZC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRSZXNvdXJjZVN0cmluZyhTdHJpbmcga2V5KSB7Ci0JCVJlc291cmNlQnVuZGxlIGJ1bmRsZSA9IFNTRU1vZGVsVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFJlc291cmNlQnVuZGxlKCk7Ci0JCXRyeSB7Ci0JCQlyZXR1cm4gKGJ1bmRsZSAhPSBudWxsID8gYnVuZGxlLmdldFN0cmluZyhrZXkpIDoga2V5KTsKLQkJfQotCQljYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKLQkJCXJldHVybiBrZXk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBwbHVnaW4ncyByZXNvdXJjZSBidW5kbGUsCi0JICovCi0JcHVibGljIFJlc291cmNlQnVuZGxlIGdldFJlc291cmNlQnVuZGxlKCkgewotCQlyZXR1cm4gcmVzb3VyY2VCdW5kbGU7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL1Rlc3RBYnN0cmFjdEFkYXB0ZXJGYWN0b3J5LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9UZXN0QWJzdHJhY3RBZGFwdGVyRmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZTA1YWZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL1Rlc3RBYnN0cmFjdEFkYXB0ZXJGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLkFic3RyYWN0QWRhcHRlckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklOb2RlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU5vZGVOb3RpZmllcjsKLQotLyoqCi0gKiAKLSAqIEBhdXRob3IgcGF2ZXJ5Ci0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0QWJzdHJhY3RBZGFwdGVyRmFjdG9yeSBleHRlbmRzIFRlc3RDYXNlIHsKLQkKLQlwcml2YXRlIEFic3RyYWN0QWRhcHRlckZhY3RvcnkgZkZhY3RvcnkgPSBudWxsOwotCQotCWNsYXNzIE15Q2xhc3MgaW1wbGVtZW50cyBJTm9kZUFkYXB0ZXIgewotCQlwdWJsaWMgYm9vbGVhbiBpc0FkYXB0ZXJGb3JUeXBlKE9iamVjdCB0eXBlKSB7Ci0JCQlyZXR1cm4gdHlwZSBpbnN0YW5jZW9mIE15Q2xhc3M7Ci0JCX0KLQkJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChJTm9kZU5vdGlmaWVyIG5vdGlmaWVyLGludCBldmVudFR5cGUsT2JqZWN0IGNoYW5nZWRGZWF0dXJlLE9iamVjdCBvbGRWYWx1ZSxPYmplY3QgbmV3VmFsdWUsaW50IHBvcykgewotCQkJLy8gbm9vcAotCQl9Ci0JfQotCQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnNldFVwKCk7Ci0JCXNldFVwQWRhcHRlckZhY3RvcnkoKTsKLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIHNldFVwQWRhcHRlckZhY3RvcnkoKSB7Ci0JCWZGYWN0b3J5ID0gbmV3IEFic3RyYWN0QWRhcHRlckZhY3RvcnkoVGVzdEFic3RyYWN0QWRhcHRlckZhY3RvcnkuTXlDbGFzcy5jbGFzcywgZmFsc2UpIHsKLQkJCXByb3RlY3RlZCBJTm9kZUFkYXB0ZXIgY3JlYXRlQWRhcHRlcihJTm9kZU5vdGlmaWVyIHRhcmdldCkgewotCQkJCXJldHVybiBuZXcgTXlDbGFzcygpOwotCQkJfQotCQl9OwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0QWRhcHQoKSB7Ci0JCWZGYWN0b3J5LmFkYXB0KG51bGwpOwotCX0KLQkKLS8vCXB1YmxpYyB2b2lkIHRlc3RBZGFwdE5ldygpIHsKLS8vCQlmRmFjdG9yeS5hZGFwdE5ldyhudWxsKTsKLS8vCX0KLQkKLS8vCXB1YmxpYyB2b2lkIHRlc3RDb3B5KCkgewotLy8JCUFkYXB0ZXJGYWN0b3J5IGYgPSBmRmFjdG9yeS5jb3B5KCk7Ci0vLwkJYXNzZXJ0Tm90TnVsbChmKTsKLS8vCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlKCkgewotCQkvLyBUT0RPOiBjcmVhdGUgdW5pdCB0ZXN0Ci0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9hZGFwdGRvbS9BZGFwdGVyRmFjdG9yeVRlc3RPbmx5LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9hZGFwdGRvbS9BZGFwdGVyRmFjdG9yeVRlc3RPbmx5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmN2EyNjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvYWRhcHRkb20vQWRhcHRlckZhY3RvcnlUZXN0T25seS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMuYWRhcHRkb207Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU5vZGVBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTm9kZUFkYXB0ZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTm9kZU5vdGlmaWVyOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotCi0vKioKLSAqIFRoaXMgY2xhc3MgZXhpc3RzIG9ubHkgdG8gc2F0aXNmeSBzb21lIG9mIHRoZSB1bml0IHRlc3RzLgotICogCi0gKiBUbyB0ZXN0LCB1c2UgZm9sbG93aW5nIGxpbmUgaW4gY2xpZW50LCBzdWNoIGFzIHdoZW4gaXQgaW50aXRpYWxpemVkLgotICogRmFjdG9yeVJlZ2lzdHJ5LmdldEZhY3RvcnlSZWdpc3RyeSgpLmFkZEZhY3RvcnkobmV3Ci0gKiBBZGFwdGVyRmFjdG9yeVRlc3RPbmx5KCkpOwotICogCi0gKiBDcmVhdGlvbiBkYXRlOiAoMTEvMTQvMDAgNzowODoxOCBQTSkKLSAqIAotICogQGF1dGhvcjogRGF2aWQgV2lsbGlhbXMKLSAqLwotcHVibGljIGNsYXNzIEFkYXB0ZXJGYWN0b3J5VGVzdE9ubHkgaW1wbGVtZW50cyBJTm9kZUFkYXB0ZXJGYWN0b3J5IHsKLQkvLyBUaGlzIGZhY3RvcnkgZGVhbHMgd2l0aCB0aHJlZSBhZGFwdGVycwotCWphdmEudXRpbC5MaXN0IGFkYXB0ZXJzID0gbmV3IGphdmEudXRpbC5BcnJheUxpc3QoKTsKLQotCS8qKgotCSAqIENBQWRhcHRlckZhY3RvcnkgY29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIEFkYXB0ZXJGYWN0b3J5VGVzdE9ubHkoKSB7Ci0JCXN1cGVyKCk7Ci0JCWFkYXB0ZXJzLmFkZChuZXcgQWRhcHRlckZvckRvY3VtZW50VGVzdE9ubHkoKSk7Ci0JCWFkYXB0ZXJzLmFkZChuZXcgQWRhcHRlckZvckVsZW1lbnRUZXN0T25seSgpKTsKLQkJYWRhcHRlcnMuYWRkKG5ldyBBZGFwdGVyRm9yQXR0clRlc3RPbmx5KCkpOwotCX0KLQotCS8qKgotCSAqIE1ldGhvZCB0aGF0IHJldHVybnMgdGhlIGFkYXB0ZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSB0aGlzIGZhY3RvcnkgYW5kCi0JICogdGhlIGdpdmVuIG9iamVjdCwgYW5kICJzZXRzIHVwIiB0aGUgYWRhcHRhYmxlIG9iamVjdCB0byB1c2UgdGhlCi0JICogYWRhcHRlci4KLQkgKiAKLQkgKiBUaGUgYWRhcHRlciBtYXkgYmUgYSBzaW5nbGV0b24gb3Igbm90IC4uLiBkZXBlbmRpbmcgb24gdGhlIG5lZWRzIG9mIHRoZQotCSAqIElOb2RlQWRhcHRlciAuLi4gYnV0IGluIGdlbmVyYWwgaXQgaXMgcmVjb21tZW5kZWQgZm9yIGFuIGFkYXB0ZXIgdG8gYmUKLQkgKiBzdGF0ZWxlc3MsIHNvIHRoZSBlZmZpY2llbmNpZXMgb2YgYSBzaW5nbGV0b24gY2FuIGJlIGdhaW5lZC4KLQkgKiAKLQkgKiBUaGUgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBtZXRob2Qgc2hvdWxkIGNhbGwgYWRkQWRhcHRlciBvbiB0aGUgYWRhcHRlZAotCSAqIG9iamVjdCB3aXRoIHRoZSBjb3JyZWN0IGluc3RhbmNlIG9mIHRoZSBhZGFwdGVyLgotCSAqLwotCXB1YmxpYyBJTm9kZUFkYXB0ZXIgYWRhcHQoSU5vZGVOb3RpZmllciB0YXJnZXQpIHsKLQkJLy8gb2JqZWN0LmFkZEFkYXB0ZXIoYWRhcHRlckluc3RhbmNlKTsKLQkJLy8gcmV0dXJuIGFkYXB0ZXJJbnN0YW5jZTsKLQkJSU5vZGVBZGFwdGVyIHJlc3VsdCA9IG51bGw7Ci0KLQkJSXRlcmF0b3IgYWRhcHRlcnNMaXN0ID0gYWRhcHRlcnMuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGFkYXB0ZXJzTGlzdC5oYXNOZXh0KCkpIHsKLQkJCUlOb2RlQWRhcHRlciBhZGFwdGVyID0gKElOb2RlQWRhcHRlcikgYWRhcHRlcnNMaXN0Lm5leHQoKTsKLQkJCWlmIChhZGFwdGVyLmlzQWRhcHRlckZvclR5cGUodGFyZ2V0KSkgewotCQkJCUlOb2RlQWRhcHRlciBleGlzdGluZ0FkYXB0ZXIgPSB0YXJnZXQuZ2V0RXhpc3RpbmdBZGFwdGVyKGFkYXB0ZXIpOwotCQkJCWlmIChleGlzdGluZ0FkYXB0ZXIgPT0gbnVsbCkgewotCQkJCQl0YXJnZXQuYWRkQWRhcHRlcihhZGFwdGVyKTsKLQkJCQkJcmVzdWx0ID0gYWRhcHRlcjsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gcmVzdWx0OwotCi0JfQotCi0JLyoqCi0JICogaXNGYWN0b3J5Rm9yVHlwZSBtZXRob2QgY29tbWVudC4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKGphdmEubGFuZy5PYmplY3QgdHlwZSkgewotCQlib29sZWFuIHJlc3VsdCA9IGZhbHNlOwotCi0JCS8vIGZvciBub3csIG9uZSBhZGFwdGVyIGZvciBkb2N1bWVudHMsIGVsZW1lbnRzLCBhbmQgYXR0ci4KLQkJLy8KLQkJaWYgKHR5cGUgaW5zdGFuY2VvZiBEb2N1bWVudCkgewotCQkJcmVzdWx0ID0gdHJ1ZTsKLQkJfQotCQllbHNlIHsKLQkJCWlmICh0eXBlIGluc3RhbmNlb2YgRWxlbWVudCkgewotCQkJCXJlc3VsdCA9IHRydWU7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlpZiAodHlwZSBpbnN0YW5jZW9mIEF0dHIpIHsKLQkJCQkJcmVzdWx0ID0gdHJ1ZTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCS8qKgotCSAqIAotCSAqLwotCXB1YmxpYyB2b2lkIHJlbGVhc2UoKSB7Ci0JCS8vIFRPRE86IGNyZWF0ZSB1bml0IHRlc3QKLQotCX0KLQotCXB1YmxpYyBJTm9kZUFkYXB0ZXJGYWN0b3J5IGNvcHkoKSB7Ci0JCXJldHVybiBuZXcgQWRhcHRlckZhY3RvcnlUZXN0T25seSgpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvYWRhcHRkb20vQWRhcHRlckZvckF0dHJUZXN0T25seS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvYWRhcHRkb20vQWRhcHRlckZvckF0dHJUZXN0T25seS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwY2Y5ZWJmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2FkYXB0ZG9tL0FkYXB0ZXJGb3JBdHRyVGVzdE9ubHkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMuYWRhcHRkb207Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU5vZGVBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTm9kZU5vdGlmaWVyOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci0KLQotLyoqCi0gKiBJbnNlcnQgdGhlIHR5cGUncyBkZXNjcmlwdGlvbiBoZXJlLiBDcmVhdGlvbiBkYXRlOiAoMS85LzAxIDM6Mzc6MDEgUE0pCi0gKiAKLSAqIEBhdXRob3I6IERhdmlkIFdpbGxpYW1zCi0gKi8KLXB1YmxpYyBjbGFzcyBBZGFwdGVyRm9yQXR0clRlc3RPbmx5IGltcGxlbWVudHMgSU5vZGVBZGFwdGVyIHsKLQkvKioKLQkgKiBDQUFkYXB0ZXJUZXN0T25seSBjb25zdHJ1Y3RvciBjb21tZW50LgotCSAqLwotCXB1YmxpYyBBZGFwdGVyRm9yQXR0clRlc3RPbmx5KCkgewotCQlzdXBlcigpOwotCX0KLQotCS8qKgotCSAqIEFsbG93aW5nIHRoZSBJTm9kZUFkYXB0ZXIgdG8gY29tcGFyZSBpdHNlbGYgYWdhaW5zdCB0aGUgdHlwZSBhbGxvd3MgaXQKLQkgKiB0byByZXR1cm4gdHJ1ZSBpbiBtb3JlIHRoYW4gb25lIGNhc2UuCi0JICovCi0JcHVibGljIGJvb2xlYW4gaXNBZGFwdGVyRm9yVHlwZShPYmplY3QgdHlwZSkgewotCQlib29sZWFuIHJlc3VsdCA9IGZhbHNlOwotCQlpZiAodHlwZSBpbnN0YW5jZW9mIEF0dHIpIHsKLQkJCXJlc3VsdCA9IHRydWU7Ci0JCX0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQkvKioKLQkgKi8KLQlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKElOb2RlTm90aWZpZXIgbm90aWZpZXIsIGludCBldmVudFR5cGUsIE9iamVjdCBjaGFuZ2VkRmVhdHVyZSwgT2JqZWN0IG9sZFZhbHVlLCBPYmplY3QgbmV3VmFsdWUsIGludCBwb3MpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJJTm9kZUFkYXB0ZXIgQWRhcHRlckZvckF0dHJUZXN0T25seSAiICsgdGhpcy5oYXNoQ29kZSgpICsgIiBoYXMgYmVlbiBub3RpZmllZCBvZiAiICsgSU5vZGVOb3RpZmllci5FVkVOVF9UWVBFX1NUUklOR1NbZXZlbnRUeXBlXSArICIgKHdoZW4gIiArIG5vdGlmaWVyICsgIiBub3RpZmllZCBpdCkiKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9hZGFwdGRvbS9BZGFwdGVyRm9yRG9jdW1lbnRUZXN0T25seS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvYWRhcHRkb20vQWRhcHRlckZvckRvY3VtZW50VGVzdE9ubHkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODBmMTNlZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9hZGFwdGRvbS9BZGFwdGVyRm9yRG9jdW1lbnRUZXN0T25seS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5hZGFwdGRvbTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTm9kZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklOb2RlTm90aWZpZXI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci0KLQotLyoqCi0gKiBJbnNlcnQgdGhlIHR5cGUncyBkZXNjcmlwdGlvbiBoZXJlLiBDcmVhdGlvbiBkYXRlOiAoMS85LzAxIDM6Mzc6MDEgUE0pCi0gKiAKLSAqIEBhdXRob3I6IERhdmlkIFdpbGxpYW1zCi0gKi8KLXB1YmxpYyBjbGFzcyBBZGFwdGVyRm9yRG9jdW1lbnRUZXN0T25seSBpbXBsZW1lbnRzIElOb2RlQWRhcHRlciB7Ci0JLyoqCi0JICogQ0FBZGFwdGVyVGVzdE9ubHkgY29uc3RydWN0b3IgY29tbWVudC4KLQkgKi8KLQlwdWJsaWMgQWRhcHRlckZvckRvY3VtZW50VGVzdE9ubHkoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JLyoqCi0JICogQWxsb3dpbmcgdGhlIElOb2RlQWRhcHRlciB0byBjb21wYXJlIGl0c2VsZiBhZ2FpbnN0IHRoZSB0eXBlIGFsbG93cyBpdAotCSAqIHRvIHJldHVybiB0cnVlIGluIG1vcmUgdGhhbiBvbmUgY2FzZS4KLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBpc0FkYXB0ZXJGb3JUeXBlKE9iamVjdCB0eXBlKSB7Ci0JCWJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0JCWlmICh0eXBlIGluc3RhbmNlb2YgRG9jdW1lbnQpIHsKLQkJCXJlc3VsdCA9IHRydWU7Ci0JCX0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQkvKioKLQkgKi8KLQlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKElOb2RlTm90aWZpZXIgbm90aWZpZXIsIGludCBldmVudFR5cGUsIE9iamVjdCBjaGFuZ2VkRmVhdHVyZSwgT2JqZWN0IG9sZFZhbHVlLCBPYmplY3QgbmV3VmFsdWUsIGludCBwb3MpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJJTm9kZUFkYXB0ZXIgQWRhcHRlckZvckRvY3VtZW50VGVzdE9ubHkgIiArIHRoaXMuaGFzaENvZGUoKSArICIgaGFzIGJlZW4gbm90aWZpZWQgb2YgIiArIElOb2RlTm90aWZpZXIuRVZFTlRfVFlQRV9TVFJJTkdTW2V2ZW50VHlwZV0gKyAiICh3aGVuICIgKyBub3RpZmllciArICIgbm90aWZpZWQgaXQpIik7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvYWRhcHRkb20vQWRhcHRlckZvckVsZW1lbnRUZXN0T25seS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvYWRhcHRkb20vQWRhcHRlckZvckVsZW1lbnRUZXN0T25seS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Y2E5ZTgwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2FkYXB0ZG9tL0FkYXB0ZXJGb3JFbGVtZW50VGVzdE9ubHkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMuYWRhcHRkb207Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU5vZGVBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTm9kZU5vdGlmaWVyOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotLyoqCi0gKiBJbnNlcnQgdGhlIHR5cGUncyBkZXNjcmlwdGlvbiBoZXJlLiBDcmVhdGlvbiBkYXRlOiAoMS85LzAxIDM6Mzc6MDEgUE0pCi0gKiAKLSAqIEBhdXRob3I6IERhdmlkIFdpbGxpYW1zCi0gKi8KLXB1YmxpYyBjbGFzcyBBZGFwdGVyRm9yRWxlbWVudFRlc3RPbmx5IGltcGxlbWVudHMgSU5vZGVBZGFwdGVyIHsKLQkvKioKLQkgKiBDQUFkYXB0ZXJUZXN0T25seSBjb25zdHJ1Y3RvciBjb21tZW50LgotCSAqLwotCXB1YmxpYyBBZGFwdGVyRm9yRWxlbWVudFRlc3RPbmx5KCkgewotCQlzdXBlcigpOwotCX0KLQotCS8qKgotCSAqIEFsbG93aW5nIHRoZSBJTm9kZUFkYXB0ZXIgdG8gY29tcGFyZSBpdHNlbGYgYWdhaW5zdCB0aGUgdHlwZSBhbGxvd3MgaXQKLQkgKiB0byByZXR1cm4gdHJ1ZSBpbiBtb3JlIHRoYW4gb25lIGNhc2UuCi0JICovCi0JcHVibGljIGJvb2xlYW4gaXNBZGFwdGVyRm9yVHlwZShPYmplY3QgdHlwZSkgewotCQlib29sZWFuIHJlc3VsdCA9IGZhbHNlOwotCQlpZiAodHlwZSBpbnN0YW5jZW9mIEVsZW1lbnQpIHsKLQkJCXJlc3VsdCA9IHRydWU7Ci0JCX0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQkvKioKLQkgKi8KLQlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKElOb2RlTm90aWZpZXIgbm90aWZpZXIsIGludCBldmVudFR5cGUsIE9iamVjdCBjaGFuZ2VkRmVhdHVyZSwgT2JqZWN0IG9sZFZhbHVlLCBPYmplY3QgbmV3VmFsdWUsIGludCBwb3MpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJJTm9kZUFkYXB0ZXIgQWRhcHRlckZvckVsZW1lbnRUZXN0T25seSAiICsgdGhpcy5oYXNoQ29kZSgpICsgIiBoYXMgYmVlbiBub3RpZmllZCBvZiAiICsgSU5vZGVOb3RpZmllci5FVkVOVF9UWVBFX1NUUklOR1NbZXZlbnRUeXBlXSArICIgKHdoZW4gIiArIG5vdGlmaWVyICsgIiBub3RpZmllZCBpdCkiKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9kb2N1bWVudC9UZXN0Q2hhclNlcXVlbmNlUmVhZGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9kb2N1bWVudC9UZXN0Q2hhclNlcXVlbmNlUmVhZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhNTg1YzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZG9jdW1lbnQvVGVzdENoYXJTZXF1ZW5jZVJlYWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTk0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLmRvY3VtZW50OwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC50ZXh0LkNoYXJTZXF1ZW5jZVJlYWRlcjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotCi0KLXB1YmxpYyBjbGFzcyBUZXN0Q2hhclNlcXVlbmNlUmVhZGVyIGV4dGVuZHMgVGVzdENhc2UgewotCi0KLQlwdWJsaWMgVGVzdENoYXJTZXF1ZW5jZVJlYWRlcigpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQotCXB1YmxpYyBUZXN0Q2hhclNlcXVlbmNlUmVhZGVyKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCVN0cmluZyBmU3RhbmRhcmRTdHJpbmcgPSAidGVzdDEyMyI7Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U3RhbmRhcmRCZWdpbm5pbmcoKSB7Ci0JCUNoYXJTZXF1ZW5jZVJlYWRlciByZWFkZXIgPSBuZXcgQ2hhclNlcXVlbmNlUmVhZGVyKGZTdGFuZGFyZFN0cmluZywgMCwgMyk7Ci0JCWNoYXIgY2hhcjEgPSAoY2hhcikgcmVhZGVyLnJlYWQoKTsKLQkJYXNzZXJ0VHJ1ZShjaGFyMSA9PSAndCcpOwotCQljaGFyIGNoYXIyID0gKGNoYXIpIHJlYWRlci5yZWFkKCk7Ci0JCWFzc2VydFRydWUoY2hhcjIgPT0gJ2UnKTsKLQkJY2hhciBjaGFyMyA9IChjaGFyKSByZWFkZXIucmVhZCgpOwotCQlhc3NlcnRUcnVlKGNoYXIzID09ICdzJyk7Ci0JCWludCBlb2YgPSByZWFkZXIucmVhZCgpOwotCQlhc3NlcnRUcnVlKGVvZiA9PSAtMSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFN0YW5kYXJkTWlkZGxlKCkgewotCQlDaGFyU2VxdWVuY2VSZWFkZXIgcmVhZGVyID0gbmV3IENoYXJTZXF1ZW5jZVJlYWRlcihmU3RhbmRhcmRTdHJpbmcsIDIsIDMpOwotCQljaGFyIGNoYXIxID0gKGNoYXIpIHJlYWRlci5yZWFkKCk7Ci0JCWFzc2VydFRydWUoY2hhcjEgPT0gJ3MnKTsKLQkJY2hhciBjaGFyMiA9IChjaGFyKSByZWFkZXIucmVhZCgpOwotCQlhc3NlcnRUcnVlKGNoYXIyID09ICd0Jyk7Ci0JCWNoYXIgY2hhcjMgPSAoY2hhcikgcmVhZGVyLnJlYWQoKTsKLQkJYXNzZXJ0VHJ1ZShjaGFyMyA9PSAnMScpOwotCQlpbnQgZW9mID0gcmVhZGVyLnJlYWQoKTsKLQkJYXNzZXJ0VHJ1ZShlb2YgPT0gLTEpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTdGFuZGFyZEVuZCgpIHsKLQkJQ2hhclNlcXVlbmNlUmVhZGVyIHJlYWRlciA9IG5ldyBDaGFyU2VxdWVuY2VSZWFkZXIoZlN0YW5kYXJkU3RyaW5nLCA0LCAzKTsKLQkJY2hhciBjaGFyMSA9IChjaGFyKSByZWFkZXIucmVhZCgpOwotCQlhc3NlcnRUcnVlKGNoYXIxID09ICcxJyk7Ci0JCWNoYXIgY2hhcjIgPSAoY2hhcikgcmVhZGVyLnJlYWQoKTsKLQkJYXNzZXJ0VHJ1ZShjaGFyMiA9PSAnMicpOwotCQljaGFyIGNoYXIzID0gKGNoYXIpIHJlYWRlci5yZWFkKCk7Ci0JCWFzc2VydFRydWUoY2hhcjMgPT0gJzMnKTsKLQkJaW50IGVvZiA9IHJlYWRlci5yZWFkKCk7Ci0JCWFzc2VydFRydWUoZW9mID09IC0xKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U3RhbmRhcmRPdXRPZlJhbmdlKCkgewotCQlDaGFyU2VxdWVuY2VSZWFkZXIgcmVhZGVyID0gbmV3IENoYXJTZXF1ZW5jZVJlYWRlcihmU3RhbmRhcmRTdHJpbmcsIDUwLCAzKTsKLQkJaW50IGVvZiA9IHJlYWRlci5yZWFkKCk7Ci0JCWFzc2VydFRydWUoZW9mID09IC0xKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U3RhbmRhcmRQYXJ0aWFsbHlPdXRPZlJhbmdlKCkgewotCQlDaGFyU2VxdWVuY2VSZWFkZXIgcmVhZGVyID0gbmV3IENoYXJTZXF1ZW5jZVJlYWRlcihmU3RhbmRhcmRTdHJpbmcsIDUsIDMpOwotCQljaGFyIGNoYXIxID0gKGNoYXIpIHJlYWRlci5yZWFkKCk7Ci0JCWFzc2VydFRydWUoY2hhcjEgPT0gJzInKTsKLQkJY2hhciBjaGFyMiA9IChjaGFyKSByZWFkZXIucmVhZCgpOwotCQlhc3NlcnRUcnVlKGNoYXIyID09ICczJyk7Ci0JCWludCBlb2YgPSByZWFkZXIucmVhZCgpOwotCQlhc3NlcnRUcnVlKGVvZiA9PSAtMSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEJ1ZmZlckJlZ2luaW5nKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJQ2hhclNlcXVlbmNlUmVhZGVyIHJlYWRlciA9IG5ldyBDaGFyU2VxdWVuY2VSZWFkZXIoZlN0YW5kYXJkU3RyaW5nLCAwLCAzKTsKLQkJU3RyaW5nIHRhcmdldFN0cmluZyA9ICJ0ZXMiOwotCQkKLQkJLy8gaW50ZW50aW9uYWxseSBzbWFsbCBzaXplZCBidWZmZXIKLQkJY2hhcltdIGNoYXJidWZmZXIgPSBuZXcgY2hhclsyXTsKLQkJU3RyaW5nQnVmZmVyIHN0cmluZ0J1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJaW50IG5SZWFkID0gMDsKLQkJd2hpbGUgKG5SZWFkICE9IC0xKSB7Ci0JCQluUmVhZCA9IHJlYWRlci5yZWFkKGNoYXJidWZmZXIpOwotCQkJaWYgKG5SZWFkID4gMCkgewotCQkJCXN0cmluZ0J1ZmZlci5hcHBlbmQoY2hhcmJ1ZmZlciwgMCwgblJlYWQpOwotCQkJfQotCQl9Ci0JCVN0cmluZyB0ZXN0U3RyaW5nID0gc3RyaW5nQnVmZmVyLnRvU3RyaW5nKCk7Ci0JCQotCQlhc3NlcnRFcXVhbHModGFyZ2V0U3RyaW5nLCB0ZXN0U3RyaW5nKTsKLQkJCi0JfQotCXB1YmxpYyB2b2lkIHRlc3RCdWZmZXJFbmQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlDaGFyU2VxdWVuY2VSZWFkZXIgcmVhZGVyID0gbmV3IENoYXJTZXF1ZW5jZVJlYWRlcihmU3RhbmRhcmRTdHJpbmcsIDQsIDMpOwotCQlTdHJpbmcgdGFyZ2V0U3RyaW5nID0gIjEyMyI7Ci0JCQotCQkvLyBpbnRlbnRpb25hbGx5IHNtYWxsIHNpemVkIGJ1ZmZlcgotCQljaGFyW10gY2hhcmJ1ZmZlciA9IG5ldyBjaGFyWzJdOwotCQlTdHJpbmdCdWZmZXIgc3RyaW5nQnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlpbnQgblJlYWQgPSAwOwotCQl3aGlsZSAoblJlYWQgIT0gLTEpIHsKLQkJCW5SZWFkID0gcmVhZGVyLnJlYWQoY2hhcmJ1ZmZlcik7Ci0JCQlpZiAoblJlYWQgPiAwKSB7Ci0JCQkJc3RyaW5nQnVmZmVyLmFwcGVuZChjaGFyYnVmZmVyLCAwLCBuUmVhZCk7Ci0JCQl9Ci0JCX0KLQkJU3RyaW5nIHRlc3RTdHJpbmcgPSBzdHJpbmdCdWZmZXIudG9TdHJpbmcoKTsKLQkJCi0JCWFzc2VydEVxdWFscyh0YXJnZXRTdHJpbmcsIHRlc3RTdHJpbmcpOwotCQkKLQl9CXB1YmxpYyB2b2lkIHRlc3RCdWZmZXJFbmRFbmxhcmdlZCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUNoYXJTZXF1ZW5jZVJlYWRlciByZWFkZXIgPSBuZXcgQ2hhclNlcXVlbmNlUmVhZGVyKGZTdGFuZGFyZFN0cmluZywgNCwgMyk7Ci0JCVN0cmluZyB0YXJnZXRTdHJpbmcgPSAiMTIzIjsKLQkJCi0JCS8vIGludGVudGlvbmFsbHkgc21hbGwgc2l6ZWQgYnVmZmVyCi0JCWNoYXJbXSBjaGFyYnVmZmVyID0gbmV3IGNoYXJbMjAwXTsKLQkJU3RyaW5nQnVmZmVyIHN0cmluZ0J1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJaW50IG5SZWFkID0gMDsKLQkJd2hpbGUgKG5SZWFkICE9IC0xKSB7Ci0JCQluUmVhZCA9IHJlYWRlci5yZWFkKGNoYXJidWZmZXIpOwotCQkJaWYgKG5SZWFkID4gMCkgewotCQkJCXN0cmluZ0J1ZmZlci5hcHBlbmQoY2hhcmJ1ZmZlciwgMCwgblJlYWQpOwotCQkJfQotCQl9Ci0JCVN0cmluZyB0ZXN0U3RyaW5nID0gc3RyaW5nQnVmZmVyLnRvU3RyaW5nKCk7Ci0JCQotCQlhc3NlcnRFcXVhbHModGFyZ2V0U3RyaW5nLCB0ZXN0U3RyaW5nKTsKLQkJCi0JfQotCXB1YmxpYyB2b2lkIHRlc3RCdWZmZXJCZWdpbmluZ0VubGFyZ2VkKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJQ2hhclNlcXVlbmNlUmVhZGVyIHJlYWRlciA9IG5ldyBDaGFyU2VxdWVuY2VSZWFkZXIoZlN0YW5kYXJkU3RyaW5nLCAwLCAzKTsKLQkJU3RyaW5nIHRhcmdldFN0cmluZyA9ICJ0ZXMiOwotCQkKLQkJLy8gaW50ZW50aW9uYWxseSBzbWFsbCBzaXplZCBidWZmZXIKLQkJY2hhcltdIGNoYXJidWZmZXIgPSBuZXcgY2hhclsyMDBdOwotCQlTdHJpbmdCdWZmZXIgc3RyaW5nQnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlpbnQgblJlYWQgPSAwOwotCQl3aGlsZSAoblJlYWQgIT0gLTEpIHsKLQkJCW5SZWFkID0gcmVhZGVyLnJlYWQoY2hhcmJ1ZmZlcik7Ci0JCQlpZiAoblJlYWQgPiAwKSB7Ci0JCQkJc3RyaW5nQnVmZmVyLmFwcGVuZChjaGFyYnVmZmVyLCAwLCBuUmVhZCk7Ci0JCQl9Ci0JCX0KLQkJU3RyaW5nIHRlc3RTdHJpbmcgPSBzdHJpbmdCdWZmZXIudG9TdHJpbmcoKTsKLQkJCi0JCWFzc2VydEVxdWFscyh0YXJnZXRTdHJpbmcsIHRlc3RTdHJpbmcpOwotCQkKLQl9Ci0JcHVibGljIHZvaWQgdGVzdEJ1ZmZlckJlZ2luaW5nUmVkdWNlZCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUNoYXJTZXF1ZW5jZVJlYWRlciByZWFkZXIgPSBuZXcgQ2hhclNlcXVlbmNlUmVhZGVyKGZTdGFuZGFyZFN0cmluZywgMCwgMyk7Ci0JCVN0cmluZyB0YXJnZXRTdHJpbmcgPSAidGUiOwotCQkKLQkJLy8gaW50ZW50aW9uYWxseSBzbWFsbCBzaXplZCBidWZmZXIKLQkJY2hhcltdIGNoYXJidWZmZXIgPSBuZXcgY2hhclsyXTsKLQkJU3RyaW5nQnVmZmVyIHN0cmluZ0J1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJaW50IG5SZWFkID0gMDsKLQkJLy93aGlsZSAoblJlYWQgIT0gLTEpIHsKLQkJCW5SZWFkID0gcmVhZGVyLnJlYWQoY2hhcmJ1ZmZlciwgMCwgMik7Ci0JCQlpZiAoblJlYWQgPiAwKSB7Ci0JCQkJc3RyaW5nQnVmZmVyLmFwcGVuZChjaGFyYnVmZmVyLCAwLCBuUmVhZCk7Ci0JCQl9Ci0JCS8vfQotCQlTdHJpbmcgdGVzdFN0cmluZyA9IHN0cmluZ0J1ZmZlci50b1N0cmluZygpOwotCQkKLQkJYXNzZXJ0RXF1YWxzKHRhcmdldFN0cmluZywgdGVzdFN0cmluZyk7Ci0JCS8vLyBub3cgY29udGludWUgcmVhZGluZyBzYW1lIHJlYWRlcgotCQl0YXJnZXRTdHJpbmcgPSAicyI7Ci0JCXN0cmluZ0J1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJblJlYWQgPSAwOwotCQkvL3doaWxlIChuUmVhZCAhPSAtMSkgewotCQkJblJlYWQgPSByZWFkZXIucmVhZChjaGFyYnVmZmVyLCAwLCAyKTsKLQkJCWlmIChuUmVhZCA+IDApIHsKLQkJCQlzdHJpbmdCdWZmZXIuYXBwZW5kKGNoYXJidWZmZXIsIDAsIG5SZWFkKTsKLQkJCX0KLQkJLy99Ci0JCXRlc3RTdHJpbmcgPSBzdHJpbmdCdWZmZXIudG9TdHJpbmcoKTsKLQkJYXNzZXJ0RXF1YWxzKHRhcmdldFN0cmluZywgdGVzdFN0cmluZyk7Ci0JCQotCX0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2RvY3VtZW50L1Rlc3RPYmplY3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9kb2N1bWVudC9UZXN0T2JqZWN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTkzYzZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2RvY3VtZW50L1Rlc3RPYmplY3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCi0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KLSAqIA0KLSAqIENvbnRyaWJ1dG9yczoNCi0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMuZG9jdW1lbnQ7DQotDQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsNCi0NCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnRleHQuQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQ7DQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC50ZXh0LkJhc2ljU3RydWN0dXJlZERvY3VtZW50UmVnaW9uOw0KLQ0KLXB1YmxpYyBjbGFzcyBUZXN0T2JqZWN0cyBleHRlbmRzIFRlc3RDYXNlIHsNCi0NCi0JLyoqDQotCSAqICANCi0JICovDQotCXB1YmxpYyBUZXN0T2JqZWN0cygpIHsNCi0JCXN1cGVyKCk7DQotDQotCX0NCi0NCi0JLyoqDQotCSAqIEBwYXJhbSBuYW1lDQotCSAqLw0KLQlwdWJsaWMgVGVzdE9iamVjdHMoU3RyaW5nIG5hbWUpIHsNCi0JCXN1cGVyKG5hbWUpOw0KLQ0KLQl9DQotDQotCXB1YmxpYyB2b2lkIHRlc3RFbmRlZEZsYWcoKSB7DQotCQlCYXNpY1N0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiByZWdpb24gPSBuZXcgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKTsNCi0JCXJlZ2lvbi5zZXRQYXJlbnREb2N1bWVudChuZXcgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQoKSk7DQotCQlib29sZWFuIGRlbGV0ZWQgPSByZWdpb24uaXNEZWxldGVkKCk7DQotCQlib29sZWFuIGVuZGVkID0gcmVnaW9uLmlzRW5kZWQoKTsNCi0JCXJlZ2lvbi5zZXRFbmRlZCghZW5kZWQpOw0KLQkJYXNzZXJ0RXF1YWxzKCFlbmRlZCwgcmVnaW9uLmlzRW5kZWQoKSk7DQotCQlhc3NlcnRFcXVhbHMoZGVsZXRlZCwgcmVnaW9uLmlzRGVsZXRlZCgpKTsNCi0JfQ0KLQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RGVsZXRlZEZsYWcoKSB7DQotCQlCYXNpY1N0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiByZWdpb24gPSBuZXcgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKTsNCi0JCXJlZ2lvbi5zZXRQYXJlbnREb2N1bWVudChuZXcgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQoKSk7DQotCQlib29sZWFuIGRlbGV0ZWQgPSByZWdpb24uaXNEZWxldGVkKCk7DQotCQlib29sZWFuIGVuZGVkID0gcmVnaW9uLmlzRW5kZWQoKTsNCi0JCXJlZ2lvbi5zZXREZWxldGVkKCFkZWxldGVkKTsNCi0JCWFzc2VydEVxdWFscyghZGVsZXRlZCwgcmVnaW9uLmlzRGVsZXRlZCgpKTsNCi0JCWFzc2VydEVxdWFscyhlbmRlZCwgcmVnaW9uLmlzRW5kZWQoKSk7DQotCX0NCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZG9jdW1lbnQvVGVzdFJlZ2lvbk1hdGNoZXMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2RvY3VtZW50L1Rlc3RSZWdpb25NYXRjaGVzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5M2QxYWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZG9jdW1lbnQvVGVzdFJlZ2lvbk1hdGNoZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLmRvY3VtZW50OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnRleHQuU3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi0KLQotcHVibGljIGNsYXNzIFRlc3RSZWdpb25NYXRjaGVzIGV4dGVuZHMgVGVzdENhc2UgewotCi0JLyoqCi0JICogIAotCSAqLwotCXB1YmxpYyBUZXN0UmVnaW9uTWF0Y2hlcygpIHsKLQkJc3VwZXIoKTsKLQotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFRlc3RSZWdpb25NYXRjaGVzKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFJlZ2lvbk1hdGNoZXMxKCkgewotCQlTdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUgc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlID0gbmV3IFN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZSgpOwotCQlzdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUuc2V0KCJ0ZXN0aW5nMTIzIik7Ci0JCWJvb2xlYW4gcmVzdWx0ID0gc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlLnJlZ2lvbk1hdGNoZXMoMCwgMSwgInQiKTsKLQkJYXNzZXJ0RXF1YWxzKHRydWUsIHJlc3VsdCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFJlZ2lvbk1hdGNoZXMyKCkgewotCQlTdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUgc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlID0gbmV3IFN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZSgpOwotCQlzdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUuc2V0KCJ0ZXN0aW5nMTIzIik7Ci0JCWJvb2xlYW4gcmVzdWx0ID0gc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlLnJlZ2lvbk1hdGNoZXMoMCwgMiwgInQiKTsKLQkJYXNzZXJ0RXF1YWxzKGZhbHNlLCByZXN1bHQpOwotCX0KLQlwdWJsaWMgdm9pZCB0ZXN0UmVnaW9uTWF0Y2hlczMoKSB7Ci0JCVN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZSBzdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUgPSBuZXcgU3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlKCk7Ci0JCXN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZS5zZXQoInRlc3RpbmcxMjMiKTsKLQkJYm9vbGVhbiByZXN1bHQgPSBzdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUucmVnaW9uTWF0Y2hlcyg3LCAzLCAiMTIzIik7Ci0JCWFzc2VydEVxdWFscyh0cnVlLCByZXN1bHQpOwotCX0KLQlwdWJsaWMgdm9pZCB0ZXN0UmVnaW9uTWF0Y2hlczQoKSB7Ci0JCVN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZSBzdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUgPSBuZXcgU3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlKCk7Ci0JCXN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZS5zZXQoInRlc3RpbmcxMjMiKTsKLQkJYm9vbGVhbiByZXN1bHQgPSBzdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUucmVnaW9uTWF0Y2hlcyg4LCAzLCAiMjM0Iik7Ci0JCWFzc2VydEVxdWFscyhmYWxzZSwgcmVzdWx0KTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFJlZ2lvbk1hdGNoZXNJZ25vcmVDYXNlKCkgewotCQlTdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUgc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlID0gbmV3IFN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZSgpOwotCQlTdHJpbmcgdGVzdCA9ICJ0ZXN0aW5nMTIzIjsKLQkJU3RyaW5nIGNvbXBhcmUgPSAiVGVTdGluZzEyMyI7Ci0JCXN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZS5zZXQodGVzdCk7Ci0JCWJvb2xlYW4gcmVzdWx0ID0gc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlLnJlZ2lvbk1hdGNoZXMoMCwgdGVzdC5sZW5ndGgoKSwgY29tcGFyZSk7Ci0JCWFzc2VydEVxdWFscyhmYWxzZSwgcmVzdWx0KTsKLQkJcmVzdWx0ID0gc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlLnJlZ2lvbk1hdGNoZXNJZ25vcmVDYXNlKDAsIHRlc3QubGVuZ3RoKCksIGNvbXBhcmUpOwotCQlhc3NlcnRFcXVhbHModHJ1ZSwgcmVzdWx0KTsKLQl9Ci0JcHVibGljIHZvaWQgdGVzdFJlZ2lvbk1hdGNoZXNJZ25vcmVDYXNlMigpIHsKLQkJU3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlIHN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZSA9IG5ldyBTdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUoKTsKLQkJU3RyaW5nIHRlc3QgPSAidGVzdFx1MDEzMG5nMTIzIjsKLQkJU3RyaW5nIGNvbXBhcmUgPSAiVGVTdEluZzEyMyI7Ci0JCXN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZS5zZXQodGVzdCk7Ci0JCWJvb2xlYW4gcmVzdWx0ID0gc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlLnJlZ2lvbk1hdGNoZXMoMCwgdGVzdC5sZW5ndGgoKSwgY29tcGFyZSk7Ci0JCWFzc2VydEVxdWFscyhmYWxzZSwgcmVzdWx0KTsKLQkJcmVzdWx0ID0gc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlLnJlZ2lvbk1hdGNoZXNJZ25vcmVDYXNlKDAsIHRlc3QubGVuZ3RoKCksIGNvbXBhcmUpOwotCQlhc3NlcnRFcXVhbHModHJ1ZSwgcmVzdWx0KTsKLQl9Ci0JcHVibGljIHZvaWQgdGVzdFJlZ2lvbk1hdGNoZXNJZ25vcmVDYXNlMygpIHsKLQkJU3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlIHN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZSA9IG5ldyBTdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUoKTsKLQkJU3RyaW5nIHRlc3QgPSAidGVzdGluZzEyMyI7Ci0JCVN0cmluZyBjb21wYXJlID0gIlRlU3RcdTAxMzFuZzEyMyI7Ci0JCXN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZS5zZXQodGVzdCk7Ci0JCWJvb2xlYW4gcmVzdWx0ID0gc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlLnJlZ2lvbk1hdGNoZXMoMCwgdGVzdC5sZW5ndGgoKSwgY29tcGFyZSk7Ci0JCWFzc2VydEVxdWFscyhmYWxzZSwgcmVzdWx0KTsKLQkJcmVzdWx0ID0gc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlLnJlZ2lvbk1hdGNoZXNJZ25vcmVDYXNlKDAsIHRlc3QubGVuZ3RoKCksIGNvbXBhcmUpOwotCQlhc3NlcnRFcXVhbHModHJ1ZSwgcmVzdWx0KTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZXZlbnRzL051bGxQYXJzZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2V2ZW50cy9OdWxsUGFyc2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmNzZlNWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZXZlbnRzL051bGxQYXJzZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5ldmVudHM7Ci0KLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5sdGsucGFyc2VyLlJlZ2lvblBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50UmVnaW9uOwotCi1wdWJsaWMgY2xhc3MgTnVsbFBhcnNlciBpbXBsZW1lbnRzIFJlZ2lvblBhcnNlciB7Ci0KLQlwdWJsaWMgSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBnZXREb2N1bWVudFJlZ2lvbnMoKSB7Ci0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIExpc3QgZ2V0UmVnaW9ucygpIHsKLQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgUmVnaW9uUGFyc2VyIG5ld0luc3RhbmNlKCkgewotCi0JCXJldHVybiB0aGlzOwotCX0KLQotCXB1YmxpYyB2b2lkIHJlc2V0KFJlYWRlciByZWFkZXIpIHsKLQkJLy8gZG8gbm90aGluZwotCi0JfQotCi0JcHVibGljIHZvaWQgcmVzZXQoUmVhZGVyIHJlYWRlciwgaW50IG9mZnNldCkgewotCQkvLyBkbyBub3RoaW5nCi0KLQl9Ci0KLQlwdWJsaWMgdm9pZCByZXNldChTdHJpbmcgaW5wdXQpIHsKLQkJLy8gZG8gbm90aGluZwotCi0JfQotCi0JcHVibGljIHZvaWQgcmVzZXQoU3RyaW5nIGlucHV0LCBpbnQgb2Zmc2V0KSB7Ci0JCS8vIGRvIG5vdGhpbmcKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2V2ZW50cy9UZXN0QWJvdXRUb0JlQ2hhbmdlZEV2ZW50LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9ldmVudHMvVGVzdEFib3V0VG9CZUNoYW5nZWRFdmVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZmZiZmM4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2V2ZW50cy9UZXN0QWJvdXRUb0JlQ2hhbmdlZEV2ZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMuZXZlbnRzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmRvY3VtZW50LlN0cnVjdHVyZWREb2N1bWVudEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV2ZW50cy5BYm91dFRvQmVDaGFuZ2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLQotcHVibGljIGNsYXNzIFRlc3RBYm91dFRvQmVDaGFuZ2VkRXZlbnQgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QWJvdXRUb0JlQ2hhbmdlZEV2ZW50KCkgewotCQlBYm91dFRvQmVDaGFuZ2VkRXZlbnQgZXZlbnQgPSBnZXRCYXNpY0V2ZW50KCk7Ci0JCWFzc2VydE5vdE51bGwoZXZlbnQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXREZWxldGVkVGV4dCgpIHsKLQkJQWJvdXRUb0JlQ2hhbmdlZEV2ZW50IGV2ZW50ID0gZ2V0QmFzaWNFdmVudCgpOwotCQlTdHJpbmcgZCA9IGV2ZW50LmdldERlbGV0ZWRUZXh0KCk7Ci0JCWFzc2VydEVxdWFscyhkLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0T3JpZ2luYWxSZXF1ZXN0ZXIoKSB7Ci0JCUFib3V0VG9CZUNoYW5nZWRFdmVudCBldmVudCA9IGdldEJhc2ljRXZlbnQoKTsKLQkJT2JqZWN0IHIgPSBldmVudC5nZXRPcmlnaW5hbFJlcXVlc3RlcigpOwotCQlhc3NlcnRFcXVhbHModGhpcywgcik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldFN0cnVjdHVyZWREb2N1bWVudCgpIHsKLQkJQWJvdXRUb0JlQ2hhbmdlZEV2ZW50IGV2ZW50ID0gZ2V0QmFzaWNFdmVudCgpOwotCQlJU3RydWN0dXJlZERvY3VtZW50IGQgPSBldmVudC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJYXNzZXJ0Tm90TnVsbChkKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2V0RGVsZXRlZFRleHQoKSB7Ci0JCUFib3V0VG9CZUNoYW5nZWRFdmVudCBldmVudCA9IGdldEJhc2ljRXZlbnQoKTsKLQkJZXZlbnQuc2V0RGVsZXRlZFRleHQoImp1bmt5Tm90aGluZyIpOwotCQkvLyBhc3N1bWUgb2sgaWYgbm8gZXhjZXB0aW9uCi0JCWFzc2VydFRydWUodHJ1ZSk7Ci0JfQotCi0JcHJpdmF0ZSBBYm91dFRvQmVDaGFuZ2VkRXZlbnQgZ2V0QmFzaWNFdmVudCgpIHsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IFN0cnVjdHVyZWREb2N1bWVudEZhY3RvcnkuZ2V0TmV3U3RydWN0dXJlZERvY3VtZW50SW5zdGFuY2UobmV3IE51bGxQYXJzZXIoKSk7Ci0JCUFib3V0VG9CZUNoYW5nZWRFdmVudCBldmVudCA9IG5ldyBBYm91dFRvQmVDaGFuZ2VkRXZlbnQoZG9jdW1lbnQsIHRoaXMsICJ0ZXN0IiwgMCwgMCk7Ci0JCXJldHVybiBldmVudDsKLQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZXZlbnRzL1Rlc3ROZXdEb2N1bWVudENvbnRlbnRFdmVudC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZXZlbnRzL1Rlc3ROZXdEb2N1bWVudENvbnRlbnRFdmVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTAwOWIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2V2ZW50cy9UZXN0TmV3RG9jdW1lbnRDb250ZW50RXZlbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5ldmVudHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuU3RydWN0dXJlZERvY3VtZW50RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLk5ld0RvY3VtZW50Q29udGVudEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0TmV3RG9jdW1lbnRDb250ZW50RXZlbnQgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JZmluYWwgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RTdHJpbmcgPSAidGVzdGluZyI7Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TmV3RG9jdW1lbnRDb250ZW50RXZlbnQoKSB7Ci0JCU5ld0RvY3VtZW50Q29udGVudEV2ZW50IGV2ZW50ID0gZ2V0QmFzaWNFdmVudCgpOwotCQlhc3NlcnROb3ROdWxsKGV2ZW50KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0T2Zmc2V0KCkgewotCQlOZXdEb2N1bWVudENvbnRlbnRFdmVudCBldmVudCA9IGdldEJhc2ljRXZlbnQoKTsKLQkJaW50IG8gPSBldmVudC5nZXRPZmZzZXQoKTsKLQkJYXNzZXJ0RXF1YWxzKDAsIG8pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRMZW5ndGgoKSB7Ci0JCU5ld0RvY3VtZW50Q29udGVudEV2ZW50IGV2ZW50ID0gZ2V0QmFzaWNFdmVudCgpOwotCQlpbnQgaSA9IGV2ZW50LmdldExlbmd0aCgpOwotCQlhc3NlcnRFcXVhbHModGVzdFN0cmluZy5sZW5ndGgoKSwgaSk7Ci0JfQotCi0JLyoKLQkgKiBDbGFzcyB1bmRlciB0ZXN0IGZvciBTdHJpbmcgZ2V0VGV4dCgpCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldFRleHQoKSB7Ci0JCU5ld0RvY3VtZW50Q29udGVudEV2ZW50IGV2ZW50ID0gZ2V0QmFzaWNFdmVudCgpOwotCQlTdHJpbmcgdGV4dCA9IGV2ZW50LmdldFRleHQoKTsKLQkJYXNzZXJ0RXF1YWxzKHRlc3RTdHJpbmcsIHRleHQpOwotCX0KLQotCXByaXZhdGUgTmV3RG9jdW1lbnRDb250ZW50RXZlbnQgZ2V0QmFzaWNFdmVudCgpIHsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IFN0cnVjdHVyZWREb2N1bWVudEZhY3RvcnkuZ2V0TmV3U3RydWN0dXJlZERvY3VtZW50SW5zdGFuY2UobmV3IE51bGxQYXJzZXIoKSk7Ci0JCWRvY3VtZW50LnNldFRleHQodGhpcywgdGVzdFN0cmluZyk7Ci0JCU5ld0RvY3VtZW50Q29udGVudEV2ZW50IGV2ZW50ID0gbmV3IE5ld0RvY3VtZW50Q29udGVudEV2ZW50KGRvY3VtZW50LCB0aGlzKTsKLQkJcmV0dXJuIGV2ZW50OwotCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZXZlbnRzL1Rlc3ROZXdEb2N1bWVudEV2ZW50LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9ldmVudHMvVGVzdE5ld0RvY3VtZW50RXZlbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzczMWVhYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9ldmVudHMvVGVzdE5ld0RvY3VtZW50RXZlbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5ldmVudHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuU3RydWN0dXJlZERvY3VtZW50RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLk5ld0RvY3VtZW50RXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLQotcHVibGljIGNsYXNzIFRlc3ROZXdEb2N1bWVudEV2ZW50IGV4dGVuZHMgVGVzdENhc2UgewotCWZpbmFsIHByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0U3RyaW5nID0gInRlc3RpbmciOwotCi0JcHVibGljIHZvaWQgdGVzdEdldE9mZnNldCgpIHsKLQkJTmV3RG9jdW1lbnRFdmVudCBldmVudCA9IGdldEJhc2ljRXZlbnQoKTsKLQkJaW50IG8gPSBldmVudC5nZXRPZmZzZXQoKTsKLQkJYXNzZXJ0RXF1YWxzKDAsIG8pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRMZW5ndGgoKSB7Ci0JCU5ld0RvY3VtZW50RXZlbnQgZXZlbnQgPSBnZXRCYXNpY0V2ZW50KCk7Ci0JCWludCBpID0gZXZlbnQuZ2V0TGVuZ3RoKCk7Ci0JCWFzc2VydEVxdWFscyh0ZXN0U3RyaW5nLmxlbmd0aCgpLCBpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TmV3RG9jdW1lbnRFdmVudCgpIHsKLQkJTmV3RG9jdW1lbnRFdmVudCBldmVudCA9IGdldEJhc2ljRXZlbnQoKTsKLQkJYXNzZXJ0Tm90TnVsbChldmVudCk7Ci0JfQotCi0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0VGV4dCgpIHsKLQkJTmV3RG9jdW1lbnRFdmVudCBldmVudCA9IGdldEJhc2ljRXZlbnQoKTsKLQkJU3RyaW5nIHRleHQgPSBldmVudC5nZXRUZXh0KCk7Ci0JCWFzc2VydEVxdWFscyh0ZXN0U3RyaW5nLCB0ZXh0KTsKLQl9Ci0KLQlwcml2YXRlIE5ld0RvY3VtZW50RXZlbnQgZ2V0QmFzaWNFdmVudCgpIHsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IFN0cnVjdHVyZWREb2N1bWVudEZhY3RvcnkuZ2V0TmV3U3RydWN0dXJlZERvY3VtZW50SW5zdGFuY2UobmV3IE51bGxQYXJzZXIoKSk7Ci0JCWRvY3VtZW50LnNldFRleHQodGhpcywgdGVzdFN0cmluZyk7Ci0JCU5ld0RvY3VtZW50RXZlbnQgZXZlbnQgPSBuZXcgTmV3RG9jdW1lbnRFdmVudChkb2N1bWVudCwgdGhpcyk7Ci0JCXJldHVybiBldmVudDsKLQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2V2ZW50cy9UZXN0Tm9DaGFuZ2VFdmVudC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZXZlbnRzL1Rlc3ROb0NoYW5nZUV2ZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5MTZjZTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZXZlbnRzL1Rlc3ROb0NoYW5nZUV2ZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMuZXZlbnRzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmRvY3VtZW50LlN0cnVjdHVyZWREb2N1bWVudEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV2ZW50cy5Ob0NoYW5nZUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0Tm9DaGFuZ2VFdmVudCBleHRlbmRzIFRlc3RDYXNlIHsKLQlmaW5hbCBwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdFN0cmluZyA9ICJ0ZXN0aW5nIjsKLQotCXB1YmxpYyB2b2lkIHRlc3ROb0NoYW5nZUV2ZW50KCkgewotCQlOb0NoYW5nZUV2ZW50IGV2ZW50ID0gZ2V0QmFzaWNFdmVudCgpOwotCQlhc3NlcnROb3ROdWxsKGV2ZW50KTsKLQkJYXNzZXJ0RXF1YWxzKE5vQ2hhbmdlRXZlbnQuTk9fQ09OVEVOVF9DSEFOR0UsIGV2ZW50LnJlYXNvbik7Ci0JfQotCi0JcHJpdmF0ZSBOb0NoYW5nZUV2ZW50IGdldEJhc2ljRXZlbnQoKSB7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQgPSBTdHJ1Y3R1cmVkRG9jdW1lbnRGYWN0b3J5LmdldE5ld1N0cnVjdHVyZWREb2N1bWVudEluc3RhbmNlKG5ldyBOdWxsUGFyc2VyKCkpOwotCQlkb2N1bWVudC5zZXRUZXh0KHRoaXMsIHRlc3RTdHJpbmcpOwotCQlOb0NoYW5nZUV2ZW50IGV2ZW50ID0gbmV3IE5vQ2hhbmdlRXZlbnQoZG9jdW1lbnQsIHRoaXMsICIiLCAwLCAwKTsKLQkJZXZlbnQucmVhc29uID0gTm9DaGFuZ2VFdmVudC5OT19DT05URU5UX0NIQU5HRTsKLQkJcmV0dXJuIGV2ZW50OwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZXZlbnRzL1Rlc3RSZWdpb25DaGFuZ2VkRXZlbnQuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2V2ZW50cy9UZXN0UmVnaW9uQ2hhbmdlZEV2ZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1NTgxZTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZXZlbnRzL1Rlc3RSZWdpb25DaGFuZ2VkRXZlbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5ldmVudHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuU3RydWN0dXJlZERvY3VtZW50RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLlJlZ2lvbkNoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVRleHRSZWdpb247Ci0KLXB1YmxpYyBjbGFzcyBUZXN0UmVnaW9uQ2hhbmdlZEV2ZW50IGV4dGVuZHMgVGVzdENhc2UgewotCWZpbmFsIHByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0U3RyaW5nID0gInRlc3RpbmciOwotCi0JcHVibGljIHZvaWQgdGVzdFJlZ2lvbkNoYW5nZWRFdmVudCgpIHsKLQkJUmVnaW9uQ2hhbmdlZEV2ZW50IGV2ZW50ID0gZ2V0QmFzaWNFdmVudCgpOwotCQlhc3NlcnROb3ROdWxsKGV2ZW50KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0UmVnaW9uKCkgewotCQlSZWdpb25DaGFuZ2VkRXZlbnQgZXZlbnQgPSBnZXRCYXNpY0V2ZW50KCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gc3RydWN0dXJlZERvY3VtZW50UmVnaW9uID0gZXZlbnQuZ2V0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCk7Ci0JCWFzc2VydEVxdWFscyhudWxsLCBzdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKSB7Ci0JCVJlZ2lvbkNoYW5nZWRFdmVudCBldmVudCA9IGdldEJhc2ljRXZlbnQoKTsKLQkJSVRleHRSZWdpb24gcmVnaW9uID0gZXZlbnQuZ2V0UmVnaW9uKCk7Ci0JCWFzc2VydEVxdWFscyhudWxsLCByZWdpb24pOwotCX0KLQotCXByaXZhdGUgUmVnaW9uQ2hhbmdlZEV2ZW50IGdldEJhc2ljRXZlbnQoKSB7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQgPSBTdHJ1Y3R1cmVkRG9jdW1lbnRGYWN0b3J5LmdldE5ld1N0cnVjdHVyZWREb2N1bWVudEluc3RhbmNlKG5ldyBOdWxsUGFyc2VyKCkpOwotCQlkb2N1bWVudC5zZXRUZXh0KHRoaXMsIHRlc3RTdHJpbmcpOwotCQlSZWdpb25DaGFuZ2VkRXZlbnQgZXZlbnQgPSBuZXcgUmVnaW9uQ2hhbmdlZEV2ZW50KGRvY3VtZW50LCB0aGlzLCBudWxsLCBudWxsLCAiIiwgMCwgMCk7Ci0JCXJldHVybiBldmVudDsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9ldmVudHMvVGVzdFJlZ2lvbnNSZXBsYWNlZEV2ZW50LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9ldmVudHMvVGVzdFJlZ2lvbnNSZXBsYWNlZEV2ZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlZGVkMWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZXZlbnRzL1Rlc3RSZWdpb25zUmVwbGFjZWRFdmVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLmV2ZW50czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5kb2N1bWVudC5TdHJ1Y3R1cmVkRG9jdW1lbnRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5ldmVudHMuUmVnaW9uc1JlcGxhY2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLQotcHVibGljIGNsYXNzIFRlc3RSZWdpb25zUmVwbGFjZWRFdmVudCBleHRlbmRzIFRlc3RDYXNlIHsKLQotCWZpbmFsIHByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0U3RyaW5nID0gInRlc3RpbmciOwotCi0JcHVibGljIHZvaWQgdGVzdFJlZ2lvbnNSZXBsYWNlZEV2ZW50KCkgewotCQlSZWdpb25zUmVwbGFjZWRFdmVudCBldmVudCA9IGdldEJhc2ljRXZlbnQoKTsKLQkJYXNzZXJ0Tm90TnVsbChldmVudCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldE5ld1JlZ2lvbnMoKSB7Ci0JCVJlZ2lvbnNSZXBsYWNlZEV2ZW50IGV2ZW50ID0gZ2V0QmFzaWNFdmVudCgpOwotCQlhc3NlcnROdWxsKGV2ZW50LmdldE5ld1JlZ2lvbnMoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldE9sZFJlZ2lvbnMoKSB7Ci0JCVJlZ2lvbnNSZXBsYWNlZEV2ZW50IGV2ZW50ID0gZ2V0QmFzaWNFdmVudCgpOwotCQlhc3NlcnROdWxsKGV2ZW50LmdldE9sZFJlZ2lvbnMoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbigpIHsKLQkJUmVnaW9uc1JlcGxhY2VkRXZlbnQgZXZlbnQgPSBnZXRCYXNpY0V2ZW50KCk7Ci0JCWFzc2VydE51bGwoZXZlbnQuZ2V0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCkpOwotCX0KLQotCXByaXZhdGUgUmVnaW9uc1JlcGxhY2VkRXZlbnQgZ2V0QmFzaWNFdmVudCgpIHsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IFN0cnVjdHVyZWREb2N1bWVudEZhY3RvcnkuZ2V0TmV3U3RydWN0dXJlZERvY3VtZW50SW5zdGFuY2UobmV3IE51bGxQYXJzZXIoKSk7Ci0JCWRvY3VtZW50LnNldFRleHQodGhpcywgdGVzdFN0cmluZyk7Ci0JCVJlZ2lvbnNSZXBsYWNlZEV2ZW50IGV2ZW50ID0gbmV3IFJlZ2lvbnNSZXBsYWNlZEV2ZW50KGRvY3VtZW50LCB0aGlzLCBudWxsLCBudWxsLCBudWxsLCAiIiwgMCwgMCk7Ci0JCXJldHVybiBldmVudDsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9ldmVudHMvVGVzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9ldmVudHMvVGVzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhNjZhNmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZXZlbnRzL1Rlc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLmV2ZW50czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5kb2N1bWVudC5TdHJ1Y3R1cmVkRG9jdW1lbnRGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5ldmVudHMuU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLQotcHVibGljIGNsYXNzIFRlc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCBleHRlbmRzIFRlc3RDYXNlIHsKLQlmaW5hbCBwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdFN0cmluZyA9ICJ0ZXN0aW5nIjsKLQotCXB1YmxpYyB2b2lkIHRlc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCgpIHsKLQkJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQgZXZlbnQgPSBnZXRCYXNpY0V2ZW50KCk7Ci0JCWFzc2VydE5vdE51bGwoZXZlbnQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXROZXdTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKCkgewotCQlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCBldmVudCA9IGdldEJhc2ljRXZlbnQoKTsKLQkJYXNzZXJ0TnVsbChldmVudC5nZXROZXdTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRPbGRTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKCkgewotCQlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCBldmVudCA9IGdldEJhc2ljRXZlbnQoKTsKLQkJYXNzZXJ0TnVsbChldmVudC5nZXRPbGRTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKCkpOwotCX0KLQotCXByaXZhdGUgU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQgZ2V0QmFzaWNFdmVudCgpIHsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IFN0cnVjdHVyZWREb2N1bWVudEZhY3RvcnkuZ2V0TmV3U3RydWN0dXJlZERvY3VtZW50SW5zdGFuY2UobmV3IE51bGxQYXJzZXIoKSk7Ci0JCWRvY3VtZW50LnNldFRleHQodGhpcywgdGVzdFN0cmluZyk7Ci0JCVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50IGV2ZW50ID0gbmV3IFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KGRvY3VtZW50LCB0aGlzLCBudWxsLCBudWxsLCAiIiwgMCwgMCk7Ci0JCXJldHVybiBldmVudDsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9leGFtcGxlcy9UZXN0QXRTaWduLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9leGFtcGxlcy9UZXN0QXRTaWduLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkOTEwMDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZXhhbXBsZXMvVGVzdEF0U2lnbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMuZXhhbXBsZXM7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOwotCi0KLXB1YmxpYyBjbGFzcyBUZXN0QXRTaWduIHsKLQotCXB1YmxpYyBUZXN0QXRTaWduKCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVByb3BlcnRpZXMgcHJvcGVydGllcyA9IG5ldyBQcm9wZXJ0aWVzKCk7IC8vU3lzdGVtLmdldFByb3BlcnRpZXMoKTsKLQkJcHJvcGVydGllcy5wdXQoImF0IHNpZ24iLCAidGhpcyBpcyBhbiBcdTAwNDAgc2lnbiIpOwotCQlwcm9wZXJ0aWVzLmxpc3QoU3lzdGVtLm91dCk7Ci0JCUZpbGVPdXRwdXRTdHJlYW0gb3V0cHV0U3RyZWFtID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oInRlc3RBdC50eHQiKTsKLQkJcHJvcGVydGllcy5zdG9yZShvdXRwdXRTdHJlYW0sICJ0ZXN0cyIpOwotCQlvdXRwdXRTdHJlYW0uY2xvc2UoKTsKLQkJSW5wdXRTdHJlYW0gaW5TdHJlYW0gPSBuZXcgRmlsZUlucHV0U3RyZWFtKCJ0ZXN0QXQudHh0Iik7Ci0JCVByb3BlcnRpZXMgcmVhZFByb3BlcnRpZXMgPSBuZXcgUHJvcGVydGllcygpOwotCQlyZWFkUHJvcGVydGllcy5sb2FkKGluU3RyZWFtKTsKLQkJU3RyaW5nIGF0U2lnbiA9IChTdHJpbmcpIHJlYWRQcm9wZXJ0aWVzLmdldCgiYXQgc2lnbiIpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oImF0IHNpZ24gZnJvbSByZWFkOiAiICsgYXRTaWduKTsKLQotCi0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvbGlmZS9FbXB0eU1vZGVsRm9yVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2xpZmUvRW1wdHlNb2RlbEZvclRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhZmNlYmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvbGlmZS9FbXB0eU1vZGVsRm9yVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMubGlmZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5tb2RlbC5BYnN0cmFjdFN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSW5kZXhlZFJlZ2lvbjsKLQotCi0KLXB1YmxpYyBjbGFzcyBFbXB0eU1vZGVsRm9yVGVzdHMgZXh0ZW5kcyBBYnN0cmFjdFN0cnVjdHVyZWRNb2RlbCB7Ci0KLQlwdWJsaWMgRW1wdHlNb2RlbEZvclRlc3RzKCkgewotCi0JCXN1cGVyKCk7Ci0JCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY29uc3RydWN0b3Igc3R1YgotCX0KLQotCXB1YmxpYyBJbmRleGVkUmVnaW9uIGdldEluZGV4ZWRSZWdpb24oaW50IG9mZnNldCkgewotCi0JCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQkJcmV0dXJuIG51bGw7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvbGlmZS9UZXN0Q3JlYXRpb24uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2xpZmUvVGVzdENyZWF0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyNmY0OWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvbGlmZS9UZXN0Q3JlYXRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMubGlmZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5tb2RlbC5Nb2RlbExpZmVjeWNsZUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi0KLQotCi1wdWJsaWMgY2xhc3MgVGVzdENyZWF0aW9uIGV4dGVuZHMgVGVzdENhc2UgewotCXByaXZhdGUgYm9vbGVhbiBERUJVRyA9IGZhbHNlOwotCi0JcHVibGljIHZvaWQgdGVzdENyZWF0aW9uKCkgewotCQlJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbCA9IG5ldyBFbXB0eU1vZGVsRm9yVGVzdHMoKTsKLQkJTW9kZWxMaWZlY3ljbGVFdmVudCBldmVudCA9IG5ldyBNb2RlbExpZmVjeWNsZUV2ZW50KHN0cnVjdHVyZWRNb2RlbCwgTW9kZWxMaWZlY3ljbGVFdmVudC5NT0RFTF9SRUxFQVNFRCk7Ci0JCWlmIChERUJVRykgewotCQkJU3lzdGVtLm91dC5wcmludGxuKGV2ZW50KTsKLQkJfQotCQlldmVudCA9IG5ldyBNb2RlbExpZmVjeWNsZUV2ZW50KHN0cnVjdHVyZWRNb2RlbCwgTW9kZWxMaWZlY3ljbGVFdmVudC5NT0RFTF9ESVJUWV9TVEFURSk7Ci0JCWlmIChERUJVRykgewotCQkJU3lzdGVtLm91dC5wcmludGxuKGV2ZW50KTsKLQkJfQotCQlldmVudCA9IG5ldyBNb2RlbExpZmVjeWNsZUV2ZW50KHN0cnVjdHVyZWRNb2RlbCwgTW9kZWxMaWZlY3ljbGVFdmVudC5NT0RFTF9ET0NVTUVOVF9DSEFOR0VEKTsKLQkJaWYgKERFQlVHKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oZXZlbnQpOwotCQl9Ci0JCS8qICAgICAgICBldmVudCA9IG5ldyBNb2RlbExpZmVjeWNsZUV2ZW50KHN0cnVjdHVyZWRNb2RlbCwgTW9kZWxMaWZlY3ljbGVFdmVudC5NT0RFTF9SRUlOSVRJQUxJWkVEKTsKLQkJIGlmIChERUJVRykgewotCQkgU3lzdGVtLm91dC5wcmludGxuKGV2ZW50KTsKLQkJIH0KLQkJIGV2ZW50ID0gbmV3IE1vZGVsTGlmZWN5Y2xlRXZlbnQoc3RydWN0dXJlZE1vZGVsLCBNb2RlbExpZmVjeWNsZUV2ZW50LkFEQVBURVJTX05PVElGSUVEKTsKLQkJIGlmIChERUJVRykgewotCQkgU3lzdGVtLm91dC5wcmludGxuKGV2ZW50KTsKLQkJIH0KLQkJIGV2ZW50ID0gbmV3IE1vZGVsTGlmZWN5Y2xlRXZlbnQoc3RydWN0dXJlZE1vZGVsLCBNb2RlbExpZmVjeWNsZUV2ZW50Lk1PREVMX1JFTE9BREVEKTsKLQkJIGlmIChERUJVRykgewotCQkgU3lzdGVtLm91dC5wcmludGxuKGV2ZW50KTsKLQkJIH0KLQkJIGV2ZW50ID0gbmV3IE1vZGVsTGlmZWN5Y2xlRXZlbnQoc3RydWN0dXJlZE1vZGVsLCBNb2RlbExpZmVjeWNsZUV2ZW50Lk1PREVMX1JFU09VUkNFX0RFTEVURUQpOwotCQkgaWYgKERFQlVHKSB7Ci0JCSBTeXN0ZW0ub3V0LnByaW50bG4oZXZlbnQpOwotCQkgfQotCQkgZXZlbnQgPSBuZXcgTW9kZWxMaWZlY3ljbGVFdmVudChzdHJ1Y3R1cmVkTW9kZWwsIE1vZGVsTGlmZWN5Y2xlRXZlbnQuTU9ERUxfUkVTT1VSQ0VfTU9WRUQpOwotCQkgaWYgKERFQlVHKSB7Ci0JCSBTeXN0ZW0ub3V0LnByaW50bG4oZXZlbnQpOwotCQkgfQotCQkgKi8KLQkJZXZlbnQgPSBuZXcgTW9kZWxMaWZlY3ljbGVFdmVudChzdHJ1Y3R1cmVkTW9kZWwsIE1vZGVsTGlmZWN5Y2xlRXZlbnQuTU9ERUxfU0FWRUQpOwotCQlpZiAoREVCVUcpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihldmVudCk7Ci0JCX0KLQotCi0JCS8vIGlmIGdldHMgdG8gaGVyZSB3aXRob3V0IGV4Y2VwdGlvbiwgYXNzdW1lIG9rLgotCQlhc3NlcnRUcnVlKHRydWUpOwotCi0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy90aHJlYWRpbmcvVGVzdE9mVGhyZWFkTG9jYWxJbXByb3ZlbWVudC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvdGhyZWFkaW5nL1Rlc3RPZlRocmVhZExvY2FsSW1wcm92ZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQyMmNiYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy90aHJlYWRpbmcvVGVzdE9mVGhyZWFkTG9jYWxJbXByb3ZlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTg3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMudGhyZWFkaW5nOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwudGV4dC5CYXNpY1N0cnVjdHVyZWREb2N1bWVudDsKLQotCi0vKioKLSAqIFRvIHByaW50IG91dCB0aW1pbmdzLCBzZXQgREVCVUdfVEVTVCB0byB0cnVlLCBvdGhlciB3aXNlLCB0aGlzIHRlc3QgcGFzc2VzCi0gKiBpZiBubyBleGNlcHRpb25zIHRocm93bi4KLSAqLwotcHVibGljIGNsYXNzIFRlc3RPZlRocmVhZExvY2FsSW1wcm92ZW1lbnQgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JLy8gbnVtYmVyIG9mIHRpbWVzIGEgcGFpciBvZiB0ZXN0cyAod2l0aCBhbmQgd2l0aG91dCkgdGhyZWFkIGxvY2FsIGFyZSAKLQkvLyByZXBlYXRlZCAoZm9yIG1vcmUgYWNjdXJhdGUgYXZlcmFnZXMpLgotCWludCBuVHJpYWxzID0gMzsKLQlJU3RydWN0dXJlZERvY3VtZW50IGZEb2N1bWVudCA9IG51bGw7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVR19URVNUID0gZmFsc2U7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVR19URVNUX0RFVEFJTCA9IGZhbHNlOwotCS8vIHRlc3RzIGZyb20gMSB0byBNQVhfVFJFQURTLTEgdGhyZWFkcwotCXByaXZhdGUgaW50IE1BWF9USFJFQURTID0gNTsKLQlwcml2YXRlIGxvbmcgU0xFRVBfVElNRSA9IDA7Ci0KLQlwdWJsaWMgVGVzdE9mVGhyZWFkTG9jYWxJbXByb3ZlbWVudCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZ2V0Q29udGVudCgpIHsKLQkJcmV0dXJuICI8dGVzdD4iICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiCi0JCQkJCSsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiCi0JCQkJCSsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiCi0JCQkJCSsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiCi0JCQkJCSsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiCi0JCQkJCSsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiCi0JCQkJCSsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiCi0JCQkJCSsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiCi0JCQkJCSsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiCi0JCQkJCSsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiCi0JCQkJCSsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiCi0JCQkJCSsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiCi0JCQkJCSsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiCi0JCQkJCSsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiCi0JCQkJCSsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiCi0JCQkJCSsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiCi0JCQkJCSsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiCi0JCQkJCSsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiCi0JCQkJCSsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjxleHRyYT4gPGp1bms+IHRvIG1ha2UgYSA8bGFyZ2UvPiBmaWxlIChvdmVyIDwxMDAwPiBjaGFycykiICsgIjwvdGVzdD4iOwotCX0KLQotCXByaXZhdGUgSVN0cnVjdHVyZWREb2N1bWVudCBnZXREb2N1bWVudChTdHJpbmcgY29udGVudCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJaWYgKGZEb2N1bWVudCA9PSBudWxsKSB7Ci0JCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCQlmRG9jdW1lbnQgPSBtb2RlbE1hbmFnZXIuY3JlYXRlU3RydWN0dXJlZERvY3VtZW50Rm9yKCJ0ZXN0UGVyZi54bWwiLCBjb250ZW50LCBudWxsKTsKLQkJfQotCQlyZXR1cm4gZkRvY3VtZW50OwotCX0KLQotCXZvaWQgbGlua1J1bm5lcihmaW5hbCBCb29sZWFuIGRpcmVjdGlvbiwgSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCkgewotCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IGRvY3VtZW50OwotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHByZXZpb3VzRG9jdW1lbnRSZWdpb24gPSBudWxsOwotCQlsb25nIHN0YXJ0VGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQlpbnQgc3RhcnQgPSAwOwotCQlpbnQgbGVuZ3RoID0gc3RydWN0dXJlZERvY3VtZW50LmdldExlbmd0aCgpOwotCQlpbnQgblJlZ2lvbnMgPSAwOwotCQlmb3IgKGludCBpID0gc3RhcnQ7IGkgPCBsZW5ndGg7IGkrKykgewotCQkJaW50IGluZGV4ID0gaTsKLQkJCWlmICghZGlyZWN0aW9uLmJvb2xlYW5WYWx1ZSgpKSB7Ci0JCQkJaW5kZXggPSAobGVuZ3RoIC0gMSkgLSBpOwotCQkJfQotCQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBjdXJyZW50RG9jdW1lbnRSZWdpb24gPSBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0UmVnaW9uQXRDaGFyYWN0ZXJPZmZzZXQoaW5kZXgpOwotCQkJaWYgKGN1cnJlbnREb2N1bWVudFJlZ2lvbiAhPSBwcmV2aW91c0RvY3VtZW50UmVnaW9uKSB7Ci0JCQkJblJlZ2lvbnMrKzsKLQkJCQlwcmV2aW91c0RvY3VtZW50UmVnaW9uID0gY3VycmVudERvY3VtZW50UmVnaW9uOwotCQkJfQotCQkJVGhyZWFkLnlpZWxkKCk7Ci0JCQl0cnkgewotCQkJCVRocmVhZC5zbGVlcChTTEVFUF9USU1FKTsKLQkJCX0KLQkJCWNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJfQotCQlsb25nIGVuZFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJaWYgKERFQlVHX1RFU1RfREVUQUlMKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlRocmVhZDogIiArIFRocmVhZC5jdXJyZW50VGhyZWFkKCkgKyAiICAgZnJvbSAiICsgbGVuZ3RoICsgIiBjaGFyYWN0ZXJzLCBmb3VuZCAiICsgblJlZ2lvbnMgKyAiIHJlZ2lvbnMgaW4gIiArIChlbmRUaW1lIC0gc3RhcnRUaW1lKSArICIgbXNlY3MuIik7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIGxvbmcgZG90ZXN0RG9jdW1lbnRXYWxraW5nV2l0aFRocmVhZExvY2FsKGludCBuVGhyZWFkcykgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0VVNFX0xPQ0FMX1RIUkVBRCh0cnVlKTsKLQkJZkRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoZ2V0Q29udGVudCgpKTsKLQkJbG9uZyBzdGFydFRpbWVPdmVyYWxsID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCWRvRG9jdW1lbnRXYWxraW5nKG5UaHJlYWRzKTsKLQkJbG9uZyBlbmRUaW1lT3ZlcmFsbCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQlsb25nIGZpbmFsT3ZlcmFsbCA9IGVuZFRpbWVPdmVyYWxsIC0gc3RhcnRUaW1lT3ZlcmFsbDsKLQkJaWYgKERFQlVHX1RFU1RfREVUQUlMKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIk92ZXJhbGwgdGltZSB1c2luZyBMb2NhbF9UaHJlYWQ6ICIgKyBmaW5hbE92ZXJhbGwpOwotCQl9Ci0JCXJldHVybiBmaW5hbE92ZXJhbGw7Ci0JfQotCi0JcHJpdmF0ZSBsb25nIGRvdGVzdERvY3VtZW50V2Fsa2luZ1dpdGhvdXRUaHJlYWRMb2NhbChpbnQgblRocmVhZHMpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUJhc2ljU3RydWN0dXJlZERvY3VtZW50LnNldFVTRV9MT0NBTF9USFJFQUQoZmFsc2UpOwotCQlmRG9jdW1lbnQgPSBnZXREb2N1bWVudChnZXRDb250ZW50KCkpOwotCQlsb25nIHN0YXJ0VGltZU92ZXJhbGwgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJZG9Eb2N1bWVudFdhbGtpbmcoblRocmVhZHMpOwotCQlsb25nIGVuZFRpbWVPdmVyYWxsID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCWxvbmcgZmluYWxPdmVyYWxsID0gZW5kVGltZU92ZXJhbGwgLSBzdGFydFRpbWVPdmVyYWxsOwotCQlpZiAoREVCVUdfVEVTVF9ERVRBSUwpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiT3ZlcmFsbCB0aW1lIE5PVCB1c2luZyBMb2NhbF9UaHJlYWQ6ICIgKyBmaW5hbE92ZXJhbGwpOwotCQl9Ci0JCXJldHVybiBmaW5hbE92ZXJhbGw7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGRvRG9jdW1lbnRXYWxraW5nKGludCBuVGhyZWFkcykgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJVGhyZWFkW10gdGhyZWFkcyA9IG5ldyBUaHJlYWRbblRocmVhZHNdOwotCQlib29sZWFuIHRvZ2dsZSA9IHRydWU7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgdGhyZWFkcy5sZW5ndGg7IGkrKykgewotCQkJZmluYWwgQm9vbGVhbiBkaXJlY3Rpb24gPSBuZXcgQm9vbGVhbih0b2dnbGUpOwotCQkJdG9nZ2xlID0gIXRvZ2dsZTsKLQkJCVRocmVhZEdyb3VwIHRocmVhZEdyb3VwID0gbmV3IFRocmVhZEdyb3VwKCJzc2UgdW5pdCB0ZXN0cyIpOwotCQkJVGhyZWFkIHRocmVhZCA9IG5ldyBUaHJlYWQodGhyZWFkR3JvdXAsIG5ldyBSdW5uYWJsZSgpIHsKLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCWxpbmtSdW5uZXIoZGlyZWN0aW9uLCBmRG9jdW1lbnQpOwotCQkJCX0KLQkJCX0sICgic3NlIHVuaXQgdGVzdCB0aHJlYWQgIiArIGkpKTsKLQkJCS8vIEkgdXNlZCBNSU5fUFJJT1JJVFkgc2luY2UgdGhhdCBtYWtlcyBpdCBlYXNpZXIgdG8gInNlZSIgaW4gZGVidWdnZXIgbGlzdCBvZiB0aHJlYWRzCi0JCQl0aHJlYWQuc2V0UHJpb3JpdHkoVGhyZWFkLk1JTl9QUklPUklUWSk7Ci0JCQl0aHJlYWRzW2ldID0gdGhyZWFkOwotCQl9Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgdGhyZWFkcy5sZW5ndGg7IGkrKykgewotCQkJdGhyZWFkc1tpXS5zdGFydCgpOwotCQl9Ci0JCXRyeSB7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IHRocmVhZHMubGVuZ3RoOyBpKyspIHsKLQkJCQl0aHJlYWRzW2ldLmpvaW4oKTsKLQotCQkJfQotCQl9Ci0JCWNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5UaHJlYWRzKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJZm9yIChpbnQgaSA9IDE7IGkgPCBNQVhfVEhSRUFEUzsgaSsrKSB7Ci0JCQlpbnQgblRocmVhZHMgPSBpOwotCQkJaWYgKERFQlVHX1RFU1RfREVUQUlMKSB7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCIgPj4+Pi0tLS0gTiBUaHJlYWRzOiAiICsgaSk7Ci0JCQl9Ci0JCQlmbG9hdCB3b0N1bW0gPSAwOwotCQkJZmxvYXQgd0N1bW0gPSAwOwotCi0JCQlmb3IgKGludCBqID0gMDsgaiA8IG5UcmlhbHM7IGorKykgewotCQkJCXdvQ3VtbSA9IHdvQ3VtbSArIGRvdGVzdERvY3VtZW50V2Fsa2luZ1dpdGhvdXRUaHJlYWRMb2NhbChuVGhyZWFkcyk7Ci0JCQkJd0N1bW0gPSB3Q3VtbSArIGRvdGVzdERvY3VtZW50V2Fsa2luZ1dpdGhUaHJlYWRMb2NhbChuVGhyZWFkcyk7Ci0JCQl9Ci0JCQlmbG9hdCBhdmVyYWdlV08gPSB3b0N1bW0gLyBuVHJpYWxzOwotCQkJZmxvYXQgYXZlcmFnZVcgPSB3Q3VtbSAvIG5UcmlhbHM7Ci0JCQlmbG9hdCBwZXJUaHJlYWRXTyA9IGF2ZXJhZ2VXTyAvIG5UaHJlYWRzOwotCQkJZmxvYXQgcGVyVGhyZWFkVyA9IGF2ZXJhZ2VXIC8gblRocmVhZHM7Ci0JCQlpbnQgcm91bmRlZFdPID0gbmV3IEZsb2F0KHBlclRocmVhZFdPKS5pbnRWYWx1ZSgpOwotCQkJaW50IHJvdW5kZWRXID0gbmV3IEZsb2F0KHBlclRocmVhZFcpLmludFZhbHVlKCk7Ci0JCQlpZiAoREVCVUdfVEVTVCkgewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQXZlcmFnZSBwZXIgdGhyZWFkOiB3aXRob3V0OiAiICsgcm91bmRlZFdPICsgIiB3aXRoOiAiICsgcm91bmRlZFcpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiIDw8PDw8LS0tLSBOIFRocmVhZHM6ICIgKyBpKTsKLQkJCX0KLQkJfQotCQkvLyBpZiBnZXRzIHRvIGhlcmUgKHdpdGggbm8gZXhjZXB0aW9ucykgYWxsIGlzIG9rLgotCQlhc3NlcnRUcnVlKDAgPT0gMCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvdGhyZWFkaW5nL1Rlc3RPZlRocmVhZExvY2FsV2l0aENoYW5nZXMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL3RocmVhZGluZy9UZXN0T2ZUaHJlYWRMb2NhbFdpdGhDaGFuZ2VzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjOTM5NDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvdGhyZWFkaW5nL1Rlc3RPZlRocmVhZExvY2FsV2l0aENoYW5nZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLnRocmVhZGluZzsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlJhbmRvbTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwudGV4dC5CYXNpY1N0cnVjdHVyZWREb2N1bWVudDsKLQotCi0vKioKLSAqIFRoaXMgY2xhc3Mgc3RhcnRlZCBvZmYgYXMgY29weSBvZiBUZXN0T2ZUaHJlYWRMb2NhbEltcHJvdmVtZW50cywgYW5kIEkganVzdAotICogYWRkZWQgYW5vdGhlciB0aHJlYWQgd2l0aCBtb2RpZmllcyB0aGUgZG9jdW1lbnQuCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0T2ZUaHJlYWRMb2NhbFdpdGhDaGFuZ2VzIGV4dGVuZHMgVGVzdENhc2UgewotCS8vIG51bWJlciBvZiB0aW1lcyBhIHBhaXIgb2YgdGVzdHMgKHdpdGggYW5kIHdpdGhvdXQpIHRocmVhZCBsb2NhbCBhcmUKLQkvLyByZXBlYXRlZCAoZm9yIG1vcmUgYWNjdXJhdGUgYXZlcmFnZXMpLgotCWludCBuVHJpYWxzID0gMzsKLQlJU3RydWN0dXJlZERvY3VtZW50IGZEb2N1bWVudCA9IG51bGw7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVR19URVNUX0RFVEFJTCA9IGZhbHNlOwotCS8vIHRlc3RzIGZyb20gMSB0byBNQVhfVFJFQURTLTEgdGhyZWFkcwotCXByaXZhdGUgaW50IE1BWF9USFJFQURTID0gMTQ7Ci0JcHJpdmF0ZSBsb25nIFNMRUVQX1RJTUUgPSAyOwotCXByaXZhdGUgaW50IE5fQ0hBTkdFUyA9IDEwMDAwOwotCi0JcHVibGljIFRlc3RPZlRocmVhZExvY2FsV2l0aENoYW5nZXMoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzdXBlcigpOwotCX0KLQotCXByaXZhdGUgZmluYWwgU3RyaW5nIGdldENvbnRlbnQoKSB7Ci0JCXJldHVybiAiPHRlc3Q+IiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8L3Rlc3Q+IjsKLQl9Ci0KLQlwcml2YXRlIElTdHJ1Y3R1cmVkRG9jdW1lbnQgZ2V0RG9jdW1lbnQoU3RyaW5nIGNvbnRlbnQpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCWlmIChmRG9jdW1lbnQgPT0gbnVsbCkgewotCQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQkJZkRvY3VtZW50ID0gbW9kZWxNYW5hZ2VyLmNyZWF0ZVN0cnVjdHVyZWREb2N1bWVudEZvcigidGVzdFBlcmYueG1sIiwgY29udGVudCwgbnVsbCk7Ci0JCX0KLQkJcmV0dXJuIGZEb2N1bWVudDsKLQl9Ci0KLQl2b2lkIGxpbmtSdW5uZXIoZmluYWwgQm9vbGVhbiBkaXJlY3Rpb24sIElTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQpIHsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBkb2N1bWVudDsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBwcmV2aW91c0RvY3VtZW50UmVnaW9uID0gbnVsbDsKLQkJbG9uZyBzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJaW50IHN0YXJ0ID0gMDsKLQkJaW50IGxlbmd0aCA9IHN0cnVjdHVyZWREb2N1bWVudC5nZXRMZW5ndGgoKTsKLQkJaW50IG5SZWdpb25zID0gMDsKLQkJLy8gSSBtYWRlIGxlbmd0aCAiZHluYW1pYyIgYWZ0ZXIgYWRkaW5nIG1vZGlmaWNhdGlvbiB0aHJlYWQKLQkJZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgc3RydWN0dXJlZERvY3VtZW50LmdldExlbmd0aCgpOyBpKyspIHsKLQkJCWludCBpbmRleCA9IGk7Ci0JCQlpZiAoIWRpcmVjdGlvbi5ib29sZWFuVmFsdWUoKSkgewotCQkJCWludCBjdXJyZW50TGVuZ3RoID0gc3RydWN0dXJlZERvY3VtZW50LmdldExlbmd0aCgpOwotCQkJCWluZGV4ID0gKGN1cnJlbnRMZW5ndGggLSAxKSAtIGk7Ci0JCQl9Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGN1cnJlbnREb2N1bWVudFJlZ2lvbiA9IHN0cnVjdHVyZWREb2N1bWVudC5nZXRSZWdpb25BdENoYXJhY3Rlck9mZnNldChpbmRleCk7Ci0JCQlpZiAoY3VycmVudERvY3VtZW50UmVnaW9uICE9IHByZXZpb3VzRG9jdW1lbnRSZWdpb24pIHsKLQkJCQluUmVnaW9ucysrOwotCQkJCXByZXZpb3VzRG9jdW1lbnRSZWdpb24gPSBjdXJyZW50RG9jdW1lbnRSZWdpb247Ci0JCQl9Ci0JCQlUaHJlYWQueWllbGQoKTsKLQkJCXRyeSB7Ci0JCQkJVGhyZWFkLnNsZWVwKFNMRUVQX1RJTUUpOwotCQkJfQotCQkJY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfQotCQl9Ci0JCWxvbmcgZW5kVGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQlpZiAoREVCVUdfVEVTVF9ERVRBSUwpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiVGhyZWFkOiAiICsgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKSArICIgICBmcm9tICIgKyBsZW5ndGggKyAiIGNoYXJhY3RlcnMsIGZvdW5kICIgKyBuUmVnaW9ucyArICIgcmVnaW9ucyBpbiAiICsgKGVuZFRpbWUgLSBzdGFydFRpbWUpICsgIiBtc2Vjcy4iKTsKLQkJfQotCX0KLQotCXByaXZhdGUgbG9uZyBkb3Rlc3REb2N1bWVudFdhbGtpbmdXaXRoVGhyZWFkTG9jYWwoaW50IG5UaHJlYWRzKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5zZXRVU0VfTE9DQUxfVEhSRUFEKHRydWUpOwotCQlmRG9jdW1lbnQgPSBnZXREb2N1bWVudChnZXRDb250ZW50KCkpOwotCQlsb25nIHN0YXJ0VGltZU92ZXJhbGwgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJZG9Eb2N1bWVudFdhbGtpbmcoblRocmVhZHMpOwotCQlsb25nIGVuZFRpbWVPdmVyYWxsID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCWxvbmcgZmluYWxPdmVyYWxsID0gZW5kVGltZU92ZXJhbGwgLSBzdGFydFRpbWVPdmVyYWxsOwotCQlpZiAoREVCVUdfVEVTVF9ERVRBSUwpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiT3ZlcmFsbCB0aW1lIHVzaW5nIExvY2FsX1RocmVhZDogIiArIGZpbmFsT3ZlcmFsbCk7Ci0JCX0KLQkJcmV0dXJuIGZpbmFsT3ZlcmFsbDsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgZG9Eb2N1bWVudFdhbGtpbmcoaW50IG5UaHJlYWRzKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlUaHJlYWRbXSB0aHJlYWRzID0gbmV3IFRocmVhZFtuVGhyZWFkc107Ci0JCWJvb2xlYW4gdG9nZ2xlID0gdHJ1ZTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCB0aHJlYWRzLmxlbmd0aDsgaSsrKSB7Ci0JCQlmaW5hbCBCb29sZWFuIGRpcmVjdGlvbiA9IG5ldyBCb29sZWFuKHRvZ2dsZSk7Ci0JCQkvLyB0b2dnbGUgY29udHJvbHMgd2hldGhlciBtb3ZlcyBmcm9tIHN0YXJ0IHRvIGVuZCwgb3IgZW5kIHRvIHN0YXJ0Ci0JCQkvLyBvZiBkb2N1bWVudC4KLQkJCXRvZ2dsZSA9ICF0b2dnbGU7Ci0JCQlUaHJlYWRHcm91cCB0aHJlYWRHcm91cCA9IG5ldyBUaHJlYWRHcm91cCgidW5pdCB0ZXN0cyIpOwotCQkJVGhyZWFkIHRocmVhZCA9IG5ldyBUaHJlYWQodGhyZWFkR3JvdXAsIG5ldyBSdW5uYWJsZSgpIHsKLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCWxpbmtSdW5uZXIoZGlyZWN0aW9uLCBmRG9jdW1lbnQpOwotCQkJCX0KLQkJCX0sICgic3NlIHVuaXQgdGVzdCB0aHJlYWQgIiArIGkpKTsKLQkJCS8vIEkgdXNlZCBNSU5fUFJJT1JJVFkgc2luY2UgdGhhdCBtYWtlcyBpdCBlYXNpZXIgdG8gInNlZSIgaW4KLQkJCS8vIGRlYnVnZ2VyIGxpc3Qgb2YgdGhyZWFkcwotCQkJdGhyZWFkLnNldFByaW9yaXR5KFRocmVhZC5NSU5fUFJJT1JJVFkpOwotCQkJdGhyZWFkc1tpXSA9IHRocmVhZDsKLQkJfQotCQlmb3IgKGludCBpID0gMDsgaSA8IHRocmVhZHMubGVuZ3RoOyBpKyspIHsKLQkJCXRocmVhZHNbaV0uc3RhcnQoKTsKLQkJfQotCQkvLyBub3cgdGhhdCAicmVhZGVycyIgaGF2ZSBzdGFydGVkLCB3ZSdsbCBzdGFydCBhIG1vZGlmaWNhdGlvbiB0aHJlYWQKLQkJLy8gdG9vCi0JCVRocmVhZCBtb2RpZnlpbmdUaHJlYWQgPSBuZXcgVGhyZWFkKG5ldyBSdW5uYWJsZSgpIHsKLQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQltb2RpZml5RG9jdW1lbnQoZkRvY3VtZW50KTsKLQkJCX0KLQkJfSwgKCJzc2UgdW5pdCB0ZXN0IG1vZGlmaWNhdGlvbiB0aHJlYWQgIikpOwotCQkvLyBJIHVzZWQgTUFYX1BSSU9SSVRZIHRvIGJlIHN1cmUgbG90cyBvZiBtb2RpZmljYXRpb25zIHRha2UgcGxhY2UKLQkJbW9kaWZ5aW5nVGhyZWFkLnNldFByaW9yaXR5KFRocmVhZC5NSU5fUFJJT1JJVFkpOwotCQltb2RpZnlpbmdUaHJlYWQuc3RhcnQoKTsKLQkJdHJ5IHsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgdGhyZWFkcy5sZW5ndGg7IGkrKykgewotCQkJCXRocmVhZHNbaV0uam9pbigpOwotCQkJfQotCQkJbW9kaWZ5aW5nVGhyZWFkLmpvaW4oKTsKLQkJfQotCQljYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCX0KLQotCXZvaWQgbW9kaWZpeURvY3VtZW50KElTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQpIHsKLQkJUmFuZG9tIHJhbmRvbSA9IG5ldyBSYW5kb20oKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBOX0NIQU5HRVMgKyAxOyBpKyspIHsKLQkJCWludCByYW5kb21PZmZzZXQgPSByYW5kb20ubmV4dEludChkb2N1bWVudC5nZXRMZW5ndGgoKSk7Ci0JCQkvLyAxMDAganVzdCBzZWVtcyBsaWtlIGEgZ29vZCBtYXhpbXVtIGxlbmd0aCB0byByZXBsYWNlCi0JCQkvLyAoY291bGQgcGxheSB3aXRoIGluIGZ1dHVyZSkuCi0JCQlpbnQgcmFuZG9tTGVuZ3RoID0gcmFuZG9tLm5leHRJbnQoMTAwKTsKLQkJCS8vIGlmIHdlICJhY2NpZGVudGx5IiBnZXQgbW9yZSB0aGFuIHRoZSBsZW5ndGgsIGp1c3Qgc2tpcGl0Ci0JCQlpZiAocmFuZG9tT2Zmc2V0ICsgcmFuZG9tTGVuZ3RoIDwgZG9jdW1lbnQuZ2V0TGVuZ3RoKCkpIHsKLQkJCQlkb2N1bWVudC5yZXBsYWNlVGV4dCh0aGlzLCByYW5kb21PZmZzZXQsIHJhbmRvbUxlbmd0aCwgInRlc3Rpbmd0ZXh0Iik7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TlRocmVhZHMoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlmb3IgKGludCBpID0gMTsgaSA8IE1BWF9USFJFQURTOyBpKyspIHsKLQkJCWludCBuVGhyZWFkcyA9IGk7Ci0JCQlpZiAoREVCVUdfVEVTVF9ERVRBSUwpIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIiA+Pj4+LS0tLSBOIFRocmVhZHM6ICIgKyBpKTsKLQkJCX0KLQkJCWZsb2F0IHdDdW1tID0gMDsKLQkJCWZvciAoaW50IGogPSAwOyBqIDwgblRyaWFsczsgaisrKSB7Ci0JCQkJd0N1bW0gPSB3Q3VtbSArIGRvdGVzdERvY3VtZW50V2Fsa2luZ1dpdGhUaHJlYWRMb2NhbChuVGhyZWFkcyk7Ci0JCQl9Ci0JCX0KLQkJLy8gaWYgZ2V0cyB0byBoZXJlICh3aXRoIG5vIGV4Y2VwdGlvbnMpIGFsbCBpcyBvay4KLQkJYXNzZXJ0VHJ1ZSgwID09IDApOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL3RocmVhZGluZy9UaHJlYWRMb2NhbEV4YW1wbGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL3RocmVhZGluZy9UaHJlYWRMb2NhbEV4YW1wbGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQ3ZDAxZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy90aHJlYWRpbmcvVGhyZWFkTG9jYWxFeGFtcGxlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy50aHJlYWRpbmc7Ci0KLWltcG9ydCBqYXZhLnV0aWwuUmFuZG9tOwotCi0vKioKLSAqIFNlZSBodHRwOi8vamF2YS5zdW4uY29tL2RldmVsb3Blci9KRENUZWNoVGlwcy8yMDAzL3R0MTIwOC5odG1sIzIgZm9yCi0gKiBpbmZvcm1hdGl2ZSBhcnRpY2xlLgotICovCi1wdWJsaWMgY2xhc3MgVGhyZWFkTG9jYWxFeGFtcGxlIHsKLQotCS8vIENyZWF0ZSB0aHJlYWQgbG9jYWwgY2xhc3MKLQkvLyBJbml0aWFsIHZhbHVlIGlzIGEgcmFuZG9tIG51bWJlciBmcm9tIDAtOTk5Ci0JcHJpdmF0ZSBzdGF0aWMgY2xhc3MgTXlUaHJlYWRMb2NhbCBleHRlbmRzIFRocmVhZExvY2FsIHsKLQkJcHJpdmF0ZSBSYW5kb20gaW5uZXJSYW5kb20gPSBuZXcgUmFuZG9tKCk7Ci0KLQkJcHJvdGVjdGVkIE9iamVjdCBpbml0aWFsVmFsdWUoKSB7Ci0JCQlyZXR1cm4gbmV3IEludGVnZXIoaW5uZXJSYW5kb20ubmV4dEludCgxMDAwKSk7Ci0JCX0KLQl9Ci0KLQkvLyBDcmVhdGUgY2xhc3MgdmFyaWFibGUKLQlzdGF0aWMgdm9sYXRpbGUgaW50IGNvdW50ZXIgPSAwOwotCi0JLy8gRGVmaW5lL2NyZWF0ZSB0aHJlYWQgbG9jYWwgdmFyaWFibGUKLQlzdGF0aWMgVGhyZWFkTG9jYWwgdGhyZWFkTG9jYWwgPSBuZXcgTXlUaHJlYWRMb2NhbCgpOwotCi0JLy8gRm9yIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbgotCS8vIHN0YXRpYyBSYW5kb20gcmFuZG9tID0gbmV3IFJhbmRvbSgpOwotCi0JLy8gRGlzcGxheXMgdGhyZWFkIGxvY2FsIHZhcmlhYmxlLCBjb3VudGVyLAotCS8vIGFuZCB0aHJlYWQgbmFtZQotCXN0YXRpYyB2b2lkIGRpc3BsYXlWYWx1ZXMoKSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbih0aHJlYWRMb2NhbC5nZXQoKSArICJcdCIgKyBjb3VudGVyICsgIlx0IiArIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0TmFtZSgpKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB7Ci0KLQkJLy8gRWFjaCB0aHJlYWQgaW5jcmVtZW50cyBjb3VudGVyCi0JCS8vIERpc3BsYXlzIHZhcmlhYmxlIGluZm8KLQkJLy8gQW5kIHNsZWVwcyBmb3IgdGhlIHJhbmRvbSBhbW91bnQgb2YgdGltZQotCQkvLyBCZWZvcmUgZGlzcGxheWluZyBpbmZvIGFnYWluCi0JCVJ1bm5hYmxlIHJ1bm5lciA9IG5ldyBSdW5uYWJsZSgpIHsKLQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQlzeW5jaHJvbml6ZWQgKFRocmVhZExvY2FsRXhhbXBsZS5jbGFzcykgewotCQkJCQljb3VudGVyKys7Ci0JCQkJfQotCQkJCWRpc3BsYXlWYWx1ZXMoKTsKLQkJCQl0cnkgewotCQkJCQlUaHJlYWQuc2xlZXAoKChJbnRlZ2VyKSB0aHJlYWRMb2NhbC5nZXQoKSkuaW50VmFsdWUoKSk7Ci0JCQkJCWRpc3BsYXlWYWx1ZXMoKTsKLQkJCQl9Ci0JCQkJY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKLQkJCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCQl9Ci0JCQl9Ci0JCX07Ci0KLQkJLy8gQW5vdGhlciBpbnN0YW5jZSBvZiBjbGFzcyBjcmVhdGVkCi0JCS8vIGFuZCB2YWx1ZXMgZGlzcGxheWVkCi0JCWRpc3BsYXlWYWx1ZXMoKTsKLQotCQkvLyBIZXJlJ3Mgd2hlcmUgdGhlIG90aGVyIHRocmVhZHMKLQkJLy8gYXJlIGFjdHVhbGx5IGNyZWF0ZWQKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCA1OyBpKyspIHsKLQkJCVRocmVhZCB0ID0gbmV3IFRocmVhZChydW5uZXIpOwotCQkJdC5zdGFydCgpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogIAotCSAqLwotCXB1YmxpYyBUaHJlYWRMb2NhbEV4YW1wbGUoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL3RocmVhZGluZy9UaHJlYWRMb2NhbEluc3RhbmNlRXhhbXBsZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvdGhyZWFkaW5nL1RocmVhZExvY2FsSW5zdGFuY2VFeGFtcGxlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkMDhmNTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvdGhyZWFkaW5nL1RocmVhZExvY2FsSW5zdGFuY2VFeGFtcGxlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy50aHJlYWRpbmc7Ci0KLWltcG9ydCBqYXZhLnV0aWwuUmFuZG9tOwotCi0vKioKLSAqIFNlZSBodHRwOi8vamF2YS5zdW4uY29tL2RldmVsb3Blci9KRENUZWNoVGlwcy8yMDAzL3R0MTIwOC5odG1sIzIgZm9yCi0gKiBpbmZvcm1hdGl2ZSBhcnRpY2xlLgotICovCi1wdWJsaWMgY2xhc3MgVGhyZWFkTG9jYWxJbnN0YW5jZUV4YW1wbGUgewotCi0JLy8gQ3JlYXRlIHRocmVhZCBsb2NhbCBjbGFzcwotCS8vIEluaXRpYWwgdmFsdWUgaXMgYSByYW5kb20gbnVtYmVyIGZyb20gMC05OTkKLQlwcml2YXRlIGNsYXNzIE15VGhyZWFkTG9jYWwgZXh0ZW5kcyBUaHJlYWRMb2NhbCB7Ci0JCXByaXZhdGUgUmFuZG9tIGlubmVyUmFuZG9tID0gbmV3IFJhbmRvbSgpOwotCi0JCXByb3RlY3RlZCBPYmplY3QgaW5pdGlhbFZhbHVlKCkgewotCQkJcmV0dXJuIG5ldyBJbnRlZ2VyKGlubmVyUmFuZG9tLm5leHRJbnQoMTAwMCkpOwotCQl9Ci0JfQotCi0JLy8gQ3JlYXRlIGNsYXNzIHZhcmlhYmxlCi0Jc3RhdGljIHZvbGF0aWxlIGludCBjb3VudGVyID0gMDsKLQotCS8vIERlZmluZS9jcmVhdGUgdGhyZWFkIGxvY2FsIHZhcmlhYmxlCi0JVGhyZWFkTG9jYWwgdGhyZWFkTG9jYWwgPSBuZXcgTXlUaHJlYWRMb2NhbCgpOwotCi0JLy8gRm9yIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbgotCS8vIHN0YXRpYyBSYW5kb20gcmFuZG9tID0gbmV3IFJhbmRvbSgpOwotCi0JLy8gRGlzcGxheXMgdGhyZWFkIGxvY2FsIHZhcmlhYmxlLCBjb3VudGVyLAotCS8vIGFuZCB0aHJlYWQgbmFtZQotCXZvaWQgZGlzcGxheVZhbHVlcygpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKHRocmVhZExvY2FsLmdldCgpICsgIlx0IiArIGNvdW50ZXIgKyAiXHQiICsgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXROYW1lKCkpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKLQkJbmV3IFRocmVhZExvY2FsSW5zdGFuY2VFeGFtcGxlKCkuc3RhcnRSdW4oKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgc3RhcnRSdW4oKSB7Ci0KLQkJLy8gRWFjaCB0aHJlYWQgaW5jcmVtZW50cyBjb3VudGVyCi0JCS8vIERpc3BsYXlzIHZhcmlhYmxlIGluZm8KLQkJLy8gQW5kIHNsZWVwcyBmb3IgdGhlIHJhbmRvbSBhbW91bnQgb2YgdGltZQotCQkvLyBCZWZvcmUgZGlzcGxheWluZyBpbmZvIGFnYWluCi0JCVJ1bm5hYmxlIHJ1bm5lciA9IG5ldyBSdW5uYWJsZSgpIHsKLQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQlzeW5jaHJvbml6ZWQgKHRoaXMpIHsKLQkJCQkJY291bnRlcisrOwotCQkJCX0KLQkJCQlkaXNwbGF5VmFsdWVzKCk7Ci0JCQkJdHJ5IHsKLQkJCQkJVGhyZWFkLnNsZWVwKCgoSW50ZWdlcikgdGhyZWFkTG9jYWwuZ2V0KCkpLmludFZhbHVlKCkpOwotCQkJCQlkaXNwbGF5VmFsdWVzKCk7Ci0JCQkJfQotCQkJCWNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7Ci0JCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQkJfQotCQkJfQotCQl9OwotCi0JCS8vIEFub3RoZXIgaW5zdGFuY2Ugb2YgY2xhc3MgY3JlYXRlZAotCQkvLyBhbmQgdmFsdWVzIGRpc3BsYXllZAotCQlkaXNwbGF5VmFsdWVzKCk7Ci0KLQkJLy8gSGVyZSdzIHdoZXJlIHRoZSBvdGhlciB0aHJlYWRzCi0JCS8vIGFyZSBhY3R1YWxseSBjcmVhdGVkCi0JCWZvciAoaW50IGkgPSAwOyBpIDwgNTsgaSsrKSB7Ci0JCQlUaHJlYWQgdCA9IG5ldyBUaHJlYWQocnVubmVyKTsKLQkJCXQuc3RhcnQoKTsKLQkJfQotCX0KLQotCS8qKgotCSAqICAKLQkgKi8KLQlwdWJsaWMgVGhyZWFkTG9jYWxJbnN0YW5jZUV4YW1wbGUoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy90ZXN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy90ZXN0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWJhM2U1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvdGVzdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0Ci0gICAgbmFtZT0idGVzdHN1aXRlIgotICAgIGRlZmF1bHQ9InJ1biIKLSAgICBiYXNlZGlyPSIuIj4KLQotICAgIDwhLS0gCi0gICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAKLSAgICAgICAgIFRoZXJlIHNob3VsZCBiZSBubyBuZWVkIHRvIGNoYW5nZSB3aGF0J3MgYWJvdmUuCi0gICAgICAgICAoaWYgdGhlcmUgaXMsIGxldCB1cyBrbm93IGlmIHRoZSBzY3JpcHQgY2FuIGJlIGltcHJvdmVkLikKLSAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IAotICAgIC0tPgotICAgIAotICAgIDwhLS0gCi0gICAgICAgICBFdmVyeSBzdWl0ZSBuZWVkcyB0byBzcGVjaWZ5IHRocmVlIHRoaW5nOiAKLSAgICAgICAgICAgICBwbHVnaW4tbmFtZSwgCi0gICAgICAgICAgICAgY2xhc3NuYW1lIC0gdGhhdCBwcm92aWRlcyB0aGUgc3VpdGUgdG8gdGVzdCwgYW5kIAotICAgICAgICAgICAgIHRlc3RUeXBlIC0gZWl0aGVyIGNvcmUtdGVzdCwgb3IgdWktdGVzdC4gCi0gICAgICAgICBUaGVyZSBpcyBhbiBvcHRpb25hbCBleHRyYVZNYXJncyBwcm9wZXJ0eSB0aGF0IHNvbWUgdGVzdHMgbmVlZCB0byB1c2UgaW4gb3JkZXIgdG8gc3BlY2lmeSAgCi0gICAgICAgICBleHRyYSwgbm9uLXN0YW5kYXJkIHByb3BlcnRpZXMgdG8gdGhlIFZNIHdoZW4gaXQgcnVucy4gSWYgbm90IG5lZWQsIG5vIG5lZWQgdG8gc3BlY2lmeSBpdC4gCi0gICAgLS0+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9InBsdWdpbi1uYW1lIgotICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJjbGFzc25hbWUiCi0gICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMuU1NFTW9kZWxUZXN0U3VpdGUiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9InRlc3RUeXBlIgotICAgICAgICB2YWx1ZT0iY29yZS10ZXN0IiAvPgotICAgIAotICAgIDwhLS0gc29tZSB0ZXN0IHN1aXRlcyBuZWVkIHRvIGFkZCBzcGVjaWFsIHZtIGFyZ3VtZW50cyB3aGVuIHRoZXkgcnVuLiBUaGlzIGlzIGp1c3QgYW4gZXhhbXBsZS4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0iZXh0cmFWTWFyZ3MiCi0gICAgICAgIHZhbHVlPSItRGpzZlJ1bnRpbWVKYXJzRGlyZWN0b3J5VjEuMT0ke3Rlc3REaXJ9LyR7anNmMS4xRGlyfSIgLz4KLSAgICA8ZWNobwotICAgICAgICBtZXNzYWdlPSJleHRyYVZNYXJncyAke2V4dHJhVk1hcmdzfSIgLz4KLSAgICAtLT4KLQotICAgIDwhLS0gCi0gICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAKLSAgICAgICAgIFRoZXJlIHNob3VsZCBiZSBubyBuZWVkIHRvIGNoYW5nZSB3aGF0J3MgYmVsb3cuCi0gICAgICAgICAoaWYgdGhlcmUgaXMsIGxldCB1cyBrbm93IGlmIHRoZSBzY3JpcHQgY2FuIGJlIGltcHJvdmVkLikKLSAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IAotICAgIC0tPgotICAgIAotICAgIDwhLS0gCi0gICAgICAgICBUaGVyZSBhcmUgc29tZSBwcm9wZXJ0aWVzIHRoYXQgbXVzdCBiZSBwcm92aWRlZCBieSBjYWxsZXIuIAotICAgIC0tPgotICAgIDxmYWlsCi0gICAgICAgIG1lc3NhZ2U9IkVycm9yOiBtaXNzaW5nIHByb3BlcnR5LiBlY2xpcHNlLWhvbWUgbXVzdCBiZSBwcm92aWRlZCIKLSAgICAgICAgdW5sZXNzPSJlY2xpcHNlLWhvbWUiIC8+Ci0gICAgPGZhaWwKLSAgICAgICAgbWVzc2FnZT0iRXJyb3I6IG1pc3NpbmcgcHJvcGVydHkuIGJ1aWxkRGlyZWN0b3J5IG11c3QgYmUgcHJvdmlkZWQiCi0gICAgICAgIHVubGVzcz0iYnVpbGREaXJlY3RvcnkiIC8+Ci0gICAgPGZhaWwKLSAgICAgICAgbWVzc2FnZT0iRXJyb3I6IG1pc3NpbmcgcHJvcGVydHkuIGJ1aWxkTGFiZWwgbXVzdCBiZSBwcm92aWRlZCIKLSAgICAgICAgdW5sZXNzPSJidWlsZExhYmVsIiAvPgotICAgIDxlY2hvCi0gICAgICAgIG1lc3NhZ2U9ImJhc2VkaXI6ICR7YmFzZWRpcn0iIC8+Ci0gICAgPGVjaG8KLSAgICAgICAgbWVzc2FnZT0iZWNsaXBzZS1ob21lOiAke2VjbGlwc2UtaG9tZX0iIC8+Ci0gICAgPGVjaG8KLSAgICAgICAgbWVzc2FnZT0iYnVpbGREaXJlY3Rvcnk6ICR7YnVpbGREaXJlY3Rvcnl9IiAvPgotICAgIDxlY2hvCi0gICAgICAgIG1lc3NhZ2U9InBsdWdpbi1uYW1lOiAke3BsdWdpbi1uYW1lfSIgLz4KLSAgICA8ZWNobwotICAgICAgICBtZXNzYWdlPSJjbGFzc25hbWU6ICR7Y2xhc3NuYW1lfSIgLz4KLSAgICA8ZWNobwotICAgICAgICBtZXNzYWdlPSJ0ZXN0VHlwZSAke3Rlc3RUeXBlfSIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0ibGlicmFyeS1maWxlIgotICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2UudGVzdF8zLjEuMC9saWJyYXJ5LnhtbCIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0id29ya3NwYWNlIgotICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L2p1bml0d29ya3NwYWNlcy8ke3BsdWdpbi1uYW1lfSIgLz4KLQotICAgICAgPCEtLSAKLSAgICBUaGlzIGluaXQgdGFyZ2V0IGhvbGRzIGFsbCBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBmb3IKLSAgICAgIGFsbCB0ZXN0cyB0aGF0IGFyZSB0byBiZSBydW4uIEluaXRpYWxpemF0aW9uIGZvciBpbmRpdmlkdWFsIHRlc3RzCi0gICAgICBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gSGVyZSBpdCdzIGEgZ29vZCBpZGVhIAotICAgIHRvIGRlbGV0ZSB0aGluZ3MgdGhhdCBtaWdodCBoYXZlIGJlZW4gY3JlYXRlZCBpZiB0aGUgdGVzdCBoYXMgYWxyZWFkeSBiZWVuIAotICAgIHJhbiwganVzdCBpbiBjYXNlIHRoZSB0ZXN0IGlzIGJlaW5nIHJlLXJhbi4gCi0gICAgLS0+Ci0gICAgPHRhcmdldAotICAgICAgICBuYW1lPSJpbml0Ij4KLSAgICAgICAgPHRzdGFtcCAvPgotICAgICAgICA8ZGVsZXRlPgotICAgICAgICAgICAgPGZpbGVzZXQKLSAgICAgICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSIKLSAgICAgICAgICAgICAgICBpbmNsdWRlcz0iJHtwbHVnaW4tbmFtZX0uKnhtbCIgLz4KLSAgICAgICAgPC9kZWxldGU+Ci0gICAgICAgIAotICAgICAgICAgICAgPCEtLSAKLSAgICAgICAgIG1ha2UgdGhlIHdvcmtzcGFjZSBkaXJlY3RvcnksIGluIGNhc2UgcGF0aCBkb2Vzbid0IGV4aXN0IHlldAotICAgICAgICAgYnV0IGRlbGV0ZSB0byBtYWtlIHN1cmUgZnJlc2ggY29udGVudHMsIGlmIGl0IGRvZXMgZXhpc3QKLSAgICAgICAgLS0+Ci0gICAgICAgIDxkZWxldGUKLSAgICAgICAgICAgIGRpcj0iJHt3b3Jrc3BhY2V9IgotICAgICAgICAgICAgcXVpZXQ9InRydWUiIC8+Ci0gICAgICAgIDxta2RpcgotICAgICAgICAgICAgZGlyPSIke3dvcmtzcGFjZX0iIC8+Ci0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIAotICAgICAgVGhpcyBzdWl0ZSB0YXJnZXQgZGVmaW5lcyB0aGUgdGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4KLSAgICAtLT4KLSAgICA8dGFyZ2V0Ci0gICAgICAgIG5hbWU9InN1aXRlIj4KLSAgICAgICAgPGFudAotICAgICAgICAgICAgdGFyZ2V0PSIke3Rlc3RUeXBlfSIKLSAgICAgICAgICAgIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLSAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImRhdGEtZGlyIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3dvcmtzcGFjZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJwbHVnaW4tbmFtZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJjbGFzc25hbWUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7Y2xhc3NuYW1lfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9InBsdWdpbi1wYXRoIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy8ke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgPC9hbnQ+Ci0gICAgICAgIDxjb3B5Ci0gICAgICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiCi0gICAgICAgICAgICBmaWxlPSIke3dvcmtzcGFjZX0vLm1ldGFkYXRhLy5sb2ciCi0gICAgICAgICAgICB0b2ZpbGU9IiR7YnVpbGREaXJlY3Rvcnl9LyR7YnVpbGRMYWJlbH0vdGVzdFJlc3VsdHMvY29uc29sZWxvZ3MvJHtwbHVnaW4tbmFtZX0uY29uc29sZWxvZy50eHQiIC8+Ci0gICAgPC90YXJnZXQ+Ci0KLSAgICAgPCEtLSAKLSAgICAgVGhpcyBjbGVhbiB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyCi0gICAgIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gCi0gICAgIGRlbGV0ZSB0ZW1wb3JhcnkgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZCwgaWYgcmVxdWlyZWQuIEJ1dCwgCi0gICAgIGl0J3MgdXN1YWxseSBiZXN0IHRvIGxlYXZlIGl0IGFsbCwgaW4gY2FzZSB5b3UnZCBsaWtlIHRvIGluc3BlY3QgaXQgCi0gICAgIGFmdGVyIGEgZmFpbGVkIHJ1bi4gSXQgd2lsbCBiZSBkZWxldGVkIGV2ZW50dWFsbHkgYnkgdGhlIG5leHQgY2xlYW4gYnVpbGQuIAotICAgIC0tPgotICAgIDx0YXJnZXQKLSAgICAgICAgbmFtZT0iY2xlYW51cCI+Ci0KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gCi0gICAgICAgVGhpcyBydW4gdGFyZ2V0IGlzIHRoZSBtYXN0ZXIgdGFyZ2V0IHRoYXQgZ2V0J3MgYWxsIHRoZSB3b3JrIGRvbmUuIAotICAgICAgIE1vc3QgYWN0aXZpdHkgaXMgYWN0dWFsbHkgZG9uZSBpbiB0aGUgJ2RlcGVuZHMnIHRhc2tzLCBidXQgYW55IAotICAgICAgIGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiBhZnRlciBhbGwgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4gCi0gICAgICAgc2hvdWxkIGdvIGhlcmUsIHN1Y2ggYXMgY29weWluZyB0aGUgcmVzdWx0cyB0byBhIGNvbW1vbiAnc2F2ZScgCi0gICAgICAgZGlyZWN0b3J5LiAKLSAgICAtLT4KLSAgICA8dGFyZ2V0Ci0gICAgICAgIG5hbWU9InJ1biIKLSAgICAgICAgZGVwZW5kcz0iaW5pdCxzdWl0ZSxjbGVhbnVwIj4KLSAgICAgICAgPGFudAotICAgICAgICAgICAgdGFyZ2V0PSJjb2xsZWN0IgotICAgICAgICAgICAgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iaW5jbHVkZXMiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Lip4bWwiIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJvdXRwdXQtZmlsZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0ueG1sIiAvPgotICAgICAgICA8L2FudD4KLSAgICA8L3RhcmdldD4KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlNmUyYWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0iamZhY2UudGV4dC50ZXN0cyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InRleHQudGVzdHMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS40Ii8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIj4KLQkJPGFjY2Vzc3J1bGVzPgotCQkJPGFjY2Vzc3J1bGUga2luZD0iYWNjZXNzaWJsZSIgcGF0dGVybj0ib3JnL2VjbGlwc2Uvd3N0LyoqIi8+Ci0JCTwvYWNjZXNzcnVsZXM+Ci0JPC9jbGFzc3BhdGhlbnRyeT4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy8uY3ZzaWdub3JlIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYWRmYzk3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotYmluCi1idWlsZC54bWwKLXRlbXAuZm9sZGVyCi1zc2VlZGl0b3J0ZXN0cy5qYXIKLWphdmFDb21waWxlci5zc2VlZGl0b3J0ZXN0cy5qYXIuYXJncwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiMDcyYjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHM8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz48L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZhNWM5MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMDQgMDM6MzY6MzIgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1lbmNvZGluZy88cHJvamVjdD49SVNPLTg4NTktMQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZWM1NzUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI01vbiBBcHIgMTcgMDE6NDg6MzkgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1saW5lLnNlcGFyYXRvcj1cclxuCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZjdiYWM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotI1NhdCBBdWcgMTkgMTY6MzE6NDMgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmNsZWFuT3V0cHV0Rm9sZGVyPWNsZWFuCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmR1cGxpY2F0ZVJlc291cmNlVGFzaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmludmFsaWRDbGFzc3BhdGg9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLnJlc291cmNlQ29weUV4Y2x1c2lvbkZpbHRlcj0qLmxhdW5jaAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2lyY3VsYXJDbGFzc3BhdGg9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aC5leGNsdXNpb25QYXR0ZXJucz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGgubXVsdGlwbGVPdXRwdXRMb2NhdGlvbnM9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS40Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kb2MuY29tbWVudC5zdXBwb3J0PWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLm1heFByb2JsZW1QZXJVbml0PTEwMAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc0RlcHJlY2F0ZWRSZWY9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NOb3RWaXNpYmxlUmVmPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzVmlzaWJpbGl0eT1wcml2YXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzT3ZlcnJpZGluZz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNWaXNpYmlsaXR5PXB1YmxpYwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc092ZXJyaWRpbmc9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXByaXZhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5zYWZlVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMYWJlbD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wYXRpYmxlSkRLTGV2ZWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5pbmNvbXBsZXRlQ2xhc3NwYXRoPWVycm9yCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwMWM3YWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0jTW9uIEFwciAxNyAwMTo0ODozOSBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWludGVybmFsLmRlZmF1bHQuY29tcGxpYW5jZT1kZWZhdWx0Ci1vcmcuZWNsaXBzZS5qZHQudWkudGV4dC5jdXN0b21fY29kZV90ZW1wbGF0ZXM9PD94bWwgdmVyc2lvblw9IjEuMCIgZW5jb2RpbmdcPSJVVEYtOCI/PlxyXG48dGVtcGxhdGVzLz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1OTM2OGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjMyIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcuZW5hYmxlLnByb2plY3QucmVmYWN0b3JpbmcuaGlzdG9yeT1mYWxzZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYzUyMmJiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLSNNb24gQXByIDE3IDAyOjAxOjMzIEVEVCAyMDA2Ci1jb21waWxlcnMuaW5jb21wYXRpYmxlLWVudmlyb25tZW50PTAKLWNvbXBpbGVycy5wLmJ1aWxkPTAKLWNvbXBpbGVycy5wLmRlcHJlY2F0ZWQ9MQotY29tcGlsZXJzLnAuaWxsZWdhbC1hdHQtdmFsdWU9MAotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLm5vdC1leHRlcm5hbGl6ZWQtYXR0PTAKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MAotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTAKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnAudW51c2VkLWVsZW1lbnQtb3ItYXR0cmlidXRlPTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2ZWY2YTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZS4wCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzOyBzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMzAwLnF1YWxpZmllcgotQnVuZGxlLUNsYXNzUGF0aDogc3NlZWRpdG9ydGVzdHMuamFyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLlNTRVRlc3RzUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvci4wCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLAotIG9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMudmlld2VyCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UudWksCi0gb3JnLmVjbGlwc2UudWkuaWRlLAotIG9yZy5lY2xpcHNlLndzdC5zc2UudWksCi0gb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLAotIG9yZy5qdW5pdDtidW5kbGUtdmVyc2lvbj0iWzMuOC4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMsCi0gb3JnLmVjbGlwc2UudWkud29ya2JlbmNoLnRleHRlZGl0b3IsCi0gb3JnLmVjbGlwc2UudWkuZWRpdG9ycywKLSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLm1vZHVsZWNvcmUsCi0gY29tLmlibS5pY3UKLUJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5Ci1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvYWJvdXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE5OWRmMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDEzNmNhYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNCwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1zb3VyY2Uuc3NlZWRpdG9ydGVzdHMuamFyID0gc3JjLyxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgamZhY2UudGV4dC50ZXN0cy8sXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQudGVzdHMKLW91dHB1dC5zc2VlZGl0b3J0ZXN0cy5qYXIgPSBiaW4vCi1iaW4uaW5jbHVkZXMgPSBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIHNzZWVkaXRvcnRlc3RzLmphcixcCi0gICAgICAgICAgICAgICB0ZXN0LnhtbCxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcwotc3JjLmluY2x1ZGVzID0gc3JjLyxcCi0gICAgICAgICAgICAgICBqZmFjZS50ZXh0LnRlc3RzLwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9pY29ucy9zb3VyY2VFZGl0b3IuZ2lmIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9pY29ucy9zb3VyY2VFZGl0b3IuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NWViZGI4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvaWNvbnMvc291cmNlRWRpdG9yLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL0Fic3RyYWN0UGFpck1hdGNoZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9BYnN0cmFjdFBhaXJNYXRjaGVyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZDZlMzk0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL0Fic3RyYWN0UGFpck1hdGNoZXJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIENocmlzdGlhbiBQbGVzbmVyIEhhbnNlbiAocGxlc25lckBxdWVudGEub3JnKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQudGVzdHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5CYWRMb2NhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkRvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50UGFydGl0aW9uZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JUmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVRleHRTdG9yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJ1bGVzLkZhc3RQYXJ0aXRpb25lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJ1bGVzLklQcmVkaWNhdGVSdWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQucnVsZXMuUnVsZUJhc2VkUGFydGl0aW9uU2Nhbm5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJ1bGVzLlNpbmdsZUxpbmVSdWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQucnVsZXMuVG9rZW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5zb3VyY2UuSUNoYXJhY3RlclBhaXJNYXRjaGVyOwotCi0vKioKLSAqIEdlbmVyaWMgdGVzdCBvZiBzaW1wbGUgY2hhcmFjdGVyIHBhaXIgbWF0Y2hlcnMKLSAqCi0gKiBAc2luY2UgMy4zCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFBhaXJNYXRjaGVyVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQotCS8qKgotCSAqIENvbnN0cnVjdHMgYSBuZXcgY2hhcmFjdGVyIHBhaXIgbWF0Y2hlci4KLQkgKiAKLQkgKiBAcGFyYW0gY2hhcnMgdGhlIGNoYXJhY3RlcnMgdG8gbWF0Y2gKLQkgKiBAcmV0dXJuIHRoZSBjaGFyYWN0ZXIgcGFpciBtYXRjaGVyCi0JICovCi0JcHJvdGVjdGVkIGFic3RyYWN0IElDaGFyYWN0ZXJQYWlyTWF0Y2hlciBjcmVhdGVNYXRjaGVyKGZpbmFsIFN0cmluZyBjaGFycyk7Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBwYXJ0aXRpb25pbmcgdHJlYXRlZCBieSB0aGUgbWF0Y2hlci4KLQkgKiAKLQkgKiBAcmV0dXJuIHRoZSBwYXJ0aXRpb24KLQkgKi8KLQlwcm90ZWN0ZWQgYWJzdHJhY3QgU3RyaW5nIGdldERvY3VtZW50UGFydGl0aW9uaW5nKCk7Ci0KLQlwdWJsaWMgQWJzdHJhY3RQYWlyTWF0Y2hlclRlc3QoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIEFic3RyYWN0UGFpck1hdGNoZXJUZXN0KCkgewotCQlzdXBlcigpOwotCX0KLQotCS8qIC0tLSBUIGUgcyB0IHMgLS0tICovCi0KLQkvKiogVGVzdHMgdGhhdCB0aGUgdGVzdCBjYXNlIHJlYWRlciB3b3JrcyAqLwotCXB1YmxpYyB2b2lkIHRlc3RUZXN0Q2FzZVJlYWRlcigpIHsKLQkJcGVyZm9ybVJlYWRlclRlc3QoIiMoICklIiwgMywgIDAsICAiKCApIik7Ci0JCXBlcmZvcm1SZWFkZXJUZXN0KCIlKCApIyIsIDAsICAzLCAgIiggKSIpOwotCQlwZXJmb3JtUmVhZGVyVGVzdCgiKCApJSIsICAzLCAgLTEsICIoICkiKTsKLQkJcGVyZm9ybVJlYWRlclRlc3QoIiMlIiwgICAgMCwgIDAsICAiIik7Ci0JfQotCi0JLyoqCi0JICogVmVyeSBzaW1wbGUgY2hlY2tzLgotCSAqIAotCSAqIEB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0U2ltcGxlTWF0Y2hTYW1lTWF0Y2hlcigpIHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCWZpbmFsIElDaGFyYWN0ZXJQYWlyTWF0Y2hlciBtYXRjaGVyPSBjcmVhdGVNYXRjaGVyKCIoKVtde30iKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICIjKCAgICklIik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiI1sgICBdJSIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgIiN7ICAgfSUiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICIoJSAgICkjIik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiWyUgICBdIyIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgInslICAgfSMiKTsKLQkJbWF0Y2hlci5kaXNwb3NlKCk7Ci0JfQotCi0JLyoqCi0JICogVmVyeSBzaW1wbGUgY2hlY2tzLgotCSAqIAotCSAqIEB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0U2ltcGxlTWF0Y2hEaWZmZXJlbnRNYXRjaGVycygpIHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCXBlcmZvcm1NYXRjaCgiKClbXXt9IiwgIiMoICAgKSUiKTsKLQkJcGVyZm9ybU1hdGNoKCIoKVtde30iLCAiI1sgICBdJSIpOwotCQlwZXJmb3JtTWF0Y2goIigpW117fSIsICIjeyAgIH0lIik7Ci0JCXBlcmZvcm1NYXRjaCgiKClbXXt9IiwgIiglICAgKSMiKTsKLQkJcGVyZm9ybU1hdGNoKCIoKVtde30iLCAiWyUgICBdIyIpOwotCQlwZXJmb3JtTWF0Y2goIigpW117fSIsICJ7JSAgIH0jIik7Ci0JfQotCi0JLyoqCi0JICogQ2xvc2UgbWF0Y2hlcy4KLQkgKiAKLQkgKiBAdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdENsb3NlTWF0Y2hlcygpIHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCWZpbmFsIElDaGFyYWN0ZXJQYWlyTWF0Y2hlciBtYXRjaGVyPSBjcmVhdGVNYXRjaGVyKCIoKVtde30iKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICIjKCklIik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiKCUpIyIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgIiMoKCkpJSIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgIiglKCkpIyIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgIigoJSkjKSIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgIigjKCklKSIpOwotCQltYXRjaGVyLmRpc3Bvc2UoKTsKLQl9Ci0KLQotCS8qKgotCSAqIENoZWNrcyBvZiBzaW1wbGUgc2l0dWF0aW9ucyB3aGVyZSBubyBtYXRjaGVzIHNob3VsZCBiZSBmb3VuZC4KLQkgKiAKLQkgKiBAdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEluY29tcGxldGVNYXRjaCgpIHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCWZpbmFsIElDaGFyYWN0ZXJQYWlyTWF0Y2hlciBtYXRjaGVyPSBjcmVhdGVNYXRjaGVyKCIoKVtde30iKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICIoJSAiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICIlKCAgKSIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgIiggJSApIik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiKCAgJSkiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICIlIik7Ci0JCW1hdGNoZXIuZGlzcG9zZSgpOwotCX0KLQotCS8qKgotCSAqIFRlc3QgdGhhdCBpdCBkb2Vzbid0IG1hdGNoIGFjcm9zcyBkaWZmZXJlbnQgcGFydGl0aW9ucy4KLQkgKiAKLQkgKiBAdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFBhcnRpdGlvbmVkKCkgdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJZmluYWwgSUNoYXJhY3RlclBhaXJNYXRjaGVyIG1hdGNoZXI9IGNyZWF0ZU1hdGNoZXIoIigpW117fSIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgIiglIHxhIGF8ICkjIik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiIyggfGEgYXwgKSUiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICJ8YiAjKCApJSBifCIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgIiggfGIgKSUgYnwiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICIoJSB8YiApIGJ8Iik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAifGEgKCBhfCApJSIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgInxhICglIGF8ICkiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICJ8YyAjKCBjfCApICggfGMgKSUgY3wiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICJ8YyAoJSBjfCApICggfGMgKSMgY3wiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICIoJSB8YSApIGF8IHxiICkgYnwgfGMgKSBjfCApIyIpOwotCQltYXRjaGVyLmRpc3Bvc2UoKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0IHRoYXQgaXQgd29ya3MgcHJvcGVybHkgbmV4dCB0byBwYXJ0aXRpb24gYm91bmRhcmllcy4KLQkgKiAKLQkgKiBAdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFRpZ2h0UGFydGl0aW9uZWQoKSB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlmaW5hbCBJQ2hhcmFjdGVyUGFpck1hdGNoZXIgbWF0Y2hlcj0gY3JlYXRlTWF0Y2hlcigiKClbXXt9Iik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiKHxiKSVifCIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgIiglfGIpYnwiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICJ8YShhfCklIik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAifGEoJWF8KSIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgInxjIyhjfCkofGMpJWN8Iik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAifGMoJWN8KSh8YykjY3wiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICIoJXxhKWF8fGIpYnx8YyljfCkjIik7Ci0JCW1hdGNoZXIuZGlzcG9zZSgpOwotCX0KLQotCS8qKiBUZXN0IHRoYXQgbmVzdGluZyB3b3JrcyBwcm9wZXJseSAqLwotCXB1YmxpYyB2b2lkIHRlc3ROZXN0aW5nKCkgewotCQlmaW5hbCBJQ2hhcmFjdGVyUGFpck1hdGNoZXIgbWF0Y2hlcj0gY3JlYXRlTWF0Y2hlcigiKClbXXt9Iik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiICggIyggKCAoICkgKSAoICkgKSUgKSAiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICIgKCAoJSAoICggKSApICggKSApIyApICIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgIiAoICMoIHsgKCApIH0gWyBdICklICkgIik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiICggKCUgeyAoICkgfSBbIF0gKSMgKSAiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICIgKCAoICN7ICggKSB9JSBbIF0gKSApICIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgIiAoICggeyUgKCApIH0jIFsgXSApICkgIik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiYShiIyhjKGQoZSlmKWcoaClpKSVqKWsiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICJhKGIoJWMoZChlKWYpZyhoKWkpI2opayIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgImEoYiMoY3tkKGUpZn1nW2hdaSklailrIik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiYShiKCVje2QoZSlmfWdbaF1pKSNqKWsiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICJhKGIoYyN7ZChlKWZ9JWdbaF1pKWopayIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgImEoYihjeyVkKGUpZn0jZ1toXWkpailrIik7Ci0JCW1hdGNoZXIuZGlzcG9zZSgpOwotCX0KLQotCS8qKgotCSAqIFRlc3QgYSBmZXcgYm91bmRhcnkgY29uZGl0aW9ucy4KLQkgKiAKLQkgKiAqIEB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Qm91bmRhcmllcygpIHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCWZpbmFsIElDaGFyYWN0ZXJQYWlyTWF0Y2hlciBtYXRjaGVyPSBjcmVhdGVNYXRjaGVyKCIoKVtde30iKTsKLQkJZmluYWwgU3RyaW5nRG9jdW1lbnQgZG9jPSBuZXcgU3RyaW5nRG9jdW1lbnQoImFiY2RlZmdoaWprbCIpOwotCQlhc3NlcnROdWxsKG1hdGNoZXIubWF0Y2gobnVsbCwgMCkpOwotCQlhc3NlcnROdWxsKG1hdGNoZXIubWF0Y2goZG9jLCAtMSkpOwotCQlhc3NlcnROdWxsKG1hdGNoZXIubWF0Y2goZG9jLCBkb2MuZ2V0TGVuZ3RoKCkgKyAxKSk7Ci0JCW1hdGNoZXIuZGlzcG9zZSgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RCdWcxNTY0MjYoKSB7Ci0JCWZpbmFsIElDaGFyYWN0ZXJQYWlyTWF0Y2hlciBtYXRjaGVyPSBjcmVhdGVNYXRjaGVyKCIoKVtde308PiIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgIiAjKCBhIDwgYiApJSAiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICIgKCUgYSA8IGIgKSMgIik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiICMoIGEgPiBiICklICIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgIiAoJSBhID4gYiApIyAiKTsKLQkJbWF0Y2hlci5kaXNwb3NlKCk7Ci0JfQotCi0JLyogLS0tIFUgdCBpIGwgaSB0IGkgZSBzIC0tLSAqLwotCi0JLyoqCi0JICogQ2hlY2tzIHRoYXQgdGhlIHRlc3QgY2FzZSByZWFkZXIgcmVhZHMgdGhlIHRlc3QgY2FzZSBhcyBzcGVjaWZpZWQuCi0JICogCi0JICogQHBhcmFtIHRlc3RTdHJpbmcgdGhlIHN0cmluZyB0byB0ZXN0Ci0JICogQHBhcmFtIGV4cGVjdGVkUG9zIHRoZSBleHBlY3RlZCBwb3NpdGlvbgotCSAqIEBwYXJhbSBleHBlY3RlZE1hdGNoIHRoZSBleHBlY3RlZCBtYXRjaAotCSAqIEBwYXJhbSBleHBlY3RlZFN0cmluZyB0aGUgZXhwZWN0ZWQgc3RyaW5nCi0JICovCi0JcHJpdmF0ZSB2b2lkIHBlcmZvcm1SZWFkZXJUZXN0KFN0cmluZyB0ZXN0U3RyaW5nLCBpbnQgZXhwZWN0ZWRQb3MsIGludCBleHBlY3RlZE1hdGNoLCBTdHJpbmcgZXhwZWN0ZWRTdHJpbmcpIHsKLQkJVGVzdENhc2UgdDA9IGNyZWF0ZVRlc3RDYXNlKHRlc3RTdHJpbmcpOwotCQlhc3NlcnRFcXVhbHMoZXhwZWN0ZWRQb3MsIHQwLmZQb3MpOwotCQlhc3NlcnRFcXVhbHMoZXhwZWN0ZWRNYXRjaCwgdDAuZk1hdGNoKTsKLQkJYXNzZXJ0RXF1YWxzKGV4cGVjdGVkU3RyaW5nLCB0MC5mU3RyaW5nKTsKLQl9Ci0KLQkvKioKLQkgKiBDaGVja3MgdGhhdCB0aGUgZ2l2ZW4gbWF0Y2hlciBtYXRjaGVzIHRoZSBpbnB1dCBhcyBzcGVjaWZpZWQuCi0JICogCi0JICogQHBhcmFtIG1hdGNoZXIgdGhlIG1hdGNoZXIKLQkgKiBAcGFyYW0gdGVzdENhc2UgdGhlIHRlc3Qgc3RyaW5nCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgcGVyZm9ybU1hdGNoKGZpbmFsIElDaGFyYWN0ZXJQYWlyTWF0Y2hlciBtYXRjaGVyLCBmaW5hbCBTdHJpbmcgdGVzdENhc2UpIHsKLQkJZmluYWwgVGVzdENhc2UgdGVzdD0gY3JlYXRlVGVzdENhc2UodGVzdENhc2UpOwotCQltYXRjaGVyLmNsZWFyKCk7Ci0JCWZpbmFsIElSZWdpb24gcmVnaW9uPSBtYXRjaGVyLm1hdGNoKHRlc3QuZ2V0RG9jdW1lbnQoKSwgdGVzdC5mUG9zKTsKLQkJaWYgKHRlc3QuZk1hdGNoID09IC0xKSB7Ci0JCQkvLyBpZiBubyBtYXRjaCBwb2ludCBoYXMgYmVlbiBzcGVjaWZpZWQgdGhlcmUgc2hvdWxkIGJlCi0JCQkvLyBubyBtYXRjaAotCQkJaWYgKHJlZ2lvbiAhPSBudWxsKSBTeXN0ZW0ub3V0LnByaW50bG4ocmVnaW9uLmdldE9mZnNldCgpKTsKLQkJCWFzc2VydE51bGwocmVnaW9uKTsKLQkJfSBlbHNlIHsKLQkJCWFzc2VydE5vdE51bGwocmVnaW9uKTsKLQkJCWZpbmFsIGJvb2xlYW4gaXNGb3J3YXJkPSB0ZXN0LmZQb3MgPiB0ZXN0LmZNYXRjaDsKLQkJCWFzc2VydEVxdWFscyhpc0ZvcndhcmQsIG1hdGNoZXIuZ2V0QW5jaG9yKCkgPT0gSUNoYXJhY3RlclBhaXJNYXRjaGVyLlJJR0hUKTsKLQkJCS8vIElmIHRoZSBtYXRjaCBpcyBmb3J3YXJkLCB0aGUgY3Vyc2VyIGlzIG9uZSBjaGFyYWN0ZXIKLQkJCS8vIGFmdGVyIHRoZSBzdGFydCBvZiB0aGUgbWF0Y2gsIHNvIHdlIG5lZWQgdG8gY291bnQgb25lCi0JCQkvLyBzdGVwIGJhY2t3YXJkcwotCQkJZmluYWwgaW50IG9mZnNldD0gaXNGb3J3YXJkID8gdGVzdC5nZXRPZmZzZXQoKSA6IHRlc3QuZ2V0T2Zmc2V0KCkgLSAxOwotCQkJZmluYWwgaW50IGxlbmd0aD0gaXNGb3J3YXJkID8gdGVzdC5nZXRMZW5ndGgoKSA6IHRlc3QuZ2V0TGVuZ3RoKCkgKyAxOwotCQkJYXNzZXJ0RXF1YWxzKGxlbmd0aCwgcmVnaW9uLmdldExlbmd0aCgpKTsKLQkJCWFzc2VydEVxdWFscyhvZmZzZXQsIHJlZ2lvbi5nZXRPZmZzZXQoKSk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgcGVyZm9ybU1hdGNoKGZpbmFsIFN0cmluZyBkZWxpbXMsIGZpbmFsIFN0cmluZyB0ZXN0Q2FzZSkgewotCQlmaW5hbCBJQ2hhcmFjdGVyUGFpck1hdGNoZXIgbWF0Y2hlcj0gY3JlYXRlTWF0Y2hlcihkZWxpbXMpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgdGVzdENhc2UpOwotCQltYXRjaGVyLmRpc3Bvc2UoKTsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgdGV4dCBjYXNlIGZyb20gYSBzdHJpbmcuIEluIHRoZSBnaXZlbiBzdHJpbmcgYSAnJScgcmVwcmVzZW50cyB0aGUgcG9zaXRpb24gb2YgdGhlCi0JICogY3Vyc29yIGFuZCBhICcjJyByZXByZXNlbnRzIHRoZSBwb3NpdGlvbiBvZiB0aGUgZXhwZWN0ZWQgbWF0Y2hpbmcgY2hhcmFjdGVyLgotCSAqIAotCSAqIEBwYXJhbSBzdHIgdGhlIHN0cmluZyBmb3Igd2hpY2ggdG8gY3JlYXRlIHRoZSB0ZXN0IGNhc2UKLQkgKiBAcmV0dXJuIHRoZSBjcmVhdGVkIHRlc3QgY2FzZQotCSAqLwotCXB1YmxpYyBUZXN0Q2FzZSBjcmVhdGVUZXN0Q2FzZShTdHJpbmcgc3RyKSB7Ci0JCWludCBwb3M9IHN0ci5pbmRleE9mKCIlIik7Ci0JCWFzc2VydEZhbHNlKHBvcyA9PSAtMSk7Ci0JCWludCBtYXRjaD0gc3RyLmluZGV4T2YoIiMiKTsKLQkJLy8gYWNjb3VudCBmb3IgdGhlIGxlbmd0aCBvZiB0aGUgZmlyc3QgcG9zaXRpb24gbWFya2VyLAotCQkvLyBpZiB0aGVyZSBpcyBvbmUKLQkJaWYgKG1hdGNoICE9IC0xICYmIG1hdGNoIDwgcG9zKSBwb3MgLT0gMTsKLQkJaWYgKHBvcyA8IG1hdGNoKSBtYXRjaCAtPSAxOwotCQlmaW5hbCBTdHJpbmcgc3RyaXBwZWQ9IHN0ci5yZXBsYWNlQWxsKCIlIiwgIiIpLnJlcGxhY2VBbGwoIiMiLCAiIik7Ci0JCXJldHVybiBuZXcgVGVzdENhc2Uoc3RyaXBwZWQsIHBvcywgbWF0Y2gpOwotCX0KLQotCXByaXZhdGUgY2xhc3MgVGVzdENhc2UgewotCi0JCXB1YmxpYyBmaW5hbCBTdHJpbmcgZlN0cmluZzsKLQkJcHVibGljIGZpbmFsIGludCBmUG9zLCBmTWF0Y2g7Ci0KLQkJcHVibGljIFRlc3RDYXNlKFN0cmluZyBzdHJpbmcsIGludCBwb3MsIGludCBtYXRjaCkgewotCQkJZlN0cmluZz0gc3RyaW5nOwotCQkJZlBvcz0gcG9zOwotCQkJZk1hdGNoPSBtYXRjaDsKLQkJfQotCi0JCXB1YmxpYyBJRG9jdW1lbnQgZ2V0RG9jdW1lbnQoKSB7Ci0JCQlyZXR1cm4gbmV3IFN0cmluZ0RvY3VtZW50KGZTdHJpbmcpOwotCQl9Ci0KLQkJcHVibGljIGludCBnZXRMZW5ndGgoKSB7Ci0JCQlyZXR1cm4gTWF0aC5hYnMoZlBvcyAtIGZNYXRjaCk7Ci0JCX0KLQotCQlwdWJsaWMgaW50IGdldE9mZnNldCgpIHsKLQkJCWlmIChmUG9zID4gZk1hdGNoKSByZXR1cm4gZk1hdGNoOwotCQkJcmV0dXJuIGZQb3M7Ci0JCX0KLQotCX0KLQotCXByaXZhdGUgY2xhc3MgU3RyaW5nRG9jdW1lbnQgZXh0ZW5kcyBEb2N1bWVudCB7Ci0KLQkJcHVibGljIFN0cmluZ0RvY3VtZW50KFN0cmluZyBzdHIpIHsKLQkJCXRoaXMuc2V0VGV4dFN0b3JlKG5ldyBTdHJpbmdUZXh0U3RvcmUoc3RyKSk7Ci0JCQl0aGlzLnNldChzdHIpOwotCQkJZmluYWwgSURvY3VtZW50UGFydGl0aW9uZXIgcGFydD0gY3JlYXRlUGFydGl0aW9uZXIoKTsKLQkJCXRoaXMuc2V0RG9jdW1lbnRQYXJ0aXRpb25lcihnZXREb2N1bWVudFBhcnRpdGlvbmluZygpLCBwYXJ0KTsKLQkJCXBhcnQuY29ubmVjdCh0aGlzKTsKLQkJfQotCi0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgY2xhc3MgU3RyaW5nVGV4dFN0b3JlIGltcGxlbWVudHMgSVRleHRTdG9yZSB7Ci0KLQkJcHJpdmF0ZSBTdHJpbmcgZlN0cmluZzsKLQotCQlwdWJsaWMgU3RyaW5nVGV4dFN0b3JlKGZpbmFsIFN0cmluZyBzdHIpIHsKLQkJCWZTdHJpbmc9IHN0cjsKLQkJfQotCi0JCXB1YmxpYyBjaGFyIGdldChpbnQgb2Zmc2V0KSB7Ci0JCQlyZXR1cm4gZlN0cmluZy5jaGFyQXQob2Zmc2V0KTsKLQkJfQotCi0JCXB1YmxpYyBTdHJpbmcgZ2V0KGludCBvZmZzZXQsIGludCBsZW5ndGgpIHsKLQkJCXJldHVybiBmU3RyaW5nLnN1YnN0cmluZyhvZmZzZXQsIG9mZnNldCArIGxlbmd0aCk7Ci0JCX0KLQotCQlwdWJsaWMgaW50IGdldExlbmd0aCgpIHsKLQkJCXJldHVybiBmU3RyaW5nLmxlbmd0aCgpOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgcmVwbGFjZShpbnQgb2Zmc2V0LCBpbnQgbGVuZ3RoLCBTdHJpbmcgdGV4dCkgewotCQkJdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBzZXQoU3RyaW5nIHRleHQpIHsKLQkJCWZTdHJpbmc9IHRleHQ7Ci0JCX0KLQotCX0KLQotCXByaXZhdGUgc3RhdGljIFN0cmluZyBERUZBVUxUX1BBUlRJVElPTj0gSURvY3VtZW50LkRFRkFVTFRfQ09OVEVOVF9UWVBFOwotCi0JcHJpdmF0ZSBzdGF0aWMgSURvY3VtZW50UGFydGl0aW9uZXIgY3JlYXRlUGFydGl0aW9uZXIoKSB7Ci0JCWZpbmFsIFJ1bGVCYXNlZFBhcnRpdGlvblNjYW5uZXIgc2Nhbj0gbmV3IFJ1bGVCYXNlZFBhcnRpdGlvblNjYW5uZXIoKTsKLQkJZmluYWwgTGlzdC8qPElQcmVkaWNhdGVSdWxlPiovIHJ1bGVzPSBuZXcgQXJyYXlMaXN0Lyo8SVByZWRpY2F0ZVJ1bGU+Ki8oKTsKLQkJcnVsZXMuYWRkKG5ldyBTaW5nbGVMaW5lUnVsZSgifGEiLCAiYXwiLCBuZXcgVG9rZW4oImEiKSkpOwotCQlydWxlcy5hZGQobmV3IFNpbmdsZUxpbmVSdWxlKCJ8YiIsICJifCIsIG5ldyBUb2tlbigiYiIpKSk7Ci0JCXJ1bGVzLmFkZChuZXcgU2luZ2xlTGluZVJ1bGUoInxjIiwgImN8IiwgbmV3IFRva2VuKCJjIikpKTsKLQkJc2Nhbi5zZXRQcmVkaWNhdGVSdWxlcygoSVByZWRpY2F0ZVJ1bGVbXSkgcnVsZXMudG9BcnJheShuZXcgSVByZWRpY2F0ZVJ1bGVbcnVsZXMuc2l6ZSgpXSkpOwotCQlzY2FuLnNldERlZmF1bHRSZXR1cm5Ub2tlbihuZXcgVG9rZW4oREVGQVVMVF9QQVJUSVRJT04pKTsKLQkJcmV0dXJuIG5ldyBGYXN0UGFydGl0aW9uZXIoc2NhbiwgbmV3IFN0cmluZ1tdIHsgREVGQVVMVF9QQVJUSVRJT04sICJhIiwgImIiLCAiYyIgfSk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9BYnN0cmFjdFVuZG9NYW5hZ2VyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvQWJzdHJhY3RVbmRvTWFuYWdlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzYxZTcwMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9BYnN0cmFjdFVuZG9NYW5hZ2VyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTA4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5CYWRMb2NhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudEV4dGVuc2lvbjQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVGV4dFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklVbmRvTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LlBvc2l0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuVGV4dFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5sdGsubW9kZWxoYW5kbGVyLklNb2RlbEhhbmRsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLm1vZGVsaGFuZGxlci5Nb2RlbEhhbmRsZXJSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwudGV4dC5CYXNpY1N0cnVjdHVyZWREb2N1bWVudDsKLQotLyoqCi0gKiBUZXN0cyBmb3IgRGVmYXVsdFVuZG9NYW5hZ2VyLiBDaGFuZ2VkIGZyb20gdGhlIEpGYWNlIG9yaWdpbmFsIHRvIGNyZWF0ZXMKLSAqIGFuZCB0ZXN0IGFnYWluc3QgYSBzdHJ1Y3R1cmVkIGRvY3VtZW50LgotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RVbmRvTWFuYWdlclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQkvKiogVGhlIG1heGltdW0gdW5kbyBsZXZlbC4gKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFYX1VORE9fTEVWRUw9IDI1NjsKLQotCS8qKiBUaGUgc2hlbGwuICovCi0JcHJpdmF0ZSBTaGVsbCBmU2hlbGw7Ci0JLyoqIFRoZSB0ZXh0IHZpZXdlci4gKi8KLQlwcml2YXRlIElUZXh0Vmlld2VyIGZUZXh0Vmlld2VyOwotCS8qKiBUaGUgdW5kbyBtYW5hZ2VyLiAqLwotCXByaXZhdGUgSVVuZG9NYW5hZ2VyIGZVbmRvTWFuYWdlcjsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBMT09QX0NPVU5UPSAyMDsKLQotCS8vLS0tIFN0YXRpYyBkYXRhIHNldHMgZm9yIGNvbXBhcmluZyBzY2VuYXJpb3MgLSBvYnRhaW5lZCBmcm9tIGNhcHR1cmluZyByYW5kb20gZGF0YSAtLS0KLQkvKiogT3JpZ2luYWwgZG9jdW1lbnQgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5JVElBTF9ET0NVTUVOVF9DT05URU5UPSAiKzdjeWc6L0YhVDRLblc7MCthdSR0MUclKGBafHUnNydfIS1rPzxjXCIyWS5dQ3dzTy5yIjsKLQkvKiogUmVwbGFjZW1lbnQgc3RyaW5nICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFtdIFJFUExBQ0VNRU5UUz0geyAiPiIsICJGIiwgIk0vci0qIiwgIi0iLCAiYmwiLCAiIiwgIn0lLyMiLCAiIiwgImsmIiwgImYiLCAiXFxnIiwgImMheCIsICJUTEctIiwgIk5QTyIsICJScDl1IiwgIiIsICJYIiwgIlcoIiwgIil6IiwgIm9lIiwgIiIsICJoKiIsICJ0IiwgIkkiLCAiWD1OPiIsICIyeXQiLCAiJloiLCAiMilXPSIsICI6SyIsICJQOVMiLCAiczh0OG8iLCAiIiwgIiIsICI1ezciLCAiJSIsICIiLCAidjMiLCAiV3oiLCAic0giLCAiM2MiLCAiOCIsICJvbCIsICIsNiQiLCAiOTRbIyIsICIufiIsICJuIiwgIj4iLCAiOSIsICJXIiwgIiwoRlciLCAiUSIsICJeIiwgIkJxIiwgIiQiLCAicmUiLCAiIiwgIjkiLCAiOFsiLCAiTXgiLCAiNGIiLCAiJDYiLCAiRiIsICI4c10iLCAibyIsICItIiwgIkUmNiIsICJTXFwiLCAiLyIsICJ6LmEiLCAiNGFpIiwgImIiLCAiKSIsICIiLCAibCIsICJWVSIsICI3TStRbCIsICJ4Wj94IiwgInh4IiwgImxjIiwgImIiLCAiQSIsICIhIiwgIjRwU1UiLCAiIiwgIntKIiwgIkgiLCAibD5fIiwgIm4mOSIsICIiLCAiJmAiLCAiO2lnUXhxIiwgIiIsICI+IiwgIjtcIiIsICJrXFxgXUciLCAib3s/IiwgIiIsICJLIiwgIl82IiwgIj0ifTsKLQkvKiogUG9zaXRpb24vb2Zmc2V0IHBhaXJzICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFtdIFBPU0lUSU9OUz0geyAxOCwgMiwgNDMsIDEsIDMsIDIsIDI4LCAzLCAzNSwgMSwgMjMsIDUsIDMyLCAyLCAzMCwgMSwgMjIsIDEsIDM3LCAwLCAyMywgMywgNDMsIDIsIDQ2LCAxLCAxNywgMSwgMzYsIDYsIDE3LCA1LCAzMCwgNCwgMjUsIDEsIDIsIDIsIDMwLCAwLCAzNywgMywgMjgsIDEsIDMwLCAyLCAyMCwgNSwgMzMsIDEsIDI5LCAxLCAxNSwgMiwgMjEsIDIsIDI0LCA0LCAzOCwgMywgOCwgMCwgMzMsIDIsIDE1LCAyLCAyNSwgMCwgOCwgMiwgMjAsIDMsIDQzLCAyLCA0NCwgMSwgNDQsIDIsIDMyLCAyLCA0MCwgMiwgMzIsIDMsIDEyLCAyLCAzOCwgMywgMzMsIDIsIDQ2LCAwLCAxMywgMywgNDUsIDAsIDE2LCAyLCAzLCAyLCA0NCwgMCwgNDgsIDAsIDE4LCA1LCA3LCA2LCA3LCAzLCA0MCwgMCwgOSwgMSwgMTYsIDMsIDI4LCAzLCAzNiwgMSwgMzUsIDIsIDAsIDMsIDYsIDEsIDEwLCA0LCAxNCwgMiwgMTUsIDMsIDMzLCAxLCAzNiwgMCwgMzcsIDAsIDQsIDMsIDMxLCAzLCAzMywgMywgMTEsIDMsIDIwLCAyLCAyNSwgMywgNCwgMywgNywgMywgMTcsIDAsIDMsIDEsIDMxLCAzLCAzNCwgMSwgMjEsIDAsIDMzLCAxLCAxNywgNCwgOSwgMSwgMjYsIDMsIDIsIDMsIDEyLCAxLCAyNiwgMywgOSwgNSwgNSwgMCwgMzEsIDMsIDAsIDMsIDEyLCAxLCAxLCAxLCAzLCAwLCAzOSwgMCwgOSwgMiwgMiwgMCwgMjgsIDJ9OwotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVRz0gZmFsc2U7Ci0KLQotCS8qCi0JICogQHNlZSBUZXN0Q2FzZSNUZXN0Q2FzZShTdHJpbmcpCi0JICovCi0JcHVibGljIEFic3RyYWN0VW5kb01hbmFnZXJUZXN0KGZpbmFsIFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCS8qCi0JICogIEBzZWUgVGVzdENhc2Ujc2V0VXAoKQotCSAqLwotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgewotCQlmU2hlbGw9IG5ldyBTaGVsbCgpOwotCQlmVW5kb01hbmFnZXI9IGNyZWF0ZVVuZG9NYW5hZ2VyKE1BWF9VTkRPX0xFVkVMKTsKLQkJZlRleHRWaWV3ZXI9IG5ldyBUZXh0Vmlld2VyKGZTaGVsbCwgU1dULk5PTkUpOwotCQlmVGV4dFZpZXdlci5zZXRVbmRvTWFuYWdlcihmVW5kb01hbmFnZXIpOwotCQlmVW5kb01hbmFnZXIuY29ubmVjdChmVGV4dFZpZXdlcik7Ci0JfQotCi0JYWJzdHJhY3QgcHJvdGVjdGVkIElVbmRvTWFuYWdlciBjcmVhdGVVbmRvTWFuYWdlcihpbnQgbWF4VW5kb0xldmVsKTsKLQotCS8qCi0JICogIEBzZWUgVGVzdENhc2UjdGVhckRvd24oKQotCSAqLwotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgewotCQlmVW5kb01hbmFnZXIuZGlzY29ubmVjdCgpOwotCQlmVW5kb01hbmFnZXI9IG51bGw7Ci0JCWZTaGVsbC5kaXNwb3NlKCk7Ci0JCWZTaGVsbD0gbnVsbDsKLQkJZlRleHRWaWV3ZXI9IG51bGw7Ci0JfQotCi0JLyoqCi0JICogVGVzdCBmb3IgbGluZSBkZWxpbWl0ZXIgY29udmVyc2lvbi4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Q29udmVydExpbmVEZWxpbWl0ZXJzKCkgewotCQlmaW5hbCBTdHJpbmcgb3JpZ2luYWw9ICJhXHJcbmJcclxuIjsKLQkJZmluYWwgSURvY3VtZW50IGRvY3VtZW50PSBjcmVhdGVEb2N1bWVudChvcmlnaW5hbCk7Ci0JCWZUZXh0Vmlld2VyLnNldERvY3VtZW50KGRvY3VtZW50KTsKLQotCQl0cnkgewotCQkJZG9jdW1lbnQucmVwbGFjZSgxLCAyLCAiXG4iKTsKLQkJCWRvY3VtZW50LnJlcGxhY2UoMywgMiwgIlxuIik7Ci0JCX0gY2F0Y2ggKEJhZExvY2F0aW9uRXhjZXB0aW9uIGUpIHsKLQkJCWFzc2VydFRydWUoZmFsc2UpOwotCQl9Ci0KLQkJYXNzZXJ0VHJ1ZShmVW5kb01hbmFnZXIudW5kb2FibGUoKSk7Ci0JCWZVbmRvTWFuYWdlci51bmRvKCk7Ci0JCWFzc2VydFRydWUoZlVuZG9NYW5hZ2VyLnVuZG9hYmxlKCkpOwotCQlmVW5kb01hbmFnZXIudW5kbygpOwotCi0JCWZpbmFsIFN0cmluZyByZXZlcnRlZD0gZG9jdW1lbnQuZ2V0KCk7Ci0KLQkJYXNzZXJ0RXF1YWxzKG9yaWdpbmFsLCByZXZlcnRlZCk7Ci0JfQotCi0JLyoqCi0JICogUmFuZG9tbHkgYXBwbGllcyBkb2N1bWVudCBjaGFuZ2VzLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RSYW5kb21BY2Nlc3MoKSB7Ci0JCWZpbmFsIGludCBSQU5ET01fU1RSSU5HX0xFTkdUSD0gNTA7Ci0JCWZpbmFsIGludCBSQU5ET01fUkVQTEFDRV9DT1VOVD0gMTAwOwotCi0JCWFzc2VydFRydWUoUkFORE9NX1JFUExBQ0VfQ09VTlQgPj0gMSk7Ci0JCWFzc2VydFRydWUoUkFORE9NX1JFUExBQ0VfQ09VTlQgPD0gTUFYX1VORE9fTEVWRUwpOwotCi0JCVN0cmluZyBvcmlnaW5hbD0gY3JlYXRlUmFuZG9tU3RyaW5nKFJBTkRPTV9TVFJJTkdfTEVOR1RIKTsKLQkJZmluYWwgSURvY3VtZW50IGRvY3VtZW50PSBjcmVhdGVEb2N1bWVudChvcmlnaW5hbCk7Ci0JCWZUZXh0Vmlld2VyLnNldERvY3VtZW50KGRvY3VtZW50KTsKLQotCQlkb0NoYW5nZShkb2N1bWVudCwgUkFORE9NX1JFUExBQ0VfQ09VTlQpOwotCi0JCWFzc2VydFRydWUoZlVuZG9NYW5hZ2VyLnVuZG9hYmxlKCkpOwotCQl3aGlsZSAoZlVuZG9NYW5hZ2VyLnVuZG9hYmxlKCkpCi0JCQlmVW5kb01hbmFnZXIudW5kbygpOwotCi0JCWZpbmFsIFN0cmluZyByZXZlcnRlZD0gZG9jdW1lbnQuZ2V0KCk7Ci0JCWFzc2VydEVxdWFscyhvcmlnaW5hbCwgcmV2ZXJ0ZWQpOwotCX0KLQotCXByaXZhdGUgdm9pZCBkb0NoYW5nZShJRG9jdW1lbnQgZG9jdW1lbnQsIGludCBjb3VudCkgewotCQl0cnkgewotCQkJU3RyaW5nIGJlZm9yZT0gZG9jdW1lbnQuZ2V0KCk7Ci0KLQkJCWlmIChERUJVRykKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oYmVmb3JlKTsKLQotCQkJUG9zaXRpb24gW10gcG9zaXRpb25zPSBuZXcgUG9zaXRpb25bY291bnRdOwotCQkJU3RyaW5nIFtdIHN0cmluZ3M9IG5ldyBTdHJpbmdbY291bnRdOwotCQkJZm9yIChpbnQgaT0gMDsgaSA8IGNvdW50OyBpKyspIHsKLQkJCQlmaW5hbCBQb3NpdGlvbiBwb3NpdGlvbj0gY3JlYXRlUmFuZG9tUG9zaXRpb25Qb2lzc29uKGRvY3VtZW50LmdldExlbmd0aCgpKTsKLQkJCQlmaW5hbCBTdHJpbmcgc3RyaW5nPSBjcmVhdGVSYW5kb21TdHJpbmdQb2lzc29uKCk7Ci0JCQkJZG9jdW1lbnQucmVwbGFjZShwb3NpdGlvbi5nZXRPZmZzZXQoKSwgcG9zaXRpb24uZ2V0TGVuZ3RoKCksIHN0cmluZyk7Ci0JCQkJcG9zaXRpb25zW2ldPSBwb3NpdGlvbjsKLQkJCQlzdHJpbmdzW2ldPSBzdHJpbmc7Ci0JCQl9Ci0KLQkJCWlmIChERUJVRykgewotCQkJCVN5c3RlbS5vdXQucHJpbnQoInsgIik7Ci0JCQkJZm9yIChpbnQgaT0wOyBpPGNvdW50OyBpKyspIHsKLQkJCQkJU3lzdGVtLm91dC5wcmludChwb3NpdGlvbnNbaV0uZ2V0T2Zmc2V0KCkpOwotCQkJCQlTeXN0ZW0ub3V0LnByaW50KCIsICIpOwotCQkJCQlTeXN0ZW0ub3V0LnByaW50KHBvc2l0aW9uc1tpXS5nZXRMZW5ndGgoKSk7Ci0JCQkJCVN5c3RlbS5vdXQucHJpbnQoIiwgIik7Ci0JCQkJfQotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiIH0iKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50KCJ7ICIpOwotCQkJCWZvciAoaW50IGk9MDsgaTxjb3VudDsgaSsrKSB7Ci0JCQkJCVN5c3RlbS5vdXQucHJpbnQoIlwiIik7Ci0JCQkJCVN5c3RlbS5vdXQucHJpbnQoc3RyaW5nc1tpXSk7Ci0JCQkJCVN5c3RlbS5vdXQucHJpbnQoIlwiLCAiKTsKLQkJCQl9Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCIgfSIpOwotCQkJfQotCQl9IGNhdGNoIChCYWRMb2NhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQlhc3NlcnRUcnVlKGZhbHNlKTsKLQkJfQotCX0KLQotCS8vIHJlcGVhdGFibGUgdGVzdCBjYXNlIGZvciBjb21wYXJpbmcgc3VjY2Vzcy9mYWlsdXJlIGFtb25nIGRpZmZlcmVudCB0ZXN0cwotCXByaXZhdGUgdm9pZCBkb1JlcGVhdGFibGVDaGFuZ2UoSURvY3VtZW50IGRvY3VtZW50KSB7Ci0JCWFzc2VydFRydWUoUE9TSVRJT05TLmxlbmd0aCA+PSAoMiAqIFJFUExBQ0VNRU5UUy5sZW5ndGgpKTsKLQkJdHJ5IHsKLQkJCWZvciAoaW50IGk9IDA7IGkgPCBSRVBMQUNFTUVOVFMubGVuZ3RoOyBpKyspIHsKLQkJCQlpbnQgb2Zmc2V0PSBQT1NJVElPTlNbaSoyXTsKLQkJCQlpbnQgbGVuZ3RoPSBQT1NJVElPTlNbaSoyKzFdOwotCQkJCWlmIChkb2N1bWVudC5nZXRMZW5ndGgoKSA+IG9mZnNldCArIGxlbmd0aCkKLQkJCQkJZG9jdW1lbnQucmVwbGFjZShvZmZzZXQsIGxlbmd0aCwgUkVQTEFDRU1FTlRTW2ldKTsKLQkJCQllbHNlCi0JCQkJCWRvY3VtZW50LnJlcGxhY2UoMCwwLCBSRVBMQUNFTUVOVFNbaV0pOwotCQkJfQotCQl9IGNhdGNoIChCYWRMb2NhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQlhc3NlcnRUcnVlKGZhbHNlKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RMb29wUmFuZG9tQWNjZXNzQXNDb21wb3VuZCgpIHsKLQkJaW50IGk9IDA7Ci0JCXdoaWxlIChpIDwgTE9PUF9DT1VOVCkgewotCQkJZlVuZG9NYW5hZ2VyLnJlc2V0KCk7Ci0JCQl0ZXN0UmFuZG9tQWNjZXNzQXNDb21wb3VuZCgpOwotCQkJaSsrOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdExvb3BSYW5kb21BY2Nlc3MoKSB7Ci0JCWludCBpPSAwOwotCQl3aGlsZSAoaSA8IExPT1BfQ09VTlQpIHsKLQkJCWZVbmRvTWFuYWdlci5yZXNldCgpOwotCQkJdGVzdFJhbmRvbUFjY2VzcygpOwotCQkJaSsrOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdExvb3BSYW5kb21BY2Nlc3NBc1VuY2xvc2VkQ29tcG91bmQoKSB7Ci0JCWludCBpPSAwOwotCQl3aGlsZSAoaSA8IExPT1BfQ09VTlQpIHsKLQkJCWZVbmRvTWFuYWdlci5yZXNldCgpOwotCQkJdGVzdFJhbmRvbUFjY2Vzc0FzVW5jbG9zZWRDb21wb3VuZCgpOwotCQkJaSsrOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdExvb3BDb252ZXJ0TGluZURlbGltaXRlcnMoKSB7Ci0JCWludCBpPSAwOwotCQl3aGlsZSAoaSA8IExPT1BfQ09VTlQpIHsKLQkJCWZVbmRvTWFuYWdlci5yZXNldCgpOwotCQkJdGVzdENvbnZlcnRMaW5lRGVsaW1pdGVycygpOwotCQkJaSsrOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdExvb3BSYW5kb21BY2Nlc3NXaXRoTWl4ZWRDb21wb3VuZCgpIHsKLQkJaW50IGk9IDA7Ci0JCXdoaWxlIChpIDwgTE9PUF9DT1VOVCkgewotCQkJZlVuZG9NYW5hZ2VyLnJlc2V0KCk7Ci0JCQl0ZXN0UmFuZG9tQWNjZXNzV2l0aE1peGVkQ29tcG91bmQoKTsKLQkJCWkrKzsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RSYW5kb21BY2Nlc3NBc0NvbXBvdW5kKCkgewotCQlmaW5hbCBpbnQgUkFORE9NX1NUUklOR19MRU5HVEg9IDUwOwotCQlmaW5hbCBpbnQgUkFORE9NX1JFUExBQ0VfQ09VTlQ9IDEwMDsKLQotCQlhc3NlcnRUcnVlKFJBTkRPTV9SRVBMQUNFX0NPVU5UID49IDEpOwotCQlhc3NlcnRUcnVlKFJBTkRPTV9SRVBMQUNFX0NPVU5UIDw9IE1BWF9VTkRPX0xFVkVMKTsKLQotCQlTdHJpbmcgb3JpZ2luYWw9IGNyZWF0ZVJhbmRvbVN0cmluZyhSQU5ET01fU1RSSU5HX0xFTkdUSCk7Ci0JCWZpbmFsIElEb2N1bWVudCBkb2N1bWVudD0gY3JlYXRlRG9jdW1lbnQob3JpZ2luYWwpOwotCQlmVGV4dFZpZXdlci5zZXREb2N1bWVudChkb2N1bWVudCk7Ci0KLQkJZlVuZG9NYW5hZ2VyLmJlZ2luQ29tcG91bmRDaGFuZ2UoKTsKLQkJZG9DaGFuZ2UoZG9jdW1lbnQsIFJBTkRPTV9SRVBMQUNFX0NPVU5UKTsKLQkJZlVuZG9NYW5hZ2VyLmVuZENvbXBvdW5kQ2hhbmdlKCk7Ci0KLQkJYXNzZXJ0VHJ1ZShmVW5kb01hbmFnZXIudW5kb2FibGUoKSk7Ci0JCXdoaWxlIChmVW5kb01hbmFnZXIudW5kb2FibGUoKSkKLQkJCWZVbmRvTWFuYWdlci51bmRvKCk7Ci0JCWFzc2VydFRydWUoIWZVbmRvTWFuYWdlci51bmRvYWJsZSgpKTsKLQotCQlmaW5hbCBTdHJpbmcgcmV2ZXJ0ZWQ9IGRvY3VtZW50LmdldCgpOwotCi0JCWFzc2VydEVxdWFscyhvcmlnaW5hbCwgcmV2ZXJ0ZWQpOwotCX0KLQotCS8qKgotCSAqIFRlc3QgY2FzZSBmb3IgaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTg4MTcyCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFJhbmRvbUFjY2Vzc0FzVW5jbG9zZWRDb21wb3VuZCgpIHsKLQotCQlmaW5hbCBpbnQgUkFORE9NX1NUUklOR19MRU5HVEg9IDUwOwotCQlmaW5hbCBpbnQgUkFORE9NX1JFUExBQ0VfQ09VTlQ9IDEwMDsKLQotCQlhc3NlcnRUcnVlKFJBTkRPTV9SRVBMQUNFX0NPVU5UID49IDEpOwotCQlhc3NlcnRUcnVlKFJBTkRPTV9SRVBMQUNFX0NPVU5UIDw9IE1BWF9VTkRPX0xFVkVMKTsKLQotCQlTdHJpbmcgb3JpZ2luYWw9IGNyZWF0ZVJhbmRvbVN0cmluZyhSQU5ET01fU1RSSU5HX0xFTkdUSCk7Ci0JCWZpbmFsIElEb2N1bWVudCBkb2N1bWVudD0gY3JlYXRlRG9jdW1lbnQob3JpZ2luYWwpOwotCQlmVGV4dFZpZXdlci5zZXREb2N1bWVudChkb2N1bWVudCk7Ci0KLQkJZlVuZG9NYW5hZ2VyLmJlZ2luQ29tcG91bmRDaGFuZ2UoKTsKLQkJZG9DaGFuZ2UoZG9jdW1lbnQsIFJBTkRPTV9SRVBMQUNFX0NPVU5UKTsKLQkJLy8gZG8gbm90IGNsb3NlIHRoZSBjb21wb3VuZC4KLQkJLy8gZlVuZG9NYW5hZ2VyLmVuZENvbXBvdW5kQ2hhbmdlKCk7Ci0KLQkJYXNzZXJ0VHJ1ZShmVW5kb01hbmFnZXIudW5kb2FibGUoKSk7Ci0JCXdoaWxlIChmVW5kb01hbmFnZXIudW5kb2FibGUoKSkKLQkJCWZVbmRvTWFuYWdlci51bmRvKCk7Ci0JCWFzc2VydFRydWUoIWZVbmRvTWFuYWdlci51bmRvYWJsZSgpKTsKLQotCQlmaW5hbCBTdHJpbmcgcmV2ZXJ0ZWQ9IGRvY3VtZW50LmdldCgpOwotCi0JCWFzc2VydEVxdWFscyhvcmlnaW5hbCwgcmV2ZXJ0ZWQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RSYW5kb21BY2Nlc3NXaXRoTWl4ZWRDb21wb3VuZCgpIHsKLQotCQlmaW5hbCBpbnQgUkFORE9NX1NUUklOR19MRU5HVEg9IDUwOwotCQlmaW5hbCBpbnQgUkFORE9NX1JFUExBQ0VfQ09VTlQ9IDEwOwotCQlmaW5hbCBpbnQgTlVNQkVSX0NPTVBPVU5EUz0gNTsKLQkJZmluYWwgaW50IE5VTUJFUl9BVE9NSUNfUEVSX0NPTVBPVU5EPSAzOwotCi0JCWFzc2VydFRydWUoUkFORE9NX1JFUExBQ0VfQ09VTlQgPj0gMSk7Ci0JCWFzc2VydFRydWUoTlVNQkVSX0NPTVBPVU5EUyAqICgxICsgTlVNQkVSX0FUT01JQ19QRVJfQ09NUE9VTkQpICogUkFORE9NX1JFUExBQ0VfQ09VTlQgPD0gTUFYX1VORE9fTEVWRUwpOwotCi0JCVN0cmluZyBvcmlnaW5hbD0gY3JlYXRlUmFuZG9tU3RyaW5nKFJBTkRPTV9TVFJJTkdfTEVOR1RIKTsKLQkJZmluYWwgSURvY3VtZW50IGRvY3VtZW50PSBjcmVhdGVEb2N1bWVudChvcmlnaW5hbCk7Ci0JCWZUZXh0Vmlld2VyLnNldERvY3VtZW50KGRvY3VtZW50KTsKLQotCQlmb3IgKGludCBpPSAwOyBpIDwgTlVNQkVSX0NPTVBPVU5EUzsgaSsrKSB7Ci0JCQlmVW5kb01hbmFnZXIuYmVnaW5Db21wb3VuZENoYW5nZSgpOwotCQkJZG9DaGFuZ2UoZG9jdW1lbnQsIFJBTkRPTV9SRVBMQUNFX0NPVU5UKTsKLQkJCWZVbmRvTWFuYWdlci5lbmRDb21wb3VuZENoYW5nZSgpOwotCQkJYXNzZXJ0VHJ1ZShmVW5kb01hbmFnZXIudW5kb2FibGUoKSk7Ci0JCQlmb3IgKGludCBqPSAwOyBqIDwgTlVNQkVSX0FUT01JQ19QRVJfQ09NUE9VTkQ7IGorKykgewotCQkJCWRvQ2hhbmdlKGRvY3VtZW50LCBSQU5ET01fUkVQTEFDRV9DT1VOVCk7Ci0JCQkJYXNzZXJ0VHJ1ZShmVW5kb01hbmFnZXIudW5kb2FibGUoKSk7Ci0JCQl9Ci0JCX0KLQotCQlhc3NlcnRUcnVlKGZVbmRvTWFuYWdlci51bmRvYWJsZSgpKTsKLQkJd2hpbGUgKGZVbmRvTWFuYWdlci51bmRvYWJsZSgpKQotCQkJZlVuZG9NYW5hZ2VyLnVuZG8oKTsKLQkJYXNzZXJ0VHJ1ZSghZlVuZG9NYW5hZ2VyLnVuZG9hYmxlKCkpOwotCi0JCWZpbmFsIFN0cmluZyByZXZlcnRlZD0gZG9jdW1lbnQuZ2V0KCk7Ci0KLQkJYXNzZXJ0RXF1YWxzKG9yaWdpbmFsLCByZXZlcnRlZCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFJlcGVhdGFibGVBY2Nlc3MoKSB7Ci0JCWFzc2VydFRydWUoUkVQTEFDRU1FTlRTLmxlbmd0aCA8PSBNQVhfVU5ET19MRVZFTCk7Ci0KLQkJZmluYWwgSURvY3VtZW50IGRvY3VtZW50PSBjcmVhdGVEb2N1bWVudChJTklUSUFMX0RPQ1VNRU5UX0NPTlRFTlQpOwotCQlmVGV4dFZpZXdlci5zZXREb2N1bWVudChkb2N1bWVudCk7Ci0KLQkJZG9SZXBlYXRhYmxlQ2hhbmdlKGRvY3VtZW50KTsKLQotCQlhc3NlcnRUcnVlKGZVbmRvTWFuYWdlci51bmRvYWJsZSgpKTsKLQkJd2hpbGUgKGZVbmRvTWFuYWdlci51bmRvYWJsZSgpKQotCQkJZlVuZG9NYW5hZ2VyLnVuZG8oKTsKLQotCQlmaW5hbCBTdHJpbmcgcmV2ZXJ0ZWQ9IGRvY3VtZW50LmdldCgpOwotCi0JCWFzc2VydEVxdWFscyhJTklUSUFMX0RPQ1VNRU5UX0NPTlRFTlQsIHJldmVydGVkKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UmVwZWF0YWJsZUFjY2Vzc0FzQ29tcG91bmQoKSB7Ci0JCWFzc2VydFRydWUoUkVQTEFDRU1FTlRTLmxlbmd0aCA8PSBNQVhfVU5ET19MRVZFTCk7Ci0KLQkJZmluYWwgSURvY3VtZW50IGRvY3VtZW50PSBjcmVhdGVEb2N1bWVudChJTklUSUFMX0RPQ1VNRU5UX0NPTlRFTlQpOwotCQlmVGV4dFZpZXdlci5zZXREb2N1bWVudChkb2N1bWVudCk7Ci0KLQkJZlVuZG9NYW5hZ2VyLmJlZ2luQ29tcG91bmRDaGFuZ2UoKTsKLQkJZG9SZXBlYXRhYmxlQ2hhbmdlKGRvY3VtZW50KTsKLQkJZlVuZG9NYW5hZ2VyLmVuZENvbXBvdW5kQ2hhbmdlKCk7Ci0KLQkJYXNzZXJ0VHJ1ZShmVW5kb01hbmFnZXIudW5kb2FibGUoKSk7Ci0JCWZVbmRvTWFuYWdlci51bmRvKCk7Ci0JCS8vIHdpdGggYSBzaW5nbGUgY29tcG91bmQsIHRoZXJlIHNob3VsZCBiZSBvbmx5IG9uZSB1bmRvCi0JCWFzc2VydEZhbHNlKGZVbmRvTWFuYWdlci51bmRvYWJsZSgpKTsKLQotCQlmaW5hbCBTdHJpbmcgcmV2ZXJ0ZWQ9IGRvY3VtZW50LmdldCgpOwotCi0JCWFzc2VydEVxdWFscyhJTklUSUFMX0RPQ1VNRU5UX0NPTlRFTlQsIHJldmVydGVkKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UmVwZWF0YWJsZUFjY2Vzc0FzVW5jbG9zZWRDb21wb3VuZCgpIHsKLQkJYXNzZXJ0VHJ1ZShSRVBMQUNFTUVOVFMubGVuZ3RoIDw9IE1BWF9VTkRPX0xFVkVMKTsKLQotCQlmaW5hbCBJRG9jdW1lbnQgZG9jdW1lbnQ9IGNyZWF0ZURvY3VtZW50KElOSVRJQUxfRE9DVU1FTlRfQ09OVEVOVCk7Ci0JCWZUZXh0Vmlld2VyLnNldERvY3VtZW50KGRvY3VtZW50KTsKLQotCQlmVW5kb01hbmFnZXIuYmVnaW5Db21wb3VuZENoYW5nZSgpOwotCQlkb1JlcGVhdGFibGVDaGFuZ2UoZG9jdW1lbnQpOwotCi0JCWFzc2VydFRydWUoZlVuZG9NYW5hZ2VyLnVuZG9hYmxlKCkpOwotCQl3aGlsZSAoZlVuZG9NYW5hZ2VyLnVuZG9hYmxlKCkpCi0JCQlmVW5kb01hbmFnZXIudW5kbygpOwotCi0JCWZpbmFsIFN0cmluZyByZXZlcnRlZD0gZG9jdW1lbnQuZ2V0KCk7Ci0KLQkJYXNzZXJ0RXF1YWxzKElOSVRJQUxfRE9DVU1FTlRfQ09OVEVOVCwgcmV2ZXJ0ZWQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RSZXBlYXRhYmxlQWNjZXNzV2l0aE1peGVkQW5kRW1wdHlDb21wb3VuZCgpIHsKLQkJYXNzZXJ0VHJ1ZShSRVBMQUNFTUVOVFMubGVuZ3RoICsgMiA8PSBNQVhfVU5ET19MRVZFTCk7Ci0KLQkJZmluYWwgSURvY3VtZW50IGRvY3VtZW50PSBjcmVhdGVEb2N1bWVudChJTklUSUFMX0RPQ1VNRU5UX0NPTlRFTlQpOwotCQlmVGV4dFZpZXdlci5zZXREb2N1bWVudChkb2N1bWVudCk7Ci0KLQkJZlVuZG9NYW5hZ2VyLmJlZ2luQ29tcG91bmRDaGFuZ2UoKTsKLQkJZG9SZXBlYXRhYmxlQ2hhbmdlKGRvY3VtZW50KTsKLQkJZlVuZG9NYW5hZ2VyLmVuZENvbXBvdW5kQ2hhbmdlKCk7Ci0JCWFzc2VydFRydWUoZlVuZG9NYW5hZ2VyLnVuZG9hYmxlKCkpOwotCi0JCS8vIGluc2VydCBhbiBlbXB0eSBjb21wb3VuZAotCQlmVW5kb01hbmFnZXIuYmVnaW5Db21wb3VuZENoYW5nZSgpOwotCQlmVW5kb01hbmFnZXIuZW5kQ29tcG91bmRDaGFuZ2UoKTsKLQotCSAgICAvLyBpbnNlcnQgdGhlIGF0b21pYyBjaGFuZ2VzCi0JCWRvUmVwZWF0YWJsZUNoYW5nZShkb2N1bWVudCk7Ci0KLQkJYXNzZXJ0VHJ1ZShmVW5kb01hbmFnZXIudW5kb2FibGUoKSk7Ci0JCXdoaWxlIChmVW5kb01hbmFnZXIudW5kb2FibGUoKSkKLQkJCWZVbmRvTWFuYWdlci51bmRvKCk7Ci0JCWFzc2VydFRydWUoIWZVbmRvTWFuYWdlci51bmRvYWJsZSgpKTsKLQotCQlmaW5hbCBTdHJpbmcgcmV2ZXJ0ZWQ9IGRvY3VtZW50LmdldCgpOwotCi0JCWFzc2VydEVxdWFscyhJTklUSUFMX0RPQ1VNRU5UX0NPTlRFTlQsIHJldmVydGVkKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RG9jdW1lbnRTdGFtcCgpIHsKLQkJZmluYWwgSURvY3VtZW50IGRvY3VtZW50PSBjcmVhdGVEb2N1bWVudChJTklUSUFMX0RPQ1VNRU5UX0NPTlRFTlQpOwotCQlmVGV4dFZpZXdlci5zZXREb2N1bWVudChkb2N1bWVudCk7Ci0JCWxvbmcgc3RhbXA9ICgoSURvY3VtZW50RXh0ZW5zaW9uNClkb2N1bWVudCkuZ2V0TW9kaWZpY2F0aW9uU3RhbXAoKTsKLQkJZG9DaGFuZ2UoZG9jdW1lbnQsIDEpOwotCQlmVW5kb01hbmFnZXIudW5kbygpOwotCQlhc3NlcnRFcXVhbHMoc3RhbXAsICgoSURvY3VtZW50RXh0ZW5zaW9uNClkb2N1bWVudCkuZ2V0TW9kaWZpY2F0aW9uU3RhbXAoKSk7Ci0KLQl9Ci0KLQkvLyBzZWU6IGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0xMDkxMDQKLQlwdWJsaWMgdm9pZCB0ZXN0RG9jdW1lbnRTdGFtcDIoKSB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlmaW5hbCBJRG9jdW1lbnQgZG9jdW1lbnQ9IGNyZWF0ZURvY3VtZW50KCIiKTsKLQkJZmluYWwgaW50IHN0cmluZ0xlbmd0aD0gMTM7Ci0JCWZUZXh0Vmlld2VyLnNldERvY3VtZW50KGRvY3VtZW50KTsKLQkJZG9jdW1lbnQucmVwbGFjZSgwLCAwLCBjcmVhdGVSYW5kb21TdHJpbmcoc3RyaW5nTGVuZ3RoKSk7Ci0JCWxvbmcgc3RhbXA9ICgoSURvY3VtZW50RXh0ZW5zaW9uNClkb2N1bWVudCkuZ2V0TW9kaWZpY2F0aW9uU3RhbXAoKTsKLQkJZlVuZG9NYW5hZ2VyLnVuZG8oKTsKLQkJZG9jdW1lbnQucmVwbGFjZSgwLCAwLCBjcmVhdGVSYW5kb21TdHJpbmcoc3RyaW5nTGVuZ3RoKSk7Ci0JCWFzc2VydEZhbHNlKHN0YW1wID09ICgoSURvY3VtZW50RXh0ZW5zaW9uNClkb2N1bWVudCkuZ2V0TW9kaWZpY2F0aW9uU3RhbXAoKSk7Ci0KLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgY3JlYXRlUmFuZG9tU3RyaW5nKGludCBsZW5ndGgpIHsKLQkJZmluYWwgU3RyaW5nQnVmZmVyIGJ1ZmZlcj0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCi0JCWZvciAoaW50IGk9IDA7IGkgPCBsZW5ndGg7IGkrKykKLQkJCWJ1ZmZlci5hcHBlbmQoZ2V0UmFuZG9tQ2hhcmFjdGVyKCkpOwotCi0JCXJldHVybiBidWZmZXIudG9TdHJpbmcoKTsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBjaGFyIGdldFJhbmRvbUNoYXJhY3RlcigpIHsKLQkJLy8gWFhYIHNob3VsZCBpbmNsdWRlIFx0Ci0JCXJldHVybiAoY2hhcikgKDMyICsgOTUgKiBNYXRoLnJhbmRvbSgpKTsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgY3JlYXRlUmFuZG9tU3RyaW5nUG9pc3NvbigpIHsKLQkJZmluYWwgaW50IGxlbmd0aD0gZ2V0UmFuZG9tUG9pc3NvblZhbHVlKDIpOwotCQlyZXR1cm4gY3JlYXRlUmFuZG9tU3RyaW5nKGxlbmd0aCk7Ci0JfQotCQotCXByaXZhdGUgSURvY3VtZW50IGNyZWF0ZURvY3VtZW50KFN0cmluZyBjb250ZW50cykgewotCQlJTW9kZWxIYW5kbGVyIGhhbmRsZXIgPSBNb2RlbEhhbmRsZXJSZWdpc3RyeS5nZXRJbnN0YW5jZSgpLmdldEhhbmRsZXJGb3JDb250ZW50VHlwZUlkKCJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUueG1sIik7Ci0JCUJhc2ljU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50ID0gKEJhc2ljU3RydWN0dXJlZERvY3VtZW50KSBoYW5kbGVyLmdldERvY3VtZW50TG9hZGVyKCkuY3JlYXRlTmV3U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCWRvY3VtZW50LnNldChjb250ZW50cyk7Ci0vLwkJcmV0dXJuIG5ldyBEb2N1bWVudChjb250ZW50cyk7Ci0JCXJldHVybiBkb2N1bWVudDsKLQl9Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgUG9zaXRpb24gY3JlYXRlUmFuZG9tUG9zaXRpb25Qb2lzc29uKGludCBkb2N1bWVudExlbmd0aCkgewotCi0JCWZsb2F0IHJhbmRvbT0gKGZsb2F0KSBNYXRoLnJhbmRvbSgpOwotCQlpbnQgb2Zmc2V0PSAoaW50KSAocmFuZG9tICogKGRvY3VtZW50TGVuZ3RoICsgMSkpOwotCi0JCS8vIENhdGNoIHBvdGVudGlhbCByb3VuZGluZyBpc3N1ZQotCQlpZiAob2Zmc2V0ID09IGRvY3VtZW50TGVuZ3RoICsgMSkKLQkJCW9mZnNldD0gZG9jdW1lbnRMZW5ndGg7Ci0KLQkJaW50IGxlbmd0aD0gZ2V0UmFuZG9tUG9pc3NvblZhbHVlKDIpOwotCQlpZiAob2Zmc2V0ICsgbGVuZ3RoID4gZG9jdW1lbnRMZW5ndGgpCi0JCQlsZW5ndGg9IGRvY3VtZW50TGVuZ3RoIC0gb2Zmc2V0OwotCi0JCXJldHVybiBuZXcgUG9zaXRpb24ob2Zmc2V0LCBsZW5ndGgpOwotCX0KLQotCXByaXZhdGUgc3RhdGljIGludCBnZXRSYW5kb21Qb2lzc29uVmFsdWUoaW50IG1lYW4pIHsKLQkJZmluYWwgaW50IE1BWF9WQUxVRT0gMTA7Ci0KLQkJZmluYWwgZmxvYXQgcmFuZG9tPSAoZmxvYXQpIE1hdGgucmFuZG9tKCk7Ci0JCWZsb2F0IHByb2JhYmlsaXR5PSAwOwotCQlpbnQgaT0gMDsKLQkJd2hpbGUgKHByb2JhYmlsaXR5IDwgMSAmJiBpIDwgTUFYX1ZBTFVFKSB7Ci0JCQlwcm9iYWJpbGl0eSArPSBnZXRQb2lzc29uRGlzdHJpYnV0aW9uKG1lYW4sIGkpOwotCQkJaWYgKHJhbmRvbSA8PSBwcm9iYWJpbGl0eSkKLQkJCQlicmVhazsKLQkJCWkrKzsKLQkJfQotCQlyZXR1cm4gaTsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBmbG9hdCBnZXRQb2lzc29uRGlzdHJpYnV0aW9uKGZsb2F0IGxhbWJkYSwgaW50IGspIHsKLQkJcmV0dXJuIChmbG9hdCkgKE1hdGguZXhwKC1sYW1iZGEpICogTWF0aC5wb3cobGFtYmRhLCBrKSAvIGZhY3VsdHkoaykpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGZhY3VsdHkgb2Ygay4KLQkgKgotCSAqIEBwYXJhbSBrIHRoZSA8Y29kZT5pbnQ8L2NvZGU+IGZvciB3aGljaCB0byBnZXQgdGhlIGZhY3VsdHkKLQkgKiBAcmV0dXJuIHRoZSBmYWN1bHR5Ci0JICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IGZhY3VsdHkoaW50IGspIHsKLQkJcmV0dXJuIGsgPT0gMAotCQkJPyAxCi0JCQk6IGsgKiBmYWN1bHR5KGsgLSAxKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL0RlZmF1bHRQYWlyTWF0Y2hlclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL0RlZmF1bHRQYWlyTWF0Y2hlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGVhZmM0NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9EZWZhdWx0UGFpck1hdGNoZXJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQ2hyaXN0aWFuIFBsZXNuZXIgSGFuc2VuIChwbGVzbmVyQHF1ZW50YS5vcmcpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuamZhY2UudGV4dC50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudEV4dGVuc2lvbjM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5zb3VyY2UuRGVmYXVsdENoYXJhY3RlclBhaXJNYXRjaGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuc291cmNlLklDaGFyYWN0ZXJQYWlyTWF0Y2hlcjsKLQotLyoqCi0gKiBUZXN0cyBmb3IgdGhlIGRlZmF1bHQgcGFpciBtYXRjaGVyLgotICoKLSAqIEBzaW5jZSAzLjMKLSAqLwotcHVibGljIGNsYXNzIERlZmF1bHRQYWlyTWF0Y2hlclRlc3QgZXh0ZW5kcyBBYnN0cmFjdFBhaXJNYXRjaGVyVGVzdCB7Ci0KLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgVGVzdFN1aXRlKERlZmF1bHRQYWlyTWF0Y2hlclRlc3QuY2xhc3MpOwotCX0KLQotCXByb3RlY3RlZCBJQ2hhcmFjdGVyUGFpck1hdGNoZXIgY3JlYXRlTWF0Y2hlcihTdHJpbmcgY2hhcnMpIHsKLQkJcmV0dXJuIG5ldyBEZWZhdWx0Q2hhcmFjdGVyUGFpck1hdGNoZXIoY2hhcnMudG9DaGFyQXJyYXkoKSwKLQkJCQlnZXREb2N1bWVudFBhcnRpdGlvbmluZygpKTsKLQl9Ci0KLQkvKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UudGV4dC50ZXN0cy5BYnN0cmFjdFBhaXJNYXRjaGVyVGVzdCNnZXREb2N1bWVudFBhcnRpdGlvbmluZygpCi0JICogQHNpbmNlIDMuMwotCSAqLwotCXByb3RlY3RlZCBTdHJpbmcgZ2V0RG9jdW1lbnRQYXJ0aXRpb25pbmcoKSB7Ci0JCXJldHVybiBJRG9jdW1lbnRFeHRlbnNpb24zLkRFRkFVTFRfUEFSVElUSU9OSU5HOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvRGVmYXVsdFVuZG9NYW5hZ2VyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvRGVmYXVsdFVuZG9NYW5hZ2VyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZGE2YjhjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL0RlZmF1bHRVbmRvTWFuYWdlclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuRGVmYXVsdFVuZG9NYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVVuZG9NYW5hZ2VyOwotCi0vKioKLSAqIFRlc3RzIGZvciBEZWZhdWx0VW5kb01hbmFnZXIuCi0gKgotICogQHNpbmNlIDMuMgotICovCi1wdWJsaWMgY2xhc3MgRGVmYXVsdFVuZG9NYW5hZ2VyVGVzdCBleHRlbmRzIEFic3RyYWN0VW5kb01hbmFnZXJUZXN0IHsKLQotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBUZXN0U3VpdGUoRGVmYXVsdFVuZG9NYW5hZ2VyVGVzdC5jbGFzcyk7Ci0JfQotCi0JLyoKLQkgKiBAc2VlIFRlc3RDYXNlI1Rlc3RDYXNlKFN0cmluZykKLQkgKi8KLQlwdWJsaWMgRGVmYXVsdFVuZG9NYW5hZ2VyVGVzdChmaW5hbCBTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQkvKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UudGV4dC50ZXN0cy5BYnN0cmFjdFVuZG9NYW5hZ2VyVGVzdCNjcmVhdGVVbmRvTWFuYWdlcihpbnQpCi0JICogQHNpbmNlIDMuMgotCSAqLwotCXByb3RlY3RlZCBJVW5kb01hbmFnZXIgY3JlYXRlVW5kb01hbmFnZXIoaW50IG1heFVuZG9MZXZlbCkgewotCQlyZXR1cm4gbmV3IERlZmF1bHRVbmRvTWFuYWdlcihtYXhVbmRvTGV2ZWwpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvSFRNTDJUZXh0UmVhZGVyVGVzdGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9IVE1MMlRleHRSZWFkZXJUZXN0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGZhNGM0YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9IVE1MMlRleHRSZWFkZXJUZXN0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlc3RzOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1JlYWRlcjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuaW50ZXJuYWwudGV4dC5odG1sLkhUTUwyVGV4dFJlYWRlcjsKLQotCi1wdWJsaWMgY2xhc3MgSFRNTDJUZXh0UmVhZGVyVGVzdGVyIGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVRz0gZmFsc2U7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTEQ9IFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiLCAiXG4iKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0KLQlwdWJsaWMgSFRNTDJUZXh0UmVhZGVyVGVzdGVyKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBUZXN0U3VpdGUoSFRNTDJUZXh0UmVhZGVyVGVzdGVyLmNsYXNzKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgdmVyaWZ5KFN0cmluZyBpbnB1dCwgU3RyaW5nIGV4cGVjdGVkT3V0cHV0KSB0aHJvd3MgSU9FeGNlcHRpb257Ci0JCVJlYWRlciByZWFkZXI9IG5ldyBTdHJpbmdSZWFkZXIoaW5wdXQpOwotCQlIVE1MMlRleHRSZWFkZXIgaHRtbFJlYWRlcj0gbmV3IEhUTUwyVGV4dFJlYWRlcihyZWFkZXIsIG51bGwpOwotCQlTdHJpbmcgcmVzdWx0PSBodG1sUmVhZGVyLmdldFN0cmluZygpOwotCQlpZiAoREVCVUcpCi0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIjwiKyByZXN1bHQgKyIvPiIpOwotCQlhc3NlcnRFcXVhbHMoZXhwZWN0ZWRPdXRwdXQsIHJlc3VsdCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDAoKSB0aHJvd3MgSU9FeGNlcHRpb257Ci0JCVN0cmluZyBzdHJpbmc9ICI8Y29kZT4zPDU8Y29kZT4iOwotCQlTdHJpbmcgZXhwZWN0ZWQ9ICIzPDUiOwotCQl2ZXJpZnkoc3RyaW5nLCBleHBlY3RlZCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDEoKSB0aHJvd3MgSU9FeGNlcHRpb257Ci0JCVN0cmluZyBzdHJpbmc9ICI8ZGw+PGR0PkBhdXRob3I8L2R0PjxkZD5Gb28gQmFyPC9kZD48L2RsPiI7Ci0JCVN0cmluZyBleHBlY3RlZD0gTEQrICJAYXV0aG9yIitMRCsiXHRGb28gQmFyIitMRDsKLQkJdmVyaWZ5KHN0cmluZywgZXhwZWN0ZWQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QyKCkgdGhyb3dzIElPRXhjZXB0aW9uewotCQlTdHJpbmcgc3RyaW5nPSAiPGNvZGU+Mz41PGNvZGU+IjsKLQkJU3RyaW5nIGV4cGVjdGVkPSAiMz41IjsKLQkJdmVyaWZ5KHN0cmluZywgZXhwZWN0ZWQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QzKCkgdGhyb3dzIElPRXhjZXB0aW9uewotCQlTdHJpbmcgc3RyaW5nPSAiPGEgaHJlZj0gXCI8cD50aGlzIGlzIG9ubHkgYSBzdHJpbmcgLSBub3QgYSB0YWc8cD5cIj50ZXh0PC9hPiI7Ci0JCVN0cmluZyBleHBlY3RlZD0gInRleHQiOwotCQl2ZXJpZnkoc3RyaW5nLCBleHBlY3RlZCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDQoKSB0aHJvd3MgSU9FeGNlcHRpb257Ci0JCVN0cmluZyBzdHJpbmc9IAkiPGh0bWw+PGJvZHkgdGV4dD1cIiMwMDAwMDBcIiBiZ2NvbG9yPVwiI0ZGRkY4OFwiPjxmb250IHNpemU9LTE+PGg1PnZvaWQgcC5CYi5mZXMoKTwvaDU+PHA+PGRsPjxkdD5QYXJhbWV0ZXJzOjwvZHQ+PGRkPjxiPmk8L2I+IGZyZWQgb3IgPGNvZGU+bnVsbDwvY29kZT48L2RkPjwvZGw+PC9mb250PjwvYm9keT48L2h0bWw+IjsKLQkJU3RyaW5nIGV4cGVjdGVkPSAidm9pZCBwLkJiLmZlcygpIisgTEQgKyBMRCArIExEKyAiUGFyYW1ldGVyczoiKyBMRCArICJcdGkgZnJlZCBvciBudWxsIitMRDsKLQkJdmVyaWZ5KHN0cmluZywgZXhwZWN0ZWQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3Q1KCkgdGhyb3dzIElPRXhjZXB0aW9uewotCQlTdHJpbmcgc3RyaW5nPSAiPGNvZGU+MTwyPDM8NDwvY29kZT4iOwotCQlTdHJpbmcgZXhwZWN0ZWQ9ICIxPDI8Mzw0IjsKLQkJdmVyaWZ5KHN0cmluZywgZXhwZWN0ZWQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3Q2KCkgdGhyb3dzIElPRXhjZXB0aW9uewotCQkvL3Rlc3QgZm9yIGJ1ZyAxOTA3MAotCQlTdHJpbmcgc3RyaW5nPSAiPHA+U29tZXRoaW5nLjxwPlNvbWV0aGluZyBtb3JlLiI7Ci0JCVN0cmluZyBleHBlY3RlZD0gTEQgKyAiU29tZXRoaW5nLiIgKyBMRCArICJTb21ldGhpbmcgbW9yZS4iOwotCQl2ZXJpZnkoc3RyaW5nLCBleHBlY3RlZCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENvbW1lbnRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVN0cmluZyBzdHJpbmc9ICI8IS0tIGJlZ2luLXVzZXItZG9jIC0tPm5vIGNvbW1lbnQ8IS0tIGVuZC11c2VyLWRvYyAtLT4iOwotCQlTdHJpbmcgZXhwZWN0ZWQ9ICJubyBjb21tZW50IjsKLQkJdmVyaWZ5KHN0cmluZyxleHBlY3RlZCk7Ci0JfQotCi19Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL0pGYWNlVGV4dFRlc3RTdWl0ZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvSkZhY2VUZXh0VGVzdFN1aXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhYmZlZGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvSkZhY2VUZXh0VGVzdFN1aXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuamZhY2UudGV4dC50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLQotLyoqCi0gKiBUZXN0IFN1aXRlIGZvciBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LgotICoKLSAqIEBzaW5jZSAzLjAKLSAqLwotcHVibGljIGNsYXNzIEpGYWNlVGV4dFRlc3RTdWl0ZSBleHRlbmRzIFRlc3RTdWl0ZSB7Ci0KLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCVRlc3RTdWl0ZSBzdWl0ZT0gbmV3IFRlc3RTdWl0ZSgib3JnLmVjbGlwc2UuamZhY2UudGV4dCBUZXN0IFN1aXRlIHVzaW5nIEJhc2ljU3RydWN0dXJlZERvY3VtZW50Iik7IC8vJE5PTi1OTFMtMSQKLS8vCQlzdWl0ZS5hZGRUZXN0KEhUTUwyVGV4dFJlYWRlclRlc3Rlci5zdWl0ZSgpKTsKLS8vCQlzdWl0ZS5hZGRUZXN0KFRleHRIb3ZlclBvcHVwVGVzdC5zdWl0ZSgpKTsKLS8vCQlzdWl0ZS5hZGRUZXN0KFRleHRQcmVzZW50YXRpb25UZXN0LnN1aXRlKCkpOwotCQlzdWl0ZS5hZGRUZXN0KERlZmF1bHRVbmRvTWFuYWdlclRlc3Quc3VpdGUoKSk7Ci0JCXN1aXRlLmFkZFRlc3QoVGV4dFZpZXdlclVuZG9NYW5hZ2VyVGVzdC5zdWl0ZSgpKTsKLS8vCQlzdWl0ZS5hZGRUZXN0KFJ1bGVzVGVzdFN1aXRlLnN1aXRlKCkpOwotLy8JCXN1aXRlLmFkZFRlc3QoUmVjb25jaWxlclRlc3RTdWl0ZS5zdWl0ZSgpKTsKLS8vCQlzdWl0ZS5hZGRUZXN0KERlZmF1bHRQYWlyTWF0Y2hlclRlc3Quc3VpdGUoKSk7Ci0JCXJldHVybiBzdWl0ZTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9UZXN0VGV4dEV2ZW50LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9UZXN0VGV4dEV2ZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4NGQ1YmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvVGVzdFRleHRFdmVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQudGVzdHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkRvY3VtZW50RXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5UZXh0RXZlbnQ7Ci0KLQotcHVibGljIGNsYXNzIFRlc3RUZXh0RXZlbnQgZXh0ZW5kcyBUZXh0RXZlbnQgewotCi0JVGVzdFRleHRFdmVudChEb2N1bWVudEV2ZW50IGV2ZW50LCBTdHJpbmcgcmVwbGFjZWRUZXh0KSB7Ci0JCXN1cGVyKGV2ZW50LmdldE9mZnNldCgpLCBldmVudC5nZXRMZW5ndGgoKSwgZXZlbnQuZ2V0VGV4dCgpLCByZXBsYWNlZFRleHQsIGV2ZW50LCB0cnVlKTsKLQl9Ci0KLQlUZXN0VGV4dEV2ZW50KFN0cmluZyB0ZXh0KSB7Ci0JCXN1cGVyKDAsIDAsIHRleHQsIChTdHJpbmcpIG51bGwsIChEb2N1bWVudEV2ZW50KSBudWxsLCB0cnVlKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9UZXN0VGV4dFZpZXdlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvVGVzdFRleHRWaWV3ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDE4NTliMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9UZXN0VGV4dFZpZXdlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDM2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlc3RzOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLlN0eWxlZFRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkNvbG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5CYWRMb2NhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkRvY3VtZW50RXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JQXV0b0luZGVudFN0cmF0ZWd5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50TGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRXZlbnRDb25zdW1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklGaW5kUmVwbGFjZVRhcmdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVGV4dERvdWJsZUNsaWNrU3RyYXRlZ3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVGV4dEhvdmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVRleHRJbnB1dExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVRleHRMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUZXh0T3BlcmF0aW9uVGFyZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVRleHRWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVW5kb01hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVmlld3BvcnRMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LlRleHRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LlRleHRQcmVzZW50YXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5zb3VyY2UuQW5ub3RhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnNvdXJjZS5JQW5ub3RhdGlvbkhvdmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuc291cmNlLklBbm5vdGF0aW9uTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5zb3VyY2UuSVNvdXJjZVZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnNvdXJjZS5Tb3VyY2VWaWV3ZXJDb25maWd1cmF0aW9uOwotCi0KLQotCi1wdWJsaWMgY2xhc3MgVGVzdFRleHRWaWV3ZXIgaW1wbGVtZW50cyBJU291cmNlVmlld2VyLCBJRG9jdW1lbnRMaXN0ZW5lciB7Ci0KLQotCXByb3RlY3RlZCBJRG9jdW1lbnQgZkRvY3VtZW50OwotCXByb3RlY3RlZCBMaXN0IGZJbnB1dExpc3RlbmVycz0gbmV3IEFycmF5TGlzdCgpOwotCXByb3RlY3RlZCBMaXN0IGZUZXh0TGlzdGVuZXJzPSBuZXcgQXJyYXlMaXN0KCk7Ci0JcHJvdGVjdGVkIFRleHRQcmVzZW50YXRpb24gZlRleHRQcmVzZW50YXRpb247Ci0JcHJvdGVjdGVkIFBvaW50IGZTZWxlY3Rpb249IG5ldyBQb2ludCgtMSwgLTEpOwotCXByb3RlY3RlZCBTdHJpbmcgZkRlbGV0aW9uOwotCi0JLyoqCi0JICogQHNlZSBJVGV4dFZpZXdlciNzZXREb2N1bWVudChJRG9jdW1lbnQsIGludCwgaW50KQotCSAqLwotCXB1YmxpYyB2b2lkIHNldERvY3VtZW50KElEb2N1bWVudCBkb2N1bWVudCwgaW50IHAxLCBpbnQgcDIpIHsKLQkJc2V0RG9jdW1lbnQoZG9jdW1lbnQpOwotCX0KLQotCS8qKgotCSAqIEBzZWUgSVRleHRWaWV3ZXIjZ2V0RG9jdW1lbnQoKQotCSAqLwotCXB1YmxpYyBJRG9jdW1lbnQgZ2V0RG9jdW1lbnQoKSB7Ci0JCXJldHVybiBmRG9jdW1lbnQ7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJVGV4dFZpZXdlciNzZXREb2N1bWVudChJRG9jdW1lbnQpCi0JICovCi0JcHVibGljIHZvaWQgc2V0RG9jdW1lbnQoSURvY3VtZW50IGRvY3VtZW50KSB7Ci0JCUlEb2N1bWVudCBvbGREb2M9IGZEb2N1bWVudDsKLQkJZmlyZVRleHRJbnB1dENoYW5nZWQob2xkRG9jLCBkb2N1bWVudCwgdHJ1ZSk7Ci0KLQkJaWYgKG9sZERvYyAhPSBudWxsKQotCQkJb2xkRG9jLnJlbW92ZURvY3VtZW50TGlzdGVuZXIodGhpcyk7Ci0KLQkJZkRvY3VtZW50PSBkb2N1bWVudDsKLQotCQlpZiAoZkRvY3VtZW50ICE9IG51bGwpIHsKLQkJCWZpcmVUZXh0Q2hhbmdlZChuZXcgVGVzdFRleHRFdmVudChmRG9jdW1lbnQuZ2V0KCkpKTsKLQkJCWZEb2N1bWVudC5hZGREb2N1bWVudExpc3RlbmVyKHRoaXMpOwotCQl9Ci0KLQkJZmlyZVRleHRJbnB1dENoYW5nZWQob2xkRG9jLCBkb2N1bWVudCwgZmFsc2UpOwotCX0KLQotCS8qKgotCSAqIEBzZWUgSVRleHRWaWV3ZXIjcmVtb3ZlVGV4dElucHV0TGlzdGVuZXIoSVRleHRJbnB1dExpc3RlbmVyKQotCSAqLwotCXB1YmxpYyB2b2lkIHJlbW92ZVRleHRJbnB1dExpc3RlbmVyKElUZXh0SW5wdXRMaXN0ZW5lciBsaXN0ZW5lcikgewotCQlmSW5wdXRMaXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVyKTsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI2FkZFRleHRJbnB1dExpc3RlbmVyKElUZXh0SW5wdXRMaXN0ZW5lcikKLQkgKi8KLQlwdWJsaWMgdm9pZCBhZGRUZXh0SW5wdXRMaXN0ZW5lcihJVGV4dElucHV0TGlzdGVuZXIgbGlzdGVuZXIpIHsKLQkJaWYgKCFmSW5wdXRMaXN0ZW5lcnMuY29udGFpbnMobGlzdGVuZXIpKQotCQkJZklucHV0TGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgZmlyZVRleHRJbnB1dENoYW5nZWQoSURvY3VtZW50IG9sZERvYywgSURvY3VtZW50IG5ld0RvYywgYm9vbGVhbiBhYm91dCkgewotCQlJdGVyYXRvciBlPSBuZXcgQXJyYXlMaXN0KGZJbnB1dExpc3RlbmVycykuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGUuaGFzTmV4dCgpKSB7Ci0JCQlJVGV4dElucHV0TGlzdGVuZXIgbD0gKElUZXh0SW5wdXRMaXN0ZW5lcikgZS5uZXh0KCk7Ci0JCQlpZiAoYWJvdXQpCi0JCQkJbC5pbnB1dERvY3VtZW50QWJvdXRUb0JlQ2hhbmdlZChvbGREb2MsIG5ld0RvYyk7Ci0JCQllbHNlCi0JCQkJbC5pbnB1dERvY3VtZW50Q2hhbmdlZChvbGREb2MsIG5ld0RvYyk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI2NoYW5nZVRleHRQcmVzZW50YXRpb24oVGV4dFByZXNlbnRhdGlvbiwgYm9vbGVhbikKLQkgKi8KLQlwdWJsaWMgdm9pZCBjaGFuZ2VUZXh0UHJlc2VudGF0aW9uKFRleHRQcmVzZW50YXRpb24gcHJlc2VudGF0aW9uLCBib29sZWFuIHAxKSB7Ci0JCWZUZXh0UHJlc2VudGF0aW9uPSBwcmVzZW50YXRpb247Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJVGV4dFZpZXdlciNpbnZhbGlkYXRlVGV4dFByZXNlbnRhdGlvbigpCi0JICovCi0JcHVibGljIHZvaWQgaW52YWxpZGF0ZVRleHRQcmVzZW50YXRpb24oKSB7Ci0JfQotCi0JcHVibGljIFRleHRQcmVzZW50YXRpb24gZ2V0VGV4dFByZXNlbnRhdGlvbigpIHsKLQkJcmV0dXJuIGZUZXh0UHJlc2VudGF0aW9uOwotCX0KLQotCXB1YmxpYyB2b2lkIGRvY3VtZW50QWJvdXRUb0JlQ2hhbmdlZChEb2N1bWVudEV2ZW50IGV2ZW50KSB7Ci0JCXRyeSB7Ci0JCQlmRGVsZXRpb249IGZEb2N1bWVudC5nZXQoZXZlbnQuZ2V0T2Zmc2V0KCksIGV2ZW50LmdldExlbmd0aCgpKTsKLQkJfSBjYXRjaCAoQmFkTG9jYXRpb25FeGNlcHRpb24geCkgewotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgZG9jdW1lbnRDaGFuZ2VkKERvY3VtZW50RXZlbnQgZXZlbnQpIHsKLQkJZmlyZVRleHRDaGFuZ2VkKG5ldyBUZXN0VGV4dEV2ZW50KGV2ZW50LCBmRGVsZXRpb24pKTsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI2dldEZpbmRSZXBsYWNlVGFyZ2V0KCkKLQkgKi8KLQlwdWJsaWMgSUZpbmRSZXBsYWNlVGFyZ2V0IGdldEZpbmRSZXBsYWNlVGFyZ2V0KCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI2dldFRleHRPcGVyYXRpb25UYXJnZXQoKQotCSAqLwotCXB1YmxpYyBJVGV4dE9wZXJhdGlvblRhcmdldCBnZXRUZXh0T3BlcmF0aW9uVGFyZ2V0KCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI3NldFRleHRDb2xvcihDb2xvciwgaW50LCBpbnQsIGJvb2xlYW4pCi0JICovCi0JcHVibGljIHZvaWQgc2V0VGV4dENvbG9yKENvbG9yIHAwLCBpbnQgcDEsIGludCBwMiwgYm9vbGVhbiBwMykgewotCX0KLQotCS8qKgotCSAqIEBzZWUgSVRleHRWaWV3ZXIjc2V0VGV4dENvbG9yKENvbG9yKQotCSAqLwotCXB1YmxpYyB2b2lkIHNldFRleHRDb2xvcihDb2xvciBwMCkgewotCX0KLQotCS8qKgotCSAqIEBzZWUgSVRleHRWaWV3ZXIjb3ZlcmxhcHNXaXRoVmlzaWJsZVJlZ2lvbihpbnQsIGludCkKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBvdmVybGFwc1dpdGhWaXNpYmxlUmVnaW9uKGludCBwMCwgaW50IHAxKSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI2dldFZpc2libGVSZWdpb24oKQotCSAqLwotCXB1YmxpYyBJUmVnaW9uIGdldFZpc2libGVSZWdpb24oKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIEBzZWUgSVRleHRWaWV3ZXIjcmVzZXRWaXNpYmxlUmVnaW9uKCkKLQkgKi8KLQlwdWJsaWMgdm9pZCByZXNldFZpc2libGVSZWdpb24oKSB7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJVGV4dFZpZXdlciNzZXRWaXNpYmxlUmVnaW9uKGludCwgaW50KQotCSAqLwotCXB1YmxpYyB2b2lkIHNldFZpc2libGVSZWdpb24oaW50IHAwLCBpbnQgcDEpIHsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI3NldEluZGVudFByZWZpeGVzKFN0cmluZ1tdLCBTdHJpbmcpCi0JICovCi0JcHVibGljIHZvaWQgc2V0SW5kZW50UHJlZml4ZXMoU3RyaW5nW10gcDAsIFN0cmluZyBwMSkgewotCX0KLQotCS8qKgotCSAqIEBzZWUgSVRleHRWaWV3ZXIjc2V0RGVmYXVsdFByZWZpeGVzKFN0cmluZ1tdLCBTdHJpbmcpCi0JICovCi0JcHVibGljIHZvaWQgc2V0RGVmYXVsdFByZWZpeGVzKFN0cmluZ1tdIHAwLCBTdHJpbmcgcDEpIHsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI3NldEF1dG9JbmRlbnRTdHJhdGVneShJQXV0b0luZGVudFN0cmF0ZWd5LCBTdHJpbmcpCi0JICovCi0JcHVibGljIHZvaWQgc2V0QXV0b0luZGVudFN0cmF0ZWd5KElBdXRvSW5kZW50U3RyYXRlZ3kgcDAsIFN0cmluZyBwMSkgewotCX0KLQotCS8qKgotCSAqIEBzZWUgSVRleHRWaWV3ZXIjc2V0VGV4dERvdWJsZUNsaWNrU3RyYXRlZ3koSVRleHREb3VibGVDbGlja1N0cmF0ZWd5LCBTdHJpbmcpCi0JICovCi0JcHVibGljIHZvaWQgc2V0VGV4dERvdWJsZUNsaWNrU3RyYXRlZ3koSVRleHREb3VibGVDbGlja1N0cmF0ZWd5IHAwLCBTdHJpbmcgcDEpIHsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI3NldFVuZG9NYW5hZ2VyKElVbmRvTWFuYWdlcikKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRVbmRvTWFuYWdlcihJVW5kb01hbmFnZXIgcDApIHsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI2dldFRleHRXaWRnZXQoKQotCSAqLwotCXB1YmxpYyBTdHlsZWRUZXh0IGdldFRleHRXaWRnZXQoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFRleHRIb3ZlcihJVGV4dEhvdmVyIHAwLCBTdHJpbmcgcDEpIHsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI2FjdGl2YXRlUGx1Z2lucygpCi0JICovCi0JcHVibGljIHZvaWQgYWN0aXZhdGVQbHVnaW5zKCkgewotCX0KLQotCS8qKgotCSAqIEBzZWUgSVRleHRWaWV3ZXIjcmVzZXRQbHVnaW5zKCkKLQkgKi8KLQlwdWJsaWMgdm9pZCByZXNldFBsdWdpbnMoKSB7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJVGV4dFZpZXdlciNnZXRUb3BJbnNldCgpCi0JICovCi0JcHVibGljIGludCBnZXRUb3BJbnNldCgpIHsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJVGV4dFZpZXdlciNnZXRCb3R0b21JbmRleEVuZE9mZnNldCgpCi0JICovCi0JcHVibGljIGludCBnZXRCb3R0b21JbmRleEVuZE9mZnNldCgpIHsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJVGV4dFZpZXdlciNnZXRCb3R0b21JbmRleCgpCi0JICovCi0JcHVibGljIGludCBnZXRCb3R0b21JbmRleCgpIHsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJVGV4dFZpZXdlciNnZXRUb3BJbmRleFN0YXJ0T2Zmc2V0KCkKLQkgKi8KLQlwdWJsaWMgaW50IGdldFRvcEluZGV4U3RhcnRPZmZzZXQoKSB7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qKgotCSAqIEBzZWUgSVRleHRWaWV3ZXIjZ2V0VG9wSW5kZXgoKQotCSAqLwotCXB1YmxpYyBpbnQgZ2V0VG9wSW5kZXgoKSB7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qKgotCSAqIEBzZWUgSVRleHRWaWV3ZXIjc2V0VG9wSW5kZXgoaW50KQotCSAqLwotCXB1YmxpYyB2b2lkIHNldFRvcEluZGV4KGludCBwMCkgewotCX0KLQotCS8qKgotCSAqIEBzZWUgSVRleHRWaWV3ZXIjcmV2ZWFsUmFuZ2UoaW50LCBpbnQpCi0JICovCi0JcHVibGljIHZvaWQgcmV2ZWFsUmFuZ2UoaW50IHAwLCBpbnQgcDEpIHsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI2dldFNlbGVjdGVkUmFuZ2UoKQotCSAqLwotCXB1YmxpYyBQb2ludCBnZXRTZWxlY3RlZFJhbmdlKCkgewotCQlyZXR1cm4gZlNlbGVjdGlvbjsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI3NldFNlbGVjdGVkUmFuZ2UoaW50LCBpbnQpCi0JICovCi0JcHVibGljIHZvaWQgc2V0U2VsZWN0ZWRSYW5nZShpbnQgb2Zmc2V0LCBpbnQgbGVuZ3RoKSB7Ci0JCWZTZWxlY3Rpb24ueD0gb2Zmc2V0OwotCQlmU2VsZWN0aW9uLnk9IGxlbmd0aDsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI2lzRWRpdGFibGUoKQotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzRWRpdGFibGUoKSB7Ci0JCXJldHVybiB0cnVlOwotCX0KLQotCS8qKgotCSAqIEBzZWUgSVRleHRWaWV3ZXIjc2V0RWRpdGFibGUoYm9vbGVhbikKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRFZGl0YWJsZShib29sZWFuIHAwKSB7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJVGV4dFZpZXdlciNzZXRFdmVudENvbnN1bWVyKElFdmVudENvbnN1bWVyKQotCSAqLwotCXB1YmxpYyB2b2lkIHNldEV2ZW50Q29uc3VtZXIoSUV2ZW50Q29uc3VtZXIgcDApIHsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI3JlbW92ZVRleHRMaXN0ZW5lcihJVGV4dExpc3RlbmVyKQotCSAqLwotCXB1YmxpYyB2b2lkIHJlbW92ZVRleHRMaXN0ZW5lcihJVGV4dExpc3RlbmVyIGxpc3RlbmVyKSB7Ci0JCWZUZXh0TGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgZmlyZVRleHRDaGFuZ2VkKFRleHRFdmVudCBldmVudCkgewotCQlJdGVyYXRvciBlPSBuZXcgQXJyYXlMaXN0KGZUZXh0TGlzdGVuZXJzKS5pdGVyYXRvcigpOwotCQl3aGlsZSAoZS5oYXNOZXh0KCkpIHsKLQkJCUlUZXh0TGlzdGVuZXIgbD0gKElUZXh0TGlzdGVuZXIpIGUubmV4dCgpOwotCQkJbC50ZXh0Q2hhbmdlZChldmVudCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI2FkZFRleHRMaXN0ZW5lcihJVGV4dExpc3RlbmVyKQotCSAqLwotCXB1YmxpYyB2b2lkIGFkZFRleHRMaXN0ZW5lcihJVGV4dExpc3RlbmVyIGxpc3RlbmVyKSB7Ci0JCWlmICghZlRleHRMaXN0ZW5lcnMuY29udGFpbnMobGlzdGVuZXIpKQotCQkJZlRleHRMaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI3JlbW92ZVZpZXdwb3J0TGlzdGVuZXIoSVZpZXdwb3J0TGlzdGVuZXIpCi0JICovCi0JcHVibGljIHZvaWQgcmVtb3ZlVmlld3BvcnRMaXN0ZW5lcihJVmlld3BvcnRMaXN0ZW5lciBwMCkgewotCX0KLQotCS8qKgotCSAqIEBzZWUgSVRleHRWaWV3ZXIjYWRkVmlld3BvcnRMaXN0ZW5lcihJVmlld3BvcnRMaXN0ZW5lcikKLQkgKi8KLQlwdWJsaWMgdm9pZCBhZGRWaWV3cG9ydExpc3RlbmVyKElWaWV3cG9ydExpc3RlbmVyIHAwKSB7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJU291cmNlVmlld2VyI2dldFNlbGVjdGlvblByb3ZpZGVyKCkKLQkgKi8KLQlwdWJsaWMgSVNlbGVjdGlvblByb3ZpZGVyIGdldFNlbGVjdGlvblByb3ZpZGVyKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElTb3VyY2VWaWV3ZXIjc2hvd0Fubm90YXRpb25zKGJvb2xlYW4pCi0JICovCi0JcHVibGljIHZvaWQgc2hvd0Fubm90YXRpb25zKGJvb2xlYW4gcDApIHsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElTb3VyY2VWaWV3ZXIjcmVtb3ZlUmFuZ2VJbmRpY2F0aW9uKCkKLQkgKi8KLQlwdWJsaWMgdm9pZCByZW1vdmVSYW5nZUluZGljYXRpb24oKSB7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJU291cmNlVmlld2VyI2dldFJhbmdlSW5kaWNhdGlvbigpCi0JICovCi0JcHVibGljIElSZWdpb24gZ2V0UmFuZ2VJbmRpY2F0aW9uKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElTb3VyY2VWaWV3ZXIjc2V0UmFuZ2VJbmRpY2F0aW9uKGludCwgaW50LCBib29sZWFuKQotCSAqLwotCXB1YmxpYyB2b2lkIHNldFJhbmdlSW5kaWNhdGlvbihpbnQgcDAsIGludCBwMSwgYm9vbGVhbiBwMikgewotCX0KLQotCS8qKgotCSAqIEBzZWUgSVNvdXJjZVZpZXdlciNzZXRSYW5nZUluZGljYXRvcihBbm5vdGF0aW9uKQotCSAqLwotCXB1YmxpYyB2b2lkIHNldFJhbmdlSW5kaWNhdG9yKEFubm90YXRpb24gcDApIHsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElTb3VyY2VWaWV3ZXIjZ2V0QW5ub3RhdGlvbk1vZGVsKCkKLQkgKi8KLQlwdWJsaWMgSUFubm90YXRpb25Nb2RlbCBnZXRBbm5vdGF0aW9uTW9kZWwoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIEBzZWUgSVNvdXJjZVZpZXdlciNzZXREb2N1bWVudChJRG9jdW1lbnQsIElBbm5vdGF0aW9uTW9kZWwsIGludCwgaW50KQotCSAqLwotCXB1YmxpYyB2b2lkIHNldERvY3VtZW50KElEb2N1bWVudCBwMCwgSUFubm90YXRpb25Nb2RlbCBwMSwgaW50IHAyLCBpbnQgcDMpIHsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElTb3VyY2VWaWV3ZXIjc2V0RG9jdW1lbnQoSURvY3VtZW50LCBJQW5ub3RhdGlvbk1vZGVsKQotCSAqLwotCXB1YmxpYyB2b2lkIHNldERvY3VtZW50KElEb2N1bWVudCBwMCwgSUFubm90YXRpb25Nb2RlbCBwMSkgewotCX0KLQotCS8qKgotCSAqIEBzZWUgSVNvdXJjZVZpZXdlciNzZXRBbm5vdGF0aW9uSG92ZXIoSUFubm90YXRpb25Ib3ZlcikKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRBbm5vdGF0aW9uSG92ZXIoSUFubm90YXRpb25Ib3ZlciBwMCkgewotCX0KLQotCS8qKgotCSAqIEBzZWUgSVNvdXJjZVZpZXdlciNjb25maWd1cmUoU291cmNlVmlld2VyQ29uZmlndXJhdGlvbikKLQkgKi8KLQlwdWJsaWMgdm9pZCBjb25maWd1cmUoU291cmNlVmlld2VyQ29uZmlndXJhdGlvbiBwMCkgewotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL1RleHRIb3ZlclBvcHVwVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvVGV4dEhvdmVyUG9wdXBUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiZmE2OTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvVGV4dEhvdmVyUG9wdXBUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuamZhY2UudGV4dC50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi0KLXB1YmxpYyBjbGFzcyBUZXh0SG92ZXJQb3B1cFRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQotCXB1YmxpYyBUZXh0SG92ZXJQb3B1cFRlc3QoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IFRlc3RTdWl0ZShUZXh0SG92ZXJQb3B1cFRlc3QuY2xhc3MpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgewotCX0KLQotCi0JcHJvdGVjdGVkIGludCBzZWFyY2goaW50W10gYXJyYXksIGludCB4KSB7Ci0JCWludCBsb3c9IDA7Ci0JCWludCBoaWdoPSBhcnJheS5sZW5ndGggLTE7Ci0KLQkJd2hpbGUgKGhpZ2ggPiBsb3cpIHsKLQkJCWludCBvZmZzZXQ9IChsb3cgKyBoaWdoKSAvIDI7Ci0JCQlpbnQgbG9va3VwPSBhcnJheVtvZmZzZXRdOwotCQkJaWYgKGxvb2t1cCA+IHgpCi0JCQkJaGlnaD0gb2Zmc2V0IC0gMTsKLQkJCWVsc2UgaWYgKGxvb2t1cCA8IHgpCi0JCQkJbG93PSBvZmZzZXQgKyAxOwotCQkJZWxzZQotCQkJCWxvdz0gaGlnaD0gb2Zmc2V0OwotCQl9Ci0KLQkJcmV0dXJuIGhpZ2g7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlYXJjaCgpIHsKLQkJaW50W10gdmFsdWVzPSB7IDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDkgfTsKLQkJZm9yIChpbnQgaT0gMDsgaSA8IDEwOyBpKyspIHsKLQkJCWludCByZXN1bHQ9IHNlYXJjaCh2YWx1ZXMsIGkpOwotCQkJYXNzZXJ0VHJ1ZShpID09IHJlc3VsdCk7Ci0JCX0KLQotCQlpbnRbXSB2YWx1ZXMyPSB7IDAsIDMsIDYsIDksIDEyLCAxNSwgMTgsIDIxLCAyNCwgMjcgfTsKLQkJZm9yIChpbnQgaT0gMDsgaSA8IDEwOyBpKyspIHsKLQkJCWludCByZXN1bHQ9IHNlYXJjaCh2YWx1ZXMyLCBpICogMyk7Ci0JCQlhc3NlcnRUcnVlKGkgPT0gcmVzdWx0KTsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL1RleHRQcmVzZW50YXRpb25UZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9UZXh0UHJlc2VudGF0aW9uVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODllOGRjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL1RleHRQcmVzZW50YXRpb25UZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQudGVzdHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5TdHlsZVJhbmdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Db2xvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5SZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5UZXh0UHJlc2VudGF0aW9uOwotCi1wdWJsaWMgY2xhc3MgVGV4dFByZXNlbnRhdGlvblRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTk9STUFMPSBTV1QuTk9STUFMOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBCT0xEPSBTV1QuQk9MRDsKLS8vCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBJVEFMSUM9IFNXVC5JVEFMSUM7Ci0KLQlwcml2YXRlIFRleHRQcmVzZW50YXRpb24gZlRleHRQcmVzZW50YXRpb247Ci0JcHJpdmF0ZSBTdHlsZVJhbmdlW10gZkFsbFJhbmdlczsKLQlwcml2YXRlIFN0eWxlUmFuZ2VbXSBmTm9uRGVmYXVsdFJhbmdlczsKLQotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBUZXN0U3VpdGUoVGV4dFByZXNlbnRhdGlvblRlc3QuY2xhc3MpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgewotCQlzZXRVcFN0eWxlUmFuZ2VzKCk7Ci0JCXNldFVwVGV4dFByZXNlbnRhdGlvbigpOwotCX0KLQotCXByaXZhdGUgdm9pZCBzZXRVcFN0eWxlUmFuZ2VzKCkgewotCQlmQWxsUmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICAwLCAgIDQsIE5PUk1BTCksCi0JCQljcmVhdGVTdHlsZVJhbmdlKCAgNCwgIDIwLCBCT0xEKSwKLQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDIwLCAgNDcsIE5PUk1BTCksCi0JCQljcmVhdGVTdHlsZVJhbmdlKCA0NywgIDU0LCBCT0xEKSwKLQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDU0LCAgOTYsIE5PUk1BTCksCi0JCQljcmVhdGVTdHlsZVJhbmdlKCA5NiwgMTAyLCBCT0xEKSwKLQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMTAyLCAxNDAsIE5PUk1BTCkKLQkJfTsKLQotCQlmTm9uRGVmYXVsdFJhbmdlcz0gbmV3IFN0eWxlUmFuZ2VbXSB7Ci0JCQljcmVhdGVTdHlsZVJhbmdlKCAgNCwgIDIwLCBCT0xEKSwKLQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDQ3LCAgNTQsIEJPTEQpLAotCQkJY3JlYXRlU3R5bGVSYW5nZSggOTYsIDEwMiwgQk9MRCkKLQkJfTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgc2V0VXBUZXh0UHJlc2VudGF0aW9uKCkgewotCQlmVGV4dFByZXNlbnRhdGlvbj0gbmV3IFRleHRQcmVzZW50YXRpb24oKTsKLQkJZlRleHRQcmVzZW50YXRpb24uc2V0RGVmYXVsdFN0eWxlUmFuZ2UoY3JlYXRlU3R5bGVSYW5nZSgwLCAxNDAsIE5PUk1BTCkpOwotCQlmb3IgKGludCBpPSAwOyBpIDwgZkFsbFJhbmdlcy5sZW5ndGg7IGkrKykKLQkJCWZUZXh0UHJlc2VudGF0aW9uLmFkZFN0eWxlUmFuZ2UoZkFsbFJhbmdlc1tpXSk7Ci0JfQotCi0JcHJpdmF0ZSBTdHlsZVJhbmdlIGNyZWF0ZVN0eWxlUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kLCBpbnQgc3R5bGUpIHsKLQkJcmV0dXJuIGNyZWF0ZVN0eWxlUmFuZ2Uoc3RhcnQsIGVuZCwgbnVsbCwgbnVsbCwgc3R5bGUpOwotCX0KLQotCXByaXZhdGUgU3R5bGVSYW5nZSBjcmVhdGVTdHlsZVJhbmdlKGludCBzdGFydCwgaW50IGVuZCwgQ29sb3IgZm9yZWdyb3VuZCwgQ29sb3IgYmFja2dyb3VuZCwgaW50IHN0eWxlKSB7Ci0JCXJldHVybiBuZXcgU3R5bGVSYW5nZShzdGFydCwgZW5kIC0gc3RhcnQsIGZvcmVncm91bmQsIGJhY2tncm91bmQsIHN0eWxlKTsKLQl9Ci0KLQlwcml2YXRlIFN0eWxlUmFuZ2UgY3JlYXRlU3R5bGVSYW5nZShpbnQgc3RhcnQsIGludCBlbmQsIGludCBmb3JlZ3JvdW5kLCBpbnQgYmFja2dyb3VuZCwgaW50IHN0eWxlKSB7Ci0JCXJldHVybiBjcmVhdGVTdHlsZVJhbmdlKHN0YXJ0LCBlbmQsIGNyZWF0ZUNvbG9yKGZvcmVncm91bmQsIGZvcmVncm91bmQsIGZvcmVncm91bmQpLCBjcmVhdGVDb2xvcihiYWNrZ3JvdW5kLCBiYWNrZ3JvdW5kLCBiYWNrZ3JvdW5kKSwgc3R5bGUpOwotCX0KLQotCXByaXZhdGUgRGlzcGxheSBmRGlzcGxheT0gRGlzcGxheS5nZXREZWZhdWx0KCk7Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IGNvbG9yLgotCSAqIAotCSAqIEBwYXJhbSByZWQgdGhlIGFtb3VudCBvZiByZWQgaW4gdGhlIGNvbG9yCi0JICogQHBhcmFtIGdyZWVuIHRoZSBhbW91bnQgb2YgZ3JlZW4gaW4gdGhlIGNvbG9yCi0JICogQHBhcmFtIGJsdWUgdGhlIGFtb3VudCBvZiBibHVlIGluIHRoZSBjb2xvcgotCSAqIEByZXR1cm4gPGNvZGU+bnVsbDwvY29kZT4gaWYgYW55IG9mIHRoZSBwYXJhbWV0ZXJzIGlzIHNtYWxsZXIgdGhhbiAwIG9yIGdyZWF0ZXIgdGhhbiAyNTUKLQkgKi8KLQlwcml2YXRlIENvbG9yIGNyZWF0ZUNvbG9yKGludCByZWQsIGludCBncmVlbiwgaW50IGJsdWUpIHsKLQkJaWYgKHJlZCA8IDAgfHwgcmVkID4gMjU1IHx8IGdyZWVuIDwgMCB8fCBncmVlbiA+IDI1NSB8fCBibHVlIDwgMCB8fCBibHVlID4gMjU1KQotCQkJcmV0dXJuIG51bGw7Ci0JCXJldHVybiBuZXcgQ29sb3IoZkRpc3BsYXksIHJlZCwgZ3JlZW4sIGJsdWUpOwotCX0KLQotCXByaXZhdGUgdm9pZCBjaGVja1JlZ2lvbnMoU3R5bGVSYW5nZVtdIGV4cGVjdGVkQWxsUmFuZ2VzLCBTdHlsZVJhbmdlW10gZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzKSB7Ci0JCUl0ZXJhdG9yIGU9IGZUZXh0UHJlc2VudGF0aW9uLmdldEFsbFN0eWxlUmFuZ2VJdGVyYXRvcigpOwotCQlmb3IgKGludCBpPSAwOyBpIDwgZXhwZWN0ZWRBbGxSYW5nZXMubGVuZ3RoOyBpKyspIHsKLQkJCWFzc2VydFRydWUoZS5oYXNOZXh0KCkpOwotCQkJYXNzZXJ0RXF1YWxzKGV4cGVjdGVkQWxsUmFuZ2VzW2ldLCBlLm5leHQoKSk7Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSghZS5oYXNOZXh0KCkpOwotCi0JCWU9IGZUZXh0UHJlc2VudGF0aW9uLmdldE5vbkRlZmF1bHRTdHlsZVJhbmdlSXRlcmF0b3IoKTsKLQkJZm9yIChpbnQgaT0gMDsgaSA8IGV4cGVjdGVkTm9uRGVmYXVsdFJhbmdlcy5sZW5ndGg7IGkrKykgewotCQkJYXNzZXJ0VHJ1ZShlLmhhc05leHQoKSk7Ci0JCQlhc3NlcnRFcXVhbHMoZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzW2ldLCBlLm5leHQoKSk7Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSghZS5oYXNOZXh0KCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RVbmNsaXBwZWRSZWdpb25zKCkgewotCQljaGVja1JlZ2lvbnMoZkFsbFJhbmdlcywgZk5vbkRlZmF1bHRSYW5nZXMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDbGlwcGVkUmVnaW9uczEoKSB7Ci0JCWZUZXh0UHJlc2VudGF0aW9uLnNldFJlc3VsdFdpbmRvdyhuZXcgUmVnaW9uKDAsIDE0MCkpOwotCQljaGVja1JlZ2lvbnMoZkFsbFJhbmdlcywgZk5vbkRlZmF1bHRSYW5nZXMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDbGlwcGVkUmVnaW9uczIoKSB7Ci0KLQkJZlRleHRQcmVzZW50YXRpb24uc2V0UmVzdWx0V2luZG93KG5ldyBSZWdpb24oMzAsIDcwKSk7Ci0KLQkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkQWxsUmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICAwLCAxNywgTk9STUFMKSwKLQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDE3LCAyNCwgQk9MRCksCi0JCQljcmVhdGVTdHlsZVJhbmdlKCAyNCwgNjYsIE5PUk1BTCksCi0JCQljcmVhdGVTdHlsZVJhbmdlKCA2NiwgNzAsIEJPTEQpCi0JCX07Ci0KLQkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkTm9uRGVmYXVsdFJhbmdlcz0gbmV3IFN0eWxlUmFuZ2VbXSB7Ci0JCQljcmVhdGVTdHlsZVJhbmdlKCAxNywgMjQsIEJPTEQpLAotCQkJY3JlYXRlU3R5bGVSYW5nZSggNjYsIDcwLCBCT0xEKQotCQl9OwotCi0JCWNoZWNrUmVnaW9ucyhleHBlY3RlZEFsbFJhbmdlcywgZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzKTsKLQl9Ci0KLQkvKioKLQkgKiBNZXJnZSByYW5nZSBhdCBzdGFydCBvZiBmaXJzdCBleGlzdGluZyByYW5nZS4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0TWVyZ2VTdHlsZVJhbmdlMSgpIHsKLQkJU3R5bGVSYW5nZSByYW5nZT0gY3JlYXRlU3R5bGVSYW5nZSgwLCAyLCAxLCAtMSwgTk9STUFMKTsKLQkJZlRleHRQcmVzZW50YXRpb24ubWVyZ2VTdHlsZVJhbmdlKHJhbmdlKTsKLQotCQlTdHlsZVJhbmdlW10gZXhwZWN0ZWRBbGxSYW5nZXM9IG5ldyBTdHlsZVJhbmdlW10gewotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMCwgMiwgMSwgLTEsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDIsICAgNCwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgNCwgIDIwLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAyMCwgIDQ3LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDQ3LCAgNTQsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDU0LCAgOTYsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggOTYsIDEwMiwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSgxMDIsIDE0MCwgTk9STUFMKSwKLQkJfTsKLQotCQlTdHlsZVJhbmdlW10gZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDAsIDIsIDEsIC0xLCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICA0LCAgMjAsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDQ3LCAgNTQsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDk2LCAxMDIsIEJPTEQpLAotCQl9OwotCi0JCWNoZWNrUmVnaW9ucyhleHBlY3RlZEFsbFJhbmdlcywgZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzKTsKLQl9Ci0KLQkvKioKLQkgKiBNZXJnZSByYW5nZSBhdCBlbmQgb2YgbGFzdCBleGlzdGluZyByYW5nZS4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0TWVyZ2VTdHlsZVJhbmdlMigpIHsKLQkJU3R5bGVSYW5nZSByYW5nZT0gY3JlYXRlU3R5bGVSYW5nZSgxMzgsIDE0MCwgMSwgLTEsIE5PUk1BTCk7Ci0JCWZUZXh0UHJlc2VudGF0aW9uLm1lcmdlU3R5bGVSYW5nZShyYW5nZSk7Ci0KLQkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkQWxsUmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgMCwgICA0LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICA0LCAgMjAsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDIwLCAgNDcsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggNDcsICA1NCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggNTQsICA5NiwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA5NiwgMTAyLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDEwMiwgMTM4LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMTM4LCAxNDAsIDEsIC0xLCBOT1JNQUwpLAotCQl9OwotCi0JCVN0eWxlUmFuZ2VbXSBleHBlY3RlZE5vbkRlZmF1bHRSYW5nZXM9IG5ldyBTdHlsZVJhbmdlW10gewotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICA0LCAgMjAsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDQ3LCAgNTQsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDk2LCAxMDIsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMTM4LCAxNDAsIDEsIC0xLCBOT1JNQUwpLAotCQl9OwotCi0JCWNoZWNrUmVnaW9ucyhleHBlY3RlZEFsbFJhbmdlcywgZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzKTsKLQl9Ci0KLQkvKioKLQkgKiBNZXJnZSByYW5nZSBhdCBzdGFydCBvZiBleGlzdGluZyBkZWZhdWx0IHJhbmdlLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RNZXJnZVN0eWxlUmFuZ2UzKCkgewotCQlTdHlsZVJhbmdlIHJhbmdlPSBjcmVhdGVTdHlsZVJhbmdlKDIwLCAyMiwgMSwgLTEsIE5PUk1BTCk7Ci0JCWZUZXh0UHJlc2VudGF0aW9uLm1lcmdlU3R5bGVSYW5nZShyYW5nZSk7Ci0KLQkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkQWxsUmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgMCwgICA0LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICA0LCAgMjAsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMjAsIDIyLCAxLCAtMSwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAyMiwgIDQ3LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDQ3LCAgNTQsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDU0LCAgOTYsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggOTYsIDEwMiwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSgxMDIsIDE0MCwgTk9STUFMKSwKLQkJfTsKLQotCQlTdHlsZVJhbmdlW10gZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgNCwgIDIwLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDIwLCAyMiwgMSwgLTEsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggNDcsICA1NCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggOTYsIDEwMiwgQk9MRCksCi0JCX07Ci0KLQkJY2hlY2tSZWdpb25zKGV4cGVjdGVkQWxsUmFuZ2VzLCBleHBlY3RlZE5vbkRlZmF1bHRSYW5nZXMpOwotCX0KLQotCS8qKgotCSAqIE1lcmdlIHJhbmdlIHdpdGhpbiBleGlzdGluZyBkZWZhdWx0IHJhbmdlLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RNZXJnZVN0eWxlUmFuZ2U0KCkgewotCQlTdHlsZVJhbmdlIHJhbmdlPSBjcmVhdGVTdHlsZVJhbmdlKDIyLCAyNCwgMSwgLTEsIE5PUk1BTCk7Ci0JCWZUZXh0UHJlc2VudGF0aW9uLm1lcmdlU3R5bGVSYW5nZShyYW5nZSk7Ci0KLQkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkQWxsUmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgMCwgICA0LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICA0LCAgMjAsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDIwLCAgMjIsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSgyMiwgMjQsIDEsIC0xLCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDI0LCAgNDcsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggNDcsICA1NCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggNTQsICA5NiwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA5NiwgMTAyLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDEwMiwgMTQwLCBOT1JNQUwpLAotCQl9OwotCi0JCVN0eWxlUmFuZ2VbXSBleHBlY3RlZE5vbkRlZmF1bHRSYW5nZXM9IG5ldyBTdHlsZVJhbmdlW10gewotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICA0LCAgMjAsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMjIsIDI0LCAxLCAtMSwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA0NywgIDU0LCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA5NiwgMTAyLCBCT0xEKSwKLQkJfTsKLQotCQljaGVja1JlZ2lvbnMoZXhwZWN0ZWRBbGxSYW5nZXMsIGV4cGVjdGVkTm9uRGVmYXVsdFJhbmdlcyk7Ci0JfQotCi0JLyoqCi0JICogTWVyZ2UgcmFuZ2UgYXQgZW5kIG9mIGV4aXN0aW5nIGRlZmF1bHQgcmFuZ2UuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE1lcmdlU3R5bGVSYW5nZTUoKSB7Ci0JCVN0eWxlUmFuZ2UgcmFuZ2U9IGNyZWF0ZVN0eWxlUmFuZ2UoNDUsIDQ3LCAxLCAtMSwgTk9STUFMKTsKLQkJZlRleHRQcmVzZW50YXRpb24ubWVyZ2VTdHlsZVJhbmdlKHJhbmdlKTsKLQotCQlTdHlsZVJhbmdlW10gZXhwZWN0ZWRBbGxSYW5nZXM9IG5ldyBTdHlsZVJhbmdlW10gewotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICAwLCAgIDQsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDQsICAyMCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggMjAsICA0NSwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDQ1LCA0NywgMSwgLTEsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggNDcsICA1NCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggNTQsICA5NiwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA5NiwgMTAyLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDEwMiwgMTQwLCBOT1JNQUwpLAotCQl9OwotCi0JCVN0eWxlUmFuZ2VbXSBleHBlY3RlZE5vbkRlZmF1bHRSYW5nZXM9IG5ldyBTdHlsZVJhbmdlW10gewotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICA0LCAgMjAsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoNDUsIDQ3LCAxLCAtMSwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA0NywgIDU0LCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA5NiwgMTAyLCBCT0xEKSwKLQkJfTsKLQotCQljaGVja1JlZ2lvbnMoZXhwZWN0ZWRBbGxSYW5nZXMsIGV4cGVjdGVkTm9uRGVmYXVsdFJhbmdlcyk7Ci0JfQotCi0JLyoqCi0JICogTWVyZ2UgcmFuZ2UgYXQgc3RhcnQgb2YgZXhpc3Rpbmcgbm9uLWRlZmF1bHQgcmFuZ2UuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE1lcmdlU3R5bGVSYW5nZTYoKSB7Ci0JCVN0eWxlUmFuZ2UgcmFuZ2U9IGNyZWF0ZVN0eWxlUmFuZ2UoNDcsIDQ5LCAxLCAtMSwgTk9STUFMKTsKLQkJZlRleHRQcmVzZW50YXRpb24ubWVyZ2VTdHlsZVJhbmdlKHJhbmdlKTsKLQotCQlTdHlsZVJhbmdlW10gZXhwZWN0ZWRBbGxSYW5nZXM9IG5ldyBTdHlsZVJhbmdlW10gewotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICAwLCAgIDQsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDQsICAyMCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggMjAsICA0NywgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDQ3LCA0OSwgMSwgLTEsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDQ5LCAgNTQsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDU0LCAgOTYsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggOTYsIDEwMiwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSgxMDIsIDE0MCwgTk9STUFMKSwKLQkJfTsKLQotCQlTdHlsZVJhbmdlW10gZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgNCwgIDIwLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDQ3LCA0OSwgMSwgLTEsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDQ5LCAgNTQsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDk2LCAxMDIsIEJPTEQpLAotCQl9OwotCi0JCWNoZWNrUmVnaW9ucyhleHBlY3RlZEFsbFJhbmdlcywgZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzKTsKLQl9Ci0KLQkvKioKLQkgKiBNZXJnZSByYW5nZSB3aXRoaW4gZXhpc3Rpbmcgbm9uLWRlZmF1bHQgcmFuZ2UuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE1lcmdlU3R5bGVSYW5nZTcoKSB7Ci0JCVN0eWxlUmFuZ2UgcmFuZ2U9IGNyZWF0ZVN0eWxlUmFuZ2UoNDksIDUxLCAxLCAtMSwgTk9STUFMKTsKLQkJZlRleHRQcmVzZW50YXRpb24ubWVyZ2VTdHlsZVJhbmdlKHJhbmdlKTsKLQotCQlTdHlsZVJhbmdlW10gZXhwZWN0ZWRBbGxSYW5nZXM9IG5ldyBTdHlsZVJhbmdlW10gewotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICAwLCAgIDQsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDQsICAyMCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggMjAsICA0NywgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA0NywgIDQ5LCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDQ5LCA1MSwgMSwgLTEsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDUxLCAgNTQsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDU0LCAgOTYsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggOTYsIDEwMiwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSgxMDIsIDE0MCwgTk9STUFMKSwKLQkJfTsKLQotCQlTdHlsZVJhbmdlW10gZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgNCwgIDIwLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA0NywgIDQ5LCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDQ5LCA1MSwgMSwgLTEsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDUxLCAgNTQsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDk2LCAxMDIsIEJPTEQpLAotCQl9OwotCi0JCWNoZWNrUmVnaW9ucyhleHBlY3RlZEFsbFJhbmdlcywgZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzKTsKLQl9Ci0KLQkvKioKLQkgKiBNZXJnZSByYW5nZSBhdCBlbmQgb2YgZXhpc3Rpbmcgbm9uLWRlZmF1bHQgcmFuZ2UuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE1lcmdlU3R5bGVSYW5nZTgoKSB7Ci0JCVN0eWxlUmFuZ2UgcmFuZ2U9IGNyZWF0ZVN0eWxlUmFuZ2UoNTIsIDU0LCAxLCAtMSwgTk9STUFMKTsKLQkJZlRleHRQcmVzZW50YXRpb24ubWVyZ2VTdHlsZVJhbmdlKHJhbmdlKTsKLQotCQlTdHlsZVJhbmdlW10gZXhwZWN0ZWRBbGxSYW5nZXM9IG5ldyBTdHlsZVJhbmdlW10gewotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICAwLCAgIDQsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDQsICAyMCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggMjAsICA0NywgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA0NywgIDUyLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDUyLCA1NCwgMSwgLTEsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDU0LCAgOTYsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggOTYsIDEwMiwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSgxMDIsIDE0MCwgTk9STUFMKSwKLQkJfTsKLQotCQlTdHlsZVJhbmdlW10gZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgNCwgIDIwLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA0NywgIDUyLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDUyLCA1NCwgMSwgLTEsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDk2LCAxMDIsIEJPTEQpLAotCQl9OwotCi0JCWNoZWNrUmVnaW9ucyhleHBlY3RlZEFsbFJhbmdlcywgZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzKTsKLQl9Ci0KLQkvKioKLQkgKiBNZXJnZSByYW5nZSBmcm9tIGV4aXN0aW5nIGRlZmF1bHQgdG8gbm9uLWRlZmF1bHQgcmFuZ2UuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE1lcmdlU3R5bGVSYW5nZTkoKSB7Ci0JCVN0eWxlUmFuZ2UgcmFuZ2U9IGNyZWF0ZVN0eWxlUmFuZ2UoNDUsIDQ5LCAxLCAtMSwgTk9STUFMKTsKLQkJZlRleHRQcmVzZW50YXRpb24ubWVyZ2VTdHlsZVJhbmdlKHJhbmdlKTsKLQotCQlTdHlsZVJhbmdlW10gZXhwZWN0ZWRBbGxSYW5nZXM9IG5ldyBTdHlsZVJhbmdlW10gewotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICAwLCAgIDQsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDQsICAyMCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggMjAsICA0NSwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDQ1LCA0NywgMSwgLTEsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSg0NywgNDksIDEsIC0xLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA0OSwgIDU0LCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA1NCwgIDk2LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDk2LCAxMDIsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMTAyLCAxNDAsIE5PUk1BTCksCi0JCX07Ci0KLQkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkTm9uRGVmYXVsdFJhbmdlcz0gbmV3IFN0eWxlUmFuZ2VbXSB7Ci0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDQsICAyMCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSg0NSwgNDcsIDEsIC0xLCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoNDcsIDQ5LCAxLCAtMSwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggNDksICA1NCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggOTYsIDEwMiwgQk9MRCksCi0JCX07Ci0KLQkJY2hlY2tSZWdpb25zKGV4cGVjdGVkQWxsUmFuZ2VzLCBleHBlY3RlZE5vbkRlZmF1bHRSYW5nZXMpOwotCX0KLQotCS8qKgotCSAqIE1lcmdlIHJhbmdlIGZyb20gZXhpc3Rpbmcgbm9uLWRlZmF1bHQgdG8gZGVmYXVsdCByYW5nZS4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0TWVyZ2VTdHlsZVJhbmdlMTAoKSB7Ci0JCVN0eWxlUmFuZ2UgcmFuZ2U9IGNyZWF0ZVN0eWxlUmFuZ2UoNTIsIDU2LCAxLCAtMSwgTk9STUFMKTsKLQkJZlRleHRQcmVzZW50YXRpb24ubWVyZ2VTdHlsZVJhbmdlKHJhbmdlKTsKLQotCQlTdHlsZVJhbmdlW10gZXhwZWN0ZWRBbGxSYW5nZXM9IG5ldyBTdHlsZVJhbmdlW10gewotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICAwLCAgIDQsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDQsICAyMCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggMjAsICA0NywgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA0NywgIDUyLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDUyLCA1NCwgMSwgLTEsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoNTQsIDU2LCAxLCAtMSwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA1NiwgIDk2LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDk2LCAxMDIsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMTAyLCAxNDAsIE5PUk1BTCksCi0JCX07Ci0KLQkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkTm9uRGVmYXVsdFJhbmdlcz0gbmV3IFN0eWxlUmFuZ2VbXSB7Ci0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDQsICAyMCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggNDcsICA1MiwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSg1MiwgNTQsIDEsIC0xLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDU0LCA1NiwgMSwgLTEsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggOTYsIDEwMiwgQk9MRCksCi0JCX07Ci0KLQkJY2hlY2tSZWdpb25zKGV4cGVjdGVkQWxsUmFuZ2VzLCBleHBlY3RlZE5vbkRlZmF1bHRSYW5nZXMpOwotCX0KLQotCS8qKgotCSAqIE1lcmdlIHJhbmdlIGZyb20gZXhpc3RpbmcgZGVmYXVsdCBvdmVyIG5vbi1kZWZhdWx0IHRvIGRlZmF1bHQgcmFuZ2UuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE1lcmdlU3R5bGVSYW5nZTExKCkgewotCQlTdHlsZVJhbmdlIHJhbmdlPSBjcmVhdGVTdHlsZVJhbmdlKDQ1LCA1NiwgMSwgLTEsIE5PUk1BTCk7Ci0JCWZUZXh0UHJlc2VudGF0aW9uLm1lcmdlU3R5bGVSYW5nZShyYW5nZSk7Ci0KLQkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkQWxsUmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgMCwgICA0LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICA0LCAgMjAsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDIwLCAgNDUsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSg0NSwgNDcsIDEsIC0xLCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoNDcsIDU0LCAxLCAtMSwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSg1NCwgNTYsIDEsIC0xLCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDU2LCAgOTYsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggOTYsIDEwMiwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSgxMDIsIDE0MCwgTk9STUFMKSwKLQkJfTsKLQotCQlTdHlsZVJhbmdlW10gZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgNCwgIDIwLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDQ1LCA0NywgMSwgLTEsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSg0NywgNTQsIDEsIC0xLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDU0LCA1NiwgMSwgLTEsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggOTYsIDEwMiwgQk9MRCksCi0JCX07Ci0KLQkJY2hlY2tSZWdpb25zKGV4cGVjdGVkQWxsUmFuZ2VzLCBleHBlY3RlZE5vbkRlZmF1bHRSYW5nZXMpOwotCX0KLQotCS8qKgotCSAqIE1lcmdlIHJhbmdlIGZyb20gZXhpc3Rpbmcgbm9uLWRlZmF1bHQgb3ZlciBkZWZhdWx0IHRvIG5vbi1kZWZhdWx0IHJhbmdlLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RNZXJnZVN0eWxlUmFuZ2UxMigpIHsKLQkJU3R5bGVSYW5nZSByYW5nZT0gY3JlYXRlU3R5bGVSYW5nZSg1MiwgOTgsIDEsIC0xLCBOT1JNQUwpOwotCQlmVGV4dFByZXNlbnRhdGlvbi5tZXJnZVN0eWxlUmFuZ2UocmFuZ2UpOwotCi0JCVN0eWxlUmFuZ2VbXSBleHBlY3RlZEFsbFJhbmdlcz0gbmV3IFN0eWxlUmFuZ2VbXSB7Ci0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDAsICAgNCwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgNCwgIDIwLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAyMCwgIDQ3LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDQ3LCAgNTIsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoNTIsIDU0LCAxLCAtMSwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSg1NCwgOTYsIDEsIC0xLCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoOTYsIDk4LCAxLCAtMSwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggOTgsIDEwMiwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSgxMDIsIDE0MCwgTk9STUFMKSwKLQkJfTsKLQotCQlTdHlsZVJhbmdlW10gZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgNCwgIDIwLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA0NywgIDUyLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDUyLCA1NCwgMSwgLTEsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoNTQsIDk2LCAxLCAtMSwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDk2LCA5OCwgMSwgLTEsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDk4LCAxMDIsIEJPTEQpLAotCQl9OwotCi0JCWNoZWNrUmVnaW9ucyhleHBlY3RlZEFsbFJhbmdlcywgZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzKTsKLQl9Ci0KLQkvKioKLQkgKiBNZXJnZSByYW5nZSBvdmVyIGV4aXN0aW5nIGRlZmF1bHQgcmFuZ2UuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE1lcmdlU3R5bGVSYW5nZTEzKCkgewotCQlTdHlsZVJhbmdlIHJhbmdlPSBjcmVhdGVTdHlsZVJhbmdlKDIwLCA0NywgMSwgLTEsIE5PUk1BTCk7Ci0JCWZUZXh0UHJlc2VudGF0aW9uLm1lcmdlU3R5bGVSYW5nZShyYW5nZSk7Ci0KLQkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkQWxsUmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgMCwgICA0LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICA0LCAgMjAsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMjAsIDQ3LCAxLCAtMSwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA0NywgIDU0LCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA1NCwgIDk2LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDk2LCAxMDIsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMTAyLCAxNDAsIE5PUk1BTCksCi0JCX07Ci0KLQkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkTm9uRGVmYXVsdFJhbmdlcz0gbmV3IFN0eWxlUmFuZ2VbXSB7Ci0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDQsICAyMCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSgyMCwgNDcsIDEsIC0xLCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDQ3LCAgNTQsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDk2LCAxMDIsIEJPTEQpLAotCQl9OwotCi0JCWNoZWNrUmVnaW9ucyhleHBlY3RlZEFsbFJhbmdlcywgZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzKTsKLQl9Ci0KLQkvKioKLQkgKiBNZXJnZSByYW5nZSBvdmVyIGV4aXN0aW5nIG5vbi1kZWZhdWx0IHJhbmdlLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RNZXJnZVN0eWxlUmFuZ2UxNCgpIHsKLQkJU3R5bGVSYW5nZSByYW5nZT0gY3JlYXRlU3R5bGVSYW5nZSg0NywgNTQsIDEsIC0xLCBOT1JNQUwpOwotCQlmVGV4dFByZXNlbnRhdGlvbi5tZXJnZVN0eWxlUmFuZ2UocmFuZ2UpOwotCi0JCVN0eWxlUmFuZ2VbXSBleHBlY3RlZEFsbFJhbmdlcz0gbmV3IFN0eWxlUmFuZ2VbXSB7Ci0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDAsICAgNCwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgNCwgIDIwLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAyMCwgIDQ3LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoNDcsIDU0LCAxLCAtMSwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggNTQsICA5NiwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA5NiwgMTAyLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDEwMiwgMTQwLCBOT1JNQUwpLAotCQl9OwotCi0JCVN0eWxlUmFuZ2VbXSBleHBlY3RlZE5vbkRlZmF1bHRSYW5nZXM9IG5ldyBTdHlsZVJhbmdlW10gewotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICA0LCAgMjAsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoNDcsIDU0LCAxLCAtMSwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggOTYsIDEwMiwgQk9MRCksCi0JCX07Ci0KLQkJY2hlY2tSZWdpb25zKGV4cGVjdGVkQWxsUmFuZ2VzLCBleHBlY3RlZE5vbkRlZmF1bHRSYW5nZXMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNZXJnZVN0eWxlUmFuZ2VzMSgpIHsKLQkJU3R5bGVSYW5nZVtdIHJhbmdlcz0gbmV3IFN0eWxlUmFuZ2VbXSB7Ci0JCQkJY3JlYXRlU3R5bGVSYW5nZSgwLCAyLCAxLCAtMSwgTk9STUFMKSwgLy8gYXQgc3RhcnQgb2YgZmlyc3QgZXhpc3RpbmcKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDIwLCAyMiwgMSwgLTEsIE5PUk1BTCksIC8vIGF0IHN0YXJ0IG9mIGV4aXN0aW5nIGRlZmF1bHQKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDI0LCAyNiwgMSwgLTEsIE5PUk1BTCksIC8vIHdpdGhpbiBleGlzdGluZyBkZWZhdWx0Ci0JCQkJY3JlYXRlU3R5bGVSYW5nZSg0NSwgNDcsIDEsIC0xLCBOT1JNQUwpLCAvLyBhdCBlbmQgb2YgZXhpc3RpbmcgZGVmYXVsdAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoNDcsIDQ5LCAxLCAtMSwgTk9STUFMKSwgLy8gYXQgc3RhcnQgb2YgZXhpc3Rpbmcgbm9uLWRlZmF1bHQKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDUwLCA1MSwgMSwgLTEsIE5PUk1BTCksIC8vIHdpdGhpbiBleGlzdGluZyBub24tZGVmYXVsdAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoNTIsIDU0LCAxLCAtMSwgTk9STUFMKSwgLy8gYXQgZW5kIG9mIGV4aXN0aW5nIG5vbi1kZWZhdWx0Ci0JCQkJY3JlYXRlU3R5bGVSYW5nZSgxMzgsIDE0MCwgMSwgLTEsIE5PUk1BTCksIC8vIGF0IGVuZCBvZiBsYXN0IGV4aXN0aW5nCi0JCX07Ci0JCWZUZXh0UHJlc2VudGF0aW9uLm1lcmdlU3R5bGVSYW5nZXMocmFuZ2VzKTsKLQotCQlTdHlsZVJhbmdlW10gZXhwZWN0ZWRBbGxSYW5nZXM9IG5ldyBTdHlsZVJhbmdlW10gewotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMCwgMiwgMSwgLTEsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDIsICAgNCwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgNCwgIDIwLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDIwLCAyMiwgMSwgLTEsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggMjIsICAyNCwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDI0LCAyNiwgMSwgLTEsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggMjYsICA0NSwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDQ1LCA0NywgMSwgLTEsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSg0NywgNDksIDEsIC0xLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA0OSwgIDUwLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDUwLCA1MSwgMSwgLTEsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDUxLCAgNTIsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoNTIsIDU0LCAxLCAtMSwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggNTQsICA5NiwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA5NiwgMTAyLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDEwMiwgMTM4LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMTM4LCAxNDAsIDEsIC0xLCBOT1JNQUwpLAotCQl9OwotCi0JCVN0eWxlUmFuZ2VbXSBleHBlY3RlZE5vbkRlZmF1bHRSYW5nZXM9IG5ldyBTdHlsZVJhbmdlW10gewotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMCwgMiwgMSwgLTEsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDQsICAyMCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSgyMCwgMjIsIDEsIC0xLCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMjQsIDI2LCAxLCAtMSwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDQ1LCA0NywgMSwgLTEsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSg0NywgNDksIDEsIC0xLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA0OSwgIDUwLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDUwLCA1MSwgMSwgLTEsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDUxLCAgNTIsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoNTIsIDU0LCAxLCAtMSwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggOTYsIDEwMiwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSgxMzgsIDE0MCwgMSwgLTEsIE5PUk1BTCksCi0JCX07Ci0KLQkJY2hlY2tSZWdpb25zKGV4cGVjdGVkQWxsUmFuZ2VzLCBleHBlY3RlZE5vbkRlZmF1bHRSYW5nZXMpOwotCX0KLQotLy8gVGVtcGxhdGUKLS8vCi0vLwlwdWJsaWMgdm9pZCB0ZXN0TWVyZ2VTdHlsZVJhbmdlMCgpIHsKLS8vLy8JCVN0eWxlUmFuZ2UgcmFuZ2U9IGNyZWF0ZVN0eWxlUmFuZ2UoMCwgMiwgMSwgLTEsIE5PUk1BTCk7Ci0vLy8vCQlmVGV4dFByZXNlbnRhdGlvbi5tZXJnZVN0eWxlUmFuZ2UocmFuZ2UpOwotLy8KLS8vLy8JCVN0eWxlUmFuZ2VbXSByYW5nZXM9IG5ldyBTdHlsZVJhbmdlW10gewotLy8vLwkJCQljcmVhdGVTdHlsZVJhbmdlKDAsIDIsIDEsIC0xLCBOT1JNQUwpLAotLy8vLwkJfTsKLS8vLy8JCWZUZXh0UHJlc2VudGF0aW9uLm1lcmdlU3R5bGVSYW5nZXMocmFuZ2VzKTsKLS8vCi0vLwkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkQWxsUmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLS8vCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICAwLCAgIDQsIE5PUk1BTCksCi0vLwkJCQljcmVhdGVTdHlsZVJhbmdlKCAgNCwgIDIwLCBCT0xEKSwKLS8vCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDIwLCAgNDcsIE5PUk1BTCksCi0vLwkJCQljcmVhdGVTdHlsZVJhbmdlKCA0NywgIDU0LCBCT0xEKSwKLS8vCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDU0LCAgOTYsIE5PUk1BTCksCi0vLwkJCQljcmVhdGVTdHlsZVJhbmdlKCA5NiwgMTAyLCBCT0xEKSwKLS8vCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMTAyLCAxNDAsIE5PUk1BTCksCi0vLwkJfTsKLS8vCi0vLwkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkTm9uRGVmYXVsdFJhbmdlcz0gbmV3IFN0eWxlUmFuZ2VbXSB7Ci0vLwkJCQljcmVhdGVTdHlsZVJhbmdlKCAgNCwgIDIwLCBCT0xEKSwKLS8vCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDQ3LCAgNTQsIEJPTEQpLAotLy8JCQkJY3JlYXRlU3R5bGVSYW5nZSggOTYsIDEwMiwgQk9MRCksCi0vLwkJfTsKLS8vCi0vLwkJY2hlY2tSZWdpb25zKGV4cGVjdGVkQWxsUmFuZ2VzLCBleHBlY3RlZE5vbkRlZmF1bHRSYW5nZXMpOwotLy8JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvVGV4dFZpZXdlclVuZG9NYW5hZ2VyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvVGV4dFZpZXdlclVuZG9NYW5hZ2VyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZmZkMjg3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL1RleHRWaWV3ZXJVbmRvTWFuYWdlclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuamZhY2UudGV4dC50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLm9wZXJhdGlvbnMuQWJzdHJhY3RPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5vcGVyYXRpb25zLklVbmRvYWJsZU9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLm9wZXJhdGlvbnMuT3BlcmF0aW9uSGlzdG9yeUZhY3Rvcnk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UudGV4dC51bmRvLkRvY3VtZW50VW5kb0V2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnRleHQudW5kby5Eb2N1bWVudFVuZG9NYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnRleHQudW5kby5JRG9jdW1lbnRVbmRvTGlzdGVuZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkRvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVVuZG9NYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuVGV4dFZpZXdlclVuZG9NYW5hZ2VyOwotCi0vKioKLSAqIFRlc3RzIGZvciBUZXh0Vmlld2VyVW5kb01hbmFnZXIuCi0gKgotICogQHNpbmNlIDMuMgotICovCi1wdWJsaWMgY2xhc3MgVGV4dFZpZXdlclVuZG9NYW5hZ2VyVGVzdCBleHRlbmRzIEFic3RyYWN0VW5kb01hbmFnZXJUZXN0IHsKLQotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBUZXN0U3VpdGUoVGV4dFZpZXdlclVuZG9NYW5hZ2VyVGVzdC5jbGFzcyk7Ci0JfQotCi0JLyoKLQkgKiBAc2VlIFRlc3RDYXNlI1Rlc3RDYXNlKFN0cmluZykKLQkgKi8KLQlwdWJsaWMgVGV4dFZpZXdlclVuZG9NYW5hZ2VyVGVzdChmaW5hbCBTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQkvKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UudGV4dC50ZXN0cy5BYnN0cmFjdFVuZG9NYW5hZ2VyVGVzdCNjcmVhdGVVbmRvTWFuYWdlcihpbnQpCi0JICogQHNpbmNlIDMuMgotCSAqLwotCXByb3RlY3RlZCBJVW5kb01hbmFnZXIgY3JlYXRlVW5kb01hbmFnZXIoaW50IG1heFVuZG9MZXZlbCkgewotCQlyZXR1cm4gbmV3IFRleHRWaWV3ZXJVbmRvTWFuYWdlcihtYXhVbmRvTGV2ZWwpOwotCX0KLQotCS8vLS0tIERvY3VtZW50VW5kb01hbmFnZXIgb25seSAtLS0KLQotCXB1YmxpYyB2b2lkIGludGVybmFsVGVzdFRyYW5zZmVyTm9uVGV4dE9wKGZpbmFsIGJvb2xlYW4gaXNVbmRvYWJsZSkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCU9iamVjdCBjb250ZXh0PSBuZXcgT2JqZWN0KCk7Ci0JCURvY3VtZW50VW5kb01hbmFnZXIgdGVtcFVuZG9NYW5hZ2VyPSBuZXcgRG9jdW1lbnRVbmRvTWFuYWdlcihuZXcgRG9jdW1lbnQoKSk7Ci0JCXRlbXBVbmRvTWFuYWdlci5jb25uZWN0KGNvbnRleHQpOwotCi0JCUlVbmRvYWJsZU9wZXJhdGlvbiBvcGVyYXRpb249IG5ldyBBYnN0cmFjdE9wZXJhdGlvbigiIikgewotCQkJcHVibGljIGJvb2xlYW4gY2FuVW5kbygpIHsKLQkJCQlyZXR1cm4gaXNVbmRvYWJsZTsKLQkJCX0KLQkJCXB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGluZm8pIHRocm93cyBFeGVjdXRpb25FeGNlcHRpb24gewotCQkJCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCQkJfQotCQkJcHVibGljIElTdGF0dXMgcmVkbyhJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgaW5mbykgdGhyb3dzIEV4ZWN1dGlvbkV4Y2VwdGlvbiB7Ci0JCQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JCQl9Ci0JCQlwdWJsaWMgSVN0YXR1cyB1bmRvKElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBpbmZvKSB0aHJvd3MgRXhlY3V0aW9uRXhjZXB0aW9uIHsKLQkJCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQkJCX0KLQkJfTsKLQkJb3BlcmF0aW9uLmFkZENvbnRleHQodGVtcFVuZG9NYW5hZ2VyLmdldFVuZG9Db250ZXh0KCkpOwotCQlPcGVyYXRpb25IaXN0b3J5RmFjdG9yeS5nZXRPcGVyYXRpb25IaXN0b3J5KCkuYWRkKG9wZXJhdGlvbik7Ci0KLQkJYXNzZXJ0RXF1YWxzKGlzVW5kb2FibGUsIHRlbXBVbmRvTWFuYWdlci51bmRvYWJsZSgpKTsKLQotCQlmaW5hbCBEb2N1bWVudFVuZG9NYW5hZ2VyIHVuZG9NYW5hZ2VyPSBuZXcgRG9jdW1lbnRVbmRvTWFuYWdlcihuZXcgRG9jdW1lbnQoKSk7Ci0JCU9iamVjdCBuZXdDb250ZXh0PSBuZXcgT2JqZWN0KCk7Ci0JCXVuZG9NYW5hZ2VyLmNvbm5lY3QobmV3Q29udGV4dCk7Ci0KLQkJdW5kb01hbmFnZXIuYWRkRG9jdW1lbnRVbmRvTGlzdGVuZXIobmV3IElEb2N1bWVudFVuZG9MaXN0ZW5lcigpIHsKLQkJCXB1YmxpYyB2b2lkIGRvY3VtZW50VW5kb05vdGlmaWNhdGlvbihEb2N1bWVudFVuZG9FdmVudCBldmVudCkgewotCQkJCWZhaWwoKTsKLQkJCX0KLQkJfSk7Ci0KLQkJdW5kb01hbmFnZXIudHJhbnNmZXJVbmRvSGlzdG9yeSh0ZW1wVW5kb01hbmFnZXIpOwotCQl0ZW1wVW5kb01hbmFnZXIuZGlzY29ubmVjdChjb250ZXh0KTsKLQotCQlhc3NlcnRFcXVhbHMoaXNVbmRvYWJsZSwgdW5kb01hbmFnZXIudW5kb2FibGUoKSk7Ci0JCXVuZG9NYW5hZ2VyLnVuZG8oKTsKLQkJYXNzZXJ0RXF1YWxzKGZhbHNlLCB1bmRvTWFuYWdlci51bmRvYWJsZSgpKTsKLQotCQl1bmRvTWFuYWdlci5kaXNjb25uZWN0KG5ld0NvbnRleHQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RUcmFuc2Zlck5vblVuZG9hYmxlTm9uVGV4dE9wKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWludGVybmFsVGVzdFRyYW5zZmVyTm9uVGV4dE9wKGZhbHNlKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0VHJhbnNmZXJVbmRvYWJsZU5vblRleHRPcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlpbnRlcm5hbFRlc3RUcmFuc2Zlck5vblRleHRPcCh0cnVlKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q2FuVW5kbygpIHRocm93cyBFeGNlcHRpb24gewotCQlJRG9jdW1lbnQgZG9jPSBuZXcgRG9jdW1lbnQoKTsKLQkJZmluYWwgRG9jdW1lbnRVbmRvTWFuYWdlciB1bmRvTWFuYWdlcj0gbmV3IERvY3VtZW50VW5kb01hbmFnZXIoZG9jKTsKLQkJT2JqZWN0IGNvbnRleHQ9IG5ldyBPYmplY3QoKTsKLQkJdW5kb01hbmFnZXIuY29ubmVjdChjb250ZXh0KTsKLQotCQl1bmRvTWFuYWdlci5hZGREb2N1bWVudFVuZG9MaXN0ZW5lcihuZXcgSURvY3VtZW50VW5kb0xpc3RlbmVyKCkgewotCi0JCQlwdWJsaWMgdm9pZCBkb2N1bWVudFVuZG9Ob3RpZmljYXRpb24oRG9jdW1lbnRVbmRvRXZlbnQgZXZlbnQpIHsKLQkJCQlpZiAoZXZlbnQuZ2V0RXZlbnRUeXBlKCkgPT0gRG9jdW1lbnRVbmRvRXZlbnQuQUJPVVRfVE9fVU5ETykKLQkJCQkJYXNzZXJ0RXF1YWxzKHRydWUsIHVuZG9NYW5hZ2VyLnVuZG9hYmxlKCkpOwotCQkJCWVsc2UgaWYgKGV2ZW50LmdldEV2ZW50VHlwZSgpID09IERvY3VtZW50VW5kb0V2ZW50LlVORE9ORSkKLQkJCQkJYXNzZXJ0RXF1YWxzKGZhbHNlLCB1bmRvTWFuYWdlci51bmRvYWJsZSgpKTsKLQkJCX0KLQkJfSk7Ci0KLQkJZG9jLnNldCgiZm9vIik7Ci0KLQkJYXNzZXJ0RXF1YWxzKHRydWUsIHVuZG9NYW5hZ2VyLnVuZG9hYmxlKCkpOwotCQl1bmRvTWFuYWdlci51bmRvKCk7Ci0JCWFzc2VydEVxdWFscyhmYWxzZSwgdW5kb01hbmFnZXIudW5kb2FibGUoKSk7Ci0KLQkJdW5kb01hbmFnZXIuZGlzY29ubmVjdChjb250ZXh0KTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL3JlY29uY2lsZXIvQWJzdHJhY3RSZWNvbmNpbGVyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvcmVjb25jaWxlci9BYnN0cmFjdFJlY29uY2lsZXJUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyMGZiYWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvcmVjb25jaWxlci9BYnN0cmFjdFJlY29uY2lsZXJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQudGVzdHMucmVjb25jaWxlcjsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UudGV4dC50ZXN0cy5BY2Nlc3NvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuQmFkTG9jYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5Eb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUZXh0Vmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQucmVjb25jaWxlci5BYnN0cmFjdFJlY29uY2lsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5yZWNvbmNpbGVyLkRpcnR5UmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQucmVjb25jaWxlci5JUmVjb25jaWxpbmdTdHJhdGVneTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlc3RzLlRlc3RUZXh0Vmlld2VyOwotCi0KLS8qKgotICogUmVjb25jaWxlciB0ZXN0cy4gVXNlcyBiYXJyaWVyIHN5bmNocm9uaXphdGlvbiBhbmQgYSBjYWxsIGxvZyB0byBhc3NlcnQKLSAqIGNvcnJlY3Qgb3JkZXIgb2YgcmVjb25jaWxpbmcgZXZlbnRzLgotICoKLSAqIFRPRE8gdGVzdCByZWNvbmNpbGVyIGFyZ3VtZW50cyAoZGVsYXkgPiAwIGV0Yy4pCi0gKiBUT0RPIGluY3JlbWVudGFsIHJlY29uY2lsZXIgdGVzdHMKLSAqCi0gKiBAc2luY2UgMy4xCi0gKi8KLXB1YmxpYyBjbGFzcyBBYnN0cmFjdFJlY29uY2lsZXJUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCi0JLyoqCi0JICogTW9kaWZpZWQgYmFycmllcjogdGhlcmUgYXJlIHR3byB0aHJlYWRzOiB0aGUgbWFpbiAodGVzdGluZykgdGhyZWFkCi0JICogY3JlYXRpbmcgdGhlIGJhcnJpZXIsIGFuZCB0aGUgcmVjb25jaWxlciB0aHJlYWQuIFdoZW4gYm90aCB0aHJlYWRzIGhhdmUKLQkgKiBtZXQgYXQgdGhlIGJhcnJpZXIsIHRoZSBtYWluIHRocmVhZCBpcyByZWxlYXNlZCBhbmQgY2FuIHBlcmZvcm0KLQkgKiBhc3NlcnRpb25zIHdoaWxlIGJlaW5nIHN1cmUgdGhhdCB0aGUgcmVjb25jaWxlciBpcyBkb3JtYW50LiBBZnRlciB0aGUKLQkgKiB0ZXN0cyBoYXZlIGJlZW4gcGVyZm9ybWVkLCB0aGUgbWFpbiB0aHJlYWQgbXVzdCBjYWxsIDxjb2RlPndha2VBbGw8L2NvZGU+Ci0JICogdG8gcmVsZWFzZSB0aGUgcmVjb25jaWxlciB0aHJlYWQuCi0JICovCi0Jc3RhdGljIGNsYXNzIEJhcnJpZXIgewotCQlwcml2YXRlIGZpbmFsIE9iamVjdCBmTXV0ZXg9IG5ldyBPYmplY3QoKTsKLQkJcHJpdmF0ZSBmaW5hbCBpbnQgZlBhcnRpY2lwYW50czsKLQkJcHJpdmF0ZSBmaW5hbCBUaHJlYWQgZk1haW5UaHJlYWQ7Ci0KLQkJcHJpdmF0ZSBpbnQgZldhaXRpbmc9IDA7Ci0JCXByaXZhdGUgYm9vbGVhbiBmTWFpblRocmVhZEFycml2ZWQ9IGZhbHNlOwotCQlwcml2YXRlIGJvb2xlYW4gZklzSW5hY3RpdmU9IGZhbHNlOwotCi0JCUJhcnJpZXIoKSB7Ci0JCQlmUGFydGljaXBhbnRzPSAyOwotCQkJZk1haW5UaHJlYWQ9IFRocmVhZC5jdXJyZW50VGhyZWFkKCk7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBhd2FpdCgpIHsKLQkJCXN5bmNocm9uaXplZCAoZk11dGV4KSB7Ci0JCQkJaWYgKGZJc0luYWN0aXZlKQotCQkJCQlyZXR1cm47Ci0KLQkJCQlmV2FpdGluZysrOwotCi0JCQkJYm9vbGVhbiBpc01haW5UaHJlYWQ9IFRocmVhZC5jdXJyZW50VGhyZWFkKCkgPT0gZk1haW5UaHJlYWQ7Ci0JCQkJaWYgKGlzTWFpblRocmVhZCkKLQkJCQkJZk1haW5UaHJlYWRBcnJpdmVkPSB0cnVlOwotCi0JCQkJaWYgKGFsbEFycml2ZWQoKSkgewotCQkJCQlpZiAoIWZNYWluVGhyZWFkQXJyaXZlZCkgewotCQkJCQkJZldhaXRpbmctLTsKLQkJCQkJCXRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGdldENsYXNzKCkgKyAiIGNhbid0IGpvaW4gYmFycmllciBpZiBvbmx5IHRoZSBtYWluIHRocmVhZCBpcyBtaXNzaW5nISIpOwotCQkJCQl9Ci0KLQkJCQkJaWYgKCFpc01haW5UaHJlYWQpCi0JCQkJCQlub3RpZnlNYWluVGhyZWFkKCk7Ci0JCQkJfQotCQkJCWlmICghYWxsQXJyaXZlZCgpIHx8ICFpc01haW5UaHJlYWQpIHsKLQkJCQkJdHJ5IHsKLQkJCQkJCWlmICghaXNNYWluVGhyZWFkKQotCQkJCQkJCWZNdXRleC53YWl0KCk7Ci0JCQkJCQllbHNlIHsKLQkJCQkJCQlmTXV0ZXgud2FpdCg1MDAwKTsgLy8gZG9uJ3Qgd2FpdCBmb3JldmVyIGZvciBiYWQgcmVjb25jaWxlcnMKLQkJCQkJCQlpZiAoIWFsbEFycml2ZWQoKSkKLQkJCQkJCQkJZmFpbCgicmVjb25jaWxlciBuZXZlciByYW4gaW4gNSBzZWNvbmRzIik7Ci0JCQkJCQl9Ci0JCQkJCX0gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKLQkJCQkJCS8vIHRocmVhZHMgbXVzdCBub3QgYmUgaW50ZXJydXB0ZWQKLQkJCQkJCXRocm93IG5ldyBFcnJvcigpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJcHJpdmF0ZSBib29sZWFuIGFsbEFycml2ZWQoKSB7Ci0JCQlyZXR1cm4gZldhaXRpbmcgPT0gZlBhcnRpY2lwYW50czsKLQkJfQotCi0JCXByaXZhdGUgdm9pZCBub3RpZnlNYWluVGhyZWFkKCkgewotCQkJZk11dGV4Lm5vdGlmeSgpOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgd2FrZUFsbCgpIHsKLQkJCXN5bmNocm9uaXplZCAoZk11dGV4KSB7Ci0JCQkJZldhaXRpbmc9IDA7Ci0JCQkJZk1haW5UaHJlYWRBcnJpdmVkPSBmYWxzZTsKLQkJCQlmTXV0ZXgubm90aWZ5QWxsKCk7Ci0JCQl9Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBzaHV0ZG93bigpIHsKLQkJCXN5bmNocm9uaXplZCAoZk11dGV4KSB7Ci0JCQkJZklzSW5hY3RpdmU9IHRydWU7Ci0JCQkJZk11dGV4Lm5vdGlmeUFsbCgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHJpdmF0ZSBBY2Nlc3NvciBmQWNjZXNzb3I7Ci0JcHJpdmF0ZSBCYXJyaWVyIGZCYXJyaWVyOwotCXByaXZhdGUgTGlzdCBmQ2FsbExvZzsKLQlwcml2YXRlIElUZXh0Vmlld2VyIGZWaWV3ZXI7Ci0JcHJvdGVjdGVkIEFic3RyYWN0UmVjb25jaWxlciBmUmVjb25jaWxlcjsKLQlwcml2YXRlIERvY3VtZW50IGZEb2N1bWVudDsKLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgewotCQlmQmFycmllcj0gbmV3IEJhcnJpZXIoKTsKLQkJZkNhbGxMb2c9IENvbGxlY3Rpb25zLnN5bmNocm9uaXplZExpc3QobmV3IEFycmF5TGlzdCgpKTsKLQkJZlJlY29uY2lsZXI9IG5ldyBBYnN0cmFjdFJlY29uY2lsZXIoKSB7Ci0JCQkJCXByb3RlY3RlZCB2b2lkIGluaXRpYWxQcm9jZXNzKCkgewotCQkJCQkJZkNhbGxMb2cuYWRkKCJpbml0aWFsUHJvY2VzcyIpOwotCQkJCQkJZkJhcnJpZXIuYXdhaXQoKTsKLQkJCQkJfQotCQkJCQlwcm90ZWN0ZWQgdm9pZCBwcm9jZXNzKERpcnR5UmVnaW9uIGRpcnR5UmVnaW9uKSB7Ci0JCQkJCQlmQ2FsbExvZy5hZGQoInByb2Nlc3MiKTsKLQkJCQkJCWZCYXJyaWVyLmF3YWl0KCk7Ci0JCQkJCX0KLQkJCQkJcHJvdGVjdGVkIHZvaWQgcmVjb25jaWxlckRvY3VtZW50Q2hhbmdlZChJRG9jdW1lbnQgbmV3RG9jdW1lbnQpIHsKLQkJCQkJCWZDYWxsTG9nLmFkZCgicmVjb25jaWxlckRvY3VtZW50Q2hhbmdlZCIpOwotCQkJCQl9Ci0JCQkJCXByb3RlY3RlZCB2b2lkIGFib3V0VG9CZVJlY29uY2lsZWQoKSB7Ci0JCQkJCQlmQ2FsbExvZy5hZGQoImFib3V0VG9CZVJlY29uY2lsZWQiKTsKLQkJCQkJfQotCQkJCQlwcm90ZWN0ZWQgdm9pZCByZWNvbmNpbGVyUmVzZXQoKSB7Ci0JCQkJCQlmQ2FsbExvZy5hZGQoInJlY29uY2lsZXJSZXNldCIpOwotCQkJCQl9Ci0JCQkJCXB1YmxpYyBJUmVjb25jaWxpbmdTdHJhdGVneSBnZXRSZWNvbmNpbGluZ1N0cmF0ZWd5KFN0cmluZyBjb250ZW50VHlwZSkgewotCQkJCQkJcmV0dXJuIG51bGw7Ci0JCQkJCX0KLQkJCQl9OwotCQlmUmVjb25jaWxlci5zZXRJc0luY3JlbWVudGFsUmVjb25jaWxlcihmYWxzZSk7Ci0JCWZSZWNvbmNpbGVyLnNldERlbGF5KDUwKTsgLy8gbWFrZSB0ZXN0cyBydW4gZmFzdGVyCi0KLQkJZlZpZXdlcj0gbmV3IFRlc3RUZXh0Vmlld2VyKCk7Ci0JCWZSZWNvbmNpbGVyLmluc3RhbGwoZlZpZXdlcik7Ci0KLQkJZkFjY2Vzc29yPSBuZXcgQWNjZXNzb3IoZlJlY29uY2lsZXIsIEFic3RyYWN0UmVjb25jaWxlci5jbGFzcyk7Ci0JCU9iamVjdCBvYmplY3Q9IGZBY2Nlc3Nvci5nZXQoImZUaHJlYWQiKTsKLQkJZkFjY2Vzc29yPSBuZXcgQWNjZXNzb3Iob2JqZWN0LCBvYmplY3QuZ2V0Q2xhc3MoKSk7Ci0JfQotCi0KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQlmQmFycmllci5zaHV0ZG93bigpOwotCQlmUmVjb25jaWxlci51bmluc3RhbGwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SW5pdGlhbFJlY29uY2lsZSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0JCS8vIGluaXRpYWxseSB0aGUgcmVjb25jaWxlciBpcyBuZWl0aGVyIGFjdGl2ZSBub3IgZGlydHkKLQkJLy8gWFhYIHNob3VsZG4ndCBpdCBiZSBkaXJ0eT8KLQkJYXNzZXJ0RmFsc2UoaXNBY3RpdmUoKSk7Ci0JCWFzc2VydEZhbHNlKGlzRGlydHkoKSk7Ci0KLQkJLy8gc2V0IHVwIGluaXRpYWwgZG9jdW1lbnQKLQkJZkRvY3VtZW50PSBuZXcgRG9jdW1lbnQoImZvbyIpOwotCQlmVmlld2VyLnNldERvY3VtZW50KGZEb2N1bWVudCk7Ci0JCWFzc2VydEVxdWFscygicmVjb25jaWxlckRvY3VtZW50Q2hhbmdlZCIsIGZDYWxsTG9nLnJlbW92ZSgwKSk7Ci0JCWFzc2VydEVxdWFscygiYWJvdXRUb0JlUmVjb25jaWxlZCIsIGZDYWxsTG9nLnJlbW92ZSgwKSk7Ci0KLQkJZkJhcnJpZXIuYXdhaXQoKTsKLQkJYXNzZXJ0RXF1YWxzKCJpbml0aWFsUHJvY2VzcyIsIGZDYWxsTG9nLnJlbW92ZSgwKSk7Ci0JCS8vIFhYWCBzaG91bGRuJ3QgaXQgYmUgZGlydHkgYW5kIGFjdGl2ZSBkdXJpbmcgaW5pdGlhbFByb2Nlc3M/Ci0JCWFzc2VydEZhbHNlKGlzQWN0aXZlKCkpOwotCQlhc3NlcnRGYWxzZShpc0RpcnR5KCkpOwotCQlmQmFycmllci53YWtlQWxsKCk7Ci0KLQkJLy8gd2FpdCB1bnRpbCBjbGVhbgotCQlwb2xsVW50aWxDbGVhbigpOwotCQlhc3NlcnRGYWxzZShpc0FjdGl2ZSgpKTsKLQkJYXNzZXJ0RmFsc2UoaXNEaXJ0eSgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RGlydHlpbmdXaGVuQ2xlYW4oKSB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24sIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLQkJaW5zdGFsbERvY3VtZW50KCk7Ci0KLQkJZGlydHkoKTsKLQkJYXNzZXJ0RXF1YWxzKCJhYm91dFRvQmVSZWNvbmNpbGVkIiwgZkNhbGxMb2cucmVtb3ZlKDApKTsKLQkJYXNzZXJ0RXF1YWxzKCJyZWNvbmNpbGVyUmVzZXQiLCBmQ2FsbExvZy5yZW1vdmUoMCkpOwotCi0JCWZCYXJyaWVyLmF3YWl0KCk7Ci0JCWFzc2VydEVxdWFscygicHJvY2VzcyIsIGZDYWxsTG9nLnJlbW92ZSgwKSk7Ci0JCWFzc2VydFRydWUoaXNBY3RpdmUoKSk7Ci0JCWFzc2VydFRydWUoaXNEaXJ0eSgpKTsKLQkJZkJhcnJpZXIud2FrZUFsbCgpOwotCi0JCS8vIHdhaXQgdW50aWwgY2xlYW4KLQkJcG9sbFVudGlsQ2xlYW4oKTsKLQkJYXNzZXJ0RmFsc2UoaXNBY3RpdmUoKSk7Ci0JCWFzc2VydEZhbHNlKGlzRGlydHkoKSk7Ci0JfQotCi0KLQlwcml2YXRlIHZvaWQgZGlydHkoKSB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlmRG9jdW1lbnQucmVwbGFjZSgwLDAsImJhciIpOwotCX0KLQotCi0JcHVibGljIHZvaWQgdGVzdERpcnR5aW5nV2hlblJ1bm5pbmcoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24sIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJaW5zdGFsbERvY3VtZW50KCk7Ci0KLQkJZGlydHkoKTsKLQkJZkJhcnJpZXIuYXdhaXQoKTsKLQkJYXNzZXJ0VHJ1ZShpc0FjdGl2ZSgpKTsKLQkJYXNzZXJ0VHJ1ZShpc0RpcnR5KCkpOwotCQlmQ2FsbExvZy5jbGVhcigpOwotCQlkaXJ0eSgpOwotCQkvLyBubyBhYm91dFRvQmVSZWNvbmNpbGVkIHNpbmNlIHRoZSByZWNvbmNpbGVyIGlzIHN0aWxsIHJ1bm5pbmcKLQkJLy8gd2hlbiB0aGUgc2Vjb25kIGVkaXRpb24gY29tZXMgaW4KLQkJYXNzZXJ0RXF1YWxzKCJyZWNvbmNpbGVyUmVzZXQiLCBmQ2FsbExvZy5yZW1vdmUoMCkpOwotCQlmQmFycmllci53YWtlQWxsKCk7Ci0KLQkJZkJhcnJpZXIuYXdhaXQoKTsKLQkJYXNzZXJ0RXF1YWxzKCJwcm9jZXNzIiwgZkNhbGxMb2cucmVtb3ZlKDApKTsKLQkJZkJhcnJpZXIud2FrZUFsbCgpOwotCQlwb2xsVW50aWxDbGVhbigpOwotCQlhc3NlcnRGYWxzZShpc0FjdGl2ZSgpKTsKLQkJYXNzZXJ0RmFsc2UoaXNEaXJ0eSgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q2FuY2VsbGluZ1doZW5DbGVhbigpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiwgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlpbnN0YWxsRG9jdW1lbnQoKTsKLQotCQkvLyBkaXJ0eSBhZ2FpbgotCQlkaXJ0eSgpOwotCQlmQmFycmllci5hd2FpdCgpOwotCQlmQmFycmllci53YWtlQWxsKCk7Ci0KLQkJLy8gY2FuY2VsCi0JCWZDYWxsTG9nLmNsZWFyKCk7Ci0JCWZSZWNvbmNpbGVyLnVuaW5zdGFsbCgpOwotCQlwb2xsVW50aWxJbmFjdGl2ZSgpOwotCQlhc3NlcnRUcnVlKGZDYWxsTG9nLmlzRW1wdHkoKSk7Ci0JCWFzc2VydEZhbHNlKGlzQWN0aXZlKCkpOwotCQkvLyBYWFggZmFpbHMgc2luY2UgQWJzdHJhY3RSZWNvbmNpbGVyIGRvZXMgbm90IHVwZGF0ZSBzdGF0ZSBiZWZvcmUgbGVhdmluZwotLy8JCWFzc2VydEZhbHNlKGlzRGlydHkoKSk7IC8vIGZhaWxzCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdENhbmNlbGxpbmdXaGVuUnVubmluZygpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiwgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlpbnN0YWxsRG9jdW1lbnQoKTsKLQotCQkvLyBkaXJ0eSBhbmQgY2FuY2VsCi0JCWRpcnR5KCk7Ci0JCWZCYXJyaWVyLmF3YWl0KCk7Ci0JCWZDYWxsTG9nLmNsZWFyKCk7Ci0JCWZSZWNvbmNpbGVyLnVuaW5zdGFsbCgpOwotCQlmQmFycmllci53YWtlQWxsKCk7Ci0JCXBvbGxVbnRpbEluYWN0aXZlKCk7Ci0JCWFzc2VydFRydWUoZkNhbGxMb2cuaXNFbXB0eSgpKTsKLQkJYXNzZXJ0RmFsc2UoaXNBY3RpdmUoKSk7Ci0JCS8vIFhYWCBmYWlscyBzaW5jZSBBYnN0cmFjdFJlY29uY2lsZXIgZG9lcyBub3QgdXBkYXRlIHN0YXRlIGJlZm9yZSBsZWF2aW5nCi0vLwkJYXNzZXJ0RmFsc2UoaXNEaXJ0eSgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UmVwbGFjaW5nRG9jdW1lbnRXaGVuQ2xlYW4oKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotCQlpbnN0YWxsRG9jdW1lbnQoKTsKLQotCQkvLyByZXBsYWNlCi0JCWZDYWxsTG9nLmNsZWFyKCk7Ci0JCWZWaWV3ZXIuc2V0RG9jdW1lbnQobmV3IERvY3VtZW50KCJiYXIiKSk7Ci0JCWFzc2VydEVxdWFscygicmVjb25jaWxlckRvY3VtZW50Q2hhbmdlZCIsIGZDYWxsTG9nLnJlbW92ZSgwKSk7Ci0JCWFzc2VydEVxdWFscygiYWJvdXRUb0JlUmVjb25jaWxlZCIsIGZDYWxsTG9nLnJlbW92ZSgwKSk7Ci0JCWFzc2VydEVxdWFscygicmVjb25jaWxlclJlc2V0IiwgZkNhbGxMb2cucmVtb3ZlKDApKTsKLQkJZkJhcnJpZXIuYXdhaXQoKTsKLQkJYXNzZXJ0RXF1YWxzKCJwcm9jZXNzIiwgZkNhbGxMb2cucmVtb3ZlKDApKTsKLQkJZkJhcnJpZXIud2FrZUFsbCgpOwotCi0JCXBvbGxVbnRpbENsZWFuKCk7Ci0JCWFzc2VydEZhbHNlKGlzQWN0aXZlKCkpOwotCQlhc3NlcnRGYWxzZShpc0RpcnR5KCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RSZXBsYWNpbmdEb2N1bWVudFdoZW5SdW5uaW5nKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uLCBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCWluc3RhbGxEb2N1bWVudCgpOwotCi0JCS8vIGRpcnR5IGFuZCByZXBsYWNlCi0JCWRpcnR5KCk7Ci0JCWZCYXJyaWVyLmF3YWl0KCk7Ci0JCWZDYWxsTG9nLmNsZWFyKCk7Ci0JCWZWaWV3ZXIuc2V0RG9jdW1lbnQobmV3IERvY3VtZW50KCJiYXIiKSk7Ci0JCWFzc2VydEVxdWFscygicmVjb25jaWxlckRvY3VtZW50Q2hhbmdlZCIsIGZDYWxsTG9nLnJlbW92ZSgwKSk7Ci0JCWFzc2VydEVxdWFscygicmVjb25jaWxlclJlc2V0IiwgZkNhbGxMb2cucmVtb3ZlKDApKTsKLQkJYXNzZXJ0VHJ1ZShmQ2FsbExvZy5pc0VtcHR5KCkpOwotCQlmQmFycmllci53YWtlQWxsKCk7Ci0KLQkJLy8gWFhYIHRoaXMgZmFpbHMsIHdoaWNoIGlzIGEgYnVnIC0gcmVwbGFjaW5nIHRoZSBkb2N1bWVudCBzaG91bGQKLQkJLy8gY2FuY2VsIHRoZSBwcm9ncmVzcyBtb25pdG9yCi0vLwkJZkJhcnJpZXIuYXdhaXQoKTsKLS8vCQlhc3NlcnRFcXVhbHMoInByb2Nlc3MiLCBmQ2FsbExvZy5yZW1vdmUoMCkpOwotLy8JCWZCYXJyaWVyLndha2VBbGwoKTsKLQl9Ci0KLQl2b2lkIGluc3RhbGxEb2N1bWVudCgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0JCWZEb2N1bWVudD0gbmV3IERvY3VtZW50KCJmb28iKTsKLQkJZlZpZXdlci5zZXREb2N1bWVudChmRG9jdW1lbnQpOwotCi0JCS8vIGluaXRpYWwgcHJvY2VzcwotCQlmQmFycmllci5hd2FpdCgpOwotCQlmQmFycmllci53YWtlQWxsKCk7Ci0KLQkJcG9sbFVudGlsQ2xlYW4oKTsKLQkJZkNhbGxMb2cuY2xlYXIoKTsKLQl9Ci0KLQl2b2lkIHBvbGxVbnRpbENsZWFuKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLQkJLy8gd2FpdCBmb3IgcmVjb25jaWxlciB0byBiZWNvbWUgY2xlYW4KLQkJbG9uZyBzdGFydD0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCXdoaWxlIChpc0RpcnR5KCkpIHsKLQkJCWxvbmcgY3VycmVudD0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCQlpZiAoY3VycmVudCA+IHN0YXJ0ICsgNTAwMCkKLQkJCQlmYWlsKCJ3YWl0ZWQgPiA1cyBmb3IgcmVjb25jaWxlciB0byBjb21wbGV0ZSIpOwotCQkJc3luY2hyb25pemVkICh0aGlzKSB7Ci0JCQkJd2FpdCg1MCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQl2b2lkIHBvbGxVbnRpbEluYWN0aXZlKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLQkJLy8gd2FpdCBmb3IgcmVjb25jaWxlciB0byBiZWNvbWUgY2xlYW4KLQkJbG9uZyBzdGFydD0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCXdoaWxlIChpc0FjdGl2ZSgpKSB7Ci0JCQlsb25nIGN1cnJlbnQ9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQkJaWYgKGN1cnJlbnQgPiBzdGFydCArIDUwMDApCi0JCQkJZmFpbCgid2FpdGVkID4gNXMgZm9yIHJlY29uY2lsZXIgdG8gY29tcGxldGUiKTsKLQkJCXN5bmNocm9uaXplZCAodGhpcykgewotCQkJCXdhaXQoNTApOwotCQkJfQotCQl9Ci0JfQotCi0JYm9vbGVhbiBpc0FjdGl2ZSgpIHsKLQkJT2JqZWN0IGJvb2w9IGZBY2Nlc3Nvci5pbnZva2UoImlzQWN0aXZlIiwgbnVsbCk7Ci0JCXJldHVybiAoKEJvb2xlYW4pIGJvb2wpLmJvb2xlYW5WYWx1ZSgpOwotCX0KLQotCWJvb2xlYW4gaXNEaXJ0eSgpIHsKLQkJT2JqZWN0IGJvb2w9IGZBY2Nlc3Nvci5pbnZva2UoImlzRGlydHkiLCBudWxsKTsKLQkJcmV0dXJuICgoQm9vbGVhbikgYm9vbCkuYm9vbGVhblZhbHVlKCk7Ci0JfQotCi0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL3JlY29uY2lsZXIvUmVjb25jaWxlclRlc3RTdWl0ZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvcmVjb25jaWxlci9SZWNvbmNpbGVyVGVzdFN1aXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyZGZlMTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvcmVjb25jaWxlci9SZWNvbmNpbGVyVGVzdFN1aXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlc3RzLnJlY29uY2lsZXI7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi0KLS8qKgotICoKLSAqIEBzaW5jZSAzLjAKLSAqLwotcHVibGljIGNsYXNzIFJlY29uY2lsZXJUZXN0U3VpdGUgewotCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlUZXN0U3VpdGUgc3VpdGU9IG5ldyBUZXN0U3VpdGUoIlRlc3QgU3VpdGUgb3JnLmVjbGlwc2UuamZhY2UudGV4dC50ZXN0cy5yZWNvbmNpbGVyIik7Ci0JCS8vJEpVbml0LUJFR0lOJAotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoQWJzdHJhY3RSZWNvbmNpbGVyVGVzdC5jbGFzcyk7Ci0JCS8vJEpVbml0LUVORCQKLQkJcmV0dXJuIHN1aXRlOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL3J1bGVzL0RlZmF1bHRQYXJ0aXRpb25lclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL3J1bGVzL0RlZmF1bHRQYXJ0aXRpb25lclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGRjMTE0Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9ydWxlcy9EZWZhdWx0UGFydGl0aW9uZXJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuamZhY2UudGV4dC50ZXN0cy5ydWxlczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50UGFydGl0aW9uZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5ydWxlcy5EZWZhdWx0UGFydGl0aW9uZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5ydWxlcy5JUGFydGl0aW9uVG9rZW5TY2FubmVyOwotCi1wdWJsaWMgY2xhc3MgRGVmYXVsdFBhcnRpdGlvbmVyVGVzdCBleHRlbmRzIEZhc3RQYXJ0aXRpb25lclRlc3QgewotCXByb3RlY3RlZCBJRG9jdW1lbnRQYXJ0aXRpb25lciBjcmVhdGVQYXJ0aXRpb25lcihJUGFydGl0aW9uVG9rZW5TY2FubmVyIHNjYW5uZXIpIHsKLQkJcmV0dXJuIG5ldyBEZWZhdWx0UGFydGl0aW9uZXIoc2Nhbm5lciwgbmV3IFN0cmluZ1tdIHsgREVGQVVMVCwgQ09NTUVOVCB9KTsKLQl9Ci0KLQkvKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UudGV4dC50ZXN0cy5ydWxlcy5GYXN0UGFydGl0aW9uZXJUZXN0I3Rlc3RQUjEzMDkwMCgpCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFBSMTMwOTAwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiQnVnMTMwOTAwIG5vdCBmaXhlZCBpbiBEZWZhdWx0UGFydGl0aW9uZXIiKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9ydWxlcy9EZWZhdWx0UGFydGl0aW9uZXJaZXJvTGVuZ3RoVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvcnVsZXMvRGVmYXVsdFBhcnRpdGlvbmVyWmVyb0xlbmd0aFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWUxNzkyYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9ydWxlcy9EZWZhdWx0UGFydGl0aW9uZXJaZXJvTGVuZ3RoVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjY1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQudGVzdHMucnVsZXM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkRvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVR5cGVkUmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQucnVsZXMuRmFzdFBhcnRpdGlvbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQucnVsZXMuSVBhcnRpdGlvblRva2VuU2Nhbm5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJ1bGVzLklQcmVkaWNhdGVSdWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQucnVsZXMuSVRva2VuOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQucnVsZXMuTXVsdGlMaW5lUnVsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJ1bGVzLlJ1bGVCYXNlZFBhcnRpdGlvblNjYW5uZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5ydWxlcy5Ub2tlbjsKLQotCi0vKioKLSAqIEBzaW5jZSAzLjAKLSAqLwotcHVibGljIGNsYXNzIERlZmF1bHRQYXJ0aXRpb25lclplcm9MZW5ndGhUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIENPTU1FTlQ9ICJjb21tZW50IjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVD0gSURvY3VtZW50LkRFRkFVTFRfQ09OVEVOVF9UWVBFOwotCi0JcHJpdmF0ZSBJRG9jdW1lbnQgZkRvYzsKLQlwcml2YXRlIEZhc3RQYXJ0aXRpb25lciBmUGFydGl0aW9uZXI7Ci0KLQlwdWJsaWMgdm9pZCBzZXRVcCgpIHsKLQkJZkRvYz0gbmV3IERvY3VtZW50KCk7Ci0JCUlQYXJ0aXRpb25Ub2tlblNjYW5uZXIgc2Nhbm5lcj0gbmV3IFJ1bGVCYXNlZFBhcnRpdGlvblNjYW5uZXIoKSB7Ci0JCQl7Ci0JCQkJSVRva2VuIGNvbW1lbnQ9IG5ldyBUb2tlbihDT01NRU5UKTsKLQkJCQlJUHJlZGljYXRlUnVsZVtdIHJ1bGVzPSBuZXcgSVByZWRpY2F0ZVJ1bGVbXSB7IG5ldyBNdWx0aUxpbmVSdWxlKCIvKiIsICIqLyIsIGNvbW1lbnQpIH07Ci0JCQkJc2V0UHJlZGljYXRlUnVsZXMocnVsZXMpOwotCi0JCQl9Ci0JCX07Ci0JCWZQYXJ0aXRpb25lcj0gbmV3IEZhc3RQYXJ0aXRpb25lcihzY2FubmVyLCBuZXcgU3RyaW5nW10geyBERUZBVUxULCBDT01NRU5UIH0pOwotCQlmRG9jLnNldERvY3VtZW50UGFydGl0aW9uZXIoZlBhcnRpdGlvbmVyKTsKLQkJZlBhcnRpdGlvbmVyLmNvbm5lY3QoZkRvYyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldFplcm9MZW5ndGhQYXJ0aXRpb24oKSB7Ci0JCWZEb2Muc2V0KCJkb2N1ICAgICBtZW50LyogY29tbWVudCAqL2RvY3UgICAgIG1lbnQiKTsKLQotCQlpbnRbXSBvZmZzZXRzPSBuZXcgaW50W10geyAxMywgMjYgfTsKLQkJYXNzZXJ0R2V0WmVyb0xlbmd0aFBhcnRpdGlvbl9JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKG9mZnNldHMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRaZXJvTGVuZ3RoUGFydGl0aW9uRW1wdHlNaWRkbGUoKSB7Ci0JCWZEb2Muc2V0KCJkb2N1ICAgICBtZW50LyogY29tbWVudCAqLy8qIGNvbW1lbnQgKi9kb2N1ICAgICBtZW50Iik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMTMsIDI2LCAyNiwgMzkgfTsKLQkJYXNzZXJ0R2V0WmVyb0xlbmd0aFBhcnRpdGlvbl9JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKG9mZnNldHMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRaZXJvTGVuZ3RoUGFydGl0aW9uRW1wdHlTdGFydCgpIHsKLQkJZkRvYy5zZXQoIi8qIGNvbW1lbnQgKi9kb2N1ICAgICBtZW50Iik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMCwgMTMgfTsKLQkJYXNzZXJ0R2V0WmVyb0xlbmd0aFBhcnRpdGlvbl9JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKG9mZnNldHMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRaZXJvTGVuZ3RoUGFydGl0aW9uRW1wdHlFbmQoKSB7Ci0JCWZEb2Muc2V0KCJkb2N1ICAgICBtZW50LyogY29tbWVudCAqLyIpOwotCi0JCWludFtdIG9mZnNldHM9IG5ldyBpbnRbXSB7IDEzLCAyNiB9OwotCQlhc3NlcnRHZXRaZXJvTGVuZ3RoUGFydGl0aW9uX0ludGVybGVhdmluZ1BhcnRpdGlvbnMob2Zmc2V0cyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldFplcm9MZW5ndGhDb250ZW50VHlwZSgpIHsKLQkJZkRvYy5zZXQoImRvY3UgICAgIG1lbnQvKiBjb21tZW50ICovZG9jdSAgICAgbWVudCIpOwotCi0JCWludFtdIG9mZnNldHM9IG5ldyBpbnRbXSB7IDEzLCAyNiB9OwotCQlhc3NlcnRHZXRaZXJvTGVuZ3RoQ29udGVudFR5cGVfSW50ZXJsZWF2aW5nUGFydGl0aW9ucyhvZmZzZXRzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0WmVyb0xlbmd0aENvbnRlbnRUeXBlRW1wdHlNaWRkbGUoKSB7Ci0JCWZEb2Muc2V0KCJkb2N1ICAgICBtZW50LyogY29tbWVudCAqLy8qIGNvbW1lbnQgKi9kb2N1ICAgICBtZW50Iik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMTMsIDI2LCAyNiwgMzkgfTsKLQkJYXNzZXJ0R2V0WmVyb0xlbmd0aENvbnRlbnRUeXBlX0ludGVybGVhdmluZ1BhcnRpdGlvbnMob2Zmc2V0cyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldFplcm9MZW5ndGhDb250ZW50VHlwZUVtcHR5U3RhcnQoKSB7Ci0JCWZEb2Muc2V0KCIvKiBjb21tZW50ICovZG9jdSAgICAgbWVudCIpOwotCi0JCWludFtdIG9mZnNldHM9IG5ldyBpbnRbXSB7IDAsIDEzIH07Ci0JCWFzc2VydEdldFplcm9MZW5ndGhDb250ZW50VHlwZV9JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKG9mZnNldHMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRaZXJvTGVuZ3RoQ29udGVudFR5cGVFbXB0eUVuZCgpIHsKLQkJZkRvYy5zZXQoImRvY3UgICAgIG1lbnQvKiBjb21tZW50ICovIik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMTMsIDI2IH07Ci0JCWFzc2VydEdldFplcm9MZW5ndGhDb250ZW50VHlwZV9JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKG9mZnNldHMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDb21wdXRlWmVyb0xlbmd0aFBhcnRpdGlvbmluZygpIHsKLQkJZkRvYy5zZXQoImRvY3UgICAgIG1lbnQvKiBjb21tZW50ICovZG9jdSAgICAgbWVudCIpOwotCi0JCWludFtdIG9mZnNldHM9IG5ldyBpbnRbXSB7IDEzLCAyNiB9OwotCQlhc3NlcnRDb21wdXRlWmVyb0xlbmd0aFBhcnRpdGlvbmluZ19JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKG9mZnNldHMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDb21wdXRlWmVyb0xlbmd0aFBhcnRpdGlvbmluZ0VtcHR5TWlkZGxlKCkgewotCQlmRG9jLnNldCgiZG9jdSAgICAgbWVudC8qIGNvbW1lbnQgKi8vKiBjb21tZW50ICovZG9jdSAgICAgbWVudCIpOwotCi0JCWludFtdIG9mZnNldHM9IG5ldyBpbnRbXSB7IDEzLCAyNiwgMjYsIDM5IH07Ci0JCWFzc2VydENvbXB1dGVaZXJvTGVuZ3RoUGFydGl0aW9uaW5nX0ludGVybGVhdmluZ1BhcnRpdGlvbnMob2Zmc2V0cyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENvbXB1dGVaZXJvTGVuZ3RoUGFydGl0aW9uaW5nRW1wdHlTdGFydCgpIHsKLQkJZkRvYy5zZXQoIi8qIGNvbW1lbnQgKi9kb2N1ICAgICBtZW50Iik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMCwgMTMgfTsKLQkJYXNzZXJ0Q29tcHV0ZVplcm9MZW5ndGhQYXJ0aXRpb25pbmdfSW50ZXJsZWF2aW5nUGFydGl0aW9ucyhvZmZzZXRzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q29tcHV0ZVplcm9MZW5ndGhQYXJ0aXRpb25pbmdFbXB0eUVuZCgpIHsKLQkJZkRvYy5zZXQoImRvY3UgICAgIG1lbnQvKiBjb21tZW50ICovIik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMTMsIDI2IH07Ci0JCWFzc2VydENvbXB1dGVaZXJvTGVuZ3RoUGFydGl0aW9uaW5nX0ludGVybGVhdmluZ1BhcnRpdGlvbnMob2Zmc2V0cyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENvbXB1dGVQYXJ0aXRpb25pbmdTdWJyYW5nZUJlZm9yZUJvdW5kYXJpZXMoKSB7Ci0JCWZEb2Muc2V0KCJkb2N1ICAgICBtZW50LyogY29tbWVudCAqLy8qIGNvbW1lbnQgKi9kb2N1ICAgICBtZW50Iik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMTMsIDI2LCAyNiB9OwotCQlhc3NlcnRDb21wdXRlWmVyb0xlbmd0aFBhcnRpdGlvbmluZ19JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKDEyLCAzOCwgb2Zmc2V0cywgREVGQVVMVCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENvbXB1dGVQYXJ0aXRpb25pbmdTdWJyYW5nZU9uQm91bmRhcmllcygpIHsKLQkJZkRvYy5zZXQoImRvY3UgICAgIG1lbnQvKiBjb21tZW50ICovLyogY29tbWVudCAqL2RvY3UgICAgIG1lbnQiKTsKLQotCQlpbnRbXSBvZmZzZXRzPSBuZXcgaW50W10geyAxMywgMjYsIDI2LCAzOSB9OwotCQlhc3NlcnRDb21wdXRlWmVyb0xlbmd0aFBhcnRpdGlvbmluZ19JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKDEzLCAzOSwgb2Zmc2V0cywgREVGQVVMVCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENvbXB1dGVQYXJ0aXRpb25pbmdTdWJyYW5nZU9uQm91bmRhcmllczIoKSB7Ci0JCWZEb2Muc2V0KCIvKiBjb21tZW50ICovLyogY29tbWVudCAqLy8qIGNvbW1lbnQgKi8iKTsKLQotCQlpbnRbXSBvZmZzZXRzPSBuZXcgaW50W10geyAxMywgMjYgfTsKLQkJYXNzZXJ0Q29tcHV0ZVplcm9MZW5ndGhQYXJ0aXRpb25pbmdfSW50ZXJsZWF2aW5nUGFydGl0aW9ucygxMywgMjYsIG9mZnNldHMsIERFRkFVTFQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDb21wdXRlUGFydGl0aW9uaW5nU3VicmFuZ2VBZnRlckJvdW5kYXJpZXMoKSB7Ci0JCWZEb2Muc2V0KCJkb2N1ICAgICBtZW50LyogY29tbWVudCAqLy8qIGNvbW1lbnQgKi9kb2N1ICAgICBtZW50Iik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMjYsIDI2LCAzOSB9OwotCQlhc3NlcnRDb21wdXRlWmVyb0xlbmd0aFBhcnRpdGlvbmluZ19JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKDE0LCA0MCwgb2Zmc2V0cywgQ09NTUVOVCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENvbXB1dGVQYXJ0aXRpb25pbmdTdWJyYW5nZUluQm91bmRhcmllczEoKSB7Ci0JCWZEb2Muc2V0KCIvKiBjb21tZW50ICovIik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgfTsKLQkJYXNzZXJ0Q29tcHV0ZVplcm9MZW5ndGhQYXJ0aXRpb25pbmdfSW50ZXJsZWF2aW5nUGFydGl0aW9ucygxLCAxMiwgb2Zmc2V0cywgQ09NTUVOVCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENvbXB1dGVQYXJ0aXRpb25pbmdTdWJyYW5nZUluQm91bmRhcmllczIoKSB7Ci0JCWZEb2Muc2V0KCJkb2N1ICAgICBtZW50Iik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgfTsKLQkJYXNzZXJ0Q29tcHV0ZVplcm9MZW5ndGhQYXJ0aXRpb25pbmdfSW50ZXJsZWF2aW5nUGFydGl0aW9ucygxLCAxMiwgb2Zmc2V0cywgREVGQVVMVCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGFzc2VydENvbXB1dGVaZXJvTGVuZ3RoUGFydGl0aW9uaW5nX0ludGVybGVhdmluZ1BhcnRpdGlvbnMoaW50W10gb2Zmc2V0cykgewotCQlhc3NlcnRDb21wdXRlWmVyb0xlbmd0aFBhcnRpdGlvbmluZ19JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKDAsIGZEb2MuZ2V0TGVuZ3RoKCksIG9mZnNldHMsIERFRkFVTFQpOwotCX0KLQotCXByaXZhdGUgdm9pZCBhc3NlcnRDb21wdXRlWmVyb0xlbmd0aFBhcnRpdGlvbmluZ19JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKGludCBzdGFydE9mZnNldCwgaW50IGVuZE9mZnNldCwgaW50W10gb2Zmc2V0cywgU3RyaW5nIHN0YXJ0VHlwZSkgewotCQlJVHlwZWRSZWdpb25bXSByZWdpb25zPSBmUGFydGl0aW9uZXIuY29tcHV0ZVBhcnRpdGlvbmluZyhzdGFydE9mZnNldCwgZW5kT2Zmc2V0IC0gc3RhcnRPZmZzZXQsIHRydWUpOwotCi0JCVN0cmluZyB0eXBlPSBzdGFydFR5cGU7Ci0JCWludCBwcmV2aW91c09mZnNldD0gc3RhcnRPZmZzZXQ7Ci0KLQkJYXNzZXJ0RXF1YWxzKG9mZnNldHMubGVuZ3RoICsgMSwgcmVnaW9ucy5sZW5ndGgpOwotCQlmb3IgKGludCBpPSAwOyBpIDw9IG9mZnNldHMubGVuZ3RoOyBpKyspIHsKLQkJCWludCBjdXJyZW50T2Zmc2V0PSAoaSA9PSBvZmZzZXRzLmxlbmd0aCkgPyBlbmRPZmZzZXQgOiBvZmZzZXRzW2ldOwotCQkJSVR5cGVkUmVnaW9uIHJlZ2lvbj0gcmVnaW9uc1tpXTsKLQotCQkJYXNzZXJ0VHlwZWRSZWdpb24ocmVnaW9uLCBwcmV2aW91c09mZnNldCwgY3VycmVudE9mZnNldCwgdHlwZSk7Ci0KLQkJCS8vIGFkdmFuY2UKLQkJCWlmICh0eXBlID09IERFRkFVTFQpCi0JCQkJdHlwZT0gQ09NTUVOVDsKLQkJCWVsc2UKLQkJCQl0eXBlPSBERUZBVUxUOwotCQkJcHJldmlvdXNPZmZzZXQ9IGN1cnJlbnRPZmZzZXQ7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgYXNzZXJ0R2V0WmVyb0xlbmd0aENvbnRlbnRUeXBlX0ludGVybGVhdmluZ1BhcnRpdGlvbnMoaW50W10gb2Zmc2V0cykgewotCQlTdHJpbmcgdHlwZT0gREVGQVVMVDsKLQkJaW50IHByZXZpb3VzT2Zmc2V0PSAwOwotCQlmb3IgKGludCBpPSAwOyBpIDw9IG9mZnNldHMubGVuZ3RoOyBpKyspIHsKLQkJCWludCBvZmZzZXQ9IChpID09IG9mZnNldHMubGVuZ3RoKSA/IGZEb2MuZ2V0TGVuZ3RoKCkgOiBvZmZzZXRzW2ldOwotCQkJYXNzZXJ0RXF1YWxQYXJ0aXRpb25UeXBlKHByZXZpb3VzT2Zmc2V0LCBvZmZzZXQsIHR5cGUpOwotCi0JCQkvLyBhZHZhbmNlCi0JCQlpZiAodHlwZSA9PSBERUZBVUxUKQotCQkJCXR5cGU9IENPTU1FTlQ7Ci0JCQllbHNlCi0JCQkJdHlwZT0gREVGQVVMVDsKLQkJCXByZXZpb3VzT2Zmc2V0PSBvZmZzZXQ7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgYXNzZXJ0R2V0WmVyb0xlbmd0aFBhcnRpdGlvbl9JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKGludFtdIG9mZnNldHMpIHsKLQkJU3RyaW5nIHR5cGU9IERFRkFVTFQ7Ci0JCWludCBwcmV2aW91c09mZnNldD0gMDsKLQkJZm9yIChpbnQgaT0gMDsgaSA8PSBvZmZzZXRzLmxlbmd0aDsgaSsrKSB7Ci0JCQlpbnQgb2Zmc2V0PSAoaSA9PSBvZmZzZXRzLmxlbmd0aCkgPyBmRG9jLmdldExlbmd0aCgpIDogb2Zmc2V0c1tpXTsKLQkJCWFzc2VydEVxdWFsUGFydGl0aW9uKHByZXZpb3VzT2Zmc2V0LCBvZmZzZXQsIHR5cGUpOwotCi0JCQkvLyBhZHZhbmNlCi0JCQlpZiAodHlwZSA9PSBERUZBVUxUKQotCQkJCXR5cGU9IENPTU1FTlQ7Ci0JCQllbHNlCi0JCQkJdHlwZT0gREVGQVVMVDsKLQkJCXByZXZpb3VzT2Zmc2V0PSBvZmZzZXQ7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gaXNPcGVuVHlwZShTdHJpbmcgdHlwZSkgewotCQlyZXR1cm4gdHlwZS5lcXVhbHMoREVGQVVMVCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGFzc2VydEVxdWFsUGFydGl0aW9uKGludCBvZmZzZXQsIGludCBpbmNsdXNpdmVFbmQsIFN0cmluZyB0eXBlKSB7Ci0JCWludCBmcm9tPSBpc09wZW5UeXBlKHR5cGUpID8gb2Zmc2V0IDogb2Zmc2V0ICsgMTsKLQkJaW50IHRvPSBpc09wZW5UeXBlKHR5cGUpID8gaW5jbHVzaXZlRW5kIDogaW5jbHVzaXZlRW5kIC0gMTsKLQkJZm9yIChpbnQgaT0gZnJvbTsgaSA8PSB0bzsgaSsrKSB7Ci0JCQlJVHlwZWRSZWdpb24gcmVnaW9uPSBmUGFydGl0aW9uZXIuZ2V0UGFydGl0aW9uKGksIHRydWUpOwotCQkJYXNzZXJ0VHlwZWRSZWdpb24ocmVnaW9uLCBvZmZzZXQsIGluY2x1c2l2ZUVuZCwgdHlwZSk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgYXNzZXJ0VHlwZWRSZWdpb24oSVR5cGVkUmVnaW9uIHJlZ2lvbiwgaW50IG9mZnNldCwgaW50IGluY2x1c2l2ZUVuZCwgU3RyaW5nIHR5cGUpIHsKLQkJYXNzZXJ0RXF1YWxzKG9mZnNldCwgcmVnaW9uLmdldE9mZnNldCgpKTsKLQkJYXNzZXJ0RXF1YWxzKGluY2x1c2l2ZUVuZCAtIG9mZnNldCwgcmVnaW9uLmdldExlbmd0aCgpKTsKLQkJYXNzZXJ0RXF1YWxzKHR5cGUsIHJlZ2lvbi5nZXRUeXBlKCkpOwotCX0KLQotCXByaXZhdGUgdm9pZCBhc3NlcnRFcXVhbFBhcnRpdGlvblR5cGUoaW50IG9mZnNldCwgaW50IGluY2x1c2l2ZUVuZCwgU3RyaW5nIHR5cGUpIHsKLQkJaW50IGZyb209IGlzT3BlblR5cGUodHlwZSkgPyBvZmZzZXQgOiBvZmZzZXQgKyAxOwotCQlpbnQgdG89IGlzT3BlblR5cGUodHlwZSkgPyBpbmNsdXNpdmVFbmQgOiBpbmNsdXNpdmVFbmQgLSAxOwotCQlmb3IgKGludCBpPSBmcm9tOyBpIDw9IHRvOyBpKyspIHsKLQkJCWFzc2VydEVxdWFscyh0eXBlLCBmUGFydGl0aW9uZXIuZ2V0Q29udGVudFR5cGUoaSwgdHJ1ZSkpOwotCQl9Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9ydWxlcy9GYXN0UGFydGl0aW9uZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9ydWxlcy9GYXN0UGFydGl0aW9uZXJUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2NzAxNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvcnVsZXMvRmFzdFBhcnRpdGlvbmVyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzA1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQudGVzdHMucnVsZXM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkJhZExvY2F0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnRQYXJ0aXRpb25lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUeXBlZFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJ1bGVzLkZhc3RQYXJ0aXRpb25lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJ1bGVzLklQYXJ0aXRpb25Ub2tlblNjYW5uZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5ydWxlcy5JUHJlZGljYXRlUnVsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJ1bGVzLklUb2tlbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJ1bGVzLk11bHRpTGluZVJ1bGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5ydWxlcy5SdWxlQmFzZWRQYXJ0aXRpb25TY2FubmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQucnVsZXMuU2luZ2xlTGluZVJ1bGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5ydWxlcy5Ub2tlbjsKLQotCi0vKioKLSAqIEBzaW5jZSAzLjAKLSAqLwotcHVibGljIGNsYXNzIEZhc3RQYXJ0aXRpb25lclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBDT01NRU5UPSAiY29tbWVudCI7Ci0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVD0gSURvY3VtZW50LkRFRkFVTFRfQ09OVEVOVF9UWVBFOwotCi0JcHJpdmF0ZSBJRG9jdW1lbnQgZkRvYzsKLQlwcml2YXRlIElEb2N1bWVudFBhcnRpdGlvbmVyIGZQYXJ0aXRpb25lcjsKLQotCXB1YmxpYyB2b2lkIHNldFVwKCkgewotCQlmRG9jPSBuZXcgRG9jdW1lbnQoKTsKLQkJSVBhcnRpdGlvblRva2VuU2Nhbm5lciBzY2FubmVyPSBuZXcgUnVsZUJhc2VkUGFydGl0aW9uU2Nhbm5lcigpIHsKLQkJCXsKLQkJCQlJVG9rZW4gY29tbWVudD0gbmV3IFRva2VuKENPTU1FTlQpOwotCQkJCUlQcmVkaWNhdGVSdWxlW10gcnVsZXM9IG5ldyBJUHJlZGljYXRlUnVsZVtdIHsgbmV3IE11bHRpTGluZVJ1bGUoIi8qIiwgIiovIiwgY29tbWVudCkgfTsKLQkJCQlzZXRQcmVkaWNhdGVSdWxlcyhydWxlcyk7Ci0KLQkJCX0KLQkJfTsKLQkJZlBhcnRpdGlvbmVyPSBjcmVhdGVQYXJ0aXRpb25lcihzY2FubmVyKTsKLQkJZkRvYy5zZXREb2N1bWVudFBhcnRpdGlvbmVyKGZQYXJ0aXRpb25lcik7Ci0JCWZQYXJ0aXRpb25lci5jb25uZWN0KGZEb2MpOwotCX0KLQotCXByb3RlY3RlZCBJRG9jdW1lbnRQYXJ0aXRpb25lciBjcmVhdGVQYXJ0aXRpb25lcihJUGFydGl0aW9uVG9rZW5TY2FubmVyIHNjYW5uZXIpIHsKLQkJcmV0dXJuIG5ldyBGYXN0UGFydGl0aW9uZXIoc2Nhbm5lciwgbmV3IFN0cmluZ1tdIHsgREVGQVVMVCwgQ09NTUVOVCB9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0UGFydGl0aW9uKCkgewotCQlmRG9jLnNldCgiZG9jdSAgICAgbWVudC8qIGNvbW1lbnQgKi9kb2N1ICAgICBtZW50Iik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMTMsIDI2IH07Ci0JCWFzc2VydEdldFBhcnRpdGlvbl9JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKG9mZnNldHMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRQYXJ0aXRpb25FbXB0eU1pZGRsZSgpIHsKLQkJZkRvYy5zZXQoImRvY3UgICAgIG1lbnQvKiBjb21tZW50ICovLyogY29tbWVudCAqL2RvY3UgICAgIG1lbnQiKTsKLQotCQlpbnRbXSBvZmZzZXRzPSBuZXcgaW50W10geyAxMywgMjYsIDI2LCAzOSB9OwotCQlhc3NlcnRHZXRQYXJ0aXRpb25fSW50ZXJsZWF2aW5nUGFydGl0aW9ucyhvZmZzZXRzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0UGFydGl0aW9uRW1wdHlTdGFydCgpIHsKLQkJZkRvYy5zZXQoIi8qIGNvbW1lbnQgKi9kb2N1ICAgICBtZW50Iik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMCwgMTMgfTsKLQkJYXNzZXJ0R2V0UGFydGl0aW9uX0ludGVybGVhdmluZ1BhcnRpdGlvbnMob2Zmc2V0cyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldFBhcnRpdGlvbkVtcHR5RW5kKCkgewotCQlmRG9jLnNldCgiZG9jdSAgICAgbWVudC8qIGNvbW1lbnQgKi8iKTsKLQotCQlpbnRbXSBvZmZzZXRzPSBuZXcgaW50W10geyAxMywgMjYgfTsKLQkJYXNzZXJ0R2V0UGFydGl0aW9uX0ludGVybGVhdmluZ1BhcnRpdGlvbnMob2Zmc2V0cyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldENvbnRlbnRUeXBlKCkgewotCQlmRG9jLnNldCgiZG9jdSAgICAgbWVudC8qIGNvbW1lbnQgKi9kb2N1ICAgICBtZW50Iik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMTMsIDI2IH07Ci0JCWFzc2VydEdldENvbnRlbnRUeXBlX0ludGVybGVhdmluZ1BhcnRpdGlvbnMob2Zmc2V0cyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldENvbnRlbnRUeXBlRW1wdHlNaWRkbGUoKSB7Ci0JCWZEb2Muc2V0KCJkb2N1ICAgICBtZW50LyogY29tbWVudCAqLy8qIGNvbW1lbnQgKi9kb2N1ICAgICBtZW50Iik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMTMsIDI2LCAyNiwgMzkgfTsKLQkJYXNzZXJ0R2V0Q29udGVudFR5cGVfSW50ZXJsZWF2aW5nUGFydGl0aW9ucyhvZmZzZXRzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0Q29udGVudFR5cGVFbXB0eVN0YXJ0KCkgewotCQlmRG9jLnNldCgiLyogY29tbWVudCAqL2RvY3UgICAgIG1lbnQiKTsKLQotCQlpbnRbXSBvZmZzZXRzPSBuZXcgaW50W10geyAwLCAxMyB9OwotCQlhc3NlcnRHZXRDb250ZW50VHlwZV9JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKG9mZnNldHMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRDb250ZW50VHlwZUVtcHR5RW5kKCkgewotCQlmRG9jLnNldCgiZG9jdSAgICAgbWVudC8qIGNvbW1lbnQgKi8iKTsKLQotCQlpbnRbXSBvZmZzZXRzPSBuZXcgaW50W10geyAxMywgMjYgfTsKLQkJYXNzZXJ0R2V0Q29udGVudFR5cGVfSW50ZXJsZWF2aW5nUGFydGl0aW9ucyhvZmZzZXRzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q29tcHV0ZVBhcnRpdGlvbmluZygpIHsKLQkJZkRvYy5zZXQoImRvY3UgICAgIG1lbnQvKiBjb21tZW50ICovZG9jdSAgICAgbWVudCIpOwotCi0JCWludFtdIG9mZnNldHM9IG5ldyBpbnRbXSB7IDEzLCAyNiB9OwotCQlhc3NlcnRDb21wdXRlUGFydGl0aW9uaW5nX0ludGVybGVhdmluZ1BhcnRpdGlvbnMob2Zmc2V0cyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENvbXB1dGVQYXJ0aXRpb25pbmdFbXB0eU1pZGRsZSgpIHsKLQkJZkRvYy5zZXQoImRvY3UgICAgIG1lbnQvKiBjb21tZW50ICovLyogY29tbWVudCAqL2RvY3UgICAgIG1lbnQiKTsKLQotCQlpbnRbXSBvZmZzZXRzPSBuZXcgaW50W10geyAxMywgMjYsIDI2LCAzOSB9OwotCQlhc3NlcnRDb21wdXRlUGFydGl0aW9uaW5nX0ludGVybGVhdmluZ1BhcnRpdGlvbnMob2Zmc2V0cyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENvbXB1dGVQYXJ0aXRpb25pbmdFbXB0eVN0YXJ0KCkgewotCQlmRG9jLnNldCgiLyogY29tbWVudCAqL2RvY3UgICAgIG1lbnQiKTsKLQotCQlpbnRbXSBvZmZzZXRzPSBuZXcgaW50W10geyAwLCAxMyB9OwotCQlhc3NlcnRDb21wdXRlUGFydGl0aW9uaW5nX0ludGVybGVhdmluZ1BhcnRpdGlvbnMob2Zmc2V0cyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENvbXB1dGVQYXJ0aXRpb25pbmdFbXB0eUVuZCgpIHsKLQkJZkRvYy5zZXQoImRvY3UgICAgIG1lbnQvKiBjb21tZW50ICovIik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMTMsIDI2IH07Ci0JCWFzc2VydENvbXB1dGVQYXJ0aXRpb25pbmdfSW50ZXJsZWF2aW5nUGFydGl0aW9ucyhvZmZzZXRzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q29tcHV0ZVBhcnRpdGlvbmluZ1N1YnJhbmdlQmVmb3JlQm91bmRhcmllcygpIHsKLQkJZkRvYy5zZXQoImRvY3UgICAgIG1lbnQvKiBjb21tZW50ICovLyogY29tbWVudCAqL2RvY3UgICAgIG1lbnQiKTsKLQotCQlpbnRbXSBvZmZzZXRzPSBuZXcgaW50W10geyAxMywgMjYsIDI2IH07Ci0JCWFzc2VydENvbXB1dGVQYXJ0aXRpb25pbmdfSW50ZXJsZWF2aW5nUGFydGl0aW9ucygxMiwgMzgsIG9mZnNldHMsIERFRkFVTFQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDb21wdXRlUGFydGl0aW9uaW5nU3VicmFuZ2VPbkJvdW5kYXJpZXMoKSB7Ci0JCWZEb2Muc2V0KCJkb2N1ICAgICBtZW50LyogY29tbWVudCAqLy8qIGNvbW1lbnQgKi9kb2N1ICAgICBtZW50Iik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMTMsIDI2LCAyNiwgMzkgfTsKLQkJYXNzZXJ0Q29tcHV0ZVBhcnRpdGlvbmluZ19JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKDEzLCAzOSwgb2Zmc2V0cywgREVGQVVMVCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENvbXB1dGVQYXJ0aXRpb25pbmdTdWJyYW5nZU9uQm91bmRhcmllczIoKSB7Ci0JCWZEb2Muc2V0KCIvKiBjb21tZW50ICovLyogY29tbWVudCAqLy8qIGNvbW1lbnQgKi8iKTsKLQotCQlpbnRbXSBvZmZzZXRzPSBuZXcgaW50W10geyAxMywgMjYgfTsKLQkJYXNzZXJ0Q29tcHV0ZVBhcnRpdGlvbmluZ19JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKDEzLCAyNiwgb2Zmc2V0cywgREVGQVVMVCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENvbXB1dGVQYXJ0aXRpb25pbmdTdWJyYW5nZUFmdGVyQm91bmRhcmllcygpIHsKLQkJZkRvYy5zZXQoImRvY3UgICAgIG1lbnQvKiBjb21tZW50ICovLyogY29tbWVudCAqL2RvY3UgICAgIG1lbnQiKTsKLQotCQlpbnRbXSBvZmZzZXRzPSBuZXcgaW50W10geyAyNiwgMjYsIDM5IH07Ci0JCWFzc2VydENvbXB1dGVQYXJ0aXRpb25pbmdfSW50ZXJsZWF2aW5nUGFydGl0aW9ucygxNCwgNDAsIG9mZnNldHMsIENPTU1FTlQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDb21wdXRlUGFydGl0aW9uaW5nU3VicmFuZ2VJbkJvdW5kYXJpZXMxKCkgewotCQlmRG9jLnNldCgiLyogY29tbWVudCAqLyIpOwotCi0JCWludFtdIG9mZnNldHM9IG5ldyBpbnRbXSB7IH07Ci0JCWFzc2VydENvbXB1dGVQYXJ0aXRpb25pbmdfSW50ZXJsZWF2aW5nUGFydGl0aW9ucygxLCAxMiwgb2Zmc2V0cywgQ09NTUVOVCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENvbXB1dGVQYXJ0aXRpb25pbmdTdWJyYW5nZUluQm91bmRhcmllczIoKSB7Ci0JCWZEb2Muc2V0KCJkb2N1ICAgICBtZW50Iik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgfTsKLQkJYXNzZXJ0Q29tcHV0ZVBhcnRpdGlvbmluZ19JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKDEsIDEyLCBvZmZzZXRzLCBERUZBVUxUKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UFIxMDEwMTQoKSB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlmRG9jLnNldCgKLQkJCQkicGFja2FnZSBwcjEwMTAxNDtcbiIgKwotCQkJCSJcbiIgKwotCQkJCSJjbGFzcyBYIHtcbiIgKwotCQkJCSJTdHJpbmcgcz0gXG4iICsKLQkJCQkiCS8qZm9vKi87XG4iICsKLQkJCQkifVxuIik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gezQxLCA0OH07Ci0JCWFzc2VydENvbXB1dGVQYXJ0aXRpb25pbmdfSW50ZXJsZWF2aW5nUGFydGl0aW9ucyhvZmZzZXRzKTsKLQotCQlmRG9jLnJlcGxhY2UoNDAsIDgsICIJLypmb28qLyIpOwotCQlhc3NlcnRDb21wdXRlUGFydGl0aW9uaW5nX0ludGVybGVhdmluZ1BhcnRpdGlvbnMob2Zmc2V0cyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFBSMTMwOTAwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWZQYXJ0aXRpb25lci5kaXNjb25uZWN0KCk7Ci0JCUlQYXJ0aXRpb25Ub2tlblNjYW5uZXIgc2Nhbm5lcj0gbmV3IFJ1bGVCYXNlZFBhcnRpdGlvblNjYW5uZXIoKSB7Ci0JCQl7Ci0JCQkJSVRva2VuIGNvbW1lbnQ9IG5ldyBUb2tlbihDT01NRU5UKTsKLQkJCQlJUHJlZGljYXRlUnVsZVtdIHJ1bGVzPSBuZXcgSVByZWRpY2F0ZVJ1bGVbXSB7IG5ldyBTaW5nbGVMaW5lUnVsZSgiIyIsIG51bGwsIGNvbW1lbnQsIChjaGFyKSAwLCB0cnVlLCBmYWxzZSkgfTsKLQkJCQlzZXRQcmVkaWNhdGVSdWxlcyhydWxlcyk7Ci0JCQl9Ci0JCX07Ci0JCWZQYXJ0aXRpb25lcj0gY3JlYXRlUGFydGl0aW9uZXIoc2Nhbm5lcik7Ci0JCWZEb2Muc2V0RG9jdW1lbnRQYXJ0aXRpb25lcihmUGFydGl0aW9uZXIpOwotCQlmUGFydGl0aW9uZXIuY29ubmVjdChmRG9jKTsKLQotCQlmRG9jLnNldCgiIyIpOwotCQlpbnRbXSBvZmZzZXRzPSBuZXcgaW50W10geyAwLCAxIH07Ci0JCWFzc2VydENvbXB1dGVQYXJ0aXRpb25pbmdfSW50ZXJsZWF2aW5nUGFydGl0aW9ucyhvZmZzZXRzKTsKLQotICAgIH0KLQotCXByaXZhdGUgdm9pZCBhc3NlcnRDb21wdXRlUGFydGl0aW9uaW5nX0ludGVybGVhdmluZ1BhcnRpdGlvbnMoaW50W10gb2Zmc2V0cykgewotCQlhc3NlcnRDb21wdXRlUGFydGl0aW9uaW5nX0ludGVybGVhdmluZ1BhcnRpdGlvbnMoMCwgZkRvYy5nZXRMZW5ndGgoKSwgb2Zmc2V0cywgREVGQVVMVCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGFzc2VydENvbXB1dGVQYXJ0aXRpb25pbmdfSW50ZXJsZWF2aW5nUGFydGl0aW9ucyhpbnQgc3RhcnRPZmZzZXQsIGludCBlbmRPZmZzZXQsIGludFtdIG9mZnNldHMsIFN0cmluZyBzdGFydFR5cGUpIHsKLQkJSVR5cGVkUmVnaW9uW10gcmVnaW9ucz0gZlBhcnRpdGlvbmVyLmNvbXB1dGVQYXJ0aXRpb25pbmcoc3RhcnRPZmZzZXQsIGVuZE9mZnNldCAtIHN0YXJ0T2Zmc2V0KTsKLQotCQlTdHJpbmcgdHlwZT0gc3RhcnRUeXBlOwotCQlpbnQgcHJldmlvdXNPZmZzZXQ9IHN0YXJ0T2Zmc2V0OwotCi0JCWludCBqPSAwOwotCQlmb3IgKGludCBpPSAwOyBpIDw9IG9mZnNldHMubGVuZ3RoOyBpKyspIHsKLQkJCWludCBjdXJyZW50T2Zmc2V0PSAoaSA9PSBvZmZzZXRzLmxlbmd0aCkgPyBlbmRPZmZzZXQgOiBvZmZzZXRzW2ldOwotCQkJaWYgKGN1cnJlbnRPZmZzZXQgLSBwcmV2aW91c09mZnNldCAhPSAwKSB7IC8vIGRvbid0IGRvIGVtcHR5IHBhcnRpdGlvbnMKLQkJCQlJVHlwZWRSZWdpb24gcmVnaW9uPSByZWdpb25zW2orK107Ci0KLQkJCQlhc3NlcnRUeXBlZFJlZ2lvbihyZWdpb24sIHByZXZpb3VzT2Zmc2V0LCBjdXJyZW50T2Zmc2V0LCB0eXBlKTsKLQkJCX0KLQotCQkJLy8gYWR2YW5jZQotCQkJaWYgKHR5cGUgPT0gREVGQVVMVCkKLQkJCQl0eXBlPSBDT01NRU5UOwotCQkJZWxzZQotCQkJCXR5cGU9IERFRkFVTFQ7Ci0JCQlwcmV2aW91c09mZnNldD0gY3VycmVudE9mZnNldDsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBhc3NlcnRHZXRDb250ZW50VHlwZV9JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKGludFtdIG9mZnNldHMpIHsKLQkJU3RyaW5nIHR5cGU9IERFRkFVTFQ7Ci0JCWludCBwcmV2aW91c09mZnNldD0gMDsKLQkJZm9yIChpbnQgaT0gMDsgaSA8PSBvZmZzZXRzLmxlbmd0aDsgaSsrKSB7Ci0JCQlpbnQgb2Zmc2V0PSAoaSA9PSBvZmZzZXRzLmxlbmd0aCkgPyBmRG9jLmdldExlbmd0aCgpIDogb2Zmc2V0c1tpXTsKLQkJCWFzc2VydEVxdWFsUGFydGl0aW9uVHlwZShwcmV2aW91c09mZnNldCwgb2Zmc2V0LCB0eXBlKTsKLQotCQkJLy8gYWR2YW5jZQotCQkJaWYgKHR5cGUgPT0gREVGQVVMVCkKLQkJCQl0eXBlPSBDT01NRU5UOwotCQkJZWxzZQotCQkJCXR5cGU9IERFRkFVTFQ7Ci0JCQlwcmV2aW91c09mZnNldD0gb2Zmc2V0OwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGFzc2VydEdldFBhcnRpdGlvbl9JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKGludFtdIG9mZnNldHMpIHsKLQkJU3RyaW5nIHR5cGU9IERFRkFVTFQ7Ci0JCWludCBwcmV2aW91c09mZnNldD0gMDsKLQkJZm9yIChpbnQgaT0gMDsgaSA8PSBvZmZzZXRzLmxlbmd0aDsgaSsrKSB7Ci0JCQlpbnQgb2Zmc2V0PSAoaSA9PSBvZmZzZXRzLmxlbmd0aCkgPyBmRG9jLmdldExlbmd0aCgpIDogb2Zmc2V0c1tpXTsKLQkJCWFzc2VydEVxdWFsUGFydGl0aW9uKHByZXZpb3VzT2Zmc2V0LCBvZmZzZXQsIHR5cGUpOwotCi0JCQkvLyBhZHZhbmNlCi0JCQlpZiAodHlwZSA9PSBERUZBVUxUKQotCQkJCXR5cGU9IENPTU1FTlQ7Ci0JCQllbHNlCi0JCQkJdHlwZT0gREVGQVVMVDsKLQkJCXByZXZpb3VzT2Zmc2V0PSBvZmZzZXQ7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgYXNzZXJ0RXF1YWxQYXJ0aXRpb24oaW50IG9mZnNldCwgaW50IGVuZCwgU3RyaW5nIHR5cGUpIHsKLQkJaW50IGZyb209IG9mZnNldDsKLQkJaW50IHRvPSBlbmQgLSAxOwotCQlmb3IgKGludCBpPSBmcm9tOyBpIDw9IHRvOyBpKyspIHsKLQkJCUlUeXBlZFJlZ2lvbiByZWdpb249IGZQYXJ0aXRpb25lci5nZXRQYXJ0aXRpb24oaSk7Ci0JCQlhc3NlcnRUeXBlZFJlZ2lvbihyZWdpb24sIG9mZnNldCwgZW5kLCB0eXBlKTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBhc3NlcnRUeXBlZFJlZ2lvbihJVHlwZWRSZWdpb24gcmVnaW9uLCBpbnQgb2Zmc2V0LCBpbnQgZW5kLCBTdHJpbmcgdHlwZSkgewotCQlhc3NlcnRFcXVhbHMob2Zmc2V0LCByZWdpb24uZ2V0T2Zmc2V0KCkpOwotCQlhc3NlcnRFcXVhbHMoZW5kIC0gb2Zmc2V0LCByZWdpb24uZ2V0TGVuZ3RoKCkpOwotCQlhc3NlcnRFcXVhbHModHlwZSwgcmVnaW9uLmdldFR5cGUoKSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGFzc2VydEVxdWFsUGFydGl0aW9uVHlwZShpbnQgb2Zmc2V0LCBpbnQgZW5kLCBTdHJpbmcgdHlwZSkgewotCQlpbnQgZnJvbT0gb2Zmc2V0OwotCQlpbnQgdG89IGVuZCAtIDE7Ci0JCWZvciAoaW50IGk9IGZyb207IGkgPD0gdG87IGkrKykgewotCQkJYXNzZXJ0RXF1YWxzKHR5cGUsIGZQYXJ0aXRpb25lci5nZXRDb250ZW50VHlwZShpKSk7Ci0JCX0KLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL3J1bGVzL1J1bGVzVGVzdFN1aXRlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9ydWxlcy9SdWxlc1Rlc3RTdWl0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OGRlYjZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL3J1bGVzL1J1bGVzVGVzdFN1aXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuamZhY2UudGV4dC50ZXN0cy5ydWxlczsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLQotLyoqCi0gKiBAc2luY2UgMy4wCi0gKi8KLXB1YmxpYyBjbGFzcyBSdWxlc1Rlc3RTdWl0ZSB7Ci0KLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCVRlc3RTdWl0ZSBzdWl0ZT0gbmV3IFRlc3RTdWl0ZSgKLQkJCQkiVGVzdCBTdWl0ZSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlc3RzLnJ1bGVzIik7Ci0JCS8vICRKVW5pdC1CRUdJTiQKLQkJc3VpdGUuYWRkVGVzdFN1aXRlKEZhc3RQYXJ0aXRpb25lclRlc3QuY2xhc3MpOwotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoRGVmYXVsdFBhcnRpdGlvbmVyVGVzdC5jbGFzcyk7Ci0JCXN1aXRlLmFkZFRlc3RTdWl0ZShEZWZhdWx0UGFydGl0aW9uZXJaZXJvTGVuZ3RoVGVzdC5jbGFzcyk7Ci0JCXN1aXRlLmFkZFRlc3RTdWl0ZShXb3JkUnVsZVRlc3QuY2xhc3MpOwotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoU2Nhbm5lckNvbHVtblRlc3QuY2xhc3MpOwotCQkvLyAkSlVuaXQtRU5EJAotCQlyZXR1cm4gc3VpdGU7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvcnVsZXMvU2Nhbm5lckNvbHVtblRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL3J1bGVzL1NjYW5uZXJDb2x1bW5UZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiMGM4YjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvcnVsZXMvU2Nhbm5lckNvbHVtblRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlc3RzLnJ1bGVzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5Eb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJ1bGVzLkJ1ZmZlcmVkUnVsZUJhc2VkU2Nhbm5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJ1bGVzLlJ1bGVCYXNlZFNjYW5uZXI7Ci0KLQotLyoqCi0gKiBAc2luY2UgMy40Ci0gKi8KLXB1YmxpYyBjbGFzcyBTY2FubmVyQ29sdW1uVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXByaXZhdGUgSURvY3VtZW50IGZEb2N1bWVudDsKLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWZEb2N1bWVudD0gbmV3IERvY3VtZW50KCJzY2FubmVyIHRlc3QiKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQlmRG9jdW1lbnQ9IG51bGw7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFJ1bGVCYXNlZFNjYW5uZXJDb2x1bW5SZWFkKCkgewotCQlfdGVzdFNjYW5uZXJDb2x1bW5SZWFkKG5ldyBSdWxlQmFzZWRTY2FubmVyKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RSdWxlQmFzZWRTY2FubmVyQ29sdW1uVW5yZWFkKCkgewotCQlfdGVzdFNjYW5uZXJDb2x1bW5VbnJlYWQobmV3IFJ1bGVCYXNlZFNjYW5uZXIoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEJ1ZmZlcmVkUnVsZUJhc2VkU2Nhbm5lckNvbHVtblJlYWQoKSB7Ci0JCV90ZXN0U2Nhbm5lckNvbHVtblJlYWQobmV3IEJ1ZmZlcmVkUnVsZUJhc2VkU2Nhbm5lcigxMDApKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QnVmZmVyZWRSdWxlQmFzZWRTY2FubmVyQ29sdW1uVW5yZWFkKCkgewotCQlfdGVzdFNjYW5uZXJDb2x1bW5VbnJlYWQobmV3IEJ1ZmZlcmVkUnVsZUJhc2VkU2Nhbm5lcigxMDApKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgX3Rlc3RTY2FubmVyQ29sdW1uUmVhZChSdWxlQmFzZWRTY2FubmVyIHNjYW5uZXIpIHsKLQkJc2Nhbm5lci5zZXRSYW5nZShmRG9jdW1lbnQsIDAsIDEwKTsKLQkJYXNzZXJ0RXF1YWxzKDAsIHNjYW5uZXIuZ2V0Q29sdW1uKCkpOwotCQlhc3NlcnRFcXVhbHMoJ3MnLCBzY2FubmVyLnJlYWQoKSk7Ci0JCWFzc2VydEVxdWFscygxLCBzY2FubmVyLmdldENvbHVtbigpKTsKLQkJc2Nhbm5lci51bnJlYWQoKTsKLQkJYXNzZXJ0RXF1YWxzKDAsIHNjYW5uZXIuZ2V0Q29sdW1uKCkpOwotCX0KLQotCXByaXZhdGUgdm9pZCBfdGVzdFNjYW5uZXJDb2x1bW5VbnJlYWQoUnVsZUJhc2VkU2Nhbm5lciBzY2FubmVyKSB7Ci0JCXNjYW5uZXIuc2V0UmFuZ2UoZkRvY3VtZW50LCAwLCAxMCk7Ci0JCWFzc2VydEVxdWFscygwLCBzY2FubmVyLmdldENvbHVtbigpKTsKLQkJYXNzZXJ0RXF1YWxzKCdzJywgc2Nhbm5lci5yZWFkKCkpOwotCQlhc3NlcnRFcXVhbHMoMSwgc2Nhbm5lci5nZXRDb2x1bW4oKSk7Ci0JCXNjYW5uZXIudW5yZWFkKCk7Ci0JCWFzc2VydEVxdWFscygwLCBzY2FubmVyLmdldENvbHVtbigpKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL3J1bGVzL1dvcmRSdWxlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvcnVsZXMvV29yZFJ1bGVUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmNWVjZmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvcnVsZXMvV29yZFJ1bGVUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQudGVzdHMucnVsZXM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5Eb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LlRleHRBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5ydWxlcy5JUnVsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJ1bGVzLklUb2tlbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJ1bGVzLklXb3JkRGV0ZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5ydWxlcy5QYXR0ZXJuUnVsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJ1bGVzLlJ1bGVCYXNlZFNjYW5uZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5ydWxlcy5Ub2tlbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJ1bGVzLldvcmRSdWxlOwotCi0vKioKLSAqIEBzaW5jZSAzLjMKLSAqLwotcHVibGljIGNsYXNzIFdvcmRSdWxlVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQotCi0JcHJpdmF0ZSBzdGF0aWMgY2xhc3MgU2ltcGxlV29yZERldGVjdG9yIGltcGxlbWVudHMgSVdvcmREZXRlY3RvciB7Ci0JCXB1YmxpYyBib29sZWFuIGlzV29yZFN0YXJ0KGNoYXIgYykgewotCQkJcmV0dXJuICFDaGFyYWN0ZXIuaXNXaGl0ZXNwYWNlKGMpOwotCQl9Ci0KLQkJcHVibGljIGJvb2xlYW4gaXNXb3JkUGFydChjaGFyIGMpIHsKLQkJCXJldHVybiAhQ2hhcmFjdGVyLmlzV2hpdGVzcGFjZShjKTsKLQkJfQotCX0KLQotCi0JLyoKLQkgKiBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MTYzMTE2Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEJ1ZzE2MzExNigpIHRocm93cyBFeGNlcHRpb24gewotCQlJV29yZERldGVjdG9yIGRldGVjdG9yPSBuZXcgSVdvcmREZXRlY3RvcigpIHsKLQotCQkJcHVibGljIGJvb2xlYW4gaXNXb3JkUGFydChjaGFyIGMpIHsKLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCX0KLQotCQkJcHVibGljIGJvb2xlYW4gaXNXb3JkU3RhcnQoY2hhciBjKSB7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9Ci0KLQkJfTsKLQotCQlXb3JkUnVsZSBydWxlPSBuZXcgV29yZFJ1bGUoZGV0ZWN0b3IsIG5ldyBUb2tlbih0aGlzKSk7Ci0KLQkJUnVsZUJhc2VkU2Nhbm5lciBzY2FubmVyPSBuZXcgUnVsZUJhc2VkU2Nhbm5lcigpOwotCQlzY2FubmVyLnNldFJ1bGVzKG5ldyBJUnVsZVtdIHsgcnVsZSB9KTsKLQkJc2Nhbm5lci5zZXRSYW5nZShuZXcgRG9jdW1lbnQoKSwgMCwgMCk7Ci0KLQkJSVRva2VuIHRva2VuPSBudWxsOwotCQlpbnQgaT0gMDsKLQkJd2hpbGUgKHRva2VuICE9IFRva2VuLkVPRiAmJiBpKysgPCAxMDAwKQotCQkJdG9rZW49IHNjYW5uZXIubmV4dFRva2VuKCk7Ci0KLQkJYXNzZXJ0VHJ1ZShpIDwgMTAwMCk7Ci0KLQl9Ci0KLQkvKgotCSAqIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0xNDQzNTUKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0QnVnMTQ0MzU1KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUlXb3JkRGV0ZWN0b3IgZGV0ZWN0b3I9IG5ldyBTaW1wbGVXb3JkRGV0ZWN0b3IoKTsKLQotCQlTdHJpbmcgZGVmYXVsdFRva2VuU3RyaW5nPSAiZGVmYXVsdFRva2VuIjsKLQkJVG9rZW4gZGVmYXVsdFRva2VuPSBuZXcgVG9rZW4oZGVmYXVsdFRva2VuU3RyaW5nKTsKLQotCQlTdHJpbmcgdGVzdFRva2VuU3RyaW5nTm9ybWFsPSAiVGVzdFRva2VuU3RyaW5nIjsKLQkJU3RyaW5nIHRlc3RUb2tlblN0cmluZ0RpZmZlcmVudENhcGl0YWxpemF0aW9uPSAiVGVzdFRPS0VOU3RyaW5nIjsKLQkJU3RyaW5nIHRlc3RUb2tlblN0cmluZ0NvbXBsZXRlbHlEaWZmZXJlbnQ9ICJYWFgiOwotCQlUb2tlbiBub3JtYWxUb2tlbj0gbmV3IFRva2VuKHRlc3RUb2tlblN0cmluZ05vcm1hbCk7Ci0KLQkJV29yZFJ1bGUgcnVsZT0gbmV3IFdvcmRSdWxlKGRldGVjdG9yLCBkZWZhdWx0VG9rZW4sIHRydWUpOwotCQlydWxlLmFkZFdvcmQodGVzdFRva2VuU3RyaW5nTm9ybWFsLCBub3JtYWxUb2tlbik7Ci0KLQkJLy8gc2NlbmFyaW8gMQotCQkvLyBwcmU6IHBhc3MgaW4gYSBub3JtYWwgc3RyaW5nICgiVGVzdFRva2VuU3RyaW5nIikKLQkJLy8gcG9zdDogZXhwZWN0IHRoZSBub3JtYWwgdG9rZW4gdG8gYmUgcmV0dXJuZWQKLQkJUnVsZUJhc2VkU2Nhbm5lciBzY2FubmVyPSBuZXcgUnVsZUJhc2VkU2Nhbm5lcigpOwotCQlzY2FubmVyLnNldFJ1bGVzKG5ldyBJUnVsZVtdIHtydWxlfSk7Ci0JCXNjYW5uZXIuc2V0UmFuZ2UobmV3IERvY3VtZW50KHRlc3RUb2tlblN0cmluZ05vcm1hbCksIDAsIHRlc3RUb2tlblN0cmluZ05vcm1hbC5sZW5ndGgoKSk7Ci0JCWFzc2VydFRydWUoc2Nhbm5lci5uZXh0VG9rZW4oKS5nZXREYXRhKCkuZXF1YWxzKHRlc3RUb2tlblN0cmluZ05vcm1hbCkpOwotCi0JCS8vIHNjZW5hcmlvIDIKLQkJLy8gcHJlOiBwYXNzIGluIGEgbm9ybWFsIHN0cmluZyBidXQgZGlmZmVyZW50IGNhcGl0YWxpemF0aW9uICgiVGVzdFRPS0VOU3RyaW5nIikKLQkJLy8gcG9zdDogZXhwZWN0IHRoZSBub3JtYWwgdG9rZW4gdG8gYmUgcmV0dXJuZWQKLQkJc2Nhbm5lcj0gbmV3IFJ1bGVCYXNlZFNjYW5uZXIoKTsKLQkJc2Nhbm5lci5zZXRSdWxlcyhuZXcgSVJ1bGVbXSB7cnVsZX0pOwotCQlzY2FubmVyLnNldFJhbmdlKG5ldyBEb2N1bWVudCh0ZXN0VG9rZW5TdHJpbmdEaWZmZXJlbnRDYXBpdGFsaXphdGlvbiksIDAsIHRlc3RUb2tlblN0cmluZ0RpZmZlcmVudENhcGl0YWxpemF0aW9uLmxlbmd0aCgpKTsKLQkJYXNzZXJ0VHJ1ZShzY2FubmVyLm5leHRUb2tlbigpLmdldERhdGEoKS5lcXVhbHModGVzdFRva2VuU3RyaW5nTm9ybWFsKSk7Ci0KLQkJLy8gc2NlbmFyaW8gMwotCQkvLyBwcmU6IHBhc3MgaW4gYSBjb21wbGV0ZWx5IGRpZmZlcmVudCBzdHJpbmcgKCJYWFgiKQotCQkvLyBwb3N0OiBleHBlY3QgdGhlIGRlZmF1bHQgdG9rZW4gdG8gYmUgcmV0dXJuZWQgYmVjYXVzZSB0aGUgc3RyaW5nIGNhbid0IGJlIG1hdGNoZWQKLQkJc2Nhbm5lcj0gbmV3IFJ1bGVCYXNlZFNjYW5uZXIoKTsKLQkJc2Nhbm5lci5zZXRSdWxlcyhuZXcgSVJ1bGVbXSB7cnVsZX0pOwotCQlzY2FubmVyLnNldFJhbmdlKG5ldyBEb2N1bWVudCh0ZXN0VG9rZW5TdHJpbmdDb21wbGV0ZWx5RGlmZmVyZW50KSwgMCwgdGVzdFRva2VuU3RyaW5nQ29tcGxldGVseURpZmZlcmVudC5sZW5ndGgoKSk7Ci0JCWFzc2VydFRydWUoc2Nhbm5lci5uZXh0VG9rZW4oKS5nZXREYXRhKCkuZXF1YWxzKGRlZmF1bHRUb2tlblN0cmluZykpOwotCi0JCVdvcmRSdWxlIHJ1bGVXaXRob3V0SWdub3JlQ2FzZT0gbmV3IFdvcmRSdWxlKGRldGVjdG9yLCBkZWZhdWx0VG9rZW4pOwotCQlydWxlV2l0aG91dElnbm9yZUNhc2UuYWRkV29yZCh0ZXN0VG9rZW5TdHJpbmdOb3JtYWwsIG5vcm1hbFRva2VuKTsKLQotCQkvLyBzY2VuYXJpbyA0Ci0JCS8vIHByZTogcGFzcyBpbiBhIG5vcm1hbCBzdHJpbmcgKCJUZXN0VG9rZW5TdHJpbmciKQotCQkvLyBwb3N0OiBleHBlY3QgdGhlIG5vcm1hbCB0b2tlbiB0byBiZSByZXR1cm5lZAotCQlzY2FubmVyPSBuZXcgUnVsZUJhc2VkU2Nhbm5lcigpOwotCQlzY2FubmVyLnNldFJ1bGVzKG5ldyBJUnVsZVtdIHtydWxlV2l0aG91dElnbm9yZUNhc2V9KTsKLQkJc2Nhbm5lci5zZXRSYW5nZShuZXcgRG9jdW1lbnQodGVzdFRva2VuU3RyaW5nTm9ybWFsKSwgMCwgdGVzdFRva2VuU3RyaW5nTm9ybWFsLmxlbmd0aCgpKTsKLQkJYXNzZXJ0VHJ1ZShzY2FubmVyLm5leHRUb2tlbigpLmdldERhdGEoKS5lcXVhbHModGVzdFRva2VuU3RyaW5nTm9ybWFsKSk7Ci0KLQkJLy8gc2NlbmFyaW8gNQotCQkvLyBwcmU6IHBhc3MgaW4gYSBub3JtYWwgc3RyaW5nIGJ1dCBkaWZmZXJlbnQgY2FwaXRhbGl6YXRpb24gKCJUZXN0VE9LRU5TdHJpbmciKQotCQkvLyBwb3N0OiBleHBlY3QgdGhlIGRlZmF1bHQgdG9rZW4gdG8gYmUgcmV0dXJuZWQKLQkJc2Nhbm5lcj0gbmV3IFJ1bGVCYXNlZFNjYW5uZXIoKTsKLQkJc2Nhbm5lci5zZXRSdWxlcyhuZXcgSVJ1bGVbXSB7cnVsZVdpdGhvdXRJZ25vcmVDYXNlfSk7Ci0JCXNjYW5uZXIuc2V0UmFuZ2UobmV3IERvY3VtZW50KHRlc3RUb2tlblN0cmluZ0RpZmZlcmVudENhcGl0YWxpemF0aW9uKSwgMCwgdGVzdFRva2VuU3RyaW5nRGlmZmVyZW50Q2FwaXRhbGl6YXRpb24ubGVuZ3RoKCkpOwotCQlhc3NlcnRUcnVlKHNjYW5uZXIubmV4dFRva2VuKCkuZ2V0RGF0YSgpLmVxdWFscyhkZWZhdWx0VG9rZW5TdHJpbmcpKTsKLQl9Ci0KLQkvLyBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NzEyCi0JcHVibGljIHZvaWQgdGVzdEJ1ZzE3NTcxMl8xKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUlSdWxlW10gcnVsZXM9IG5ldyBJUnVsZVsyXTsKLQotCQlJVG9rZW4gc3RlcFRva2VuPSBuZXcgVG9rZW4obmV3IFRleHRBdHRyaWJ1dGUobnVsbCwgbnVsbCwgU1dULkJPTEQpKTsKLQkJUGF0dGVyblJ1bGUgc3RlcFJ1bGU9IG5ldyBQYXR0ZXJuUnVsZSgiKCgoIiwgIikiLCBzdGVwVG9rZW4sIChjaGFyKSAwLGZhbHNlKTsKLQkJc3RlcFJ1bGUuc2V0Q29sdW1uQ29uc3RyYWludCgtMSk7Ci0JCXJ1bGVzWzFdPSBzdGVwUnVsZTsKLQotCQlJVG9rZW4gdGl0bGVUb2tlbj0gbmV3IFRva2VuKG5ldyBUZXh0QXR0cmlidXRlKG51bGwsIG51bGwsIFNXVC5CT0xEKSk7Ci0JCVdvcmRSdWxlIHdvcmRSdWxlPSBuZXcgV29yZFJ1bGUobmV3IFNpbXBsZVdvcmREZXRlY3RvcigpKTsKLQkJd29yZFJ1bGUuYWRkV29yZCgiKCgiLCB0aXRsZVRva2VuKTsKLQkJcnVsZXNbMF09IHdvcmRSdWxlOwotCi0JCUlEb2N1bWVudCBkb2N1bWVudD0gbmV3IERvY3VtZW50KCIoKCggXG4oKFxuLSBDaGVlc2Vcbi0gV2luZSIpOwotCQlSdWxlQmFzZWRTY2FubmVyIHNjYW5uZXI9IG5ldyBSdWxlQmFzZWRTY2FubmVyKCk7Ci0JCXNjYW5uZXIuc2V0UnVsZXMocnVsZXMpOwotCQlzY2FubmVyLnNldFJhbmdlKGRvY3VtZW50LCAwLCBkb2N1bWVudC5nZXRMZW5ndGgoKSk7Ci0KLQkJSVRva2VuIGRlZmF1bHRUb2tlbj0gbmV3IFRva2VuKHRoaXMpOwotCQlzY2FubmVyLnNldERlZmF1bHRSZXR1cm5Ub2tlbihkZWZhdWx0VG9rZW4pOwotCi0JCUlUb2tlbiB0b2tlbj0gc2Nhbm5lci5uZXh0VG9rZW4oKTsKLQkJYXNzZXJ0U2FtZShkZWZhdWx0VG9rZW4sIHRva2VuKTsKLQotCQl0b2tlbj0gc2Nhbm5lci5uZXh0VG9rZW4oKTsKLQkJYXNzZXJ0U2FtZShkZWZhdWx0VG9rZW4sIHRva2VuKTsKLQotCQl0b2tlbj0gc2Nhbm5lci5uZXh0VG9rZW4oKTsKLQkJYXNzZXJ0U2FtZShkZWZhdWx0VG9rZW4sIHRva2VuKTsKLQotCQl0b2tlbj0gc2Nhbm5lci5uZXh0VG9rZW4oKTsKLQkJYXNzZXJ0U2FtZSh0aXRsZVRva2VuLCB0b2tlbik7Ci0KLQl9Ci0KLQkvLyBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NzEyCi0JcHVibGljIHZvaWQgdGVzdEJ1ZzE3NTcxMl8yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUlSdWxlW10gcnVsZXM9IG5ldyBJUnVsZVsyXTsKLQotCQlJVG9rZW4gc3RlcFRva2VuPSBuZXcgVG9rZW4obmV3IFRleHRBdHRyaWJ1dGUobnVsbCwgbnVsbCwgU1dULkJPTEQpKTsKLQkJUGF0dGVyblJ1bGUgc3RlcFJ1bGU9IG5ldyBQYXR0ZXJuUnVsZSgiKCgoIiwgIikiLCBzdGVwVG9rZW4sIChjaGFyKSAwLGZhbHNlKTsKLQkJc3RlcFJ1bGUuc2V0Q29sdW1uQ29uc3RyYWludCgtMSk7Ci0JCXJ1bGVzWzFdPSBzdGVwUnVsZTsKLQotCQlJVG9rZW4gdGl0bGVUb2tlbj0gbmV3IFRva2VuKG5ldyBUZXh0QXR0cmlidXRlKG51bGwsIG51bGwsIFNXVC5CT0xEKSk7Ci0JCVdvcmRSdWxlIHdvcmRSdWxlPSBuZXcgV29yZFJ1bGUobmV3IFNpbXBsZVdvcmREZXRlY3RvcigpKTsKLQkJd29yZFJ1bGUuYWRkV29yZCgiKCgiLCB0aXRsZVRva2VuKTsKLQkJcnVsZXNbMF09IHdvcmRSdWxlOwotCi0JCUlEb2N1bWVudCBkb2N1bWVudD0gbmV3IERvY3VtZW50KCIoKFxuKChcbi0gQ2hlZXNlXG4tIFdpbmUiKTsKLQkJUnVsZUJhc2VkU2Nhbm5lciBzY2FubmVyPSBuZXcgUnVsZUJhc2VkU2Nhbm5lcigpOwotCQlzY2FubmVyLnNldFJ1bGVzKHJ1bGVzKTsKLQkJc2Nhbm5lci5zZXRSYW5nZShkb2N1bWVudCwgMCwgZG9jdW1lbnQuZ2V0TGVuZ3RoKCkpOwotCi0JCUlUb2tlbiBkZWZhdWx0VG9rZW49IG5ldyBUb2tlbih0aGlzKTsKLQkJc2Nhbm5lci5zZXREZWZhdWx0UmV0dXJuVG9rZW4oZGVmYXVsdFRva2VuKTsKLQotCQlJVG9rZW4gdG9rZW49IHNjYW5uZXIubmV4dFRva2VuKCk7Ci0JCWFzc2VydFNhbWUodGl0bGVUb2tlbiwgdG9rZW4pOwotCi0JfQotCi0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZWIzZjZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIHByb3BlcnRpZXMgZmlsZSBmb3Igb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cwotQnVuZGxlLVZlbmRvci4wID0gRWNsaXBzZS5vcmcKLUJ1bmRsZS1OYW1lLjAgPSBTdHJ1Y3R1cmVkIFNvdXJjZSBFZGl0b3IgVGVzdHMKLWVkaXRvci5uYW1lLjAgPSBHZW5lcmljIFN0cnVjdHVyZWQgVGV4dCBFZGl0b3IKLWNhdGVnb3J5Lm5hbWUuMCA9IFNTRSBUZXN0aW5nCi12aWV3Lm5hbWUuMCA9IEV4dGVuZGVkU3RvcmFnZUVkaXRvcklucHV0IE1hbmFnZW1lbnQgVGVzdGVyCi12aWV3Lm5hbWUuMSA9IEFjdGlvbiBUZXN0ZXIKLWFjdGlvbi5sYWJlbC4wID0gb3JnLmVjbGlwc2UudWkucG9wdXBNZW51cyBUZXN0IEFjdGlvbgotYWN0aW9uLmxhYmVsLjEgPSBNYWtlIFJlYWQtT25seQotYWN0aW9uLmxhYmVsLjIgPSBDbGVhciBhbGwgUmVhZC1Pbmx5Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvcGx1Z2luLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjA5NjU3Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotPHBsdWdpbj4KLQotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLmVkaXRvcnMiPgotCQk8ZWRpdG9yCi0JCQluYW1lPSIlZWRpdG9yLm5hbWUuMCIKLQkJCWV4dGVuc2lvbnM9InByb2plY3QsIGNsYXNzcGF0aCwgd2Vic2V0dGluZ3MsIHNlcnZlclByZWZlcmVuY2UiCi0JCQlpY29uPSIkbmwkL2ljb25zL3NvdXJjZUVkaXRvci5naWYiCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS5TdHJ1Y3R1cmVkVGV4dEVkaXRvciIKLQkJCWNvbnRyaWJ1dG9yQ2xhc3M9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuYWN0aW9ucy5BY3Rpb25Db250cmlidXRvciIKLQkJCXN5bWJvbGljRm9udE5hbWU9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkudGV4dGZvbnQiCi0JCQlpZD0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS5TdHJ1Y3R1cmVkVGV4dEVkaXRvci50ZXN0Ij4KLQkJPC9lZGl0b3I+Ci0JPC9leHRlbnNpb24+Ci0JCi0JPCEtLSBFZGl0b3IgYWN0aW9uc2V0cyAtLT4KLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5hY3Rpb25TZXRQYXJ0QXNzb2NpYXRpb25zIj4KLQkJPGFjdGlvblNldFBhcnRBc3NvY2lhdGlvbgotCQkJdGFyZ2V0SUQ9Im9yZy5lY2xpcHNlLnVpLmVkaXQudGV4dC5hY3Rpb25TZXQuYW5ub3RhdGlvbk5hdmlnYXRpb24iPgotCQkJPHBhcnQKLQkJCQlpZD0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS5TdHJ1Y3R1cmVkVGV4dEVkaXRvci50ZXN0Ij4KLQkJCTwvcGFydD4KLQkJPC9hY3Rpb25TZXRQYXJ0QXNzb2NpYXRpb24+Ci0JCTxhY3Rpb25TZXRQYXJ0QXNzb2NpYXRpb24KLQkJCXRhcmdldElEPSJvcmcuZWNsaXBzZS51aS5OYXZpZ2F0ZUFjdGlvblNldCI+Ci0JCQk8cGFydAotCQkJCWlkPSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLlN0cnVjdHVyZWRUZXh0RWRpdG9yLnRlc3QiPgotCQkJPC9wYXJ0PgotCQk8L2FjdGlvblNldFBhcnRBc3NvY2lhdGlvbj4KLQk8L2V4dGVuc2lvbj4KLQotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzIj4KLQkJPGNhdGVnb3J5Ci0JCQluYW1lPSIlY2F0ZWdvcnkubmFtZS4wIgotCQkJaWQ9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMiPgotCQk8L2NhdGVnb3J5PgotCQk8dmlldwotCQkJbmFtZT0iJXZpZXcubmFtZS4wIgotCQkJY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMiCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy5FeHRlbmRlZFN0b3JhZ2VFZGl0b3JJbnB1dFZpZXciCi0JCQlpZD0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy5FeHRlbmRlZFN0b3JhZ2VFZGl0b3JJbnB1dFZpZXciPgotCQk8L3ZpZXc+Ci0JCTx2aWV3Ci0JCQluYW1lPSIldmlldy5uYW1lLjEiCi0JCQljYXRlZ29yeT0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cyIKLQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLkFjdGlvblRlc3RWaWV3IgotCQkJaWQ9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMuQWN0aW9uVGVzdFZpZXciPgotCQk8L3ZpZXc+Ci0JPC9leHRlbnNpb24+Ci0KLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wb3B1cE1lbnVzIj4KLQkJPHZpZXdlckNvbnRyaWJ1dGlvbgotCQkJdGFyZ2V0SUQ9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkuU3RydWN0dXJlZFRleHRFZGl0b3IuRWRpdG9yQ29udGV4dCIKLQkJCWlkPSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLnRlc3QiPgotCQkJPGFjdGlvbgotCQkJCWxhYmVsPSIlYWN0aW9uLmxhYmVsLjAiCi0JCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMuVGVzdEFjdGlvbkRlbGVnYXRlIgotCQkJCW1lbnViYXJQYXRoPSJhZGRpdGlvbnMiCi0JCQkJaWQ9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMudGVzdC4xIiAvPgotCQkJPGFjdGlvbgotCQkJCWxhYmVsPSIlYWN0aW9uLmxhYmVsLjEiCi0JCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMuUmVhZE9ubHlUb2dnbGVEZWxlZ2F0ZSIKLQkJCQltZW51YmFyUGF0aD0iYWRkaXRpb25zIgotCQkJCWlkPSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLnRlc3QuMiIgLz4KLQkJCTxhY3Rpb24KLQkJCQlsYWJlbD0iJWFjdGlvbi5sYWJlbC4yIgotCQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLkNsZWFyUmVhZE9ubHlEZWxlZ2F0ZSIKLQkJCQltZW51YmFyUGF0aD0iYWRkaXRpb25zIgotCQkJCWlkPSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLnRlc3QuMiIgLz4KLQkJPC92aWV3ZXJDb250cmlidXRpb24+Ci0JPC9leHRlbnNpb24+Ci0KLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmVkaXRvckNvbmZpZ3VyYXRpb24iPgotCQk8cHJvdmlzaW9uYWxDb25maWd1cmF0aW9uCi0JCQl0eXBlPSJsaW5lc3R5bGVwcm92aWRlciIKLQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLlRlc3RMaW5lU3R5bGVQcm92aWRlciIKLQkJCXRhcmdldD0ib3JnLmVjbGlwc2Uud3N0Lmh0bWwuU0NSSVBULmxhbmd1YWdlLkJMVUUiIC8+Ci0JCTxwcm92aXNpb25hbENvbmZpZ3VyYXRpb24KLQkJCXR5cGU9ImxpbmVzdHlsZXByb3ZpZGVyIgotCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMuVGVzdExpbmVTdHlsZVByb3ZpZGVyIgotCQkJdGFyZ2V0PSJvcmcuZWNsaXBzZS53c3QuaHRtbC5TQ1JJUFQudHlwZS5URVhUL0JMVUUiIC8+Ci0JCTxwcm92aXNpb25hbENvbmZpZ3VyYXRpb24KLQkJCXR5cGU9ImxpbmVzdHlsZXByb3ZpZGVyIgotCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMuVGVzdExpbmVTdHlsZVByb3ZpZGVyIgotCQkJdGFyZ2V0PSJvcmcuZWNsaXBzZS5qc3QuanNwLlNDUklQVC5CTFVFIiAvPgotCTwvZXh0ZW5zaW9uPgotCQotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL3VpL3Rlc3RzL0FjdGlvblRlc3RWaWV3LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL3VpL3Rlc3RzL0FjdGlvblRlc3RWaWV3LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiZjI5ZDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9BY3Rpb25UZXN0Vmlldy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTcyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQ29udHJpYnV0aW9uSXRlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkRvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVRleHRWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5UZXh0Vmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5TdHlsZWRUZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklTZWxlY3Rpb25MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JVmlld1NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5WaWV3UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLklUZXh0RWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50Y29yZS5Db21wb25lbnRDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50Y29yZS5yZXNvdXJjZXMuSVZpcnR1YWxSZXNvdXJjZTsKLQotCi0vKioKLSAqIEBhdXRob3Igbml0aW4KLSAqIAotICogQSB2aWV3IHRvIGhhbmcgYWN0aW9ucyBvZmYgb2YgdG8gZXhlY3V0ZSBhcmJpdHJhcnkgY29kZSBhdCBhcmJpdHJhcnkgdGltZXMuCi0gKi8KLXB1YmxpYyBjbGFzcyBBY3Rpb25UZXN0VmlldyBleHRlbmRzIFZpZXdQYXJ0IHsKLQotCXByaXZhdGUgY2xhc3MgQ29tcG9uZW50Vmlld2VyIGV4dGVuZHMgQWN0aW9uIHsKLQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJc3VwZXIucnVuKCk7Ci0JCQlpZiAoZlNlbGVjdGlvbiAhPSBudWxsICYmICFmU2VsZWN0aW9uLmlzRW1wdHkoKSAmJiBmU2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKLQkJCQlJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24gPSAoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIGZTZWxlY3Rpb247Ci0JCQkJaWYgKHNlbGVjdGlvbi5nZXRGaXJzdEVsZW1lbnQoKSBpbnN0YW5jZW9mIElSZXNvdXJjZSkgewotCQkJCQlJUmVzb3VyY2UgcmVzb3VyY2UgPSAoSVJlc291cmNlKSBzZWxlY3Rpb24uZ2V0Rmlyc3RFbGVtZW50KCk7Ci0JCQkJCUlWaXJ0dWFsUmVzb3VyY2VbXSB2aXJ0dWFsUmVzb3VyY2VzID0gQ29tcG9uZW50Q29yZS5jcmVhdGVSZXNvdXJjZXMocmVzb3VyY2UuZ2V0UHJvamVjdCgpKTsKLQkJCQkJLy8gT25seSByZXR1cm4gcmVzdWx0cyBmb3IgRmxleGlibGUgcHJvamVjdHMKLQkJCQkJaWYgKHZpcnR1YWxSZXNvdXJjZXMgIT0gbnVsbCkgewotCQkJCQkJZm9yIChpbnQgaSA9IDA7IGkgPCB2aXJ0dWFsUmVzb3VyY2VzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJCQkJU3lzdGVtLm91dC5wcmludGxuKHZpcnR1YWxSZXNvdXJjZXNbaV0uZ2V0Q29tcG9uZW50KCkuZ2V0Um9vdEZvbGRlcigpLmdldFdvcmtzcGFjZVJlbGF0aXZlUGF0aCgpKTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQotCWNsYXNzIEVtcHR5VGV4dFNldHRlciBleHRlbmRzIEFjdGlvbiB7Ci0JCXB1YmxpYyBFbXB0eVRleHRTZXR0ZXIoKSB7Ci0JCQlzdXBlcigiU2V0IFRleHQgRWRpdG9yIHRleHQgdG8gZW1wdHkiKTsKLQkJCXNldFRvb2xUaXBUZXh0KCJTZXQgVGV4dCBFZGl0b3IgdGV4dCB0byBlbXB0eSB1c2luZyBzZXQoKSBBUEkiKTsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCXN1cGVyLnJ1bigpOwotCQkJSUVkaXRvclBhcnQgZWRpdG9yID0gZ2V0Vmlld1NpdGUoKS5nZXRQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCk7Ci0JCQlJVGV4dEVkaXRvciB0ZXh0RWRpdG9yID0gbnVsbDsKLQkJCWlmIChlZGl0b3IgaW5zdGFuY2VvZiBJVGV4dEVkaXRvcikKLQkJCQl0ZXh0RWRpdG9yID0gKElUZXh0RWRpdG9yKSBlZGl0b3I7Ci0JCQllbHNlCi0JCQkJdGV4dEVkaXRvciA9IChJVGV4dEVkaXRvcikgZWRpdG9yLmdldEFkYXB0ZXIoSVRleHRFZGl0b3IuY2xhc3MpOwotCQkJaWYgKHRleHRFZGl0b3IgIT0gbnVsbCkgewotCQkJCUlEb2N1bWVudCBkb2N1bWVudCA9IHRleHRFZGl0b3IuZ2V0RG9jdW1lbnRQcm92aWRlcigpLmdldERvY3VtZW50KGVkaXRvci5nZXRFZGl0b3JJbnB1dCgpKTsKLQkJCQlkb2N1bWVudC5zZXQoIiIpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJcHJpbnQoIkVycm9yIGdldHRpbmcgSURvY3VtZW50LlxuIik7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlDb250cm9sIGZDb250cm9sID0gbnVsbDsKLQotCUlTZWxlY3Rpb24gZlNlbGVjdGlvbjsKLQlwcml2YXRlIElTZWxlY3Rpb25MaXN0ZW5lciBmU2VsZWN0aW9uTGlzdGVuZXI7Ci0KLQlwcml2YXRlIExpc3QgY3JlYXRlQWN0aW9ucygpIHsKLQkJTGlzdCBhY3Rpb25zID0gbmV3IEFycmF5TGlzdCgpOwotCi0JCWFjdGlvbnMuYWRkKG5ldyBFbXB0eVRleHRTZXR0ZXIoKSk7Ci0JCWFjdGlvbnMuYWRkKG5ldyBDb21wb25lbnRWaWV3ZXIoKSk7Ci0JCXJldHVybiBhY3Rpb25zOwotCX0KLQotCS8qKgotCSAqIEByZXR1cm4KLQkgKi8KLQlwcml2YXRlIExpc3QgY3JlYXRlQ29udHJpYnV0dXRpb25zKCkgewotCQlMaXN0IGFjdGlvbnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCXJldHVybiBhY3Rpb25zOwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQjY3JlYXRlUGFydENvbnRyb2wob3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlKQotCSAqLwotCXB1YmxpYyB2b2lkIGNyZWF0ZVBhcnRDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJSVRleHRWaWV3ZXIgdGV4dCA9IG5ldyBUZXh0Vmlld2VyKHBhcmVudCwgU1dULlJFQURfT05MWSk7Ci0JCXRleHQuc2V0RG9jdW1lbnQobmV3IERvY3VtZW50KCkpOwotCQlmQ29udHJvbCA9IHRleHQuZ2V0VGV4dFdpZGdldCgpOwotCQl0ZXh0LmdldERvY3VtZW50KCkuc2V0KCJVc2UgZWl0aGVyIHRoZSB0b29sYmFyIG9yIHRoZSBtZW51IHRvIHJ1biB5b3VyIGFjdGlvbnNcblxuIik7Ci0JfQotCi0JcHJpdmF0ZSBJU2VsZWN0aW9uTGlzdGVuZXIgZ2V0U2VsZWN0aW9uTGlzdGVuZXIoKSB7Ci0JCWlmIChmU2VsZWN0aW9uTGlzdGVuZXIgPT0gbnVsbCkgewotCQkJZlNlbGVjdGlvbkxpc3RlbmVyID0gbmV3IElTZWxlY3Rpb25MaXN0ZW5lcigpIHsKLQkJCQlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKElXb3JrYmVuY2hQYXJ0IHBhcnQsIElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7Ci0JCQkJCWZTZWxlY3Rpb24gPSBzZWxlY3Rpb247Ci0JCQkJfQotCQkJfTsKLQkJfQotCQlyZXR1cm4gZlNlbGVjdGlvbkxpc3RlbmVyOwotCX0KLQotCi0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklWaWV3UGFydCNpbml0KG9yZy5lY2xpcHNlLnVpLklWaWV3U2l0ZSkKLQkgKi8KLQlwdWJsaWMgdm9pZCBpbml0KElWaWV3U2l0ZSBzaXRlKSB0aHJvd3MgUGFydEluaXRFeGNlcHRpb24gewotCQlzdXBlci5pbml0KHNpdGUpOwotCQlMaXN0IGFjdGlvbnMgPSBjcmVhdGVBY3Rpb25zKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgYWN0aW9ucy5zaXplKCk7IGkrKykgewotCQkJc2l0ZS5nZXRBY3Rpb25CYXJzKCkuZ2V0VG9vbEJhck1hbmFnZXIoKS5hZGQoKElBY3Rpb24pIGFjdGlvbnMuZ2V0KGkpKTsKLQkJCXNpdGUuZ2V0QWN0aW9uQmFycygpLmdldE1lbnVNYW5hZ2VyKCkuYWRkKChJQWN0aW9uKSBhY3Rpb25zLmdldChpKSk7Ci0JCX0KLQkJTGlzdCBjb250cmlidXRpb25zID0gY3JlYXRlQ29udHJpYnV0dXRpb25zKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY29udHJpYnV0aW9ucy5zaXplKCk7IGkrKykgewotCQkJc2l0ZS5nZXRBY3Rpb25CYXJzKCkuZ2V0VG9vbEJhck1hbmFnZXIoKS5hZGQoKElDb250cmlidXRpb25JdGVtKSBjb250cmlidXRpb25zLmdldChpKSk7Ci0JCQlzaXRlLmdldEFjdGlvbkJhcnMoKS5nZXRNZW51TWFuYWdlcigpLmFkZCgoSUNvbnRyaWJ1dGlvbkl0ZW0pIGNvbnRyaWJ1dGlvbnMuZ2V0KGkpKTsKLQkJfQotCQlzaXRlLmdldFdvcmtiZW5jaFdpbmRvdygpLmdldFNlbGVjdGlvblNlcnZpY2UoKS5hZGRQb3N0U2VsZWN0aW9uTGlzdGVuZXIoZ2V0U2VsZWN0aW9uTGlzdGVuZXIoKSk7Ci0JfQotCi0Jdm9pZCBwcmludChTdHJpbmcgcykgewotCQkoKFN0eWxlZFRleHQpIGZDb250cm9sKS5hcHBlbmQocyk7Ci0JfQotCi0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0I3NldEZvY3VzKCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRGb2N1cygpIHsKLQkJaWYgKGZDb250cm9sICE9IG51bGwgJiYgIWZDb250cm9sLmlzRGlzcG9zZWQoKSkgewotCQkJZkNvbnRyb2wuc2V0Rm9jdXMoKTsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvdWkvdGVzdHMvQ2xlYXJSZWFkT25seURlbGVnYXRlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL3VpL3Rlc3RzL0NsZWFyUmVhZE9ubHlEZWxlZ2F0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYzViNDM2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvdWkvdGVzdHMvQ2xlYXJSZWFkT25seURlbGVnYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvckFjdGlvbkRlbGVnYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IuSVRleHRFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLQotcHVibGljIGNsYXNzIENsZWFyUmVhZE9ubHlEZWxlZ2F0ZSBleHRlbmRzIEFjdGlvbiBpbXBsZW1lbnRzIElFZGl0b3JBY3Rpb25EZWxlZ2F0ZSB7Ci0KLQlJU2VsZWN0aW9uIGZTZWxlY3Rpb24gPSBudWxsOwotCUlFZGl0b3JQYXJ0IGZFZGl0b3IgPSBudWxsOwotCi0JcHVibGljIENsZWFyUmVhZE9ubHlEZWxlZ2F0ZSgpIHsKLQl9Ci0KLQlwdWJsaWMgQ2xlYXJSZWFkT25seURlbGVnYXRlKFN0cmluZyB0ZXh0KSB7Ci0JCXN1cGVyKHRleHQpOwotCX0KLQotCXB1YmxpYyBDbGVhclJlYWRPbmx5RGVsZWdhdGUoU3RyaW5nIHRleHQsIEltYWdlRGVzY3JpcHRvciBpbWFnZSkgewotCQlzdXBlcih0ZXh0LCBpbWFnZSk7Ci0JfQotCi0JcHVibGljIENsZWFyUmVhZE9ubHlEZWxlZ2F0ZShTdHJpbmcgdGV4dCwgaW50IHN0eWxlKSB7Ci0JCXN1cGVyKHRleHQsIHN0eWxlKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRBY3RpdmVFZGl0b3IoSUFjdGlvbiBhY3Rpb24sIElFZGl0b3JQYXJ0IHRhcmdldEVkaXRvcikgewotCQlmRWRpdG9yID0gdGFyZ2V0RWRpdG9yOwotCX0KLQotCXB1YmxpYyB2b2lkIHJ1bihJQWN0aW9uIGFjdGlvbikgewotCQlJVGV4dEVkaXRvciBlZGl0b3IgPSAoSVRleHRFZGl0b3IpIGZFZGl0b3IuZ2V0QWRhcHRlcihJVGV4dEVkaXRvci5jbGFzcyk7Ci0JCUlEb2N1bWVudCBkb2N1bWVudCA9IGVkaXRvci5nZXREb2N1bWVudFByb3ZpZGVyKCkuZ2V0RG9jdW1lbnQoZWRpdG9yLmdldEVkaXRvcklucHV0KCkpOwotCQlpZiAoZG9jdW1lbnQgaW5zdGFuY2VvZiBJU3RydWN0dXJlZERvY3VtZW50KSB7Ci0JCQkoKElTdHJ1Y3R1cmVkRG9jdW1lbnQpIGRvY3VtZW50KS5jbGVhclJlYWRPbmx5KDAsIGRvY3VtZW50LmdldExlbmd0aCgpKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoSUFjdGlvbiBhY3Rpb24sIElTZWxlY3Rpb24gc2VsZWN0aW9uKSB7Ci0JCWZTZWxlY3Rpb24gPSBzZWxlY3Rpb247Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL3VpL3Rlc3RzL0NvbW1vbkVkaXRvclByZWZlcmVuY2VzVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9Db21tb25FZGl0b3JQcmVmZXJlbmNlc1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQ0MmMwZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL3VpL3Rlc3RzL0NvbW1vbkVkaXRvclByZWZlcmVuY2VzVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuSVByZWZlcmVuY2VTdG9yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLlNTRVVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwucHJvdmlzaW9uYWwucHJlZmVyZW5jZXMuQ29tbW9uRWRpdG9yUHJlZmVyZW5jZU5hbWVzOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUV4Y2VwdGlvbjsKLQotLyoqCi0gKiBUaGUgcHVycG9zZSBvZiB0aGlzIHRlc3QgaXMgdG8gdmVyaWZ5IHRoZSB2YWxpZGl0eSBvZiB0aGUKLSAqIFN0cnVjdHVyZWRUZXh0RWRpdG9yJ3MgY29tbW9uIGVkaXRvciBwcmVmZXJlbmNlcy4gVGVzdHMgaW5jbHVkZQotICogc2V0dGluZy9nZXR0aW5nIHByZWZlcmVuY2VzLgotICogCi0gKiBOT1RFOiBUaGlzIHRlc3Qgc2hvdWxkIGJlIHByZWZvcm1lZCBvbiBhIGNsZWFuIHdvcmtzcGFjZS4gSWYgcGVyZm9ybWVkIG9uCi0gKiBhbiBleGlzdGluZyB3b3Jrc3BhY2UsIHRoaXMgdGVzdCB3aWxsIG1hbmlwdWxhdGUgcHJlZmVyZW5jZXMgaW4gdGhlCi0gKiB3b3Jrc3BhY2UsIHRob3VnaCBhdHRlbXB0cyB3aWxsIGJlIG1hZGUgdG8gcmVzdG9yZSBvcmlnaW5hbCB2YWx1ZXMgYWZ0ZXIKLSAqIHRlc3RpbmcuCi0gKi8KLXB1YmxpYyBjbGFzcyBDb21tb25FZGl0b3JQcmVmZXJlbmNlc1Rlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JLyoqCi0JICogVGVzdHMgZXhpc3RhbmNlIG9mIHByZWZlcmVuY2UgdmFsdWVzIHdoZW4gZ2V0dGluZyBwcmVmZXJlbmNlIHZhbHVlcwotCSAqIHRocm91Z2ggUGxhdGZvcm0uZ2V0UHJlZmVyZW5jZXNTZXJ2aWNlKCkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0QnVuZGxlR2V0UHJlZmVyZW5jZXMoKSB7Ci0JCWZpbmFsIFN0cmluZyBidW5kbGVOYW1lID0gIm9yZy5lY2xpcHNlLndzdC5zc2UudWkiOwotCi0JCS8vIG5lZWQgdG8gc3RhcnQgdXAgYnVuZGxlIGZvciBkZWZhdWx0IHZhbHVlcyB0byBiZSBsb2FkZWQKLQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShidW5kbGVOYW1lKTsKLQkJdHJ5IHsKLQkJCWlmIChidW5kbGUgIT0gbnVsbCkKLQkJCQlidW5kbGUuc3RhcnQoKTsKLQkJCWVsc2UKLQkJCQlmYWlsKCJHZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgYmVjYXVzZSBjb3VsZCBub3QgZmluZCBidW5kbGU6ICIgKyBidW5kbGVOYW1lKTsKLQkJfSBjYXRjaCAoQnVuZGxlRXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoIkdldCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCBiZWNhdXNlIG9mIGV4Y2VwdGlvbiBzdGFydGluZyBidW5kbGU6ICIgKyBidW5kbGVOYW1lICsgIiBleGNlcHRpb246ICIgKyBlKTsKLQkJfQotCi0JCWJ1bmRsZUdldFByZWZlcmVuY2UoYnVuZGxlTmFtZSwgQ29tbW9uRWRpdG9yUHJlZmVyZW5jZU5hbWVzLkVWQUxVQVRFX1RFTVBPUkFSWV9QUk9CTEVNUyk7Ci0JfQotCQotCXByaXZhdGUgdm9pZCBidW5kbGVHZXRQcmVmZXJlbmNlKFN0cmluZyBidW5kbGVOYW1lLCBTdHJpbmcgcHJlZktleSkgewotCQlTdHJpbmcgZGVmYXVsdFZhbHVlID0gTG9uZy50b1N0cmluZyhTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSk7CS8vIHJhbmRvbSBzdHJpbmcKLQkJCi0JCVN0cmluZyB2YWx1ZSA9IFBsYXRmb3JtLmdldFByZWZlcmVuY2VzU2VydmljZSgpLmdldFN0cmluZyhidW5kbGVOYW1lLCBwcmVmS2V5LCBkZWZhdWx0VmFsdWUsIG51bGwpOwotCQlhc3NlcnROb3RTYW1lKCJHZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgdXNpbmcgUGxhdGZvcm0uZ2V0UHJlZmVyZW5jZXNTZXJ2aWNlLiBLZXk6ICIrcHJlZktleSwgZGVmYXVsdFZhbHVlLCB2YWx1ZSk7CQkKLQl9Ci0KLQkvKioKLQkgKiBUZXN0cyBkZWZhdWx0IHZhbHVlcyBvZiBwcmVmZXJlbmNlcy4KLQkgKiAKLQkgKiBOT1RFOiBFeHBlY3RlZCBkZWZhdWx0IHZhbHVlcyBhcmUgaGFyZC1jb2RlZCwgc28gaWYgZGVmYXVsdCB2YWx1ZXMgZG8KLQkgKiBnZXQgY2hhbmdlZCwgYXNzZXJ0aW9ucyBuZWVkIHRvIGJlIHVwZGF0ZWQgYXMgd2VsbAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RQbHVnaW5HZXREZWZhdWx0UHJlZmVyZW5jZXMoKSB7Ci0JCUlQcmVmZXJlbmNlU3RvcmUgc3RvcmUgPSBTU0VVSVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCk7Ci0JCQotCQlwbHVnaW5HZXREZWZhdWx0UHJlZmVyZW5jZShzdG9yZSwgQ29tbW9uRWRpdG9yUHJlZmVyZW5jZU5hbWVzLkVWQUxVQVRFX1RFTVBPUkFSWV9QUk9CTEVNUywgQm9vbGVhbi50b1N0cmluZyh0cnVlKSk7Ci0JfQotCQotCXByaXZhdGUgdm9pZCBwbHVnaW5HZXREZWZhdWx0UHJlZmVyZW5jZShJUHJlZmVyZW5jZVN0b3JlIHN0b3JlLCBTdHJpbmcgcHJlZktleSwgU3RyaW5nIGV4cGVjdGVkKSB7Ci0JCVN0cmluZyBkZWZhdWx0VmFsdWUgPSBzdG9yZS5nZXREZWZhdWx0U3RyaW5nKHByZWZLZXkpOwotCQlhc3NlcnRFcXVhbHMoIkdldCBkZWZhdWx0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIHVzaW5nIHBsdWdpbi5nZXRQcmVmZXJlbmNlU3RvcmUuIEtleTogIitwcmVmS2V5LCBleHBlY3RlZCwgZGVmYXVsdFZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0cyBzZXR0aW5nIHByZWZlcmVuY2UgdmFsdWVzIGJ5IHNldHRpbmcgcHJlZmVyZW5jZSB2YWx1ZSB0byBiZSBhCi0JICogY2VydGFpbiB2YWx1ZSwgdGhlbiBnZXR0aW5nIHRoZSBwcmVmZXJlbmNlIHZhbHVlIHRvIHZlcmlmeSBpdCB3YXMgc2V0LgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RQbHVnaW5TZXRQcmVmZXJlbmNlcygpIHsKLQkJSVByZWZlcmVuY2VTdG9yZSBzdG9yZSA9IFNTRVVJUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKTsKLQkJCi0JCXBsdWdpblNldFByZWZlcmVuY2VCb29sZWFuKHN0b3JlLCBDb21tb25FZGl0b3JQcmVmZXJlbmNlTmFtZXMuRVZBTFVBVEVfVEVNUE9SQVJZX1BST0JMRU1TKTsKLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIHBsdWdpblNldFByZWZlcmVuY2VCb29sZWFuKElQcmVmZXJlbmNlU3RvcmUgc3RvcmUsIFN0cmluZyBwcmVmS2V5KSB7Ci0JCWJvb2xlYW4gb3JpZ2luYWxWYWx1ZSA9IHN0b3JlLmdldEJvb2xlYW4ocHJlZktleSk7Ci0JCWJvb2xlYW4gZXhwZWN0ZWRWYWx1ZSA9ICFvcmlnaW5hbFZhbHVlOwotCQlzdG9yZS5zZXRWYWx1ZShwcmVmS2V5LCBleHBlY3RlZFZhbHVlKTsKLQkJYm9vbGVhbiBmb3VuZFZhbHVlID0gc3RvcmUuZ2V0Qm9vbGVhbihwcmVmS2V5KTsKLQkJYXNzZXJ0RXF1YWxzKCJTZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgdXNpbmcgcGx1Z2luLmdldFByZWZlcmVuY2VTdG9yZS4gS2V5OiAiK3ByZWZLZXkrIiAgZXhwZWN0ZWQ6ICIgKyBleHBlY3RlZFZhbHVlICsgIiBmb3VuZDogIiArIGZvdW5kVmFsdWUsIGV4cGVjdGVkVmFsdWUsIGZvdW5kVmFsdWUpOwotCi0JCS8vIGF0dGVtcHQgdG8gcmVzdG9yZSBvcmlnaW5hbCBwcmVmZXJlbmNlIHZhbHVlCi0JCXN0b3JlLnNldFZhbHVlKHByZWZLZXksIG9yaWdpbmFsVmFsdWUpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvdWkvdGVzdHMvRXh0ZW5kZWRTdG9yYWdlRWRpdG9ySW5wdXRWaWV3LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL3VpL3Rlc3RzL0V4dGVuZGVkU3RvcmFnZUVkaXRvcklucHV0Vmlldy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjliZTBhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvdWkvdGVzdHMvRXh0ZW5kZWRTdG9yYWdlRWRpdG9ySW5wdXRWaWV3LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHM7Ci0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JU3RvcmFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuY29udGVudC5JQ29udGVudFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkVycm9yRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuTWVzc2FnZURpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5JbWFnZURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5BcnJheUNvbnRlbnRQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkNlbGxFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5Db2x1bW5XZWlnaHREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuRG91YmxlQ2xpY2tFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklEb3VibGVDbGlja0xpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSUxhYmVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlckxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklUYWJsZUxhYmVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UYWJsZUxheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRhYmxlVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5GaWxlRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLk1lbnU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGFibGVDb2x1bW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvckRlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRmlsZUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklQZXJzaXN0YWJsZUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVJldXNhYmxlRWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklTdG9yYWdlRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVZpZXdTaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2g7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLk9wZW5XaXRoTWVudTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLlJlc291cmNlU2VsZWN0aW9uRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmVkaXRvcnMudGV4dC5FZGl0b3JzVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkubW9kZWwuV29ya2JlbmNoTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LkZpbGVFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LlZpZXdQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IuSUVsZW1lbnRTdGF0ZUxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IuSVVwZGF0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudXRpbHMuU3RyaW5nVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5TU0VVSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnByb3Zpc2lvbmFsLmV4dGVuc2lvbnMuYnJlYWtwb2ludC5JRXh0ZW5kZWRTdG9yYWdlRWRpdG9ySW5wdXQ7Ci0KLQotLyoqCi0gKiBAYXV0aG9yIG5pdGluCi0gKiAKLSAqIEEgdmlldyB0byBhc3Npc3QgaW4gdGVzdGluZyBvdXQgU3RydWN0dXJlZFRleHRFZGl0b3IncyBJRWRpdG9ySW5wdXQKLSAqIGhhbmRsaW5nLgotICogCi0gKiBQZXJtYW5lbnRseSBpbi1wcm9ncmVzcy4KLSAqLwotcHVibGljIGNsYXNzIEV4dGVuZGVkU3RvcmFnZUVkaXRvcklucHV0VmlldyBleHRlbmRzIFZpZXdQYXJ0IHsKLQkvKioKLQkgKiBBZGRzIGFuIElGaWxlRWRpdG9ySW5wdXQgdG8gdGhlIGxpc3Qgb2YgaW5wdXRzIHdpdGggd2hpY2ggdG8gdGVzdAotCSAqLwotCWNsYXNzIEFkZEZpbGVJbnB1dEFjdGlvbiBleHRlbmRzIEFjdGlvbiB7Ci0JCXB1YmxpYyBBZGRGaWxlSW5wdXRBY3Rpb24oKSB7Ci0JCQlzdXBlcigiQWRkIEZpbGVFZGl0b3JJbnB1dCIpOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJc3VwZXIucnVuKCk7Ci0JCQlSZXNvdXJjZVNlbGVjdGlvbkRpYWxvZyBkbGcgPSBuZXcgUmVzb3VyY2VTZWxlY3Rpb25EaWFsb2coZklucHV0TGlzdC5nZXRDb250cm9sKCkuZ2V0U2hlbGwoKSwgUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKSwgIkNob29zZSIpOwotCQkJaW50IHJldHZhbCA9IGRsZy5vcGVuKCk7Ci0JCQlpZiAocmV0dmFsID09IFdpbmRvdy5PSykgewotCQkJCU9iamVjdFtdIGZpbGVzID0gZGxnLmdldFJlc3VsdCgpOwotCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgZmlsZXMubGVuZ3RoOyBpKyspIHsKLQkJCQkJZklucHV0cy5hZGQobmV3IEZpbGVFZGl0b3JJbnB1dCgoSUZpbGUpIGZpbGVzW2ldKSk7Ci0JCQkJfQotCQkJCWZJbnB1dExpc3QucmVmcmVzaCh0cnVlKTsKLQkJCX0KLQkJfQotCX0KLQotCS8qKgotCSAqIEFkZHMgYW4gSVN0b3JhZ2VFZGl0b3JJbnB1dCB0byB0aGUgbGlzdCBvZiBpbnB1dHMgd2l0aCB3aGljaCB0byB0ZXN0Ci0JICovCi0JY2xhc3MgQWRkU3RvcmFnZUlucHV0QWN0aW9uIGV4dGVuZHMgQWN0aW9uIHsKLQkJcHVibGljIEFkZFN0b3JhZ2VJbnB1dEFjdGlvbigpIHsKLQkJCXN1cGVyKCJBZGQgU3RvcmFnZUVkaXRvcklucHV0Iik7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQlzdXBlci5ydW4oKTsKLQkJCUZpbGVEaWFsb2cgZGxnID0gbmV3IEZpbGVEaWFsb2coZklucHV0TGlzdC5nZXRDb250cm9sKCkuZ2V0U2hlbGwoKSk7Ci0JCQlTdHJpbmcgZmlsZU5hbWUgPSBkbGcub3BlbigpOwotCQkJaWYgKGZpbGVOYW1lICE9IG51bGwpIHsKLQkJCQlmSW5wdXRzLmFkZChuZXcgRmlsZUJhc2VkU3RvcmFnZUVkaXRvcklucHV0KG5ldyBGaWxlKGZpbGVOYW1lKSkpOwotCQkJCWZJbnB1dExpc3QucmVmcmVzaCh0cnVlKTsKLQkJCX0KLQkJfQotCX0KLQotCS8qKgotCSAqIEhhbmRsZXIgZm9yIGRvdWJsZS1jbGljayAKLQkgKi8KLQljbGFzcyBEb3VibGVDbGlja0xpc3RlbmVyIGltcGxlbWVudHMgSURvdWJsZUNsaWNrTGlzdGVuZXIgewotCQlwdWJsaWMgdm9pZCBkb3VibGVDbGljayhEb3VibGVDbGlja0V2ZW50IGV2ZW50KSB7Ci0JCQluZXcgSW5wdXRPcGVuQWN0aW9uKCkucnVuKCk7Ci0JCX0KLQl9Ci0KLQljbGFzcyBFZGl0b3JJbnB1dExhYmVsUHJvdmlkZXIgaW1wbGVtZW50cyBJVGFibGVMYWJlbFByb3ZpZGVyIHsKLQkJSUxhYmVsUHJvdmlkZXIgYmFzZVByb3ZpZGVyID0gbmV3IFdvcmtiZW5jaExhYmVsUHJvdmlkZXIoKTsKLQotCQlwdWJsaWMgdm9pZCBhZGRMaXN0ZW5lcihJTGFiZWxQcm92aWRlckxpc3RlbmVyIGxpc3RlbmVyKSB7Ci0JCQkvLyBub3QgaW1wbGVtZW50ZWQKLQkJfQotCi0JCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7Ci0JCQkvLyBubyBuZWVkCi0JCX0KLQotCQlwdWJsaWMgSW1hZ2UgZ2V0Q29sdW1uSW1hZ2UoT2JqZWN0IGVsZW1lbnQsIGludCBjb2x1bW5JbmRleCkgewotCQkJaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBJRmlsZUVkaXRvcklucHV0ICYmIGNvbHVtbkluZGV4ID09IDApIHsKLQkJCQlyZXR1cm4gYmFzZVByb3ZpZGVyLmdldEltYWdlKCgoSUZpbGVFZGl0b3JJbnB1dCkgZWxlbWVudCkuZ2V0RmlsZSgpKTsKLQkJCX0KLQkJCXJldHVybiBudWxsOwotCQl9Ci0KLQkJcHVibGljIFN0cmluZyBnZXRDb2x1bW5UZXh0KE9iamVjdCBlbGVtZW50LCBpbnQgY29sdW1uSW5kZXgpIHsKLQkJCUlFZGl0b3JJbnB1dCBpbnB1dCA9IChJRWRpdG9ySW5wdXQpIGVsZW1lbnQ7Ci0JCQlTdHJpbmcgdGV4dCA9IG51bGw7Ci0JCQlzd2l0Y2ggKGNvbHVtbkluZGV4KSB7Ci0JCQkJY2FzZSAwIDoKLQkJCQkJdHJ5IHsKLQkJCQkJCWlmIChlbGVtZW50IGluc3RhbmNlb2YgRmlsZUJhc2VkU3RvcmFnZUVkaXRvcklucHV0KSB7Ci0JCQkJCQkJSVBhdGggZnVsbHBhdGggPSAoKEZpbGVCYXNlZFN0b3JhZ2VFZGl0b3JJbnB1dCkgZWxlbWVudCkuZ2V0U3RvcmFnZSgpLmdldEZ1bGxQYXRoKCk7Ci0JCQkJCQkJdGV4dCA9IGZ1bGxwYXRoICE9IG51bGwgPyBmdWxscGF0aC50b1N0cmluZygpIDogKChGaWxlQmFzZWRTdG9yYWdlRWRpdG9ySW5wdXQpIGVsZW1lbnQpLmdldE5hbWUoKTsKLQkJCQkJCQlpZiAoKChGaWxlQmFzZWRTdG9yYWdlRWRpdG9ySW5wdXQpIGVsZW1lbnQpLmlzRGlydHkoKSkgewotCQkJCQkJCQl0ZXh0ID0gIioiICsgdGV4dDsKLQkJCQkJCQl9Ci0JCQkJCQl9Ci0JCQkJCQllbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSUZpbGVFZGl0b3JJbnB1dCkgewotCQkJCQkJCXRleHQgPSAoKElGaWxlRWRpdG9ySW5wdXQpIGVsZW1lbnQpLmdldEZpbGUoKS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCk7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCQkJfQotCi0JCQkJCWJyZWFrOwotCQkJCWNhc2UgMSA6Ci0JCQkJCWlmIChlbGVtZW50IGluc3RhbmNlb2YgRmlsZUJhc2VkU3RvcmFnZUVkaXRvcklucHV0KSB7Ci0JCQkJCQl0ZXh0ID0gIkZpbGVCYXNlZFN0b3JhZ2VFZGl0b3JJbnB1dCI7Ci0JCQkJCX0KLQkJCQkJZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIElGaWxlRWRpdG9ySW5wdXQpIHsKLQkJCQkJCXRleHQgPSAiRmlsZUVkaXRvcklucHV0IjsKLQkJCQkJfQotCQkJCQllbHNlIHsKLQkJCQkJCXRleHQgPSBpbnB1dC5nZXRDbGFzcygpLmdldE5hbWUoKTsKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCX0KLQkJCWlmICh0ZXh0ID09IG51bGwpCi0JCQkJdGV4dCA9ICIiOwotCQkJcmV0dXJuIHRleHQ7Ci0JCX0KLQotCQlwdWJsaWMgYm9vbGVhbiBpc0xhYmVsUHJvcGVydHkoT2JqZWN0IGVsZW1lbnQsIFN0cmluZyBwcm9wZXJ0eSkgewotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgcmVtb3ZlTGlzdGVuZXIoSUxhYmVsUHJvdmlkZXJMaXN0ZW5lciBsaXN0ZW5lcikgewotCQkJLy8gbm90IGltcGxlbWVudGVkCi0JCX0KLQl9Ci0KLQotCWNsYXNzIEZpbGVCYWNrZWRTdG9yYWdlIGltcGxlbWVudHMgSVN0b3JhZ2UgewotCQlGaWxlIGZGaWxlID0gbnVsbDsKLQotCQlGaWxlQmFja2VkU3RvcmFnZShGaWxlIGZpbGUpIHsKLQkJCXN1cGVyKCk7Ci0JCQlmRmlsZSA9IGZpbGU7Ci0JCX0KLQotCQlib29sZWFuIGV4aXN0cygpIHsKLQkJCXJldHVybiBmRmlsZS5leGlzdHMoKTsKLQkJfQotCi0JCS8qCi0JCSAqIChub24tSmF2YWRvYykKLQkJICogCi0JCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklBZGFwdGFibGUjZ2V0QWRhcHRlcihqYXZhLmxhbmcuQ2xhc3MpCi0JCSAqLwotCQlwdWJsaWMgT2JqZWN0IGdldEFkYXB0ZXIoQ2xhc3MgYWRhcHRlcikgewotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQotCQkvKgotCQkgKiAobm9uLUphdmFkb2MpCi0JCSAqIAotCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklTdG9yYWdlI2dldENvbnRlbnRzKCkKLQkJICovCi0JCXB1YmxpYyBJbnB1dFN0cmVhbSBnZXRDb250ZW50cygpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJCUlucHV0U3RyZWFtIGNvbnRlbnRzID0gbnVsbDsKLQkJCXRyeSB7Ci0JCQkJY29udGVudHMgPSBuZXcgRmlsZUlucHV0U3RyZWFtKGZGaWxlKTsKLQkJCQlCeXRlQnVmZmVyIGJ1ZmZlciA9IEJ5dGVCdWZmZXIuYWxsb2NhdGUoKGludCkgZkZpbGUubGVuZ3RoKCkpOwotCQkJCWJ5dGVbXSBieXRlcyA9IG5ldyBieXRlWzIwNDhdOwotCQkJCXdoaWxlIChjb250ZW50cy5hdmFpbGFibGUoKSA+IDApIHsKLQkJCQkJaW50IGNvdW50ID0gY29udGVudHMucmVhZChieXRlcyk7Ci0JCQkJCWJ1ZmZlci5wdXQoYnl0ZXMsIDAsIGNvdW50KTsKLQkJCQl9Ci0JCQkJY29udGVudHMuY2xvc2UoKTsKLQotCQkJCWNvbnRlbnRzID0gbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKGJ1ZmZlci5hcnJheSgpKTsKLQkJCX0KLQkJCWNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgewotCQkJCWNvbnRlbnRzID0gbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKG5ldyBieXRlWzBdKTsKLQkJCX0KLQkJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkJY29udGVudHMgPSBuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0obmV3IGJ5dGVbMF0pOwotCQkJfQotCQkJcmV0dXJuIGNvbnRlbnRzOwotCQl9Ci0KLQkJLyoKLQkJICogKG5vbi1KYXZhZG9jKQotCQkgKiAKLQkJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JU3RvcmFnZSNnZXRGdWxsUGF0aCgpCi0JCSAqLwotCQlwdWJsaWMgSVBhdGggZ2V0RnVsbFBhdGgoKSB7Ci0JCQlpZiAocHJvdmlkZUlTdG9yYWdlRnVsbFBhdGgpIHsKLQkJCQlyZXR1cm4gbmV3IFBhdGgoZkZpbGUuZ2V0QWJzb2x1dGVQYXRoKCkpOwotCQkJfQotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQotCQkvKgotCQkgKiAobm9uLUphdmFkb2MpCi0JCSAqIAotCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklTdG9yYWdlI2dldE5hbWUoKQotCQkgKi8KLQkJcHVibGljIFN0cmluZyBnZXROYW1lKCkgewotCQkJcmV0dXJuIGZGaWxlLmdldE5hbWUoKTsKLQkJfQotCi0JCS8qCi0JCSAqIChub24tSmF2YWRvYykKLQkJICogCi0JCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVN0b3JhZ2UjaXNSZWFkT25seSgpCi0JCSAqLwotCQlwdWJsaWMgYm9vbGVhbiBpc1JlYWRPbmx5KCkgewotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQl9Ci0KLQljbGFzcyBGaWxlQmFzZWRTdG9yYWdlRWRpdG9ySW5wdXQgaW1wbGVtZW50cyBJRXh0ZW5kZWRTdG9yYWdlRWRpdG9ySW5wdXQgewotCQlMaXN0IGZFbGVtZW50U3RhdGVMaXN0ZW5lcnMgPSBuZXcgVmVjdG9yKDApOwotCQlib29sZWFuIGZJc0RpcnR5ID0gZmFsc2U7Ci0JCUZpbGVCYWNrZWRTdG9yYWdlIGZTdG9yYWdlID0gbnVsbDsKLQotCQlGaWxlQmFzZWRTdG9yYWdlRWRpdG9ySW5wdXQoRmlsZSBmaWxlKSB7Ci0JCQlmU3RvcmFnZSA9IG5ldyBGaWxlQmFja2VkU3RvcmFnZShmaWxlKTsKLQkJfQotCi0JCS8qCi0JCSAqIChub24tSmF2YWRvYykKLQkJICogCi0JCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5leHRlbnNpb25zLmJyZWFrcG9pbnQuSUV4dGVuZGVkU3RvcmFnZUVkaXRvcklucHV0I2FkZEVsZW1lbnRTdGF0ZUxpc3RlbmVyKG9yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IuSUVsZW1lbnRTdGF0ZUxpc3RlbmVyKQotCQkgKi8KLQkJcHVibGljIHZvaWQgYWRkRWxlbWVudFN0YXRlTGlzdGVuZXIoSUVsZW1lbnRTdGF0ZUxpc3RlbmVyIGxpc3RlbmVyKSB7Ci0JCQlmRWxlbWVudFN0YXRlTGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7Ci0JCX0KLQotCQl2b2lkIGVsZW1lbnRDb250ZW50QWJvdXRUb0JlUmVwbGFjZWQoKSB7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGZFbGVtZW50U3RhdGVMaXN0ZW5lcnMuc2l6ZSgpOyBpKyspIHsKLQkJCQkoKElFbGVtZW50U3RhdGVMaXN0ZW5lcikgZkVsZW1lbnRTdGF0ZUxpc3RlbmVycy5nZXQoaSkpLmVsZW1lbnRDb250ZW50QWJvdXRUb0JlUmVwbGFjZWQoRmlsZUJhc2VkU3RvcmFnZUVkaXRvcklucHV0LnRoaXMpOwotCQkJfQotCQl9Ci0KLQkJdm9pZCBlbGVtZW50Q29udGVudFJlcGxhY2VkKCkgewotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBmRWxlbWVudFN0YXRlTGlzdGVuZXJzLnNpemUoKTsgaSsrKSB7Ci0JCQkJKChJRWxlbWVudFN0YXRlTGlzdGVuZXIpIGZFbGVtZW50U3RhdGVMaXN0ZW5lcnMuZ2V0KGkpKS5lbGVtZW50Q29udGVudFJlcGxhY2VkKEZpbGVCYXNlZFN0b3JhZ2VFZGl0b3JJbnB1dC50aGlzKTsKLQkJCX0KLQkJfQotCi0JCXZvaWQgZWxlbWVudERlbGV0ZWQoKSB7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGZFbGVtZW50U3RhdGVMaXN0ZW5lcnMuc2l6ZSgpOyBpKyspIHsKLQkJCQkoKElFbGVtZW50U3RhdGVMaXN0ZW5lcikgZkVsZW1lbnRTdGF0ZUxpc3RlbmVycy5nZXQoaSkpLmVsZW1lbnREZWxldGVkKEZpbGVCYXNlZFN0b3JhZ2VFZGl0b3JJbnB1dC50aGlzKTsKLQkJCX0KLQkJfQotCi0JCXZvaWQgZWxlbWVudERpcnR5U3RhdGVDaGFuZ2VkKGJvb2xlYW4gZGlydHkpIHsKLQkJCXNldERpcnR5KGRpcnR5KTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgZkVsZW1lbnRTdGF0ZUxpc3RlbmVycy5zaXplKCk7IGkrKykgewotCQkJCSgoSUVsZW1lbnRTdGF0ZUxpc3RlbmVyKSBmRWxlbWVudFN0YXRlTGlzdGVuZXJzLmdldChpKSkuZWxlbWVudERpcnR5U3RhdGVDaGFuZ2VkKEZpbGVCYXNlZFN0b3JhZ2VFZGl0b3JJbnB1dC50aGlzLCBkaXJ0eSk7Ci0JCQl9Ci0JCX0KLQotCQl2b2lkIGVsZW1lbnRNb3ZlZChPYmplY3Qgb2xkRWxlbWVudCwgT2JqZWN0IG5ld0VsZW1lbnQpIHsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgZkVsZW1lbnRTdGF0ZUxpc3RlbmVycy5zaXplKCk7IGkrKykgewotCQkJCSgoSUVsZW1lbnRTdGF0ZUxpc3RlbmVyKSBmRWxlbWVudFN0YXRlTGlzdGVuZXJzLmdldChpKSkuZWxlbWVudE1vdmVkKEZpbGVCYXNlZFN0b3JhZ2VFZGl0b3JJbnB1dC50aGlzLCBGaWxlQmFzZWRTdG9yYWdlRWRpdG9ySW5wdXQudGhpcyk7Ci0JCQl9Ci0JCX0KLQotCQkvKgotCQkgKiAobm9uLUphdmFkb2MpCi0JCSAqIAotCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dCNleGlzdHMoKQotCQkgKi8KLQkJcHVibGljIGJvb2xlYW4gZXhpc3RzKCkgewotCQkJcmV0dXJuIGZTdG9yYWdlLmV4aXN0cygpOwotCQl9Ci0KLQkJLyoKLQkJICogKG5vbi1KYXZhZG9jKQotCQkgKiAKLQkJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZSNnZXRBZGFwdGVyKGphdmEubGFuZy5DbGFzcykKLQkJICovCi0JCXB1YmxpYyBPYmplY3QgZ2V0QWRhcHRlcihDbGFzcyBhZGFwdGVyKSB7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCi0JCUZpbGUgZ2V0RmlsZSgpIHsKLQkJCXJldHVybiBmU3RvcmFnZS5mRmlsZTsKLQkJfQotCi0JCS8qCi0JCSAqIChub24tSmF2YWRvYykKLQkJICogCi0JCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSUVkaXRvcklucHV0I2dldEltYWdlRGVzY3JpcHRvcigpCi0JCSAqLwotCQlwdWJsaWMgSW1hZ2VEZXNjcmlwdG9yIGdldEltYWdlRGVzY3JpcHRvcigpIHsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0KLQkJLyoKLQkJICogKG5vbi1KYXZhZG9jKQotCQkgKiAKLQkJICogQHNlZSBvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQjZ2V0TmFtZSgpCi0JCSAqLwotCQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7Ci0JCQlyZXR1cm4gZlN0b3JhZ2UuZ2V0TmFtZSgpOwotCQl9Ci0KLQkJLyoKLQkJICogKG5vbi1KYXZhZG9jKQotCQkgKiAKLQkJICogQHNlZSBvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQjZ2V0UGVyc2lzdGFibGUoKQotCQkgKi8KLQkJcHVibGljIElQZXJzaXN0YWJsZUVsZW1lbnQgZ2V0UGVyc2lzdGFibGUoKSB7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCi0JCS8qCi0JCSAqIChub24tSmF2YWRvYykKLQkJICogCi0JCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVN0b3JhZ2VFZGl0b3JJbnB1dCNnZXRTdG9yYWdlKCkKLQkJICovCi0JCXB1YmxpYyBJU3RvcmFnZSBnZXRTdG9yYWdlKCkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQkJcmV0dXJuIGZTdG9yYWdlOwotCQl9Ci0KLQkJLyoKLQkJICogKG5vbi1KYXZhZG9jKQotCQkgKiAKLQkJICogQHNlZSBvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQjZ2V0VG9vbFRpcFRleHQoKQotCQkgKi8KLQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCXJldHVybiBmU3RvcmFnZS5nZXRGdWxsUGF0aCgpICE9IG51bGwgPyBmU3RvcmFnZS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCkgOiBmU3RvcmFnZS5nZXROYW1lKCk7Ci0JCX0KLQotCQlib29sZWFuIGlzRGlydHkoKSB7Ci0JCQlyZXR1cm4gZklzRGlydHk7Ci0JCX0KLQotCQkvKgotCQkgKiAobm9uLUphdmFkb2MpCi0JCSAqIAotCQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5zc2UudWkuZXh0ZW5zaW9ucy5icmVha3BvaW50LklFeHRlbmRlZFN0b3JhZ2VFZGl0b3JJbnB1dCNyZW1vdmVFbGVtZW50U3RhdGVMaXN0ZW5lcihvcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLklFbGVtZW50U3RhdGVMaXN0ZW5lcikKLQkJICovCi0JCXB1YmxpYyB2b2lkIHJlbW92ZUVsZW1lbnRTdGF0ZUxpc3RlbmVyKElFbGVtZW50U3RhdGVMaXN0ZW5lciBsaXN0ZW5lcikgewotCQkJZkVsZW1lbnRTdGF0ZUxpc3RlbmVycy5yZW1vdmUobGlzdGVuZXIpOwotCQl9Ci0KLQkJdm9pZCBzZXREaXJ0eShib29sZWFuIGRpcnR5KSB7Ci0JCQlmSXNEaXJ0eSA9IGRpcnR5OwotCQl9Ci0JfQotCi0JY2xhc3MgSW5wdXRDaGFuZ2VEaXJ0eVN0YXRlQWN0aW9uIGV4dGVuZHMgQWN0aW9uIGltcGxlbWVudHMgSVVwZGF0ZSB7Ci0JCXB1YmxpYyBJbnB1dENoYW5nZURpcnR5U3RhdGVBY3Rpb24oKSB7Ci0JCQlzdXBlcigiVG9nZ2xlIGRpcnR5IGZsYWciKTsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCXN1cGVyLnJ1bigpOwotCQkJSUVkaXRvcklucHV0W10gaW5wdXRzID0gZ2V0U2VsZWN0ZWRJbnB1dHMoKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgaW5wdXRzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJaWYgKGlucHV0c1tpXSBpbnN0YW5jZW9mIEZpbGVCYXNlZFN0b3JhZ2VFZGl0b3JJbnB1dCkgewotCQkJCQkoKEZpbGVCYXNlZFN0b3JhZ2VFZGl0b3JJbnB1dCkgaW5wdXRzW2ldKS5lbGVtZW50RGlydHlTdGF0ZUNoYW5nZWQoISgoRmlsZUJhc2VkU3RvcmFnZUVkaXRvcklucHV0KSBpbnB1dHNbaV0pLmlzRGlydHkoKSk7Ci0JCQkJfQotCQkJfQotCQkJZklucHV0TGlzdC5yZWZyZXNoKHRydWUpOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgdXBkYXRlKCkgewotCQkJc2V0RW5hYmxlZChmU2VsZWN0ZWRFbGVtZW50ICE9IG51bGwgJiYgZlNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIEZpbGVCYXNlZFN0b3JhZ2VFZGl0b3JJbnB1dCk7Ci0JCX0KLQl9Ci0KLQljbGFzcyBJbnB1dERlbGV0ZUFjdGlvbiBleHRlbmRzIEFjdGlvbiBpbXBsZW1lbnRzIElVcGRhdGUgewotCQlwdWJsaWMgSW5wdXREZWxldGVBY3Rpb24oKSB7Ci0JCQlzdXBlcigiRGVsZXRlIElucHV0Iik7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQlzdXBlci5ydW4oKTsKLQkJCUlFZGl0b3JJbnB1dFtdIGlucHV0cyA9IGdldFNlbGVjdGVkSW5wdXRzKCk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGlucHV0cy5sZW5ndGg7IGkrKykgewotCQkJCWlmIChpbnB1dHNbaV0gaW5zdGFuY2VvZiBGaWxlQmFzZWRTdG9yYWdlRWRpdG9ySW5wdXQpIHsKLQkJCQkJKChGaWxlQmFzZWRTdG9yYWdlRWRpdG9ySW5wdXQpIGlucHV0c1tpXSkuZWxlbWVudERlbGV0ZWQoKTsKLQkJCQl9Ci0JCQl9Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGlucHV0cy5sZW5ndGg7IGkrKykgewotCQkJCWZJbnB1dHMucmVtb3ZlKGlucHV0c1tpXSk7Ci0JCQl9Ci0JCQlmSW5wdXRMaXN0LnJlZnJlc2goKTsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHVwZGF0ZSgpIHsKLQkJCXNldEVuYWJsZWQoZlNlbGVjdGVkRWxlbWVudCAhPSBudWxsICYmIGZTZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBGaWxlQmFzZWRTdG9yYWdlRWRpdG9ySW5wdXQpOwotCQl9Ci0JfQotCi0JY2xhc3MgSW5wdXRNb3ZlQWN0aW9uIGV4dGVuZHMgQWN0aW9uIGltcGxlbWVudHMgSVVwZGF0ZSB7Ci0JCXB1YmxpYyBJbnB1dE1vdmVBY3Rpb24oKSB7Ci0JCQlzdXBlcigiTW92ZSBJbnB1dCIpOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJc3VwZXIucnVuKCk7Ci0JCQlJRWRpdG9ySW5wdXRbXSBpbnB1dHMgPSBnZXRTZWxlY3RlZElucHV0cygpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBpbnB1dHMubGVuZ3RoOyBpKyspIHsKLQkJCQlpZiAoaW5wdXRzW2ldIGluc3RhbmNlb2YgRmlsZUJhc2VkU3RvcmFnZUVkaXRvcklucHV0KSB7Ci0JCQkJCSgoRmlsZUJhc2VkU3RvcmFnZUVkaXRvcklucHV0KSBpbnB1dHNbaV0pLmVsZW1lbnRNb3ZlZChpbnB1dHNbaV0sIGlucHV0c1tpXSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJcHVibGljIHZvaWQgdXBkYXRlKCkgewotCQkJc2V0RW5hYmxlZChmU2VsZWN0ZWRFbGVtZW50ICE9IG51bGwgJiYgZlNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIEZpbGVCYXNlZFN0b3JhZ2VFZGl0b3JJbnB1dCk7Ci0JCX0KLQl9Ci0KLQljbGFzcyBJbnB1dE9wZW5BY3Rpb24gZXh0ZW5kcyBBY3Rpb24gewotCQlwdWJsaWMgSW5wdXRPcGVuQWN0aW9uKCkgewotCQkJc3VwZXIoIk9wZW4iKTsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCXN1cGVyLnJ1bigpOwotCQkJSUVkaXRvcklucHV0W10gaW5wdXRzID0gZ2V0U2VsZWN0ZWRJbnB1dHMoKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgaW5wdXRzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJdHJ5IHsKLQkJCQkJZ2V0U2l0ZSgpLmdldFdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5vcGVuRWRpdG9yKGlucHV0c1tpXSwgZ2V0RWRpdG9ySWQoaW5wdXRzW2ldKSk7Ci0JCQkJfQotCQkJCWNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBlKSB7Ci0JCQkJCW9wZW5FcnJvcihnZXRTaXRlKCkuZ2V0V29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldFdvcmtiZW5jaFdpbmRvdygpLmdldFNoZWxsKCksICJPcGVuU3lzdGVtRWRpdG9yQWN0aW9uLmRpYWxvZ1RpdGxlIiwgZS5nZXRNZXNzYWdlKCksIGUpOwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQotCWNsYXNzIElucHV0UmVwbGFjZUNvbnRlbnRzQWN0aW9uIGV4dGVuZHMgQWN0aW9uIGltcGxlbWVudHMgSVVwZGF0ZSB7Ci0JCXB1YmxpYyBJbnB1dFJlcGxhY2VDb250ZW50c0FjdGlvbigpIHsKLQkJCXN1cGVyKCJSZXBsYWNlIElucHV0J3MgQ29udGVudHMiKTsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCXN1cGVyLnJ1bigpOwotCQkJSUVkaXRvcklucHV0W10gaW5wdXRzID0gZ2V0U2VsZWN0ZWRJbnB1dHMoKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgaW5wdXRzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJKChGaWxlQmFzZWRTdG9yYWdlRWRpdG9ySW5wdXQpIGlucHV0c1tpXSkuZWxlbWVudENvbnRlbnRBYm91dFRvQmVSZXBsYWNlZCgpOwotCQkJCSgoRmlsZUJhc2VkU3RvcmFnZUVkaXRvcklucHV0KSBpbnB1dHNbaV0pLmVsZW1lbnRDb250ZW50UmVwbGFjZWQoKTsKLQkJCX0KLQkJfQotCi0JCXB1YmxpYyB2b2lkIHVwZGF0ZSgpIHsKLQkJCXNldEVuYWJsZWQoZlNlbGVjdGVkRWxlbWVudCAhPSBudWxsICYmIGZTZWxlY3RlZEVsZW1lbnQgaW5zdGFuY2VvZiBGaWxlQmFzZWRTdG9yYWdlRWRpdG9ySW5wdXQpOwotCQl9Ci0JfQotCi0JY2xhc3MgUmVtb3ZlSW5wdXRBY3Rpb24gZXh0ZW5kcyBBY3Rpb24gewotCQlwdWJsaWMgUmVtb3ZlSW5wdXRBY3Rpb24oKSB7Ci0JCQlzdXBlcigiUmVtb3ZlIik7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQlzdXBlci5ydW4oKTsKLQkJCUlFZGl0b3JJbnB1dFtdIGlucHV0cyA9IGdldFNlbGVjdGVkSW5wdXRzKCk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGlucHV0cy5sZW5ndGg7IGkrKykgewotCQkJCWZJbnB1dHMucmVtb3ZlKGlucHV0c1tpXSk7Ci0JCQl9Ci0JCQlmSW5wdXRMaXN0LnJlZnJlc2goKTsKLQkJfQotCX0KLQotCWNsYXNzIFJldXNlRWRpdG9yQWN0aW9uIGV4dGVuZHMgQWN0aW9uIGltcGxlbWVudHMgSVVwZGF0ZSB7Ci0JCXB1YmxpYyBSZXVzZUVkaXRvckFjdGlvbigpIHsKLQkJCXN1cGVyKCJSZXVzZSBFZGl0b3IiKTsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCXN1cGVyLnJ1bigpOwotCQkJSUVkaXRvcklucHV0W10gaW5wdXRzID0gZ2V0U2VsZWN0ZWRJbnB1dHMoKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgaW5wdXRzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJSUVkaXRvclBhcnQgZWRpdG9yID0gZ2V0U2l0ZSgpLmdldFdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKTsKLQkJCQlpZiAoZWRpdG9yIGluc3RhbmNlb2YgSVJldXNhYmxlRWRpdG9yKSB7Ci0JCQkJCWdldFNpdGUoKS5nZXRXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkucmV1c2VFZGl0b3IoKChJUmV1c2FibGVFZGl0b3IpIGVkaXRvciksIGlucHV0c1tpXSk7Ci0JCQkJfQotCQkJCWVsc2UgewotCQkJCQlTU0VVSVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0V29ya2JlbmNoKCkuZ2V0RGlzcGxheSgpLmJlZXAoKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCB1cGRhdGUoKSB7Ci0JCQlib29sZWFuIGVuYWJsZSA9IHRydWU7Ci0JCQl0cnkgewotCQkJCWVuYWJsZSA9IGZTZWxlY3RlZEVsZW1lbnQgIT0gbnVsbCAmJiBnZXRTaXRlKCkuZ2V0V29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpIGluc3RhbmNlb2YgSVJldXNhYmxlRWRpdG9yOwotCQkJfQotCQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJZW5hYmxlID0gdHJ1ZTsKLQkJCX0KLQkJCXNldEVuYWJsZWQoZW5hYmxlKTsKLQkJfQotCX0KLQotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIHByb3ZpZGVJU3RvcmFnZUZ1bGxQYXRoID0gdHJ1ZTsKLQotCS8qKgotCSAqIE9wZW4gYW4gZXJyb3Igc3R5bGUgZGlhbG9nIGZvciBQYXJ0SW5pdEV4Y2VwdGlvbiBieSBpbmNsdWRpbmcgYW55IGV4dHJhCi0JICogaW5mb3JtYXRpb24gZnJvbSB0aGUgbmVzdGVkIENvcmVFeGNlcHRpb24gaWYgcHJlc2VudC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIHZvaWQgb3BlbkVycm9yKFNoZWxsIHBhcmVudCwgU3RyaW5nIHRpdGxlLCBTdHJpbmcgbWVzc2FnZSwgUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7Ci0JCS8vIENoZWNrIGZvciBhIG5lc3RlZCBDb3JlRXhjZXB0aW9uCi0JCUNvcmVFeGNlcHRpb24gbmVzdGVkRXhjZXB0aW9uID0gbnVsbDsKLQkJSVN0YXR1cyBzdGF0dXMgPSBleGNlcHRpb24uZ2V0U3RhdHVzKCk7Ci0JCWlmIChzdGF0dXMgIT0gbnVsbCAmJiBzdGF0dXMuZ2V0RXhjZXB0aW9uKCkgaW5zdGFuY2VvZiBDb3JlRXhjZXB0aW9uKQotCQkJbmVzdGVkRXhjZXB0aW9uID0gKENvcmVFeGNlcHRpb24pIHN0YXR1cy5nZXRFeGNlcHRpb24oKTsKLQotCQlpZiAobmVzdGVkRXhjZXB0aW9uICE9IG51bGwpIHsKLQkJCS8vIE9wZW4gYW4gZXJyb3IgZGlhbG9nIGFuZCBpbmNsdWRlIHRoZSBleHRyYQotCQkJLy8gc3RhdHVzIGluZm9ybWF0aW9uIGZyb20gdGhlIG5lc3RlZCBDb3JlRXhjZXB0aW9uCi0JCQlFcnJvckRpYWxvZy5vcGVuRXJyb3IocGFyZW50LCB0aXRsZSwgbWVzc2FnZSwgbmVzdGVkRXhjZXB0aW9uLmdldFN0YXR1cygpKTsKLQkJfQotCQllbHNlIHsKLQkJCS8vIE9wZW4gYSByZWd1bGFyIGVycm9yIGRpYWxvZyBzaW5jZSB0aGVyZSBpcyBubwotCQkJLy8gZXh0cmEgaW5mb3JtYXRpb24gdG8gZGlzcGxheQotCQkJTWVzc2FnZURpYWxvZy5vcGVuRXJyb3IocGFyZW50LCB0aXRsZSwgbWVzc2FnZSk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIExpc3QgYWN0aW9ucyA9IG51bGw7Ci0KLQlUYWJsZVZpZXdlciBmSW5wdXRMaXN0ID0gbnVsbDsKLQotCUxpc3QgZklucHV0cyA9IG5ldyBBcnJheUxpc3QoMCk7Ci0KLQlPYmplY3QgZlNlbGVjdGVkRWxlbWVudCA9IG51bGw7Ci0KLQotCXB1YmxpYyBFeHRlbmRlZFN0b3JhZ2VFZGl0b3JJbnB1dFZpZXcoKSB7Ci0JCXN1cGVyKCk7Ci0JCWFjdGlvbnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydCNjcmVhdGVQYXJ0Q29udHJvbChvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGUpCi0JICovCi0JcHVibGljIHZvaWQgY3JlYXRlUGFydENvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgewotCQlmSW5wdXRMaXN0ID0gbmV3IFRhYmxlVmlld2VyKHBhcmVudCwgU1dULkZVTExfU0VMRUNUSU9OIHwgU1dULk1VTFRJIHwgU1dULkhfU0NST0xMIHwgU1dULlZfU0NST0xMKTsKLQkJZklucHV0TGlzdC5zZXRDb250ZW50UHJvdmlkZXIobmV3IEFycmF5Q29udGVudFByb3ZpZGVyKCkpOwotCQlmSW5wdXRMaXN0LnNldExhYmVsUHJvdmlkZXIobmV3IEVkaXRvcklucHV0TGFiZWxQcm92aWRlcigpKTsKLQkJZklucHV0TGlzdC5hZGREb3VibGVDbGlja0xpc3RlbmVyKG5ldyBEb3VibGVDbGlja0xpc3RlbmVyKCkpOwotCQlmSW5wdXRMaXN0LmdldFRhYmxlKCkuc2V0SGVhZGVyVmlzaWJsZSh0cnVlKTsKLQkJZklucHV0TGlzdC5nZXRUYWJsZSgpLnNldExpbmVzVmlzaWJsZSh0cnVlKTsKLQkJU3RyaW5nW10gY29sdW1ucyA9IG5ldyBTdHJpbmdbXXsiUGF0aCIsICJUeXBlIn07Ci0JCWZJbnB1dExpc3Quc2V0TGFiZWxQcm92aWRlcihuZXcgRWRpdG9ySW5wdXRMYWJlbFByb3ZpZGVyKCkpOwotCi0KLQkJVGFibGVMYXlvdXQgdGxheW91dCA9IG5ldyBUYWJsZUxheW91dCgpOwotCQlDZWxsRWRpdG9yW10gY2VsbEVkaXRvcnMgPSBuZXcgQ2VsbEVkaXRvcls1XTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjb2x1bW5zLmxlbmd0aDsgaSsrKSB7Ci0JCQl0bGF5b3V0LmFkZENvbHVtbkRhdGEobmV3IENvbHVtbldlaWdodERhdGEoMSkpOwotCQkJVGFibGVDb2x1bW4gdGMgPSBuZXcgVGFibGVDb2x1bW4oZklucHV0TGlzdC5nZXRUYWJsZSgpLCBTV1QuTk9ORSk7Ci0JCQl0Yy5zZXRUZXh0KGNvbHVtbnNbaV0pOwotCQkJdGMuc2V0UmVzaXphYmxlKHRydWUpOwotCQkJdGMuc2V0V2lkdGgoRGlzcGxheS5nZXRDdXJyZW50KCkuZ2V0Qm91bmRzKCkud2lkdGggLyAxNCk7Ci0JCX0KLQkJZklucHV0TGlzdC5zZXRDZWxsRWRpdG9ycyhjZWxsRWRpdG9ycyk7Ci0JCWZJbnB1dExpc3Quc2V0Q29sdW1uUHJvcGVydGllcyhjb2x1bW5zKTsKLQotCQlHcmlkRGF0YSBnZCA9IG5ldyBHcmlkRGF0YShTV1QuRklMTCwgU1dULkZJTEwsIHRydWUsIHRydWUpOwotCQlmSW5wdXRMaXN0LmdldFRhYmxlKCkuc2V0TGF5b3V0RGF0YShnZCk7Ci0KLQkJTWVudU1hbmFnZXIgbWVudU1hbmFnZXIgPSBuZXcgTWVudU1hbmFnZXIoIiNwb3B1cCIpOyAvLyROT04tTkxTLTEkCi0JCW1lbnVNYW5hZ2VyLnNldFJlbW92ZUFsbFdoZW5TaG93bihmYWxzZSk7Ci0KLQkJbWVudU1hbmFnZXIuYWRkKG5ldyBJbnB1dE9wZW5BY3Rpb24oKSk7Ci0JCW1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCkpOwotCQltZW51TWFuYWdlci5hZGQobmV3IElucHV0TW92ZUFjdGlvbigpKTsKLQkJbWVudU1hbmFnZXIuYWRkKG5ldyBJbnB1dENoYW5nZURpcnR5U3RhdGVBY3Rpb24oKSk7Ci0JCW1lbnVNYW5hZ2VyLmFkZChuZXcgSW5wdXREZWxldGVBY3Rpb24oKSk7Ci0JCW1lbnVNYW5hZ2VyLmFkZChuZXcgSW5wdXRSZXBsYWNlQ29udGVudHNBY3Rpb24oKSk7Ci0JCW1lbnVNYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCkpOwotCQltZW51TWFuYWdlci5hZGQobmV3IFJlbW92ZUlucHV0QWN0aW9uKCkpOwotCQlNZW51IG1lbnUgPSBtZW51TWFuYWdlci5jcmVhdGVDb250ZXh0TWVudShmSW5wdXRMaXN0LmdldENvbnRyb2woKSk7Ci0JCWZJbnB1dExpc3QuZ2V0Q29udHJvbCgpLnNldE1lbnUobWVudSk7Ci0KLQotCQlTU0VUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKS5zZXREZWZhdWx0KGdldElucHV0c1ByZWZlcmVuY2VOYW1lKCksICIiKTsKLQkJU3RyaW5nIHBhdGhzW10gPSBTdHJpbmdVdGlscy51bnBhY2soU1NFVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFBsdWdpblByZWZlcmVuY2VzKCkuZ2V0U3RyaW5nKGdldElucHV0c1ByZWZlcmVuY2VOYW1lKCkpKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwYXRocy5sZW5ndGg7IGkrKykgewotCQkJaWYgKHBhdGhzW2ldLnN0YXJ0c1dpdGgoIlMhIikpIHsKLQkJCQlmSW5wdXRzLmFkZChuZXcgRmlsZUJhc2VkU3RvcmFnZUVkaXRvcklucHV0KG5ldyBGaWxlKHBhdGhzW2ldLnN1YnN0cmluZygyKSkpKTsKLQkJCQltZW51TWFuYWdlci5hZGQobmV3IE9wZW5XaXRoTWVudShnZXRTaXRlKCkuZ2V0UGFnZSgpLCBudWxsKSk7Ci0JCQl9Ci0JCQllbHNlIGlmIChwYXRoc1tpXS5zdGFydHNXaXRoKCJGISIpKSB7Ci0JCQkJSUZpbGUgZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShuZXcgUGF0aChwYXRoc1tpXS5zdWJzdHJpbmcoMikpKTsKLQkJCQlmSW5wdXRzLmFkZChuZXcgRmlsZUVkaXRvcklucHV0KGZpbGUpKTsKLQkJCQltZW51TWFuYWdlci5hZGQobmV3IE9wZW5XaXRoTWVudShnZXRTaXRlKCkuZ2V0UGFnZSgpLCBmaWxlKSk7Ci0JCQl9Ci0JCX0KLQotCQlmSW5wdXRMaXN0LnNldElucHV0KGZJbnB1dHMpOwotCQlmSW5wdXRMaXN0LmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihuZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpIHsKLQkJCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7Ci0JCQkJSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbikgZXZlbnQuZ2V0U2VsZWN0aW9uKCkpOwotCQkJCWZTZWxlY3RlZEVsZW1lbnQgPSBzZWwuZ2V0Rmlyc3RFbGVtZW50KCk7Ci0JCQl9Ci0JCX0pOwotCX0KLQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydCNkaXNwb3NlKCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgewotCQlMaXN0IHBhdGhzID0gbmV3IEFycmF5TGlzdCgwKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBmSW5wdXRzLnNpemUoKTsgaSsrKSB7Ci0JCQl0cnkgewotCQkJCU9iamVjdCBpbnB1dCA9IGZJbnB1dHMuZ2V0KGkpOwotCQkJCVN0cmluZyBwYXRoID0gbnVsbDsKLQkJCQlpZiAoaW5wdXQgaW5zdGFuY2VvZiBGaWxlQmFzZWRTdG9yYWdlRWRpdG9ySW5wdXQpIHsKLQkJCQkJcGF0aCA9ICJTISIgKyAoKEZpbGVCYXNlZFN0b3JhZ2VFZGl0b3JJbnB1dCkgaW5wdXQpLmdldEZpbGUoKS5nZXRDYW5vbmljYWxQYXRoKCk7Ci0JCQkJfQotCQkJCWVsc2UgaWYgKGlucHV0IGluc3RhbmNlb2YgSUZpbGVFZGl0b3JJbnB1dCkgewotCQkJCQlwYXRoID0gIkYhIiArICgoSUZpbGVFZGl0b3JJbnB1dCkgaW5wdXQpLmdldEZpbGUoKS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCk7Ci0JCQkJfQotCQkJCWlmIChwYXRoICE9IG51bGwpIHsKLQkJCQkJcGF0aHMuYWRkKHBhdGgpOwotCQkJCX0KLQkJCX0KLQkJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJfQotCQlTU0VUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKS5zZXRWYWx1ZShnZXRJbnB1dHNQcmVmZXJlbmNlTmFtZSgpLCBTdHJpbmdVdGlscy5wYWNrKChTdHJpbmdbXSkgcGF0aHMudG9BcnJheShuZXcgU3RyaW5nWzBdKSkpOwotCQlTU0VUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuc2F2ZVBsdWdpblByZWZlcmVuY2VzKCk7Ci0JfQotCi0JU3RyaW5nIGdldEVkaXRvcklkKElFZGl0b3JJbnB1dCBpbnB1dCkgewotCQlJV29ya2JlbmNoIHdvcmtiZW5jaCA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCk7Ci0JCUlFZGl0b3JSZWdpc3RyeSBlZGl0b3JSZWdpc3RyeSA9IHdvcmtiZW5jaC5nZXRFZGl0b3JSZWdpc3RyeSgpOwotCQlJQ29udGVudFR5cGVbXSB0eXBlcyA9IG51bGw7Ci0JCVN0cmluZyBlZGl0b3JJRCA9IG51bGw7Ci0JCWlmIChpbnB1dCBpbnN0YW5jZW9mIElTdG9yYWdlRWRpdG9ySW5wdXQpIHsKLQkJCUlucHV0U3RyZWFtIGlucHV0U3RyZWFtID0gbnVsbDsKLQkJCXRyeSB7Ci0JCQkJaW5wdXRTdHJlYW0gPSAoKElTdG9yYWdlRWRpdG9ySW5wdXQpIGlucHV0KS5nZXRTdG9yYWdlKCkuZ2V0Q29udGVudHMoKTsKLQkJCX0KLQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfQotCQkJdHJ5IHsKLQkJCQl0eXBlcyA9IFBsYXRmb3JtLmdldENvbnRlbnRUeXBlTWFuYWdlcigpLmZpbmRDb250ZW50VHlwZXNGb3IoaW5wdXRTdHJlYW0sIGlucHV0LmdldE5hbWUoKSk7Ci0JCQl9Ci0JCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQl9Ci0JCQl0cnkgewotCQkJCWlmIChpbnB1dFN0cmVhbSAhPSBudWxsKSB7Ci0JCQkJCWlucHV0U3RyZWFtLmNsb3NlKCk7Ci0JCQkJfQotCQkJfQotCQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfQotCQl9Ci0KLQkJSUVkaXRvckRlc2NyaXB0b3IgZGVzY3JpcHRvciA9IGVkaXRvclJlZ2lzdHJ5LmdldERlZmF1bHRFZGl0b3IoaW5wdXQuZ2V0TmFtZSgpLCB0eXBlc1swXSk7Ci0JCWlmIChkZXNjcmlwdG9yICE9IG51bGwpIHsKLQkJCWVkaXRvcklEID0gZGVzY3JpcHRvci5nZXRJZCgpOwotCQl9Ci0JCWlmIChlZGl0b3JJRCA9PSBudWxsKSB7Ci0JCQllZGl0b3JJRCA9IEVkaXRvcnNVSS5ERUZBVUxUX1RFWFRfRURJVE9SX0lEOwotCQl9Ci0JCXJldHVybiBlZGl0b3JJRDsKLQl9Ci0KLQkvKioKLQkgKiBAcmV0dXJuCi0JICovCi0JU3RyaW5nIGdldElucHV0c1ByZWZlcmVuY2VOYW1lKCkgewotCQlyZXR1cm4gIkV4dGVuZGVkU3RvcmFnZUVkaXRvcklucHV0VmlldzppbnB1dHMiOwotCX0KLQotCUlFZGl0b3JJbnB1dFtdIGdldFNlbGVjdGVkSW5wdXRzKCkgewotCQlJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IGZJbnB1dExpc3QuZ2V0U2VsZWN0aW9uKCk7Ci0JCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgewotCQkJSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBzZWxlY3Rpb247Ci0JCQlpZiAoc2VsLmlzRW1wdHkoKSkgewotCQkJCXJldHVybiBuZXcgSUVkaXRvcklucHV0WzBdOwotCQkJfQotCQkJT2JqZWN0W10gYXJyID0gc2VsLnRvQXJyYXkoKTsKLQkJCUlFZGl0b3JJbnB1dFtdIGlucHV0cyA9IG5ldyBJRWRpdG9ySW5wdXRbYXJyLmxlbmd0aF07Ci0JCQlTeXN0ZW0uYXJyYXljb3B5KGFyciwgMCwgaW5wdXRzLCAwLCBpbnB1dHMubGVuZ3RoKTsKLQkJCXJldHVybiBpbnB1dHM7Ci0JCX0KLQkJcmV0dXJuIG5ldyBJRWRpdG9ySW5wdXRbMF07Ci0JfQotCi0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklWaWV3UGFydCNpbml0KG9yZy5lY2xpcHNlLnVpLklWaWV3U2l0ZSkKLQkgKi8KLQlwdWJsaWMgdm9pZCBpbml0KElWaWV3U2l0ZSBzaXRlKSB0aHJvd3MgUGFydEluaXRFeGNlcHRpb24gewotCQlzdXBlci5pbml0KHNpdGUpOwotCi0JCXNpdGUuZ2V0QWN0aW9uQmFycygpLmdldFRvb2xCYXJNYW5hZ2VyKCkuYWRkKHJlbWVtYmVyQWN0aW9uKG5ldyBBZGRTdG9yYWdlSW5wdXRBY3Rpb24oKSkpOwotCQlzaXRlLmdldEFjdGlvbkJhcnMoKS5nZXRUb29sQmFyTWFuYWdlcigpLmFkZChyZW1lbWJlckFjdGlvbihuZXcgQWRkRmlsZUlucHV0QWN0aW9uKCkpKTsKLQkJc2l0ZS5nZXRBY3Rpb25CYXJzKCkuZ2V0VG9vbEJhck1hbmFnZXIoKS5hZGQocmVtZW1iZXJBY3Rpb24obmV3IFJldXNlRWRpdG9yQWN0aW9uKCkpKTsKLQkJc2l0ZS5nZXRBY3Rpb25CYXJzKCkuZ2V0VG9vbEJhck1hbmFnZXIoKS5hZGQocmVtZW1iZXJBY3Rpb24obmV3IFJlbW92ZUlucHV0QWN0aW9uKCkpKTsKLQotCQlzaXRlLmdldEFjdGlvbkJhcnMoKS5nZXRNZW51TWFuYWdlcigpLmFkZChyZW1lbWJlckFjdGlvbihuZXcgSW5wdXRPcGVuQWN0aW9uKCkpKTsKLQkJc2l0ZS5nZXRBY3Rpb25CYXJzKCkuZ2V0TWVudU1hbmFnZXIoKS5hZGQocmVtZW1iZXJBY3Rpb24obmV3IFJldXNlRWRpdG9yQWN0aW9uKCkpKTsKLQkJc2l0ZS5nZXRBY3Rpb25CYXJzKCkuZ2V0TWVudU1hbmFnZXIoKS5hZGQobmV3IFNlcGFyYXRvcigpKTsKLQkJc2l0ZS5nZXRBY3Rpb25CYXJzKCkuZ2V0TWVudU1hbmFnZXIoKS5hZGQocmVtZW1iZXJBY3Rpb24obmV3IElucHV0TW92ZUFjdGlvbigpKSk7Ci0JCXNpdGUuZ2V0QWN0aW9uQmFycygpLmdldE1lbnVNYW5hZ2VyKCkuYWRkKHJlbWVtYmVyQWN0aW9uKG5ldyBJbnB1dENoYW5nZURpcnR5U3RhdGVBY3Rpb24oKSkpOwotCQlzaXRlLmdldEFjdGlvbkJhcnMoKS5nZXRNZW51TWFuYWdlcigpLmFkZChyZW1lbWJlckFjdGlvbihuZXcgSW5wdXREZWxldGVBY3Rpb24oKSkpOwotCQlzaXRlLmdldEFjdGlvbkJhcnMoKS5nZXRNZW51TWFuYWdlcigpLmFkZChyZW1lbWJlckFjdGlvbihuZXcgSW5wdXRSZXBsYWNlQ29udGVudHNBY3Rpb24oKSkpOwotCX0KLQotCUlBY3Rpb24gcmVtZW1iZXJBY3Rpb24oSUFjdGlvbiBhY3Rpb24pIHsKLQkJYWN0aW9ucy5hZGQoYWN0aW9uKTsKLQkJcmV0dXJuIGFjdGlvbjsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0I3NldEZvY3VzKCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRGb2N1cygpIHsKLQkJZklucHV0TGlzdC5nZXRDb250cm9sKCkuc2V0Rm9jdXMoKTsKLQl9Ci0KLQotCXByb3RlY3RlZCB2b2lkIHVwZGF0ZUVuYWJsZW1lbnQoKSB7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgYWN0aW9ucy5zaXplKCk7IGkrKykgewotCQkJT2JqZWN0IGFjdGlvbiA9IGFjdGlvbnMuZ2V0KGkpOwotCQkJaWYgKGFjdGlvbiBpbnN0YW5jZW9mIElVcGRhdGUpIHsKLQkJCQkoKElVcGRhdGUpIGFjdGlvbikudXBkYXRlKCk7Ci0JCQl9Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL3VpL3Rlc3RzL0xvZ2dlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9Mb2dnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjFjNjYzNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL3VpL3Rlc3RzL0xvZ2dlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTU0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzOwotCi1pbXBvcnQgY29tLmlibS5pY3UudXRpbC5TdHJpbmdUb2tlbml6ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotCi0vKioKLSAqIFNtYWxsIGNvbnZlbmllbmNlIGNsYXNzIHRvIGxvZyBtZXNzYWdlcyB0byBwbHVnaW4ncyBsb2cgZmlsZSBhbmQgYWxzbywgaWYKLSAqIGRlc2lyZWQsIHRoZSBjb25zb2xlLiBUaGlzIGNsYXNzIHNob3VsZCBvbmx5IGJlIHVzZWQgYnkgY2xhc3NlcyBpbiB0aGlzCi0gKiBwbHVnaW4uIE90aGVyIHBsdWdpbnMgc2hvdWxkIG1ha2UgdGhlaXIgb3duIGNvcHksIHdpdGggYXBwcm9wcmlhdGUgSUQuCi0gKi8KLXB1YmxpYyBjbGFzcyBMb2dnZXIgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2Uud3N0LnVpLnRlc3RzIjsgLy8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRSQUNFRklMVEVSX0xPQ0FUSU9OID0gIi9kZWJ1Zy90cmFjZWZpbHRlciI7IC8vJE5PTi1OTFMtMSQKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9LID0gSVN0YXR1cy5PSzsgLy8gMAotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElORk8gPSBJU3RhdHVzLklORk87IC8vIDEKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXQVJOSU5HID0gSVN0YXR1cy5XQVJOSU5HOyAvLyAyCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVJST1IgPSBJU3RhdHVzLkVSUk9SOyAvLyA0Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPS19ERUJVRyA9IDIwMCArIE9LOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElORk9fREVCVUcgPSAyMDAgKyBJTkZPOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdBUk5JTkdfREVCVUcgPSAyMDAgKyBXQVJOSU5HOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SX0RFQlVHID0gMjAwICsgRVJST1I7Ci0KLQkvKioKLQkgKiBBZGRzIG1lc3NhZ2UgdG8gbG9nLgotCSAqIAotCSAqIEBwYXJhbSBsZXZlbAotCSAqICAgICAgICAgICAgc2V2ZXJpdHkgbGV2ZWwgb2YgdGhlIG1lc3NhZ2UgKE9LLCBJTkZPLCBXQVJOSU5HLCBFUlJPUiwKLQkgKiAgICAgICAgICAgIE9LX0RFQlVHLCBJTkZPX0RFQlVHLCBXQVJOSU5HX0RFQlVHLCBFUlJPUl9ERUJVRykKLQkgKiBAcGFyYW0gbWVzc2FnZQotCSAqICAgICAgICAgICAgdGV4dCB0byBhZGQgdG8gdGhlIGxvZwotCSAqIEBwYXJhbSBleGNlcHRpb24KLQkgKiAgICAgICAgICAgIGV4Y2VwdGlvbiB0aHJvd24KLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIHZvaWQgX2xvZyhpbnQgbGV2ZWwsIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCWlmIChsZXZlbCA9PSBPS19ERUJVRyB8fCBsZXZlbCA9PSBJTkZPX0RFQlVHIHx8IGxldmVsID09IFdBUk5JTkdfREVCVUcgfHwgbGV2ZWwgPT0gRVJST1JfREVCVUcpIHsKLQkJCWlmICghaXNEZWJ1Z2dpbmcoKSkKLQkJCQlyZXR1cm47Ci0JCX0KLQotCQlpbnQgc2V2ZXJpdHkgPSBJU3RhdHVzLk9LOwotCQlzd2l0Y2ggKGxldmVsKSB7Ci0JCQljYXNlIElORk9fREVCVUcgOgotCQkJY2FzZSBJTkZPIDoKLQkJCQlzZXZlcml0eSA9IElTdGF0dXMuSU5GTzsKLQkJCQlicmVhazsKLQkJCWNhc2UgV0FSTklOR19ERUJVRyA6Ci0JCQljYXNlIFdBUk5JTkcgOgotCQkJCXNldmVyaXR5ID0gSVN0YXR1cy5XQVJOSU5HOwotCQkJCWJyZWFrOwotCQkJY2FzZSBFUlJPUl9ERUJVRyA6Ci0JCQljYXNlIEVSUk9SIDoKLQkJCQlzZXZlcml0eSA9IElTdGF0dXMuRVJST1I7Ci0JCX0KLQkJbWVzc2FnZSA9IChtZXNzYWdlICE9IG51bGwpID8gbWVzc2FnZSA6ICJudWxsIjsgLy8kTk9OLU5MUy0xJAotCQlTdGF0dXMgc3RhdHVzT2JqID0gbmV3IFN0YXR1cyhzZXZlcml0eSwgUExVR0lOX0lELCBzZXZlcml0eSwgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShQTFVHSU5fSUQpOwotCQlpZiAoYnVuZGxlICE9IG51bGwpIAotCQkJUGxhdGZvcm0uZ2V0TG9nKGJ1bmRsZSkubG9nKHN0YXR1c09iaik7Ci0JfQotCi0JLyoqCi0JICogUHJpbnRzIG1lc3NhZ2UgdG8gbG9nIGlmIGNhdGVnb3J5IG1hdGNoZXMgL2RlYnVnL3RyYWNlZmlsdGVyIG9wdGlvbi4KLQkgKiAKLQkgKiBAcGFyYW0gbWVzc2FnZQotCSAqICAgICAgICAgICAgdGV4dCB0byBwcmludAotCSAqIEBwYXJhbSBjYXRlZ29yeQotCSAqICAgICAgICAgICAgY2F0ZWdvcnkgb2YgdGhlIG1lc3NhZ2UsIHRvIGJlIGNvbXBhcmVkIHdpdGgKLQkgKiAgICAgICAgICAgIC9kZWJ1Zy90cmFjZWZpbHRlcgotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgdm9pZCBfdHJhY2UoU3RyaW5nIGNhdGVnb3J5LCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlpZiAoaXNUcmFjaW5nKGNhdGVnb3J5KSkgewotCQkJbWVzc2FnZSA9IChtZXNzYWdlICE9IG51bGwpID8gbWVzc2FnZSA6ICJudWxsIjsgLy8kTk9OLU5MUy0xJAotCQkJU3RhdHVzIHN0YXR1c09iaiA9IG5ldyBTdGF0dXMoSVN0YXR1cy5PSywgUExVR0lOX0lELCBJU3RhdHVzLk9LLCBtZXNzYWdlLCBleGNlcHRpb24pOwotCQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShQTFVHSU5fSUQpOwotCQkJaWYgKGJ1bmRsZSAhPSBudWxsKSAKLQkJCQlQbGF0Zm9ybS5nZXRMb2coYnVuZGxlKS5sb2coc3RhdHVzT2JqKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgcGxhdGZvcm0gaXMgZGVidWdnaW5nCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzRGVidWdnaW5nKCkgewotCQlyZXR1cm4gUGxhdGZvcm0uaW5EZWJ1Z01vZGUoKTsKLQl9Ci0KLQkvKioKLQkgKiBEZXRlcm1pbmVzIGlmIGN1cnJlbnRseSB0cmFjaW5nIGEgY2F0ZWdvcnkKLQkgKiAKLQkgKiBAcGFyYW0gY2F0ZWdvcnkKLQkgKiBAcmV0dXJuIHRydWUgaWYgdHJhY2luZyBjYXRlZ29yeSwgZmFsc2Ugb3RoZXJ3aXNlCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzVHJhY2luZyhTdHJpbmcgY2F0ZWdvcnkpIHsKLQkJaWYgKCFpc0RlYnVnZ2luZygpKQotCQkJcmV0dXJuIGZhbHNlOwotCi0JCVN0cmluZyB0cmFjZUZpbHRlciA9IFBsYXRmb3JtLmdldERlYnVnT3B0aW9uKFBMVUdJTl9JRCArIFRSQUNFRklMVEVSX0xPQ0FUSU9OKTsKLQkJaWYgKHRyYWNlRmlsdGVyICE9IG51bGwpIHsKLQkJCVN0cmluZ1Rva2VuaXplciB0b2tlbml6ZXIgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHRyYWNlRmlsdGVyLCAiLCIpOyAvLyROT04tTkxTLTEkCi0JCQl3aGlsZSAodG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSkgewotCQkJCVN0cmluZyBjYXQgPSB0b2tlbml6ZXIubmV4dFRva2VuKCkudHJpbSgpOwotCQkJCWlmIChjYXRlZ29yeS5lcXVhbHMoY2F0KSkgewotCQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2coaW50IGxldmVsLCBTdHJpbmcgbWVzc2FnZSkgewotCQlfbG9nKGxldmVsLCBtZXNzYWdlLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nKGludCBsZXZlbCwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX2xvZyhsZXZlbCwgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nRXhjZXB0aW9uKFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV9sb2coRVJST1IsIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZ0V4Y2VwdGlvbihUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV9sb2coRVJST1IsIGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCksIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHRyYWNlRXhjZXB0aW9uKFN0cmluZyBjYXRlZ29yeSwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX3RyYWNlKGNhdGVnb3J5LCBtZXNzYWdlLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCB0cmFjZUV4Y2VwdGlvbihTdHJpbmcgY2F0ZWdvcnksIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX3RyYWNlKGNhdGVnb3J5LCBleGNlcHRpb24uZ2V0TWVzc2FnZSgpLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCB0cmFjZShTdHJpbmcgY2F0ZWdvcnksIFN0cmluZyBtZXNzYWdlKSB7Ci0JCV90cmFjZShjYXRlZ29yeSwgbWVzc2FnZSwgbnVsbCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9SZWFkT25seVRvZ2dsZURlbGVnYXRlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL3VpL3Rlc3RzL1JlYWRPbmx5VG9nZ2xlRGVsZWdhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGYzOTRlNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL3VpL3Rlc3RzL1JlYWRPbmx5VG9nZ2xlRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVRleHRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JBY3Rpb25EZWxlZ2F0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLklUZXh0RWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBSZWFkT25seVRvZ2dsZURlbGVnYXRlIGV4dGVuZHMgQWN0aW9uIGltcGxlbWVudHMgSUVkaXRvckFjdGlvbkRlbGVnYXRlIHsKLQotCUlTZWxlY3Rpb24gZlNlbGVjdGlvbiA9IG51bGw7Ci0JSUVkaXRvclBhcnQgZkVkaXRvciA9IG51bGw7Ci0KLQlwdWJsaWMgUmVhZE9ubHlUb2dnbGVEZWxlZ2F0ZSgpIHsKLQl9Ci0KLQlwdWJsaWMgUmVhZE9ubHlUb2dnbGVEZWxlZ2F0ZShTdHJpbmcgdGV4dCkgewotCQlzdXBlcih0ZXh0KTsKLQl9Ci0KLQlwdWJsaWMgUmVhZE9ubHlUb2dnbGVEZWxlZ2F0ZShTdHJpbmcgdGV4dCwgSW1hZ2VEZXNjcmlwdG9yIGltYWdlKSB7Ci0JCXN1cGVyKHRleHQsIGltYWdlKTsKLQl9Ci0KLQlwdWJsaWMgUmVhZE9ubHlUb2dnbGVEZWxlZ2F0ZShTdHJpbmcgdGV4dCwgaW50IHN0eWxlKSB7Ci0JCXN1cGVyKHRleHQsIHN0eWxlKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRBY3RpdmVFZGl0b3IoSUFjdGlvbiBhY3Rpb24sIElFZGl0b3JQYXJ0IHRhcmdldEVkaXRvcikgewotCQlmRWRpdG9yID0gdGFyZ2V0RWRpdG9yOwotCX0KLQotCXB1YmxpYyB2b2lkIHJ1bihJQWN0aW9uIGFjdGlvbikgewotCQlJVGV4dEVkaXRvciBlZGl0b3IgPSAoSVRleHRFZGl0b3IpIGZFZGl0b3IuZ2V0QWRhcHRlcihJVGV4dEVkaXRvci5jbGFzcyk7Ci0JCUlEb2N1bWVudCBkb2N1bWVudCA9IGVkaXRvci5nZXREb2N1bWVudFByb3ZpZGVyKCkuZ2V0RG9jdW1lbnQoZWRpdG9yLmdldEVkaXRvcklucHV0KCkpOwotCQlpZiAoZG9jdW1lbnQgaW5zdGFuY2VvZiBJU3RydWN0dXJlZERvY3VtZW50KSB7Ci0JCQlJVGV4dFNlbGVjdGlvbiBzZWxlY3Rpb24gPSAoSVRleHRTZWxlY3Rpb24pIGZTZWxlY3Rpb247Ci0JCQkoKElTdHJ1Y3R1cmVkRG9jdW1lbnQpIGRvY3VtZW50KS5tYWtlUmVhZE9ubHkoc2VsZWN0aW9uLmdldE9mZnNldCgpLCBzZWxlY3Rpb24uZ2V0TGVuZ3RoKCkpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChJQWN0aW9uIGFjdGlvbiwgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKLQkJZlNlbGVjdGlvbiA9IHNlbGVjdGlvbjsKLQkJc2V0RW5hYmxlZCghc2VsZWN0aW9uLmlzRW1wdHkoKSk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL3VpL3Rlc3RzL1NTRVRlc3RzUGx1Z2luLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL3VpL3Rlc3RzL1NTRVRlc3RzUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjNGQ5MWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9TU0VUZXN0c1BsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzOwotCi1pbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotCi0vKioKLSAqIFRoZSBtYWluIHBsdWdpbiBjbGFzcyB0byBiZSB1c2VkIGluIHRoZSBkZXNrdG9wLgotICovCi1wdWJsaWMgY2xhc3MgU1NFVGVzdHNQbHVnaW4gZXh0ZW5kcyBQbHVnaW4gewotCS8vVGhlIHNoYXJlZCBpbnN0YW5jZS4KLQlwcml2YXRlIHN0YXRpYyBTU0VUZXN0c1BsdWdpbiBwbHVnaW47Ci0JLy9SZXNvdXJjZSBidW5kbGUuCi0JcHJpdmF0ZSBSZXNvdXJjZUJ1bmRsZSByZXNvdXJjZUJ1bmRsZTsKLQotCS8qKgotCSAqIFRoZSBjb25zdHJ1Y3Rvci4KLQkgKi8KLQlwdWJsaWMgU1NFVGVzdHNQbHVnaW4oKSB7Ci0JCXN1cGVyKCk7Ci0JCXBsdWdpbiA9IHRoaXM7Ci0JCXRyeSB7Ci0JCQlyZXNvdXJjZUJ1bmRsZSA9IFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZSgib3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy5UZXN0c1BsdWdpblJlc291cmNlcyIpOwotCQl9IGNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24geCkgewotCQkJcmVzb3VyY2VCdW5kbGUgPSBudWxsOwotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU1NFVGVzdHNQbHVnaW4gZ2V0RGVmYXVsdCgpIHsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzdHJpbmcgZnJvbSB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLCBvciAna2V5JyBpZiBub3QKLQkgKiBmb3VuZC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRSZXNvdXJjZVN0cmluZyhTdHJpbmcga2V5KSB7Ci0JCVJlc291cmNlQnVuZGxlIGJ1bmRsZSA9IFNTRVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRSZXNvdXJjZUJ1bmRsZSgpOwotCQl0cnkgewotCQkJcmV0dXJuIChidW5kbGUgIT0gbnVsbCkgPyBidW5kbGUuZ2V0U3RyaW5nKGtleSkgOiBrZXk7Ci0JCX0gY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7Ci0JCQlyZXR1cm4ga2V5OwotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLAotCSAqLwotCXB1YmxpYyBSZXNvdXJjZUJ1bmRsZSBnZXRSZXNvdXJjZUJ1bmRsZSgpIHsKLQkJcmV0dXJuIHJlc291cmNlQnVuZGxlOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL3VpL3Rlc3RzL1NTRVVJVGVzdFN1aXRlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL3VpL3Rlc3RzL1NTRVVJVGVzdFN1aXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0Njc3MmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9TU0VVSVRlc3RTdWl0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHM7Ci0KLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlc3RzLkpGYWNlVGV4dFRlc3RTdWl0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLnZpZXdlci5UZXN0Vmlld2VyQ29uZmlndXJhdGlvbjsKLQotcHVibGljIGNsYXNzIFNTRVVJVGVzdFN1aXRlIGV4dGVuZHMgVGVzdFN1aXRlIHsKLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgU1NFVUlUZXN0U3VpdGUoKTsKLQl9Ci0KLQlwdWJsaWMgU1NFVUlUZXN0U3VpdGUoKSB7Ci0JCXN1cGVyKCJTU0UgVUkgVGVzdCBTdWl0ZSIpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVmVyaWZ5RWRpdG9yUGx1Z2luLmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShDb21tb25FZGl0b3JQcmVmZXJlbmNlc1Rlc3QuY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RWaWV3ZXJDb25maWd1cmF0aW9uLmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0U3RydWN0dXJlZFRleHRFZGl0b3IuY2xhc3MpKTsKLQkJYWRkVGVzdChKRmFjZVRleHRUZXN0U3VpdGUuc3VpdGUoKSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9UZXN0QWN0aW9uRGVsZWdhdGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvdWkvdGVzdHMvVGVzdEFjdGlvbkRlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhZWUzNzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9UZXN0QWN0aW9uRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLk1lc3NhZ2VEaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yQWN0aW9uRGVsZWdhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci0KLS8qKgotICogQGF1dGhvciBuc2QKLSAqIAotICovCi1wdWJsaWMgY2xhc3MgVGVzdEFjdGlvbkRlbGVnYXRlIGV4dGVuZHMgQWN0aW9uIGltcGxlbWVudHMgSUVkaXRvckFjdGlvbkRlbGVnYXRlIHsKLQlJRWRpdG9yUGFydCBlZGl0b3IgPSBudWxsOwotCUlBY3Rpb24gZmFjdGlvbiA9IG51bGw7Ci0KLQkvKioKLQkgKiAKLQkgKi8KLQlwdWJsaWMgVGVzdEFjdGlvbkRlbGVnYXRlKCkgewotCQlzdXBlcigpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSB0ZXh0Ci0JICovCi0JcHVibGljIFRlc3RBY3Rpb25EZWxlZ2F0ZShTdHJpbmcgdGV4dCkgewotCQlzdXBlcih0ZXh0KTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gdGV4dAotCSAqIEBwYXJhbSBpbWFnZQotCSAqLwotCXB1YmxpYyBUZXN0QWN0aW9uRGVsZWdhdGUoU3RyaW5nIHRleHQsIEltYWdlRGVzY3JpcHRvciBpbWFnZSkgewotCQlzdXBlcih0ZXh0LCBpbWFnZSk7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIHRleHQKLQkgKiBAcGFyYW0gc3R5bGUKLQkgKi8KLQlwdWJsaWMgVGVzdEFjdGlvbkRlbGVnYXRlKFN0cmluZyB0ZXh0LCBpbnQgc3R5bGUpIHsKLQkJc3VwZXIodGV4dCwgc3R5bGUpOwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSUVkaXRvckFjdGlvbkRlbGVnYXRlI3NldEFjdGl2ZUVkaXRvcihvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbiwKLQkgKiAgICAgIG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0KQotCSAqLwotCXB1YmxpYyB2b2lkIHNldEFjdGl2ZUVkaXRvcihJQWN0aW9uIHRhcmdldEFjdGlvbiwgSUVkaXRvclBhcnQgdGFyZ2V0RWRpdG9yKSB7Ci0JCWVkaXRvciA9IHRhcmdldEVkaXRvcjsKLQkJZmFjdGlvbiA9IHRhcmdldEFjdGlvbjsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklBY3Rpb25EZWxlZ2F0ZSNydW4ob3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb24pCi0JICovCi0JcHVibGljIHZvaWQgcnVuKElBY3Rpb24gcnVuQWN0aW9uKSB7Ci0JCU1lc3NhZ2VEaWFsb2cub3BlbkluZm9ybWF0aW9uKGVkaXRvci5nZXRFZGl0b3JTaXRlKCkuZ2V0U2hlbGwoKSwgIlRlc3QiLCAiQ29tcGxldGVkIik7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5JQWN0aW9uRGVsZWdhdGUjc2VsZWN0aW9uQ2hhbmdlZChvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbiwKLQkgKiAgICAgIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbikKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKElBY3Rpb24gYWN0aW9uLCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgewotCQkvLyBkbyBub3RoaW5nCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9UZXN0RW1haWxOb3RpY2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvdWkvdGVzdHMvVGVzdEVtYWlsTm90aWNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0YzNlZWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9UZXN0RW1haWxOb3RpY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzCi0gKiBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zCi0gKiBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQKLSAqIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0RW1haWxOb3RpY2UgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJpdmF0ZSBib29sZWFuIHNlbmROb3RpZmljYXRpb25zID0gZmFsc2U7Ci0KLQlwdWJsaWMgVGVzdEVtYWlsTm90aWNlKCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBUZXN0RW1haWxOb3RpY2UoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEVtYWlsKCkgewotCQlhc3NlcnRGYWxzZSgiU2ltcGxlIHRlc3QgdG8gYmUgc3VyZSBlbWFpbCBnZXRzIHNlbnQgb24gZmFpbHVyZSIsIHNlbmROb3RpZmljYXRpb25zKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9UZXN0TGluZVN0eWxlUHJvdmlkZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvdWkvdGVzdHMvVGVzdExpbmVTdHlsZVByb3ZpZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmODNmMGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9UZXN0TGluZVN0eWxlUHJvdmlkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUeXBlZFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uU3R5bGVSYW5nZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuQ29sb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlJHQjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwucHJvdmlzaW9uYWwuc3R5bGUuSGlnaGxpZ2h0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5wcm92aXNpb25hbC5zdHlsZS5MaW5lU3R5bGVQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnV0aWwuRWRpdG9yVXRpbGl0eTsKLQotcHVibGljIGNsYXNzIFRlc3RMaW5lU3R5bGVQcm92aWRlciBpbXBsZW1lbnRzIExpbmVTdHlsZVByb3ZpZGVyIHsKLQotCUNvbG9yIGZvcmVncm91bmQgPSBudWxsOwotCi0JLyoqCi0JICogCi0JICovCi0JcHVibGljIFRlc3RMaW5lU3R5bGVQcm92aWRlcigpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5zc2UudWkuc3R5bGUuTGluZVN0eWxlUHJvdmlkZXIjaW5pdChvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGV4dC5JU3RydWN0dXJlZERvY3VtZW50LAotCSAqICAgICAgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5zdHlsZS5IaWdobGlnaHRlcikKLQkgKi8KLQlwdWJsaWMgdm9pZCBpbml0KElTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQsIEhpZ2hsaWdodGVyIGhpZ2hsaWdodGVyKSB7Ci0JCS8vIG5vdGhpbmcgdG8gaW5pdAotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5zdHlsZS5MaW5lU3R5bGVQcm92aWRlciNwcmVwYXJlUmVnaW9ucyhvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUeXBlZFJlZ2lvbiwKLQkgKiAgICAgIGludCwgaW50LCBqYXZhLnV0aWwuQ29sbGVjdGlvbikKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBwcmVwYXJlUmVnaW9ucyhJVHlwZWRSZWdpb24gY3VycmVudFJlZ2lvbiwgaW50IHN0YXJ0LCBpbnQgbGVuZ3RoLCBDb2xsZWN0aW9uIHN0eWxlUmFuZ2VzKSB7Ci0JCS8vIG1ha2UgZXZlcnl0aGluZyBib2xkIGdyZXkKLQkJaWYgKGZvcmVncm91bmQgPT0gbnVsbCkKLQkJCWZvcmVncm91bmQgPSBFZGl0b3JVdGlsaXR5LmdldENvbG9yKG5ldyBSR0IoMTI3LCAxMjcsIDEyNykpOwotCQlzdHlsZVJhbmdlcy5hZGQobmV3IFN0eWxlUmFuZ2Uoc3RhcnQsIGxlbmd0aCwgZm9yZWdyb3VuZCwgbnVsbCwgU1dULkJPTEQpKTsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnN0eWxlLkxpbmVTdHlsZVByb3ZpZGVyI3JlbGVhc2UoKQotCSAqLwotCXB1YmxpYyB2b2lkIHJlbGVhc2UoKSB7Ci0JCS8vIG5vdGhpbmcgdG8gcmVsZWFzZQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9UZXN0U3RydWN0dXJlZFRleHRFZGl0b3IuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvdWkvdGVzdHMvVGVzdFN0cnVjdHVyZWRUZXh0RWRpdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzZGVmNWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9UZXN0U3RydWN0dXJlZFRleHRFZGl0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMwNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0czsKLQotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmZpbGVidWZmZXJzLkZpbGVCdWZmZXJzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuZmlsZWJ1ZmZlcnMuSVRleHRGaWxlQnVmZmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuZmlsZWJ1ZmZlcnMuSVRleHRGaWxlQnVmZmVyTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmZpbGVidWZmZXJzLkxvY2F0aW9uS2luZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5qb2JzLkpvYjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JUGFnZUxheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaWRlLklERTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LkZpbGVFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LklTaG93SW5UYXJnZXRMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuU3RydWN0dXJlZFRleHRFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5TU0VVSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLlN0cnVjdHVyZWRUZXh0Vmlld2VyOwotCi1wdWJsaWMgY2xhc3MgVGVzdFN0cnVjdHVyZWRUZXh0RWRpdG9yIGV4dGVuZHMgVGVzdENhc2UgewotCXByaXZhdGUgZmluYWwgU3RyaW5nIFBST0pFQ1RfTkFNRSA9ICJUZXN0U3RydWN0dXJlZFRleHRFZGl0b3IiOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIEZJTEVfTkFNRSA9ICJ0ZXN0U3RydWN0dXJlZFRleHRFZGl0b3IueG1sIjsKLQotCXByaXZhdGUgc3RhdGljIFN0cnVjdHVyZWRUZXh0RWRpdG9yIGZFZGl0b3I7Ci0JcHJpdmF0ZSBzdGF0aWMgSUZpbGUgZkZpbGU7Ci0JcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBmSXNTZXR1cCA9IGZhbHNlOwotCi0JcHVibGljIFRlc3RTdHJ1Y3R1cmVkVGV4dEVkaXRvcigpIHsKLQkJc3VwZXIoIlRlc3RTdHJ1Y3R1cmVkVGV4dEVkaXRvciIpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWlmICghZklzU2V0dXApIHsKLQkJCS8vIGNyZWF0ZSBwcm9qZWN0Ci0JCQljcmVhdGVQcm9qZWN0KFBST0pFQ1RfTkFNRSk7Ci0JCQlmRmlsZSA9IGdldE9yQ3JlYXRlRmlsZShQUk9KRUNUX05BTUUgKyAiLyIgKyBGSUxFX05BTUUpOwotCQkJZklzU2V0dXAgPSB0cnVlOwotCQl9Ci0KLQkJaWYgKGZJc1NldHVwICYmIGZFZGl0b3IgPT0gbnVsbCkgewotCQkJSVdvcmtiZW5jaFdpbmRvdyB3b3JrYmVuY2hXaW5kb3cgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpOwotCQkJSVdvcmtiZW5jaFBhZ2UgcGFnZSA9IHdvcmtiZW5jaFdpbmRvdy5nZXRBY3RpdmVQYWdlKCk7Ci0JCQlJRWRpdG9ySW5wdXQgaW5wdXQgPSBuZXcgRmlsZUVkaXRvcklucHV0KGZGaWxlKTsKLQkJCS8qCi0JCQkgKiBUaGlzIHNob3VsZCB0YWtlIGNhcmUgb2YgdGVzdGluZyBpbml0LCBjcmVhdGVQYXJ0Q29udHJvbCwKLQkJCSAqIGJlZ2luQmFja2dyb3VuZE9wZXJhdGlvbiwgZW5kQmFja2dyb3VuZE9wZXJhdGlvbiBtZXRob2RzCi0JCQkgKi8KLQkJCUlFZGl0b3JQYXJ0IHBhcnQgPSBwYWdlLm9wZW5FZGl0b3IoaW5wdXQsICJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLlN0cnVjdHVyZWRUZXh0RWRpdG9yIiwgdHJ1ZSk7Ci0JCQlpZiAocGFydCBpbnN0YW5jZW9mIFN0cnVjdHVyZWRUZXh0RWRpdG9yKQotCQkJCWZFZGl0b3IgPSAoU3RydWN0dXJlZFRleHRFZGl0b3IpIHBhcnQ7Ci0JCQllbHNlCi0JCQkJYXNzZXJ0VHJ1ZSgiVW5hYmxlIHRvIG9wZW4gc3RydWN0dXJlZCB0ZXh0IGVkaXRvciIsIGZhbHNlKTsKLQkJfQotCX0KLQotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWlmIChmRWRpdG9yICE9IG51bGwpIHsKLQkJCS8qCi0JCQkgKiBUaGlzIHNob3VsZCB0YWtlIGNhcmUgb2YgdGVzdGluZyBjbG9zZSBhbmQgZGlzcG9zZSBtZXRob2RzCi0JCQkgKi8KLQkJCWZFZGl0b3IuY2xvc2UoZmFsc2UpOwotCQkJYXNzZXJ0VHJ1ZSgiVW5hYmxlIHRvIGNsb3NlIGVkaXRvciIsIHRydWUpOwotCQkJZkVkaXRvciA9IG51bGw7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgY3JlYXRlUHJvamVjdChTdHJpbmcgcHJvak5hbWUpIHsKLQkJSVByb2plY3REZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5uZXdQcm9qZWN0RGVzY3JpcHRpb24ocHJvak5hbWUpOwotCi0JCUlQcm9qZWN0IHByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QocHJvak5hbWUpOwotCQl0cnkgewotCQkJcHJvamVjdC5jcmVhdGUoZGVzY3JpcHRpb24sIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJcHJvamVjdC5vcGVuKG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQl9Ci0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgSUZpbGUgZ2V0T3JDcmVhdGVGaWxlKFN0cmluZyBmaWxlUGF0aCkgewotCQlJRmlsZSBibGFua0pzcEZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgoZmlsZVBhdGgpKTsKLQkJaWYgKGJsYW5rSnNwRmlsZSAhPSBudWxsICYmICFibGFua0pzcEZpbGUuZXhpc3RzKCkpIHsKLQkJCXRyeSB7Ci0JCQkJYmxhbmtKc3BGaWxlLmNyZWF0ZShuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0obmV3IGJ5dGVbMF0pLCB0cnVlLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCX0KLQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfQotCQl9Ci0JCXJldHVybiBibGFua0pzcEZpbGU7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdERvU2F2aW5nKCkgewotCQlmRWRpdG9yLmRvUmV2ZXJ0VG9TYXZlZCgpOwotCQlhc3NlcnRUcnVlKCJVbmFibGUgdG8gcmV2ZXJ0IHRvIHNhdmVkIiwgdHJ1ZSk7Ci0JCWZFZGl0b3IuZG9TYXZlKG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQlhc3NlcnRUcnVlKCJVbmFibGUgdG8gc2F2ZSIsIHRydWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RFZGl0b3JDb250ZXh0TWVudUFib3V0VG9TaG93KCkgewotCQlJTWVudU1hbmFnZXIgbWVudSA9IG5ldyBNZW51TWFuYWdlcigpOwotCQlmRWRpdG9yLmVkaXRvckNvbnRleHRNZW51QWJvdXRUb1Nob3cobWVudSk7Ci0JCWFzc2VydFRydWUoIlVuYWJsZSB0byBwcmVwYXJlIGZvciBjb250ZXh0IG1lbnUgYWJvdXQgdG8gc2hvdyIsIHRydWUpOwotCQltZW51LmRpc3Bvc2UoKTsKLQkJbWVudSA9IG51bGw7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldEFkYXB0ZXIoKSB7Ci0JCU9iamVjdCBhZGFwdGVyID0gZkVkaXRvci5nZXRBZGFwdGVyKElTaG93SW5UYXJnZXRMaXN0LmNsYXNzKTsKLQkJYXNzZXJ0VHJ1ZSgiR2V0IGFkYXB0ZXIgZm9yIHNob3cgaW4gdGFyZ2V0IGZhaWxlZCIsIGFkYXB0ZXIgaW5zdGFuY2VvZiBJU2hvd0luVGFyZ2V0TGlzdCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldFNldEVkaXRvclBhcnQoKSB7Ci0JCWZFZGl0b3Iuc2V0RWRpdG9yUGFydChudWxsKTsKLQkJYXNzZXJ0VHJ1ZSgiVW5hYmxlIHRvIHNldCBlZGl0b3IgcGFydCIsIHRydWUpOwotCQlJRWRpdG9yUGFydCBwYXJ0ID0gZkVkaXRvci5nZXRFZGl0b3JQYXJ0KCk7Ci0JCWFzc2VydFRydWUoIkRpZCBub3QgZ2V0IGV4cGVjdGVkIGVkaXRvciBwYXJ0IiwgcGFydCBpbnN0YW5jZW9mIFN0cnVjdHVyZWRUZXh0RWRpdG9yKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SW5pdGlhbGl6ZURvY3VtZW50UHJvdmlkZXIoKSB7Ci0JCWZFZGl0b3IuaW5pdGlhbGl6ZURvY3VtZW50UHJvdmlkZXIobnVsbCk7Ci0JCWFzc2VydFRydWUoIlVuYWJsZSB0byBpbml0aWFsaXplIGRvY3VtZW50IHByb3ZpZGVyIiwgdHJ1ZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldE9yaWVudGF0aW9uKCkgewotCQlpbnQgb3IgPSBmRWRpdG9yLmdldE9yaWVudGF0aW9uKCk7Ci0JCWFzc2VydEVxdWFscyhTV1QuTEVGVF9UT19SSUdIVCwgb3IpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRTZWxlY3Rpb25Qcm92aWRlcigpIHsKLQkJSVNlbGVjdGlvblByb3ZpZGVyIHByb3ZpZGVyID0gZkVkaXRvci5nZXRTZWxlY3Rpb25Qcm92aWRlcigpOwotCQlhc3NlcnROb3ROdWxsKCJFZGl0b3IncyBzZWxlY3Rpb24gcHJvdmlkZXIgd2FzIG51bGwiLCBwcm92aWRlcik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldFRleHRWaWV3ZXIoKSB7Ci0JCVN0cnVjdHVyZWRUZXh0Vmlld2VyIHZpZXdlciA9IGZFZGl0b3IuZ2V0VGV4dFZpZXdlcigpOwotCQlhc3NlcnROb3ROdWxsKCJFZGl0b3IncyB0ZXh0IHZpZXdlciB3YXMgbnVsbCIsIHZpZXdlcik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFJlbWVtYmVyUmVzdG9yZVNlbGVjdGlvbigpIHsKLQkJZkVkaXRvci5yZW1lbWJlclNlbGVjdGlvbigpOwotCQlhc3NlcnRUcnVlKCJVbmFibGUgdG8gcmVtZW1iZXIgZWRpdG9yIHNlbGVjdGlvbiIsIHRydWUpOwotCQlmRWRpdG9yLnJlc3RvcmVTZWxlY3Rpb24oKTsKLQkJYXNzZXJ0VHJ1ZSgiVW5hYmxlIHRvIHJlc3RvcmUgZWRpdG9yIHNlbGVjdGlvbiIsIHRydWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTYWZlbHlTYW5pdHlDaGVjaygpIHsKLQkJZkVkaXRvci5zYWZlbHlTYW5pdHlDaGVja1N0YXRlKGZFZGl0b3IuZ2V0RWRpdG9ySW5wdXQoKSk7Ci0JCWFzc2VydFRydWUoIlVuYWJsZSB0byBzYWZlbHkgc2FuaXR5IGNoZWNrIGVkaXRvciBzdGF0ZSIsIHRydWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTaG93QnVzeSgpIHsKLQkJZkVkaXRvci5zaG93QnVzeShmYWxzZSk7Ci0JCWFzc2VydFRydWUoIlVuYWJsZSB0byBzaG93IGVkaXRvciBpcyBidXN5IiwgdHJ1ZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFVwZGF0ZSgpIHsKLQkJZkVkaXRvci51cGRhdGUoKTsKLQkJYXNzZXJ0VHJ1ZSgiVW5hYmxlIHRvIHVwZGF0ZSBlZGl0b3IiLCB0cnVlKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFNpbmdsZU5vblVJVGhyZWFkVXBkYXRlc1RvRWRpdG9yRG9jdW1lbnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJSUZpbGUgZmlsZSA9IGdldE9yQ3JlYXRlRmlsZShQUk9KRUNUX05BTUUgKyAiLyIgKyAidGVzdEJhY2tncm91bmRDaGFuZ2VzLnhtbCIpOwotCQlJVGV4dEZpbGVCdWZmZXJNYW5hZ2VyIHRleHRGaWxlQnVmZmVyTWFuYWdlciA9IEZpbGVCdWZmZXJzLmdldFRleHRGaWxlQnVmZmVyTWFuYWdlcigpOwotCQl0ZXh0RmlsZUJ1ZmZlck1hbmFnZXIuY29ubmVjdChmaWxlLmdldEZ1bGxQYXRoKCksIExvY2F0aW9uS2luZC5JRklMRSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0KLQkJSVRleHRGaWxlQnVmZmVyIHRleHRGaWxlQnVmZmVyID0gdGV4dEZpbGVCdWZmZXJNYW5hZ2VyLmdldFRleHRGaWxlQnVmZmVyKGZpbGUuZ2V0RnVsbFBhdGgoKSwgTG9jYXRpb25LaW5kLklGSUxFKTsKLQkJZmluYWwgSURvY3VtZW50IGRvY3VtZW50ID0gdGV4dEZpbGVCdWZmZXIuZ2V0RG9jdW1lbnQoKTsKLQkJZG9jdW1lbnQucmVwbGFjZSgwLCAwLCAiPD94bWwgZW5jb2Rpbmc9XCJVVEYtOFwiIHZlcnNpb249XCIxLjBcIj8+XG4iKTsKLQkJdGV4dEZpbGVCdWZmZXIuY29tbWl0KG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCksIHRydWUpOwotCi0JCVN0cmluZyB0ZXN0VGV4dCA9IGRvY3VtZW50LmdldCgpICsgIjxjLz48Yi8+PGEvPiI7Ci0JCWZpbmFsIGludCBlbmQgPSBkb2N1bWVudC5nZXRMZW5ndGgoKTsKLQkJSVdvcmtiZW5jaFBhZ2UgYWN0aXZlUGFnZSA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpOwotCQlJRWRpdG9yUGFydCBvcGVuZWRFZGl0b3IgPSBJREUub3BlbkVkaXRvcihhY3RpdmVQYWdlLCBmaWxlKTsKLQotCQlmaW5hbCBib29sZWFuIHN0YXRlW10gPSBuZXcgYm9vbGVhbltde2ZhbHNlfTsKLQkJSm9iIGNoYW5nZXIgPSBuZXcgSm9iKCJ0ZXh0IGNoYW5nZXIiKSB7Ci0JCQlwcm90ZWN0ZWQgSVN0YXR1cyBydW4oSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7Ci0JCQkJdHJ5IHsKLQkJCQkJZG9jdW1lbnQucmVwbGFjZShlbmQsIDAsICI8YS8+Iik7Ci0JCQkJCWRvY3VtZW50LnJlcGxhY2UoZW5kLCAwLCAiPGIvPiIpOwotCQkJCQlkb2N1bWVudC5yZXBsYWNlKGVuZCwgMCwgIjxjLz4iKTsKLQkJCQl9Ci0JCQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJCXJldHVybiBuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIFNTRVVJUGx1Z2luLklELCBlLmdldE1lc3NhZ2UoKSk7Ci0JCQkJfQotCQkJCWZpbmFsbHkgewotCQkJCQlzdGF0ZVswXSA9IHRydWU7Ci0JCQkJfQotCQkJCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCQkJfQotCQl9OwotCQljaGFuZ2VyLnNldFVzZXIodHJ1ZSk7Ci0JCWNoYW5nZXIuc2V0U3lzdGVtKGZhbHNlKTsKLQkJY2hhbmdlci5zY2hlZHVsZSgpOwotCi0JCXdoaWxlICghc3RhdGVbMF0pIHsKLQkJCW9wZW5lZEVkaXRvci5nZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkucmVhZEFuZERpc3BhdGNoKCk7Ci0JCX0KLQotCQlTdHJpbmcgZmluYWxUZXh0ID0gZG9jdW1lbnQuZ2V0KCk7Ci0JCXRleHRGaWxlQnVmZmVyLmNvbW1pdChuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpLCB0cnVlKTsKLQkJdGV4dEZpbGVCdWZmZXJNYW5hZ2VyLmRpc2Nvbm5lY3QoZmlsZS5nZXRGdWxsUGF0aCgpLCBMb2NhdGlvbktpbmQuSUZJTEUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQlhY3RpdmVQYWdlLmNsb3NlRWRpdG9yKG9wZW5lZEVkaXRvciwgZmFsc2UpOwotCQlhc3NlcnRFcXVhbHMoIk5vbi1VSSBjaGFuZ2VzIGRpZCBub3QgYXBwbHkiLCB0ZXN0VGV4dCwgZmluYWxUZXh0KTsKLQl9Ci0KLQkKLQkvKioKLQkgKiBOb3RlOiBUaGlzIHRlc3QgdGFrZXMgYSB3aGlsZSB0byBydW4sIGJ1dCBpdCdzIHRlc3Rpbmcgc2NhbGFiaWxpdHkgYWZ0ZXIgYWxsLgotCSAqIEB0aHJvd3MgRXhjZXB0aW9uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE1hbnlOb25VSVRocmVhZHNVcGRhdGluZ0VkaXRvckRvY3VtZW50KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWZpbmFsIGludCBudW1iZXJPZkpvYnMgPSAzMDsKLQkJLyoqCi0JCSAqIDE2IG1pbnV0ZSB0aW1lb3V0IGJlZm9yZSB3ZSBzdG9wIHdhaXRpbmcgZm9yIHRoZSBjaGFuZ2Ugam9icyB0bwotCQkgKiBjb21wbGV0ZQotCQkgKi8KLQkJbG9uZyB0aW1lb3V0ID0gOTYwMDAwOwotCi0JCWxvbmcgc3RhcnRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCUlGaWxlIGZpbGUgPSBnZXRPckNyZWF0ZUZpbGUoUFJPSkVDVF9OQU1FICsgIi8iICsgInRlc3RNYW55QmFja2dyb3VuZENoYW5nZXMueG1sIik7Ci0JCUlUZXh0RmlsZUJ1ZmZlck1hbmFnZXIgdGV4dEZpbGVCdWZmZXJNYW5hZ2VyID0gRmlsZUJ1ZmZlcnMuZ2V0VGV4dEZpbGVCdWZmZXJNYW5hZ2VyKCk7Ci0JCXRleHRGaWxlQnVmZmVyTWFuYWdlci5jb25uZWN0KGZpbGUuZ2V0RnVsbFBhdGgoKSwgTG9jYXRpb25LaW5kLklGSUxFLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQotCQlJVGV4dEZpbGVCdWZmZXIgdGV4dEZpbGVCdWZmZXIgPSB0ZXh0RmlsZUJ1ZmZlck1hbmFnZXIuZ2V0VGV4dEZpbGVCdWZmZXIoZmlsZS5nZXRGdWxsUGF0aCgpLCBMb2NhdGlvbktpbmQuSUZJTEUpOwotCQlmaW5hbCBJRG9jdW1lbnQgZG9jdW1lbnQgPSB0ZXh0RmlsZUJ1ZmZlci5nZXREb2N1bWVudCgpOwotCQlkb2N1bWVudC5yZXBsYWNlKDAsIDAsICI8P3htbCBlbmNvZGluZz1cIlVURi04XCIgdmVyc2lvbj1cIjEuMFwiPz5cbiIpOwotCQl0ZXh0RmlsZUJ1ZmZlci5jb21taXQobmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSwgdHJ1ZSk7Ci0KLQkJZmluYWwgaW50IGluc2VydGlvblBvaW50ID0gZG9jdW1lbnQuZ2V0TGVuZ3RoKCk7Ci0JCS8vIG51bWJlck9mSm9icyBKb2JzLCBpbnNlcnRpbmcgMjYgdGFncywgZWFjaCA0IGNoYXJhY3RlcnMgbG9uZwotCQlpbnQgdGVzdExlbmd0aCA9IGluc2VydGlvblBvaW50ICsgbnVtYmVyT2ZKb2JzICogNCAqIDI2OwotCQlJV29ya2JlbmNoUGFnZSBhY3RpdmVQYWdlID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCk7Ci0JCWFjdGl2ZVBhZ2Uuc2hvd1ZpZXcoSVBhZ2VMYXlvdXQuSURfUFJPR1JFU1NfVklFVyk7Ci0JCUlFZGl0b3JQYXJ0IG9wZW5lZEVkaXRvciA9IElERS5vcGVuRWRpdG9yKGFjdGl2ZVBhZ2UsIGZpbGUpOwotCi0JCWZpbmFsIGludCBmaW5pc2hlZFtdID0gbmV3IGludFtde251bWJlck9mSm9ic307Ci0JCUpvYiBjaGFuZ2Vyc1tdID0gbmV3IEpvYltudW1iZXJPZkpvYnNdOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGNoYW5nZXJzLmxlbmd0aDsgaSsrKSB7Ci0JCQljaGFuZ2Vyc1tpXSA9IG5ldyBKb2IoIlRleHQgQ2hhbmdlciAiICsgSW50ZWdlci50b1N0cmluZyhpKSkgewotCQkJCXByb3RlY3RlZCBJU3RhdHVzIHJ1bihJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKLQkJCQkJdHJ5IHsKLQkJCQkJCWNoYXIgbmFtZXNbXSA9ICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiIudG9DaGFyQXJyYXkoKTsKLQkJCQkJCWZvciAoaW50IGogPSAwOyBqIDwgbmFtZXMubGVuZ3RoOyBqKyspIHsKLQkJCQkJCQlkb2N1bWVudC5yZXBsYWNlKGluc2VydGlvblBvaW50ICsgNCAqIGosIDAsICI8IiArIG5hbWVzW2pdICsgIi8+Iik7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJCQlyZXR1cm4gbmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCBTU0VVSVBsdWdpbi5JRCwgZS5nZXRNZXNzYWdlKCkpOwotCQkJCQl9Ci0JCQkJCWZpbmFsbHkgewotCQkJCQkJZmluaXNoZWRbMF0tLTsKLQkJCQkJfQotCQkJCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQkJCQl9Ci0JCQl9OwotCQkJY2hhbmdlcnNbaV0uc2V0VXNlcih0cnVlKTsKLQkJCWNoYW5nZXJzW2ldLnNldFN5c3RlbShmYWxzZSk7Ci0JCQljaGFuZ2Vyc1tpXS5zY2hlZHVsZSgpOwotCQl9Ci0KLQkJbG9uZyBydW50aW1lID0gMDsKLQkJd2hpbGUgKGZpbmlzaGVkWzBdID4gMCAmJiAocnVudGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpKSAtIHN0YXJ0VGltZSA8IHRpbWVvdXQpIHsKLQkJCW9wZW5lZEVkaXRvci5nZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCkucmVhZEFuZERpc3BhdGNoKCk7Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSgiVGVzdCB0aW1lZCBvdXQiLCBydW50aW1lIC0gc3RhcnRUaW1lIDwgdGltZW91dCk7Ci0KLQkJaW50IGZpbmFsTGVuZ3RoID0gZG9jdW1lbnQuZ2V0TGVuZ3RoKCk7Ci0JCXRleHRGaWxlQnVmZmVyLmNvbW1pdChuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpLCB0cnVlKTsKLQkJdGV4dEZpbGVCdWZmZXJNYW5hZ2VyLmRpc2Nvbm5lY3QoZmlsZS5nZXRGdWxsUGF0aCgpLCBMb2NhdGlvbktpbmQuSUZJTEUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQlhY3RpdmVQYWdlLmNsb3NlRWRpdG9yKG9wZW5lZEVkaXRvciwgZmFsc2UpOwotCQlhc3NlcnRFcXVhbHMoIlNvbWUgbm9uLVVJIGNoYW5nZXMgZGlkIG5vdCBhcHBseSIsIHRlc3RMZW5ndGgsIGZpbmFsTGVuZ3RoKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL3VpL3Rlc3RzL1ZlcmlmeUVkaXRvclBsdWdpbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9WZXJpZnlFZGl0b3JQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU5ODFhNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL3VpL3Rlc3RzL1ZlcmlmeUVkaXRvclBsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkNvbG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5SR0I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLlNTRVVJUGx1Z2luOwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcHVibGljIGNsYXNzIFZlcmlmeUVkaXRvclBsdWdpbiBleHRlbmRzIFRlc3RDYXNlIHsKLQotCUxpc3QgY29sb3JMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCi0JcHVibGljIHZvaWQgdGVzdFBsdWdpbkV4aXN0cygpIHsKLQkJUGx1Z2luIHBsdWdpbiA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlwbHVnaW4gPSBTU0VVSVBsdWdpbi5nZXREZWZhdWx0KCk7Ci0KLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCXBsdWdpbiA9IG51bGw7Ci0JCX0KLQkJYXNzZXJ0Tm90TnVsbCgic3NlIGVkaXRvciBwbHVnaW4gY291bGQgbm90IGJlIGluc3RhbnRpYXRlZCIsIHBsdWdpbik7Ci0KLQl9Ci0KLQkvKioKLQkgKiBUaGUgcHVycG9zZSBvZiB0aGlzIHRlc3QgaXMganVzdCB0byB0ZXN0IGlmIHdlIGNhbiBkaXJlY3RseSBjcmVhdGUgbG90cwotCSAqIG9mIFJCRyBjb2xvcnMsIGV2ZW4gaWYgZGlzcGxheSBzZXQgdG8gIjI1NiIgKG9uIExpbnV4KS4gQW5kLCBCVFcsIGl0Ci0JICogZG9lcyBub3QgZmFpbCBldmVuIHdpdGggMjU2IGNvbG9ycyBzZXQsIGF0IGxlYXN0IG9uIExpbnV4LCBpbiBkZXYuIGVudi4KLQkgKiBWYXJ5aW5nIGFsbCB0aHJlZSBSR0IgbnVtYmVycywgdGhvdWdoLCBpdCBpcyBlYXN5IHRvIHJ1biBvdXQgb2YgbWVtb3J5IQotCSAqIAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RDb2xvckhhbmRsZXMoKSB7Ci0JCURpc3BsYXkgZGlzcGxheSA9IERpc3BsYXkuZ2V0Q3VycmVudCgpOwotCQlpZiAoZGlzcGxheSA9PSBudWxsKQotCQkJZGlzcGxheSA9IERpc3BsYXkuZ2V0RGVmYXVsdCgpOwotCQlhc3NlcnROb3ROdWxsKCJkaXNwbGF5IGNvdWxkIG5vdCBiZSBpbnN0YW50aWF0ZWQiLCBkaXNwbGF5KTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCAyNTY7IGkrKykgewotCQkJZm9yIChpbnQgaiA9IDA7IGogPCAyNTY7IGorKykgewotCQkJCS8vIDI1NiBjdWJlZCBydW5zIG91dCBvZiBtZW1vcnkKLQkJCQkvLyBmb3IgKGludCBrID0gMDsgayA8IDI1NjsgaysrKSB7Ci0JCQkJY29sb3JMaXN0LmFkZChuZXcgQ29sb3IoZGlzcGxheSwgbmV3IFJHQihpLCBqLCA1MCkpKTsKLQkJCQkvLyB9Ci0KLQkJCX0KLQotCQl9Ci0JCS8vIGlmIHdlIGdldCB0aGlzIGZhciB3aXRob3V0IGVycm9yLCBhbGwgaXMgb2suCi0JCWFzc2VydFRydWUodHJ1ZSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy92aWV3ZXIvVGVzdFZpZXdlckNvbmZpZ3VyYXRpb24uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvdWkvdGVzdHMvdmlld2VyL1Rlc3RWaWV3ZXJDb25maWd1cmF0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhM2MxZjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy92aWV3ZXIvVGVzdFZpZXdlckNvbmZpZ3VyYXRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy52aWV3ZXI7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklBdXRvRWRpdFN0cmF0ZWd5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSUluZm9ybWF0aW9uQ29udHJvbENyZWF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVGV4dERvdWJsZUNsaWNrU3RyYXRlZ3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVW5kb01hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5jb250ZW50YXNzaXN0LklDb250ZW50QXNzaXN0YW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuZm9ybWF0dGVyLklDb250ZW50Rm9ybWF0dGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuaHlwZXJsaW5rLklIeXBlcmxpbmtEZXRlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0Lmh5cGVybGluay5JSHlwZXJsaW5rUHJlc2VudGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuaW5mb3JtYXRpb24uSUluZm9ybWF0aW9uUHJlc2VudGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQucHJlc2VudGF0aW9uLklQcmVzZW50YXRpb25SZWNvbmNpbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQucmVjb25jaWxlci5JUmVjb25jaWxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnNvdXJjZS5JQW5ub3RhdGlvbkhvdmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZFBhcnRpdGlvbmluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGV4dC5JU3RydWN0dXJlZFBhcnRpdGlvbnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5TdHJ1Y3R1cmVkVGV4dFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnByb3Zpc2lvbmFsLnN0eWxlLkxpbmVTdHlsZVByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMuTG9nZ2VyOwotCi1wdWJsaWMgY2xhc3MgVGVzdFZpZXdlckNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwcml2YXRlIFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbiBmQ29uZmlnID0gbnVsbDsKLQlwcml2YXRlIGJvb2xlYW4gZkRpc3BsYXlFeGlzdHMgPSB0cnVlOwotCXByaXZhdGUgU3RydWN0dXJlZFRleHRWaWV3ZXIgZlZpZXdlciA9IG51bGw7Ci0JcHJpdmF0ZSBib29sZWFuIGlzU2V0dXAgPSBmYWxzZTsKLQotCXB1YmxpYyBUZXN0Vmlld2VyQ29uZmlndXJhdGlvbigpIHsKLQkJc3VwZXIoIlRlc3RWaWV3ZXJDb25maWd1cmF0aW9uIik7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotCQlzdXBlci5zZXRVcCgpOwotCQlpZiAoIXRoaXMuaXNTZXR1cCkgewotCQkJc2V0VXBWaWV3ZXJDb25maWd1cmF0aW9uKCk7Ci0JCQl0aGlzLmlzU2V0dXAgPSB0cnVlOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHNldFVwVmlld2VyQ29uZmlndXJhdGlvbigpIHsKLQkJaWYgKERpc3BsYXkuZ2V0Q3VycmVudCgpICE9IG51bGwpIHsKLQotCQkJU2hlbGwgc2hlbGwgPSBudWxsOwotCQkJQ29tcG9zaXRlIHBhcmVudCA9IG51bGw7Ci0KLQkJCWlmIChQbGF0Zm9ybVVJLmlzV29ya2JlbmNoUnVubmluZygpKSB7Ci0JCQkJc2hlbGwgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldFNoZWxsKCk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlzaGVsbCA9IG5ldyBTaGVsbChEaXNwbGF5LmdldEN1cnJlbnQoKSk7Ci0JCQl9Ci0JCQlwYXJlbnQgPSBuZXcgQ29tcG9zaXRlKHNoZWxsLCBTV1QuTk9ORSk7Ci0KLQkJCS8vIGR1bW15IHZpZXdlcgotCQkJZlZpZXdlciA9IG5ldyBTdHJ1Y3R1cmVkVGV4dFZpZXdlcihwYXJlbnQsIG51bGwsIG51bGwsIGZhbHNlLCBTV1QuTk9ORSk7Ci0JCQlmQ29uZmlnID0gbmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbigpOwotCQl9Ci0JCWVsc2UgewotCQkJZkRpc3BsYXlFeGlzdHMgPSBmYWxzZTsKLQkJCUxvZ2dlci5sb2coTG9nZ2VyLklORk8sICJSZW1lbWJlciwgdmlld2VyIGNvbmZpZ3VyYXRpb24gdGVzdHMgYXJlIG5vdCBydW4gYmVjYXVzZSB3b3JrYmVuY2ggaXMgbm90IG9wZW4gKG5vcm1hbCBvbiBidWlsZCBtYWNoaW5lKSIpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldEFubm90YXRpb25Ib3ZlcigpIHsKLQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJSUFubm90YXRpb25Ib3ZlciBob3ZlciA9IGZDb25maWcuZ2V0QW5ub3RhdGlvbkhvdmVyKGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKCJBbm5vdGF0aW9uSG92ZXIgaXMgbnVsbCIsIGhvdmVyKTsKLQl9Ci0KLQkvKioKLQkgKiBOb3QgbmVjZXNzYXJ5Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldEF1dG9FZGl0U3RyYXRlZ2llcygpIHsKLQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJSUF1dG9FZGl0U3RyYXRlZ3lbXSBzdHJhdGVnaWVzID0gZkNvbmZpZy5nZXRBdXRvRWRpdFN0cmF0ZWdpZXMoZlZpZXdlciwgSVN0cnVjdHVyZWRQYXJ0aXRpb25zLkRFRkFVTFRfUEFSVElUSU9OKTsKLQkJYXNzZXJ0Tm90TnVsbChzdHJhdGVnaWVzKTsKLQkJYXNzZXJ0VHJ1ZSgidGhlcmUgYXJlIG5vIGF1dG8gZWRpdCBzdHJhdGVnaWVzIiwgc3RyYXRlZ2llcy5sZW5ndGggPiAwKTsKLQl9Ci0KLQkvKioKLQkgKiBOb3QgbmVjZXNzYXJ5Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldENvbmZpZ3VyZWRDb250ZW50VHlwZXMoKSB7Ci0KLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZiAoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCi0JCVN0cmluZ1tdIGNvbmZpZ3VyZWRDb250ZW50VHlwZXMgPSBmQ29uZmlnLmdldENvbmZpZ3VyZWRDb250ZW50VHlwZXMoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoY29uZmlndXJlZENvbnRlbnRUeXBlcyk7Ci0JCWFzc2VydFRydWUoY29uZmlndXJlZENvbnRlbnRUeXBlcy5sZW5ndGggPT0gMSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldENvbmZpZ3VyZWREb2N1bWVudFBhcnRpdGlvbmluZygpIHsKLQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJU3RyaW5nIHBhcnRpdGlvbmluZyA9IGZDb25maWcuZ2V0Q29uZmlndXJlZERvY3VtZW50UGFydGl0aW9uaW5nKGZWaWV3ZXIpOwotCQlhc3NlcnRFcXVhbHMoSVN0cnVjdHVyZWRQYXJ0aXRpb25pbmcuREVGQVVMVF9TVFJVQ1RVUkVEX1BBUlRJVElPTklORywgcGFydGl0aW9uaW5nKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0Q29uZmlndXJlZFRleHRIb3ZlclN0YXRlTWFza3MoKSB7Ci0KLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZiAoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCi0JCWludFtdIG1hc2tzID0gZkNvbmZpZy5nZXRDb25maWd1cmVkVGV4dEhvdmVyU3RhdGVNYXNrcyhmVmlld2VyLCBJU3RydWN0dXJlZFBhcnRpdGlvbnMuREVGQVVMVF9QQVJUSVRJT04pOwotCQlhc3NlcnRFcXVhbHMoMiwgbWFza3MubGVuZ3RoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0Q29udGVudEFzc2lzdGFudCgpIHsKLQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJSUNvbnRlbnRBc3Npc3RhbnQgY2EgPSBmQ29uZmlnLmdldENvbnRlbnRBc3Npc3RhbnQoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoInRoZXJlIGlzIG5vIGNvbnRlbnQgYXNzaXN0YW50IiwgY2EpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRDb250ZW50Rm9ybWF0dGVyKCkgewotCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYgKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQotCQlJQ29udGVudEZvcm1hdHRlciBjZiA9IGZDb25maWcuZ2V0Q29udGVudEZvcm1hdHRlcihmVmlld2VyKTsKLQkJYXNzZXJ0TnVsbCgidGhlcmUgaXMgYSBjb250ZW50IGZvcm1hdHRlciIsIGNmKTsKLQl9Ci0KLQkvKioKLQkgKiBOb3QgbmVjZXNzYXJ5Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldERvdWJsZUNsaWNrU3RyYXRlZ3koKSB7Ci0KLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZiAoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCi0JCVN0cmluZ1tdIGNvbnRlbnRUeXBlcyA9IGZDb25maWcuZ2V0Q29uZmlndXJlZENvbnRlbnRUeXBlcyhmVmlld2VyKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjb250ZW50VHlwZXMubGVuZ3RoOyBpKyspIHsKLQkJCUlUZXh0RG91YmxlQ2xpY2tTdHJhdGVneSBzdHJhdGVneSA9IGZDb25maWcuZ2V0RG91YmxlQ2xpY2tTdHJhdGVneShmVmlld2VyLCBjb250ZW50VHlwZXNbaV0pOwotCQkJaWYgKHN0cmF0ZWd5ICE9IG51bGwpIHsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSgidGhlcmUgYXJlIG5vIGNvbmZpZ3VyZWQgZG91YmxlIGNsaWNrIHN0cmF0ZWdpZXMiLCBmYWxzZSk7Ci0JfQotCi0JLyoqCi0JICogTm90IG5lY2Vzc2FyeQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RHZXRIeXBlcmxpbmtEZXRlY3RvcnMoKSB7Ci0KLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZiAoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCi0JCUlIeXBlcmxpbmtEZXRlY3RvcltdIGRldGVjdG9ycyA9IGZDb25maWcuZ2V0SHlwZXJsaW5rRGV0ZWN0b3JzKGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKCJ0aGVyZSBhcmUgbm8gaHlwZXJsaW5rIGRldGVjdG9ycyIsIGRldGVjdG9ycyk7Ci0JCWFzc2VydFRydWUoInRoZXJlIGFyZSBubyBoeXBlcmxpbmsgZGV0ZWN0b3JzIiwgZGV0ZWN0b3JzLmxlbmd0aCA+IDApOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRIeXBlcmxpbmtQcmVzZW50ZXIoKSB7Ci0KLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZiAoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCi0JCUlIeXBlcmxpbmtQcmVzZW50ZXIgcHJlc2VudGVyID0gZkNvbmZpZy5nZXRIeXBlcmxpbmtQcmVzZW50ZXIoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoImh5cGVybGluayBwcmVzZW50ZXIgc2hvdWxkbid0IGJlIG51bGwiLCBwcmVzZW50ZXIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRJbmZvcm1hdGlvbkNvbnRyb2xDcmVhdG9yKCkgewotCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYgKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQotCQlJSW5mb3JtYXRpb25Db250cm9sQ3JlYXRvciBpbmZvQ29udHJvbENyZWF0b3IgPSBmQ29uZmlnLmdldEluZm9ybWF0aW9uQ29udHJvbENyZWF0b3IoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoImluZm8gY29udHJvbCBjcmVhdG9yIHdhcyBudWxsIiwgaW5mb0NvbnRyb2xDcmVhdG9yKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0SW5mb3JtYXRpb25QcmVzZW50ZXIoKSB7Ci0KLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZiAoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCi0JCUlJbmZvcm1hdGlvblByZXNlbnRlciBwcmVzZW50ZXIgPSBmQ29uZmlnLmdldEluZm9ybWF0aW9uUHJlc2VudGVyKGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKCJJbmZvcm1hdGlvblByZXNlbnRlciB3YXMgbnVsbCIsIHByZXNlbnRlcik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldExpbmVTdHlsZVByb3ZpZGVycygpIHsKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZiAoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCi0JCS8vIHRoZXJlIHNob3VsZCBiZSBubyBsaW5lc3R5bGVwcm92aWRlcnMgZm9yIGRlZmF1bHQKLQkJU3RyaW5nW10gY29udGVudFR5cGVzID0gZkNvbmZpZy5nZXRDb25maWd1cmVkQ29udGVudFR5cGVzKGZWaWV3ZXIpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbnRlbnRUeXBlcy5sZW5ndGg7IGkrKykgewotCQkJTGluZVN0eWxlUHJvdmlkZXIgcHJvdmlkZXJzW10gPSBmQ29uZmlnLmdldExpbmVTdHlsZVByb3ZpZGVycyhmVmlld2VyLCBjb250ZW50VHlwZXNbaV0pOwotCQkJYXNzZXJ0TnVsbCgibGluZSBzdHlsZSBwcm92aWRlcnMgaXMgbm90IG51bGwiLCBwcm92aWRlcnMpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogTm90IG5lY2Vzc2FyeQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RHZXRPdmVydmlld1J1bGVyQW5ub3RhdGlvbkhvdmVyKCkgewotCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYgKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQotCQlJQW5ub3RhdGlvbkhvdmVyIGFubm90YXRpb25Ib3ZlciA9IGZDb25maWcuZ2V0T3ZlcnZpZXdSdWxlckFubm90YXRpb25Ib3ZlcihmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgiYW5ub3RhdGlvbiBob3ZlciB3YXMgbnVsbCIsIGFubm90YXRpb25Ib3Zlcik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldFByZXNlbnRhdGlvblJlY29uY2lsZXIoKSB7Ci0KLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZiAoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCi0JCUlQcmVzZW50YXRpb25SZWNvbmNpbGVyIHByZXNlbnRhdGlvblJlY29uY2lsZXIgPSBmQ29uZmlnLmdldFByZXNlbnRhdGlvblJlY29uY2lsZXIoZlZpZXdlcik7Ci0JCS8vIG91ciBkZWZhdWx0IHByZXNlbnRhdGlvbiByZWNvbmNpbGVyIGlzIG5vIGxvbmdlciBudWxsCi0JCWFzc2VydE5vdE51bGwoInByZXNlbnRhdGlvbiByZWNvbmNpbGVyIHdhcyBudWxsIiwgcHJlc2VudGF0aW9uUmVjb25jaWxlcik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldFJlY29uY2lsZXIoKSB7Ci0KLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZiAoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCi0JCUlSZWNvbmNpbGVyIHIgPSBmQ29uZmlnLmdldFJlY29uY2lsZXIoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoIlJlY29uY2lsZXIgd2FzIG51bGwiLCByKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0VW5kb01hbmFnZXIoKSB7Ci0KLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZiAoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCi0JCUlVbmRvTWFuYWdlciB1bmRvTWFuYWdlciA9IGZDb25maWcuZ2V0VW5kb01hbmFnZXIoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoInVuZG8gbWFuYWdlciB3YXMgbnVsbCIsIHVuZG9NYW5hZ2VyKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3Rlc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy90ZXN0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2U2NWVlMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3Rlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTE2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci0KLTxwcm9qZWN0Ci0gICAgbmFtZT0idGVzdHN1aXRlIgotICAgIGRlZmF1bHQ9InJ1biIKLSAgICBiYXNlZGlyPSIuIj4KLSAgICAKLSAgICA8IS0tIFRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyBzaG91bGQgYmUgcGFzc2VkIGludG8gdGhpcyBzY3JpcHQgLS0+Ci0gICAgPCEtLSAke2VjbGlwc2UtaG9tZX0gICAtLT4KLSAgICA8IS0tICR7YnVpbGREaXJlY3Rvcnl9ICAtLT4KLSAgICA8IS0tICR7YnVpbGRMYWJlbH0gICAgICAgIC0tPgotCi0gICAgPCEtLSBzaG91bGQgYmUgbGl0dGxlIG5lZWQgdG8gY2hhbmdlIHdoYXQncyBhYm92ZSAgLS0+Ci0KLQotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJwbHVnaW4tbmFtZSIKLSAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9ImNsYXNzbmFtZSIKLSAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMuU1NFVUlUZXN0U3VpdGUiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9InRlc3RUeXBlIgotICAgICAgICB2YWx1ZT0idWktdGVzdCIgLz4KLQotICAgIDwhLS0gc2hvdWxkIGJlIGxpdHRsZSBuZWVkIHRvIGNoYW5nZSB3aGF0J3MgYmVsb3cgLS0+Ci0KLSAgICA8ZWNobyBtZXNzYWdlPSJiYXNlZGlyOiAke2Jhc2VkaXJ9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImVjbGlwc2UtaG9tZTogJHtlY2xpcHNlLWhvbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImJ1aWxkRGlyZWN0b3J5OiAke2J1aWxkRGlyZWN0b3J5fSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJwbHVnaW4tbmFtZTogJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iY2xhc3NuYW1lOiAke2NsYXNzbmFtZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0idGVzdFR5cGUgJHt0ZXN0VHlwZX0iIC8+Ci0KLQotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJsaWJyYXJ5LWZpbGUiCi0gICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMS4wL2xpYnJhcnkueG1sIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJ3b3Jrc3BhY2UiCi0gICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vanVuaXR3b3Jrc3BhY2VzLyR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICAKLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGFsbCBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBmb3IgLS0+Ci0gICAgPCEtLSBhbGwgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcnVuLiBJbml0aWFsaXphdGlvbiBmb3IgaW5kaXZpZHVhbCB0ZXN0cyAtLT4KLSAgICA8IS0tIHNob3VsZCBiZSBkb25lIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgc3VpdGUgdGFyZ2V0LiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9ImluaXQiPgotICAgICAgICA8dHN0YW1wIC8+Ci0gICAgICAgIDxkZWxldGU+Ci0gICAgICAgICAgICA8ZmlsZXNldAotICAgICAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9IgotICAgICAgICAgICAgICAgIGluY2x1ZGVzPSIke3BsdWdpbi1uYW1lfS4qeG1sIiAvPgotICAgICAgICA8L2RlbGV0ZT4KLSAgICAgICAgPCEtLSBtYWtlIGRpcmVjdG9yeSwgaW4gY2FzZSBwYXRoIGRvZXNuJ3QgZXhpc3QgeWV0IC0tPgotICAgICAgICA8bWtkaXIgZGlyPSIke3dvcmtzcGFjZX0iIC8+Ci0gICAgICAgIDwhLS0gIGJ1dCBkZWxldGUgdG8gbWFrZSBzdXJlIGZyZXNoIGNvbnRlbnRzLS0+Ci0gICAgICAgIDxkZWxldGUKLSAgICAgICAgICAgIGRpcj0iJHt3b3Jrc3BhY2V9IgotICAgICAgICAgICAgcXVpZXQ9InRydWUiIC8+Ci0KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgZGVmaW5lcyB0aGUgdGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4gLS0+Ci0gICAgPHRhcmdldCBuYW1lPSJzdWl0ZSI+Ci0KLSAgICAgICAgPGFudAotICAgICAgICAgICAgdGFyZ2V0PSIke3Rlc3RUeXBlfSIKLSAgICAgICAgICAgIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLSAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImRhdGEtZGlyIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3dvcmtzcGFjZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJwbHVnaW4tbmFtZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJjbGFzc25hbWUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7Y2xhc3NuYW1lfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9InBsdWdpbi1wYXRoIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy8ke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgPC9hbnQ+Ci0KLSAgICAgICAgPGNvcHkKLSAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIKLSAgICAgICAgICAgIGZpbGU9IiR7d29ya3NwYWNlfS8ubWV0YWRhdGEvLmxvZyIKLSAgICAgICAgICAgIHRvZmlsZT0iJHtidWlsZERpcmVjdG9yeX0vJHtidWlsZExhYmVsfS90ZXN0UmVzdWx0cy9jb25zb2xlbG9ncy8ke3BsdWdpbi1uYW1lfS5jb25zb2xlbG9nLnR4dCIgLz4KLQotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBjb2RlIHRvIGNsZWFudXAgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgYWZ0ZXIgLS0+Ci0gICAgPCEtLSBhZnRlciBhbGwgb2YgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4uIFlvdSBjYW4gdXNlIHRoaXMgdGFyZ2V0IHRvIC0tPgotICAgIDwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9ImNsZWFudXAiPgotICAgICAgICA8IS0tIHVzdWFsbHkgbm8gbmVlZCB0byBkZWxldGUgd29ya3NwYWNlIHVudGlsIG5leHQgcnVuLCBhbmQgbGVhdmluZyBpdCBhbGxvd3MgaW5zcGVjdGlvbiAtLT4KLSAgICAgICAgPCEtLSA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIgLz4gLS0+Ci0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+Ci0gICAgPCEtLSBhZnRlciBhbGwgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4gc2hvdWxkIGdvIGhlcmUuIC0tPgotICAgIDx0YXJnZXQKLSAgICAgICAgbmFtZT0icnVuIgotICAgICAgICBkZXBlbmRzPSJpbml0LHN1aXRlLGNsZWFudXAiPgotICAgICAgICA8YW50Ci0gICAgICAgICAgICB0YXJnZXQ9ImNvbGxlY3QiCi0gICAgICAgICAgICBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iCi0gICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJpbmNsdWRlcyIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0uKnhtbCIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9Im91dHB1dC1maWxlIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfS54bWwiIC8+Ci0gICAgICAgIDwvYW50PgotICAgIDwvdGFyZ2V0PgotCi08L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy90ZXh0LnRlc3RzL29yZy9lY2xpcHNlL3RleHQvdGVzdHMvQWNjZXNzb3IuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvdGV4dC50ZXN0cy9vcmcvZWNsaXBzZS90ZXh0L3Rlc3RzL0FjY2Vzc29yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxZTg2NDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy90ZXh0LnRlc3RzL29yZy9lY2xpcHNlL3RleHQvdGVzdHMvQWNjZXNzb3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzMiArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLnRleHQudGVzdHM7Ci0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuQ29uc3RydWN0b3I7Ci1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuRmllbGQ7Ci1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQXNzZXJ0OwotCi0KLS8qKgotICogSGVscGVyIGNsYXNzIGZvciBhY2Nlc3NpbmcgY2xhc3NlcyBhbmQgbWVtYmVycyB3aGljaCBjYW5ub3QKLSAqIGJlIGFjY2Vzc2VkIHVzaW5nIHN0YW5kYXJkIEphdmEgYWNjZXNzIGNvbnRyb2wgbGlrZSBwcml2YXRlCi0gKiBvciBwYWNrYWdlIHZpc2libGUgZWxlbWVudHMuCi0gKgotICogQHNpbmNlIDMuMQotICovCi1wdWJsaWMgY2xhc3MgQWNjZXNzb3IgewotCi0JLyoqIFRoZSBjbGFzcyB0byBhY2Nlc3MuICovCi0JcHJpdmF0ZSBDbGFzcyBmQ2xhc3M7Ci0JLyoqIFRoZSBpbnN0YW5jZSB0byBhY2Nlc3MuICovCi0JcHJpdmF0ZSBPYmplY3QgZkluc3RhbmNlOwotCi0JLyoqCi0JICogQ3JlYXRlcyBhbiBhY2Nlc3NvciBmb3IgdGhlIGdpdmVuIDxjb2RlPmluc3RhbmNlPC9jb2RlPiBhbmQKLQkgKiA8Y29kZT5jbGFzczwvY29kZT4uIE9ubHkgbm9uLWluaGVyaXRlZCBtZW1iZXJzIHRoYXQgcGFydGljdWxhcgotCSAqIDxjb2RlPmNsYXNzPC9jb2RlPiBjYW4gYmUgYWNjZXNzZWQuCi0JICoKLQkgKiBAcGFyYW0gaW5zdGFuY2UgdGhlIGluc3RhbmNlCi0JICogQHBhcmFtIGNsYXp6IHRoZSBjbGFzcwotCSAqLwotCXB1YmxpYyBBY2Nlc3NvcihPYmplY3QgaW5zdGFuY2UsIENsYXNzIGNsYXp6KSB7Ci0JCW9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Bc3NlcnQuaXNOb3ROdWxsKGluc3RhbmNlKTsKLQkJQXNzZXJ0LmlzTm90TnVsbChjbGF6eik7Ci0JCWZJbnN0YW5jZT0gaW5zdGFuY2U7Ci0JCWZDbGFzcz0gY2xheno7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhbiBhY2Nlc3NvciBmb3IgdGhlIGdpdmVuIDxjb2RlPmluc3RhbmNlPC9jb2RlPiBhbmQKLQkgKiA8Y29kZT5jbGFzczwvY29kZT4uIE9ubHkgbm9uLWluaGVyaXRlZCBtZW1iZXJzIHRoYXQgcGFydGljdWxhcgotCSAqIDxjb2RlPmNsYXNzPC9jb2RlPiBjYW4gYmUgYWNjZXNzZWQuCi0JICoKLQkgKiBAcGFyYW0gaW5zdGFuY2UgdGhlIGluc3RhbmNlCi0JICogQHBhcmFtIGNsYXNzTmFtZSB0aGUgbmFtZSBvZiB0aGUgY2xhc3MKLQkgKiBAcGFyYW0gY2xhc3NMb2FkZXIgdGhlIGNsYXNzIGxvYWRlciB0byB1c2UgaS5lLiA8Y29kZT5nZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCk8L2NvZGU+Ci0JICovCi0JcHVibGljIEFjY2Vzc29yKE9iamVjdCBpbnN0YW5jZSwgU3RyaW5nIGNsYXNzTmFtZSwgQ2xhc3NMb2FkZXIgY2xhc3NMb2FkZXIpIHsKLQkJQXNzZXJ0LmlzTm90TnVsbChpbnN0YW5jZSk7Ci0JCUFzc2VydC5pc05vdE51bGwoY2xhc3NOYW1lKTsKLQkJQXNzZXJ0LmlzTm90TnVsbChjbGFzc0xvYWRlcik7Ci0JCWZJbnN0YW5jZT0gaW5zdGFuY2U7Ci0JCXRyeSB7Ci0JCQlmQ2xhc3M9IENsYXNzLmZvck5hbWUoY2xhc3NOYW1lLCB0cnVlLCBjbGFzc0xvYWRlcik7Ci0JCX0gY2F0Y2ggKENsYXNzTm90Rm91bmRFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9IGNhdGNoIChFeGNlcHRpb25JbkluaXRpYWxpemVyRXJyb3IgZSkgewotCQkJZmFpbCgpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhbiBhY2Nlc3NvciBmb3IgdGhlIGdpdmVuIGNsYXNzLgotCSAqIDxwPgotCSAqIEluIG9yZGVyIHRvIGdldCB0aGUgdHlwZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBnaXZlbgotCSAqIGFyZ3VtZW50cyB0aGV5IG11c3QgYWxsIGJlIGluc3RhbmNlb2YgT2JqZWN0LiBVc2UKLQkgKiB7QGxpbmsgI0FjY2Vzc29yKFN0cmluZywgQ2xhc3NMb2FkZXIsIENsYXNzW10sIE9iamVjdFtdKX0gaWYgdGhpcwotCSAqIGlzIG5vdCB0aGUgY2FzZS48L3A+Ci0JICoKLQkgKiBAcGFyYW0gY2xhc3NOYW1lIHRoZSBuYW1lIG9mIHRoZSBjbGFzcwotCSAqIEBwYXJhbSBjbGFzc0xvYWRlciB0aGUgY2xhc3MgbG9hZGVyIHRvIHVzZSBpLmUuIDxjb2RlPmdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKTwvY29kZT4KLQkgKiBAcGFyYW0gY29uc3RydWN0b3JBcmdzIHRoZSBjb25zdHJ1Y3RvciBhcmd1bWVudHMgd2hpY2ggbXVzdCBhbGwgYmUgaW5zdGFuY2Ugb2YgT2JqZWN0Ci0JICovCi0JcHVibGljIEFjY2Vzc29yKFN0cmluZyBjbGFzc05hbWUsIENsYXNzTG9hZGVyIGNsYXNzTG9hZGVyLCBPYmplY3RbXSBjb25zdHJ1Y3RvckFyZ3MpIHsKLQkJdGhpcyhjbGFzc05hbWUsIGNsYXNzTG9hZGVyLCBnZXRUeXBlcyhjb25zdHJ1Y3RvckFyZ3MpLCBjb25zdHJ1Y3RvckFyZ3MpOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYW4gYWNjZXNzb3IgZm9yIHRoZSBnaXZlbiBjbGFzcy4KLQkgKgotCSAqIEBwYXJhbSBjbGFzc05hbWUgdGhlIG5hbWUgb2YgdGhlIGNsYXNzCi0JICogQHBhcmFtIGNsYXNzTG9hZGVyIHRoZSBjbGFzcyBsb2FkZXIgdG8gdXNlIGkuZS4gPGNvZGU+Z2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpPC9jb2RlPgotCSAqIEBwYXJhbSBjb25zdHJ1Y3RvclR5cGVzIHRoZSB0eXBlcyBvZiB0aGUgY29uc3RydWN0b3IgYXJndW1lbnRzCi0JICogQHBhcmFtIGNvbnN0cnVjdG9yQXJncyB0aGUgY29uc3RydWN0b3IgYXJndW1lbnRzCi0JICovCi0JcHVibGljIEFjY2Vzc29yKFN0cmluZyBjbGFzc05hbWUsIENsYXNzTG9hZGVyIGNsYXNzTG9hZGVyLCBDbGFzc1tdIGNvbnN0cnVjdG9yVHlwZXMsIE9iamVjdFtdIGNvbnN0cnVjdG9yQXJncykgewotCQl0cnkgewotCQkJZkNsYXNzPSBDbGFzcy5mb3JOYW1lKGNsYXNzTmFtZSwgdHJ1ZSwgY2xhc3NMb2FkZXIpOwotCQl9IGNhdGNoIChDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfSBjYXRjaCAoRXhjZXB0aW9uSW5Jbml0aWFsaXplckVycm9yIGUpIHsKLQkJCWZhaWwoKTsKLQkJfQotCQlDb25zdHJ1Y3RvciBjb25zdHJ1Y3Rvcj0gbnVsbDsKLQkJdHJ5IHsKLQkJCWNvbnN0cnVjdG9yPSBmQ2xhc3MuZ2V0RGVjbGFyZWRDb25zdHJ1Y3Rvcihjb25zdHJ1Y3RvclR5cGVzKTsKLQkJfSBjYXRjaCAoU2VjdXJpdHlFeGNlcHRpb24gZTIpIHsKLQkJCWZhaWwoKTsKLQkJfSBjYXRjaCAoTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGUyKSB7Ci0JCQlmYWlsKCk7Ci0JCX0KLQkJQXNzZXJ0LmlzTm90TnVsbChjb25zdHJ1Y3Rvcik7Ci0JCWNvbnN0cnVjdG9yLnNldEFjY2Vzc2libGUodHJ1ZSk7Ci0JCXRyeSB7Ci0JCQlmSW5zdGFuY2U9IGNvbnN0cnVjdG9yLm5ld0luc3RhbmNlKGNvbnN0cnVjdG9yQXJncyk7Ci0JCX0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0gY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9IGNhdGNoIChJbnN0YW50aWF0aW9uRXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfSBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGFuIGFjY2Vzc29yIGZvciB0aGUgZ2l2ZW4gY2xhc3MuCi0JICogPHA+Ci0JICogVGhpcyBjb25zdHJ1Y3RvciBpcyB1c2VkIHRvIGFjY2VzcyBzdGF0aWMgc3R1ZmYuCi0JICogPC9wPgotCSAqCi0JICogQHBhcmFtIGNsYXNzTmFtZSB0aGUgbmFtZSBvZiB0aGUgY2xhc3MKLQkgKiBAcGFyYW0gY2xhc3NMb2FkZXIgdGhlIGNsYXNzIGxvYWRlciB0byB1c2UgaS5lLiA8Y29kZT5nZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCk8L2NvZGU+Ci0JICovCi0JcHVibGljIEFjY2Vzc29yKFN0cmluZyBjbGFzc05hbWUsIENsYXNzTG9hZGVyIGNsYXNzTG9hZGVyKSB7Ci0JCXRyeSB7Ci0JCQlmQ2xhc3M9IENsYXNzLmZvck5hbWUoY2xhc3NOYW1lLCB0cnVlLCBjbGFzc0xvYWRlcik7Ci0JCX0gY2F0Y2ggKENsYXNzTm90Rm91bmRFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9IGNhdGNoIChFeGNlcHRpb25JbkluaXRpYWxpemVyRXJyb3IgZSkgewotCQkJZmFpbCgpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogSW52b2tlcyB0aGUgbWV0aG9kIHdpdGggdGhlIGdpdmVuIG1ldGhvZCBuYW1lIGFuZCBhcmd1bWVudHMuCi0JICogPHA+Ci0JICogSW4gb3JkZXIgdG8gZ2V0IHRoZSB0eXBlIGluZm9ybWF0aW9uIGZyb20gdGhlIGdpdmVuCi0JICogYXJndW1lbnRzIGFsbCB0aG9zZSBhcmd1bWVudHMgbXVzdCBiZSBpbnN0YW5jZSBvZiBPYmplY3QuIFVzZQotCSAqIHtAbGluayAjaW52b2tlKFN0cmluZywgQ2xhc3NbXSwgT2JqZWN0W10pfSBpZiB0aGlzCi0JICogaXMgbm90IHRoZSBjYXNlLjwvcD4KLQkgKgotCSAqIEBwYXJhbSBtZXRob2ROYW1lIHRoZSBtZXRob2QgbmFtZQotCSAqIEBwYXJhbSBhcmd1bWVudHMgdGhlIG1ldGhvZCBhcmd1bWVudHMgd2hpY2ggbXVzdCBhbGwgYmUgaW5zdGFuY2Ugb2YgT2JqZWN0Ci0JICogQHJldHVybiB0aGUgbWV0aG9kIHJldHVybiB2YWx1ZQotCSAqLwotCXB1YmxpYyBPYmplY3QgaW52b2tlKFN0cmluZyBtZXRob2ROYW1lLCBPYmplY3RbXSBhcmd1bWVudHMpIHsKLQkJcmV0dXJuIGludm9rZShtZXRob2ROYW1lLCBnZXRUeXBlcyhhcmd1bWVudHMpLCBhcmd1bWVudHMpOwotCX0KLQotCS8qKgotCSAqIEludm9rZXMgdGhlIG1ldGhvZCB3aXRoIHRoZSBnaXZlbiBtZXRob2QgbmFtZSBhbmQgYXJndW1lbnRzLgotCSAqCi0JICogQHBhcmFtIG1ldGhvZE5hbWUgdGhlIG1ldGhvZCBuYW1lCi0JICogQHBhcmFtIHR5cGVzIHRoZSBhcmd1bWVudCB0eXBlcwotCSAqIEBwYXJhbSBhcmd1bWVudHMgdGhlIG1ldGhvZCBhcmd1bWVudHMKLQkgKiBAcmV0dXJuIHRoZSBtZXRob2QgcmV0dXJuIHZhbHVlCi0JICovCi0JcHVibGljIE9iamVjdCBpbnZva2UoU3RyaW5nIG1ldGhvZE5hbWUsIENsYXNzW10gdHlwZXMsIE9iamVjdFtdIGFyZ3VtZW50cykgewotCQlNZXRob2QgbWV0aG9kPSBudWxsOwotCQl0cnkgewotCQkJbWV0aG9kPSBmQ2xhc3MuZ2V0RGVjbGFyZWRNZXRob2QobWV0aG9kTmFtZSwgdHlwZXMpOwotCQl9IGNhdGNoIChTZWN1cml0eUV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0gY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBleCkgewotCQkJZmFpbCgpOwotCQl9Ci0JCUFzc2VydC5pc05vdE51bGwobWV0aG9kKTsKLQkJbWV0aG9kLnNldEFjY2Vzc2libGUodHJ1ZSk7Ci0JCXRyeSB7Ci0JCQlyZXR1cm4gbWV0aG9kLmludm9rZShmSW5zdGFuY2UsIGFyZ3VtZW50cyk7Ci0JCX0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0gY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9IGNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgZmllbGQgd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KLQkgKgotCSAqIEBwYXJhbSBmaWVsZE5hbWUgdGhlIGZpZWxkIG5hbWUKLQkgKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlIHRvIGFzc2lnbiB0byB0aGUgZmllbGQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXQoU3RyaW5nIGZpZWxkTmFtZSwgT2JqZWN0IHZhbHVlKSB7Ci0JCUZpZWxkIGZpZWxkPSBnZXRGaWVsZChmaWVsZE5hbWUpOwotCQl0cnkgewotCQkJZmllbGQuc2V0KGZJbnN0YW5jZSwgdmFsdWUpOwotCQl9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9IGNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEFzc2lnbnMgdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSBmaWVsZCB3aXRoIHRoZSBnaXZlbiBuYW1lLgotCSAqCi0JICogQHBhcmFtIGZpZWxkTmFtZSB0aGUgZmllbGQgbmFtZQotCSAqIEBwYXJhbSB2YWx1ZSB0aGUgdmFsdWUgdG8gYXNzaWduIHRvIHRoZSBmaWVsZAotCSAqLwotCXB1YmxpYyB2b2lkIHNldChTdHJpbmcgZmllbGROYW1lLCBib29sZWFuIHZhbHVlKSB7Ci0JCUZpZWxkIGZpZWxkPSBnZXRGaWVsZChmaWVsZE5hbWUpOwotCQl0cnkgewotCQkJZmllbGQuc2V0Qm9vbGVhbihmSW5zdGFuY2UsIHZhbHVlKTsKLQkJfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfSBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgZmllbGQgd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KLQkgKgotCSAqIEBwYXJhbSBmaWVsZE5hbWUgdGhlIGZpZWxkIG5hbWUKLQkgKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlIHRvIGFzc2lnbiB0byB0aGUgZmllbGQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXQoU3RyaW5nIGZpZWxkTmFtZSwgaW50IHZhbHVlKSB7Ci0JCUZpZWxkIGZpZWxkPSBnZXRGaWVsZChmaWVsZE5hbWUpOwotCQl0cnkgewotCQkJZmllbGQuc2V0SW50KGZJbnN0YW5jZSwgdmFsdWUpOwotCQl9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9IGNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBmaWVsZCB3aXRoIHRoZSBnaXZlbiBuYW1lLgotCSAqCi0JICogQHBhcmFtIGZpZWxkTmFtZSB0aGUgZmllbGQgbmFtZQotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBmaWVsZAotCSAqLwotCXB1YmxpYyBPYmplY3QgZ2V0KFN0cmluZyBmaWVsZE5hbWUpIHsKLQkJRmllbGQgZmllbGQ9IGdldEZpZWxkKGZpZWxkTmFtZSk7Ci0JCXRyeSB7Ci0JCQlyZXR1cm4gZmllbGQuZ2V0KGZJbnN0YW5jZSk7Ci0JCX0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9Ci0JCS8vIFVucmVhY2hhYmxlIGNvZGUKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkIHdpdGggdGhlIGdpdmVuIG5hbWUuCi0JICoKLQkgKiBAcGFyYW0gZmllbGROYW1lIHRoZSBmaWVsZCBuYW1lCi0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkCi0JICovCi0JcHVibGljIGJvb2xlYW4gZ2V0Qm9vbGVhbihTdHJpbmcgZmllbGROYW1lKSB7Ci0JCUZpZWxkIGZpZWxkPSBnZXRGaWVsZChmaWVsZE5hbWUpOwotCQl0cnkgewotCQkJcmV0dXJuIGZpZWxkLmdldEJvb2xlYW4oZkluc3RhbmNlKTsKLQkJfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfSBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0KLQkJLy8gVW5yZWFjaGFibGUgY29kZQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkIHdpdGggdGhlIGdpdmVuIG5hbWUuCi0JICoKLQkgKiBAcGFyYW0gZmllbGROYW1lIHRoZSBmaWVsZCBuYW1lCi0JICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkCi0JICovCi0JcHVibGljIGludCBnZXRJbnQoU3RyaW5nIGZpZWxkTmFtZSkgewotCQlGaWVsZCBmaWVsZD0gZ2V0RmllbGQoZmllbGROYW1lKTsKLQkJdHJ5IHsKLQkJCXJldHVybiBmaWVsZC5nZXRJbnQoZkluc3RhbmNlKTsKLQkJfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfSBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0KLQkJLy8gVW5yZWFjaGFibGUgY29kZQotCQlyZXR1cm4gMDsKLQl9Ci0KLQlwcml2YXRlIEZpZWxkIGdldEZpZWxkKFN0cmluZyBmaWVsZE5hbWUpIHsKLQkJRmllbGQgZmllbGQ9IG51bGw7Ci0JCXRyeSB7Ci0JCQlmaWVsZD0gZkNsYXNzLmdldERlY2xhcmVkRmllbGQoZmllbGROYW1lKTsKLQkJfSBjYXRjaCAoU2VjdXJpdHlFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9IGNhdGNoIChOb1N1Y2hGaWVsZEV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0KLQkJZmllbGQuc2V0QWNjZXNzaWJsZSh0cnVlKTsKLQkJcmV0dXJuIGZpZWxkOwotCX0KLQotCXByaXZhdGUgc3RhdGljIENsYXNzW10gZ2V0VHlwZXMoT2JqZWN0W10gb2JqZWN0cykgewotCQlpZiAob2JqZWN0cyA9PSBudWxsKQotCQkJcmV0dXJuIG51bGw7Ci0KLQkJaW50IGxlbmd0aD0gb2JqZWN0cy5sZW5ndGg7Ci0JCUNsYXNzW10gY2xhc3Nlcz0gbmV3IENsYXNzW2xlbmd0aF07Ci0JCWZvciAoaW50IGk9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotCQkJQXNzZXJ0LmlzTm90TnVsbChvYmplY3RzW2ldKTsKLQkJCWNsYXNzZXNbaV09IG9iamVjdHNbaV0uZ2V0Q2xhc3MoKTsKLQkJfQotCQlyZXR1cm4gY2xhc3NlczsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgZmFpbCgpIHsKLQkJQXNzZXJ0LmlzVHJ1ZShmYWxzZSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzUxYzhmMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy8uY3ZzaWdub3JlIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhMDc3YTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1iaW4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQxNzUxNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3QueG1sLmNvcmU8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz48L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjN2QxMGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI0ZyaSBNYXIgMjUgMTc6MzQ6MDEgRVNUIDIwMDUKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1lbmNvZGluZy8vZGF0YS9QdWJsaWNhdGlvbkNhdGFsb2d1ZS9DYXRhbG9ndWUueHNkPVVURjgKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDU2NDJjYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUuMAotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzOyBzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMC5xdWFsaWZpZXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy5pbnRlcm5hbC5UZXN0UGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvci4wCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMuaW50ZXJuYWwKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMsCi0gb3JnLmp1bml0LAotIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZSwKLSBvcmcuYXBhY2hlLnhlcmNlcywKLSBvcmcuZWNsaXBzZS54c2QsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51cmlyZXNvbHZlcgotQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKLUJ1bmRsZS1DbGFzc1BhdGg6IGNhdGFsb2d0ZXN0cy5qYXIKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2Fib3V0Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE5OWRmMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUsIDIwMDg8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzlkZGMxMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLXNvdXJjZS5jYXRhbG9ndGVzdHMuamFyID0gc3JjLwotb3V0cHV0LmNhdGFsb2d0ZXN0cy5qYXIgPSBiaW4vCi1iaW4uaW5jbHVkZXMgPSBkYXRhLyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIHRlc3QueG1sLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBjYXRhbG9ndGVzdHMuamFyLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvSW52b2ljZS9JbnZvaWNlLmR0ZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL0ludm9pY2UvSW52b2ljZS5kdGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3MzdiYTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvSW52b2ljZS9JbnZvaWNlLmR0ZAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IUVMRU1FTlQgSW52b2ljZSAoSGVhZGVyLEl0ZW0rKT4KLTwhRUxFTUVOVCBIZWFkZXIgKERhdGUsQmlsbFRvKT4KLTwhQVRUTElTVCBIZWFkZXIKLSBpbnZvaWNlTnVtYmVyIENEQVRBICNSRVFVSVJFRAotPgotPCFFTEVNRU5UIEl0ZW0gKGRlc2NyaXB0aW9uKik+Ci08IUFUVExJU1QgSXRlbQotIHByaWNlIENEQVRBICNSRVFVSVJFRAotIGRpc2NvdW50IChwcm9tb3Rpb24gfCByZWd1bGFyKSAicmVndWxhciIKLT4KLTwhRUxFTUVOVCBEYXRlICgoTW9udGgsRGF5LFllYXIpfChEYXksTW9udGgsWWVhcikpPgotPCFFTEVNRU5UIEJpbGxUbyAoQWRkcmVzcyk+Ci08IUFUVExJU1QgQmlsbFRvCi0gY3VzdE51bWJlciBJRCAjUkVRVUlSRUQKLSBuYW1lIENEQVRBICNJTVBMSUVECi0gcGhvbmUgQ0RBVEEgI0lNUExJRUQKLT4KLTwhRUxFTUVOVCBkZXNjcmlwdGlvbiAoI1BDREFUQSk+Ci08IUVMRU1FTlQgQWRkcmVzcyAoc3RyZWV0MSxzdHJlZXQyPyxjaXR5LChzdGF0ZXxwcm92aW5jZSksemlwLGNvdW50cnk/KT4KLTwhRUxFTUVOVCBzdHJlZXQxICgjUENEQVRBKT4KLTwhRUxFTUVOVCBzdHJlZXQyICgjUENEQVRBKT4KLTwhRUxFTUVOVCBjaXR5ICgjUENEQVRBKT4KLTwhRUxFTUVOVCBzdGF0ZSAoI1BDREFUQSk+Ci08IUVMRU1FTlQgcHJvdmluY2UgKCNQQ0RBVEEpPgotPCFFTEVNRU5UIHppcCAoI1BDREFUQSk+Ci08IUVMRU1FTlQgY291bnRyeSAoI1BDREFUQSk+Ci08IUVMRU1FTlQgTW9udGggKCNQQ0RBVEEpPgotPCFFTEVNRU5UIERheSAoI1BDREFUQSk+Ci08IUVMRU1FTlQgWWVhciAoI1BDREFUQSk+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9JbnZvaWNlL0ludm9pY2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvSW52b2ljZS9JbnZvaWNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmFmZTM5Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9JbnZvaWNlL0ludm9pY2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBJbnZvaWNlIFBVQkxJQyAiSW52b2ljZUlkX3Rlc3QiICJJbnZvaWNlLmR0ZCIgPgotPEludm9pY2U+Ci0gIDxIZWFkZXIgaW52b2ljZU51bWJlcj0iMTIzNDUiPgotICAgIDxEYXRlPgotICAgICAgPE1vbnRoPkp1bHk8L01vbnRoPgotICAgICAgPERheT4xNTwvRGF5PgotICAgICAgPFllYXI+MjAwMTwvWWVhcj4KLSAgICA8L0RhdGU+Ci0gICAgPEJpbGxUbyBjdXN0TnVtYmVyPSJYNTczOSIgbmFtZT0iTWlsdG9uIE1jR29vIiBwaG9uZT0iNDE2LTQ0OC00NDE0Ij4KLSAgICAgIDxBZGRyZXNzPgotICAgICAgICA8c3RyZWV0MT5JQk08L3N0cmVldDE+Ci0gICAgICAgIDxzdHJlZXQyPjExNTAgRWdsaW50b24gQXZlIEVhc3Q8L3N0cmVldDI+Ci0gICAgICAgIDxjaXR5PlRvcm9udG88L2NpdHk+Ci0gICAgICAgIDxzdGF0ZT5PbnRhcmlvPC9zdGF0ZT4KLSAgICAgICAgPHppcD5NM0MgMUg3PC96aXA+Ci0gICAgICAgIDxjb3VudHJ5PkNhbmFkYTwvY291bnRyeT4KLSAgICAgIDwvQWRkcmVzcz4KLSAgICA8L0JpbGxUbz4KLSAgPC9IZWFkZXI+Ci0gIDxJdGVtIGRpc2NvdW50PSJwcm9tb3Rpb24iIHByaWNlPSI1NyI+Ci0gICAgPGRlc2NyaXB0aW9uPmhpZ2ggc3BlZWQgM0QgZ3JhcGhpY3MgY2FyZDwvZGVzY3JpcHRpb24+Ci0gIDwvSXRlbT4KLTwvSW52b2ljZT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1BlcnNvbmFsL3BlcnNvbmFsLXNjaGVtYS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QZXJzb25hbC9wZXJzb25hbC1zY2hlbWEueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMmY3MjViLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1BlcnNvbmFsL3BlcnNvbmFsLXNjaGVtYS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHBlcnNvbm5lbCB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotCSAgIHhzaTpub05hbWVzcGFjZVNjaGVtYUxvY2F0aW9uPSdwZXJzb25hbC54c2QnPgotCi0gIDxwZXJzb24gaWQ9IkJpZy5Cb3NzIiA+Ci0gICAgPG5hbWU+PGZhbWlseT5Cb3NzPC9mYW1pbHk+IDxnaXZlbj5CaWc8L2dpdmVuPjwvbmFtZT4KLSAgICA8ZW1haWw+Y2hpZWZAZm9vLmNvbTwvZW1haWw+Ci0gICAgPGxpbmsgc3Vib3JkaW5hdGVzPSJvbmUud29ya2VyIHR3by53b3JrZXIgdGhyZWUud29ya2VyIGZvdXIud29ya2VyIGZpdmUud29ya2VyIi8+Ci0gIDwvcGVyc29uPgotCi0gIDxwZXJzb24gaWQ9Im9uZS53b3JrZXIiPgotICAgIDxuYW1lPjxmYW1pbHk+V29ya2VyPC9mYW1pbHk+IDxnaXZlbj5PbmU8L2dpdmVuPjwvbmFtZT4KLSAgICA8ZW1haWw+b25lQGZvby5jb208L2VtYWlsPgotICAgIDxsaW5rIG1hbmFnZXI9IkJpZy5Cb3NzIi8+Ci0gIDwvcGVyc29uPgotCi0gIDxwZXJzb24gaWQ9InR3by53b3JrZXIiPgotICAgIDxuYW1lPjxmYW1pbHk+V29ya2VyPC9mYW1pbHk+IDxnaXZlbj5Ud288L2dpdmVuPjwvbmFtZT4KLSAgICA8ZW1haWw+dHdvQGZvby5jb208L2VtYWlsPgotICAgIDxsaW5rIG1hbmFnZXI9IkJpZy5Cb3NzIi8+Ci0gIDwvcGVyc29uPgotCi0gIDxwZXJzb24gaWQ9InRocmVlLndvcmtlciI+Ci0gICAgPG5hbWU+PGZhbWlseT5Xb3JrZXI8L2ZhbWlseT4gPGdpdmVuPlRocmVlPC9naXZlbj48L25hbWU+Ci0gICAgPGVtYWlsPnRocmVlQGZvby5jb208L2VtYWlsPgotICAgIDxsaW5rIG1hbmFnZXI9IkJpZy5Cb3NzIi8+Ci0gIDwvcGVyc29uPgotCi0gIDxwZXJzb24gaWQ9ImZvdXIud29ya2VyIj4KLSAgICA8bmFtZT48ZmFtaWx5PldvcmtlcjwvZmFtaWx5PiA8Z2l2ZW4+Rm91cjwvZ2l2ZW4+PC9uYW1lPgotICAgIDxlbWFpbD5mb3VyQGZvby5jb208L2VtYWlsPgotICAgIDxsaW5rIG1hbmFnZXI9IkJpZy5Cb3NzIi8+Ci0gIDwvcGVyc29uPgotCi0gIDxwZXJzb24gaWQ9ImZpdmUud29ya2VyIj4KLSAgICA8bmFtZT48ZmFtaWx5PldvcmtlcjwvZmFtaWx5PiA8Z2l2ZW4+Rml2ZTwvZ2l2ZW4+PC9uYW1lPgotICAgIDxlbWFpbD5maXZlQGZvby5jb208L2VtYWlsPgotICAgIDxsaW5rIG1hbmFnZXI9IkJpZy5Cb3NzIi8+Ci0gIDwvcGVyc29uPgotCi08L3BlcnNvbm5lbD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1BlcnNvbmFsL3BlcnNvbmFsLmR0ZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1BlcnNvbmFsL3BlcnNvbmFsLmR0ZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzY0ZTQ4YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QZXJzb25hbC9wZXJzb25hbC5kdGQKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi08P3htbCBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRUxFTUVOVCBwZXJzb25uZWwgKHBlcnNvbikrPgotCi08IUVMRU1FTlQgcGVyc29uIChuYW1lLGVtYWlsKix1cmwqLGxpbms/KT4KLTwhQVRUTElTVCBwZXJzb24gaWQgSUQgI1JFUVVJUkVEPgotPCFBVFRMSVNUIHBlcnNvbiBub3RlIENEQVRBICNJTVBMSUVEPgotPCFBVFRMSVNUIHBlcnNvbiBjb250ciAodHJ1ZXxmYWxzZSkgJ2ZhbHNlJz4KLTwhQVRUTElTVCBwZXJzb24gc2FsYXJ5IENEQVRBICNJTVBMSUVEPgotCi08IUVMRU1FTlQgbmFtZSAoKGZhbWlseSxnaXZlbil8KGdpdmVuLGZhbWlseSkpPgotCi08IUVMRU1FTlQgZmFtaWx5ICgjUENEQVRBKT4KLQotPCFFTEVNRU5UIGdpdmVuICgjUENEQVRBKT4KLQotPCFFTEVNRU5UIGVtYWlsICgjUENEQVRBKT4KLQotPCFFTEVNRU5UIHVybCBFTVBUWT4KLTwhQVRUTElTVCB1cmwgaHJlZiBDREFUQSAnaHR0cDovLyc+Ci0KLTwhRUxFTUVOVCBsaW5rIEVNUFRZPgotPCFBVFRMSVNUIGxpbmsgbWFuYWdlciBJRFJFRiAjSU1QTElFRD4KLTwhQVRUTElTVCBsaW5rIHN1Ym9yZGluYXRlcyBJRFJFRlMgI0lNUExJRUQ+Ci0KLTwhTk9UQVRJT04gZ2lmIFBVQkxJQyAnLS8vQVBQL1Bob3Rvc2hvcC80LjAnICdwaG90b3Nob3AuZXhlJz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1BlcnNvbmFsL3BlcnNvbmFsLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1BlcnNvbmFsL3BlcnNvbmFsLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWMzZTQzOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QZXJzb25hbC9wZXJzb25hbC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIHBlcnNvbm5lbCBTWVNURU0gImh0dHA6Ly9wZXJzb25hbC9wZXJzb25hbC5kdGQiPgotPHBlcnNvbm5lbD4KLQotICA8cGVyc29uIGlkPSJCaWcuQm9zcyI+Ci0gICAgPG5hbWU+PGZhbWlseT5Cb3NzPC9mYW1pbHk+IDxnaXZlbj5CaWc8L2dpdmVuPjwvbmFtZT4KLSAgICA8ZW1haWw+Y2hpZWZAZm9vLmNvbTwvZW1haWw+Ci0gICAgPGxpbmsgc3Vib3JkaW5hdGVzPSJvbmUud29ya2VyIHR3by53b3JrZXIgdGhyZWUud29ya2VyIGZvdXIud29ya2VyIGZpdmUud29ya2VyIi8+Ci0gIDwvcGVyc29uPgotCi0gIDxwZXJzb24gaWQ9Im9uZS53b3JrZXIiPgotICAgIDxuYW1lPjxmYW1pbHk+V29ya2VyPC9mYW1pbHk+IDxnaXZlbj5PbmU8L2dpdmVuPjwvbmFtZT4KLSAgICA8ZW1haWw+b25lQGZvby5jb208L2VtYWlsPgotICAgIDxsaW5rIG1hbmFnZXI9IkJpZy5Cb3NzIi8+Ci0gIDwvcGVyc29uPgotCi0gIDxwZXJzb24gaWQ9InR3by53b3JrZXIiPgotICAgIDxuYW1lPjxmYW1pbHk+V29ya2VyPC9mYW1pbHk+IDxnaXZlbj5Ud288L2dpdmVuPjwvbmFtZT4KLSAgICA8ZW1haWw+dHdvQGZvby5jb208L2VtYWlsPgotICAgIDxsaW5rIG1hbmFnZXI9IkJpZy5Cb3NzIi8+Ci0gIDwvcGVyc29uPgotCi0gIDxwZXJzb24gaWQ9InRocmVlLndvcmtlciI+Ci0gICAgPG5hbWU+PGZhbWlseT5Xb3JrZXI8L2ZhbWlseT4gPGdpdmVuPlRocmVlPC9naXZlbj48L25hbWU+Ci0gICAgPGVtYWlsPnRocmVlQGZvby5jb208L2VtYWlsPgotICAgIDxsaW5rIG1hbmFnZXI9IkJpZy5Cb3NzIi8+Ci0gIDwvcGVyc29uPgotCi0gIDxwZXJzb24gaWQ9ImZvdXIud29ya2VyIj4KLSAgICA8bmFtZT48ZmFtaWx5PldvcmtlcjwvZmFtaWx5PiA8Z2l2ZW4+Rm91cjwvZ2l2ZW4+PC9uYW1lPgotICAgIDxlbWFpbD5mb3VyQGZvby5jb208L2VtYWlsPgotICAgIDxsaW5rIG1hbmFnZXI9IkJpZy5Cb3NzIi8+Ci0gIDwvcGVyc29uPgotCi0gIDxwZXJzb24gaWQ9ImZpdmUud29ya2VyIj4KLSAgICA8bmFtZT48ZmFtaWx5PldvcmtlcjwvZmFtaWx5PiA8Z2l2ZW4+Rml2ZTwvZ2l2ZW4+PC9uYW1lPgotICAgIDxlbWFpbD5maXZlQGZvby5jb208L2VtYWlsPgotICAgIDxsaW5rIG1hbmFnZXI9IkJpZy5Cb3NzIi8+Ci0gIDwvcGVyc29uPgotCi08L3BlcnNvbm5lbD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1BlcnNvbmFsL3BlcnNvbmFsLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1BlcnNvbmFsL3BlcnNvbmFsLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDVlMzE4My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QZXJzb25hbC9wZXJzb25hbC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzOnNjaGVtYSB4bWxuczp4cz0naHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEnPgotCi0gPHhzOmVsZW1lbnQgbmFtZT0icGVyc29ubmVsIj4KLSAgPHhzOmNvbXBsZXhUeXBlPgotICAgPHhzOnNlcXVlbmNlPgotICAgICA8eHM6ZWxlbWVudCByZWY9InBlcnNvbiIgbWluT2NjdXJzPScxJyBtYXhPY2N1cnM9J3VuYm91bmRlZCcvPgotICAgPC94czpzZXF1ZW5jZT4KLSAgPC94czpjb21wbGV4VHlwZT4KLQotICA8eHM6dW5pcXVlIG5hbWU9InVuaXF1ZTEiPgotICAgPHhzOnNlbGVjdG9yIHhwYXRoPSJwZXJzb24iLz4KLSAgIDx4czpmaWVsZCB4cGF0aD0ibmFtZS9naXZlbiIvPgotICAgPHhzOmZpZWxkIHhwYXRoPSJuYW1lL2ZhbWlseSIvPgotICA8L3hzOnVuaXF1ZT4KLSAgPHhzOmtleSBuYW1lPSdlbXBpZCc+Ci0gICA8eHM6c2VsZWN0b3IgeHBhdGg9InBlcnNvbiIvPgotICAgPHhzOmZpZWxkIHhwYXRoPSJAaWQiLz4KLSAgPC94czprZXk+Ci0gIDx4czprZXlyZWYgbmFtZT0ia2V5cmVmMSIgcmVmZXI9J2VtcGlkJz4KLSAgIDx4czpzZWxlY3RvciB4cGF0aD0icGVyc29uIi8+IAotICAgPHhzOmZpZWxkIHhwYXRoPSJsaW5rL0BtYW5hZ2VyIi8+ICAKLSAgPC94czprZXlyZWY+Ci0KLSA8L3hzOmVsZW1lbnQ+Ci0KLSA8eHM6ZWxlbWVudCBuYW1lPSJwZXJzb24iPgotICA8eHM6Y29tcGxleFR5cGU+Ci0gICA8eHM6c2VxdWVuY2U+Ci0gICAgIDx4czplbGVtZW50IHJlZj0ibmFtZSIvPgotICAgICA8eHM6ZWxlbWVudCByZWY9ImVtYWlsIiBtaW5PY2N1cnM9JzAnIG1heE9jY3Vycz0ndW5ib3VuZGVkJy8+Ci0gICAgIDx4czplbGVtZW50IHJlZj0idXJsIiAgIG1pbk9jY3Vycz0nMCcgbWF4T2NjdXJzPSd1bmJvdW5kZWQnLz4KLSAgICAgPHhzOmVsZW1lbnQgcmVmPSJsaW5rIiAgbWluT2NjdXJzPScxJyBtYXhPY2N1cnM9JzEnLz4KLSAgIDwveHM6c2VxdWVuY2U+Ci0gICA8eHM6YXR0cmlidXRlIG5hbWU9ImlkIiAgdHlwZT0ieHM6SUQiIHVzZT0ncmVxdWlyZWQnLz4KLSAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibm90ZSIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0gICA8eHM6YXR0cmlidXRlIG5hbWU9ImNvbnRyIiBkZWZhdWx0PSJmYWxzZSI+Ci0gICAgPHhzOnNpbXBsZVR5cGU+Ci0gICAgIDx4czpyZXN0cmljdGlvbiBiYXNlID0gInhzOnN0cmluZyI+Ci0gICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ0cnVlIi8+Ci0gICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJmYWxzZSIvPgotICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgIDwveHM6c2ltcGxlVHlwZT4KLSAgIDwveHM6YXR0cmlidXRlPgotICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzYWxhcnkiIHR5cGU9InhzOmludGVnZXIiLz4KLSAgPC94czpjb21wbGV4VHlwZT4KLSA8L3hzOmVsZW1lbnQ+Ci0KLSA8eHM6ZWxlbWVudCBuYW1lPSJuYW1lIj4KLSAgPHhzOmNvbXBsZXhUeXBlPgotICAgPHhzOmFsbD4KLSAgICA8eHM6ZWxlbWVudCByZWY9ImZhbWlseSIvPgotICAgIDx4czplbGVtZW50IHJlZj0iZ2l2ZW4iLz4KLSAgIDwveHM6YWxsPgotICA8L3hzOmNvbXBsZXhUeXBlPgotIDwveHM6ZWxlbWVudD4KLQotIDx4czplbGVtZW50IG5hbWU9ImZhbWlseSIgdHlwZT0neHM6c3RyaW5nJy8+Ci0KLSA8eHM6ZWxlbWVudCBuYW1lPSJnaXZlbiIgdHlwZT0neHM6c3RyaW5nJy8+Ci0KLSA8eHM6ZWxlbWVudCBuYW1lPSJlbWFpbCIgdHlwZT0neHM6c3RyaW5nJy8+Ci0KLSA8eHM6ZWxlbWVudCBuYW1lPSJ1cmwiPgotICA8eHM6Y29tcGxleFR5cGU+Ci0gICA8eHM6YXR0cmlidXRlIG5hbWU9ImhyZWYiIHR5cGU9InhzOnN0cmluZyIgZGVmYXVsdD0iaHR0cDovLyIvPgotICA8L3hzOmNvbXBsZXhUeXBlPgotIDwveHM6ZWxlbWVudD4KLQotIDx4czplbGVtZW50IG5hbWU9ImxpbmsiPgotICA8eHM6Y29tcGxleFR5cGU+Ci0gICA8eHM6YXR0cmlidXRlIG5hbWU9Im1hbmFnZXIiIHR5cGU9InhzOklEUkVGIi8+Ci0gICA8eHM6YXR0cmlidXRlIG5hbWU9InN1Ym9yZGluYXRlcyIgdHlwZT0ieHM6SURSRUZTIi8+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci0gPC94czplbGVtZW50PgotCi0gPHhzOm5vdGF0aW9uIG5hbWU9J2dpZicgcHVibGljPSctLy9BUFAvUGhvdG9zaG9wLzQuMCcgc3lzdGVtPSdwaG90b3Nob3AuZXhlJy8+Ci0KLTwveHM6c2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUHVibGljYXRpb25DYXRhbG9ndWUvQ2F0YWxvZ3VlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1B1YmxpY2F0aW9uQ2F0YWxvZ3VlL0NhdGFsb2d1ZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2NjYyMWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUHVibGljYXRpb25DYXRhbG9ndWUvQ2F0YWxvZ3VlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08YzpDYXRhbG9ndWUgeG1sbnM6Yz0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9DYXRhbG9ndWUvdGVzdCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL0NhdGFsb2d1ZS90ZXN0IENhdGFsb2d1ZS54c2QgIj4KLQk8YzpCb29rPgotCQk8dGl0bGU+UHJvZmVzc2lvbmFsIFhNTCBTY2hlbWE8L3RpdGxlPgotCQk8ZGF0ZT4yMDAxPC9kYXRlPgotCQk8aXNibj4xLTg2MTAwNS00Ny00PC9pc2JuPgotCQk8cHVibGlzaGVyPldyb3ggUHJlc3M8L3B1Ymxpc2hlcj4KLQk8L2M6Qm9vaz4KLQk8YzpNYWdhemluZT4KLQkJPHRpdGxlPldlYlNwaGVyZSBEZXZlbG9wZXIncyBKb3VybmFsPC90aXRsZT4KLQkJPGRhdGU+MjAwMTwvZGF0ZT4KLQk8L2M6TWFnYXppbmU+Ci0JPGM6Qm9vaz4KLQkJPHRpdGxlPkphdmEgYW5kIFhTTFQ8L3RpdGxlPgotCQk8ZGF0ZT4yMDAxPC9kYXRlPgotCQk8aXNibj4wLTU5Ni0wMDE0My02PC9pc2JuPgotCQk8cHVibGlzaGVyPk8nUmVpbGx5PC9wdWJsaXNoZXI+Ci0JPC9jOkJvb2s+Ci08L2M6Q2F0YWxvZ3VlPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUHVibGljYXRpb25DYXRhbG9ndWUvQ2F0YWxvZ3VlLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1B1YmxpY2F0aW9uQ2F0YWxvZ3VlL0NhdGFsb2d1ZS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2Njg2NDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUHVibGljYXRpb25DYXRhbG9ndWUvQ2F0YWxvZ3VlLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9DYXRhbG9ndWUvdGVzdCIKLQl4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6Yz0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9DYXRhbG9ndWUvdGVzdCIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvQ2F0YWxvZ3VlL3Rlc3QgQ2F0YWxvZ3VlLnhzZCAiPgotCTxncm91cCBuYW1lPSJ0ZXN0Ij4KLQkJPHNlcXVlbmNlPgotCQkJPGVsZW1lbnQgbmFtZT0idGVzdDEiPjwvZWxlbWVudD4KLQkJPC9zZXF1ZW5jZT4KLQk8L2dyb3VwPgotCTxjb21wbGV4VHlwZSBuYW1lPSJQdWJsaWNhdGlvblR5cGUiPgotCQk8c2VxdWVuY2U+Ci0JCQk8ZWxlbWVudCBuYW1lPSJ0aXRsZSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+Ci0JCQk8ZWxlbWVudCBuYW1lPSJhdXRob3IiIHR5cGU9InN0cmluZyIgbWluT2NjdXJzPSIwIgotCQkJCW1heE9jY3Vycz0idW5ib3VuZGVkIj4KLQkJCTwvZWxlbWVudD4KLQkJCTxlbGVtZW50IG5hbWU9ImRhdGUiIHR5cGU9ImdZZWFyIj48L2VsZW1lbnQ+Ci0JCTwvc2VxdWVuY2U+Ci0JPC9jb21wbGV4VHlwZT4KLQotCTxjb21wbGV4VHlwZSBuYW1lPSJCb29rVHlwZSI+Ci0JCTxjb21wbGV4Q29udGVudD4KLQkJCTxleHRlbnNpb24gYmFzZT0iYzpQdWJsaWNhdGlvblR5cGUiPgotCQkJCTxzZXF1ZW5jZT4KLQkJCQkJPGVsZW1lbnQgbmFtZT0iaXNibiIgdHlwZT0ic3RyaW5nIiAvPgotCQkJCQk8ZWxlbWVudCBuYW1lPSJwdWJsaXNoZXIiIHR5cGU9InN0cmluZyIgLz4KLQkJCQk8L3NlcXVlbmNlPgotCQkJPC9leHRlbnNpb24+Ci0JCTwvY29tcGxleENvbnRlbnQ+Ci0JPC9jb21wbGV4VHlwZT4KLQotCTxjb21wbGV4VHlwZSBuYW1lPSJNYWdhemluZVR5cGUiPgotCQk8Y29tcGxleENvbnRlbnQ+Ci0JCQk8cmVzdHJpY3Rpb24gYmFzZT0iYzpQdWJsaWNhdGlvblR5cGUiPgotCQkJCTxzZXF1ZW5jZT4KLQkJCQkJPGVsZW1lbnQgbmFtZT0idGl0bGUiIHR5cGU9InN0cmluZyIgLz4KLQkJCQkJPGVsZW1lbnQgbmFtZT0iYXV0aG9yIiB0eXBlPSJzdHJpbmciIG1pbk9jY3Vycz0iMCIKLQkJCQkJCW1heE9jY3Vycz0iMCIgLz4KLQkJCQkJPGVsZW1lbnQgbmFtZT0iZGF0ZSIgdHlwZT0iZ1llYXIiPjwvZWxlbWVudD4KLQkJCQk8L3NlcXVlbmNlPgotCQkJPC9yZXN0cmljdGlvbj4KLQkJPC9jb21wbGV4Q29udGVudD4KLQk8L2NvbXBsZXhUeXBlPgotCi0JPGVsZW1lbnQgbmFtZT0iUHVibGljYXRpb24iIHR5cGU9ImM6UHVibGljYXRpb25UeXBlIgotCQlhYnN0cmFjdD0idHJ1ZSI+Ci0JPC9lbGVtZW50PgotCi0JPGVsZW1lbnQgbmFtZT0iQm9vayIgdHlwZT0iYzpCb29rVHlwZSIKLQkJc3Vic3RpdHV0aW9uR3JvdXA9ImM6UHVibGljYXRpb24iPgotCTwvZWxlbWVudD4KLQotCTxlbGVtZW50IG5hbWU9Ik1hZ2F6aW5lIiB0eXBlPSJjOk1hZ2F6aW5lVHlwZSIKLQkJc3Vic3RpdHV0aW9uR3JvdXA9ImM6UHVibGljYXRpb24iPgotCTwvZWxlbWVudD4KLQotCTxlbGVtZW50IG5hbWU9IkNhdGFsb2d1ZSI+Ci0JCTxjb21wbGV4VHlwZT4KLQkJCTxzZXF1ZW5jZT4KLQkJCQk8ZWxlbWVudCByZWY9ImM6UHVibGljYXRpb24iIG1heE9jY3Vycz0idW5ib3VuZGVkIj48L2VsZW1lbnQ+Ci0JCQk8L3NlcXVlbmNlPgotCQk8L2NvbXBsZXhUeXBlPgotCTwvZWxlbWVudD4KLQotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUHVyY2hhc2VPcmRlci9QdXJjaGFzZU9yZGVyLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1B1cmNoYXNlT3JkZXIvUHVyY2hhc2VPcmRlci54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyYmQ3ZTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUHVyY2hhc2VPcmRlci9QdXJjaGFzZU9yZGVyLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cG86cHVyY2hhc2VPcmRlciBvcmRlckRhdGU9IjIwMDEtMDEtMDEiIHhtbG5zOnBvPSJodHRwOi8vd3d3LmlibS5jb20iIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5pYm0uY29tIFB1cmNoYXNlT3JkZXIueHNkIj4KLSAgPHNoaXBUbyBjb3VudHJ5PSJVUyI+Ci0gICAgPG5hbWU+QWxpY2UgU21pdGg8L25hbWU+Ci0gICAgPHN0cmVldD4xMjUgTWFwbGUgU3RyZWV0PC9zdHJlZXQ+Ci0gICAgPGNpdHk+TWlsbCBWYWxsZXk8L2NpdHk+Ci0gICAgPHN0YXRlPkNBPC9zdGF0ZT4KLSAgICA8emlwPjkwOTUyPC96aXA+Ci0gIDwvc2hpcFRvPgotICA8YmlsbFRvIGNvdW50cnk9IlVTIj4KLSAgICA8bmFtZT5Sb2JlcnQgU21pdGg8L25hbWU+Ci0gICAgPHN0cmVldD44IE9hayBBdmVudWU8L3N0cmVldD4KLSAgICA8Y2l0eT5PbGQgVG93bjwvY2l0eT4KLSAgICA8c3RhdGU+UEE8L3N0YXRlPgotICAgIDx6aXA+OTU4MTk8L3ppcD4KLSAgPC9iaWxsVG8+Ci0gIDxwbzpjb21tZW50Pkh1cnJ5LCBteSBsYXduIGlzIGdvaW5nIHdpbGQhPC9wbzpjb21tZW50PgotICA8aXRlbXM+Ci0gICAgPGl0ZW0gcGFydE51bT0iODcyLUFBIj4KLSAgICAgIDxwcm9kdWN0TmFtZT5MYXdubW93ZXI8L3Byb2R1Y3ROYW1lPgotICAgICAgPHF1YW50aXR5PjE8L3F1YW50aXR5PgotICAgICAgPFVTUHJpY2U+MTQ4Ljk1PC9VU1ByaWNlPgotICAgICAgPHBvOmNvbW1lbnQ+Q29uZmlybSB0aGlzIGlzIGVsZWN0cmljPC9wbzpjb21tZW50PgotICAgIDwvaXRlbT4KLSAgICA8aXRlbSBwYXJ0TnVtPSI5MjYtQUEiPgotICAgICAgPHByb2R1Y3ROYW1lPkJhYnkgTW9uaXRvcjwvcHJvZHVjdE5hbWU+Ci0gICAgICA8cXVhbnRpdHk+MTwvcXVhbnRpdHk+Ci0gICAgICA8VVNQcmljZT4zOS45ODwvVVNQcmljZT4KLSAgICAgIDxzaGlwRGF0ZT4yMDAxLTA3LTIxPC9zaGlwRGF0ZT4KLSAgICA8L2l0ZW0+Ci0gIDwvaXRlbXM+Ci08L3BvOnB1cmNoYXNlT3JkZXI+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QdXJjaGFzZU9yZGVyL1B1cmNoYXNlT3JkZXIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUHVyY2hhc2VPcmRlci9QdXJjaGFzZU9yZGVyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDBmYjA5NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QdXJjaGFzZU9yZGVyL1B1cmNoYXNlT3JkZXIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNzcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5pYm0uY29tIgotIHhtbG5zOnBvPSJodHRwOi8vd3d3LmlibS5jb20iPgotICAgIDxhbm5vdGF0aW9uPgotICAgICAgICA8ZG9jdW1lbnRhdGlvbiB4bWw6bGFuZz0iZW4iPgotICAgICAgICAgICAgUHVyY2hhc2Ugb3JkZXIgc2NoZW1hIGV4YW1wbGUgZnJvbSBYTUwgU2NoZW1hIFBhcnQgMDogUHJpbWVyCi0gICAgICAgIAotICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDEsIElCTSBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkCi0gICAgICAgICAgICBDb3B5cmlnaHQgMjAwMSwgV29ybGQgV2lkZSBXZWIgQ29uc29ydGl1bSwgCi0gICAgICAgICAgICAoTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSwgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZWV0IGVuIEF1dG9tYXRpcXVlLCBLZWlvIFVuaXZlcnNpdHkpLgotICAgICAgICAgICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgIDwvYW5ub3RhdGlvbj4KLQotICAgIDxlbGVtZW50IG5hbWU9InB1cmNoYXNlT3JkZXIiIHR5cGU9InBvOlB1cmNoYXNlT3JkZXJUeXBlIi8+Ci0KLSAgICA8ZWxlbWVudCBuYW1lPSJjb21tZW50IiB0eXBlPSJzdHJpbmciLz4KLQotICAgIDxjb21wbGV4VHlwZSBuYW1lPSJQdXJjaGFzZU9yZGVyVHlwZSI+Ci0gICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InNoaXBUbyIgdHlwZT0icG86VVNBZGRyZXNzIi8+Ci0gICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJiaWxsVG8iIHR5cGU9InBvOlVTQWRkcmVzcyIvPgotICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJwbzpjb21tZW50IiBtaW5PY2N1cnM9IjAiLz4KLSAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9Iml0ZW1zIiB0eXBlPSJwbzpJdGVtcyIvPgotICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im9yZGVyRGF0ZSIgdHlwZT0iZGF0ZSIvPgotICAgIDwvY29tcGxleFR5cGU+Ci0KLSAgICA8Y29tcGxleFR5cGUgbmFtZT0iVVNBZGRyZXNzIj4KLSAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0ibmFtZSIgdHlwZT0ic3RyaW5nIi8+Ci0gICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIHR5cGU9InN0cmluZyIvPgotICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iY2l0eSIgdHlwZT0ic3RyaW5nIi8+Ci0gICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJzdGF0ZSIgdHlwZT0icG86VVNTdGF0ZSIvPgotICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iemlwIiB0eXBlPSJkZWNpbWFsIi8+Ci0gICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY291bnRyeSIgdHlwZT0iTk1UT0tFTiIgZml4ZWQ9IlVTIi8+Ci0gICAgPC9jb21wbGV4VHlwZT4KLQotICAgIDxjb21wbGV4VHlwZSBuYW1lPSJJdGVtcyI+Ci0gICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9Iml0ZW0iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgICAgICAgICAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0icHJvZHVjdE5hbWUiIHR5cGU9InN0cmluZyIvPgotICAgICAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0icXVhbnRpdHkiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzaW1wbGVUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVzdHJpY3Rpb24gYmFzZT0icG9zaXRpdmVJbnRlZ2VyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXhFeGNsdXNpdmUgdmFsdWU9IjEwMCIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Jlc3RyaWN0aW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2ltcGxlVHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9IlVTUHJpY2UiIHR5cGU9ImRlY2ltYWwiLz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0icG86Y29tbWVudCIgbWluT2NjdXJzPSIwIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJzaGlwRGF0ZSIgdHlwZT0iZGF0ZSIgbWluT2NjdXJzPSIwIi8+Ci0gICAgICAgICAgICAgICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icGFydE51bSIgdHlwZT0icG86U0tVIiB1c2U9InJlcXVpcmVkIi8+Ci0gICAgICAgICAgICAgICAgPC9jb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwvZWxlbWVudD4KLSAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotCi0gICAgPHNpbXBsZVR5cGUgbmFtZT0iU0tVIj4KLSAgICAgICAgPHJlc3RyaWN0aW9uIGJhc2U9InN0cmluZyI+Ci0gICAgICAgICAgICA8cGF0dGVybiB2YWx1ZT0iXGR7M30tW0EtWl17Mn0iLz4KLSAgICAgICAgPC9yZXN0cmljdGlvbj4KLSAgICA8L3NpbXBsZVR5cGU+Ci0gICAgCi0gICAgPHNpbXBsZVR5cGUgbmFtZT0iVVNTdGF0ZSI+Ci0gICAgICAgIDxyZXN0cmljdGlvbiBiYXNlPSJzdHJpbmciPgotICAgICAgICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSJDQSI+PC9lbnVtZXJhdGlvbj4KLSAgICAgICAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0iUEEiPjwvZW51bWVyYXRpb24+Ci0gICAgICAgICAgICA8ZW51bWVyYXRpb24gdmFsdWU9IkFSIj48L2VudW1lcmF0aW9uPgotICAgICAgICA8L3Jlc3RyaWN0aW9uPgotICAgIDwvc2ltcGxlVHlwZT4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUHVyY2hhc2VPcmRlci9pbnRlcm5hdGlvbmFsL2FkZHJlc3MueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUHVyY2hhc2VPcmRlci9pbnRlcm5hdGlvbmFsL2FkZHJlc3MueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNmVhNDQyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1B1cmNoYXNlT3JkZXIvaW50ZXJuYXRpb25hbC9hZGRyZXNzLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLTxzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL0lQTyIKLSAgICAgICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotICAgICAgICB4bWxuczppcG89Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vSVBPIj4KLQotIDxhbm5vdGF0aW9uPgotICA8ZG9jdW1lbnRhdGlvbiB4bWw6bGFuZz0iZW4iPgotICAgQWRkcmVzc2VzIGZvciBJbnRlcm5hdGlvbmFsIFB1cmNoYXNlIG9yZGVyIHNjaGVtYQotICAgQ29weXJpZ2h0IDIwMDAgRXhhbXBsZS5jb20uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gIDwvZG9jdW1lbnRhdGlvbj4gCi0gPC9hbm5vdGF0aW9uPgotCi0gPGNvbXBsZXhUeXBlIG5hbWU9IkFkZHJlc3MiPgotICA8c2VxdWVuY2U+Ci0gICA8ZWxlbWVudCBuYW1lPSJuYW1lIiAgIHR5cGU9InN0cmluZyIvPgotICAgPGVsZW1lbnQgbmFtZT0ic3RyZWV0IiB0eXBlPSJzdHJpbmciLz4KLSAgIDxlbGVtZW50IG5hbWU9ImNpdHkiICAgdHlwZT0ic3RyaW5nIi8+Ci0gIDwvc2VxdWVuY2U+Ci0gPC9jb21wbGV4VHlwZT4KLQotIDxjb21wbGV4VHlwZSBuYW1lPSJVU0FkZHJlc3MiPgotICA8Y29tcGxleENvbnRlbnQ+Ci0gICA8ZXh0ZW5zaW9uIGJhc2U9ImlwbzpBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InN0YXRlIiB0eXBlPSJpcG86VVNTdGF0ZSIvPgotICAgICA8ZWxlbWVudCBuYW1lPSJ6aXAiICAgdHlwZT0icG9zaXRpdmVJbnRlZ2VyIi8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgIDwvZXh0ZW5zaW9uPgotICA8L2NvbXBsZXhDb250ZW50PgotIDwvY29tcGxleFR5cGU+Ci0KLSA8Y29tcGxleFR5cGUgbmFtZT0iVUtBZGRyZXNzIj4KLSAgPGNvbXBsZXhDb250ZW50PgotICAgPGV4dGVuc2lvbiBiYXNlPSJpcG86QWRkcmVzcyI+Ci0gICAgPHNlcXVlbmNlPgotICAgICA8ZWxlbWVudCBuYW1lPSJwb3N0Y29kZSIgdHlwZT0iaXBvOlVLUG9zdGNvZGUiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgIDxhdHRyaWJ1dGUgbmFtZT0iZXhwb3J0Q29kZSIgdHlwZT0icG9zaXRpdmVJbnRlZ2VyIiBmaXhlZD0iMSIvPgotICAgPC9leHRlbnNpb24+Ci0gIDwvY29tcGxleENvbnRlbnQ+Ci0gPC9jb21wbGV4VHlwZT4KLQotIDwhLS0gb3RoZXIgQWRkcmVzcyBkZXJpdmF0aW9ucyBmb3IgbW9yZSBjb3VudHJpZXMgLS0+IAotCi0gPHNpbXBsZVR5cGUgbmFtZT0iVVNTdGF0ZSI+Ci0gIDxyZXN0cmljdGlvbiBiYXNlPSJzdHJpbmciPgotICAgPGVudW1lcmF0aW9uIHZhbHVlPSJBSyIvPgotICAgPGVudW1lcmF0aW9uIHZhbHVlPSJBTCIvPgotICAgPGVudW1lcmF0aW9uIHZhbHVlPSJBUiIvPgotICAgPCEtLSBhbmQgc28gb24gLi4uIC0tPgotICA8L3Jlc3RyaWN0aW9uPgotIDwvc2ltcGxlVHlwZT4KLQotIDwhLS0gc2ltcGxlIHR5cGUgZGVmaW5pdGlvbiBmb3IgUG9zdGNvZGUgLS0+Ci0gPHNpbXBsZVR5cGUgbmFtZT0iUG9zdGNvZGUiPgotICA8cmVzdHJpY3Rpb24gYmFzZT0ic3RyaW5nIj4KLSAgPC9yZXN0cmljdGlvbj4KLSA8L3NpbXBsZVR5cGU+Ci0KLSA8IS0tIHNpbXBsZSB0eXBlIGRlZmluaXRpb24gZm9yIFVLUG9zdGNvZGUgLS0+Ci0gPHNpbXBsZVR5cGUgbmFtZT0iVUtQb3N0Y29kZSI+Ci0gIDxyZXN0cmljdGlvbiBiYXNlPSJpcG86UG9zdGNvZGUiPgotICAgIDxwYXR0ZXJuIHZhbHVlPSJbQS1aXXsyfVxkXHNcZFtBLVpdezJ9Ii8+Ci0gIDwvcmVzdHJpY3Rpb24+Ci0gPC9zaW1wbGVUeXBlPgotCi0KLTwvc2NoZW1hPgotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QdXJjaGFzZU9yZGVyL2ludGVybmF0aW9uYWwvaXBvLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1B1cmNoYXNlT3JkZXIvaW50ZXJuYXRpb25hbC9pcG8ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNDgzYWRlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1B1cmNoYXNlT3JkZXIvaW50ZXJuYXRpb25hbC9pcG8ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08aXBvOnB1cmNoYXNlT3JkZXIKLSAgb3JkZXJEYXRlPSIyMDAxLTAxLTAxIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczppcG89Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vSVBPIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vSVBPIGlwby54c2QgIj4KLQotICAgIDxzaGlwVG8gZXhwb3J0Q29kZT0iMSIgeHNpOnR5cGU9ImlwbzpVS0FkZHJlc3MiPgotICAgICAgICA8bmFtZT5IZWxlbiBab2U8L25hbWU+Ci0gICAgICAgIDxzdHJlZXQ+NDcgRWRlbiBTdHJlZXQ8L3N0cmVldD4KLSAgICAgICAgPGNpdHk+Q2FtYnJpZGdlPC9jaXR5PgotICAgICAgICA8cG9zdGNvZGU+Q0IxIDFKUjwvcG9zdGNvZGU+Ci0gICAgPC9zaGlwVG8+Ci0KLSAgICA8YmlsbFRvIHhzaTp0eXBlPSJpcG86VVNBZGRyZXNzIj4KLSAgICAgICAgPG5hbWU+Um9iZXJ0IFNtaXRoPC9uYW1lPgotICAgICAgICA8c3RyZWV0PjggT2FrIEF2ZW51ZTwvc3RyZWV0PgotICAgICAgICA8Y2l0eT5PbGQgVG93bjwvY2l0eT4KLSAgICAgICAgPHN0YXRlPkFSPC9zdGF0ZT4KLSAgICAgICAgPHppcD45NTgxOTwvemlwPgotICAgIDwvYmlsbFRvPgotCi0gICAgPGl0ZW1zPgotICAgICAgICA8aXRlbSBwYXJ0TnVtPSI4MzMtQUEiPgotICAgICAgICAgICAgPHByb2R1Y3ROYW1lPkxhcGlzIG5lY2tsYWNlPC9wcm9kdWN0TmFtZT4KLSAgICAgICAgICAgIDxxdWFudGl0eT4xPC9xdWFudGl0eT4KLSAgICAgICAgICAgIDxVU1ByaWNlPjk5Ljk1PC9VU1ByaWNlPgotICAgICAgICAgICAgPGlwbzpjb21tZW50PldhbnQgdGhpcyBmb3IgdGhlIGhvbGlkYXlzITwvaXBvOmNvbW1lbnQ+Ci0gICAgICAgICAgICA8c2hpcERhdGU+MTk5OS0xMi0wNTwvc2hpcERhdGU+Ci0gICAgICAgIDwvaXRlbT4KLSAgICA8L2l0ZW1zPgotPC9pcG86cHVyY2hhc2VPcmRlcj4KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUHVyY2hhc2VPcmRlci9pbnRlcm5hdGlvbmFsL2lwby54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QdXJjaGFzZU9yZGVyL2ludGVybmF0aW9uYWwvaXBvLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2E2M2QwMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QdXJjaGFzZU9yZGVyL2ludGVybmF0aW9uYWwvaXBvLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLTxzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL0lQTyIKLSAgICAgICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotICAgICAgICB4bWxuczppcG89Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vSVBPIj4KLQotIDxhbm5vdGF0aW9uPgotICA8ZG9jdW1lbnRhdGlvbiB4bWw6bGFuZz0iZW4iPgotICAgSW50ZXJuYXRpb25hbCBQdXJjaGFzZSBvcmRlciBzY2hlbWEgZm9yIEV4YW1wbGUuY29tCi0gICBDb3B5cmlnaHQgMjAwMCBFeGFtcGxlLmNvbS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAgPC9kb2N1bWVudGF0aW9uPiAKLSA8L2Fubm90YXRpb24+Ci0KLSA8IS0tIGluY2x1ZGUgYWRkcmVzcyBjb25zdHJ1Y3RzIC0tPgotIDxpbmNsdWRlCi0gIHNjaGVtYUxvY2F0aW9uPSJhZGRyZXNzLnhzZCIvPgotCi0gPGVsZW1lbnQgbmFtZT0icHVyY2hhc2VPcmRlciIgdHlwZT0iaXBvOlB1cmNoYXNlT3JkZXJUeXBlIi8+Ci0KLSA8ZWxlbWVudCBuYW1lPSJjb21tZW50IiB0eXBlPSJzdHJpbmciLz4KLQotIDxjb21wbGV4VHlwZSBuYW1lPSJQdXJjaGFzZU9yZGVyVHlwZSI+Ci0gIDxzZXF1ZW5jZT4KLSAgIDxlbGVtZW50IG5hbWU9InNoaXBUbyIgICAgIHR5cGU9ImlwbzpBZGRyZXNzIi8+Ci0gICA8ZWxlbWVudCBuYW1lPSJiaWxsVG8iICAgICB0eXBlPSJpcG86QWRkcmVzcyIvPgotICAgPGVsZW1lbnQgcmVmPSJpcG86Y29tbWVudCIgbWluT2NjdXJzPSIwIi8+Ci0gICA8ZWxlbWVudCBuYW1lPSJpdGVtcyIgICAgICB0eXBlPSJpcG86SXRlbXMiLz4KLSAgPC9zZXF1ZW5jZT4KLSAgPGF0dHJpYnV0ZSBuYW1lPSJvcmRlckRhdGUiIHR5cGU9ImRhdGUiLz4KLSA8L2NvbXBsZXhUeXBlPgotCi0gPGNvbXBsZXhUeXBlIG5hbWU9Ikl0ZW1zIj4KLSAgPHNlcXVlbmNlPgotICAgPGVsZW1lbnQgbmFtZT0iaXRlbSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJwcm9kdWN0TmFtZSIgdHlwZT0ic3RyaW5nIi8+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJxdWFudGl0eSI+Ci0gICAgICAgPHNpbXBsZVR5cGU+Ci0gICAgICAgIDxyZXN0cmljdGlvbiBiYXNlPSJwb3NpdGl2ZUludGVnZXIiPgotICAgICAgICAgPG1heEV4Y2x1c2l2ZSB2YWx1ZT0iMTAwIi8+Ci0gICAgICAgIDwvcmVzdHJpY3Rpb24+Ci0gICAgICAgPC9zaW1wbGVUeXBlPgotICAgICAgPC9lbGVtZW50PgotICAgICAgPGVsZW1lbnQgbmFtZT0iVVNQcmljZSIgICAgdHlwZT0iZGVjaW1hbCIvPgotICAgICAgPGVsZW1lbnQgcmVmPSJpcG86Y29tbWVudCIgbWluT2NjdXJzPSIwIi8+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJzaGlwRGF0ZSIgICB0eXBlPSJkYXRlIiBtaW5PY2N1cnM9IjAiLz4KLSAgICAgPC9zZXF1ZW5jZT4KLSAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwYXJ0TnVtIiB0eXBlPSJpcG86U0tVIiB1c2U9InJlcXVpcmVkIi8+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgIDwvZWxlbWVudD4KLSAgPC9zZXF1ZW5jZT4KLSA8L2NvbXBsZXhUeXBlPgotCi0gPHNpbXBsZVR5cGUgbmFtZT0iU0tVIj4KLSAgPHJlc3RyaWN0aW9uIGJhc2U9InN0cmluZyI+Ci0gICA8cGF0dGVybiB2YWx1ZT0iXGR7M30tW0EtWl17Mn0iLz4KLSAgPC9yZXN0cmljdGlvbj4KLSA8L3NpbXBsZVR5cGU+Ci0KLTwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1B1cmNoYXNlT3JkZXIvaW50ZXJuYXRpb25hbC9pcG9fLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1B1cmNoYXNlT3JkZXIvaW50ZXJuYXRpb25hbC9pcG9fLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDM2ZDQ5ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QdXJjaGFzZU9yZGVyL2ludGVybmF0aW9uYWwvaXBvXy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi08c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9JUE8iCi0gICAgICAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLSAgICAgICAgeG1sbnM6aXBvPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL0lQTyI+Ci0KLSA8YW5ub3RhdGlvbj4KLSAgPGRvY3VtZW50YXRpb24geG1sOmxhbmc9ImVuIj4KLSAgIEludGVybmF0aW9uYWwgUHVyY2hhc2Ugb3JkZXIgc2NoZW1hIGZvciBFeGFtcGxlLmNvbQotICAgQ29weXJpZ2h0IDIwMDAgRXhhbXBsZS5jb20uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gIDwvZG9jdW1lbnRhdGlvbj4gCi0gPC9hbm5vdGF0aW9uPgotCi0gPCEtLSBpbmNsdWRlIGFkZHJlc3MgY29uc3RydWN0cyAtLT4KLSA8aW5jbHVkZQotICBzY2hlbWFMb2NhdGlvbj0iYWRkcmVzc18ueHNkIi8+Ci0KLSA8ZWxlbWVudCBuYW1lPSJwdXJjaGFzZU9yZGVyIiB0eXBlPSJpcG86UHVyY2hhc2VPcmRlclR5cGUiLz4KLQotIDxlbGVtZW50IG5hbWU9ImNvbW1lbnQiIHR5cGU9InN0cmluZyIvPgotCi0gPGNvbXBsZXhUeXBlIG5hbWU9IlB1cmNoYXNlT3JkZXJUeXBlIj4KLSAgPHNlcXVlbmNlPgotICAgPGVsZW1lbnQgbmFtZT0ic2hpcFRvIiAgICAgdHlwZT0iaXBvOkFkZHJlc3MiLz4KLSAgIDxlbGVtZW50IG5hbWU9ImJpbGxUbyIgICAgIHR5cGU9ImlwbzpBZGRyZXNzIi8+Ci0gICA8ZWxlbWVudCByZWY9Imlwbzpjb21tZW50IiBtaW5PY2N1cnM9IjAiLz4KLSAgIDxlbGVtZW50IG5hbWU9Iml0ZW1zIiAgICAgIHR5cGU9ImlwbzpJdGVtcyIvPgotICA8L3NlcXVlbmNlPgotICA8YXR0cmlidXRlIG5hbWU9Im9yZGVyRGF0ZSIgdHlwZT0iZGF0ZSIvPgotIDwvY29tcGxleFR5cGU+Ci0KLSA8Y29tcGxleFR5cGUgbmFtZT0iSXRlbXMiPgotICA8c2VxdWVuY2U+Ci0gICA8ZWxlbWVudCBuYW1lPSJpdGVtIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9InByb2R1Y3ROYW1lIiB0eXBlPSJzdHJpbmciLz4KLSAgICAgIDxlbGVtZW50IG5hbWU9InF1YW50aXR5Ij4KLSAgICAgICA8c2ltcGxlVHlwZT4KLSAgICAgICAgPHJlc3RyaWN0aW9uIGJhc2U9InBvc2l0aXZlSW50ZWdlciI+Ci0gICAgICAgICA8bWF4RXhjbHVzaXZlIHZhbHVlPSIxMDAiLz4KLSAgICAgICAgPC9yZXN0cmljdGlvbj4KLSAgICAgICA8L3NpbXBsZVR5cGU+Ci0gICAgICA8L2VsZW1lbnQ+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJVU1ByaWNlIiAgICB0eXBlPSJkZWNpbWFsIi8+Ci0gICAgICA8ZWxlbWVudCByZWY9Imlwbzpjb21tZW50IiBtaW5PY2N1cnM9IjAiLz4KLSAgICAgIDxlbGVtZW50IG5hbWU9InNoaXBEYXRlIiAgIHR5cGU9ImRhdGUiIG1pbk9jY3Vycz0iMCIvPgotICAgICA8L3NlcXVlbmNlPgotICAgICA8YXR0cmlidXRlIG5hbWU9InBhcnROdW0iIHR5cGU9ImlwbzpTS1UiIHVzZT0icmVxdWlyZWQiLz4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICA8L3NlcXVlbmNlPgotIDwvY29tcGxleFR5cGU+Ci0KLSA8c2ltcGxlVHlwZSBuYW1lPSJTS1UiPgotICA8cmVzdHJpY3Rpb24gYmFzZT0ic3RyaW5nIj4KLSAgIDxwYXR0ZXJuIHZhbHVlPSJcZHszfS1bQS1aXXsyfSIvPgotICA8L3Jlc3RyaWN0aW9uPgotIDwvc2ltcGxlVHlwZT4KLQotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUHVyY2hhc2VPcmRlci9pbnRlcm5hdGlvbmFsL3JlcG9ydC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QdXJjaGFzZU9yZGVyL2ludGVybmF0aW9uYWwvcmVwb3J0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOThlZDZmMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QdXJjaGFzZU9yZGVyL2ludGVybmF0aW9uYWwvcmVwb3J0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08ZXg6cHVyY2hhc2VSZXBvcnQKLSAgICAgICAgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vUmVwb3J0IgotICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vUmVwb3J0IHJlcG9ydC54c2QiPgotICAgIDxleDpyZWdpb25zPgotICAgICAgICA8ZXg6emlwIGNvZGU9IjM5NDg3Ij4KLSAgICAgICAgICAgIDxleDpwYXJ0IG51bWJlcj0iMjkzLUFYIiBxdWFudGl0eT0iMyIvPgotICAgICAgICAgICAgPGV4OnBhcnQgbnVtYmVyPSIyOTMtTEQiIHF1YW50aXR5PSIzIi8+Ci0gICAgICAgIDwvZXg6emlwPgotICAgICAgICA8ZXg6emlwIGNvZGU9IjI5Mzg3Ij4KLSAgICAgICAgICAgIDxleDpwYXJ0IG51bWJlcj0iODk3LUpEIiBxdWFudGl0eT0iMzAiLz4KLSAgICAgICAgPC9leDp6aXA+Ci0gICAgICAgIDxleDp6aXAgY29kZT0iMTkyODUiPgotICAgICAgICAgICAgPGV4OnBhcnQgbnVtYmVyPSIxMjMtQ0siIHF1YW50aXR5PSIxOSIvPgotICAgICAgICAgICAgPGV4OnBhcnQgbnVtYmVyPSIxNzUtRlEiIHF1YW50aXR5PSI4Ii8+Ci0gICAgICAgIDwvZXg6emlwPgotICAgIDwvZXg6cmVnaW9ucz4KLQotICAgIDxleDpwYXJ0cz4KLSAgICAgICAgPGV4OnBhcnQgbnVtYmVyPSIyOTMtQVgiLz4KLSAgICAgICAgPGV4OnBhcnQgbnVtYmVyPSI4OTctSkQiLz4KLSAgICAgICAgPGV4OnBhcnQgbnVtYmVyPSIxMjMtQ0siLz4KLSAgICAgICAgPGV4OnBhcnQgbnVtYmVyPSIyOTMtTEQiLz4KLSAgICAgICAgPGV4OnBhcnQgbnVtYmVyPSIxNzUtRlEiLz4KLSAgICA8L2V4OnBhcnRzPgotPC9leDpwdXJjaGFzZVJlcG9ydD4KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUHVyY2hhc2VPcmRlci9pbnRlcm5hdGlvbmFsL3JlcG9ydC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QdXJjaGFzZU9yZGVyL2ludGVybmF0aW9uYWwvcmVwb3J0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGVlN2NhNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QdXJjaGFzZU9yZGVyL2ludGVybmF0aW9uYWwvcmVwb3J0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vUmVwb3J0IgotIHhtbG5zOnI9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vUmVwb3J0IgotIHhtbG5zOnhpcG89Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vSVBPIgotIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIj4KLSAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICBUaGUgUmVwb3J0IFNjaGVtYSBmcm9tIFhNTCBTY2hlbWEgUGFydCAwOiBQcmltZXIKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDEsIElCTSBDb3JwLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDEsIFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0gCi0gICAgICAgICAgICAoTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSwgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCBlbiBBdXRvbWF0aXF1ZSwgS2VpbyBVbml2ZXJzaXR5KS4KLSAgICAgICAgICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICA8L2Fubm90YXRpb24+Ci0KLSAgICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9JUE8iIHNjaGVtYUxvY2F0aW9uPSJpcG8ueHNkIi8+Ci0KLSAgICA8ZWxlbWVudCBuYW1lPSJwdXJjaGFzZVJlcG9ydCI+Ci0gICAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJyZWdpb25zIiB0eXBlPSJyOlJlZ2lvbnNUeXBlIi8+Ci0gICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0icGFydHMiIHR5cGU9InI6UGFydHNUeXBlIi8+Ci0gICAgICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwZXJpb2QiIHR5cGU9ImR1cmF0aW9uIi8+Ci0gICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBlcmlvZEVuZGluZyIgdHlwZT0iZGF0ZSIvPgotICAgICAgICA8L2NvbXBsZXhUeXBlPgotICAgICAgICAKLSAgICAgICAgPHVuaXF1ZSBuYW1lPSJkdW1teTEiPgotICAgICAgICAgICAgPHNlbGVjdG9yIHhwYXRoPSJyOnJlZ2lvbnMvcjp6aXAiLz4KLSAgICAgICAgICAgIDxmaWVsZCB4cGF0aD0iQGNvZGUiLz4KLSAgICAgICAgPC91bmlxdWU+Ci0gICAgICAgIAotICAgICAgICA8a2V5IG5hbWU9InBOdW1LZXkiPgotICAgICAgICAgICAgPHNlbGVjdG9yIHhwYXRoPSJyOnBhcnRzL3I6cGFydCIvPgotICAgICAgICAgICAgPGZpZWxkIHhwYXRoPSJAbnVtYmVyIi8+Ci0gICAgICAgIDwva2V5PgotICAgICAgICA8a2V5cmVmIG5hbWU9ImR1bW15MiIgcmVmZXI9InI6cE51bUtleSI+Ci0gICAgICAgICAgICA8c2VsZWN0b3IgeHBhdGg9InI6cmVnaW9ucy9yOnppcC9yOnBhcnQiLz4KLSAgICAgICAgICAgIDxmaWVsZCB4cGF0aD0iQG51bWJlciIvPgotICAgICAgICA8L2tleXJlZj4KLSAgICA8L2VsZW1lbnQ+Ci0KLSAgICA8Y29tcGxleFR5cGUgbmFtZT0iUmVnaW9uc1R5cGUiPgotICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJ6aXAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICAgICAgICAgICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InBhcnQiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb21wbGV4Q29udGVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZXN0cmljdGlvbiBiYXNlPSJhbnlUeXBlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im51bWJlciIgdHlwZT0ieGlwbzpTS1UiLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9InF1YW50aXR5IiB0eXBlPSJwb3NpdGl2ZUludGVnZXIiLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcmVzdHJpY3Rpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY29tcGxleENvbnRlbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJjb2RlIiB0eXBlPSJwb3NpdGl2ZUludGVnZXIiLz4KLSAgICAgICAgICAgICAgICA8L2NvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC9lbGVtZW50PgotICAgICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0KLSAgICA8Y29tcGxleFR5cGUgbmFtZT0iUGFydHNUeXBlIj4KLSAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0icGFydCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgICAgICAgICAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHNpbXBsZUNvbnRlbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8ZXh0ZW5zaW9uIGJhc2U9InN0cmluZyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJudW1iZXIiIHR5cGU9InhpcG86U0tVIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2V4dGVuc2lvbj4KLSAgICAgICAgICAgICAgICAgICAgPC9zaW1wbGVDb250ZW50PgotICAgICAgICAgICAgICAgIDwvY29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8L2VsZW1lbnQ+Ci0gICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUHVyY2hhc2VPcmRlci9pbnRlcm5hdGlvbmFsL3JlcG9ydF8ueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUHVyY2hhc2VPcmRlci9pbnRlcm5hdGlvbmFsL3JlcG9ydF8ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDM0Y2UxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1B1cmNoYXNlT3JkZXIvaW50ZXJuYXRpb25hbC9yZXBvcnRfLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08ZXg6cHVyY2hhc2VSZXBvcnQKLSAgICAgICAgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vUmVwb3J0IgotICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vUmVwb3J0Ij4KLSAgICA8ZXg6cmVnaW9ucz4KLSAgICAgICAgPGV4OnppcCBjb2RlPSIzOTQ4NyI+Ci0gICAgICAgICAgICA8ZXg6cGFydCBudW1iZXI9IjI5My1BWCIgcXVhbnRpdHk9IjMiLz4KLSAgICAgICAgICAgIDxleDpwYXJ0IG51bWJlcj0iMjkzLUxEIiBxdWFudGl0eT0iMyIvPgotICAgICAgICA8L2V4OnppcD4KLSAgICAgICAgPGV4OnppcCBjb2RlPSIyOTM4NyI+Ci0gICAgICAgICAgICA8ZXg6cGFydCBudW1iZXI9Ijg5Ny1KRCIgcXVhbnRpdHk9IjMwIi8+Ci0gICAgICAgIDwvZXg6emlwPgotICAgICAgICA8ZXg6emlwIGNvZGU9IjE5Mjg1Ij4KLSAgICAgICAgICAgIDxleDpwYXJ0IG51bWJlcj0iMTIzLUNLIiBxdWFudGl0eT0iMTkiLz4KLSAgICAgICAgICAgIDxleDpwYXJ0IG51bWJlcj0iMTc1LUZRIiBxdWFudGl0eT0iOCIvPgotICAgICAgICA8L2V4OnppcD4KLSAgICA8L2V4OnJlZ2lvbnM+Ci0KLSAgICA8ZXg6cGFydHM+Ci0gICAgICAgIDxleDpwYXJ0IG51bWJlcj0iMjkzLUFYIi8+Ci0gICAgICAgIDxleDpwYXJ0IG51bWJlcj0iODk3LUpEIi8+Ci0gICAgICAgIDxleDpwYXJ0IG51bWJlcj0iMTIzLUNLIi8+Ci0gICAgICAgIDxleDpwYXJ0IG51bWJlcj0iMjkzLUxEIi8+Ci0gICAgICAgIDxleDpwYXJ0IG51bWJlcj0iMTc1LUZRIi8+Ci0gICAgPC9leDpwYXJ0cz4KLTwvZXg6cHVyY2hhc2VSZXBvcnQ+Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1B1cmNoYXNlT3JkZXIvaW50ZXJuYXRpb25hbC9yZXBvcnRfLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1B1cmNoYXNlT3JkZXIvaW50ZXJuYXRpb25hbC9yZXBvcnRfLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2IyODRiZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QdXJjaGFzZU9yZGVyL2ludGVybmF0aW9uYWwvcmVwb3J0Xy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0gdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL1JlcG9ydCIKLSB4bWxuczpyPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL1JlcG9ydCIKLSB4bWxuczp4aXBvPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL0lQTyIKLSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+Ci0gICAgPGFubm90YXRpb24+Ci0gICAgICAgIDxkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgVGhlIFJlcG9ydCBTY2hlbWEgZnJvbSBYTUwgU2NoZW1hIFBhcnQgMDogUHJpbWVyCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIENvcHlyaWdodCAyMDAxLCBJQk0gQ29ycC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAgICAgICAgICAgIENvcHlyaWdodCAyMDAxLCBXb3JsZCBXaWRlIFdlYiBDb25zb3J0aXVtIAotICAgICAgICAgICAgKE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ksIEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgZW4gQXV0b21hdGlxdWUsIEtlaW8gVW5pdmVyc2l0eSkuCi0gICAgICAgICAgICBBbGwgUmlnaHRzIFJlc2VydmVkLgotICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgPC9hbm5vdGF0aW9uPgotCi0gICAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vSVBPIiBzY2hlbWFMb2NhdGlvbj0iaXBvX18ueHNkIi8+Ci0KLSAgICA8ZWxlbWVudCBuYW1lPSJwdXJjaGFzZVJlcG9ydCI+Ci0gICAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJyZWdpb25zIiB0eXBlPSJyOlJlZ2lvbnNUeXBlIi8+Ci0gICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0icGFydHMiIHR5cGU9InI6UGFydHNUeXBlIi8+Ci0gICAgICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwZXJpb2QiIHR5cGU9ImR1cmF0aW9uIi8+Ci0gICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBlcmlvZEVuZGluZyIgdHlwZT0iZGF0ZSIvPgotICAgICAgICA8L2NvbXBsZXhUeXBlPgotICAgICAgICAKLSAgICAgICAgPHVuaXF1ZSBuYW1lPSJkdW1teTEiPgotICAgICAgICAgICAgPHNlbGVjdG9yIHhwYXRoPSJyOnJlZ2lvbnMvcjp6aXAiLz4KLSAgICAgICAgICAgIDxmaWVsZCB4cGF0aD0iQGNvZGUiLz4KLSAgICAgICAgPC91bmlxdWU+Ci0gICAgICAgIAotICAgICAgICA8a2V5IG5hbWU9InBOdW1LZXkiPgotICAgICAgICAgICAgPHNlbGVjdG9yIHhwYXRoPSJyOnBhcnRzL3I6cGFydCIvPgotICAgICAgICAgICAgPGZpZWxkIHhwYXRoPSJAbnVtYmVyIi8+Ci0gICAgICAgIDwva2V5PgotICAgICAgICA8a2V5cmVmIG5hbWU9ImR1bW15MiIgcmVmZXI9InI6cE51bUtleSI+Ci0gICAgICAgICAgICA8c2VsZWN0b3IgeHBhdGg9InI6cmVnaW9ucy9yOnppcC9yOnBhcnQiLz4KLSAgICAgICAgICAgIDxmaWVsZCB4cGF0aD0iQG51bWJlciIvPgotICAgICAgICA8L2tleXJlZj4KLSAgICA8L2VsZW1lbnQ+Ci0KLSAgICA8Y29tcGxleFR5cGUgbmFtZT0iUmVnaW9uc1R5cGUiPgotICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJ6aXAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICAgICAgICAgICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InBhcnQiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb21wbGV4Q29udGVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZXN0cmljdGlvbiBiYXNlPSJhbnlUeXBlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im51bWJlciIgdHlwZT0ieGlwbzpTS1UiLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9InF1YW50aXR5IiB0eXBlPSJwb3NpdGl2ZUludGVnZXIiLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcmVzdHJpY3Rpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY29tcGxleENvbnRlbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJjb2RlIiB0eXBlPSJwb3NpdGl2ZUludGVnZXIiLz4KLSAgICAgICAgICAgICAgICA8L2NvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC9lbGVtZW50PgotICAgICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0KLSAgICA8Y29tcGxleFR5cGUgbmFtZT0iUGFydHNUeXBlIj4KLSAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0icGFydCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgICAgICAgICAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHNpbXBsZUNvbnRlbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8ZXh0ZW5zaW9uIGJhc2U9InN0cmluZyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJudW1iZXIiIHR5cGU9InhpcG86U0tVIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2V4dGVuc2lvbj4KLSAgICAgICAgICAgICAgICAgICAgPC9zaW1wbGVDb250ZW50PgotICAgICAgICAgICAgICAgIDwvY29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8L2VsZW1lbnQ+Ci0gICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvY2F0YWxvZy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9jYXRhbG9nLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjAwYzgyYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9jYXRhbG9nLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE5NiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHhzOnNjaGVtYSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0gICAgICAgICAgIHhtbG5zOmVyPSJodHRwOi8vb2FzaXMubmFtZXMudGMuZW50aXR5LnhtbG5zLnhtbC5jYXRhbG9nIgotICAgICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9vYXNpcy5uYW1lcy50Yy5lbnRpdHkueG1sbnMueG1sLmNhdGFsb2ciCi0gICAgICAgICAgIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIj4KLQotICA8IS0tICRJZDogY2F0YWxvZy54c2QsdiAxLjEgMjAwNS8wNi8yNCAwNDoxNzo1MCBjc2FsdGVyIEV4cCAkIC0tPgotCi0gIDx4czpzaW1wbGVUeXBlIG5hbWU9InB1YklkQ2hhcnMiPgotICAgIDwhLS0gQSBzdHJpbmcgb2YgdGhlIGNoYXJhY3RlcnMgZGVmaW5lZCBhcyBwdWJJZENoYXIgaW4gcHJvZHVjdGlvbiAxMwotICAgICAgICAgb2YgdGhlIFNlY29uZCBFZGl0aW9uIG9mIHRoZSBYTUwgMS4wIFJlY29tbWVuZGF0aW9uLiBEb2VzIG5vdCBpbmNsdWRlCi0gICAgICAgICB0aGUgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIGJlY2F1c2UgdGhleSdyZSBub3JtYWxpemVkIGJ5IFhNTCBwYXJzaW5nLiAtLT4KLSAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4KLSAgICAgIDx4czpwYXR0ZXJuIHZhbHVlPSJbYVwtekFcLVowXC05XC0nKCkrLC4vOj0/OyEqI0AkXyVdKiIvPgotICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6c2ltcGxlVHlwZT4KLQotICA8eHM6c2ltcGxlVHlwZSBuYW1lPSdwdWJsaWNJZGVudGlmaWVyJz4KLSAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0iZXI6cHViSWRDaGFycyIvPgotICA8L3hzOnNpbXBsZVR5cGU+Ci0KLSAgPHhzOnNpbXBsZVR5cGUgbmFtZT0ncGFydGlhbFB1YmxpY0lkZW50aWZpZXInPgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSdlcjpwdWJJZENoYXJzJy8+Ci0gIDwveHM6c2ltcGxlVHlwZT4KLQotICA8eHM6c2ltcGxlVHlwZSBuYW1lPSdzeXN0ZW1PclB1YmxpYyc+Ci0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9J3hzOnN0cmluZyc+Ci0gICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9J3N5c3RlbScvPgotICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSdwdWJsaWMnLz4KLSAgICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOnNpbXBsZVR5cGU+Ci0KLSAgPCEtLSBUaGUgZ2xvYmFsIGF0dHJpYnV0ZSB4bWw6YmFzZSBpcyBub3QgZXhwbGljaXRseSBkZWNsYXJlZDsgLS0+Ci0gIDwhLS0gaXQgaXMgYWxsb3dlZCBieSB0aGUgYW55QXR0cmlidXRlIGRlY2xhcmF0aW9ucy4gLS0+Ci0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9J2NhdGFsb2cnPgotICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPScxJyBtYXhPY2N1cnM9J3VuYm91bmRlZCc+Ci0gICAgICA8eHM6ZWxlbWVudCByZWY9J2VyOnB1YmxpYycvPgotICAgICAgPHhzOmVsZW1lbnQgcmVmPSdlcjpzeXN0ZW0nLz4KLSAgICAgIDx4czplbGVtZW50IHJlZj0nZXI6dXJpJy8+Ci0gICAgICA8eHM6ZWxlbWVudCByZWY9J2VyOnJld3JpdGVTeXN0ZW0nLz4KLSAgICAgIDx4czplbGVtZW50IHJlZj0nZXI6cmV3cml0ZVVSSScvPgotICAgICAgPHhzOmVsZW1lbnQgcmVmPSdlcjpkZWxlZ2F0ZVB1YmxpYycvPgotICAgICAgPHhzOmVsZW1lbnQgcmVmPSdlcjpkZWxlZ2F0ZVN5c3RlbScvPgotICAgICAgPHhzOmVsZW1lbnQgcmVmPSdlcjpkZWxlZ2F0ZVVSSScvPgotICAgICAgPHhzOmVsZW1lbnQgcmVmPSdlcjpuZXh0Q2F0YWxvZycvPgotICAgICAgPHhzOmVsZW1lbnQgcmVmPSdlcjpncm91cCcvPgotICAgICAgPHhzOmFueSBuYW1lc3BhY2U9JyMjb3RoZXInIHByb2Nlc3NDb250ZW50cz0nc2tpcCcvPgotICAgIDwveHM6Y2hvaWNlPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0naWQnIHR5cGU9J3hzOklEJy8+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSdwcmVmZXInIHR5cGU9J2VyOnN5c3RlbU9yUHVibGljJy8+Ci0gICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9J3B1YmxpYyc+Ci0gICAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmFueVR5cGUiPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InB1YmxpY0lkIiB0eXBlPSJlcjpwdWJsaWNJZGVudGlmaWVyIgotICAgICAgICAgICAgICAgICAgICAgICB1c2U9InJlcXVpcmVkIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idXJpIiB0eXBlPSJ4czphbnlVUkkiIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSdpZCcgdHlwZT0neHM6SUQnLz4KLSAgICAgICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9J3N5c3RlbSc+Ci0gICAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmFueVR5cGUiPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InN5c3RlbUlkIiB0eXBlPSJ4czpzdHJpbmciCi0gICAgICAgICAgICAgICAgICAgICAgIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ1cmkiIHR5cGU9InhzOmFueVVSSSIgdXNlPSJyZXF1aXJlZCIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9J2lkJyB0eXBlPSd4czpJRCcvPgotICAgICAgICA8eHM6YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KLSAgICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLQotICA8eHM6Y29tcGxleFR5cGUgbmFtZT0ndXJpJz4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6YW55VHlwZSI+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHM6YW55VVJJIgotICAgICAgICAgICAgICAgICAgICAgICB1c2U9InJlcXVpcmVkIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idXJpIiB0eXBlPSJ4czphbnlVUkkiIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSdpZCcgdHlwZT0neHM6SUQnLz4KLSAgICAgICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9J3Jld3JpdGVTeXN0ZW0nPgotICAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czphbnlUeXBlIj4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzeXN0ZW1JZFN0YXJ0U3RyaW5nIgotICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJ4czpzdHJpbmciCi0gICAgICAgICAgICAgICAgICAgICAgIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJyZXdyaXRlUHJlZml4IiB0eXBlPSJ4czpzdHJpbmciIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSdpZCcgdHlwZT0neHM6SUQnLz4KLSAgICAgICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9J3Jld3JpdGVVUkknPgotICAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czphbnlUeXBlIj4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ1cmlJZFN0YXJ0U3RyaW5nIgotICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJ4czpzdHJpbmciCi0gICAgICAgICAgICAgICAgICAgICAgIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJyZXdyaXRlUHJlZml4IiB0eXBlPSJ4czpzdHJpbmciIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSdpZCcgdHlwZT0neHM6SUQnLz4KLSAgICAgICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9J2RlbGVnYXRlUHVibGljJz4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6YW55VHlwZSI+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icHVibGljSWRTdGFydFN0cmluZyIKLSAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0iZXI6cGFydGlhbFB1YmxpY0lkZW50aWZpZXIiCi0gICAgICAgICAgICAgICAgICAgICAgIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjYXRhbG9nIiB0eXBlPSJ4czphbnlVUkkiIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSdpZCcgdHlwZT0neHM6SUQnLz4KLSAgICAgICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9J2RlbGVnYXRlU3lzdGVtJz4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6YW55VHlwZSI+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic3lzdGVtSWRTdGFydFN0cmluZyIKLSAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0ieHM6c3RyaW5nIgotICAgICAgICAgICAgICAgICAgICAgICB1c2U9InJlcXVpcmVkIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2F0YWxvZyIgdHlwZT0ieHM6YW55VVJJIiB1c2U9InJlcXVpcmVkIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0naWQnIHR5cGU9J3hzOklEJy8+Ci0gICAgICAgIDx4czphbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPgotICAgICAgPC94czpyZXN0cmljdGlvbj4KLSAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotCi0gIDx4czpjb21wbGV4VHlwZSBuYW1lPSdkZWxlZ2F0ZVVSSSc+Ci0gICAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmFueVR5cGUiPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InVyaVN0YXJ0U3RyaW5nIgotICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJ4czpzdHJpbmciCi0gICAgICAgICAgICAgICAgICAgICAgIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjYXRhbG9nIiB0eXBlPSJ4czphbnlVUkkiIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSdpZCcgdHlwZT0neHM6SUQnLz4KLSAgICAgICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9J25leHRDYXRhbG9nJz4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6YW55VHlwZSI+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY2F0YWxvZyIgdHlwZT0ieHM6YW55VVJJIiB1c2U9InJlcXVpcmVkIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0naWQnIHR5cGU9J3hzOklEJy8+Ci0gICAgICAgIDx4czphbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPgotICAgICAgPC94czpyZXN0cmljdGlvbj4KLSAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotCi0gIDx4czpjb21wbGV4VHlwZSBuYW1lPSdncm91cCc+Ci0gICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9JzEnIG1heE9jY3Vycz0ndW5ib3VuZGVkJz4KLSAgICAgIDx4czplbGVtZW50IHJlZj0nZXI6cHVibGljJy8+Ci0gICAgICA8eHM6ZWxlbWVudCByZWY9J2VyOnN5c3RlbScvPgotICAgICAgPHhzOmVsZW1lbnQgcmVmPSdlcjp1cmknLz4KLSAgICAgIDx4czplbGVtZW50IHJlZj0nZXI6cmV3cml0ZVN5c3RlbScvPgotICAgICAgPHhzOmVsZW1lbnQgcmVmPSdlcjpyZXdyaXRlVVJJJy8+Ci0gICAgICA8eHM6ZWxlbWVudCByZWY9J2VyOmRlbGVnYXRlUHVibGljJy8+Ci0gICAgICA8eHM6ZWxlbWVudCByZWY9J2VyOmRlbGVnYXRlU3lzdGVtJy8+Ci0gICAgICA8eHM6ZWxlbWVudCByZWY9J2VyOmRlbGVnYXRlVVJJJy8+Ci0gICAgICA8eHM6ZWxlbWVudCByZWY9J2VyOm5leHRDYXRhbG9nJy8+Ci0gICAgICA8eHM6YW55IG5hbWVzcGFjZT0nIyNvdGhlcicgcHJvY2Vzc0NvbnRlbnRzPSdza2lwJy8+Ci0gICAgPC94czpjaG9pY2U+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSdwcmVmZXInIHR5cGU9J2VyOnN5c3RlbU9yUHVibGljJy8+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSdpZCcgdHlwZT0neHM6SUQnLz4KLSAgICA8eHM6YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KLSAgPC94czpjb21wbGV4VHlwZT4KLQotICA8eHM6ZWxlbWVudCBuYW1lPSJjYXRhbG9nIiB0eXBlPSJlcjpjYXRhbG9nIi8+Ci0gIDx4czplbGVtZW50IG5hbWU9InB1YmxpYyIgdHlwZT0iZXI6cHVibGljIi8+Ci0gIDx4czplbGVtZW50IG5hbWU9InN5c3RlbSIgdHlwZT0iZXI6c3lzdGVtIi8+Ci0gIDx4czplbGVtZW50IG5hbWU9InVyaSIgdHlwZT0iZXI6dXJpIi8+Ci0gIDx4czplbGVtZW50IG5hbWU9InJld3JpdGVTeXN0ZW0iIHR5cGU9ImVyOnJld3JpdGVTeXN0ZW0iLz4KLSAgPHhzOmVsZW1lbnQgbmFtZT0icmV3cml0ZVVSSSIgdHlwZT0iZXI6cmV3cml0ZVVSSSIvPgotICA8eHM6ZWxlbWVudCBuYW1lPSJkZWxlZ2F0ZVB1YmxpYyIgdHlwZT0iZXI6ZGVsZWdhdGVQdWJsaWMiLz4KLSAgPHhzOmVsZW1lbnQgbmFtZT0iZGVsZWdhdGVTeXN0ZW0iIHR5cGU9ImVyOmRlbGVnYXRlU3lzdGVtIi8+Ci0gIDx4czplbGVtZW50IG5hbWU9ImRlbGVnYXRlVVJJIiB0eXBlPSJlcjpkZWxlZ2F0ZVVSSSIvPgotICA8eHM6ZWxlbWVudCBuYW1lPSJuZXh0Q2F0YWxvZyIgdHlwZT0iZXI6bmV4dENhdGFsb2ciLz4KLSAgPHhzOmVsZW1lbnQgbmFtZT0iZ3JvdXAiIHR5cGU9ImVyOmdyb3VwIi8+Ci0KLTwveHM6c2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvY2F0YWxvZzEueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvY2F0YWxvZzEueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjRiYzE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2NhdGFsb2cxLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjYXRhbG9nIHhtbG5zPSJ1cm46b2FzaXM6bmFtZXM6dGM6ZW50aXR5OnhtbG5zOnhtbDpjYXRhbG9nIj4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iSW52b2ljZUlkX3Rlc3QiIHVyaT0iLi9JbnZvaWNlL0ludm9pY2UuZHRkIiB3ZWJVUkw9Imh0dHA6Ly93ZWJVUkwiLz4KLSAgPHN5c3RlbSBzeXN0ZW1JZD0iSW52b2ljZS5kdGQiIHVyaT0iLi9JbnZvaWNlL0ludm9pY2UuZHRkIiBjaGFjaGVkPSJ5ZXMiIHByb3BlcnR5PSJ2YWx1ZTEiLz4KLSAgPHVyaSBuYW1lPSJodHRwOi8vd3d3LnRlc3QuY29tL0ludm9pY2UuZHRkIiB1cmk9Ii4vSW52b2ljZS9JbnZvaWNlLmR0ZCIgY2hhY2hlZD0ibm8iIHByb3BlcnR5PSJ2YWx1ZTIiLz4KLSAgPG5leHRDYXRhbG9nIGNhdGFsb2c9ImNhdGFsb2cyLnhtbCIgaWQ9Im5leHRDYXRhbG9nMSIvPgotPC9jYXRhbG9nPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvY2F0YWxvZzIueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvY2F0YWxvZzIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODM5NTkxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2NhdGFsb2cyLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+IAotPGNhdGFsb2cgeG1sbnM9InVybjpvYXNpczpuYW1lczp0YzplbnRpdHk6eG1sbnM6eG1sOmNhdGFsb2ciPgotICA8cHVibGljIHB1YmxpY0lkPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL0NhdGFsb2d1ZV8wMDEiIHVyaT0iLi9QdWJsaWNhdGlvbkNhdGFsb2d1ZS9DYXRhbG9ndWUueHNkIiAvPiAKLSAgPHN5c3RlbSBzeXN0ZW1JZD0iQ2F0YWxvZ3VlLnhzZCIgdXJpPSIuL1B1YmxpY2F0aW9uQ2F0YWxvZ3VlL0NhdGFsb2d1ZS54c2QiIC8+IAotICA8dXJpIG5hbWU9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvQ2F0YWxvZ3VlLnhzZCIgdXJpPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL0NhdGFsb2d1ZS9DYXRhbG9ndWUueHNkIiAvPiAKLSAgPGdyb3VwIGlkPSJncm91cDEiIHByZWZlcj0ic3lzdGVtIj4KLSAgICA8cHVibGljIHB1YmxpY0lkPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL0NhdGFsb2d1ZV8wMDIiIHVyaT0iLi9QdWJsaWNhdGlvbkNhdGFsb2d1ZS9DYXRhbG9ndWUueHNkIiAvPiAKLSAgPC9ncm91cD4KLSAgPC9jYXRhbG9nPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2NhdGFsb2cyYmFrLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2NhdGFsb2cyYmFrLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjg2NjEzMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9jYXRhbG9nMmJhay54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2F0YWxvZyB4bWxucz0idXJuOm9hc2lzOm5hbWVzOnRjOmVudGl0eTp4bWxuczp4bWw6Y2F0YWxvZyI+Ci0gIDxwdWJsaWMgcHVibGljSWQ9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvQ2F0YWxvZ3VlIiB1cmk9Ii4vUHVibGljYXRpb25DYXRhbG9ndWUvQ2F0YWxvZ3VlLnhzZCIvPgotICA8c3lzdGVtIHN5c3RlbUlkPSJDYXRhbG9ndWUueHNkIiB1cmk9Ii4vUHVibGljYXRpb25DYXRhbG9ndWUvQ2F0YWxvZ3VlLnhzZCIvPgotICAgPGdyb3VwIGlkPSJncm91cDEiIHByZWZlcj0ic3lzdGVtIj4KLSAJCTx1cmkgbmFtZT0iaHR0cDovL0NhdGFsb2d1ZS54c2QiIHVyaT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9DYXRhbG9ndWUvQ2F0YWxvZ3VlLnhzZCIvPgotICAgPC9ncm91cD4KLTwvY2F0YWxvZz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2NvbXBhdGFiaWxpdHlUZXN0LnhtbGNhdGFsb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9jb21wYXRhYmlsaXR5VGVzdC54bWxjYXRhbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODg0NTUxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2NvbXBhdGFiaWxpdHlUZXN0LnhtbGNhdGFsb2cKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/Pg0KLTxYTUxDYXRhbG9nU2V0dGluZ3M+DQotICA8VXNlckVudHJpZXM+DQotICAgIDxVc2VyRW50cnkgVFlQRT0iUFVCTElDIiBJRD0iSW52b2ljZUlkIiANCi1VUkk9InBsYXRmb3JtOi9yZXNvdXJjZS9YTUxFeGFtcGxlcy9JbnZvaWNlMi9JbnZvaWNlLmR0ZCIvPg0KLSAgPC9Vc2VyRW50cmllcz4NCi08L1hNTENhdGFsb2dTZXR0aW5ncz4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9kZWxlZ2F0ZUFuZFJld3JpdGUvY2F0YWxvZy54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9kZWxlZ2F0ZUFuZFJld3JpdGUvY2F0YWxvZy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjNzk0YzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZGVsZWdhdGVBbmRSZXdyaXRlL2NhdGFsb2cueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08IURPQ1RZUEUgY2F0YWxvZyBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRW50aXR5IFJlc29sdXRpb24gWE1MIENhdGFsb2cgVjEuMC8vRU4iICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2NvbW1pdHRlZXMvZW50aXR5L3JlbGVhc2UvMS4wL2NhdGFsb2cuZHRkIj4KLTxjYXRhbG9nIHhtbG5zPSJ1cm46b2FzaXM6bmFtZXM6dGM6ZW50aXR5OnhtbG5zOnhtbDpjYXRhbG9nIj4KLSAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9FTlRJVElFUyBEb2NCb29rIFhNTCIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUvc2dtbC9kb2Nib29rL3htbGNhdGFsb2ciLz4KLSAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwiIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3NnbWwvZG9jYm9vay94bWxjYXRhbG9nIi8+Ci0gIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSJJU08gODg3OToxOTg2IiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS9zZ21sL2RvY2Jvb2sveG1sY2F0YWxvZyIvPgotICA8ZGVsZWdhdGVTeXN0ZW0gc3lzdGVtSWRTdGFydFN0cmluZz0iaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rLyIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUvc2dtbC9kb2Nib29rL3htbGNhdGFsb2ciLz4KLSAgPGRlbGVnYXRlVVJJIHVyaVN0YXJ0U3RyaW5nPSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2svIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS9zZ21sL2RvY2Jvb2sveG1sY2F0YWxvZyIvPgotICA8cmV3cml0ZVN5c3RlbSBzeXN0ZW1JZFN0YXJ0U3RyaW5nPSJodHRwOi8vc2Nyb2xsa2VlcGVyLnNvdXJjZWZvcmdlLm5ldC9kdGRzL3Njcm9sbGtlZXBlci1vbWYtMS4wL3Njcm9sbGtlZXBlci1vbWYuZHRkIiByZXdyaXRlUHJlZml4PSIvdXNyL3NoYXJlL3htbC9zY3JvbGxrZWVwZXIvZHRkcy9zY3JvbGxrZWVwZXItb21mLmR0ZCIvPgotICA8cmV3cml0ZVVSSSB1cmlTdGFydFN0cmluZz0iaHR0cDovL3Njcm9sbGtlZXBlci5zb3VyY2Vmb3JnZS5uZXQvZHRkcy9zY3JvbGxrZWVwZXItb21mLTEuMC9zY3JvbGxrZWVwZXItb21mLmR0ZCIgcmV3cml0ZVByZWZpeD0iL3Vzci9zaGFyZS94bWwvc2Nyb2xsa2VlcGVyL2R0ZHMvc2Nyb2xsa2VlcGVyLW9tZi5kdGQiLz4KLTwvY2F0YWxvZz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2RlbGV0ZW1lY2F0YWxvZy54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9kZWxldGVtZWNhdGFsb2cueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjRiYzE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2RlbGV0ZW1lY2F0YWxvZy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2F0YWxvZyB4bWxucz0idXJuOm9hc2lzOm5hbWVzOnRjOmVudGl0eTp4bWxuczp4bWw6Y2F0YWxvZyI+Ci0gIDxwdWJsaWMgcHVibGljSWQ9Ikludm9pY2VJZF90ZXN0IiB1cmk9Ii4vSW52b2ljZS9JbnZvaWNlLmR0ZCIgd2ViVVJMPSJodHRwOi8vd2ViVVJMIi8+Ci0gIDxzeXN0ZW0gc3lzdGVtSWQ9Ikludm9pY2UuZHRkIiB1cmk9Ii4vSW52b2ljZS9JbnZvaWNlLmR0ZCIgY2hhY2hlZD0ieWVzIiBwcm9wZXJ0eT0idmFsdWUxIi8+Ci0gIDx1cmkgbmFtZT0iaHR0cDovL3d3dy50ZXN0LmNvbS9JbnZvaWNlLmR0ZCIgdXJpPSIuL0ludm9pY2UvSW52b2ljZS5kdGQiIGNoYWNoZWQ9Im5vIiBwcm9wZXJ0eT0idmFsdWUyIi8+Ci0gIDxuZXh0Q2F0YWxvZyBjYXRhbG9nPSJjYXRhbG9nMi54bWwiIGlkPSJuZXh0Q2F0YWxvZzEiLz4KLTwvY2F0YWxvZz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2RvY2Jvb2sveG1sY2F0YWxvZy54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9kb2Nib29rL3htbGNhdGFsb2cueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjgzZGVlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2RvY2Jvb2sveG1sY2F0YWxvZy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTwhRE9DVFlQRSBjYXRhbG9nIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBFbnRpdHkgUmVzb2x1dGlvbiBYTUwgQ2F0YWxvZyBWMS4wLy9FTiIgImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvY29tbWl0dGVlcy9lbnRpdHkvcmVsZWFzZS8xLjAvY2F0YWxvZy5kdGQiPgotPGNhdGFsb2cgeG1sbnM9InVybjpvYXNpczpuYW1lczp0YzplbnRpdHk6eG1sbnM6eG1sOmNhdGFsb2ciPgotICA8cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBQdWJsaXNoaW5nLy9FTiIgdXJpPSJ4bWwtZHRkLTQuMi0xLjAtMTcuMi9lbnQvaXNvLXB1Yi5lbnQiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgR3JlZWsgTGV0dGVycy8vRU4iIHVyaT0ieG1sLWR0ZC00LjItMS4wLTE3LjIvZW50L2lzby1ncmsxLmVudCIvPgotICA8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRUxFTUVOVFMgRG9jQm9vayBYTUwgSW5mb3JtYXRpb24gUG9vbCBWNC4xLjIvL0VOIiB1cmk9InhtbC1kdGQtNC4xLjItMS4wLTE3LjIvZGJwb29seC5tb2QiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQm94IGFuZCBMaW5lIERyYXdpbmcvL0VOIiB1cmk9InhtbC1kdGQtNC4yLTEuMC0xNy4yL2VudC9pc28tYm94LmVudCIvPgotICA8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjEuMi8vRU4iIHVyaT0ieG1sLWR0ZC00LjEuMi0xLjAtMTcuMi9kb2Nib29reC5kdGQiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgR3JlZWsgU3ltYm9scy8vRU4iIHVyaT0ieG1sLWR0ZC00LjItMS4wLTE3LjIvZW50L2lzby1ncmszLmVudCIvPgotICA8cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IE5lZ2F0ZWQgUmVsYXRpb25zLy9FTiIgdXJpPSJ4bWwtZHRkLTQuMi0xLjAtMTcuMi9lbnQvaXNvLWFtc24uZW50Ii8+Ci0gIDxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIE51bWVyaWMgYW5kIFNwZWNpYWwgR3JhcGhpYy8vRU4iIHVyaT0ieG1sLWR0ZC00LjItMS4wLTE3LjIvZW50L2lzby1udW0uZW50Ii8+Ci0gIDxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9FTlRJVElFUyBEb2NCb29rIFhNTCBDaGFyYWN0ZXIgRW50aXRpZXMgVjQuMS4yLy9FTiIgdXJpPSJ4bWwtZHRkLTQuMS4yLTEuMC0xNy4yL2RiY2VudHgubW9kIi8+Ci0gIDxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFsdGVybmF0aXZlIEdyZWVrIFN5bWJvbHMvL0VOIiB1cmk9InhtbC1kdGQtNC4yLTEuMC0xNy4yL2VudC9pc28tZ3JrNC5lbnQiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iLS8vT0FTSVMvL0VOVElUSUVTIERvY0Jvb2sgWE1MIE5vdGF0aW9ucyBWNC4xLjIvL0VOIiB1cmk9InhtbC1kdGQtNC4xLjItMS4wLTE3LjIvZGJub3RueC5tb2QiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgRGlhY3JpdGljYWwgTWFya3MvL0VOIiB1cmk9InhtbC1kdGQtNC4yLTEuMC0xNy4yL2VudC9pc28tZGlhLmVudCIvPgotICA8cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBNb25vdG9uaWtvIEdyZWVrLy9FTiIgdXJpPSJ4bWwtZHRkLTQuMi0xLjAtMTcuMi9lbnQvaXNvLWdyazIuZW50Ii8+Ci0gIDxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9FTlRJVElFUyBEb2NCb29rIFhNTCBBZGRpdGlvbmFsIEdlbmVyYWwgRW50aXRpZXMgVjQuMS4yLy9FTiIgdXJpPSJ4bWwtZHRkLTQuMS4yLTEuMC0xNy4yL2RiZ2VuZW50Lm1vZCIvPgotICA8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRUxFTUVOVFMgRG9jQm9vayBYTUwgRG9jdW1lbnQgSGllcmFyY2h5IFY0LjEuMi8vRU4iIHVyaT0ieG1sLWR0ZC00LjEuMi0xLjAtMTcuMi9kYmhpZXJ4Lm1vZCIvPgotICA8cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IEFycm93IFJlbGF0aW9ucy8vRU4iIHVyaT0ieG1sLWR0ZC00LjItMS4wLTE3LjIvZW50L2lzby1hbXNhLmVudCIvPgotICA8cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IE9yZGluYXJ5Ly9FTiIgdXJpPSJ4bWwtZHRkLTQuMi0xLjAtMTcuMi9lbnQvaXNvLWFtc28uZW50Ii8+Ci0gIDxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIFJ1c3NpYW4gQ3lyaWxsaWMvL0VOIiB1cmk9InhtbC1kdGQtNC4yLTEuMC0xNy4yL2VudC9pc28tY3lybC5lbnQiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgR2VuZXJhbCBUZWNobmljYWwvL0VOIiB1cmk9InhtbC1kdGQtNC4yLTEuMC0xNy4yL2VudC9pc28tdGVjaC5lbnQiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTWF0aCBTeW1ib2xzOiBEZWxpbWl0ZXJzLy9FTiIgdXJpPSJ4bWwtZHRkLTQuMi0xLjAtMTcuMi9lbnQvaXNvLWFtc2MuZW50Ii8+Ci0gIDxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9EVEQgWE1MIEV4Y2hhbmdlIFRhYmxlIE1vZGVsIDE5OTkwMzE1Ly9FTiIgdXJpPSJ4bWwtZHRkLTQuMi0xLjAtMTcuMi9zb2V4dGJseC5kdGQiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBDQUxTIFRhYmxlIE1vZGVsIFY0LjEuMi8vRU4iIHVyaT0ieG1sLWR0ZC00LjEuMi0xLjAtMTcuMi9jYWxzdGJseC5kdGQiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTGF0aW4gMS8vRU4iIHVyaT0ieG1sLWR0ZC00LjItMS4wLTE3LjIvZW50L2lzby1sYXQxLmVudCIvPgotICA8cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IEJpbmFyeSBPcGVyYXRvcnMvL0VOIiB1cmk9InhtbC1kdGQtNC4yLTEuMC0xNy4yL2VudC9pc28tYW1zYi5lbnQiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTGF0aW4gMi8vRU4iIHVyaT0ieG1sLWR0ZC00LjItMS4wLTE3LjIvZW50L2lzby1sYXQyLmVudCIvPgotICA8cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IFJlbGF0aW9ucy8vRU4iIHVyaT0ieG1sLWR0ZC00LjItMS4wLTE3LjIvZW50L2lzby1hbXNyLmVudCIvPgotICA8cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBOb24tUnVzc2lhbiBDeXJpbGxpYy8vRU4iIHVyaT0ieG1sLWR0ZC00LjItMS4wLTE3LjIvZW50L2lzby1jeXIyLmVudCIvPgotICA8cmV3cml0ZVN5c3RlbSBzeXN0ZW1JZFN0YXJ0U3RyaW5nPSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMS4yIiByZXdyaXRlUHJlZml4PSJ4bWwtZHRkLTQuMS4yLTEuMC0xNy4yIi8+Ci0gIDxyZXdyaXRlVVJJIHVyaVN0YXJ0U3RyaW5nPSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMS4yIiByZXdyaXRlUHJlZml4PSJ4bWwtZHRkLTQuMS4yLTEuMC0xNy4yIi8+Ci0gIDxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9FTEVNRU5UUyBEb2NCb29rIFhNTCBJbmZvcm1hdGlvbiBQb29sIFY0LjIvL0VOIiB1cmk9InhtbC1kdGQtNC4yLTEuMC0xNy4yL2RicG9vbHgubW9kIi8+Ci0gIDxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iIHVyaT0ieG1sLWR0ZC00LjItMS4wLTE3LjIvZG9jYm9va3guZHRkIi8+Ci0gIDxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9FTlRJVElFUyBEb2NCb29rIFhNTCBDaGFyYWN0ZXIgRW50aXRpZXMgVjQuMi8vRU4iIHVyaT0ieG1sLWR0ZC00LjItMS4wLTE3LjIvZGJjZW50eC5tb2QiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iLS8vT0FTSVMvL0VOVElUSUVTIERvY0Jvb2sgWE1MIE5vdGF0aW9ucyBWNC4yLy9FTiIgdXJpPSJ4bWwtZHRkLTQuMi0xLjAtMTcuMi9kYm5vdG54Lm1vZCIvPgotICA8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBYTUwgQWRkaXRpb25hbCBHZW5lcmFsIEVudGl0aWVzIFY0LjIvL0VOIiB1cmk9InhtbC1kdGQtNC4yLTEuMC0xNy4yL2RiZ2VuZW50Lm1vZCIvPgotICA8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRUxFTUVOVFMgRG9jQm9vayBYTUwgRG9jdW1lbnQgSGllcmFyY2h5IFY0LjIvL0VOIiB1cmk9InhtbC1kdGQtNC4yLTEuMC0xNy4yL2RiaGllcngubW9kIi8+Ci0gIDxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgQ0FMUyBUYWJsZSBNb2RlbCBWNC4yLy9FTiIgdXJpPSJ4bWwtZHRkLTQuMi0xLjAtMTcuMi9jYWxzdGJseC5kdGQiLz4KLSAgPHJld3JpdGVTeXN0ZW0gc3lzdGVtSWRTdGFydFN0cmluZz0iaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIiIHJld3JpdGVQcmVmaXg9InhtbC1kdGQtNC4yLTEuMC0xNy4yIi8+Ci0gIDxyZXdyaXRlVVJJIHVyaVN0YXJ0U3RyaW5nPSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMiIgcmV3cml0ZVByZWZpeD0ieG1sLWR0ZC00LjItMS4wLTE3LjIiLz4KLTwvY2F0YWxvZz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2V4YW1wbGUtY2F0YWxvZy54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9leGFtcGxlLWNhdGFsb2cueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNjdjZDA3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2V4YW1wbGUtY2F0YWxvZy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08IURPQ1RZUEUgY2F0YWxvZwotIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBFbnRpdHkgUmVzb2x1dGlvbiBYTUwgQ2F0YWxvZyBWMS4wLy9FTiIKLSAiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9jb21taXR0ZWVzL2VudGl0eS9yZWxlYXNlLzEuMC9jYXRhbG9nLmR0ZCI+Ci08Y2F0YWxvZyB4bWxucz0idXJuOm9hc2lzOm5hbWVzOnRjOmVudGl0eTp4bWxuczp4bWw6Y2F0YWxvZyIKLSAgICAgICAgIHByZWZlcj0icHVibGljIj4KLSA8dXJpIG5hbWU9Imh0dHA6Ly9hcGFjaGUub3JnL3htbC94Y2F0YWxvZy9leGFtcGxlIiB1cmk9Ii4vZXhhbXBsZS9leGFtcGxlLnhzZCIvPiAgCi0gPHN5c3RlbSBzeXN0ZW1JZD0ibXlleGFtcGxlLnhzZCIgdXJpPSIuL2V4YW1wbGUvZXhhbXBsZS1ub25hbWVzcGFjZS54c2QiLz4gICAgCi0gICAgCi0gPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL0EvLyIKLSAgICAgICAgICAgICAgICAgY2F0YWxvZz0iZXhhbXBsZS1jYXRhbG9nMi54bWwiLz4KLQotICAgICAgICAgICAgICAgICAgIAotPC9jYXRhbG9nPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2V4YW1wbGUtY2F0YWxvZzIueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZXhhbXBsZS1jYXRhbG9nMi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4YmIxZWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZXhhbXBsZS1jYXRhbG9nMi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTwhRE9DVFlQRSBjYXRhbG9nCi0gUFVCTElDICItLy9PQVNJUy8vRFREIEVudGl0eSBSZXNvbHV0aW9uIFhNTCBDYXRhbG9nIFYxLjAvL0VOIgotICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2NvbW1pdHRlZXMvZW50aXR5L3JlbGVhc2UvMS4wL2NhdGFsb2cuZHRkIj4KLTxjYXRhbG9nIHhtbG5zPSJ1cm46b2FzaXM6bmFtZXM6dGM6ZW50aXR5OnhtbG5zOnhtbDpjYXRhbG9nIgotICAgICAgICAgcHJlZmVyPSJwdWJsaWMiPgotIDxwdWJsaWMgcHVibGljSWQ9Ii0vL0EvL1hNTCBDQVRBTE9HIElERU5USUZJRVIvL0VOIiAKLSAgICAgICAgIHVyaT0iLi9leGFtcGxlL2V4YW1wbGUuZW50Ii8+Ci08L2NhdGFsb2c+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZXhhbXBsZS9leGFtcGxlLWR0ZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9leGFtcGxlL2V4YW1wbGUtZHRkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTRhYWFlOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9leGFtcGxlL2V4YW1wbGUtZHRkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08IURPQ1RZUEUgcm9vdCBbCi0gPCFFTlRJVFkgdGV4dCBQVUJMSUMgIi0vL0EvL1hNTCBDQVRBTE9HIElERU5USUZJRVIvL0VOIiAKLSAgInVybjpwdWJsaWNpZDotOkE6WE1MK0NBVEFMT0crSURFTlRJRklFUjpFTiI+Ci1dPgotPHJvb3Q+JnRleHQ7PC9yb290PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZXhhbXBsZS9leGFtcGxlLW5vbmFtZXNwYWNlLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2V4YW1wbGUvZXhhbXBsZS1ub25hbWVzcGFjZS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmMjk5OGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZXhhbXBsZS9leGFtcGxlLW5vbmFtZXNwYWNlLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08eHM6c2NoZW1hIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0gPHhzOmVsZW1lbnQgbmFtZT0icm9vdCIgdHlwZT0ieHM6YW55VVJJIi8+Ci08L3hzOnNjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2V4YW1wbGUvZXhhbXBsZS1zY2hlbWEtbm9uYW1lc3BhY2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZXhhbXBsZS9leGFtcGxlLXNjaGVtYS1ub25hbWVzcGFjZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5MTc1ZjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZXhhbXBsZS9leGFtcGxlLXNjaGVtYS1ub25hbWVzcGFjZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotPHJvb3QgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLQkgICB4c2k6bm9OYW1lc3BhY2VTY2hlbWFMb2NhdGlvbj0ibXlleGFtcGxlLnhzZCI+Ci1odHRwOi8vYXBhY2hlLm9yZy94bWwvYW55VVJJPC9yb290PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZXhhbXBsZS9leGFtcGxlLXNjaGVtYS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9leGFtcGxlL2V4YW1wbGUtc2NoZW1hLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk3Y2IzYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9leGFtcGxlL2V4YW1wbGUtc2NoZW1hLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08cm9vdCAgeG1sbnM9Imh0dHA6Ly9hcGFjaGUub3JnL3htbC94Y2F0YWxvZy9leGFtcGxlIj4KLWh0dHA6Ly9hcGFjaGUub3JnL3htbC9hbnlVUkk8L3Jvb3Q+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9leGFtcGxlL2V4YW1wbGUuZW50IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZXhhbXBsZS9leGFtcGxlLmVudApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2QwODc1NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9leGFtcGxlL2V4YW1wbGUuZW50CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotSGVsbG8gd29ybGQhCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9leGFtcGxlL2V4YW1wbGUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZXhhbXBsZS9leGFtcGxlLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDFhMjlmZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9leGFtcGxlL2V4YW1wbGUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTx4czpzY2hlbWEgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotICAgICAgICAgICB4bWxucz0iaHR0cDovL2FwYWNoZS5vcmcveG1sL3hjYXRhbG9nL2V4YW1wbGUiCi0gICAgICAgICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2FwYWNoZS5vcmcveG1sL3hjYXRhbG9nL2V4YW1wbGUiPgotIDx4czplbGVtZW50IG5hbWU9InJvb3QiIHR5cGU9InhzOmFueVVSSSIvPgotPC94czpzY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9yZXBvcnQtY2F0YWxvZ19tYXBwZWRpbmNsdWRlZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9yZXBvcnQtY2F0YWxvZ19tYXBwZWRpbmNsdWRlZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmMTI3YjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvcmVwb3J0LWNhdGFsb2dfbWFwcGVkaW5jbHVkZWQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPCFET0NUWVBFIGNhdGFsb2cKLSBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRW50aXR5IFJlc29sdXRpb24gWE1MIENhdGFsb2cgVjEuMC8vRU4iCi0gImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvY29tbWl0dGVlcy9lbnRpdHkvcmVsZWFzZS8xLjAvY2F0YWxvZy5kdGQiPgotPGNhdGFsb2cgeG1sbnM9InVybjpvYXNpczpuYW1lczp0YzplbnRpdHk6eG1sbnM6eG1sOmNhdGFsb2ciCi0JcHJlZmVyPSJwdWJsaWMiPgotCQotCTx1cmkgbmFtZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9SZXBvcnQiCi0JCXVyaT0iLi9QdXJjaGFzZU9yZGVyL2ludGVybmF0aW9uYWwvcmVwb3J0Xy54c2QiIC8+Ci0gICAgPCEtLSB3ZSBjYW4gbm90IG1hcCBQdWJsaWNJZCBvciBVUkkgb2YgdGhlIGluY2x1ZGVkL3JlZGVmaW5lZCBzY2hlbWFzIC0tPgkKLQk8dXJpIG5hbWU9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vSVBPIgotCQl1cmk9Ii4vUHVyY2hhc2VPcmRlci9pbnRlcm5hdGlvbmFsL2lwb18ueHNkIiAvPgotCTxzeXN0ZW0gc3lzdGVtSWQ9ImFkZHJlc3NfLnhzZCIKLQkJdXJpPSIuL1B1cmNoYXNlT3JkZXIvaW50ZXJuYXRpb25hbC9hZGRyZXNzLnhzZCIgLz4KLQotPC9jYXRhbG9nPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3JlcG9ydC1jYXRhbG9nX3B1YmxpYy54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9yZXBvcnQtY2F0YWxvZ19wdWJsaWMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MzRlY2JhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3JlcG9ydC1jYXRhbG9nX3B1YmxpYy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08IURPQ1RZUEUgY2F0YWxvZwotIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBFbnRpdHkgUmVzb2x1dGlvbiBYTUwgQ2F0YWxvZyBWMS4wLy9FTiIKLSAiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9jb21taXR0ZWVzL2VudGl0eS9yZWxlYXNlLzEuMC9jYXRhbG9nLmR0ZCI+Ci08Y2F0YWxvZyB4bWxucz0idXJuOm9hc2lzOm5hbWVzOnRjOmVudGl0eTp4bWxuczp4bWw6Y2F0YWxvZyIKLQlwcmVmZXI9InB1YmxpYyI+Ci0JCi0JPHVyaSBuYW1lPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL1JlcG9ydCIKLQkJdXJpPSIuL1B1cmNoYXNlT3JkZXIvaW50ZXJuYXRpb25hbC9yZXBvcnRfLnhzZCIgLz4KLSAgICA8IS0tIHdlIGNhbiBub3QgbWFwIFB1YmxpY0lkIG9yIFVSSSBvZiB0aGUgaW5jbHVkZWQvcmVkZWZpbmVkIHNjaGVtYXMgLS0+CQotCTx1cmkgbmFtZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9JUE8iCi0JCXVyaT0iLi9QdXJjaGFzZU9yZGVyL2ludGVybmF0aW9uYWwvaXBvLnhzZCIgLz4KLQkKLQotCi08L2NhdGFsb2c+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvcmVwb3J0LWNhdGFsb2dfc3lzdGVtLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3JlcG9ydC1jYXRhbG9nX3N5c3RlbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2NmExYjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvcmVwb3J0LWNhdGFsb2dfc3lzdGVtLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTwhRE9DVFlQRSBjYXRhbG9nCi0gUFVCTElDICItLy9PQVNJUy8vRFREIEVudGl0eSBSZXNvbHV0aW9uIFhNTCBDYXRhbG9nIFYxLjAvL0VOIgotICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2NvbW1pdHRlZXMvZW50aXR5L3JlbGVhc2UvMS4wL2NhdGFsb2cuZHRkIj4KLTxjYXRhbG9nIHhtbG5zPSJ1cm46b2FzaXM6bmFtZXM6dGM6ZW50aXR5OnhtbG5zOnhtbDpjYXRhbG9nIj4KLQotCTx1cmkgbmFtZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9SZXBvcnQiCi0JCXVyaT0iLi9QdXJjaGFzZU9yZGVyL2ludGVybmF0aW9uYWwvcmVwb3J0Xy54c2QiIC8+Ci0JPHN5c3RlbSBzeXN0ZW1JZD0iaXBvX18ueHNkIgotCQl1cmk9Ii4vUHVyY2hhc2VPcmRlci9pbnRlcm5hdGlvbmFsL2lwb18ueHNkIiAvPgotCTxzeXN0ZW0gc3lzdGVtSWQ9ImFkZHJlc3NfLnhzZCIKLQkJdXJpPSIuL1B1cmNoYXNlT3JkZXIvaW50ZXJuYXRpb25hbC9hZGRyZXNzLnhzZCIgLz4KLQotPC9jYXRhbG9nPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3NjaGVtYXMuamFyIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvc2NoZW1hcy5qYXIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkMWU0ZGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvc2NoZW1hcy5qYXIKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS90ZXN0WFNMVHdpdGhDYXRhbG9nUmVzb2x2ZXIvY2F0YWxvZy54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS90ZXN0WFNMVHdpdGhDYXRhbG9nUmVzb2x2ZXIvY2F0YWxvZy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4YjA0YTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvdGVzdFhTTFR3aXRoQ2F0YWxvZ1Jlc29sdmVyL2NhdGFsb2cueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNhdGFsb2cgeG1sbnM9InVybjpvYXNpczpuYW1lczp0YzplbnRpdHk6eG1sbnM6eG1sOmNhdGFsb2ciIHhtbDpiYXNlPSIuIj4KLSAgIAkJPHB1YmxpYyBwdWJsaWNJZD0ibXlxdW90ZSIgdXJpPSJxdW90ZTIueG1sIi8+ICAKLTwvY2F0YWxvZz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3Rlc3RYU0xUd2l0aENhdGFsb2dSZXNvbHZlci9xdW90ZTEueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvdGVzdFhTTFR3aXRoQ2F0YWxvZ1Jlc29sdmVyL3F1b3RlMS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmY2JhNTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvdGVzdFhTTFR3aXRoQ2F0YWxvZ1Jlc29sdmVyL3F1b3RlMS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgotCi0gIDwhLS0gSSBiZWxvbmcgdG86Ci0gICAgICAgb3JnLmFwYWNoZS50b29scy5hbnQudHlwZXMuWE1MQ2F0YWxvZ0J1aWxkRmlsZVRlc3QuamF2YSAKLSAgICAgICAtLT4KLQotPHBhcmE+Ci0gIEEgc3RpdGNoIGluIHRpbWUgc2F2ZXMgbmluZQotPC9wYXJhPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvdGVzdFhTTFR3aXRoQ2F0YWxvZ1Jlc29sdmVyL3F1b3RlMi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS90ZXN0WFNMVHdpdGhDYXRhbG9nUmVzb2x2ZXIvcXVvdGUyLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTBjZDE0ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS90ZXN0WFNMVHdpdGhDYXRhbG9nUmVzb2x2ZXIvcXVvdGUyLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Ci0KLTxwYXJhPgotICBObyBuZXdzIGlzIGdvb2QgbmV3cwotPC9wYXJhPgotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS90ZXN0WFNMVHdpdGhDYXRhbG9nUmVzb2x2ZXIveG1sY2F0YWxvZy54c2wgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS90ZXN0WFNMVHdpdGhDYXRhbG9nUmVzb2x2ZXIveG1sY2F0YWxvZy54c2wKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OTJiMGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvdGVzdFhTTFR3aXRoQ2F0YWxvZ1Jlc29sdmVyL3htbGNhdGFsb2cueHNsCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTx4c2w6c3R5bGVzaGVldCAKLSAgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCi0gIHZlcnNpb249IjEuMCI+Ci0KLSAgPHhzbDpvdXRwdXQgbWV0aG9kPSJ0ZXh0Ii8+Ci0KLSAgPCEtLSBuYW1lIG9mIHRoZSBvdXRwdXQgcGFyYW1ldGVyIHRvIHdyaXRlIC0tPgotICA8eHNsOnBhcmFtIG5hbWU9Im91dHByb3AiPnZhbHVlPC94c2w6cGFyYW0+Ci0KLSAgPHhzbDpzdHJpcC1zcGFjZSBlbGVtZW50cz0iKiIvPgotCi0gIDx4c2w6dGVtcGxhdGUgbWF0Y2g9Ii8iPgotICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkb3V0cHJvcCIvPjogPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSIvZnJhZ21lbnQvcGFyYSIvPgotICA8L3hzbDp0ZW1wbGF0ZT4KLQotICA8IS0tIFRoaXMgd2lsbCBvbmx5IGJlIG1hdGNoZWQgaW4gZG9jMi54bWwgLS0+Ci0gIDx4c2w6dGVtcGxhdGUgbWF0Y2g9IlJlZiI+Ci0gICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJkb2N1bWVudChAZmlsZSkvZnJhZ21lbnQvcGFyYSIvPgotICA8L3hzbDp0ZW1wbGF0ZT4KLQotICA8IS0tIFRoaXMgd2lsbCBvbmx5IGJlIG1hdGNoZWQgaW4gZG9jMS54bWwgLS0+Ci0gIDx4c2w6dGVtcGxhdGUgbWF0Y2g9InRleHQoKSI+Ci0gICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Im5vcm1hbGl6ZS1zcGFjZSguKSIvPgotICA8L3hzbDp0ZW1wbGF0ZT4KLQotPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3Rlc3RYU0xUd2l0aENhdGFsb2dSZXNvbHZlci94bWxjYXRhbG9nMS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS90ZXN0WFNMVHdpdGhDYXRhbG9nUmVzb2x2ZXIveG1sY2F0YWxvZzEueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMWM3MzBkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3Rlc3RYU0xUd2l0aENhdGFsb2dSZXNvbHZlci94bWxjYXRhbG9nMS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KLTwhRE9DVFlQRSBmcmFnbWVudCBbCi0gIDwhRU5USVRZIHF1b3RlIFBVQkxJQyAibXlxdW90ZSIgInF1b3RlMS54bWwiPgotXT4KLQotPGZyYWdtZW50PgotICA8cGFyYT4KLSAgICAgICZxdW90ZTsKLSAgPC9wYXJhPgotPC9mcmFnbWVudD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3Rlc3RYU0xUd2l0aENhdGFsb2dSZXNvbHZlci94bWxjYXRhbG9nMi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS90ZXN0WFNMVHdpdGhDYXRhbG9nUmVzb2x2ZXIveG1sY2F0YWxvZzIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZDQxZDBiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3Rlc3RYU0xUd2l0aENhdGFsb2dSZXNvbHZlci94bWxjYXRhbG9nMi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgotCi08ZnJhZ21lbnQ+Ci0gIDxwYXJhPgotICAgIDxSZWYgZmlsZT0ieG1sY2F0YWxvZzEueG1sIi8+Ci0gIDwvcGFyYT4KLTwvZnJhZ21lbnQ+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS90ZXN0WFNMVHdpdGhDYXRhbG9nUmVzb2x2ZXIveG1sY2F0YWxvZzIueG1sLW91dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3Rlc3RYU0xUd2l0aENhdGFsb2dSZXNvbHZlci94bWxjYXRhbG9nMi54bWwtb3V0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOWQ3ZmM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3Rlc3RYU0xUd2l0aENhdGFsb2dSZXNvbHZlci94bWxjYXRhbG9nMi54bWwtb3V0CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotdGVzdHZhbHVlOiBBIHN0aXRjaCBpbiB0aW1lIHNhdmVzIG5pbmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS90ZXN0WFNMVHdpdGhDYXRhbG9nUmVzb2x2ZXIveG1sY2F0YWxvZzIueG1sLW91dC1kaWZmIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvdGVzdFhTTFR3aXRoQ2F0YWxvZ1Jlc29sdmVyL3htbGNhdGFsb2cyLnhtbC1vdXQtZGlmZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTg3YTVkYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS90ZXN0WFNMVHdpdGhDYXRhbG9nUmVzb2x2ZXIveG1sY2F0YWxvZzIueG1sLW91dC1kaWZmCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08PDw8IHRlc3R2YWx1ZTogQSBzdGl0Y2ggaW4gdGltZSBzYXZlcyBuaW5lDQotPDw8PCB0ZXN0dmFsdWU6IE5vIG5ld3MgaXMgZ29vZCBuZXdzDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvdGVzdFhTTFR3aXRoQ2F0YWxvZ1Jlc29sdmVyL3htbGNhdGFsb2cyLnhtbC1yZXN1bHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS90ZXN0WFNMVHdpdGhDYXRhbG9nUmVzb2x2ZXIveG1sY2F0YWxvZzIueG1sLXJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWRlMjhhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS90ZXN0WFNMVHdpdGhDYXRhbG9nUmVzb2x2ZXIveG1sY2F0YWxvZzIueG1sLXJlc3VsdAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLXRlc3R2YWx1ZTogTm8gbmV3cyBpcyBnb29kIG5ld3MKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS94c2QvWFNMU2NoZW1hLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3hzZC9YU0xTY2hlbWEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTk2NDVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3hzZC9YU0xTY2hlbWEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMzkwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSI+Ci0JPCEtLSB4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiBzY2hlbWFMb2NhdGlvbj0ieG1sLnhzZCIgLy0tPgotCi0JPHhzZDplbGVtZW50IG5hbWU9InN0eWxlc2hlZXQiIHR5cGU9IndyYXBwZXIiIC8+Ci0JPHhzZDplbGVtZW50IG5hbWU9InRyYW5zZm9ybSIgdHlwZT0id3JhcHBlciIgLz4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0id3JhcHBlciI+Ci0JCTx4c2Q6Z3JvdXAgcmVmPSJ0b3BMZXZlbEVsZW1lbnRzIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPgotCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJleHRlbnNpb24tZWxlbWVudC1wcmVmaXhlcyIgdHlwZT0ieHNkOnN0cmluZyIgdXNlPSJvcHRpb25hbCIgLz4KLQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iZXhjbHVkZS1yZXN1bHQtcHJlZml4ZXMiIHR5cGU9InhzZDpzdHJpbmciIHVzZT0ib3B0aW9uYWwiIC8+Ci0JCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJ4c2Q6SUQiIHVzZT0ib3B0aW9uYWwiIC8+Ci0JCTx4c2Q6YXR0cmlidXRlIG5hbWU9InZlcnNpb24iIHR5cGU9InhzZDpOTVRPS0VOIiB1c2U9Im9wdGlvbmFsIiAvPgotCQk8IS0tICB4c2Q6YXR0cmlidXRlIHJlZj0ieG1sOnNwYWNlIiAvLS0+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0iaW1wb3J0Ij4KLQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImhyZWYiIHR5cGU9InhzZDphbnlVUkkiIHVzZT0icmVxdWlyZWQiIC8+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0JPHhzZDplbGVtZW50IG5hbWU9ImluY2x1ZGUiPgotCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iaHJlZiIgdHlwZT0ieHNkOmFueVVSSSIgdXNlPSJyZXF1aXJlZCIgLz4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJzdHJpcC1zcGFjZSI+Ci0JCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJlbGVtZW50cyIgdHlwZT0ieHNkOnN0cmluZyIgdXNlPSJyZXF1aXJlZCIgLz4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQk8eHNkOmVsZW1lbnQgbmFtZT0icHJlc2VydmUtc3BhY2UiPgotCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iZWxlbWVudHMiIHR5cGU9InhzZDpzdHJpbmciIHVzZT0icmVxdWlyZWQiIC8+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0JCi0JPHhzZDplbGVtZW50IG5hbWU9Im91dHB1dCI+Ci0JCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJtZXRob2QiIHVzZT0ib3B0aW9uYWwiPgotCQkJCTx4c2Q6c2ltcGxlVHlwZT4KLQkJCQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLQkJCQkJCTx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InhtbCIgLz4KLQkJCQkJCTx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Imh0bWwiIC8+Ci0JCQkJCQk8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJ0ZXh0IiAvPgotCQkJCQk8L3hzZDpyZXN0cmljdGlvbj4KLQkJCQk8L3hzZDpzaW1wbGVUeXBlPgotCQkJPC94c2Q6YXR0cmlidXRlPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0idmVyc2lvbiIgdHlwZT0ieHNkOk5NVE9LRU4iIHVzZT0ib3B0aW9uYWwiIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJlbmNvZGluZyIgdHlwZT0ieHNkOk5NVE9LRU4iIHVzZT0ib3B0aW9uYWwiIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJvbWl0LXhtbC1kZWNsYXJhdGlvbiIgdXNlPSJvcHRpb25hbCIgdHlwZT0iWWVzTm9UeXBlIiAvPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0ic3RhbmRhbG9uZSIgdXNlPSJvcHRpb25hbCIgdHlwZT0iWWVzTm9UeXBlIiAvPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iZG9jdHlwZS1wdWJsaWMiIHR5cGU9InhzZDpzdHJpbmciIHVzZT0ib3B0aW9uYWwiIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJkb2N0eXBlLXN5c3RlbSIgdHlwZT0ieHNkOnN0cmluZyIgdXNlPSJvcHRpb25hbCIgLz4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImNkYXRhLXNlY3Rpb24tZWxlbWVudHMiIHR5cGU9InhzZDpOTVRPS0VOUyIgdXNlPSJvcHRpb25hbCIgLz4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImluZGVudCIgdXNlPSJvcHRpb25hbCIgdHlwZT0iWWVzTm9UeXBlIiAvPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0ibWVkaWEtdHlwZSIgdHlwZT0ieHNkOnN0cmluZyIgdXNlPSJvcHRpb25hbCIgLz4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQkKLQk8eHNkOmVsZW1lbnQgbmFtZT0ia2V5Ij4KLQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InhzZDpOTVRPS0VOIiB1c2U9InJlcXVpcmVkIiAvPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0ibWF0Y2giIHR5cGU9InBhdHRlcm4iIHVzZT0icmVxdWlyZWQiIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJ1c2UiIHR5cGU9ImV4cHJlc3Npb24iIHVzZT0icmVxdWlyZWQiIC8+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0JCi0JPHhzZDplbGVtZW50IG5hbWU9ImRlY2ltYWwtZm9ybWF0Ij4KLQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InhzZDpOTVRPS0VOIiB1c2U9Im9wdGlvbmFsIiAvPgotCQkJPHhzZDphdHRyaWJ1dGUgZGVmYXVsdD0iLiIgbmFtZT0iZGVjaW1hbC1zZXBhcmF0b3IiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBkZWZhdWx0PSIsIiBuYW1lPSJncm91cGluZy1zZXBhcmF0b3IiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBkZWZhdWx0PSJJbmZpbml0eSIgbmFtZT0iaW5maW5pdHkiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBkZWZhdWx0PSItIiBuYW1lPSJtaW51cy1zaWduIiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJPHhzZDphdHRyaWJ1dGUgZGVmYXVsdD0iTmFOIiBuYW1lPSJOYU4iIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBkZWZhdWx0PSIlIiBuYW1lPSJwZXJjZW50IiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJPHhzZDphdHRyaWJ1dGUgZGVmYXVsdD0i4oCwIiBuYW1lPSJwZXItbWlsbGUiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBkZWZhdWx0PSIwIiBuYW1lPSJ6ZXJvLWRpZ2l0IiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJPHhzZDphdHRyaWJ1dGUgZGVmYXVsdD0iIyIgbmFtZT0iZGlnaXQiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBkZWZhdWx0PSI7IiBuYW1lPSJwYXR0ZXJuLXNlcGFyYXRvciIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQkKLQk8eHNkOmVsZW1lbnQgbmFtZT0ibmFtZXNwYWNlLWFsaWFzIj4KLQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9InN0eWxlc2hlZXQtcHJlZml4IiB0eXBlPSJ4c2Q6c3RyaW5nIiB1c2U9InJlcXVpcmVkIiAvPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0icmVzdWx0LXByZWZpeCIgdHlwZT0ieHNkOnN0cmluZyIgdXNlPSJyZXF1aXJlZCIgLz4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQkKLQk8eHNkOmVsZW1lbnQgbmFtZT0idGVtcGxhdGUiPgotCQk8eHNkOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KLQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJPHhzZDplbGVtZW50IHJlZj0icGFyYW0iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+Ci0JCQkJPHhzZDpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0JCQkJCTx4c2Q6Z3JvdXAgcmVmPSJjaGFyLWluc3RydWN0aW9ucyI+PC94c2Q6Z3JvdXA+Ci0JCQkJCTx4c2Q6YW55IG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJza2lwIiAvPgotCQkJCTwveHNkOmNob2ljZT4KLQkJCTwveHNkOnNlcXVlbmNlPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0ibWF0Y2giIHR5cGU9InBhdHRlcm4iIHVzZT0ib3B0aW9uYWwiIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4c2Q6Tk1UT0tFTiIgdXNlPSJvcHRpb25hbCIgLz4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9InByaW9yaXR5IiB0eXBlPSJ4c2Q6Tk1UT0tFTiIgdXNlPSJvcHRpb25hbCIgLz4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9Im1vZGUiIHR5cGU9InhzZDpOTVRPS0VOIiB1c2U9Im9wdGlvbmFsIiAvPgotCQkJPCEtLSAgeHNkOmF0dHJpYnV0ZSByZWY9InhtbDpzcGFjZSIgLy0tPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJ2YWx1ZS1vZiI+Ci0JCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQk8eHNkOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VsZWN0LXJlcXVpcmVkIiAvPgotCQkJPHhzZDphdHRyaWJ1dGVHcm91cCByZWY9ImRpc2FibGUtb3V0cHV0LWVzY2FwaW5nIiAvPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJjb3B5LW9mIj4KLQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCTx4c2Q6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWxlY3QtcmVxdWlyZWQiIC8+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0JCi0JPHhzZDplbGVtZW50IG5hbWU9Im51bWJlciI+Ci0JCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBkZWZhdWx0PSJzaW5nbGUiIG5hbWU9ImxldmVsIj4KLQkJCQk8eHNkOnNpbXBsZVR5cGU+Ci0JCQkJCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0JCQkJCQk8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJzaW5nbGUiIC8+Ci0JCQkJCQk8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJtdWx0aXBsZSIgLz4KLQkJCQkJCTx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImFueSIgLz4KLQkJCQkJPC94c2Q6cmVzdHJpY3Rpb24+Ci0JCQkJPC94c2Q6c2ltcGxlVHlwZT4KLQkJCTwveHNkOmF0dHJpYnV0ZT4KLQkgICAgICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9ImNvdW50IiB0eXBlPSJwYXR0ZXJuIiB1c2U9Im9wdGlvbmFsIi8+Ci0JCSAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJmcm9tIiB0eXBlPSJwYXR0ZXJuIiB1c2U9Im9wdGlvbmFsIi8+Ci0JCSAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSIgdHlwZT0iZXhwcmVzc2lvbiIgdXNlPSJvcHRpb25hbCIvPgotCQkJPHhzZDphdHRyaWJ1dGUgZGVmYXVsdD0iMSIgbmFtZT0iZm9ybWF0IiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0ibGFuZyIgdHlwZT0ieHNkOnN0cmluZyIgdXNlPSJvcHRpb25hbCIgLz4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImxldHRlci12YWx1ZSIgdHlwZT0ieHNkOnN0cmluZyIgdXNlPSJvcHRpb25hbCIgLz4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9Imdyb3VwaW5nLXNlcGFyYXRvciIgdHlwZT0ieHNkOnN0cmluZyIgdXNlPSJvcHRpb25hbCIgLz4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9Imdyb3VwaW5nLXNpemUiIHR5cGU9InhzZDpzdHJpbmciIHVzZT0ib3B0aW9uYWwiIC8+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0JCi0JPHhzZDplbGVtZW50IG5hbWU9ImFwcGx5LXRlbXBsYXRlcyI+Ci0JCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQk8eHNkOmNob2ljZSBtYXhPY2N1cnM9InVuYm91bmRlZCIgbWluT2NjdXJzPSIwIj4KLQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJzb3J0IiAvPgotCQkJCTx4c2Q6ZWxlbWVudCByZWY9IndpdGgtcGFyYW0iIC8+Ci0JCQk8L3hzZDpjaG9pY2U+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBkZWZhdWx0PSJub2RlKCkiIG5hbWU9InNlbGVjdCIgdHlwZT0iZXhwcmVzc2lvbiIgLz4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9Im1vZGUiIHR5cGU9InhzZDpOTVRPS0VOIiB1c2U9Im9wdGlvbmFsIiAvPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJhcHBseS1pbXBvcnRzIj4KLQkJPHhzZDpjb21wbGV4VHlwZSAvPgotCTwveHNkOmVsZW1lbnQ+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0iZm9yLWVhY2giPgotCQk8eHNkOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KLQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJPHhzZDplbGVtZW50IHJlZj0ic29ydCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4KLQkJCQk8eHNkOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLQkJCQkJPHhzZDpncm91cCByZWY9ImNoYXItaW5zdHJ1Y3Rpb25zIj48L3hzZDpncm91cD4KLQkJCQkJPHhzZDphbnkgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9InNraXAiIC8+Ci0JCQkJPC94c2Q6Y2hvaWNlPgotCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VsZWN0LXJlcXVpcmVkIiAvPgotCQkJPCEtLSAgeHNkOmF0dHJpYnV0ZSByZWY9InhtbDpzcGFjZSIgLy0tPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCi0JPHhzZDplbGVtZW50IG5hbWU9InNvcnQiPgotCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJPHhzZDphdHRyaWJ1dGUgZGVmYXVsdD0iLiIgbmFtZT0ic2VsZWN0IiB0eXBlPSJleHByZXNzaW9uIiAvPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0ibGFuZyIgdHlwZT0ieHNkOnN0cmluZyIgdXNlPSJvcHRpb25hbCIgLz4KLQkJCTx4c2Q6YXR0cmlidXRlIGRlZmF1bHQ9InRleHQiIG5hbWU9ImRhdGEtdHlwZSIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLQkJCTx4c2Q6YXR0cmlidXRlIGRlZmF1bHQ9ImFzY2VuZGluZyIgbmFtZT0ib3JkZXIiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJjYXNlLW9yZGVyIiB0eXBlPSJ4c2Q6c3RyaW5nIiB1c2U9Im9wdGlvbmFsIiAvPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJpZiI+Ci0JCTx4c2Q6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgotCQkJPHhzZDpncm91cCByZWY9Imluc3RydWN0aW9ucyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+PC94c2Q6Z3JvdXA+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJ0ZXN0IiB0eXBlPSJleHByZXNzaW9uIiB1c2U9InJlcXVpcmVkIiAvPgotCQkJPCEtLSAgeHNkOmF0dHJpYnV0ZSByZWY9InhtbDpzcGFjZSIgLy0tPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCi0JPHhzZDplbGVtZW50IG5hbWU9ImNob29zZSI+Ci0JCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQk8eHNkOnNlcXVlbmNlPgotCQkJCTx4c2Q6ZWxlbWVudCByZWY9IndoZW4iIG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+Ci0JCQkJPHhzZDplbGVtZW50IHJlZj0ib3RoZXJ3aXNlIiBtaW5PY2N1cnM9IjAiIC8+Ci0JCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCTwhLS0gIHhzZDphdHRyaWJ1dGUgcmVmPSJ4bWw6c3BhY2UiIC8tLT4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJ3aGVuIj4KLQkJPHhzZDpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+Ci0JCQk8eHNkOmdyb3VwIHJlZj0iaW5zdHJ1Y3Rpb25zIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0idGVzdCIgdHlwZT0iZXhwcmVzc2lvbiIgdXNlPSJyZXF1aXJlZCIgLz4KLQkJCTwhLS0gIHhzZDphdHRyaWJ1dGUgcmVmPSJ4bWw6c3BhY2UiIC8tLT4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJvdGhlcndpc2UiPgotCQk8eHNkOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KLQkJCTx4c2Q6Z3JvdXAgcmVmPSJpbnN0cnVjdGlvbnMiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+Ci0JCQk8IS0tICB4c2Q6YXR0cmlidXRlIHJlZj0ieG1sOnNwYWNlIiAvLS0+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0iYXR0cmlidXRlLXNldCI+Ci0JCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQk8eHNkOnNlcXVlbmNlPgotCQkJCTx4c2Q6ZWxlbWVudCAgcmVmPSJhdHRyaWJ1dGUiICBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPgotCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4c2Q6Tk1UT0tFTiIgdXNlPSJyZXF1aXJlZCIgLz4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9InVzZS1hdHRyaWJ1dGUtc2V0cyIgdHlwZT0ieHNkOk5NVE9LRU5TIiB1c2U9Im9wdGlvbmFsIiAvPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJjYWxsLXRlbXBsYXRlIj4KLQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJPHhzZDplbGVtZW50IHJlZj0id2l0aC1wYXJhbSIgbWluT2NjdXJzPSIwIiAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiICAvPgotCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4c2Q6Tk1UT0tFTiIgdXNlPSJyZXF1aXJlZCIgLz4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQkKLQk8eHNkOmVsZW1lbnQgbmFtZT0id2l0aC1wYXJhbSIgdHlwZT0iTmFtZWRBbmRTZWxlY3RhYmxlIiAvPgotCQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJ2YXJpYWJsZSIgdHlwZT0iTmFtZWRBbmRTZWxlY3RhYmxlIiAvPgotCQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJwYXJhbSIgdHlwZT0iTmFtZWRBbmRTZWxlY3RhYmxlIiAvPgotCQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJ0ZXh0Ij4KLQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCTx4c2Q6c2ltcGxlQ29udGVudD4KLQkJCQk8eHNkOmV4dGVuc2lvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLQkJCQkJPHhzZDphdHRyaWJ1dGVHcm91cCByZWY9ImRpc2FibGUtb3V0cHV0LWVzY2FwaW5nIiAvPgotCQkJCTwveHNkOmV4dGVuc2lvbj4KLQkJCTwveHNkOnNpbXBsZUNvbnRlbnQ+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0JCi0JPHhzZDplbGVtZW50IG5hbWU9InByb2Nlc3NpbmctaW5zdHJ1Y3Rpb24iPgotCQk8eHNkOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KLQkJCTx4c2Q6Z3JvdXAgcmVmPSJjaGFyLWluc3RydWN0aW9ucyI+PC94c2Q6Z3JvdXA+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4c2Q6c3RyaW5nIiB1c2U9InJlcXVpcmVkIiAvPgotCQkJPCEtLSAgeHNkOmF0dHJpYnV0ZSByZWY9InhtbDpzcGFjZSIgLy0tPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJlbGVtZW50Ij4KLQkJPHhzZDpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+Ci0JCQk8eHNkOmdyb3VwIHJlZj0iaW5zdHJ1Y3Rpb25zIj48L3hzZDpncm91cD4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InhzZDpzdHJpbmciIHVzZT0icmVxdWlyZWQiIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJuYW1lc3BhY2UiIHR5cGU9InhzZDpzdHJpbmciIHVzZT0ib3B0aW9uYWwiIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZUdyb3VwIHJlZj0idXNlLWF0dHJpYnV0ZS1zZXRzIiAvPgotCQkJPCEtLSAgeHNkOmF0dHJpYnV0ZSByZWY9InhtbDpzcGFjZSIgLy0tPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJhdHRyaWJ1dGUiPgotCQk8eHNkOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KLQkJCTx4c2Q6Z3JvdXAgcmVmPSJjaGFyLWluc3RydWN0aW9ucyIvPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHNkOnN0cmluZyIgdXNlPSJyZXF1aXJlZCIgLz4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9Im5hbWVzcGFjZSIgdHlwZT0ieHNkOnN0cmluZyIgdXNlPSJvcHRpb25hbCIgLz4KLQkJCTwhLS0gIHhzZDphdHRyaWJ1dGUgcmVmPSJ4bWw6c3BhY2UiIC8tLT4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQkKLQk8eHNkOmVsZW1lbnQgbmFtZT0iY29tbWVudCI+Ci0JCTx4c2Q6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgotCQkJPHhzZDpncm91cCByZWY9ImNoYXItaW5zdHJ1Y3Rpb25zIi8+Ci0JCQk8IS0tICB4c2Q6YXR0cmlidXRlIHJlZj0ieG1sOnNwYWNlIiAvLS0+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0JCi0JPHhzZDplbGVtZW50IG5hbWU9ImNvcHkiPgotCQk8eHNkOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KLQkJCTx4c2Q6Z3JvdXAgcmVmPSJpbnN0cnVjdGlvbnMiLz4KLQkJCTwhLS0gIHhzZDphdHRyaWJ1dGUgcmVmPSJ4bWw6c3BhY2UiIC8tLT4KLQkJCTx4c2Q6YXR0cmlidXRlR3JvdXAgcmVmPSJ1c2UtYXR0cmlidXRlLXNldHMiIC8+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0JCi0JPHhzZDplbGVtZW50IG5hbWU9Im1lc3NhZ2UiPgotCQk8eHNkOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KLQkJCTx4c2Q6Z3JvdXAgcmVmPSJjaGFyLWluc3RydWN0aW9ucyIvPgotCQkJPHhzZDphdHRyaWJ1dGUgZGVmYXVsdD0ibm8iIG5hbWU9InRlcm1pbmF0ZSIgdHlwZT0iWWVzTm9UeXBlIiAvPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCi0JPHhzZDplbGVtZW50IG5hbWU9ImZhbGxiYWNrIj4KLQkJPHhzZDpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+Ci0JCQk8eHNkOmNob2ljZSBtYXhPY2N1cnM9InVuYm91bmRlZCIgbWluT2NjdXJzPSIwIj4KLQkJCQk8eHNkOmdyb3VwIHJlZj0iaW5zdHJ1Y3Rpb25zIj48L3hzZDpncm91cD4KLQkJCTwveHNkOmNob2ljZT4KLQkJCTwhLS0gIHhzZDphdHRyaWJ1dGUgcmVmPSJ4bWw6c3BhY2UiIC8tLT4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQotCTx4c2Q6Z3JvdXAgbmFtZT0iaW5zdHJ1Y3Rpb25zIj4KLQkJPHhzZDpjaG9pY2U+Ci0JCQk8eHNkOmdyb3VwIHJlZj0iY2hhci1pbnN0cnVjdGlvbnMiPjwveHNkOmdyb3VwPgotCQkJPHhzZDplbGVtZW50IHJlZj0icHJvY2Vzc2luZy1pbnN0cnVjdGlvbiIgLz4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9ImNvbW1lbnQiIC8+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJlbGVtZW50IiAvPgotCQkJPHhzZDplbGVtZW50IHJlZj0iYXR0cmlidXRlIiAvPgotCQk8L3hzZDpjaG9pY2U+Ci0JPC94c2Q6Z3JvdXA+Ci0KLQk8eHNkOmdyb3VwIG5hbWU9ImNoYXItaW5zdHJ1Y3Rpb25zIj4KLQkJPHhzZDpjaG9pY2U+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJhcHBseS10ZW1wbGF0ZXMiIC8+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJjYWxsLXRlbXBsYXRlIiAvPgotCQkJPHhzZDplbGVtZW50IHJlZj0iYXBwbHktaW1wb3J0cyIgLz4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9ImZvci1lYWNoIiAvPgotCQkJPHhzZDplbGVtZW50IHJlZj0idmFsdWUtb2YiIC8+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJjb3B5LW9mIiAvPgotCQkJPHhzZDplbGVtZW50IHJlZj0ibnVtYmVyIiAvPgotCQkJPHhzZDplbGVtZW50IHJlZj0iY2hvb3NlIiAvPgotCQkJPHhzZDplbGVtZW50IHJlZj0iaWYiIC8+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJ0ZXh0IiAvPgotCQkJPHhzZDplbGVtZW50IHJlZj0iY29weSIgLz4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9InZhcmlhYmxlIiAvPgotCQkJPHhzZDplbGVtZW50IHJlZj0ibWVzc2FnZSIgLz4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9ImZhbGxiYWNrIiAvPgotCQk8L3hzZDpjaG9pY2U+Ci0JPC94c2Q6Z3JvdXA+Ci0KLQk8eHNkOmdyb3VwIG5hbWU9InRvcExldmVsRWxlbWVudHMiPgotCQk8eHNkOmNob2ljZT4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9ImltcG9ydCIgLz4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9ImluY2x1ZGUiIC8+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJzdHJpcC1zcGFjZSIgLz4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9InByZXNlcnZlLXNwYWNlIiAvPgotCQkJPHhzZDplbGVtZW50IHJlZj0ia2V5IiAvPgotCQkJPHhzZDplbGVtZW50IHJlZj0iZGVjaW1hbC1mb3JtYXQiIC8+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJhdHRyaWJ1dGUtc2V0IiAvPgotCQkJPHhzZDplbGVtZW50IHJlZj0ibmFtZXNwYWNlLWFsaWFzIiAvPgotCQkJPHhzZDplbGVtZW50IHJlZj0icGFyYW0iIC8+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJ2YXJpYWJsZSIgLz4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9Im91dHB1dCIgLz4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9InRlbXBsYXRlIiAvPgotCQk8L3hzZDpjaG9pY2U+Ci0JPC94c2Q6Z3JvdXA+Ci0KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iWWVzTm9UeXBlIj4KLQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLQkJCTx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InllcyIgLz4KLQkJCTx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Im5vIiAvPgotCQk8L3hzZDpyZXN0cmljdGlvbj4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJOYW1lZEFuZFNlbGVjdGFibGUiIG1peGVkPSJ0cnVlIj4KLQkJPHhzZDpncm91cCByZWY9Imluc3RydWN0aW9ucyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4KLQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHNkOk5NVE9LRU4iIHVzZT0icmVxdWlyZWQiIC8+Ci0JCTx4c2Q6YXR0cmlidXRlR3JvdXAgcmVmPSJzZWxlY3Qtb3B0aW9uYWwiIC8+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJleHByZXNzaW9uIj4KLQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJwYXR0ZXJuIj4KLQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCi0JPHhzZDphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZWxlY3Qtb3B0aW9uYWwiPgotCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJzZWxlY3QiIHR5cGU9ImV4cHJlc3Npb24iIC8+Ci0JPC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0JPHhzZDphdHRyaWJ1dGVHcm91cCBuYW1lPSJzZWxlY3QtcmVxdWlyZWQiPgotCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJzZWxlY3QiIHR5cGU9ImV4cHJlc3Npb24iIHVzZT0icmVxdWlyZWQiIC8+Ci0JPC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0JPHhzZDphdHRyaWJ1dGVHcm91cCBuYW1lPSJkaXNhYmxlLW91dHB1dC1lc2NhcGluZyI+Ci0JCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImRpc2FibGUtb3V0cHV0LWVzY2FwaW5nIiB0eXBlPSJZZXNOb1R5cGUiIGRlZmF1bHQ9Im5vIiAvPgotCTwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCTx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0idXNlLWF0dHJpYnV0ZS1zZXRzIj4KLQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0idXNlLWF0dHJpYnV0ZS1zZXRzIiB0eXBlPSJ4c2Q6Tk1UT0tFTlMiIHVzZT0ib3B0aW9uYWwiLz4KLQk8L3hzZDphdHRyaWJ1dGVHcm91cD4KLQotPC94c2Q6c2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NjA1ODU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgcHJvcGVydGllcyBmaWxlIGZvciBvcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMKLUJ1bmRsZS1WZW5kb3IuMCA9IEVjbGlwc2Uub3JnCi1CdW5kbGUtTmFtZS4wID0gWE1MIENhdGFsb2cgVGVzdHMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvcGx1Z2luLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYThmZmU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLTxwbHVnaW4+Ci0KLSAgICAJPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmNhdGFsb2dDb250cmlidXRpb25zIj4KLQkgIDxjYXRhbG9nQ29udHJpYnV0aW9uPiAKLSAgICAgICAgICAgPHN5c3RlbSBpZD0idGVzdFN5c3RlbUlkIgotICAgICAgICAgICAgICAgc3lzdGVtSWQ9Imh0dHA6Ly9wZXJzb25hbC9wZXJzb25hbC5kdGQiCi0gICAgICAgICAgICAgICB1cmk9ImRhdGEvUGVyc29uYWwvcGVyc29uYWwuZHRkIj4gCi0gICAgICAgICAgICAgICA8L3N5c3RlbT4KLSAgICAgICAgICAgPHB1YmxpYyBpZD0idGVzdFB1YmxpY0lkMSIKLSAgICAgICAgICAgICAgIHB1YmxpY0lkPSJJbnZvaWNlSWRfdGVzdCIKLSAgICAgICAgICAgICAgIHVyaT0iZGF0YS9JbnZvaWNlL0ludm9pY2UuZHRkIgotICAgICAgICAgICAgICAgd2ViVVJMPSJodHRwOi8vb3JnLmVjbGlwc2Uud3N0LnhtbC5leGFtcGxlL0ludm9pY2UuZHRkIj4KLSAgICAgICAgICA8L3B1YmxpYz4KLSAgICAgICAgICA8dXJpIGlkPSJ0ZXN0VXJpSWQxIgotICAgICAgICAgICAgICAgbmFtZT0iaHR0cDovL2FwYWNoZS5vcmcveG1sL3hjYXRhbG9nL2V4YW1wbGUiIAotICAgICAgICAgICAgICAgdXJpPSJkYXRhL2V4YW1wbGUvZXhhbXBsZS54c2QiLz4gCi0gICAgICAgICAgPHVyaSBpZD0idGVzdFVSSUlkMiIKLSAgICAgICAgICAgICAgIG5hbWU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotICAgICAgICAgICAgICAgdXJpPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnhzZC9jYWNoZS93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLnhzZCI+Ci0gICAgICAgICAgPC91cmk+IAotICAgICAgICAgICA8dXJpIGlkPSJ0ZXN0VVJJSWQzIgotICAgICAgICAgICAgICAgbmFtZT0iaHR0cDovL29hc2lzLm5hbWVzLnRjLmVudGl0eS54bWxucy54bWwuY2F0YWxvZyIKLSAgICAgICAgICAgICAgIHVyaT0iamFyOnBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvc2NoZW1hcy5qYXIhL2RhdGEvY2F0YWxvZy54c2QiPgotICAgICAgICAgIDwvdXJpPiAKLSAgICAgICAgICA8bmV4dENhdGFsb2cgaWQ9InRlc3ROZXN0ZWRDYXRhbG9nIgotICAgICAgICAgICAgICAgY2F0YWxvZz0iZGF0YS9jYXRhbG9nMS54bWwiLz4gCi0gICAgICAgPC9jYXRhbG9nQ29udHJpYnV0aW9uPiAKLQk8L2V4dGVuc2lvbj4gCi0gICAKLSAKLTwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NhdGFsb2cvdGVzdHMvaW50ZXJuYWwvQWJzdHJhY3RDYXRhbG9nVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NhdGFsb2cvdGVzdHMvaW50ZXJuYWwvQWJzdHJhY3RDYXRhbG9nVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMmI2M2QxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jYXRhbG9nL3Rlc3RzL2ludGVybmFsL0Fic3RyYWN0Q2F0YWxvZ1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXIuaW50ZXJuYWwudXRpbC5VUklIZWxwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLlhNTENvcmVQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNhdGFsb2cuQ2F0YWxvZ0NvbnRyaWJ1dG9yUmVnaXN0cnlSZWFkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNhdGFsb2cuQ2F0YWxvZ1NldDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY2F0YWxvZy5wcm92aXNpb25hbC5JQ2F0YWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY2F0YWxvZy5wcm92aXNpb25hbC5JQ2F0YWxvZ0VudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jYXRhbG9nLnByb3Zpc2lvbmFsLklOZXh0Q2F0YWxvZzsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RDYXRhbG9nVGVzdCBleHRlbmRzIFRlc3RDYXNlCi17Ci0gICAgcHJpdmF0ZSBDYXRhbG9nU2V0IGNhdGFsb2dTZXQgPSBuZXcgQ2F0YWxvZ1NldCgpOwotICAgIAotICAgIHByb3RlY3RlZCBJQ2F0YWxvZyBzeXN0ZW1DYXRhbG9nOwotCi0gICAgcHJvdGVjdGVkIElDYXRhbG9nIHVzZXJDYXRhbG9nOwotCi0gICAgcHJvdGVjdGVkIElDYXRhbG9nIGRlZmF1bHRDYXRhbG9nOwotICAgIAotICAgIAotICAgIHB1YmxpYyBBYnN0cmFjdENhdGFsb2dUZXN0KFN0cmluZyBuYW1lKQotICAgIHsKLSAgICAgICAgc3VwZXIobmFtZSk7Ci0gICAgICAgIAotICAgIH0KLQotICAgIHByb3RlY3RlZCBzdGF0aWMgTGlzdCBnZXRDYXRhbG9nRW50cmllcyhJQ2F0YWxvZyBjYXRhbG9nLCBpbnQgZW50cnlUeXBlKQotICAgIHsKLSAgICAgICAgTGlzdCByZXN1bHQgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgIElDYXRhbG9nRW50cnlbXSBlbnRyaWVzID0gY2F0YWxvZy5nZXRDYXRhbG9nRW50cmllcygpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGVudHJpZXMubGVuZ3RoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIElDYXRhbG9nRW50cnkgZW50cnkgPSBlbnRyaWVzW2ldOwotICAgICAgICAgICAgaWYgKGVudHJ5LmdldEVudHJ5VHlwZSgpID09IGVudHJ5VHlwZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXN1bHQuYWRkKGVudHJ5KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAKLSAgICBwcm90ZWN0ZWQgSUNhdGFsb2cgZ2V0Q2F0YWxvZyhTdHJpbmcgaWQsIFN0cmluZyB1cmlTdHJpbmcpIHRocm93cyBFeGNlcHRpb24KLSAgICB7Ci0JCXJldHVybiBjYXRhbG9nU2V0Lmxvb2t1cE9yQ3JlYXRlQ2F0YWxvZyhpZCwgdXJpU3RyaW5nKTsKLSAgICB9Ci0gICAgCi0KLSAgICBwdWJsaWMgdm9pZCBpbml0Q2F0YWxvZ3MoKQotICAgIHsKLSAgICAgICAgZGVmYXVsdENhdGFsb2cgPSBYTUxDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXREZWZhdWx0WE1MQ2F0YWxvZygpOwotICAgICAgICBJTmV4dENhdGFsb2dbXSBuZXh0Q2F0YWxvZ3MgPSBkZWZhdWx0Q2F0YWxvZy5nZXROZXh0Q2F0YWxvZ3MoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuZXh0Q2F0YWxvZ3MubGVuZ3RoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIElOZXh0Q2F0YWxvZyBjYXRhbG9nID0gbmV4dENhdGFsb2dzW2ldOwotICAgICAgICAgICAgSUNhdGFsb2cgcmVmZXJlbmNlZENhdGFsb2cgPSBjYXRhbG9nLmdldFJlZmVyZW5jZWRDYXRhbG9nKCk7Ci0gICAgICAgICAgICBpZiAocmVmZXJlbmNlZENhdGFsb2cgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoWE1MQ29yZVBsdWdpbi5TWVNURU1fQ0FUQUxPR19JRAotICAgICAgICAgICAgICAgICAgICAgICAgLmVxdWFscyhyZWZlcmVuY2VkQ2F0YWxvZy5nZXRJZCgpKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHN5c3RlbUNhdGFsb2cgPSByZWZlcmVuY2VkQ2F0YWxvZzsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFhNTENvcmVQbHVnaW4uVVNFUl9DQVRBTE9HX0lECi0gICAgICAgICAgICAgICAgICAgICAgICAuZXF1YWxzKHJlZmVyZW5jZWRDYXRhbG9nLmdldElkKCkpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdXNlckNhdGFsb2cgPSByZWZlcmVuY2VkQ2F0YWxvZzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIHN1cGVyLnNldFVwKCk7Ci0gICAgICAgIGluaXRDYXRhbG9ncygpOwotICAgIH0KLQkKLQlwcm90ZWN0ZWQgc3RhdGljIFN0cmluZyBtYWtlQWJzb2x1dGUoU3RyaW5nIGJhc2VMb2NhdGlvbiwgU3RyaW5nIGxvY2F0aW9uKQotCSAgewotCQkgIFVSTCBsb2NhbCA9IG51bGw7Ci0JCSAgbG9jYXRpb24gPSBsb2NhdGlvbi5yZXBsYWNlKCdcXCcsICcvJyk7Ci0JCSAgdHJ5Ci0JCSAgewotCQkJICBVUkwgYmFzZVVSTCA9IG5ldyBVUkwoYmFzZUxvY2F0aW9uKTsKLQkJCSAgbG9jYWwgPSBuZXcgVVJMKGJhc2VVUkwsIGxvY2F0aW9uKTsKLQkJICB9IGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkKLQkJICB7Ci0JCSAgfQotCQkgIAotCQkgIGlmIChsb2NhbCAhPSBudWxsKQotCQkgIHsKLQkJCSAgcmV0dXJuIGxvY2FsLnRvU3RyaW5nKCk7Ci0JCSAgfSBlbHNlCi0JCSAgewotCQkJICByZXR1cm4gbG9jYXRpb247Ci0JCSAgfQotCSAgfQotCQotCXByb3RlY3RlZCBzdGF0aWMgVVJMIHJlc29sdmVQbHVnaW5Mb2NhdGlvbihTdHJpbmcgcGx1Z2luSWQpewotCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKHBsdWdpbklkKTsKLQkJaWYgKGJ1bmRsZSAhPSBudWxsKQotCQl7Ci0JCQlVUkwgYnVuZGxlRW50cnkgPSBidW5kbGUuZ2V0RW50cnkoIi8iKTsKLQkJCXRyeQotCQkJewotCQkJCXJldHVybiBGaWxlTG9jYXRvci5yZXNvbHZlKGJ1bmRsZUVudHJ5KTsKLQkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0JCQl7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0JCi0JLy8gc2VlIENhdGFsb2dDb250cmlidXRvclJlZ2lzdHJ5UmVhZGVyLnJlc29sdmVQYXRoKFN0cmluZyBwYXRoKSAKLQkgIHByb3RlY3RlZCBTdHJpbmcgcmVzb2x2ZVBhdGgoU3RyaW5nIHBsdWdpbklkLCBTdHJpbmcgcGF0aCkgCi0JICB7Ci0KLQkJICByZXR1cm4gIENhdGFsb2dDb250cmlidXRvclJlZ2lzdHJ5UmVhZGVyLnJlc29sdmVQYXRoKCAKLQkJCQkgIENhdGFsb2dDb250cmlidXRvclJlZ2lzdHJ5UmVhZGVyLmdldFBsYXRmb3JtVVJMKHBsdWdpbklkKSwgcGF0aCk7Ci0JICB9Ci0JICAKLQkgIAotCSAgcHJvdGVjdGVkIFN0cmluZyBnZXRGaWxlTG9jYXRpb24oU3RyaW5nIHBhdGgpIHsKLQkJICBTdHJpbmcgcmVzdWx0ID0gbnVsbDsKLQkJICB0cnkgewotCQkJcmVzdWx0ID0gRmlsZUxvY2F0b3IudG9GaWxlVVJMKEZpbGVMb2NhdG9yLmZpbmQoVGVzdFBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCksIG5ldyBQYXRoKHBhdGgpLCBudWxsKSkudG9TdHJpbmcoKTsKLQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkge30KLQkJcmV0dXJuIFVSSUhlbHBlci5lbnN1cmVGaWxlVVJJUHJvdG9jb2xGb3JtYXQocmVzdWx0KTsKLQkgIH0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NhdGFsb2cvdGVzdHMvaW50ZXJuYWwvQWxsVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jYXRhbG9nL3Rlc3RzL2ludGVybmFsL0FsbFRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2NThjN2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NhdGFsb2cvdGVzdHMvaW50ZXJuYWwvQWxsVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1wdWJsaWMgY2xhc3MgQWxsVGVzdHMgewotCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgVGVzdFN1aXRlKAotCQkJCSJUZXN0IGZvciBvcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMiKTsKLQkJLy8kSlVuaXQtQkVHSU4kCi0JCXN1aXRlLmFkZFRlc3RTdWl0ZShDYXRhbG9nUmVhZGVyVGVzdC5jbGFzcyk7Ci0JCXN1aXRlLmFkZFRlc3RTdWl0ZShDYXRhbG9nUmVzb2x2ZXJUZXN0LmNsYXNzKTsKLQkJc3VpdGUuYWRkVGVzdFN1aXRlKENhdGFsb2dXcml0ZXJUZXN0LmNsYXNzKTsKLQkJc3VpdGUuYWRkVGVzdFN1aXRlKENhdGFsb2dDb250cmlidXRvclJlZ2lzdHJ5UmVhZGVyVGVzdC5jbGFzcyk7Ci0JCXN1aXRlLmFkZFRlc3RTdWl0ZShDYXRhbG9nVGVzdC5jbGFzcyk7Ci0JCS8vJEpVbml0LUVORCQKLQkJcmV0dXJuIHN1aXRlOwotCX0KLSAgICAKLQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY2F0YWxvZy90ZXN0cy9pbnRlcm5hbC9DYXRhbG9nQ29udHJpYnV0b3JSZWdpc3RyeVJlYWRlclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jYXRhbG9nL3Rlc3RzL2ludGVybmFsL0NhdGFsb2dDb250cmlidXRvclJlZ2lzdHJ5UmVhZGVyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjAwMWMxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jYXRhbG9nL3Rlc3RzL2ludGVybmFsL0NhdGFsb2dDb250cmlidXRvclJlZ2lzdHJ5UmVhZGVyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5YTUxDb3JlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jYXRhbG9nLnByb3Zpc2lvbmFsLklDYXRhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jYXRhbG9nLnByb3Zpc2lvbmFsLklDYXRhbG9nRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNhdGFsb2cucHJvdmlzaW9uYWwuSU5leHRDYXRhbG9nOwotCi0KLQotcHVibGljIGNsYXNzIENhdGFsb2dDb250cmlidXRvclJlZ2lzdHJ5UmVhZGVyVGVzdCBleHRlbmRzIEFic3RyYWN0Q2F0YWxvZ1Rlc3QKLXsKLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIHN1cGVyLnNldFVwKCk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotICAgICAgICBzdXBlci50ZWFyRG93bigpOwotICAgIH0KLQotICAgIHB1YmxpYyBDYXRhbG9nQ29udHJpYnV0b3JSZWdpc3RyeVJlYWRlclRlc3QoU3RyaW5nIG5hbWUpCi0gICAgewotICAgICAgICBzdXBlcihuYW1lKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgdm9pZCB0ZXN0UmVhZFJlZ2lzdHJ5KCkgdGhyb3dzIEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgYXNzZXJ0Tm90TnVsbChkZWZhdWx0Q2F0YWxvZyk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhYTUxDb3JlUGx1Z2luLkRFRkFVTFRfQ0FUQUxPR19JRCwgZGVmYXVsdENhdGFsb2cuZ2V0SWQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCBkZWZhdWx0Q2F0YWxvZy5nZXROZXh0Q2F0YWxvZ3MoKS5sZW5ndGgpOwotCi0JCVN0cmluZyBwbHVnaW5JZCA9IFRlc3RQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldFN5bWJvbGljTmFtZSgpOwotICAgIAotCQkgIC8vIHRlc3Qgc3lzdGVtIGVudHJpZXMKLSAgICAgICAgYXNzZXJ0Tm90TnVsbChzeXN0ZW1DYXRhbG9nKTsKLSAgICAgICAgTGlzdCBlbnRyaWVzID0gQ2F0YWxvZ1Rlc3QuZ2V0Q2F0YWxvZ0VudHJpZXMoc3lzdGVtQ2F0YWxvZywgSUNhdGFsb2dFbnRyeS5FTlRSWV9UWVBFX1NZU1RFTSk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgZW50cmllcy5zaXplKCk7IGkrKykKLQkJewotCQkJSUNhdGFsb2dFbnRyeSBlbnRyeSA9IChJQ2F0YWxvZ0VudHJ5KWVudHJpZXMuZ2V0KGkpOwotCQkJaWYoInRlc3RTeXN0ZW1JZCIuZXF1YWxzKGVudHJ5LmdldElkKCkpKQotCQkJewotCQkJCVN0cmluZyByZXNvbHZlZFVSSSA9IHJlc29sdmVQYXRoKHBsdWdpbklkLCAiZGF0YS9QZXJzb25hbC9wZXJzb25hbC5kdGQiKTsKLQkJCQlhc3NlcnRFcXVhbHMocmVzb2x2ZWRVUkksIGVudHJ5LmdldFVSSSgpKTsKLQkJCQlhc3NlcnRFcXVhbHMoImh0dHA6Ly9wZXJzb25hbC9wZXJzb25hbC5kdGQiLCBlbnRyeS5nZXRLZXkoKSk7Ci0JCQl9Ci0JCX0KLQkJCi0JCS8vIHRlc3QgcHVibGljIGVudHJpZXMKLSAgICAgICAgZW50cmllcyA9IENhdGFsb2dUZXN0LmdldENhdGFsb2dFbnRyaWVzKHN5c3RlbUNhdGFsb2csIElDYXRhbG9nRW50cnkuRU5UUllfVFlQRV9QVUJMSUMpOyAgICAgIAotCQlmb3IgKGludCBpID0gMDsgaSA8IGVudHJpZXMuc2l6ZSgpOyBpKyspCi0JCXsKLQkJCUlDYXRhbG9nRW50cnkgZW50cnkgPSAoSUNhdGFsb2dFbnRyeSllbnRyaWVzLmdldChpKTsKLQkJCWlmKCJ0ZXN0UHVibGljSWQxIi5lcXVhbHMoZW50cnkuZ2V0SWQoKSkpCi0JCQl7Ci0JCQkJU3RyaW5nIHJlc29sdmVkVVJJID0gcmVzb2x2ZVBhdGgocGx1Z2luSWQsICJkYXRhL0ludm9pY2UvSW52b2ljZS5kdGQiKTsKLQkJCQlhc3NlcnRFcXVhbHMocmVzb2x2ZWRVUkksIGVudHJ5LmdldFVSSSgpKTsKLQkJCQlhc3NlcnRFcXVhbHMoIkludm9pY2VJZF90ZXN0IiwgZW50cnkuZ2V0S2V5KCkpOwotCQkJCS8vIHRlc3QgdXNlciBkZWZpbmVkIGF0dHJpYnV0ZXMKLQkJCQlhc3NlcnRFcXVhbHMoImh0dHA6Ly9vcmcuZWNsaXBzZS53c3QueG1sLmV4YW1wbGUvSW52b2ljZS5kdGQiLCBlbnRyeS5nZXRBdHRyaWJ1dGVWYWx1ZSgid2ViVVJMIikpOwotCi0JCQl9Ci0JCQkKLQkJCWVsc2UgaWYoInRlc3RNYXBwaW5nSW5mbyIuZXF1YWxzKGVudHJ5LmdldElkKCkpKQotCQkJewotCQkJCVN0cmluZyByZXNvbHZlZFVSSSA9IHJlc29sdmVQYXRoKHBsdWdpbklkLCAicGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS54c2QvY2FjaGUvd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS54c2QiKTsKLQkJCQlhc3NlcnRFcXVhbHMocmVzb2x2ZWRVUkksIGVudHJ5LmdldFVSSSgpKTsKLQkJCQlhc3NlcnRFcXVhbHMoImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hMSIsIGVudHJ5LmdldEtleSgpKTsKLQkJCX0KLQkgICAgIAotCQl9Ci0gICAgICAKLSAgICAgICAgLy8gdGVzdCB1cmkgZW50cmllcwotICAgICAgICBlbnRyaWVzID0gQ2F0YWxvZ1Rlc3QuZ2V0Q2F0YWxvZ0VudHJpZXMoc3lzdGVtQ2F0YWxvZywgSUNhdGFsb2dFbnRyeS5FTlRSWV9UWVBFX1VSSSk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgZW50cmllcy5zaXplKCk7IGkrKykKLQkJewotCQkJSUNhdGFsb2dFbnRyeSBlbnRyeSA9IChJQ2F0YWxvZ0VudHJ5KWVudHJpZXMuZ2V0KGkpOwotCQkJaWYoInRlc3RVUklJZDEiLmVxdWFscyhlbnRyeS5nZXRJZCgpKSkKLQkJCXsKLQkJCQkgIFN0cmluZyByZXNvbHZlZFVSSSA9IHJlc29sdmVQYXRoKHBsdWdpbklkLCAiZGF0YS9leGFtcGxlL2V4YW1wbGUueHNkIik7Ci0JCQkgICAgICBhc3NlcnRFcXVhbHMocmVzb2x2ZWRVUkksIGVudHJ5LmdldFVSSSgpKTsKLQkJCSAgICAgIGFzc2VydEVxdWFscygiaHR0cDovL2FwYWNoZS5vcmcveG1sL3hjYXRhbG9nL2V4YW1wbGUiLCBlbnRyeS5nZXRLZXkoKSk7Ci0JCQl9Ci0JCQllbHNlIGlmKCJ0ZXN0VVJJSWQyIi5lcXVhbHMoZW50cnkuZ2V0SWQoKSkpCi0JCQl7Ci0JCQkJU3RyaW5nIHJlc29sdmVkVVJJID0gcmVzb2x2ZVBhdGgocGx1Z2luSWQsICJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnhzZC9jYWNoZS93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLnhzZCIpOwotCQkJCWFzc2VydEVxdWFscyhyZXNvbHZlZFVSSSwgZW50cnkuZ2V0VVJJKCkpOwotCQkJCWFzc2VydEVxdWFscygiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiLCBlbnRyeS5nZXRLZXkoKSk7Ci0JCQl9Ci0JCQllbHNlIGlmKCJ0ZXN0VVJJSWQzIi5lcXVhbHMoZW50cnkuZ2V0SWQoKSkpCi0JCQl7Ci0JCQkJU3RyaW5nIHJlc29sdmVkVVJJID0gcmVzb2x2ZVBhdGgocGx1Z2luSWQsICJqYXI6cGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9zY2hlbWFzLmphciEvZGF0YS9jYXRhbG9nLnhzZCIpOwotCQkJCWFzc2VydEVxdWFscyhyZXNvbHZlZFVSSSwgZW50cnkuZ2V0VVJJKCkpOwotCQkJCWFzc2VydEVxdWFscygiaHR0cDovL29hc2lzLm5hbWVzLnRjLmVudGl0eS54bWxucy54bWwuY2F0YWxvZyIsIGVudHJ5LmdldEtleSgpKTsKLQkJCX0KLQkJfQotICAgICAgCi0gICAgICAgIC8vIHRlc3QgdGVzdGVkIGNhdGFsb2cKLSAgICAgICAgSU5leHRDYXRhbG9nW10gbmV4dENhdGFsb2dFbnRyaWVzID0gc3lzdGVtQ2F0YWxvZy5nZXROZXh0Q2F0YWxvZ3MoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuZXh0Q2F0YWxvZ0VudHJpZXMubGVuZ3RoOyBpKyspCi0JCXsKLQkJCUlOZXh0Q2F0YWxvZyBuZXh0Q2F0YWxvZ0VudHJ5ID0gKElOZXh0Q2F0YWxvZykgbmV4dENhdGFsb2dFbnRyaWVzW2ldOwotCQkJaWYoInRlc3ROZXN0ZWRDYXRhbG9nIi5lcXVhbHMobmV4dENhdGFsb2dFbnRyeS5nZXRJZCgpKSkKLQkJCXsKLQkJCQlTdHJpbmcgcmVzb2x2ZWRVUkkgPSByZXNvbHZlUGF0aChwbHVnaW5JZCwgImRhdGEvY2F0YWxvZzEueG1sIik7Ci0JCQkJYXNzZXJ0RXF1YWxzKHJlc29sdmVkVVJJLCBuZXh0Q2F0YWxvZ0VudHJ5LmdldENhdGFsb2dMb2NhdGlvbigpKTsKLQkJCQlJQ2F0YWxvZyBuZXh0Q2F0YWxvZyA9IG5leHRDYXRhbG9nRW50cnkuZ2V0UmVmZXJlbmNlZENhdGFsb2coKTsKLQkJCQlhc3NlcnROb3ROdWxsKG5leHRDYXRhbG9nKTsKLQkJCQlhc3NlcnRFcXVhbHMoMywgbmV4dENhdGFsb2cuZ2V0Q2F0YWxvZ0VudHJpZXMoKS5sZW5ndGgpOwotCQkJCS8vIHRlc3QgcHVibGljIGVudHJpZXMKLQkJCQllbnRyaWVzID0gQ2F0YWxvZ1Rlc3QuZ2V0Q2F0YWxvZ0VudHJpZXMobmV4dENhdGFsb2csCi0JCQkJCQlJQ2F0YWxvZ0VudHJ5LkVOVFJZX1RZUEVfUFVCTElDKTsKLQkJCQlhc3NlcnRFcXVhbHMoMSwgZW50cmllcy5zaXplKCkpOwotCQkJCUlDYXRhbG9nRW50cnkgZW50cnkgPSAoSUNhdGFsb2dFbnRyeSkgZW50cmllcy5nZXQoMCk7Ci0JCQkJLy9VUkkgdXJpID0gVVJJSGVscGVyLmdldFVSSUZvckZpbGVQYXRoKHJlc29sdmVkVVJJKTsKLQkJCQkvL3Jlc29sdmVkVVJJID0gVVJJSGVscGVyLm1ha2VBYnNvbHV0ZSh1cmkudG9VUkwoKSwgIi4vSW52b2ljZS9JbnZvaWNlLmR0ZCIpOwotCQkJCWFzc2VydEVxdWFscyhnZXRGaWxlTG9jYXRpb24oImRhdGEvSW52b2ljZS9JbnZvaWNlLmR0ZCIpLCBlbnRyeS5nZXRVUkkoKSk7Ci0JCQkJYXNzZXJ0RXF1YWxzKCJJbnZvaWNlSWRfdGVzdCIsIGVudHJ5LmdldEtleSgpKTsKLQkJCQkvLyB0ZXN0IHN5c3RlbSBlbnRyaWVzCi0JCQkJZW50cmllcyA9IENhdGFsb2dUZXN0LmdldENhdGFsb2dFbnRyaWVzKG5leHRDYXRhbG9nLAotCQkJCQkJSUNhdGFsb2dFbnRyeS5FTlRSWV9UWVBFX1NZU1RFTSk7Ci0JCQkJYXNzZXJ0RXF1YWxzKDEsIGVudHJpZXMuc2l6ZSgpKTsKLQkJCQllbnRyeSA9IChJQ2F0YWxvZ0VudHJ5KSBlbnRyaWVzLmdldCgwKTsKLQkJCQlhc3NlcnRFcXVhbHMoZ2V0RmlsZUxvY2F0aW9uKCJkYXRhL0ludm9pY2UvSW52b2ljZS5kdGQiKSwgZW50cnkuZ2V0VVJJKCkpOwotCQkJCWFzc2VydEVxdWFscygiSW52b2ljZS5kdGQiLCBlbnRyeS5nZXRLZXkoKSk7Ci0JCQkJLy8gdGVzdCB1cmkgZW50cmllcwotCQkJCWVudHJpZXMgPSBDYXRhbG9nVGVzdC5nZXRDYXRhbG9nRW50cmllcyhuZXh0Q2F0YWxvZywKLQkJCQkJCUlDYXRhbG9nRW50cnkuRU5UUllfVFlQRV9VUkkpOwotCQkJCWFzc2VydEVxdWFscygxLCBlbnRyaWVzLnNpemUoKSk7Ci0JCQkJZW50cnkgPSAoSUNhdGFsb2dFbnRyeSkgZW50cmllcy5nZXQoMCk7Ci0JCQkJYXNzZXJ0RXF1YWxzKGdldEZpbGVMb2NhdGlvbigiZGF0YS9JbnZvaWNlL0ludm9pY2UuZHRkIiksIGVudHJ5LmdldFVSSSgpKTsKLQkJCQlhc3NlcnRFcXVhbHMoImh0dHA6Ly93d3cudGVzdC5jb20vSW52b2ljZS5kdGQiLCBlbnRyeS5nZXRLZXkoKSk7Ci0JCQl9Ci0JCX0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY2F0YWxvZy90ZXN0cy9pbnRlcm5hbC9DYXRhbG9nUmVhZGVyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NhdGFsb2cvdGVzdHMvaW50ZXJuYWwvQ2F0YWxvZ1JlYWRlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDY5OWI4ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY2F0YWxvZy90ZXN0cy9pbnRlcm5hbC9DYXRhbG9nUmVhZGVyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTUyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNhdGFsb2cuQ2F0YWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY2F0YWxvZy5wcm92aXNpb25hbC5JQ2F0YWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY2F0YWxvZy5wcm92aXNpb25hbC5JQ2F0YWxvZ0VudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jYXRhbG9nLnByb3Zpc2lvbmFsLklOZXh0Q2F0YWxvZzsKLQotCi1wdWJsaWMgY2xhc3MgQ2F0YWxvZ1JlYWRlclRlc3QgZXh0ZW5kcyBBYnN0cmFjdENhdGFsb2dUZXN0IHsKLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnNldFVwKCk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIudGVhckRvd24oKTsKLQl9Ci0KLQlwdWJsaWMgQ2F0YWxvZ1JlYWRlclRlc3QoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0KLQkvKgotCSAqIENsYXNzIHVuZGVyIHRlc3QgZm9yIHZvaWQgcmVhZChJQ2F0YWxvZywgU3RyaW5nKQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RSZWFkQ2F0YWxvZygpdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLQkJLy9yZWFkIGNhdGFsb2cKLQkJU3RyaW5nIGNhdGFsb2dGaWxlID0gIi9kYXRhL2NhdGFsb2cxLnhtbCI7Ci0JCVVSTCBjYXRhbG9nVXJsID0gVGVzdFBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0RW50cnkoY2F0YWxvZ0ZpbGUpOwotCQlhc3NlcnROb3ROdWxsKGNhdGFsb2dVcmwpOwotCQlVUkwgYmFzZSA9IEZpbGVMb2NhdG9yLnJlc29sdmUoY2F0YWxvZ1VybCk7Ci0KLQkJQ2F0YWxvZyBjYXRhbG9nID0gKENhdGFsb2cpZ2V0Q2F0YWxvZygiY2F0YWxvZzEiLCBiYXNlLnRvU3RyaW5nKCkpOwotCQkvL0NhdGFsb2dSZWFkZXIucmVhZChjYXRhbG9nLCBjYXRhbG9nRmlsZVBhdGgpOwotCQlhc3NlcnROb3ROdWxsKGNhdGFsb2cpOwotCQkKLQkJLy8gdGVzdCBtYWluIGNhdGFsb2cgLSBjYXRhbG9nMS54bWwKLQkJLy9hc3NlcnRFcXVhbHMoImNhdDEiLCBjYXRhbG9nLmdldElkKCkpOwotCQlhc3NlcnRFcXVhbHMoMywgY2F0YWxvZy5nZXRDYXRhbG9nRW50cmllcygpLmxlbmd0aCk7Ci0JCQkKLQkJLy8gdGVzdCBwdWJsaWMgZW50cmllcwotCQlMaXN0IGVudHJpZXMgPSBDYXRhbG9nVGVzdC5nZXRDYXRhbG9nRW50cmllcyhjYXRhbG9nLCBJQ2F0YWxvZ0VudHJ5LkVOVFJZX1RZUEVfUFVCTElDKTsKLQkJYXNzZXJ0RXF1YWxzKDEsIGVudHJpZXMuc2l6ZSgpKTsKLQkJSUNhdGFsb2dFbnRyeSBlbnRyeSA9IChJQ2F0YWxvZ0VudHJ5KWVudHJpZXMuZ2V0KDApOwotCQkvL1N0cmluZyByZXNvbHZlZFVSSSA9IFVSSUhlbHBlci5tYWtlQWJzb2x1dGUoYmFzZSwgIi4vSW52b2ljZS9JbnZvaWNlLmR0ZCIpOwotCi0JCQotCQlhc3NlcnRFcXVhbHMoZ2V0RmlsZUxvY2F0aW9uKCIvZGF0YS9JbnZvaWNlL0ludm9pY2UuZHRkIiksIGVudHJ5LmdldFVSSSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJJbnZvaWNlSWRfdGVzdCIsIGVudHJ5LmdldEtleSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJodHRwOi8vd2ViVVJMIiwgZW50cnkuZ2V0QXR0cmlidXRlVmFsdWUoIndlYlVSTCIpKTsKLQotCQkKLQkJLy8gIHRlc3Qgc3lzdGVtIGVudHJpZXMKLQkJZW50cmllcyA9IENhdGFsb2dUZXN0LmdldENhdGFsb2dFbnRyaWVzKGNhdGFsb2csIElDYXRhbG9nRW50cnkuRU5UUllfVFlQRV9TWVNURU0pOwotCQlhc3NlcnRFcXVhbHMoMSwgZW50cmllcy5zaXplKCkpOwotCQllbnRyeSA9IChJQ2F0YWxvZ0VudHJ5KWVudHJpZXMuZ2V0KDApOwotCQlhc3NlcnRFcXVhbHMoZ2V0RmlsZUxvY2F0aW9uKCIvZGF0YS9JbnZvaWNlL0ludm9pY2UuZHRkIiksIGVudHJ5LmdldFVSSSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJJbnZvaWNlLmR0ZCIsIGVudHJ5LmdldEtleSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ5ZXMiLCBlbnRyeS5nZXRBdHRyaWJ1dGVWYWx1ZSgiY2hhY2hlZCIpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ2YWx1ZTEiLCBlbnRyeS5nZXRBdHRyaWJ1dGVWYWx1ZSgicHJvcGVydHkiKSk7Ci0KLQotCQkvLyAgdGVzdCB1cmkgZW50cmllcwotCQllbnRyaWVzID0gQ2F0YWxvZ1Rlc3QuZ2V0Q2F0YWxvZ0VudHJpZXMoY2F0YWxvZywgSUNhdGFsb2dFbnRyeS5FTlRSWV9UWVBFX1VSSSk7Ci0JCWFzc2VydEVxdWFscygxLCBlbnRyaWVzLnNpemUoKSk7Ci0JCWVudHJ5ID0gKElDYXRhbG9nRW50cnkpZW50cmllcy5nZXQoMCk7Ci0JCWFzc2VydEVxdWFscyhnZXRGaWxlTG9jYXRpb24oIi9kYXRhL0ludm9pY2UvSW52b2ljZS5kdGQiKSwgZW50cnkuZ2V0VVJJKCkpOwotCQlhc3NlcnRFcXVhbHMoImh0dHA6Ly93d3cudGVzdC5jb20vSW52b2ljZS5kdGQiLCBlbnRyeS5nZXRLZXkoKSk7Ci0JCWFzc2VydEVxdWFscygibm8iLCBlbnRyeS5nZXRBdHRyaWJ1dGVWYWx1ZSgiY2hhY2hlZCIpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ2YWx1ZTIiLCBlbnRyeS5nZXRBdHRyaWJ1dGVWYWx1ZSgicHJvcGVydHkiKSk7Ci0JCQotCQkvLyAgdGVzdCBuZXh0IGNhdGFsb2cgLSBjYXRhbG9nMi54bWwKLQkJSU5leHRDYXRhbG9nW10gbmV4dENhdGFsb2dFbnRyaWVzID0gY2F0YWxvZy5nZXROZXh0Q2F0YWxvZ3MoKTsKLQkJYXNzZXJ0RXF1YWxzKDEsIG5leHRDYXRhbG9nRW50cmllcy5sZW5ndGgpOwotCQotCQlJTmV4dENhdGFsb2cgbmV4dENhdGFsb2dFbnRyeSA9IChJTmV4dENhdGFsb2cpbmV4dENhdGFsb2dFbnRyaWVzWzBdOwotCQlhc3NlcnROb3ROdWxsKG5leHRDYXRhbG9nRW50cnkpOwotCQkKLS8vCQlTdHJpbmcgY2F0YWxvZ1JlZklkID0gbmV4dENhdGFsb2dFbnRyeS5nZXRDYXRhbG9nUmVmSWQoKTsKLS8vCQlhc3NlcnRFcXVhbHMoIm5leHRDYXRhbG9nMSIsIGNhdGFsb2dSZWZJZCk7Ci0JCS8vcmVzb2x2ZWRVUkkgPSBVUklIZWxwZXIubWFrZUFic29sdXRlKGJhc2UsICJjYXRhbG9nMi54bWwiKTsKLQkJYXNzZXJ0RXF1YWxzKCJjYXRhbG9nMi54bWwiLCBuZXh0Q2F0YWxvZ0VudHJ5LmdldENhdGFsb2dMb2NhdGlvbigpKTsKLQotCQlJQ2F0YWxvZyBuZXh0Q2F0YWxvZyA9IG5leHRDYXRhbG9nRW50cnkuZ2V0UmVmZXJlbmNlZENhdGFsb2coKTsKLQotCQlhc3NlcnROb3ROdWxsKG5leHRDYXRhbG9nKTsKLQkJYXNzZXJ0RXF1YWxzKDQsIG5leHRDYXRhbG9nLmdldENhdGFsb2dFbnRyaWVzKCkubGVuZ3RoKTsKLQkJCi0JCS8vIHRlc3QgcHVibGljIGVudHJpZXMKLQkJZW50cmllcyA9IENhdGFsb2dUZXN0LmdldENhdGFsb2dFbnRyaWVzKG5leHRDYXRhbG9nLCBJQ2F0YWxvZ0VudHJ5LkVOVFJZX1RZUEVfUFVCTElDKTsKLQkJYXNzZXJ0RXF1YWxzKDIsIGVudHJpZXMuc2l6ZSgpKTsKLQkJZW50cnkgPSAoSUNhdGFsb2dFbnRyeSllbnRyaWVzLmdldCgwKTsKLQkJLy9yZXNvbHZlZFVSSSA9IFVSSUhlbHBlci5tYWtlQWJzb2x1dGUobmV4dENhdGFsb2cuZ2V0QmFzZSgpLCAiLi9QdWJsaWNhdGlvbkNhdGFsb2d1ZS9DYXRhbG9ndWUueHNkIik7Ci0JCWFzc2VydEVxdWFscyhnZXRGaWxlTG9jYXRpb24oIi9kYXRhL1B1YmxpY2F0aW9uQ2F0YWxvZ3VlL0NhdGFsb2d1ZS54c2QiKSwgZW50cnkuZ2V0VVJJKCkpOwotCQlhc3NlcnRFcXVhbHMoImh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvQ2F0YWxvZ3VlXzAwMSIsIGVudHJ5LmdldEtleSgpKTsKLQkJCi0JCS8vIHRlc3QgcHVibGljIGVudHJ5IGZyb20gYSBncm91cAotCQllbnRyeSA9IChJQ2F0YWxvZ0VudHJ5KWVudHJpZXMuZ2V0KDEpOwotCQkvL3Jlc29sdmVkVVJJID0gVVJJSGVscGVyLm1ha2VBYnNvbHV0ZShuZXh0Q2F0YWxvZy5nZXRCYXNlKCksICIuL1B1YmxpY2F0aW9uQ2F0YWxvZ3VlL0NhdGFsb2d1ZS54c2QiKTsKLQkJYXNzZXJ0RXF1YWxzKGdldEZpbGVMb2NhdGlvbigiL2RhdGEvUHVibGljYXRpb25DYXRhbG9ndWUvQ2F0YWxvZ3VlLnhzZCIpLCBlbnRyeS5nZXRVUkkoKSk7Ci0JCWFzc2VydEVxdWFscygiaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9DYXRhbG9ndWVfMDAyIiwgZW50cnkuZ2V0S2V5KCkpOwotCi0JCS8vICB0ZXN0IHN5c3RlbSBlbnRyaWVzCi0JCWVudHJpZXMgPSBDYXRhbG9nVGVzdC5nZXRDYXRhbG9nRW50cmllcyhuZXh0Q2F0YWxvZywgSUNhdGFsb2dFbnRyeS5FTlRSWV9UWVBFX1NZU1RFTSk7Ci0JCWFzc2VydEVxdWFscygxLCBlbnRyaWVzLnNpemUoKSk7Ci0JCWVudHJ5ID0gKElDYXRhbG9nRW50cnkpZW50cmllcy5nZXQoMCk7Ci0JCWFzc2VydEVxdWFscyhnZXRGaWxlTG9jYXRpb24oIi9kYXRhL1B1YmxpY2F0aW9uQ2F0YWxvZ3VlL0NhdGFsb2d1ZS54c2QiKSwgZW50cnkuZ2V0VVJJKCkpOwotCQlhc3NlcnRFcXVhbHMoIkNhdGFsb2d1ZS54c2QiLCBlbnRyeS5nZXRLZXkoKSk7Ci0JCS8vICB0ZXN0IHVyaSBlbnRyaWVzCi0JCWVudHJpZXMgPSBDYXRhbG9nVGVzdC5nZXRDYXRhbG9nRW50cmllcyhuZXh0Q2F0YWxvZywgSUNhdGFsb2dFbnRyeS5FTlRSWV9UWVBFX1VSSSk7Ci0JCWFzc2VydEVxdWFscygxLCBlbnRyaWVzLnNpemUoKSk7Ci0JCWVudHJ5ID0gKElDYXRhbG9nRW50cnkpZW50cmllcy5nZXQoMCk7Ci0JCWFzc2VydEVxdWFscygiaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9DYXRhbG9ndWUvQ2F0YWxvZ3VlLnhzZCIsIGVudHJ5LmdldFVSSSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL0NhdGFsb2d1ZS54c2QiLCBlbnRyeS5nZXRLZXkoKSk7Ci0JCQotCi0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RDb21wYXRhYmlsaXR5UmVhZGVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vCXJlYWQgY2F0YWxvZwotCQlTdHJpbmcgY2F0YWxvZ0ZpbGUgPSAiL2RhdGEvY29tcGF0YWJpbGl0eVRlc3QueG1sY2F0YWxvZyI7Ci0JCVVSTCBjYXRhbG9nVXJsID0gVGVzdFBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0RW50cnkoY2F0YWxvZ0ZpbGUpOwotCQlhc3NlcnROb3ROdWxsKGNhdGFsb2dVcmwpOwotCQlVUkwgYmFzZSA9IEZpbGVMb2NhdG9yLnJlc29sdmUoY2F0YWxvZ1VybCk7Ci0KLQkJQ2F0YWxvZyBjYXRhbG9nID0gKENhdGFsb2cpZ2V0Q2F0YWxvZygiY29tcGF0YWJpbGl0eUNhdGFsb2ciLCBiYXNlLnRvU3RyaW5nKCkpOwotCQkvL0NhdGFsb2dSZWFkZXIucmVhZChjYXRhbG9nLCBjYXRhbG9nRmlsZVBhdGgpOwotCQlhc3NlcnROb3ROdWxsKGNhdGFsb2cpOwotCQlMaXN0IGVudHJpZXMgPSBDYXRhbG9nVGVzdC5nZXRDYXRhbG9nRW50cmllcyhjYXRhbG9nLCBJQ2F0YWxvZ0VudHJ5LkVOVFJZX1RZUEVfUFVCTElDKTsKLQkJYXNzZXJ0RXF1YWxzKDEsIGVudHJpZXMuc2l6ZSgpKTsKLQkJSUNhdGFsb2dFbnRyeSBlbnRyeSA9IChJQ2F0YWxvZ0VudHJ5KWVudHJpZXMuZ2V0KDApOwotCQlhc3NlcnRFcXVhbHMoInBsYXRmb3JtOi9yZXNvdXJjZS9YTUxFeGFtcGxlcy9JbnZvaWNlMi9JbnZvaWNlLmR0ZCIsIGVudHJ5LmdldFVSSSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJJbnZvaWNlSWQiLCBlbnRyeS5nZXRLZXkoKSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NhdGFsb2cvdGVzdHMvaW50ZXJuYWwvQ2F0YWxvZ1Jlc29sdmVyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NhdGFsb2cvdGVzdHMvaW50ZXJuYWwvQ2F0YWxvZ1Jlc29sdmVyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MGY0NTM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jYXRhbG9nL3Rlc3RzL2ludGVybmFsL0NhdGFsb2dSZXNvbHZlclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVyaXJlc29sdmVyLmludGVybmFsLnV0aWwuVVJJSGVscGVyOwotCi0KLXB1YmxpYyBjbGFzcyBDYXRhbG9nUmVzb2x2ZXJUZXN0IGV4dGVuZHMgQWJzdHJhY3RDYXRhbG9nVGVzdCB7Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zZXRVcCgpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnRlYXJEb3duKCk7Ci0JfQotCi0JcHVibGljIENhdGFsb2dSZXNvbHZlclRlc3QoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIGZpbmFsIHZvaWQgdGVzdFJlc29sdmVSZXNvbHZlcigpIHRocm93cyBFeGNlcHRpb24gewotCQotCQotCQkvLyBmcm9tIHBsdWdpbi54bWwgZmlsZQotCQlTdHJpbmcgcGx1Z2luQmFzZSA9IHJlc29sdmVQbHVnaW5Mb2NhdGlvbihUZXN0UGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRTeW1ib2xpY05hbWUoKSkudG9TdHJpbmcoKTsKLQotCQlTdHJpbmcgcmVzb2x2ZWRBY3R1YWwgPSBkZWZhdWx0Q2F0YWxvZy5yZXNvbHZlUHVibGljKCJJbnZvaWNlSWRfdGVzdCIsIG51bGwpOwotCQlTdHJpbmcgcmVzb2x2ZWRVUkkgPSBtYWtlQWJzb2x1dGUocGx1Z2luQmFzZSwgImRhdGEvSW52b2ljZS9JbnZvaWNlLmR0ZCIpOwotCQlhc3NlcnRFcXVhbHMocmVzb2x2ZWRVUkksIHJlc29sdmVkQWN0dWFsKTsKLQkJcmVzb2x2ZWRBY3R1YWwgPSBkZWZhdWx0Q2F0YWxvZy5yZXNvbHZlU3lzdGVtKCJodHRwOi8vcGVyc29uYWwvcGVyc29uYWwuZHRkIik7Ci0JCXJlc29sdmVkVVJJID0gbWFrZUFic29sdXRlKHBsdWdpbkJhc2UsICJkYXRhL1BlcnNvbmFsL3BlcnNvbmFsLmR0ZCIpOwotCQlhc3NlcnRFcXVhbHMocmVzb2x2ZWRVUkksIHJlc29sdmVkQWN0dWFsKTsKLQkJcmVzb2x2ZWRBY3R1YWwgPSBkZWZhdWx0Q2F0YWxvZy5yZXNvbHZlVVJJKCJodHRwOi8vYXBhY2hlLm9yZy94bWwveGNhdGFsb2cvZXhhbXBsZSIpOwotCQlyZXNvbHZlZFVSSSA9IG1ha2VBYnNvbHV0ZShwbHVnaW5CYXNlLCAiZGF0YS9leGFtcGxlL2V4YW1wbGUueHNkIik7Ci0JCWFzc2VydEVxdWFscyhyZXNvbHZlZFVSSSwgcmVzb2x2ZWRBY3R1YWwpOwotCQlyZXNvbHZlZEFjdHVhbCA9IGRlZmF1bHRDYXRhbG9nLnJlc29sdmVVUkkoImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIik7Ci0JCXJlc29sdmVkVVJJID0gcmVzb2x2ZVBhdGgoIiIsICJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnhzZC9jYWNoZS93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLnhzZCIpOwotCQlyZXNvbHZlZFVSSSA9IG1ha2VBYnNvbHV0ZShwbHVnaW5CYXNlLCByZXNvbHZlZFVSSSk7Ci0JCWFzc2VydEVxdWFscyhyZXNvbHZlZFVSSSwgcmVzb2x2ZWRBY3R1YWwpOwotCQkKLQkJLy8gZnJvbSBjYXRhbG9nMS54bWwKLQkJcmVzb2x2ZWRBY3R1YWwgPSBkZWZhdWx0Q2F0YWxvZy5yZXNvbHZlUHVibGljKCJJbnZvaWNlSWRfdGVzdCIsIG51bGwpOwotCQlyZXNvbHZlZFVSSSA9IG1ha2VBYnNvbHV0ZShwbHVnaW5CYXNlLCAiZGF0YS9JbnZvaWNlL0ludm9pY2UuZHRkIik7Ci0JCWFzc2VydEVxdWFscyhyZXNvbHZlZFVSSSwgcmVzb2x2ZWRBY3R1YWwpOwotCi0JCXJlc29sdmVkQWN0dWFsID0gZGVmYXVsdENhdGFsb2cucmVzb2x2ZVN5c3RlbSgiSW52b2ljZS5kdGQiKTsKLQkJcmVzb2x2ZWRVUkkgPSBtYWtlQWJzb2x1dGUocGx1Z2luQmFzZSwgImRhdGEvSW52b2ljZS9JbnZvaWNlLmR0ZCIpOwotCQlhc3NlcnRFcXVhbHMoVVJJSGVscGVyLmVuc3VyZUZpbGVVUklQcm90b2NvbEZvcm1hdChyZXNvbHZlZFVSSSksIHJlc29sdmVkQWN0dWFsKTsKLQotCQlyZXNvbHZlZEFjdHVhbCA9IGRlZmF1bHRDYXRhbG9nLnJlc29sdmVVUkkoImh0dHA6Ly93d3cudGVzdC5jb20vSW52b2ljZS5kdGQiKTsKLQkJcmVzb2x2ZWRVUkkgPSBtYWtlQWJzb2x1dGUocGx1Z2luQmFzZSwgImRhdGEvSW52b2ljZS9JbnZvaWNlLmR0ZCIpOwotCQlhc3NlcnRFcXVhbHMoVVJJSGVscGVyLmVuc3VyZUZpbGVVUklQcm90b2NvbEZvcm1hdChyZXNvbHZlZFVSSSksIHJlc29sdmVkQWN0dWFsKTsKLQotCQkKLQkJLy8gZnJvbSBjYXRhbG9nMi54bWwKLQkJcmVzb2x2ZWRBY3R1YWwgPSBkZWZhdWx0Q2F0YWxvZy5yZXNvbHZlUHVibGljKCJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL0NhdGFsb2d1ZV8wMDEiLCBudWxsKTsKLQkJcmVzb2x2ZWRVUkkgPSBtYWtlQWJzb2x1dGUocGx1Z2luQmFzZSwgImRhdGEvUHVibGljYXRpb25DYXRhbG9ndWUvQ2F0YWxvZ3VlLnhzZCIpOwotCQlhc3NlcnRFcXVhbHMoVVJJSGVscGVyLmVuc3VyZUZpbGVVUklQcm90b2NvbEZvcm1hdChyZXNvbHZlZFVSSSksIHJlc29sdmVkQWN0dWFsKTsKLQkJCi0JCXJlc29sdmVkQWN0dWFsID0gZGVmYXVsdENhdGFsb2cucmVzb2x2ZVB1YmxpYygiaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9DYXRhbG9ndWVfMDAyIiwgbnVsbCk7Ci0JCXJlc29sdmVkVVJJID0gbWFrZUFic29sdXRlKHBsdWdpbkJhc2UsICJkYXRhL1B1YmxpY2F0aW9uQ2F0YWxvZ3VlL0NhdGFsb2d1ZS54c2QiKTsKLQkJYXNzZXJ0RXF1YWxzKFVSSUhlbHBlci5lbnN1cmVGaWxlVVJJUHJvdG9jb2xGb3JtYXQocmVzb2x2ZWRVUkkpLCByZXNvbHZlZEFjdHVhbCk7Ci0KLQkJcmVzb2x2ZWRBY3R1YWwgPSBkZWZhdWx0Q2F0YWxvZy5yZXNvbHZlU3lzdGVtKCJDYXRhbG9ndWUueHNkIik7Ci0JCXJlc29sdmVkVVJJID0gbWFrZUFic29sdXRlKHBsdWdpbkJhc2UsICJkYXRhL1B1YmxpY2F0aW9uQ2F0YWxvZ3VlL0NhdGFsb2d1ZS54c2QiKTsKLQkJYXNzZXJ0RXF1YWxzKFVSSUhlbHBlci5lbnN1cmVGaWxlVVJJUHJvdG9jb2xGb3JtYXQocmVzb2x2ZWRVUkkpLCByZXNvbHZlZEFjdHVhbCk7Ci0KLQl9Ci0KLQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY2F0YWxvZy90ZXN0cy9pbnRlcm5hbC9DYXRhbG9nVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NhdGFsb2cvdGVzdHMvaW50ZXJuYWwvQ2F0YWxvZ1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTZhZmMzZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY2F0YWxvZy90ZXN0cy9pbnRlcm5hbC9DYXRhbG9nVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLlhNTENvcmVQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNhdGFsb2cuQ2F0YWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY2F0YWxvZy5wcm92aXNpb25hbC5JQ2F0YWxvZ0VudHJ5OwotCi0KLQotcHVibGljIGNsYXNzIENhdGFsb2dUZXN0IGV4dGVuZHMgQWJzdHJhY3RDYXRhbG9nVGVzdCB7Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zZXRVcCgpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnRlYXJEb3duKCk7Ci0JfQotCi0JcHVibGljIENhdGFsb2dUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCB0ZXN0Q2F0YWxvZygpIHRocm93cyBFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgQ2F0YWxvZyB3b3JraW5nVXNlckNhdGFsb2cgPSBuZXcgQ2F0YWxvZyhudWxsLCAid29ya2luZyIsIG51bGwpOwotICAgICAgIGFzc2VydE5vdE51bGwodXNlckNhdGFsb2cpOwotICAgICAgIHdvcmtpbmdVc2VyQ2F0YWxvZy5hZGRFbnRyaWVzRnJvbUNhdGFsb2codXNlckNhdGFsb2cpOwotICAgICAgIAotICAgICAgIElDYXRhbG9nRW50cnkgY2F0YWxvZ0VudHJ5ID0gKElDYXRhbG9nRW50cnkpdXNlckNhdGFsb2cuY3JlYXRlQ2F0YWxvZ0VsZW1lbnQoSUNhdGFsb2dFbnRyeS5FTlRSWV9UWVBFX1BVQkxJQyk7Ci0gICAgICAgY2F0YWxvZ0VudHJ5LnNldEtleSgidGVzdEtleSIpOwotICAgICAgIGNhdGFsb2dFbnRyeS5zZXRVUkkoImh0dHA6Ly90ZXN0dXJpIik7Ci0gICAgICAgd29ya2luZ1VzZXJDYXRhbG9nLmFkZENhdGFsb2dFbGVtZW50KGNhdGFsb2dFbnRyeSk7Ci0gICAgIAotICAgICAgIHVzZXJDYXRhbG9nLmFkZEVudHJpZXNGcm9tQ2F0YWxvZyh3b3JraW5nVXNlckNhdGFsb2cpOwotCSAgIFN0cmluZyB1c2VyQ2F0YWxvZ0xvY2F0aW9uID0gdXNlckNhdGFsb2cuZ2V0TG9jYXRpb24oKTsKLQkgIAotICAgICAgIHVzZXJDYXRhbG9nLnNhdmUoKTsKLSAgICAgICB1c2VyQ2F0YWxvZy5jbGVhcigpOwotICAgICAgIAotICAgICAgIHVzZXJDYXRhbG9nID0gZ2V0Q2F0YWxvZyhYTUxDb3JlUGx1Z2luLlVTRVJfQ0FUQUxPR19JRCwgdXNlckNhdGFsb2dMb2NhdGlvbik7Ci0gICAgICAgCi0gICAgICAgTGlzdCBlbnRyaWVzID0gZ2V0Q2F0YWxvZ0VudHJpZXModXNlckNhdGFsb2csIElDYXRhbG9nRW50cnkuRU5UUllfVFlQRV9QVUJMSUMpOwotICAgICAgIGFzc2VydEVxdWFscygxLCBlbnRyaWVzLnNpemUoKSk7Ci0gICAgICAgSUNhdGFsb2dFbnRyeSBlbnRyeSA9IChJQ2F0YWxvZ0VudHJ5KWVudHJpZXMuZ2V0KDApOwotICAgICAKLSAgICAgICBhc3NlcnRFcXVhbHMoImh0dHA6Ly90ZXN0dXJpIiwgZW50cnkuZ2V0VVJJKCkpOwotICAgICAgIGFzc2VydEVxdWFscygidGVzdEtleSIsIGVudHJ5LmdldEtleSgpKTsKLQotICAgCi0gICAgfQotCi0KLSAgIAotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY2F0YWxvZy90ZXN0cy9pbnRlcm5hbC9DYXRhbG9nV3JpdGVyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NhdGFsb2cvdGVzdHMvaW50ZXJuYWwvQ2F0YWxvZ1dyaXRlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzg1ZWU1NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY2F0YWxvZy90ZXN0cy9pbnRlcm5hbC9DYXRhbG9nV3JpdGVyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTYyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZVJ1bm5hYmxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jYXRhbG9nLkNhdGFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNhdGFsb2cucHJvdmlzaW9uYWwuSUNhdGFsb2dFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY2F0YWxvZy5wcm92aXNpb25hbC5JTmV4dENhdGFsb2c7Ci0KLXB1YmxpYyBjbGFzcyBDYXRhbG9nV3JpdGVyVGVzdCBleHRlbmRzIEFic3RyYWN0Q2F0YWxvZ1Rlc3QgewotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc2V0VXAoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci50ZWFyRG93bigpOwotCX0KLQotCXB1YmxpYyBDYXRhbG9nV3JpdGVyVGVzdChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgZmluYWwgdm9pZCB0ZXN0V3JpdGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotCQkvLyByZWFkIGNhdGFsb2cKLQkJU3RyaW5nIGNhdGFsb2dGaWxlID0gIi9kYXRhL2NhdGFsb2cxLnhtbCI7Ci0JCVVSTCBjYXRhbG9nVXJsID0gVGVzdFBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0RW50cnkoCi0JCQkJY2F0YWxvZ0ZpbGUpOwotCQlhc3NlcnROb3ROdWxsKGNhdGFsb2dVcmwpOwotCQlVUkwgcmVzb2x2ZWRVUkwgPSBGaWxlTG9jYXRvci5yZXNvbHZlKGNhdGFsb2dVcmwpOwotCi0JCUNhdGFsb2cgdGVzdENhdGFsb2cgPSAoQ2F0YWxvZykgZ2V0Q2F0YWxvZygiY2F0YWxvZzEiLCByZXNvbHZlZFVSTAotCQkJCS50b1N0cmluZygpKTsKLQkJYXNzZXJ0Tm90TnVsbCh0ZXN0Q2F0YWxvZyk7Ci0JCXRlc3RDYXRhbG9nLnNldEJhc2UocmVzb2x2ZWRVUkwudG9TdHJpbmcoKSk7Ci0JCS8vIENhdGFsb2dSZWFkZXIucmVhZCh0ZXN0Q2F0YWxvZywgcmVzb2x2ZWRVUkwuZ2V0RmlsZSgpKTsKLQkJYXNzZXJ0Tm90TnVsbCh0ZXN0Q2F0YWxvZyk7Ci0KLQkJLy8gd3JpdGUgY2F0YWxvZwotCQlVUkwgcmVzdWx0c0ZvbGRlciA9IFRlc3RQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldEVudHJ5KAotCQkJCSIvIik7Ci0JCUlQYXRoIHBhdGggPSBuZXcgUGF0aChGaWxlTG9jYXRvci5yZXNvbHZlKHJlc3VsdHNGb2xkZXIpLmdldEZpbGUoKSk7Ci0JCVN0cmluZyByZXN1bHRDYXRhbG9nRmlsZSA9IHBhdGguYXBwZW5kKCIvY2F0YWxvZzEueG1sIikudG9GaWxlKCkudG9VUkkoKS50b1N0cmluZygpOwotCQl0ZXN0Q2F0YWxvZy5zZXRMb2NhdGlvbihyZXN1bHRDYXRhbG9nRmlsZSk7Ci0JCQotCQkKLQkJCi0JCS8vIHdyaXRlIGNhdGFsb2cKLQkJdGVzdENhdGFsb2cuc2F2ZSgpOwotCQkKLQkJLy8gcmVhZCBjYXRhbG9nIGZpbGUgZnJvbSB0aGUgc2F2ZWQgbG9jYXRpb24gYW5kIHRlc3QgaXRzIGNvbnRlbnQKLQkJQ2F0YWxvZyBjYXRhbG9nID0gKENhdGFsb2cpIGdldENhdGFsb2coImNhdGFsb2cyIiwgdGVzdENhdGFsb2cuZ2V0TG9jYXRpb24oKSk7Ci0JCWFzc2VydE5vdE51bGwoY2F0YWxvZyk7Ci0KLQkJCi0JCQotCQkvLyB0ZXN0IHNhdmVkIGNhdGFsb2cgLSBjYXRhbG9nMS54bWwKLQkJYXNzZXJ0RXF1YWxzKDMsIGNhdGFsb2cuZ2V0Q2F0YWxvZ0VudHJpZXMoKS5sZW5ndGgpOwotCi0JCS8vIHRlc3QgcHVibGljIGVudHJpZXMKLQkJTGlzdCBlbnRyaWVzID0gQ2F0YWxvZ1Rlc3QuZ2V0Q2F0YWxvZ0VudHJpZXMoY2F0YWxvZywKLQkJCQlJQ2F0YWxvZ0VudHJ5LkVOVFJZX1RZUEVfUFVCTElDKTsKLQkJYXNzZXJ0RXF1YWxzKDEsIGVudHJpZXMuc2l6ZSgpKTsKLQkJSUNhdGFsb2dFbnRyeSBlbnRyeSA9IChJQ2F0YWxvZ0VudHJ5KSBlbnRyaWVzLmdldCgwKTsKLQotCQlhc3NlcnRFcXVhbHMoZ2V0RmlsZUxvY2F0aW9uKCJkYXRhL0ludm9pY2UvSW52b2ljZS5kdGQiKSwgZW50cnkuZ2V0VVJJKCkpOwotCQlhc3NlcnRFcXVhbHMoIkludm9pY2VJZF90ZXN0IiwgZW50cnkuZ2V0S2V5KCkpOwotCQlhc3NlcnRFcXVhbHMoImh0dHA6Ly93ZWJVUkwiLCBlbnRyeS5nZXRBdHRyaWJ1dGVWYWx1ZSgid2ViVVJMIikpOwotCi0JCS8vIHRlc3Qgc3lzdGVtIGVudHJpZXMKLQkJZW50cmllcyA9IENhdGFsb2dUZXN0LmdldENhdGFsb2dFbnRyaWVzKGNhdGFsb2csCi0JCQkJSUNhdGFsb2dFbnRyeS5FTlRSWV9UWVBFX1NZU1RFTSk7Ci0JCWFzc2VydEVxdWFscygxLCBlbnRyaWVzLnNpemUoKSk7Ci0JCWVudHJ5ID0gKElDYXRhbG9nRW50cnkpIGVudHJpZXMuZ2V0KDApOwotCQlhc3NlcnRFcXVhbHMoZ2V0RmlsZUxvY2F0aW9uKCJkYXRhL0ludm9pY2UvSW52b2ljZS5kdGQiKSwgZW50cnkuZ2V0VVJJKCkpOwotCQlhc3NlcnRFcXVhbHMoIkludm9pY2UuZHRkIiwgZW50cnkuZ2V0S2V5KCkpOwotCQlhc3NlcnRFcXVhbHMoInllcyIsIGVudHJ5LmdldEF0dHJpYnV0ZVZhbHVlKCJjaGFjaGVkIikpOwotCQlhc3NlcnRFcXVhbHMoInZhbHVlMSIsIGVudHJ5LmdldEF0dHJpYnV0ZVZhbHVlKCJwcm9wZXJ0eSIpKTsKLQotCQkvLyB0ZXN0IHVyaSBlbnRyaWVzCi0JCWVudHJpZXMgPSBDYXRhbG9nVGVzdC5nZXRDYXRhbG9nRW50cmllcyhjYXRhbG9nLAotCQkJCUlDYXRhbG9nRW50cnkuRU5UUllfVFlQRV9VUkkpOwotCQlhc3NlcnRFcXVhbHMoMSwgZW50cmllcy5zaXplKCkpOwotCQllbnRyeSA9IChJQ2F0YWxvZ0VudHJ5KSBlbnRyaWVzLmdldCgwKTsKLQkJYXNzZXJ0RXF1YWxzKGdldEZpbGVMb2NhdGlvbigiZGF0YS9JbnZvaWNlL0ludm9pY2UuZHRkIiksIGVudHJ5LmdldFVSSSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJodHRwOi8vd3d3LnRlc3QuY29tL0ludm9pY2UuZHRkIiwgZW50cnkuZ2V0S2V5KCkpOwotCQlhc3NlcnRFcXVhbHMoIm5vIiwgZW50cnkuZ2V0QXR0cmlidXRlVmFsdWUoImNoYWNoZWQiKSk7Ci0JCWFzc2VydEVxdWFscygidmFsdWUyIiwgZW50cnkuZ2V0QXR0cmlidXRlVmFsdWUoInByb3BlcnR5IikpOwotCi0JCS8vIHRlc3QgbmV4dCBjYXRhbG9nIC0gY2F0YWxvZzIueG1sCi0JCUlOZXh0Q2F0YWxvZ1tdIG5leHRDYXRhbG9nRW50cmllcyA9IGNhdGFsb2cuZ2V0TmV4dENhdGFsb2dzKCk7Ci0JCWFzc2VydEVxdWFscygxLCBuZXh0Q2F0YWxvZ0VudHJpZXMubGVuZ3RoKTsKLQotCQlJTmV4dENhdGFsb2cgbmV4dENhdGFsb2dFbnRyeSA9IChJTmV4dENhdGFsb2cpIG5leHRDYXRhbG9nRW50cmllc1swXTsKLQkJYXNzZXJ0Tm90TnVsbChuZXh0Q2F0YWxvZ0VudHJ5KTsKLQotCQlhc3NlcnRFcXVhbHMoImNhdGFsb2cyLnhtbCIsIG5leHRDYXRhbG9nRW50cnkuZ2V0Q2F0YWxvZ0xvY2F0aW9uKCkpOwotCX0KLQkKLSAgICBwdWJsaWMgZmluYWwgdm9pZCB0ZXN0QnVnMjM1NDQ1KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAvLyByZWFkIGNhdGFsb2cKLSAgICAgIFN0cmluZyBjYXRhbG9nRmlsZSA9ICIvZGF0YS9kZWxldGVtZWNhdGFsb2cueG1sIjsKLSAgICAgIFVSTCBjYXRhbG9nVXJsID0gVGVzdFBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0RW50cnkoCi0gICAgICAgICAgICAgIGNhdGFsb2dGaWxlKTsKLSAgICAgIGFzc2VydE5vdE51bGwoY2F0YWxvZ1VybCk7Ci0gICAgICBVUkwgcmVzb2x2ZWRVUkwgPSBGaWxlTG9jYXRvci5yZXNvbHZlKGNhdGFsb2dVcmwpOwotCi0gICAgICBDYXRhbG9nIHRlc3RDYXRhbG9nID0gKENhdGFsb2cpIGdldENhdGFsb2coImRlbGV0ZW1lY2F0YWxvZyIsIHJlc29sdmVkVVJMCi0gICAgICAgICAgICAgIC50b1N0cmluZygpKTsKLSAgICAgIGFzc2VydE5vdE51bGwodGVzdENhdGFsb2cpOwotICAgICAgdGVzdENhdGFsb2cuc2V0QmFzZShyZXNvbHZlZFVSTC50b1N0cmluZygpKTsKLSAgICAgIC8vIENhdGFsb2dSZWFkZXIucmVhZCh0ZXN0Q2F0YWxvZywgcmVzb2x2ZWRVUkwuZ2V0RmlsZSgpKTsKLSAgICAgIGFzc2VydE5vdE51bGwodGVzdENhdGFsb2cpOwotCi0gICAgICAvLyB3cml0ZSBjYXRhbG9nCi0gICAgICBVUkwgcmVzdWx0c0ZvbGRlciA9IFRlc3RQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldEVudHJ5KAotICAgICAgICAgICAgICAiLyIpOwotICAgICAgSVBhdGggcGF0aCA9IG5ldyBQYXRoKEZpbGVMb2NhdG9yLnJlc29sdmUocmVzdWx0c0ZvbGRlcikuZ2V0RmlsZSgpKTsKLSAgICAgIGZpbmFsIEZpbGUgY2F0YWxvZ0lPRmlsZSA9IHBhdGguYXBwZW5kKCIvZGVsZXRlbWVjYXRhbG9nLnhtbCIpLnRvRmlsZSgpOwotICAgICAgU3RyaW5nIHJlc3VsdENhdGFsb2dGaWxlID0gY2F0YWxvZ0lPRmlsZS50b1VSSSgpLnRvU3RyaW5nKCk7Ci0gICAgICB0ZXN0Q2F0YWxvZy5zZXRMb2NhdGlvbihyZXN1bHRDYXRhbG9nRmlsZSk7Ci0gICAgICAKLSAgICAgIC8vIHdyaXRlIGNhdGFsb2cKLSAgICAgIHRlc3RDYXRhbG9nLnNhdmUoKTsKLSAgICAgIAotICAgICAgSVdvcmtzcGFjZVJ1bm5hYmxlIGRlbGV0ZU9wID0gbmV3IElXb3Jrc3BhY2VSdW5uYWJsZSgpIHsKLSAgICAgICAgcHVibGljIHZvaWQgcnVuKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24KLSAgICAgICAgewotICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBjYXRhbG9nSU9GaWxlLmRlbGV0ZSgpOwotICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBhc3NlcnRUcnVlKCJleGNlcHRpb24gdGhyb3duIHdoZW4gdHJ5aW5nIHRvIGRlbGV0ZSBjYXRhbG9nIiwgZmFsc2UpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfTsKLSAgICAgIAotICAgICAgUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnJ1bihkZWxldGVPcCwgbnVsbCk7Ci0gICAgICBhc3NlcnRGYWxzZSgiY2F0YWxvZyBmaWxlIHdhcyBub3QgZGVsZXRlZCIsIGNhdGFsb2dJT0ZpbGUuZXhpc3RzKCkpOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NhdGFsb2cvdGVzdHMvaW50ZXJuYWwvVGVzdFBsdWdpbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NhdGFsb2cvdGVzdHMvaW50ZXJuYWwvVGVzdFBsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MmFjZGE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jYXRhbG9nL3Rlc3RzL2ludGVybmFsL1Rlc3RQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OwotCi0vKioKLSAqIFRoZSBtYWluIHBsdWdpbiBjbGFzcyB0byBiZSB1c2VkIGluIHRoZSBkZXNrdG9wLgotICovCi1wdWJsaWMgY2xhc3MgVGVzdFBsdWdpbiBleHRlbmRzIFBsdWdpbiB7Ci0JLy9UaGUgc2hhcmVkIGluc3RhbmNlLgotCXByaXZhdGUgc3RhdGljIFRlc3RQbHVnaW4gcGx1Z2luOwotCS8vUmVzb3VyY2UgYnVuZGxlLgotCXByaXZhdGUgUmVzb3VyY2VCdW5kbGUgcmVzb3VyY2VCdW5kbGU7Ci0JCi0JLyoqCi0JICogVGhlIGNvbnN0cnVjdG9yLgotCSAqLwotCXB1YmxpYyBUZXN0UGx1Z2luKCkgewotCQlzdXBlcigpOwotCQlwbHVnaW4gPSB0aGlzOwotCX0KLQotCS8qKgotCSAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB1cG9uIHBsdWctaW4gYWN0aXZhdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnN0YXJ0KGNvbnRleHQpOwotCX0KLQotCS8qKgotCSAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHRoZSBwbHVnLWluIGlzIHN0b3BwZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnN0b3AoY29udGV4dCk7Ci0JCXBsdWdpbiA9IG51bGw7Ci0JCXJlc291cmNlQnVuZGxlID0gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBUZXN0UGx1Z2luIGdldERlZmF1bHQoKSB7Ci0JCXJldHVybiBwbHVnaW47Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc3RyaW5nIGZyb20gdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwKLQkgKiBvciAna2V5JyBpZiBub3QgZm91bmQuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UmVzb3VyY2VTdHJpbmcoU3RyaW5nIGtleSkgewotCQlSZXNvdXJjZUJ1bmRsZSBidW5kbGUgPSBUZXN0UGx1Z2luLmdldERlZmF1bHQoKS5nZXRSZXNvdXJjZUJ1bmRsZSgpOwotCQl0cnkgewotCQkJcmV0dXJuIChidW5kbGUgIT0gbnVsbCkgPyBidW5kbGUuZ2V0U3RyaW5nKGtleSkgOiBrZXk7Ci0JCX0gY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7Ci0JCQlyZXR1cm4ga2V5OwotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLAotCSAqLwotCXB1YmxpYyBSZXNvdXJjZUJ1bmRsZSBnZXRSZXNvdXJjZUJ1bmRsZSgpIHsKLQkJdHJ5IHsKLQkJCWlmIChyZXNvdXJjZUJ1bmRsZSA9PSBudWxsKQotCQkJCXJlc291cmNlQnVuZGxlID0gUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKCJvcmcuZWNsaXBzZS53c3Qud3N0LnhtbC5jYXRhbG9nLnRlc3QuVGVzdFBsdWdpblJlc291cmNlcyIpOwotCQl9IGNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24geCkgewotCQkJcmVzb3VyY2VCdW5kbGUgPSBudWxsOwotCQl9Ci0JCXJldHVybiByZXNvdXJjZUJ1bmRsZTsKLQl9Ci0JCi0JCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgcmVzb2x2ZVBsdWdpbkxvY2F0aW9uKFN0cmluZyBwYXRoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlVUkwgdXJsID0gZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldEVudHJ5KHBhdGgpOwotCQl1cmwgPSBGaWxlTG9jYXRvci5yZXNvbHZlKHVybCk7Ci0JCXJldHVybiB1cmwuZ2V0RmlsZSgpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3Rlc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3Rlc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjM4NGMxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy90ZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotCi08cHJvamVjdCBuYW1lPSJ0ZXN0c3VpdGUiIGRlZmF1bHQ9InJ1biIgYmFzZWRpcj0iLiI+Ci0KLSAgPCEtLSBDb25maWd1cmFibGUgUHJvcGVydGllcyAtLT4KLQotICA8IS0tIHNldHMgdGhlIHByb3BlcnRpZXMgZWNsaXBzZS1ob21lLCBhbmQgbGlicmFyeS1maWxlIC0tPgotICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMiLz4KLQotICA8IS0tIEVuZCBDb25maWd1cmFibGUgUHJvcGVydGllcyAtLT4KLQotICA8IS0tIFRoZSBwcm9wZXJ0eSAke2VjbGlwc2UtaG9tZX0gc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgotICA8IS0tIFNldCBhIG1lYW5pbmdmdWwgZGVmYXVsdCB2YWx1ZSBmb3Igd2hlbiBpdCBpcyBub3QuIC0tPgotICA8cHJvcGVydHkgbmFtZT0iZWNsaXBzZS1ob21lIiB2YWx1ZT0iJHtiYXNlZGlyfVwuLlwuLiIvPgotICA8cHJvcGVydHkgbmFtZT0iYnZ0d29ya3NwYWNlIiB2YWx1ZT0iJHtiYXNlZGlyfSIvPgotICA8cHJvcGVydHkgbmFtZT0ibGlicmFyeS1maWxlIiB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2UudGVzdF8zLjEuMC9saWJyYXJ5LnhtbCIvPgotICA8cHJvcGVydHkgbmFtZT0id29ya3NwYWNlLWZvbGRlciIgdmFsdWU9IiR7YnZ0d29ya3NwYWNlfS8ke3BsdWdpbi1uYW1lfSIvPgotCi0gIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4KLSAgPCEtLSBhbGwgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcnVuLiBJbml0aWFsaXphdGlvbiBmb3IgaW5kaXZpZHVhbCB0ZXN0cyAtLT4KLSAgPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+Ci0gIDx0YXJnZXQgbmFtZT0iaW5pdCI+Ci0gICAgPHRzdGFtcC8+Ci0gICAgIDxkZWxldGU+Ci0gICAgICAgPGZpbGVzZXQgZGlyPSIke2VjbGlwc2UtaG9tZX0iIGluY2x1ZGVzPSJvcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMuKi54bWwiLz4KLSAgICA8L2RlbGV0ZT4KLSAgPC90YXJnZXQ+Ci0KLSAgPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KLSAgPHRhcmdldCBuYW1lPSJzdWl0ZSI+Ci0KLSAgICA8IS0tIFN0YXJ0IHdpdGggY2xlYW4gZGF0YSB3b3Jrc3BhY2UgLS0+ICAKLSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2UtZm9sZGVyfSIgcXVpZXQ9InRydWUiLz4KLQotICAgIDxhbnQgdGFyZ2V0PSJjb3JlLXRlc3QiIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImRhdGEtZGlyIiB2YWx1ZT0iJHt3b3Jrc3BhY2UtZm9sZGVyfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9InBsdWdpbi1uYW1lIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iLz4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjbGFzc25hbWUiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMuaW50ZXJuYWwuQWxsVGVzdHMiLz4KLSAgICA8L2FudD4KLQotICA8L3RhcmdldD4KLQotICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGNvZGUgdG8gY2xlYW51cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBhZnRlciAtLT4KLSAgPCEtLSBhZnRlciBhbGwgb2YgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4uIFlvdSBjYW4gdXNlIHRoaXMgdGFyZ2V0IHRvIC0tPgotICA8IS0tIGRlbGV0ZSB0ZW1wb3JhcnkgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZC4gLS0+Ci0gIDx0YXJnZXQgbmFtZT0iY2xlYW51cCI+Ci0gICAgPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlLWZvbGRlcn0iIHF1aWV0PSJ0cnVlIi8+Ci0gIDwvdGFyZ2V0PgotCi0gIDwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4KLSAgPCEtLSBhZnRlciBhbGwgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4gc2hvdWxkIGdvIGhlcmUuIC0tPgotICA8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iaW5pdCxzdWl0ZSxjbGVhbnVwIj4KLSAgICA8YW50IHRhcmdldD0iY29sbGVjdCIgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iaW5jbHVkZXMiIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMqLnhtbCIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9Im91dHB1dC1maWxlIiB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0ueG1sIi8+Ci0gICAgPC9hbnQ+Ci0gIDwvdGFyZ2V0PgotCi08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMmJkYzE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNCIvPgotCTxjbGFzc3BhdGhlbnRyeSBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiIGtpbmQ9ImNvbiI+Ci0JCTxhY2Nlc3NydWxlcz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49Im9yZy9lY2xpcHNlL3dzdC8qKiIvPgotCQk8L2FjY2Vzc3J1bGVzPgotCTwvY2xhc3NwYXRoZW50cnk+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy8uY3ZzaWdub3JlIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1YmY1NDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLWJpbgotYnVpbGQueG1sCi10ZW1wLmZvbGRlcgotc3NlbW9kZWx4bWx0ZXN0cy5qYXIKLWphdmFDb21waWxlci5zc2Vtb2RlbHhtbHRlc3RzLmphci5hcmdzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5ZmZiYTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+PC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZmE1YzkxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjMyIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotZW5jb2RpbmcvPHByb2plY3Q+PUlTTy04ODU5LTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlYzU3NTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNNb24gQXByIDE3IDAxOjQ4OjM5IEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotbGluZS5zZXBhcmF0b3I9XHJcbgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmN2JhYzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLSNTYXQgQXVnIDE5IDE2OjMxOjQzIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5jbGVhbk91dHB1dEZvbGRlcj1jbGVhbgotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5kdXBsaWNhdGVSZXNvdXJjZVRhc2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5pbnZhbGlkQ2xhc3NwYXRoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5yZXNvdXJjZUNvcHlFeGNsdXNpb25GaWx0ZXI9Ki5sYXVuY2gKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNpcmN1bGFyQ2xhc3NwYXRoPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGguZXhjbHVzaW9uUGF0dGVybnM9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLm11bHRpcGxlT3V0cHV0TG9jYXRpb25zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZG9jLmNvbW1lbnQuc3VwcG9ydD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5tYXhQcm9ibGVtUGVyVW5pdD0xMDAKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NEZXByZWNhdGVkUmVmPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzTm90VmlzaWJsZVJlZj1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHJpdmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c092ZXJyaWRpbmc9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wdWJsaWMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wcml2YXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuc2FmZVR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGF0aWJsZUpES0xldmVsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wbGV0ZUNsYXNzcGF0aD1lcnJvcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzAxYzdhZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotI01vbiBBcHIgMTcgMDE6NDg6MzkgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1pbnRlcm5hbC5kZWZhdWx0LmNvbXBsaWFuY2U9ZGVmYXVsdAotb3JnLmVjbGlwc2UuamR0LnVpLnRleHQuY3VzdG9tX2NvZGVfdGVtcGxhdGVzPTw/eG1sIHZlcnNpb25cPSIxLjAiIGVuY29kaW5nXD0iVVRGLTgiPz5cclxuPHRlbXBsYXRlcy8+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU5MzY4Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozMiBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLmVuYWJsZS5wcm9qZWN0LnJlZmFjdG9yaW5nLmhpc3Rvcnk9ZmFsc2UKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjNTIyYmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0jTW9uIEFwciAxNyAwMjowMTozMyBFRFQgMjAwNgotY29tcGlsZXJzLmluY29tcGF0aWJsZS1lbnZpcm9ubWVudD0wCi1jb21waWxlcnMucC5idWlsZD0wCi1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLmlsbGVnYWwtYXR0LXZhbHVlPTAKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0wCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0wCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy5wLnVudXNlZC1lbGVtZW50LW9yLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzk0NzJmNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUuMAotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzOyBzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMzAwLnF1YWxpZmllcgotQnVuZGxlLUNsYXNzUGF0aDogc3NlbW9kZWx4bWx0ZXN0cy5qYXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5TU0VNb2RlbFhNTFRlc3RzUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvci4wCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQudGVzdDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cywKLSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuY29udGVudG1vZGVsLAotIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5kb2N1bWVudCwKLSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuZG9tLAotIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5mb3JtYXQsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmZvcm1hdC50ZXN0ZmlsZXMueG1sLAotIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5tb2RlbCwKLSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMudGV4dCwKLSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMudGV4dC50ZXN0ZmlsZXMueG1sLAotIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy51dGlsCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAotIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZSwKLSBvcmcuanVuaXQ7YnVuZGxlLXZlcnNpb249IlszLjguMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUuZmlsZWJ1ZmZlcnMsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMsCi0gb3JnLmVjbGlwc2UudWksCi0gb3JnLmVjbGlwc2UudWkuaWRlLAotIG9yZy5lY2xpcHNlLnRleHQsCi0gb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLAotIGNvbS5pYm0uaWN1Ci1FY2xpcHNlLUxhenlTdGFydDogdHJ1ZQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS40CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvYWJvdXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTk5ZGYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSwgMjAwODwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZTVmNzBlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotc291cmNlLnNzZW1vZGVseG1sdGVzdHMuamFyID0gc3JjLwotb3V0cHV0LnNzZW1vZGVseG1sdGVzdHMuamFyID0gYmluLwotYmluLmluY2x1ZGVzID0gcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICBzc2Vtb2RlbHhtbHRlc3RzLmphcixcCi0gICAgICAgICAgICAgICB0ZXN0LnhtbCxcCi0gICAgICAgICAgICAgICB0ZXN0ZmlsZXMuemlwLFwKLSAgICAgICAgICAgICAgIHByb2plY3R0ZXN0ZmlsZXMvLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzCi1zcmMuaW5jbHVkZXMgPSBidWlsZC5wcm9wZXJ0aWVzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwZjE3OTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBwcm9wZXJ0aWVzIGZpbGUgZm9yIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cwotQnVuZGxlLVZlbmRvci4wID0gRWNsaXBzZS5vcmcKLUJ1bmRsZS1OYW1lLjAgPSBTU0UgTW9kZWwgWE1MIFRlc3RzClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3BsdWdpbi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDhiZjJjYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+Ci08cGx1Z2luPgotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmNvcmUuY29udGVudHR5cGUuY29udGVudFR5cGVzIj4KLQkJPCEtLSBhc3NvY2lhdGUgLmZyYWd4IGZpbGVzIHdpdGggdGhlIFhNTCBjb250ZW50IHR5cGUgLS0+Ci0JCTxmaWxlLWFzc29jaWF0aW9uCi0JCQljb250ZW50LXR5cGU9Im9yZy5lY2xpcHNlLmNvcmUucnVudGltZS54bWwiCi0JCQlmaWxlLWV4dGVuc2lvbnM9ImZyYWd4IiAvPgotCTwvZXh0ZW5zaW9uPgotCi0JPGV4dGVuc2lvbgotCQlpZD0iVGVzdCIKLQkJcG9pbnQ9Im9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5hcHBsaWNhdGlvbnMiPgotCQk8YXBwbGljYXRpb24+Ci0JCQk8cnVuCi0JCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5jb250ZW50bW9kZWwuQ01WaXNpdG9yVGVzdCIgLz4KLQkJPC9hcHBsaWNhdGlvbj4KLQk8L2V4dGVuc2lvbj4KLQotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvcHJvamVjdHRlc3RmaWxlcy9hdHRyaWJ1dGVzb3JkZXJ0ZXN0ZmlsZXMuemlwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3Byb2plY3R0ZXN0ZmlsZXMvYXR0cmlidXRlc29yZGVydGVzdGZpbGVzLnppcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGMyOGQ3Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvcHJvamVjdHRlc3RmaWxlcy9hdHRyaWJ1dGVzb3JkZXJ0ZXN0ZmlsZXMuemlwCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3Byb2plY3R0ZXN0ZmlsZXMveG1sLWRvY3VtZW50LWxvYWRlci10ZXN0cy56aXAgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvcHJvamVjdHRlc3RmaWxlcy94bWwtZG9jdW1lbnQtbG9hZGVyLXRlc3RzLnppcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjgzYWQ2Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvcHJvamVjdHRlc3RmaWxlcy94bWwtZG9jdW1lbnQtbG9hZGVyLXRlc3RzLnppcAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL2RvY3VtZW50L3Rlc3QvTm9kZUltcGxUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvZG9jdW1lbnQvdGVzdC9Ob2RlSW1wbFRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4MmRlMzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvZG9jdW1lbnQvdGVzdC9Ob2RlSW1wbFRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiAKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBCYWxhenMgQmFuZmFpOiBCdWcgMTU0NzM3IGdldFVzZXJEYXRhL3NldFVzZXJEYXRhIHN1cHBvcnQgZm9yIE5vZGUKLSAqICAgICBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MTU0NzM3Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5kb2N1bWVudC50ZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5kb2N1bWVudC5BdHRySW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuRE9NTW9kZWxJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5kb2N1bWVudC5Ob2RlSW1wbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uVXNlckRhdGFIYW5kbGVyOwotCi0KLXB1YmxpYyBjbGFzcyBOb2RlSW1wbFRlc3RDYXNlIGV4dGVuZHMgVGVzdENhc2UgewotCS8qKgotCSAqIENhc3RzIHRvIGltcGxlbWVudGF0aW9uIGNsYXNzZXMgYmVjYXVzZSB0aGUgaW50ZXJmYWNlIG1ldGhvZHMgYmVpbmcKLQkgKiB0aGVyZSBpc24ndCB0aGUgaW50ZXJlc3RpbmcgcGFydCwganVzdCB3aGV0aGVyIG91ciBiZWhhdmlvciB3aXRoIHRob3NlCi0JICogbWV0aG9kcyBpcyBjb3JyZWN0LgotCSAqLwkKLQotCU5vZGVJbXBsIGVsZW1lbnQ7Ci0JQXR0ckltcGwgYXR0cmlidXRlOwotCU5vZGVJbXBsIGRlc3RpbmF0aW9uTm9kZTsKLQlEb2N1bWVudCBkb2N1bWVudDsKLQkKLQlFbGVtZW50IGVsZW1lbnRUb0ltcG9ydDsKLQkKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgS0VZPSJrZXkiOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBWQUxVRT0idmFsdWUiOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBLRVkyPSJrZXkyIjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVkFMVUUyPSJ2YWx1ZTIiOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKLQkKLQkKLQkvKioKLSAgICAgKiBTZXRzIHVwIHRoZSB0ZXN0IGZpeHR1cmUuIAotICAgICAqIChDYWxsZWQgYmVmb3JlIGV2ZXJ5IHRlc3QgY2FzZSBtZXRob2QuKSAKLSAgICAgKi8gCi0gICAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB7IAotICAgICAgICAKLSAgICAJRE9NTW9kZWxJbXBsIG1vZGVsID0gbmV3IERPTU1vZGVsSW1wbCgpOwotICAgIAlkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0gICAgCWVsZW1lbnQgPSAoTm9kZUltcGwpZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVzdGVsZW1lbnQiKTsKLSAgICAJYXR0cmlidXRlID0gKEF0dHJJbXBsKWRvY3VtZW50LmNyZWF0ZUF0dHJpYnV0ZSgiYXR0cmlidXRlIik7Ci0gICAgfSAKLQkKLSAgICAvKgotICAgICAqIFRlc3QgZm9yIG51bGw7Ci0gICAgICovCi0JcHVibGljIHZvaWQgdGVzdEdldFVzZXJEYXRhMCgpIHsKLQkJYXNzZXJ0RXF1YWxzKG51bGwsIGVsZW1lbnQuZ2V0VXNlckRhdGEoS0VZKSk7Ci0JCWFzc2VydEVxdWFscyhudWxsLCBlbGVtZW50LmdldFVzZXJEYXRhKG51bGwpKTsKLQl9Ci0gICAgCi0JLyoKLQkgKiBUZXN0IGZvciBvbmUga2V5L3ZhbHVlCi0JICovCi0gICAgcHVibGljIHZvaWQgdGVzdEdldFVzZXJEYXRhMSgpIHsKLQkJZWxlbWVudC5zZXRVc2VyRGF0YShLRVksIFZBTFVFLCBudWxsKTsKLQkJYXNzZXJ0RXF1YWxzKFZBTFVFLGVsZW1lbnQuZ2V0VXNlckRhdGEoS0VZKSk7Ci0JCWFzc2VydEVxdWFscyhudWxsLCBhdHRyaWJ1dGUuZ2V0VXNlckRhdGEoS0VZKSk7Ci0JfQotCQotICAgIC8qCi0gICAgICogVGVzdCBmb3IgbXVsdGlwbGUgbm9kZXMKLSAgICAgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0VXNlckRhdGEyKCkgewotCQllbGVtZW50LnNldFVzZXJEYXRhKEtFWSwgVkFMVUUsIG51bGwpOwotCQlhc3NlcnRFcXVhbHMoVkFMVUUsZWxlbWVudC5nZXRVc2VyRGF0YShLRVkpKTsKLQkJYXR0cmlidXRlLnNldFVzZXJEYXRhKEtFWTIsIFZBTFVFMiwgbnVsbCk7Ci0JCWFzc2VydEVxdWFscyhWQUxVRTIsYXR0cmlidXRlLmdldFVzZXJEYXRhKEtFWTIpKTsKLQl9Ci0JCi0JLyoKLQkgKiBUZXN0IGZvciBtdWx0aXBsZSBrZXlzCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldFVzZXJEYXRhMygpIHsKLQkJZWxlbWVudC5zZXRVc2VyRGF0YShLRVksIFZBTFVFLCBudWxsKTsKLQkJZWxlbWVudC5zZXRVc2VyRGF0YShLRVkyLCBWQUxVRTIsIG51bGwpOwotCQlhc3NlcnRFcXVhbHMoVkFMVUUsZWxlbWVudC5nZXRVc2VyRGF0YShLRVkpKTsKLQkJYXNzZXJ0RXF1YWxzKFZBTFVFMixlbGVtZW50LmdldFVzZXJEYXRhKEtFWTIpKTsKLQl9Ci0KLQkvKgotCSAqIFRlc3QgZm9yIG51bGwga2V5Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdFNldFVzZXJEYXRhMSgpIHsKLQkJYXNzZXJ0RXF1YWxzKG51bGwsIGVsZW1lbnQuc2V0VXNlckRhdGEobnVsbCwgVkFMVUUsIG51bGwpKTsKLQl9Ci0KLQkvKgotCSAqIFRlc3QgZm9yIG51bGwgZGF0YSB3aXRoIG5vIHByZXZpb3VzIHZhbHVlCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFNldFVzZXJEYXRhMigpIHsKLQkJYXNzZXJ0RXF1YWxzKG51bGwsIGVsZW1lbnQuc2V0VXNlckRhdGEoS0VZLCBudWxsLCBudWxsKSk7Ci0JfQotCQotCS8qCi0JICogVGVzdCBmb3Igb3ZlcndyaXRpbmcKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0U2V0VXNlckRhdGEzKCkgewotCQllbGVtZW50LnNldFVzZXJEYXRhKEtFWSwgVkFMVUUsIG51bGwpOwotCQllbGVtZW50LnNldFVzZXJEYXRhKEtFWSwgVkFMVUUyLCBudWxsKTsKLQkJYXNzZXJ0RXF1YWxzKFZBTFVFMiwgZWxlbWVudC5nZXRVc2VyRGF0YShLRVkpKTsKLQl9Ci0JCi0JLyogCi0JICogVGVzdCBmb3IgZGVsZXRpbmcKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0U2V0VXNlckRhdGE0KCkgewotCQllbGVtZW50LnNldFVzZXJEYXRhKEtFWSwgVkFMVUUsIG51bGwpOwotCQlhc3NlcnRFcXVhbHMoVkFMVUUsIGVsZW1lbnQuZ2V0VXNlckRhdGEoS0VZKSk7Ci0JCWVsZW1lbnQuc2V0VXNlckRhdGEoS0VZLCBudWxsLCBudWxsKTsKLQkJYXNzZXJ0RXF1YWxzKG51bGwsIGVsZW1lbnQuZ2V0VXNlckRhdGEoS0VZKSk7Ci0JfQotCQotCS8qCi0JICogVGVzdCBmb3Igbm90aWZ5aW5nIHRoZSBVc2VyRGF0YUhhbmRsZXI9bnVsbAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3ROb3RpZnlVc2VyRGF0YUhhbmRsZXIwKCkgewotCQkKLQkJYXR0cmlidXRlLnNldFVzZXJEYXRhKEtFWSwgVkFMVUUsIG51bGwpOwotCQlkZXN0aW5hdGlvbk5vZGU9KE5vZGVJbXBsKWF0dHJpYnV0ZS5jbG9uZU5vZGUodHJ1ZSk7Ci0JfQotCQotCS8qCi0JICogVGVzdCBmb3Igbm90aWZ5aW5nIHRoZSBVc2VyRGF0YUhhbmRsZXIgd2hlbiBjbG9uaW5nIGFuIGF0dHJpYnV0ZQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3ROb3RpZnlVc2VyRGF0YUhhbmRsZXIxKCkgewotCQkKLQkJYXR0cmlidXRlLnNldFVzZXJEYXRhKEtFWSwgVkFMVUUsIG5ldyBVc2VyRGF0YUhhbmRsZXIoKXsKLQotCQkJcHVibGljIHZvaWQgaGFuZGxlKHNob3J0IG9wZXJhdGlvbiwgU3RyaW5nIGtleSwgT2JqZWN0IGRhdGEsIE5vZGUgc3JjLCBOb2RlIGRzdCkgewotCQkJCWFzc2VydEVxdWFscyhVc2VyRGF0YUhhbmRsZXIuTk9ERV9DTE9ORUQsIG9wZXJhdGlvbik7Ci0JCQkJYXNzZXJ0RXF1YWxzKFZBTFVFLCBkYXRhKTsKLQkJCQlhc3NlcnRFcXVhbHMoS0VZLCBrZXkpOwotCQkJCWFzc2VydEVxdWFscyhzcmMsIGF0dHJpYnV0ZSk7IAotCQkJCQotCQkJCWlmKERFQlVHKQotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiT3BlcmF0aW9uOiAiK29wZXJhdGlvbisiIEtleToiKyBrZXkgCi0JCQkJCQkrICIgT2JqZWN0OiIrZGF0YSsiIFNvdXJjZU5vZGU6IitzcmMuZ2V0TG9jYWxOYW1lKCkrIiBEZXN0aW5hdGlvbk5vZGU6Iitkc3QuZ2V0TG9jYWxOYW1lKCkpOwotCQkJCQotCQkJfQotCQl9KTsKLQkJLy9ldmVudCBvY2N1cnMgYmVmb3JlIHRoZSBkZXN0aW5hdGlvbk5vZGUgcmV0dXJucy4uLi4KLQkJZGVzdGluYXRpb25Ob2RlPShBdHRySW1wbClhdHRyaWJ1dGUuY2xvbmVOb2RlKHRydWUpOwotCX0KLQkKLQkvKgotCSAqIFRlc3QgZm9yIG5vdGlmeWluZyB0aGUgVXNlckRhdGFIYW5kbGVyIHdoZW4gaW1wb3J0aW5nCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE5vdGlmeVVzZXJEYXRhSGFuZGxlcjIoKSB7Ci0gICAgCWVsZW1lbnRUb0ltcG9ydCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkVsZW1lbnRUb0ltcG9ydCIpOwotICAgIAkoKE5vZGVJbXBsKWVsZW1lbnRUb0ltcG9ydCkuc2V0VXNlckRhdGEoS0VZLCBWQUxVRSwgbmV3IFVzZXJEYXRhSGFuZGxlcigpewotCi0JCQlwdWJsaWMgdm9pZCBoYW5kbGUoc2hvcnQgb3BlcmF0aW9uLCBTdHJpbmcga2V5LCBPYmplY3QgZGF0YSwgTm9kZSBzcmMsIE5vZGUgZHN0KSB7Ci0KLQkJCQkvL3NlZSBpZiBOT0RFLklNUE9SVEVEIG5vdGlmaWNhdGlvbiBvY2N1cnMgd2l0aCB0aGUgcmlnaHQKLQkJCQkvL3BhcmFtZXRlcnMKLQkJCQlpZiAob3BlcmF0aW9uPT1Vc2VyRGF0YUhhbmRsZXIuTk9ERV9JTVBPUlRFRCkgewkKLQkJCQlhc3NlcnRFcXVhbHMoVkFMVUUsIGRhdGEpOwotCQkJCWFzc2VydEVxdWFscyhLRVksIGtleSk7Ci0JCQkJYXNzZXJ0RXF1YWxzKHNyYywgZWxlbWVudFRvSW1wb3J0KTsKLQkJCQlhc3NlcnRFcXVhbHMoZHN0LCBudWxsKTsgIAotCQkJCWlmKERFQlVHKQotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiT3BlcmF0aW9uOiAiK29wZXJhdGlvbisiIEtleToiKyBrZXkgCi0JCQkJCQkrICIgT2JqZWN0OiIrZGF0YSsiIFNvdXJjZU5vZGU6IitzcmMuZ2V0TG9jYWxOYW1lKCkrIiBEZXN0aW5hdGlvbk5vZGU6Iitkc3QpOwotCQkJCX0KLQkJCX0KLQkJfSk7Ci0JCWRvY3VtZW50LmltcG9ydE5vZGUoZWxlbWVudFRvSW1wb3J0LCB0cnVlKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9Mb2dnZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL0xvZ2dlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzYwNjk3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL0xvZ2dlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBjb20uaWJtLmljdS51dGlsLlN0cmluZ1Rva2VuaXplcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci0KLS8qKgotICogU21hbGwgY29udmVuaWVuY2UgY2xhc3MgdG8gbG9nIG1lc3NhZ2VzIHRvIHBsdWdpbidzIGxvZyBmaWxlIGFuZCBhbHNvLCBpZiBkZXNpcmVkLAotICogdGhlIGNvbnNvbGUuIFRoaXMgY2xhc3Mgc2hvdWxkIG9ubHkgYmUgdXNlZCBieSBjbGFzc2VzIGluIHRoaXMgcGx1Z2luLiBPdGhlcgotICogcGx1Z2lucyBzaG91bGQgbWFrZSB0aGVpciBvd24gY29weSwgd2l0aCBhcHByb3ByaWF0ZSBJRC4KLSAqLwotcHVibGljIGNsYXNzIExvZ2dlciB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRSQUNFRklMVEVSX0xPQ0FUSU9OID0gIi9kZWJ1Zy90cmFjZWZpbHRlciI7IC8vJE5PTi1OTFMtMSQKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9LID0gSVN0YXR1cy5PSzsgLy8gMAotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElORk8gPSBJU3RhdHVzLklORk87IC8vIDEKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXQVJOSU5HID0gSVN0YXR1cy5XQVJOSU5HOyAvLyAyCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVJST1IgPSBJU3RhdHVzLkVSUk9SOyAvLyA0Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPS19ERUJVRyA9IDIwMCArIE9LOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElORk9fREVCVUcgPSAyMDAgKyBJTkZPOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdBUk5JTkdfREVCVUcgPSAyMDAgKyBXQVJOSU5HOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SX0RFQlVHID0gMjAwICsgRVJST1I7Ci0KLQkvKioKLQkgKiBBZGRzIG1lc3NhZ2UgdG8gbG9nLgotCSAqIEBwYXJhbSBsZXZlbCBzZXZlcml0eSBsZXZlbCBvZiB0aGUgbWVzc2FnZSAoT0ssIElORk8sIFdBUk5JTkcsIEVSUk9SLCBPS19ERUJVRywgSU5GT19ERUJVRywgV0FSTklOR19ERUJVRywgRVJST1JfREVCVUcpCi0JICogQHBhcmFtIG1lc3NhZ2UgdGV4dCB0byBhZGQgdG8gdGhlIGxvZwotCSAqIEBwYXJhbSBleGNlcHRpb24gZXhjZXB0aW9uIHRocm93bgotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgdm9pZCBfbG9nKGludCBsZXZlbCwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJaWYgKGxldmVsID09IE9LX0RFQlVHIHx8IGxldmVsID09IElORk9fREVCVUcgfHwgbGV2ZWwgPT0gV0FSTklOR19ERUJVRyB8fCBsZXZlbCA9PSBFUlJPUl9ERUJVRykgewotCQkJaWYgKCFpc0RlYnVnZ2luZygpKQotCQkJCXJldHVybjsKLQkJfQotCi0JCWludCBzZXZlcml0eSA9IElTdGF0dXMuT0s7Ci0JCXN3aXRjaCAobGV2ZWwpIHsKLQkJCWNhc2UgSU5GT19ERUJVRyA6Ci0JCQljYXNlIElORk8gOgotCQkJCXNldmVyaXR5ID0gSVN0YXR1cy5JTkZPOwotCQkJCWJyZWFrOwotCQkJY2FzZSBXQVJOSU5HX0RFQlVHIDoKLQkJCWNhc2UgV0FSTklORyA6Ci0JCQkJc2V2ZXJpdHkgPSBJU3RhdHVzLldBUk5JTkc7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEVSUk9SX0RFQlVHIDoKLQkJCWNhc2UgRVJST1IgOgotCQkJCXNldmVyaXR5ID0gSVN0YXR1cy5FUlJPUjsKLQkJfQotCQltZXNzYWdlID0gKG1lc3NhZ2UgIT0gbnVsbCkgPyBtZXNzYWdlIDogIm51bGwiOyAvLyROT04tTkxTLTEkCi0JCVN0YXR1cyBzdGF0dXNPYmogPSBuZXcgU3RhdHVzKHNldmVyaXR5LCBQTFVHSU5fSUQsIHNldmVyaXR5LCBtZXNzYWdlLCBleGNlcHRpb24pOwotCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKFBMVUdJTl9JRCk7Ci0JCWlmIChidW5kbGUgIT0gbnVsbCkgCi0JCQlQbGF0Zm9ybS5nZXRMb2coYnVuZGxlKS5sb2coc3RhdHVzT2JqKTsKLQotCX0KLQotCS8qKgotCSAqIFByaW50cyBtZXNzYWdlIHRvIGxvZyBpZiBjYXRlZ29yeSBtYXRjaGVzIC9kZWJ1Zy90cmFjZWZpbHRlciBvcHRpb24uCi0JICogQHBhcmFtIG1lc3NhZ2UgdGV4dCB0byBwcmludAotCSAqIEBwYXJhbSBjYXRlZ29yeSBjYXRlZ29yeSBvZiB0aGUgbWVzc2FnZSwgdG8gYmUgY29tcGFyZWQgd2l0aCAvZGVidWcvdHJhY2VmaWx0ZXIKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIHZvaWQgX3RyYWNlKFN0cmluZyBjYXRlZ29yeSwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJaWYgKGlzVHJhY2luZyhjYXRlZ29yeSkpIHsKLQkJCW1lc3NhZ2UgPSAobWVzc2FnZSAhPSBudWxsKSA/IG1lc3NhZ2UgOiAibnVsbCI7IC8vJE5PTi1OTFMtMSQKLQkJCVN0YXR1cyBzdGF0dXNPYmogPSBuZXcgU3RhdHVzKElTdGF0dXMuT0ssIFBMVUdJTl9JRCwgSVN0YXR1cy5PSywgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQkJCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoUExVR0lOX0lEKTsKLQkJCWlmIChidW5kbGUgIT0gbnVsbCkgCi0JCQkJUGxhdGZvcm0uZ2V0TG9nKGJ1bmRsZSkubG9nKHN0YXR1c09iaik7Ci0KLQkJfQotCX0KLQotCS8qKgotCSAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgcGxhdGZvcm0gaXMgZGVidWdnaW5nCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzRGVidWdnaW5nKCkgewotCQlyZXR1cm4gUGxhdGZvcm0uaW5EZWJ1Z01vZGUoKTsKLQl9Ci0KLQkvKioKLQkgKiBEZXRlcm1pbmVzIGlmIGN1cnJlbnRseSB0cmFjaW5nIGEgY2F0ZWdvcnkKLQkgKiBAcGFyYW0gY2F0ZWdvcnkKLQkgKiBAcmV0dXJuIHRydWUgaWYgdHJhY2luZyBjYXRlZ29yeSwgZmFsc2Ugb3RoZXJ3aXNlCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzVHJhY2luZyhTdHJpbmcgY2F0ZWdvcnkpIHsKLQkJaWYgKCFpc0RlYnVnZ2luZygpKQotCQkJcmV0dXJuIGZhbHNlOwotCi0JCVN0cmluZyB0cmFjZUZpbHRlciA9IFBsYXRmb3JtLmdldERlYnVnT3B0aW9uKFBMVUdJTl9JRCArIFRSQUNFRklMVEVSX0xPQ0FUSU9OKTsKLQkJaWYgKHRyYWNlRmlsdGVyICE9IG51bGwpIHsKLQkJCVN0cmluZ1Rva2VuaXplciB0b2tlbml6ZXIgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHRyYWNlRmlsdGVyLCAiLCIpOyAvLyROT04tTkxTLTEkCi0JCQl3aGlsZSAodG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSkgewotCQkJCVN0cmluZyBjYXQgPSB0b2tlbml6ZXIubmV4dFRva2VuKCkudHJpbSgpOwotCQkJCWlmIChjYXRlZ29yeS5lcXVhbHMoY2F0KSkgewotCQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2coaW50IGxldmVsLCBTdHJpbmcgbWVzc2FnZSkgewotCQlfbG9nKGxldmVsLCBtZXNzYWdlLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nKGludCBsZXZlbCwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX2xvZyhsZXZlbCwgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nRXhjZXB0aW9uKFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV9sb2coRVJST1IsIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZ0V4Y2VwdGlvbihUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV9sb2coRVJST1IsIGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCksIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHRyYWNlRXhjZXB0aW9uKFN0cmluZyBjYXRlZ29yeSwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX3RyYWNlKGNhdGVnb3J5LCBtZXNzYWdlLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCB0cmFjZUV4Y2VwdGlvbihTdHJpbmcgY2F0ZWdvcnksIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX3RyYWNlKGNhdGVnb3J5LCBleGNlcHRpb24uZ2V0TWVzc2FnZSgpLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCB0cmFjZShTdHJpbmcgY2F0ZWdvcnksIFN0cmluZyBtZXNzYWdlKSB7Ci0JCV90cmFjZShjYXRlZ29yeSwgbWVzc2FnZSwgbnVsbCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvU1NFTW9kZWxYTUxUZXN0U3VpdGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL1NTRU1vZGVsWE1MVGVzdFN1aXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhYThlZjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvU1NFTW9kZWxYTUxUZXN0U3VpdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmRvY3VtZW50LnRlc3QuTm9kZUltcGxUZXN0Q2FzZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuY29udGVudG1vZGVsLlRlc3RBdHRyaWJ1dGVzT3JkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmNvbnRlbnRtb2RlbC5UZXN0Q2F0YWxvZ1JldHJpdmFsQW5kTW9kZWxDcmVhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuZG9jdW1lbnQuR2V0RG9jdW1lbnRSZWdpb25zVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuZG9jdW1lbnQuVGVzdFN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuZG9jdW1lbnQuVGVzdFhNTERvY3VtZW50TG9hZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5kb2N1bWVudC5UcmFuc2l0aW9uVGVzdHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmRvbS5BdHRySW1wbFRlc3RzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5kb20uRWxlbWVudEltcGxUZXN0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuZG9tLk5hbWVWYWxpZGF0b3JUZXN0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuZG9tLk5vZGVMaXN0SW1wbFRlc3RzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5mb3JtYXQuVGVzdFBhcnRpdGlvbkZvcm1hdHRlclhNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMubW9kZWwuVGVzdE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMubW9kZWwuVGVzdE1vZGVsc0Zyb21GaWxlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMubW9kZWwuVGVzdFN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMubW9kZWwuVGVzdFhNTE1vZGVsTG9hZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy50ZXh0LlRlc3RTdHJ1Y3R1cmVkUGFydGl0aW9uZXJYTUw7Ci0KLQotCi1wdWJsaWMgY2xhc3MgU1NFTW9kZWxYTUxUZXN0U3VpdGUgZXh0ZW5kcyBUZXN0U3VpdGUgewotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBTU0VNb2RlbFhNTFRlc3RTdWl0ZSgpOwotCX0KLQotCXB1YmxpYyBTU0VNb2RlbFhNTFRlc3RTdWl0ZSgpIHsKLQkJc3VwZXIoIlhNTCBDb3JlIFRlc3QgU3VpdGUiKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RNb2RlbHNGcm9tRmlsZXMuY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RYTUxNb2RlbExvYWRlci5jbGFzcykpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdFhNTERvY3VtZW50TG9hZGVyLmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0U3RydWN0dXJlZERvY3VtZW50LmNsYXNzKSk7Ci0JCQotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdE1vZGVsTWFuYWdlci5jbGFzcykpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdFN0cnVjdHVyZWRNb2RlbC5jbGFzcykpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdFN0cnVjdHVyZWRQYXJ0aXRpb25lclhNTC5jbGFzcykpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoTmFtZVZhbGlkYXRvclRlc3RzLmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShFbGVtZW50SW1wbFRlc3RzLmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShBdHRySW1wbFRlc3RzLmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShOb2RlTGlzdEltcGxUZXN0cy5jbGFzcykpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVHJhbnNpdGlvblRlc3RzLmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShYTUxDb3JlUHJlZmVyZW5jZXNUZXN0LmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0Q2F0YWxvZ1JldHJpdmFsQW5kTW9kZWxDcmVhdGlvbi5jbGFzcykpOwotCQkKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEdldERvY3VtZW50UmVnaW9uc1Rlc3QuY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKE5vZGVJbXBsVGVzdENhc2UuY2xhc3MpKTsKLQotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdFBhcnRpdGlvbkZvcm1hdHRlclhNTC5jbGFzcykpOwotCi0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0QXR0cmlidXRlc09yZGVyLmNsYXNzKSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvU1NFTW9kZWxYTUxUZXN0c1BsdWdpbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvU1NFTW9kZWxYTUxUZXN0c1BsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMmYxZGZhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL1NTRU1vZGVsWE1MVGVzdHNQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotCi0vKioKLSAqIFRoZSBtYWluIHBsdWdpbiBjbGFzcyB0byBiZSB1c2VkIGluIHRoZSBkZXNrdG9wLgotICovCi1wdWJsaWMgY2xhc3MgU1NFTW9kZWxYTUxUZXN0c1BsdWdpbiBleHRlbmRzIFBsdWdpbiB7Ci0JLy9UaGUgc2hhcmVkIGluc3RhbmNlLgotCXByaXZhdGUgc3RhdGljIFNTRU1vZGVsWE1MVGVzdHNQbHVnaW4gcGx1Z2luOwotCi0JLyoqCi0JICogVGhlIGNvbnN0cnVjdG9yLgotCSAqLwotCXB1YmxpYyBTU0VNb2RlbFhNTFRlc3RzUGx1Z2luKCkgewotCQlzdXBlcigpOwotCQlwbHVnaW4gPSB0aGlzOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFNTRU1vZGVsWE1MVGVzdHNQbHVnaW4gZ2V0RGVmYXVsdCgpIHsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzdHJpbmcgZnJvbSB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLAotCSAqIG9yICdrZXknIGlmIG5vdCBmb3VuZC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRSZXNvdXJjZVN0cmluZyhTdHJpbmcga2V5KSB7Ci0JCXJldHVybiBrZXk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLAotCSAqLwotCXB1YmxpYyBSZXNvdXJjZUJ1bmRsZSBnZXRSZXNvdXJjZUJ1bmRsZSgpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBVUkwgZ2V0SW5zdGFsbExvY2F0aW9uKCkgewotCQlVUkwgaW5zdGFsbExvY2F0aW9uID0gUGxhdGZvcm0uZ2V0QnVuZGxlKCJvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMiKS5nZXRFbnRyeSgiLyIpOwotCQlVUkwgcmVzb2x2ZWRMb2NhdGlvbiA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlyZXNvbHZlZExvY2F0aW9uID0gRmlsZUxvY2F0b3IucmVzb2x2ZShpbnN0YWxsTG9jYXRpb24pOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBpbXBvc3NpYmxlCi0JCQl0aHJvdyBuZXcgRXJyb3IoZSk7Ci0JCX0KLQkJcmV0dXJuIHJlc29sdmVkTG9jYXRpb247Ci0JfQotCi0JcHVibGljIHN0YXRpYyBGaWxlIGdldFRlc3RGaWxlKFN0cmluZyBmaWxlcGF0aCkgewotCQlVUkwgaW5zdGFsbFVSTCA9IGdldEluc3RhbGxMb2NhdGlvbigpOwotCQkvL1N0cmluZyBzY2hlbWUgPSBpbnN0YWxsVVJMLmdldFByb3RvY29sKCk7Ci0JCVN0cmluZyBwYXRoID0gaW5zdGFsbFVSTC5nZXRQYXRoKCk7Ci0JCVN0cmluZyBsb2NhdGlvbiA9IHBhdGggKyBmaWxlcGF0aDsKLQkJRmlsZSByZXN1bHQgPSBuZXcgRmlsZShsb2NhdGlvbik7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvWE1MQ29yZVByZWZlcmVuY2VzVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvWE1MQ29yZVByZWZlcmVuY2VzVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjMyMDFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL1hNTENvcmVQcmVmZXJlbmNlc1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5EZWZhdWx0U2NvcGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzLklFY2xpcHNlUHJlZmVyZW5jZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzLkluc3RhbmNlU2NvcGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLkNvbW1vbkVuY29kaW5nUHJlZmVyZW5jZU5hbWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5Db250ZW50QmFzZWRQcmVmZXJlbmNlR2F0ZXdheTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuQ29udGVudFR5cGVFbmNvZGluZ1ByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRW5jb2RlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5YTUxDb3JlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5YTUxEb2N1bWVudExvYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuWE1MQ29yZVByZWZlcmVuY2VOYW1lczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvclhNTDsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLm9zZ2kuc2VydmljZS5wcmVmcy5QcmVmZXJlbmNlczsKLQotLyoqCi0gKiBUaGUgcHVycG9zZSBvZiB0aGlzIHRlc3QgaXMgdG8gdmVyaWZ5IHRoZSB2YWxpZGl0eSBvZiB0aGUgWE1MIFNvdXJjZSBlZGl0b3IKLSAqIHByZWZlcmVuY2VzLiBUZXN0cyBpbmNsdWRlIHNldHRpbmcvZ2V0dGluZyBwcmVmZXJlbmNlcy4KLSAqIAotICogTk9URTogVGhpcyB0ZXN0IHNob3VsZCBiZSBwcmVmb3JtZWQgb24gYSBjbGVhbiB3b3Jrc3BhY2UuIElmIHBlcmZvcm1lZCBvbgotICogYW4gZXhpc3Rpbmcgd29ya3NwYWNlLCB0aGlzIHRlc3Qgd2lsbCBtYW5pcHVsYXRlIHByZWZlcmVuY2VzIGluIHRoZQotICogd29ya3NwYWNlLCB0aG91Z2ggYXR0ZW1wdHMgd2lsbCBiZSBtYWRlIHRvIHJlc3RvcmUgb3JpZ2luYWwgdmFsdWVzIGFmdGVyCi0gKiB0ZXN0aW5nLgotICovCi1wdWJsaWMgY2xhc3MgWE1MQ29yZVByZWZlcmVuY2VzVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQkvKioKLQkgKiBUZXN0cyBleGlzdGFuY2Ugb2YgcHJlZmVyZW5jZSB2YWx1ZXMgd2hlbiBnZXR0aW5nIHByZWZlcmVuY2UgdmFsdWVzCi0JICogdGhyb3VnaCBQbGF0Zm9ybS5nZXRQcmVmZXJlbmNlc1NlcnZpY2UoKQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RCdW5kbGVHZXRQcmVmZXJlbmNlcygpIHsKLQkJZmluYWwgU3RyaW5nIGJ1bmRsZU5hbWUgPSAib3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlIjsKLQotCQkvLyBuZWVkIHRvIHN0YXJ0IHVwIGJ1bmRsZSBmb3IgZGVmYXVsdCB2YWx1ZXMgdG8gYmUgbG9hZGVkCi0JCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoYnVuZGxlTmFtZSk7Ci0JCXRyeSB7Ci0JCQlpZiAoYnVuZGxlICE9IG51bGwpCi0JCQkJYnVuZGxlLnN0YXJ0KCk7Ci0JCQllbHNlCi0JCQkJZmFpbCgiR2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIGJlY2F1c2UgY291bGQgbm90IGZpbmQgYnVuZGxlOiAiICsgYnVuZGxlTmFtZSk7Ci0JCX0KLQkJY2F0Y2ggKEJ1bmRsZUV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCJHZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgYmVjYXVzZSBvZiBleGNlcHRpb24gc3RhcnRpbmcgYnVuZGxlOiAiICsgYnVuZGxlTmFtZSArICIgZXhjZXB0aW9uOiAiICsgZSk7Ci0JCX0KLQotCQlidW5kbGVHZXRQcmVmZXJlbmNlKGJ1bmRsZU5hbWUsIFhNTENvcmVQcmVmZXJlbmNlTmFtZXMuSU5ERU5UQVRJT05fU0laRSk7Ci0JCWJ1bmRsZUdldFByZWZlcmVuY2UoYnVuZGxlTmFtZSwgWE1MQ29yZVByZWZlcmVuY2VOYW1lcy5MSU5FX1dJRFRIKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgYnVuZGxlR2V0UHJlZmVyZW5jZShTdHJpbmcgYnVuZGxlTmFtZSwgU3RyaW5nIHByZWZLZXkpIHsKLQkJaW50IGRlZmF1bHRWYWx1ZSA9IC0xOwotCi0JCWludCB2YWx1ZSA9IFBsYXRmb3JtLmdldFByZWZlcmVuY2VzU2VydmljZSgpLmdldEludChidW5kbGVOYW1lLCBwcmVmS2V5LCBkZWZhdWx0VmFsdWUsIG51bGwpOwotCQlhc3NlcnRUcnVlKCJHZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgdXNpbmcgUGxhdGZvcm0uZ2V0UHJlZmVyZW5jZXNTZXJ2aWNlLiBLZXk6ICIgKyBwcmVmS2V5LCBkZWZhdWx0VmFsdWUgIT0gdmFsdWUpOwotCX0KLQotCS8qKgotCSAqIFRlc3RzIGRlZmF1bHQgdmFsdWVzIG9mIHByZWZlcmVuY2VzLgotCSAqIAotCSAqIE5PVEU6IEV4cGVjdGVkIGRlZmF1bHQgdmFsdWVzIGFyZSBoYXJkLWNvZGVkLCBzbyBpZiBkZWZhdWx0IHZhbHVlcyBkbwotCSAqIGdldCBjaGFuZ2VkLCBhc3NlcnRpb25zIG5lZWQgdG8gYmUgdXBkYXRlZCBhcyB3ZWxsCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFBsdWdpbkdldERlZmF1bHRQcmVmZXJlbmNlcygpIHsKLQkJSUVjbGlwc2VQcmVmZXJlbmNlcyBub2RlID0gbmV3IERlZmF1bHRTY29wZSgpLmdldE5vZGUoWE1MQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCkpOwotCi0JCXBsdWdpbkdldERlZmF1bHRQcmVmZXJlbmNlKG5vZGUsIFhNTENvcmVQcmVmZXJlbmNlTmFtZXMuU1BMSVRfTVVMVElfQVRUUlMsIEJvb2xlYW4udG9TdHJpbmcoZmFsc2UpKTsKLQkJcGx1Z2luR2V0RGVmYXVsdFByZWZlcmVuY2Uobm9kZSwgWE1MQ29yZVByZWZlcmVuY2VOYW1lcy5JTkRFTlRBVElPTl9DSEFSLCBYTUxDb3JlUHJlZmVyZW5jZU5hbWVzLlRBQik7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHBsdWdpbkdldERlZmF1bHRQcmVmZXJlbmNlKElFY2xpcHNlUHJlZmVyZW5jZXMgbm9kZSwgU3RyaW5nIHByZWZLZXksIFN0cmluZyBleHBlY3RlZCkgewotCQlTdHJpbmcgZGVmYXVsdFZhbHVlID0gTG9uZy50b1N0cmluZyhTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSk7IC8vIHJhbmRvbQotCQkvLyBzdHJpbmcKLQotCQlTdHJpbmcgdGhlRGVmYXVsdFZhbHVlID0gbm9kZS5nZXQocHJlZktleSwgZGVmYXVsdFZhbHVlKTsKLQkJYXNzZXJ0RXF1YWxzKCJHZXQgZGVmYXVsdCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCB1c2luZyBwbHVnaW4uZ2V0UHJlZmVyZW5jZVN0b3JlLiBLZXk6ICIgKyBwcmVmS2V5LCBleHBlY3RlZCwgdGhlRGVmYXVsdFZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0cyBzZXR0aW5nIHByZWZlcmVuY2UgdmFsdWVzIGJ5IHNldHRpbmcgcHJlZmVyZW5jZSB2YWx1ZSB0byBiZSBhCi0JICogY2VydGFpbiB2YWx1ZSwgdGhlbiBnZXR0aW5nIHRoZSBwcmVmZXJlbmNlIHZhbHVlIHRvIHZlcmlmeSBpdCB3YXMgc2V0LgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RQbHVnaW5TZXRQcmVmZXJlbmNlcygpIHsKLQkJSUVjbGlwc2VQcmVmZXJlbmNlcyBub2RlID0gbmV3IEluc3RhbmNlU2NvcGUoKS5nZXROb2RlKFhNTENvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldFN5bWJvbGljTmFtZSgpKTsKLQotCQlwbHVnaW5TZXRQcmVmZXJlbmNlQm9vbGVhbihub2RlLCBYTUxDb3JlUHJlZmVyZW5jZU5hbWVzLkNMRUFSX0FMTF9CTEFOS19MSU5FUyk7Ci0JCXBsdWdpblNldFByZWZlcmVuY2VTdHJpbmcobm9kZSwgWE1MQ29yZVByZWZlcmVuY2VOYW1lcy5JTkRFTlRBVElPTl9DSEFSKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgcGx1Z2luU2V0UHJlZmVyZW5jZUJvb2xlYW4oSUVjbGlwc2VQcmVmZXJlbmNlcyBub2RlLCBTdHJpbmcgcHJlZktleSkgewotCQlib29sZWFuIG9yaWdpbmFsVmFsdWUgPSBmYWxzZTsKLQkJYm9vbGVhbiBleHBlY3RlZFZhbHVlID0gdHJ1ZTsKLQotCQlTdHJpbmcgb3JpZ2luYWxTdHJpbmcgPSBub2RlLmdldChwcmVmS2V5LCAiYm9ndXMiKTsKLQkJaWYgKCEiYm9ndXMiLmVxdWFscyhvcmlnaW5hbFN0cmluZykpIHsKLQkJCW9yaWdpbmFsVmFsdWUgPSBCb29sZWFuLnZhbHVlT2Yob3JpZ2luYWxTdHJpbmcpLmJvb2xlYW5WYWx1ZSgpOwotCQkJZXhwZWN0ZWRWYWx1ZSA9ICFvcmlnaW5hbFZhbHVlOwotCQl9Ci0JCW5vZGUucHV0Qm9vbGVhbihwcmVmS2V5LCBleHBlY3RlZFZhbHVlKTsKLQkJYm9vbGVhbiBmb3VuZFZhbHVlID0gbm9kZS5nZXRCb29sZWFuKHByZWZLZXksIHRydWUpOwotCQlhc3NlcnRFcXVhbHMoIlNldCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCB1c2luZyBwbHVnaW4uZ2V0UHJlZmVyZW5jZVN0b3JlLiBLZXk6ICIgKyBwcmVmS2V5ICsgIiAgZXhwZWN0ZWQ6ICIgKyBleHBlY3RlZFZhbHVlICsgIiBmb3VuZDogIiArIGZvdW5kVmFsdWUsIGV4cGVjdGVkVmFsdWUsIGZvdW5kVmFsdWUpOwotCi0JCS8vIGF0dGVtcHQgdG8gcmVzdG9yZSBvcmlnaW5hbCBwcmVmZXJlbmNlIHZhbHVlCi0JCWlmICgiYm9ndXMiLmVxdWFscyhvcmlnaW5hbFN0cmluZykpCi0JCQlub2RlLnJlbW92ZShwcmVmS2V5KTsKLQkJZWxzZQotCQkJbm9kZS5wdXQocHJlZktleSwgb3JpZ2luYWxTdHJpbmcpOwotCX0KLQotCXByaXZhdGUgdm9pZCBwbHVnaW5TZXRQcmVmZXJlbmNlU3RyaW5nKElFY2xpcHNlUHJlZmVyZW5jZXMgbm9kZSwgU3RyaW5nIHByZWZLZXkpIHsKLQkJU3RyaW5nIG9yaWdpbmFsVmFsdWUgPSBub2RlLmdldChwcmVmS2V5LCAiYm9ndXMiKTsKLQkJU3RyaW5nIGV4cGVjdGVkVmFsdWUgPSBMb25nLnRvU3RyaW5nKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpKTsgLy8gcmFuZG9tCi0JCS8vIHN0cmluZwotCQlub2RlLnB1dChwcmVmS2V5LCBleHBlY3RlZFZhbHVlKTsKLQkJU3RyaW5nIGZvdW5kVmFsdWUgPSBub2RlLmdldChwcmVmS2V5LCAiIik7Ci0JCWFzc2VydEVxdWFscygiU2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIHVzaW5nIHBsdWdpbi5nZXRQcmVmZXJlbmNlU3RvcmUuIEtleTogIiArIHByZWZLZXkgKyAiICBleHBlY3RlZDogIiArIGV4cGVjdGVkVmFsdWUgKyAiIGZvdW5kOiAiICsgZm91bmRWYWx1ZSwgZXhwZWN0ZWRWYWx1ZSwgZm91bmRWYWx1ZSk7Ci0KLQkJLy8gYXR0ZW1wdCB0byByZXN0b3JlIG9yaWdpbmFsIHByZWZlcmVuY2UgdmFsdWUKLQkJaWYgKCJib2d1cyIuZXF1YWxzKG9yaWdpbmFsVmFsdWUpKQotCQkJbm9kZS5yZW1vdmUocHJlZktleSk7Ci0JCWVsc2UKLQkJCW5vZGUucHV0KHByZWZLZXksIG9yaWdpbmFsVmFsdWUpOwotCX0KLQotCS8qKgotCSAqIFRlc3RzIGxpbmUgZGVsaW1pdGVyIHByZWZlcmVuY2VzIGJ5IG1ha2luZyBzdXJlIGRvY3VtZW50IGNyZWF0ZWQKLQkgKiBmb2xsb3dzIGxpbmUgZGVsaW1pdGVyIHByZWZlcmVuY2UuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdERlbGltaXRlclByZWZlcmVuY2VzKCkgewotCQkvLyBjaGVjayBpZiBjb250ZW50IHR5cGUgcHJlZmVyZW5jZXMgbWF0Y2gKLQkJU3RyaW5nIHByZWZlcnJlZERlbGltaXRlciA9IENvbnRlbnRUeXBlRW5jb2RpbmdQcmVmZXJlbmNlcy5nZXRQcmVmZXJyZWROZXdMaW5lRGVsaW1pdGVyKENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwpOwotCQlQcmVmZXJlbmNlcyBwcmVmcyA9IENvbnRlbnRCYXNlZFByZWZlcmVuY2VHYXRld2F5LmdldFByZWZlcmVuY2VzKENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwpOwotCQlTdHJpbmcgZ2F0ZXdheURlbGltaXRlciA9IHByZWZzLmdldChDb21tb25FbmNvZGluZ1ByZWZlcmVuY2VOYW1lcy5FTkRfT0ZfTElORV9DT0RFLCBudWxsKTsKLQkJYXNzZXJ0RXF1YWxzKCJDb250ZW50VHlwZUVuY29kaW5nUHJlZmVyZW5jZXMgYW5kIENvbnRlbnRCYXNlZFByZWZlcmVuY2VHYXRld2F5IHByZWZlcmVuY2VzIGRvIG5vdCBtYXRjaCIsIGdhdGV3YXlEZWxpbWl0ZXIsIHByZWZlcnJlZERlbGltaXRlcik7Ci0KLQkJLy8gc2V0IGEgcGFydGljdWxhciBsaW5lIGRlbGltaXRlcgotCQlwcmVmcy5wdXQoQ29tbW9uRW5jb2RpbmdQcmVmZXJlbmNlTmFtZXMuRU5EX09GX0xJTkVfQ09ERSwgQ29tbW9uRW5jb2RpbmdQcmVmZXJlbmNlTmFtZXMuTEYpOwotCi0JCS8vIGNyZWF0ZSBkb2N1bWVudAotCQlYTUxEb2N1bWVudExvYWRlciBsb2FkZXIgPSBuZXcgWE1MRG9jdW1lbnRMb2FkZXIoKTsKLQkJSUVuY29kZWREb2N1bWVudCBkb2N1bWVudCA9IGxvYWRlci5jcmVhdGVOZXdTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJU3RyaW5nIGRvY3VtZW50RGVsaW1pdGVyID0gZG9jdW1lbnQuZ2V0UHJlZmVycmVkTGluZURlbGltaXRlcigpOwotCi0JCS8vIHZlcmlmeSBkZWxpbWl0ZXIgaW4gZG9jdW1lbnQgbWF0Y2hlcyBwcmVmZXJlbmNlCi0JCWFzc2VydEVxdWFscygiRGVsaW1pdGVyIGluIGRvY3VtZW50IGRvZXMgbm90IG1hdGNoIHByZWZlcmVuY2UiLCBDb21tb25FbmNvZGluZ1ByZWZlcmVuY2VOYW1lcy5TVFJJTkdfTEYsIGRvY3VtZW50RGVsaW1pdGVyKTsKLQotCQkvLyByZXR1cm4gdG8gb3JpZ2luYWwgcHJlZmVyZW5jZQotCQlwcmVmcy5yZW1vdmUoQ29tbW9uRW5jb2RpbmdQcmVmZXJlbmNlTmFtZXMuRU5EX09GX0xJTkVfQ09ERSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvY29udGVudG1vZGVsL0NNUHJpbnRlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvY29udGVudG1vZGVsL0NNUHJpbnRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MWJmZjRjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2NvbnRlbnRtb2RlbC9DTVByaW50ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmNvbnRlbnRtb2RlbDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtV3JpdGVyOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLkxvZ2dlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNQW55RWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNQXR0cmlidXRlRGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTUNvbnRlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTURhdGFUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01Eb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNRWxlbWVudERlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01FbnRpdHlEZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNR3JvdXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTU5hbWVkTm9kZU1hcDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNTm9kZUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC51dGlsLkNNVmlzaXRvcjsKLQotCi1wdWJsaWMgY2xhc3MgQ01QcmludGVyIGV4dGVuZHMgQ01WaXNpdG9yCi17Ci0gIHByb3RlY3RlZCBTdHJpbmdCdWZmZXIgZlN0cmluZ0J1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgcHJvdGVjdGVkIFZlY3RvciB2aXNpdGVkRWxlbWVudHMgPSBuZXcgVmVjdG9yKCk7IAotICAgIAotICAvKioqKioqICAgZm9ybWF0dGluZyAgICAqKioqKiovCi0gIHByb3RlY3RlZCBTdHJpbmcgaW5kZW50ID0gIiI7IC8vJE5PTi1OTFMtMSQKLQotICBwcm90ZWN0ZWQgdm9pZCBpbmNyZW1lbnRJbmRlbnQoKQotICB7Ci0gICAgaW5kZW50ID0gaW5kZW50ICsgIiAgIjsgLy8kTk9OLU5MUy0xJAotICB9Ci0KLSAgcHJvdGVjdGVkIHZvaWQgZGVjcmVtZW50SW5kZW50KCkKLSAgewotICAgIGluZGVudCA9IGluZGVudC5zdWJzdHJpbmcoMCwgaW5kZW50Lmxlbmd0aCgpLTIpOwotICB9Ci0KLQotICBwdWJsaWMgdm9pZCBwcmludENNTm9kZShTdHJpbmcgZmlsZW5hbWUsIENNTm9kZSBjbW5vZGUpCi0gIHsKLSAgICB2aXNpdENNTm9kZShjbW5vZGUpOwotICAgIHRyeSAKLSAgICB7Ci0gICAgICBGaWxlT3V0cHV0U3RyZWFtIGZpbGVTdHJlYW0gPSBuZXcgRmlsZU91dHB1dFN0cmVhbShmaWxlbmFtZSk7Ci0gICAgICBPdXRwdXRTdHJlYW1Xcml0ZXIgd3JpdGVyID0gbmV3IE91dHB1dFN0cmVhbVdyaXRlcihmaWxlU3RyZWFtKTsKLSAgICAgIHdyaXRlci53cml0ZShmU3RyaW5nQnVmZmVyLnRvU3RyaW5nKCkpOwotICAgICAgd3JpdGVyLmZsdXNoKCk7Ci0gICAgICBmaWxlU3RyZWFtLmNsb3NlKCk7Ci0gICAgfQotICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgCUxvZ2dlci5sb2dFeGNlcHRpb24oIlBNUHJpbnRlciBEZWJ1ZzogIiwgZSk7Ci0gICAgfSAgCi0gIH0KLQotICBwdWJsaWMgdm9pZCB2aXNpdENNQW55RWxlbWVudChDTUFueUVsZW1lbnQgYW55RWxlbWVudCkKLSAgewotICAgIGZTdHJpbmdCdWZmZXIuYXBwZW5kKGluZGVudCArICI8Q01BbnlFbGVtZW50Iik7IC8vJE5PTi1OTFMtMSQKLSAgICBwcmludEF0dHJpYnV0ZXMoZlN0cmluZ0J1ZmZlciwgYW55RWxlbWVudCk7Ci0gICAgZlN0cmluZ0J1ZmZlci5hcHBlbmQoIj4vbiIpOyAvLyROT04tTkxTLTEkCi0gICAgaW5jcmVtZW50SW5kZW50KCk7Ci0gICAgcHJpbnRQcm9wZXJ0aWVzKGZTdHJpbmdCdWZmZXIsIGFueUVsZW1lbnQpOwotICAgIGRlY3JlbWVudEluZGVudCgpOwotICAgIGZTdHJpbmdCdWZmZXIuYXBwZW5kKGluZGVudCArICI8L0NNQW55RWxlbWVudD4vbiIpOyAvLyROT04tTkxTLTEkCi0gIH0KLQotICBwdWJsaWMgdm9pZCB2aXNpdENNQXR0cmlidXRlRGVjbGFyYXRpb24oQ01BdHRyaWJ1dGVEZWNsYXJhdGlvbiBhZCkKLSAgewotICAgIGZTdHJpbmdCdWZmZXIuYXBwZW5kKGluZGVudCArICI8Q01BdHRyaWJ1dGVEZWNsYXJhdGlvbiIpOyAvLyROT04tTkxTLTEkCi0gICAgcHJpbnRBdHRyaWJ1dGVzKGZTdHJpbmdCdWZmZXIsIGFkKTsKLSAgICBmU3RyaW5nQnVmZmVyLmFwcGVuZCgiPlxuIik7IC8vJE5PTi1OTFMtMSQKLSAgICBpbmNyZW1lbnRJbmRlbnQoKTsKLSAgICBwcmludFByb3BlcnRpZXMoZlN0cmluZ0J1ZmZlciwgYWQpOwotICAgIGRlY3JlbWVudEluZGVudCgpOwotICAgIHZpc2l0Q01Ob2RlKGFkLmdldEF0dHJUeXBlKCkpOwotICAgIGZTdHJpbmdCdWZmZXIuYXBwZW5kKGluZGVudCArICI8L0NNQXR0cmlidXRlRGVjbGFyYXRpb24+XG4iKTsgLy8kTk9OLU5MUy0xJAotICB9Ci0KLSAgcHVibGljIHZvaWQgdmlzaXRDTURhdGFUeXBlKENNRGF0YVR5cGUgZGF0YVR5cGUpCi0gIHsKLSAgICBmU3RyaW5nQnVmZmVyLmFwcGVuZChpbmRlbnQgKyAiPENNRGF0YVR5cGUiKTsgLy8kTk9OLU5MUy0xJAotICAgIHByaW50QXR0cmlidXRlcyhmU3RyaW5nQnVmZmVyLCBkYXRhVHlwZSk7Ci0gICAgZlN0cmluZ0J1ZmZlci5hcHBlbmQoIj5cbiIpOyAvLyROT04tTkxTLTEkCi0gICAgaW5jcmVtZW50SW5kZW50KCk7Ci0gICAgZlN0cmluZ0J1ZmZlci5hcHBlbmQoaW5kZW50ICsgIjxJbXBsaWVkVmFsdWUga2luZD1cIiIgKyBkYXRhVHlwZS5nZXRJbXBsaWVkVmFsdWVLaW5kKCkgKyAiXCI+Iik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgIGZTdHJpbmdCdWZmZXIuYXBwZW5kKGRhdGFUeXBlLmdldEltcGxpZWRWYWx1ZSgpICsgIjwvSW1wbGllZFZhbHVlPlxuIik7IC8vJE5PTi1OTFMtMSQKLSAgICBwcmludEVudW1lcmF0aW9uKGZTdHJpbmdCdWZmZXIsIGRhdGFUeXBlLmdldEVudW1lcmF0ZWRWYWx1ZXMoKSk7Ci0gICAgZGVjcmVtZW50SW5kZW50KCk7Ci0gICAgZlN0cmluZ0J1ZmZlci5hcHBlbmQoaW5kZW50ICsgIjwvQ01EYXRhVHlwZT5cbiIpOyAvLyROT04tTkxTLTEkCi0gIH0KLQotICBwdWJsaWMgdm9pZCB2aXNpdENNRG9jdW1lbnQoQ01Eb2N1bWVudCBkb2N1bWVudCkKLSAgewotICAgIGZTdHJpbmdCdWZmZXIuYXBwZW5kKGluZGVudCArICI8Q01Eb2N1bWVudCIpOyAvLyROT04tTkxTLTEkCi0gICAgcHJpbnRBdHRyaWJ1dGVzKGZTdHJpbmdCdWZmZXIsIGRvY3VtZW50KTsKLSAgICBmU3RyaW5nQnVmZmVyLmFwcGVuZCgiPlxuIik7IC8vJE5PTi1OTFMtMSQKLSAgICBpbmNyZW1lbnRJbmRlbnQoKTsKLQotICAgIC8vICAgIHByaW50RW50aXRpZXMoc2IsIGRvY3VtZW50LmdldEVudGl0aWVzKCkpOyAKLSAgICBwcmludFByb3BlcnRpZXMoZlN0cmluZ0J1ZmZlciwgZG9jdW1lbnQpOwotCi0gICAgQ01OYW1lZE5vZGVNYXAgbWFwID0gZG9jdW1lbnQuZ2V0RWxlbWVudHMoKTsKLSAgICBpbnQgc2l6ZSA9IG1hcC5nZXRMZW5ndGgoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykKLSAgICB7Ci0gICAgICB2aXNpdENNTm9kZShtYXAuaXRlbShpKSk7Ci0gICAgfQotCi0gICAgZGVjcmVtZW50SW5kZW50KCk7Ci0gICAgZlN0cmluZ0J1ZmZlci5hcHBlbmQoaW5kZW50ICsgIjwvQ01Eb2N1bWVudD5cbiIpOyAvLyROT04tTkxTLTEkCi0gIH0KLQotICBwdWJsaWMgdm9pZCB2aXNpdENNR3JvdXAoQ01Hcm91cCBncm91cCkKLSAgewotICAgIGZTdHJpbmdCdWZmZXIuYXBwZW5kKGluZGVudCArICI8Q01Hcm91cCIpOyAvLyROT04tTkxTLTEkCi0gICAgcHJpbnRBdHRyaWJ1dGVzKGZTdHJpbmdCdWZmZXIsIGdyb3VwKTsKLSAgICBmU3RyaW5nQnVmZmVyLmFwcGVuZCgiPlxuIik7IC8vJE5PTi1OTFMtMSQKLSAgICBpbmNyZW1lbnRJbmRlbnQoKTsKLQotICAgIENNTm9kZUxpc3Qgbm9kZUxpc3QgPSBncm91cC5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgaW50IHNpemUgPSBub2RlTGlzdC5nZXRMZW5ndGgoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykKLSAgICB7Ci0gICAgICB2aXNpdENNTm9kZShub2RlTGlzdC5pdGVtKGkpKTsKLSAgICB9Ci0KLSAgICBkZWNyZW1lbnRJbmRlbnQoKTsKLSAgICBmU3RyaW5nQnVmZmVyLmFwcGVuZChpbmRlbnQgKyAiPC9DTUdyb3VwPlxuIik7IC8vJE5PTi1OTFMtMSQKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHZpc2l0Q01FbGVtZW50RGVjbGFyYXRpb24oQ01FbGVtZW50RGVjbGFyYXRpb24gZWQpCi0gIHsKLSAgICBpZiAoIXZpc2l0ZWRFbGVtZW50cy5jb250YWlucyhlZCkpCi0gICAgewotICAgICAgdmlzaXRlZEVsZW1lbnRzLmFkZChlZCk7Ci0gICAgICBmU3RyaW5nQnVmZmVyLmFwcGVuZChpbmRlbnQgKyAiPENNRWxlbWVudERlY2xhcmF0aW9uIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIHByaW50QXR0cmlidXRlcyhmU3RyaW5nQnVmZmVyLCBlZCk7Ci0gICAgICBmU3RyaW5nQnVmZmVyLmFwcGVuZCgiPlxuIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIGluY3JlbWVudEluZGVudCgpOwotICAgICAgcHJpbnRQcm9wZXJ0aWVzKGZTdHJpbmdCdWZmZXIsIGVkKTsKLQotICAgICAgQ01OYW1lZE5vZGVNYXAgbm9kZU1hcCA9IGVkLmdldEF0dHJpYnV0ZXMoKTsKLSAgICAgIGludCBzaXplID0gbm9kZU1hcC5nZXRMZW5ndGgoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQotICAgICAgewotICAgICAgICB2aXNpdENNTm9kZShub2RlTWFwLml0ZW0oaSkpOwotICAgICAgfQotCi0gICAgICB2aXNpdENNTm9kZShlZC5nZXRDb250ZW50KCkpOwotCi0gICAgICBDTURhdGFUeXBlIGRhdGFUeXBlID0gZWQuZ2V0RGF0YVR5cGUoKTsKLSAgICAgIGlmIChkYXRhVHlwZSAhPSBudWxsKQotICAgICAgICB2aXNpdENNTm9kZShkYXRhVHlwZSk7Ci0KLSAgICAgIGRlY3JlbWVudEluZGVudCgpOwotICAgICAgZlN0cmluZ0J1ZmZlci5hcHBlbmQoaW5kZW50ICsgIjwvQ01FbGVtZW50RGVjbGFyYXRpb24+XG4iKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgfQotCi0KLSAgcHVibGljIHZvaWQgcHJpbnRFbnVtZXJhdGlvbihTdHJpbmdCdWZmZXIgc2IsIFN0cmluZ1tdIHZhbHVlcykKLSAgewotICAgIGlmICgodmFsdWVzICE9IG51bGwpICYmICh2YWx1ZXMubGVuZ3RoID4gMCkpCi0gICAgewotICAgICAgc2IuYXBwZW5kKGluZGVudCArICI8RW51bWVyYXRpb24+XG4iKTsgLy8kTk9OLU5MUy0xJAotICAgICAgaW5jcmVtZW50SW5kZW50KCk7Ci0KLSAgICAgIGZvciAoaW50IGk9MDsgaTx2YWx1ZXMubGVuZ3RoOyBpKyspCi0gICAgICB7Ci0gICAgICAgIHNiLmFwcGVuZChpbmRlbnQgKyAiPFZhbHVlPiIgKyB2YWx1ZXNbaV0gKyAiPC9WYWx1ZXM+XG4iKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgICB9Ci0KLSAgICAgIGRlY3JlbWVudEluZGVudCgpOwotICAgICAgc2IuYXBwZW5kKGluZGVudCArICI8L0VudW1lcmF0aW9uPlxuIik7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gIH0KLQotCi0gIHB1YmxpYyB2b2lkIHByaW50QXR0cmlidXRlcyhTdHJpbmdCdWZmZXIgc2IsIENNTm9kZSBjbW5vZGUpCi0gIHsKLSAgICBpZiAoY21ub2RlICE9IG51bGwpCi0gICAgewotICAgICAgc2IuYXBwZW5kKCIgbm9kZU5hbWU9XCIiICsgY21ub2RlLmdldE5vZGVOYW1lKCkgKyAiXCIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgICBzYi5hcHBlbmQoIiBub2RlVHlwZT1cIiIgKyBjbW5vZGUuZ2V0Tm9kZVR5cGUoKSArICJcIiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQotICAgICAgaWYgKGNtbm9kZSBpbnN0YW5jZW9mIENNQ29udGVudCkKLSAgICAgIHsKLSAgICAgICAgc2IuYXBwZW5kKCIgbWluT2NjdXI9XCIiICsgKChDTUNvbnRlbnQpY21ub2RlKS5nZXRNaW5PY2N1cigpICsgIlwiIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICAgICBzYi5hcHBlbmQoIiBtYXhPY2N1cj1cIiIgKyAoKENNQ29udGVudCljbW5vZGUpLmdldE1heE9jY3VyKCkgKyAiXCIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgICB9Ci0gICAgICBpZiAoY21ub2RlIGluc3RhbmNlb2YgQ01BbnlFbGVtZW50KQotICAgICAgewotICAgICAgICBzYi5hcHBlbmQoIiBuYW1lc3BhY2VVUkk9XCIiICsgKChDTUFueUVsZW1lbnQpY21ub2RlKS5nZXROYW1lc3BhY2VVUkkoKSArICJcIiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgIH0KLSAgICAgIGlmIChjbW5vZGUgaW5zdGFuY2VvZiBDTUF0dHJpYnV0ZURlY2xhcmF0aW9uKQotICAgICAgewotICAgICAgICBzYi5hcHBlbmQoIiB1YXNhZ2U9XCIiICsgKChDTUF0dHJpYnV0ZURlY2xhcmF0aW9uKWNtbm9kZSkuZ2V0VXNhZ2UoKSArICJcIiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgICAgc2IuYXBwZW5kKCIgZGVmYXVsdFZhbHVlPVwiIiArICgoQ01BdHRyaWJ1dGVEZWNsYXJhdGlvbiljbW5vZGUpLmdldERlZmF1bHRWYWx1ZSgpICsgIlwiIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICAgfQotICAgICAgaWYgKGNtbm9kZSBpbnN0YW5jZW9mIENNRGF0YVR5cGUpCi0gICAgICB7IAotICAgICAgICBzYi5hcHBlbmQoIiBpbnN0YW5jZVZhbHVlPVwiIiArICgoQ01EYXRhVHlwZSljbW5vZGUpLmdlbmVyYXRlSW5zdGFuY2VWYWx1ZSgpICsgIlwiIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICAgfQotICAgICAgaWYgKGNtbm9kZSBpbnN0YW5jZW9mIENNRW50aXR5RGVjbGFyYXRpb24pCi0gICAgICB7Ci0gICAgICAgIFN0cmluZyB2YWx1ZSA9ICgoQ01FbnRpdHlEZWNsYXJhdGlvbiljbW5vZGUpLmdldFZhbHVlKCk7Ci0gICAgICAgIGlmICh2YWx1ZS5pbmRleE9mKCJcIiIpID09IC0xKSBzYi5hcHBlbmQoIiB2YWx1ZT1cIiIgKyB2YWx1ZSArICJcIiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAotICAgICAgICBlbHNlIHNiLmFwcGVuZCgiIHZhbHVlPVwiIiArIHZhbHVlICsgIlwiIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICAgfQotICAgICAgaWYgKGNtbm9kZSBpbnN0YW5jZW9mIENNR3JvdXApCi0gICAgICB7Ci0gICAgICAgIHNiLmFwcGVuZCgiIG9wZXJhdG9yPVwiIiArICgoQ01Hcm91cCljbW5vZGUpLmdldE9wZXJhdG9yKCkgKyAiXCIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgICB9Ci0gICAgICBpZiAoY21ub2RlIGluc3RhbmNlb2YgQ01FbGVtZW50RGVjbGFyYXRpb24pCi0gICAgICB7Ci0gICAgICAgIHNiLmFwcGVuZCgiIGNvbnRlbnRUeXBlPVwiIiArICgoQ01FbGVtZW50RGVjbGFyYXRpb24pY21ub2RlKS5nZXRDb250ZW50VHlwZSgpICsgIlwiIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICAgfQotICAgIH0KLSAgfQotCi0KLSAgcHVibGljIHZvaWQgcHJpbnRFbnRpdGllcyhTdHJpbmdCdWZmZXIgc2IsIENNTmFtZWROb2RlTWFwIGVudGl0aWVzKQotICB7Ci0gICAgaWYgKChlbnRpdGllcyAhPSBudWxsKSAmJiAoZW50aXRpZXMuZ2V0TGVuZ3RoKCk+MCkpCi0gICAgewotICAgICAgc2IuYXBwZW5kKGluZGVudCArICI8RW50aXRpZXM+XG4iKTsgLy8kTk9OLU5MUy0xJAotICAgICAgaW5jcmVtZW50SW5kZW50KCk7Ci0KLSAgICAgIGZvciAoSXRlcmF0b3IgaSA9IGVudGl0aWVzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICAgIHsKLSAgICAgICAgQ01FbnRpdHlEZWNsYXJhdGlvbiBlbnRpdHkgPSAoQ01FbnRpdHlEZWNsYXJhdGlvbilpLm5leHQoKTsKLSAgICAgICAgc2IuYXBwZW5kKGluZGVudCArICI8RW50aXR5Iik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgcHJpbnRBdHRyaWJ1dGVzKHNiLCBlbnRpdHkpOwotICAgICAgICBzYi5hcHBlbmQoIi8+XG4iKTsgLy8kTk9OLU5MUy0xJAotICAgICAgfQotCi0gICAgICBkZWNyZW1lbnRJbmRlbnQoKTsKLSAgICAgIHNiLmFwcGVuZChpbmRlbnQgKyAiPC9FbnRpdGllcz5cbiIpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgcHJpbnRQcm9wZXJ0aWVzKFN0cmluZ0J1ZmZlciBzYiwgQ01Ob2RlIGNtbm9kZSkKLSAgewotICAgIExpc3QgcHJvcGVydGllcyA9IGdldFByb3BlcnRpZXMoY21ub2RlKTsKLSAgICBzYi5hcHBlbmQoaW5kZW50ICsgIjxQcm9wZXJ0aWVzPlxuIik7IC8vJE5PTi1OTFMtMSQKLSAgICBpbmNyZW1lbnRJbmRlbnQoKTsKLQotICAgIGZvciAoaW50IGk9MDsgaTxwcm9wZXJ0aWVzLnNpemUoKTsgaSsrKQotICAgIHsKLSAgICAgIFN0cmluZyBwcm9wZXJ0eSA9IChTdHJpbmcpcHJvcGVydGllcy5nZXQoaSk7Ci0gICAgICBzYi5hcHBlbmQoaW5kZW50ICsgIjxQcm9wZXJ0eSBuYW1lPVwiIiArIHByb3BlcnR5ICsgIlwiIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCi0gICAgICBpZiAoY21ub2RlLnN1cHBvcnRzKHByb3BlcnR5KSkKLSAgICAgIHsKLSAgICAgICAgc2IuYXBwZW5kKCIgc3VwcG9ydHM9XCJ0cnVlXCIiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBzYi5hcHBlbmQoIiBzdXBwb3J0cz1cImZhbHNlXCIiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgfQotICAgICAgT2JqZWN0IHZhbHVlID0gY21ub2RlLmdldFByb3BlcnR5KHByb3BlcnR5KTsKLSAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZykgc2IuYXBwZW5kKCIgdmFsdWU9XCIiICsgKFN0cmluZyl2YWx1ZSArICJcIiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgIGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgQm9vbGVhbikgc2IuYXBwZW5kKCIgdmFsdWU9XCIiICsgdmFsdWUgKyAiXCIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgICBlbHNlIGlmICh2YWx1ZSAhPSBudWxsKSBzYi5hcHBlbmQoIiB2YWx1ZT1cIiIgKyB2YWx1ZS5nZXRDbGFzcygpICsgIlwiIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICAgZWxzZSBzYi5hcHBlbmQoIiB2YWx1ZT1cIm51bGxcIiIpOyAvLyROT04tTkxTLTEkCi0gICAgICBzYi5hcHBlbmQoIi8+XG4iKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLQotICAgIGRlY3JlbWVudEluZGVudCgpOwotICAgIHNiLmFwcGVuZChpbmRlbnQgKyAiPC9Qcm9wZXJ0aWVzPlxuIik7IC8vJE5PTi1OTFMtMSQKLSAgfQotCi0gIHB1YmxpYyBMaXN0IGdldFByb3BlcnRpZXMoQ01Ob2RlIGNtbm9kZSkKLSAgewotICAgIExpc3QgcHJvcGVydGllcyA9IG5ldyBWZWN0b3IoKTsKLSAgICAgIAotICAgIGlmIChjbW5vZGUgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBwcm9wZXJ0aWVzLmFkZCgiQ01Eb2N1bWVudCIpOyAvLyROT04tTkxTLTEkCi0gICAgICBwcm9wZXJ0aWVzLmFkZCgiZG9jdW1lbnRhdGlvbiIpOyAvLyROT04tTkxTLTEkCi0gICAgICBwcm9wZXJ0aWVzLmFkZCgiaHR0cDovL29yZy5lY2xpcHNlLndzdC9jbS9wcm9wZXJ0aWVzL3VzZXNMb2NhbEVsZW1lbnREZWNsYXJhdGlvbnMiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgcHJvcGVydGllcy5hZGQoImh0dHA6Ly9vcmcuZWNsaXBzZS53c3QvY20vcHJvcGVydGllcy9pc05hbWVTcGFjZUF3YXJlIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIHByb3BlcnRpZXMuYWRkKCJodHRwOi8vb3JnLmVjbGlwc2Uud3N0L2NtL3Byb3BlcnRpZXMvbnNQcmVmaXhRdWFsaWZpY2F0aW9uIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIHByb3BlcnRpZXMuYWRkKCJodHRwOi8vb3JnLmVjbGlwc2Uud3N0L2NtL3Byb3BlcnRpZXMvbmlsbGFibGUiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgcHJvcGVydGllcy5hZGQoImh0dHA6Ly9vcmcuZWNsaXBzZS53c3QvY20vcHJvcGVydGllcy9tb2ZOb3RpZmllciIpOyAvLyROT04tTkxTLTEkCi0gICAgICBwcm9wZXJ0aWVzLmFkZCgic3BlYyIpOyAvLyROT04tTkxTLTEkCi0KLSAgICAgIGlmIChjbW5vZGUgaW5zdGFuY2VvZiBDTUVsZW1lbnREZWNsYXJhdGlvbikKLSAgICAgIHsKLSAgICAgICAgcHJvcGVydGllcy5hZGQoImh0dHA6Ly9vcmcuZWNsaXBzZS53c3QvY20vcHJvcGVydGllcy9kZWZpbml0aW9uSW5mbyIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgIHByb3BlcnRpZXMuYWRkKCJodHRwOi8vb3JnLmVjbGlwc2Uud3N0L2NtL3Byb3BlcnRpZXMvZGVmaW5pdGlvbiIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgIHByb3BlcnRpZXMuYWRkKCJYU0lUeXBlcyIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgIHByb3BlcnRpZXMuYWRkKCJEZXJpdmVkRWxlbWVudERlY2xhcmF0aW9uIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgLy8gcHJvcGVydGllcy5hZGQoIlN1YnN0aXR1dGlvbkdyb3VwIik7IEN1cnJyZW50bHkgYnJva2VuIGZvciBuZXh0ZWQgeHNkIGZpbGVzCi0gICAgICAgIHByb3BlcnRpZXMuYWRkKCJBYnN0cmFjdCIpOyAvLyROT04tTkxTLTEkCi0gICAgICB9Ci0gICAgICBpZiAoY21ub2RlIGluc3RhbmNlb2YgQ01Eb2N1bWVudCkKLSAgICAgIHsKLSAgICAgICAgcHJvcGVydGllcy5hZGQoImh0dHA6Ly9vcmcuZWNsaXBzZS53c3QvY20vcHJvcGVydGllcy90YXJnZXROYW1lc3BhY2VVUkkiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICBwcm9wZXJ0aWVzLmFkZCgiaHR0cDovL29yZy5lY2xpcHNlLndzdC9jbS9wcm9wZXJ0aWVzL2ltcG9ydGVkTmFtZXNwYWNlSW5mbyIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgIHByb3BlcnRpZXMuYWRkKCJodHRwOi8vb3JnLmVjbGlwc2Uud3N0L2NtL3Byb3BlcnRpZXMvbmFtZXNwYWNlSW5mbyIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgIHByb3BlcnRpZXMuYWRkKCJodHRwOi8vb3JnLmVjbGlwc2Uud3N0L2NtL3Byb3BlcnRpZXMvZWxlbWVudEZvcm1EZWZhdWx0Iik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgcHJvcGVydGllcy5hZGQoImFubm90YXRpb25NYXAiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcHJvcGVydGllczsKLSAgfQotICAKLX0KLQotIApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvY29udGVudG1vZGVsL0NNVXRpbGl0eS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvY29udGVudG1vZGVsL0NNVXRpbGl0eS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OGU2NjlkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2NvbnRlbnRtb2RlbC9DTVV0aWxpdHkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmNvbnRlbnRtb2RlbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01Db250ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01FbGVtZW50RGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTUdyb3VwOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwudXRpbC5DTVZpc2l0b3I7Ci0KLQotcHVibGljIGNsYXNzIENNVXRpbGl0eQoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAvKioKLSAgICogcmV0dXJuIHRydWUgaWYgdGhlIGNoaWxkIG9yIGFueSBvZiBpdHMgYW5jZXN0b3IgZ3JvdXAgbm9kZXMgYXJlIHJlcGVhdGFibGUKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc05vZGVPckFuY2VzdG9yR3JvdXBSZXBlYXRhYmxlKENNQ29udGVudCBjb250ZW50LCBDTU5vZGUgY2hpbGQpCi0gIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgLy8gc2luY2Ugd2UgY2FuJ3Qgd2FsayB1cCB0aGUgQ01Ob2RlIHRyZWUgKHdoeSB5b3UgYXNrPyAuLi4gaXRzIGEgbG9uZyBzdG9yeSkKLSAgICAvLyB3ZSB3YWxrIGRvd24gdGhlIHRyZWUgdG8gY29uc2lkZXIgdGhlIGNoaWxkJ3MgcGFyZW50IG5vZGUncwotICAgIC8vCi0gICAgYm9vbGVhbiByZXN1bHQgPSBpc1JlcGVhdGFibGUoY2hpbGQpOwotICAgIGlmICghcmVzdWx0KQotICAgIHsKLSAgICAgIENhblJlcGVhdFZpc2l0b3IgdmlzaXRvciA9IG5ldyBDYW5SZXBlYXRWaXNpdG9yKGNvbnRlbnQsIGNoaWxkKTsKLSAgICAgIHZpc2l0b3IudmlzaXRDTU5vZGUoY29udGVudCk7Ci0gICAgICByZXN1bHQgPSB2aXNpdG9yLmdldFJlc3VsdCgpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgLyoqCi0gICAqIHJldHVybiB0cnVlIGlmIHRoZSBjaGlsZCBpcyByZXBlYXRhYmxlCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNOb2RlUmVwZWF0YWJsZShDTUNvbnRlbnQgY29udGVudCwgQ01Ob2RlIGNoaWxkKQotICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgIC8vIHNpbmNlIHdlIGNhbid0IHdhbGsgdXAgdGhlIENNTm9kZSB0cmVlICh3aHkgeW91IGFzaz8gLi4uIGl0cyBhIGxvbmcgc3RvcnkpCi0gICAgLy8gd2Ugd2FsayBkb3duIHRoZSB0cmVlIHRvIGNvbnNpZGVyIHRoZSBjaGlsZCdzIHBhcmVudCBub2RlJ3MKLSAgICAvLwotICAgIGJvb2xlYW4gcmVzdWx0ID0gaXNSZXBlYXRhYmxlKGNoaWxkKTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICB7Ci0gICAgICBJc1JlcGVhdGFibGVWaXNpdG9yIHZpc2l0b3IgPSBuZXcgSXNSZXBlYXRhYmxlVmlzaXRvcihjb250ZW50LCBjaGlsZCk7Ci0gICAgICB2aXNpdG9yLnZpc2l0Q01Ob2RlKGNvbnRlbnQpOwotICAgICAgcmVzdWx0ID0gdmlzaXRvci5nZXRSZXN1bHQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1JlcGVhdGFibGUoQ01Ob2RlIGNoaWxkKQotICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICBib29sZWFuIHJlc3VsdCA9IGZhbHNlOwotICAgIGlmIChjaGlsZCBpbnN0YW5jZW9mIENNQ29udGVudCkKLSAgICB7Ci0gICAgICBDTUNvbnRlbnQgY29udGVudCA9IChDTUNvbnRlbnQpY2hpbGQ7Ci0gICAgICByZXN1bHQgPSBjb250ZW50LmdldE1heE9jY3VyKCkgPiAxIHx8IGNvbnRlbnQuZ2V0TWF4T2NjdXIoKSA9PSAtMTsKLSAgICB9IAotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLSAgICAKLSAgIAotICBwcm90ZWN0ZWQgc3RhdGljIGNsYXNzIENhblJlcGVhdFZpc2l0b3IgZXh0ZW5kcyBDTVZpc2l0b3IKLSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgIHB1YmxpYyBib29sZWFuIHJlc3VsdDsKLSAgICBwcm90ZWN0ZWQgYm9vbGVhbiBpc1dpdGhpblJlcGVhdGFibGVHcm91cDsKLQotICAgIHByb3RlY3RlZCBDTU5vZGUgcm9vdDsKLSAgICBwcm90ZWN0ZWQgQ01Ob2RlIHRhcmdldDsKLQotICAgIHB1YmxpYyBDYW5SZXBlYXRWaXNpdG9yKENNTm9kZSByb290LCBDTU5vZGUgdGFyZ2V0KQotICAgIHsKLSAgICAgIHRoaXMucm9vdCA9IHJvb3Q7Ci0gICAgICB0aGlzLnRhcmdldCA9IHRhcmdldDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCB2aXNpdENNR3JvdXAoQ01Hcm91cCBncm91cCkKLSAgICB7ICAgICAgICAgCi0gICAgICBib29sZWFuIG9sZElzV2l0aGluUmVwZWF0YWJsZUdyb3VwID0gaXNXaXRoaW5SZXBlYXRhYmxlR3JvdXA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICBpc1dpdGhpblJlcGVhdGFibGVHcm91cCA9IGlzUmVwZWF0YWJsZShncm91cCk7Ci0gICAgICAKLSAgICAgIHN1cGVyLnZpc2l0Q01Hcm91cChncm91cCk7Ci0KLSAgICAgIGlzV2l0aGluUmVwZWF0YWJsZUdyb3VwID0gb2xkSXNXaXRoaW5SZXBlYXRhYmxlR3JvdXA7Ci0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgIAotCi0gICAgcHVibGljIHZvaWQgdmlzaXRDTUVsZW1lbnREZWNsYXJhdGlvbihDTUVsZW1lbnREZWNsYXJhdGlvbiBjbWVsZW1lbnQpCi0gICAgewotICAgICAgaWYgKGNtZWxlbWVudCA9PSB0YXJnZXQpCi0gICAgICB7Ci0gICAgICAgIHJlc3VsdCA9IGlzV2l0aGluUmVwZWF0YWJsZUdyb3VwOwotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGdldFJlc3VsdCgpCi0gICAgewotICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9ICAKLSAgfQotCi0KLSAgcHJvdGVjdGVkIHN0YXRpYyBjbGFzcyBJc1JlcGVhdGFibGVWaXNpdG9yIGV4dGVuZHMgQ01WaXNpdG9yCi0gIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICBwdWJsaWMgYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLSAgICBwcm90ZWN0ZWQgQ01Hcm91cCBjdXJyZW50R3JvdXA7Ci0KLSAgICBwcm90ZWN0ZWQgQ01Ob2RlIHJvb3Q7Ci0gICAgcHJvdGVjdGVkIENNTm9kZSB0YXJnZXQ7Ci0KLSAgICBwdWJsaWMgSXNSZXBlYXRhYmxlVmlzaXRvcihDTU5vZGUgcm9vdCwgQ01Ob2RlIHRhcmdldCkKLSAgICB7Ci0gICAgICB0aGlzLnJvb3QgPSByb290OwotICAgICAgdGhpcy50YXJnZXQgPSB0YXJnZXQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgdmlzaXRDTUdyb3VwKENNR3JvdXAgZ3JvdXApCi0gICAgeyAgICAgICAgIAotICAgICAgQ01Hcm91cCBwcmV2aW91c0dyb3VwID0gY3VycmVudEdyb3VwOwotICAgICAgY3VycmVudEdyb3VwID0gZ3JvdXA7Ci0gICAgICBzdXBlci52aXNpdENNR3JvdXAoZ3JvdXApOwotICAgICAgY3VycmVudEdyb3VwID0gcHJldmlvdXNHcm91cDsKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0KLSAgICBwdWJsaWMgdm9pZCB2aXNpdENNRWxlbWVudERlY2xhcmF0aW9uKENNRWxlbWVudERlY2xhcmF0aW9uIGNtZWxlbWVudCkKLSAgICB7Ci0gICAgICBpZiAoY21lbGVtZW50ID09IHRhcmdldCkKLSAgICAgIHsKLSAgICAgICAgaWYgKGN1cnJlbnRHcm91cCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgcmVzdWx0ID0gKChjdXJyZW50R3JvdXAuZ2V0T3BlcmF0b3IoKSA9PSBDTUdyb3VwLkNIT0lDRSkgJiYKLSAgICAgICAgICAgICAgICAgICAgKGlzUmVwZWF0YWJsZShjdXJyZW50R3JvdXApKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBnZXRSZXN1bHQoKQotICAgIHsKLSAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfSAgCi0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2NvbnRlbnRtb2RlbC9DTVZhbGlkYXRvclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2NvbnRlbnRtb2RlbC9DTVZhbGlkYXRvclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjUyY2MxOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9jb250ZW50bW9kZWwvQ01WYWxpZGF0b3JUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5jb250ZW50bW9kZWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTUVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNTmFtZWROb2RlTWFwOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ29udGVudE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLmludGVybmFsLnV0aWwuQ01WYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5pbnRlcm5hbC51dGlsLkNNVmFsaWRhdG9yLkVsZW1lbnRQYXRoUmVjb3JkaW5nUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuaW50ZXJuYWwudXRpbC5DTVZhbGlkYXRvci5TdHJpbmdFbGVtZW50Q29udGVudENvbXBhcmF0b3I7Ci0KLXB1YmxpYyBjbGFzcyBDTVZhbGlkYXRvclRlc3QKLXsKLSAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ1tdKQotICB7Ci0gICAgaWYgKGFyZy5sZW5ndGggPiAxKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICAvL0NNRG9jdW1lbnRGYWN0b3J5UmVnaXN0cnkuZ2V0SW5zdGFuY2UoKS5yZWdpc3RlckNNRG9jdW1lbnRCdWlsZGVyV2l0aENsYXNzTmFtZSgib3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5tb2ZpbXBsLkNNRG9jdW1lbnRCdWlsZGVySW1wbCIpOwotCi0gICAgICAgIFN0cmluZyBncmFtbWFyRmlsZU5hbWUgPSBhcmdbMF07Ci0gICAgICAgIFN0cmluZyBlbGVtZW50TmFtZSA9IGFyZ1sxXTsKLQotICAgICAgICBDTURvY3VtZW50IGNtRG9jdW1lbnQgPSBDb250ZW50TW9kZWxNYW5hZ2VyLmdldEluc3RhbmNlKCkuY3JlYXRlQ01Eb2N1bWVudChncmFtbWFyRmlsZU5hbWUsIG51bGwpOwotICAgICAgICAKLSAgICAgICAgQ01OYW1lZE5vZGVNYXAgZWxlbWVudE1hcCA9IGNtRG9jdW1lbnQuZ2V0RWxlbWVudHMoKTsKLSAgICAgICAgQ01FbGVtZW50RGVjbGFyYXRpb24gZWxlbWVudCA9IChDTUVsZW1lbnREZWNsYXJhdGlvbillbGVtZW50TWFwLmdldE5hbWVkSXRlbShlbGVtZW50TmFtZSk7Ci0gICAgICAgIGlmIChlbGVtZW50ICE9IG51bGwpCi0gICAgICAgIHsgLyoKLSAgICAgICAgICBwcmludGxuKCJmb3VuZCBlbGVtZW50IFsiICsgZWxlbWVudE5hbWUgKyAiXSAgY29udGVudFR5cGUgPSAiICsgZWxlbWVudC5nZXRDb250ZW50VHlwZSgpKTsKLSAgICAgICAgICBHcmFwaE5vZGUgZ3JhcGhOb2RlID0gY3JlYXRlR3JhcGgoZWxlbWVudCk7Ci0gICAgICAgICAgcHJpbnRHcmFwaChncmFwaE5vZGUpOwotICAgICAgICAgICovCi0gICAgICAgICAgcHJpbnRsbigiLS0tLS0tLS0tLS0tLS0gYmVnaW4gdmFsaWRhdGUgLS0tLS0tLS0tLS0tLS0tIik7IC8vJE5PTi1OTFMtMSQKLQotICAgICAgICAgIFN0cmluZ0VsZW1lbnRDb250ZW50Q29tcGFyYXRvciBjb21wYXJhdG9yID0gbmV3IFN0cmluZ0VsZW1lbnRDb250ZW50Q29tcGFyYXRvcigpOwotICAgICAgICAgIENNVmFsaWRhdG9yIHZhbGlkYXRvciA9IG5ldyBDTVZhbGlkYXRvcigpOwotICAgICAgICAgIEVsZW1lbnRQYXRoUmVjb3JkaW5nUmVzdWx0IHJlc3VsdCA9IG5ldyBFbGVtZW50UGF0aFJlY29yZGluZ1Jlc3VsdCgpOwotICAgICAgICAgIHZhbGlkYXRvci5nZXRPcmlnaW5BcnJheShlbGVtZW50LCBDTVZhbGlkYXRvci5jcmVhdGVTdHJpbmdMaXN0KGFyZywgMiksIGNvbXBhcmF0b3IsIHJlc3VsdCk7Ci0gICAgICAgICAgaWYgKHJlc3VsdC5pc1ZhbGlkKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIENNTm9kZVtdIG5vZGVNYXBwaW5nID0gcmVzdWx0LmdldE9yaWdpbkFycmF5KCk7Ci0gICAgICAgICAgICBwcmludGxuKCJWYWxpZGF0aW9uIFN1Y2Nlc3MhIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgIHByaW50KCIgICIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5vZGVNYXBwaW5nLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgbmFtZSA9IG5vZGVNYXBwaW5nW2ldICE9IG51bGwgPyBub2RlTWFwcGluZ1tpXS5nZXROb2RlTmFtZSgpIDogIm51bGwiOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICAgIHByaW50KCJbIiArIG5hbWUgKyAiXSIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHByaW50bG4oIiIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBwcmludGxuKCJWYWxpZGF0aW9uIEZhaWxlZCEgIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgIGlmIChyZXN1bHQuZXJyb3JNZXNzYWdlICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHByaW50bG4oIiAgIiArIHJlc3VsdC5lcnJvck1lc3NhZ2UpOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIHByaW50bG4oIi0tLS0tLS0tLS0tLS0tIGVuZCB2YWxpZGF0ZSAtLS0tLS0tLS0tLS0tLS0iKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHByaW50bG4oImVsZW1lbnQgWyIgKyBlbGVtZW50TmFtZSArICJdIGNhbiBub3QgYmUgZm91bmQiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgcHJpbnRsbigiQ01WYWxpZGF0b3IgZXJyb3IiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcHJpbnRsbigiMiBhcmdzIHJlcXVpcmVkLi4uIG9ubHkgIiArIGFyZy5sZW5ndGggKyAiIHByb3ZpZGVkIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICAgcHJpbnRsbigidXNhZ2UgamF2YSBvcmcuZWNsaXBzZS53c3QubmV3eG1sLnV0aWwuWE1MVXRpbCBncmFtbWFyRmlsZU5hbWUgcm9vdEVsZW1lbnROYW1lIHBhdHRlcm4iKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyB2b2lkIHByaW50KFN0cmluZyBzdHJpbmcpCi0gIHsgIAotICB9Ci0gICAgCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBwcmludGxuKFN0cmluZyBzdHJpbmcpCi0gIHsgIAotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIHZvaWQgcHJpbnRsbkluZGVudGVkKGludCBpbmRlbnQsIFN0cmluZyBzdHJpbmcpCi0gIHsKLSAgfSAgICAKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2NvbnRlbnRtb2RlbC9DTVZpc2l0b3JUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9jb250ZW50bW9kZWwvQ01WaXNpdG9yVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzliOTkwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2NvbnRlbnRtb2RlbC9DTVZpc2l0b3JUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5jb250ZW50bW9kZWw7Ci0KLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXI7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGxhdGZvcm1SdW5uYWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLm1vZGVscXVlcnkuTW9kZWxRdWVyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLm1vZGVscXVlcnlpbXBsLk1vZGVsUXVlcnlJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwubW9kZWxxdWVyeWltcGwuWE1MQXNzb2NpYXRpb25Qcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLnV0aWwuQ01Eb2N1bWVudENhY2hlOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5hbWVkTm9kZU1hcDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotCi0KLXB1YmxpYyBjbGFzcyBDTVZpc2l0b3JUZXN0IGltcGxlbWVudHMgSVBsYXRmb3JtUnVubmFibGUgewotCXB1YmxpYyBPYmplY3QgcnVuKE9iamVjdCBhKSB7Ci0JCVN0cmluZyBhcmdzW10gPSAoU3RyaW5nW10pIGE7Ci0JCWlmIChhcmdzLmxlbmd0aCA+IDApIHsKLQkJCXRlc3QoYXJnc1swXSk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oInhtbCBmaWxlIG5hbWUgYXJndW1lbnQgcmVxdWlyZWQiKTsgLy8kTk9OLU5MUy0xJAotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHRlc3QoU3RyaW5nIGZpbGVOYW1lKSB7Ci0KLQkJQ2xhc3NMb2FkZXIgb3JpZ2luYWxDbGFzc0xvYWRlciA9IFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0Q29udGV4dENsYXNzTG9hZGVyKCk7Ci0JCXRyeSB7Ci0JCQlYTUxBc3NvY2lhdGlvblByb3ZpZGVyIHByb3ZpZGVyID0gbmV3IFhNTEFzc29jaWF0aW9uUHJvdmlkZXIobmV3IENNRG9jdW1lbnRDYWNoZSgpKSB7Ci0JCQl9OwotCi0JCQlNb2RlbFF1ZXJ5IG1xID0gbmV3IE1vZGVsUXVlcnlJbXBsKHByb3ZpZGVyKTsKLQotCQkJVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zZXRDb250ZXh0Q2xhc3NMb2FkZXIoQ01WaXNpdG9yVGVzdC5jbGFzcy5nZXRDbGFzc0xvYWRlcigpKTsKLQkJCURvY3VtZW50QnVpbGRlciBidWlsZGVyID0gRG9jdW1lbnRCdWlsZGVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpLm5ld0RvY3VtZW50QnVpbGRlcigpOwotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBidWlsZGVyLnBhcnNlKGZpbGVOYW1lKTsKLQotCQkJLyoKLQkJCSAqIENsYXNzTG9hZGVyIHByZXZDbGFzc0xvYWRlciA9Ci0JCQkgKiBUaHJlYWQuY3VycmVudFRocmVhZCgpLmdldENvbnRleHRDbGFzc0xvYWRlcigpOwotCQkJICogVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zZXRDb250ZXh0Q2xhc3NMb2FkZXIoZ2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpKTsKLQkJCSAqIENsYXNzIHRoZUNsYXNzID0KLQkJCSAqIENsYXNzLmZvck5hbWUoIm9yZy5hcGFjaGUueGVyY2VzLnBhcnNlcnMuRE9NUGFyc2VyIik7IERPTVBhcnNlcgotCQkJICogcGFyc2VyID0gKERPTVBhcnNlcil0aGVDbGFzcy5uZXdJbnN0YW5jZSgpOwotCQkJICogVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zZXRDb250ZXh0Q2xhc3NMb2FkZXIocHJldkNsYXNzTG9hZGVyKTsKLQkJCSAqIHBhcnNlci5wYXJzZShuZXcgSW5wdXRTb3VyY2UoZmlsZU5hbWUpKTsgRG9jdW1lbnQgZG9jdW1lbnQgPQotCQkJICogcGFyc2VyLmdldERvY3VtZW50KCk7Ci0JCQkgKi8KLQkJCXZpc2l0Tm9kZShkb2N1bWVudCwgbXEsIDApOwotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCVRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2V0Q29udGV4dENsYXNzTG9hZGVyKG9yaWdpbmFsQ2xhc3NMb2FkZXIpOwotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdmlzaXROb2RlKE5vZGUgbm9kZSwgTW9kZWxRdWVyeSBtcSwgaW50IGluZGVudCkgewotCQlDTU5vZGUgY21ub2RlID0gbXEuZ2V0Q01Ob2RlKG5vZGUpOwotCQlwcmludGxuSW5kZW50ZWQoaW5kZW50LCAibm9kZSA6IiArIG5vZGUuZ2V0Tm9kZU5hbWUoKSArICIgY21ub2RlIDogIiArIChjbW5vZGUgIT0gbnVsbCA/IGNtbm9kZS5nZXROb2RlTmFtZSgpIDogIm51bGwiKSk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCi0JCU5hbWVkTm9kZU1hcCBtYXAgPSBub2RlLmdldEF0dHJpYnV0ZXMoKTsKLQkJaWYgKG1hcCAhPSBudWxsKSB7Ci0JCQlpbmRlbnQgKz0gMjsKLQkJCWludCBtYXBMZW5ndGggPSBtYXAuZ2V0TGVuZ3RoKCk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IG1hcExlbmd0aDsgaSsrKSB7Ci0JCQkJdmlzaXROb2RlKG1hcC5pdGVtKGkpLCBtcSwgaW5kZW50KTsKLQkJCX0KLQkJCWluZGVudCAtPSAyOwotCQl9Ci0JCWluZGVudCArPSA0OwotCQlOb2RlTGlzdCBsaXN0ID0gbm9kZS5nZXRDaGlsZE5vZGVzKCk7Ci0JCWludCBsaXN0TGVuZ3RoID0gbGlzdC5nZXRMZW5ndGgoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBsaXN0TGVuZ3RoOyBpKyspIHsKLQkJCXZpc2l0Tm9kZShsaXN0Lml0ZW0oaSksIG1xLCBpbmRlbnQpOwotCQl9Ci0JCWluZGVudCAtPSA0OwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBwcmludGxuSW5kZW50ZWQoaW50IGluZGVudCwgU3RyaW5nIHN0cmluZykgewotCQlmb3IgKGludCBpID0gMDsgaSA8IGluZGVudDsgaSsrKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50KCIgIik7IC8vJE5PTi1OTFMtMSQKLQkJfQotCQlTeXN0ZW0ub3V0LnByaW50bG4oc3RyaW5nKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9jb250ZW50bW9kZWwvVGVzdEF0dHJpYnV0ZXNPcmRlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvY29udGVudG1vZGVsL1Rlc3RBdHRyaWJ1dGVzT3JkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE2OThkZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9jb250ZW50bW9kZWwvVGVzdEF0dHJpYnV0ZXNPcmRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTYwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBTVEFSIC0gQWRkZWQgY29udGVudCBBc3Npc3QgY2hlY2sgaW4gdGVzdElnbm9yZXNBdHRyaWJ1dGVzT3JkZXIKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuY29udGVudG1vZGVsOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlUm9vdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kuc2VydmljZS5kYXRhbG9jYXRpb24uTG9jYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTUVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLm1vZGVscXVlcnkuTW9kZWxRdWVyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwubW9kZWxxdWVyeS5Nb2RlbFF1ZXJ5VXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy51dGlsLkZpbGVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy51dGlsLlByb2plY3RVbnppcFV0aWxpdHk7Ci0KLS8qKgotICogVGVzdHMgdG8gZW5zdXJlIHRoYXQgdGhlIGF0dHJpYnV0ZXMgb3JkZXIgaXMgbm90IGltcG9ydGFudCB3aGVuIHRyeWluZyB0bwotICogZGV0ZXJtaW5lIHRoZSBjb250ZW50IG1vZGVsLgotICogCi0gKiBTZWUgaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTE5ODgwNwotICovCi1wdWJsaWMgY2xhc3MgVGVzdEF0dHJpYnV0ZXNPcmRlciBleHRlbmRzIFRlc3RDYXNlCi17Ci0gIHByaXZhdGUgYm9vbGVhbiBpc1NldHVwID0gZmFsc2U7Ci0KLSAgLyoqCi0gICAqIFRoZSB0YXJnZXQgcHJvamVjdCBuYW1lLgotICAgKi8KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZlByb2plY3ROYW1lID0gIkF0dHJpYnV0ZXNPcmRlciI7IC8vJE5PTi1OTFMtTiQKLQotICAvKioKLSAgICogVGhlIG5hbWUgb2YgdGhlIHppcCBmaWxlIGNvbnRhaW5pbmcgdGhlIHByb2plY3QgdG8gaW1wb3J0LgotICAgKi8KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZlppcEZpbGVOYW1lID0gImF0dHJpYnV0ZXNvcmRlcnRlc3RmaWxlcy56aXAiOyAvLyROT04tTkxTLTEkCi0KLSAgcHVibGljIFRlc3RBdHRyaWJ1dGVzT3JkZXIoKQotICB7Ci0gICAgc3VwZXIoIlRlc3RBdHRyaWJ1dGVzT3JkZXIiKTsKLSAgfQotCi0gIC8qKgotICAgKiBUZXN0IHVzZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGF0dHJpYnV0ZXMgb3JkZXIgaXMgbm90IGltcG9ydGFudCB3aGVuCi0gICAqIGRldGVybWluaW5nIHRoZSBjb250ZW50IG1vZGVsIGZvciBhIGdpdmVuIFhNTCBkb2N1bWVudC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJZ25vcmVzQXR0cmlidXRlc09yZGVyKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uCi0gIHsKLSAgICAvLyBUZXN0cyB0aGUgc2NlbmFyaW8gdGhhdCB1c2VkIHRvIHN1Y2NlZWQsIHdoZXJlIHRoZSBuYW1lc3BhY2UgcHJlZml4IGlzCi0gICAgLy8gZGVjbGFyZWQgYmVmb3JlIHRoZSBzY2hlbWFMb2NhdGlvbi4KLQotICAgIElGaWxlIGZpbGUgPSBnZXRGaWxlKCJQcmV2aW91c2x5U3VjY2VlZGluZ1Rlc3QueG1sIik7IC8vJE5PTi1OTFMtMSQKLSAgICBlbnN1cmVEb2N1bWVudEhhc0dyYW1tYXIoZmlsZSk7Ci0KLSAgICAvLyBUZXN0cyB0aGUgZmFpbGluZyBzY2VuYXJpbywgd2hlcmUgdGhlIHNjaGVtYUxvY2F0aW9uIGNvbWVzIGZpcnN0LgotCi0gICAgZmlsZSA9IGdldEZpbGUoIlByZXZpb3VzbHlGYWlsaW5nVGVzdC54bWwiKTsgLy8kTk9OLU5MUy0xJAotICAgIGVuc3VyZURvY3VtZW50SGFzR3JhbW1hcihmaWxlKTsKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gICAgc3VwZXIuc2V0VXAoKTsKLQotICAgIGlmICghdGhpcy5pc1NldHVwKQotICAgIHsKLSAgICAgIGRvU2V0dXAoKTsKLSAgICAgIHRoaXMuaXNTZXR1cCA9IHRydWU7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFNldHMgdXAgdGhlIHJlcXVpcmVkIHByb2plY3QgaW4gdGhlIHdvcmtzcGFjZS4KLSAgICogCi0gICAqIEB0aHJvd3MgRXhjZXB0aW9uCi0gICAqLwotICBwcml2YXRlIHZvaWQgZG9TZXR1cCgpIHRocm93cyBFeGNlcHRpb24KLSAgewotICAgIExvY2F0aW9uIHBsYXRmb3JtTG9jYXRpb24gPSBQbGF0Zm9ybS5nZXRJbnN0YW5jZUxvY2F0aW9uKCk7Ci0KLSAgICBQcm9qZWN0VW56aXBVdGlsaXR5IHVuemlwVXRpbCA9IG5ldyBQcm9qZWN0VW56aXBVdGlsaXR5KCk7Ci0gICAgRmlsZSB6aXBGaWxlID0gRmlsZVV0aWwubWFrZUZpbGVGb3IoUHJvamVjdFVuemlwVXRpbGl0eS5QUk9KRUNUX1pJUFNfRk9MREVSLCBmWmlwRmlsZU5hbWUsIFByb2plY3RVbnppcFV0aWxpdHkuUFJPSkVDVF9aSVBTX0ZPTERFUik7Ci0gICAgVVJMIHBsYXRmb3JtTG9jYXRpb25VUkwgPSBwbGF0Zm9ybUxvY2F0aW9uLmdldFVSTCgpOwotICAgIFN0cmluZyBmaWxlID0gcGxhdGZvcm1Mb2NhdGlvblVSTC5nZXRGaWxlKCk7Ci0gICAgdW56aXBVdGlsLnVuemlwQW5kSW1wb3J0KHppcEZpbGUsIGZpbGUpOwotICAgIHVuemlwVXRpbC5pbml0SmF2YVByb2plY3QoZlByb2plY3ROYW1lKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXVzYWJsZSB0ZXN0IHRvIG1ha2Ugc3VyZSB0aGUgWE1MIG1vZGVsIGZvciB0aGUgZ2l2ZW4gZmlsZSBoYXMgYSBncmFtbWFyLgotICAgKiAKLSAgICogQHBhcmFtIGZpbGUKLSAgICogICAgICAgICAgdGhlIGZpbGUgY29udGFpbmluZyB0aGUgWE1MIGRvY3VtZW50LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIGVuc3VyZURvY3VtZW50SGFzR3JhbW1hcihJRmlsZSBmaWxlKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24KLSAgewotICAgIElTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBudWxsOwotICAgIHRyeQotICAgIHsKLSAgICAgIElNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLSAgICAgIG1vZGVsID0gbW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yUmVhZChmaWxlKTsKLSAgICAgIGFzc2VydE5vdE51bGwoImZhaWx1cmUgbG9hZGluZyBtb2RlbCIsIG1vZGVsKTsgLy8kTk9OLU5MUy0xJAotICAgICAgSURPTU1vZGVsIGRvbU1vZGVsID0gKElET01Nb2RlbCkgbW9kZWw7Ci0gICAgICBJRE9NRG9jdW1lbnQgZG9jdW1lbnQgPSBkb21Nb2RlbC5nZXREb2N1bWVudCgpOwotICAgICAgYXNzZXJ0Tm90TnVsbCgiZmFpbHVyZSBnZXR0aW5nIGRvY3VtZW50IiwgZG9jdW1lbnQpOyAvLyROT04tTkxTLTEkCi0gICAgICBNb2RlbFF1ZXJ5IG1vZGVsUXVlcnkgPSBNb2RlbFF1ZXJ5VXRpbC5nZXRNb2RlbFF1ZXJ5KGRvY3VtZW50KTsKLSAgICAgIGFzc2VydE5vdE51bGwoIk1vZGVsUXVlcnkgaXMgbWlzc2luZyIsIG1vZGVsUXVlcnkpOyAvLyROT04tTkxTLTEkCi0gICAgICBJRE9NRWxlbWVudCBkb2N1bWVudEVsZW1lbnQgPSAoSURPTUVsZW1lbnQpIGRvY3VtZW50LmdldERvY3VtZW50RWxlbWVudCgpOwotICAgICAgYXNzZXJ0Tm90TnVsbCgibWlzc2luZyBkb2N1bWVudCBlbGVtZW50IiwgZG9jdW1lbnRFbGVtZW50KTsgLy8kTk9OLU5MUy0xJAotICAgICAgQ01FbGVtZW50RGVjbGFyYXRpb24gY21FbGVtZW50RGVjbGFyYXRpb24gPSBtb2RlbFF1ZXJ5LmdldENNRWxlbWVudERlY2xhcmF0aW9uKGRvY3VtZW50RWxlbWVudCk7Ci0gICAgICBhc3NlcnROb3ROdWxsKCJObyBlbGVtZW50IGRlY2xhcmF0aW9uIGZvciIgKyBkb2N1bWVudEVsZW1lbnQuZ2V0Tm9kZU5hbWUoKSArICIgKCIrZG9jdW1lbnRFbGVtZW50LmdldE5hbWVzcGFjZVVSSSgpKyIpIiwgY21FbGVtZW50RGVjbGFyYXRpb24pOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQgLy8kTk9OLU5MUy0zJAotICAgICAgYXNzZXJ0Tm90TnVsbCgiTm8gY29udGVudCBhc3Npc3QgYXZhaWxhYmxlIGZvciIgKyBkb2N1bWVudEVsZW1lbnQuZ2V0Tm9kZU5hbWUoKSArICIgKCIgKyBkb2N1bWVudEVsZW1lbnQuZ2V0TmFtZXNwYWNlVVJJKCkgKyAiKSIsbW9kZWxRdWVyeS5nZXRBdmFpbGFibGVDb250ZW50KGRvY3VtZW50RWxlbWVudCwgY21FbGVtZW50RGVjbGFyYXRpb24sIE1vZGVsUXVlcnkuSU5DTFVERV9DSElMRF9OT0RFUykpOwotICAgIH0KLSAgICBmaW5hbGx5Ci0gICAgewotICAgICAgaWYgKG1vZGVsICE9IG51bGwpCi0gICAgICB7Ci0gICAgICAgIG1vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBVdGlsaXR5IHRvIHJldHJpZXZlIHRoZSBJRmlsZSBmb3IgdGhlIGdpdmVuIGZpbGUgbmFtZS4gVGhlIGZpbGUgaXMgZXhwZWN0ZWQKLSAgICogdG8gYmUgaW4gdGhlIHdvcmtzcGFjZSBpbiB0aGUgcHJvamVjdCBuYW1lZCBieSB7QGxpbmsgI2ZQcm9qZWN0TmFtZX0uCi0gICAqIAotICAgKiBAcGFyYW0gZmlsZU5hbWUKLSAgICogICAgICAgICAgdGhlIG5hbWUgb2YgdGhlIGZpbGUgdG8gcmV0cmlldmUuCi0gICAqIEByZXR1cm4gYW4gSUZpbGUuCi0gICAqLwotICBwcml2YXRlIElGaWxlIGdldEZpbGUoU3RyaW5nIGZpbGVOYW1lKQotICB7Ci0gICAgSVdvcmtzcGFjZSB3b3Jrc3BhY2UgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCk7Ci0gICAgSVdvcmtzcGFjZVJvb3Qgcm9vdCA9IHdvcmtzcGFjZS5nZXRSb290KCk7Ci0gICAgUGF0aCBwYXRoID0gbmV3IFBhdGgoZlByb2plY3ROYW1lICsgIi8iICsgZmlsZU5hbWUpOyAvLyROT04tTkxTLTEkCi0gICAgcmV0dXJuIHJvb3QuZ2V0RmlsZShwYXRoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvY29udGVudG1vZGVsL1Rlc3RDYXRhbG9nUmV0cml2YWxBbmRNb2RlbENyZWF0aW9uLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9jb250ZW50bW9kZWwvVGVzdENhdGFsb2dSZXRyaXZhbEFuZE1vZGVsQ3JlYXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGNlZDBiMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9jb250ZW50bW9kZWwvVGVzdENhdGFsb2dSZXRyaXZhbEFuZE1vZGVsQ3JlYXRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuY29udGVudG1vZGVsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuWE1MQ29yZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY2F0YWxvZy5wcm92aXNpb25hbC5JQ2F0YWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5Db250ZW50TW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5tb2RlbHF1ZXJ5LlhNTENhdGFsb2dJZFJlc29sdmVyOwotCi1wdWJsaWMgY2xhc3MgVGVzdENhdGFsb2dSZXRyaXZhbEFuZE1vZGVsQ3JlYXRpb24gZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQkvKioKLQkgKiBUZXN0IHRoYXQgYSBrbm93biBlcnJvciBjYXNlIHJldHVybnMgbnVsbC4KLQkgKiAKLQkgKiBAdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbgotCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0S25vd25Ob3RFeGlzdCgpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIEpVTktfU1RSSU5HID0gImRvZXNOb3RFeGlzdFRlc3QiOwotCQlJQ2F0YWxvZyB4bWxDYXRhbG9nID0gWE1MQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0RGVmYXVsdFhNTENhdGFsb2coKTsKLQkJU3RyaW5nIHJlc29sdmVkID0geG1sQ2F0YWxvZy5yZXNvbHZlUHVibGljKEpVTktfU1RSSU5HLCBudWxsKTsKLQkJYXNzZXJ0TnVsbCgiZXhwZWN0ZWQgbm8gbWF0Y2ggZm9yICIgKyBKVU5LX1NUUklORywgcmVzb2x2ZWQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHJlbW92ZWR0ZXN0V0FQRk9SVU0oKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RYSFRNTDEwKCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFhIVE1MMTBUKCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFhIVE1MMTBGKCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIi0vL1czQy8vRFREIFhIVE1MIDEuMCBGcmFtZXNldC8vRU4iKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0WEhUTUwxMEIoKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiLS8vVzNDLy9EVEQgWEhUTUwgQmFzaWMgMS4wLy9FTiIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RYSFRNTDExKCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIi0vL1czQy8vRFREIFhIVE1MIDEuMS8vRU4iKTsKLQl9Ci0JCi0JLyoqCi0JICogV2UgZXhwZWN0IHRoZSBYTUxDYXRhbG9nUmVzb2x2ZXIgYW5kIFhNTENhdGFsb2dJZFJlc29sdmVyCi0JICogdG8gcmVzb2x2ZSB0byB0aGUgc2FtZSBVUkkgZ2l2ZW4gYSBwdWJsaWMgaWQgaW4gb3VyIGNhdGFsb2cuCi0JICogCi0JICogQHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24KLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFhIVE1MMTFfeG1scmVzb2x2ZXIoKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBFWFBFQ1RFRF9QVUJMSUNJRCA9ICItLy9XM0MvL0RURCBYSFRNTCAxLjEvL0VOIjsKLQkJCi0JCS8vIGJ1ZyAxMTc0MjQsIGhlcmUgZXdlIG1ha2UgdXAgYSBiYXNlIGxvY2F0aW9uIHRvIHNhdGlzZnkgdGhlIHJlc29sdmVyIEFQSQotCQkvLyB0aGF0IGV4cGVjdHMgYSBub24tbnVsbCBiYXNlIGxvY2F0aW9uCi0JCVN0cmluZyBiYXNlTG9jYXRpb24gPSAiaHR0cDovL3d3dy5leGFtcGxlLm9yZy90ZXN0WEhUTUwxMS54bWwiOwotCQlYTUxDYXRhbG9nSWRSZXNvbHZlciByZXNvbHZlciA9IG5ldyBYTUxDYXRhbG9nSWRSZXNvbHZlcihiYXNlTG9jYXRpb24sIG51bGwpOwotCQlTdHJpbmcgcmVzb2x2ZWRYTUxfSWQgPSByZXNvbHZlci5yZXNvbHZlKGJhc2VMb2NhdGlvbiwgRVhQRUNURURfUFVCTElDSUQsIG51bGwpOwotCQkKLQkJSUNhdGFsb2cgeG1sQ2F0YWxvZyA9IFhNTENvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldERlZmF1bHRYTUxDYXRhbG9nKCk7Ci0JCVN0cmluZyByZXNvbHZlZFhMX0NhdCA9IHhtbENhdGFsb2cucmVzb2x2ZVB1YmxpYyhFWFBFQ1RFRF9QVUJMSUNJRCwgbnVsbCk7Ci0JCWFzc2VydEVxdWFscyhyZXNvbHZlZFhMX0NhdCwgcmVzb2x2ZWRYTUxfSWQpOwkJIAotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0Q01YSFRNTDExKCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb0NNVGVzdCgiLS8vVzNDLy9EVEQgWEhUTUwgMS4xLy9FTiIpOwotCX0KLQlwdWJsaWMgdm9pZCByZW1vdmVkdGVzdFhIVE1MMTBNKCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIi0vL1dBUEZPUlVNLy9EVEQgWEhUTUwgTW9iaWxlIDEuMC8vRU4iKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCByZW1vdmVkdGVzdFdBUDEzKCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMy8vRU4iKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MjAwMVNjaGVtYSgpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9VUklUZXN0KCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIpOwotCX0KLQotCS8qKgotCSAqIFRlc3RzIGlmIGR0ZCBOT1QgaW4gb3VyIGNhdGFsb2cgY2FuIGhhdmUgYSBjb250ZW50IG1vZGVsIAotCSAqIGNyZWF0ZWQuIAotCSAqIAotCSAqIEB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RFeHRlcm5hbERURCgpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9DTV9kaXJlY3RVUklUZXN0KCJodHRwOi8vaGliZXJuYXRlLnNvdXJjZWZvcmdlLm5ldC9oaWJlcm5hdGUtY29uZmlndXJhdGlvbi0zLjAuZHRkIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDIwMDFTY2hlbWFDTURpcmVjdCgpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9DTV9kaXJlY3RVUklUZXN0KCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS54c2QiKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdDIwMDFTY2hlbWFDTUNhdGFsb2coKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVVJJX0NNVGVzdCgiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEludm9pY2VSZW1vdGUoKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvQ01fZGlyZWN0VVJJVGVzdF9jaGVja0VsZW1lbnRDb3VudCgiaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy93c3QvY29tcG9uZW50cy94c2QvdGVzdHMvZHRkLXJlZmVyZW5jZXMvSW52b2ljZS5kdGQiLCAxOCk7Ci0JfQkKLQkKLQlwdWJsaWMgdm9pZCB0ZXN0SW52b2ljZVJlbW90ZUluZGlyZWN0KCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb0NNX2RpcmVjdFVSSVRlc3RfY2hlY2tFbGVtZW50Q291bnQoImh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvd3N0L2NvbXBvbmVudHMveHNkL3Rlc3RzL2R0ZC1yZWZlcmVuY2VzL0luZGlyZWN0SW52b2ljZS5kdGQiLCAxOCk7Ci0JfQotCQotCXByaXZhdGUgdm9pZCBkb1Rlc3QoU3RyaW5nIEVYUEVDVEVEX1BVQkxJQ0lEKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCUlDYXRhbG9nIHhtbENhdGFsb2cgPSBYTUxDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXREZWZhdWx0WE1MQ2F0YWxvZygpOwotCQlTdHJpbmcgcmVzb2x2ZWQgPSB4bWxDYXRhbG9nLnJlc29sdmVQdWJsaWMoRVhQRUNURURfUFVCTElDSUQsIG51bGwpOwotCQlhc3NlcnROb3ROdWxsKCJleHBlY3RlZCB0byBmaW5kICIgKyBFWFBFQ1RFRF9QVUJMSUNJRCwgcmVzb2x2ZWQpOwotCX0KLQotCXByaXZhdGUgdm9pZCBkb0NNVGVzdChTdHJpbmcgRVhQRUNURURfUFVCTElDSUQpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJSUNhdGFsb2cgeG1sQ2F0YWxvZyA9IFhNTENvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldERlZmF1bHRYTUxDYXRhbG9nKCk7Ci0JCVN0cmluZyByZXNvbHZlZCA9IHhtbENhdGFsb2cucmVzb2x2ZVB1YmxpYyhFWFBFQ1RFRF9QVUJMSUNJRCwgbnVsbCk7Ci0JCUNvbnRlbnRNb2RlbE1hbmFnZXIgY29udGVudE1vZGVsTWFuYWdlciA9IENvbnRlbnRNb2RlbE1hbmFnZXIuZ2V0SW5zdGFuY2UoKTsKLQkJQ01Eb2N1bWVudCBjb250ZW50TW9kZWwgPSBjb250ZW50TW9kZWxNYW5hZ2VyLmNyZWF0ZUNNRG9jdW1lbnQocmVzb2x2ZWQsIG51bGwpOwotCQlhc3NlcnROb3ROdWxsKCJleHBlY3RlZCB0byBjcmVhdGUgY29udGVudCBtb2RlbCBmb3IgIiArIEVYUEVDVEVEX1BVQkxJQ0lELCBjb250ZW50TW9kZWwpOwotCX0KLQotCXByaXZhdGUgdm9pZCBkb0NNX2RpcmVjdFVSSVRlc3QoU3RyaW5nIEVYUEVDVEVEX1VSSSkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlDb250ZW50TW9kZWxNYW5hZ2VyIGNvbnRlbnRNb2RlbE1hbmFnZXIgPSBDb250ZW50TW9kZWxNYW5hZ2VyLmdldEluc3RhbmNlKCk7Ci0JCUNNRG9jdW1lbnQgY29udGVudE1vZGVsID0gY29udGVudE1vZGVsTWFuYWdlci5jcmVhdGVDTURvY3VtZW50KEVYUEVDVEVEX1VSSSwgbnVsbCk7Ci0JCWFzc2VydE5vdE51bGwoImV4cGVjdGVkIHRvIGNyZWF0ZSBjb250ZW50IG1vZGVsIGZvciAiICsgRVhQRUNURURfVVJJLCBjb250ZW50TW9kZWwpOwotCX0KLQkKLQlwcml2YXRlIHZvaWQgZG9DTV9kaXJlY3RVUklUZXN0X2NoZWNrRWxlbWVudENvdW50KFN0cmluZyBFWFBFQ1RFRF9VUkksIGludCBjb3VudCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlDb250ZW50TW9kZWxNYW5hZ2VyIGNvbnRlbnRNb2RlbE1hbmFnZXIgPSBDb250ZW50TW9kZWxNYW5hZ2VyLmdldEluc3RhbmNlKCk7Ci0JCUNNRG9jdW1lbnQgY29udGVudE1vZGVsID0gY29udGVudE1vZGVsTWFuYWdlci5jcmVhdGVDTURvY3VtZW50KEVYUEVDVEVEX1VSSSwgbnVsbCk7Ci0JCWFzc2VydE5vdE51bGwoImV4cGVjdGVkIHRvIGNyZWF0ZSBjb250ZW50IG1vZGVsIGZvciAiICsgRVhQRUNURURfVVJJLCBjb250ZW50TW9kZWwpOwotCQlpbnQgYWN0dWFsQ291bnQgPSBjb250ZW50TW9kZWwuZ2V0RWxlbWVudHMoKS5nZXRMZW5ndGgoKTsgCi0JCWFzc2VydEVxdWFscygiY291bnQgb2YgZWxlbWVudCBkZWNsYXJhdGlvbnMgZm91bmQgZm9yIGNvbnRlbnQgbW9kZWwgY3JlYXRlIGZyb20gIiArIEVYUEVDVEVEX1VSSSwgY29udGVudE1vZGVsLmdldEVsZW1lbnRzKCkuZ2V0TGVuZ3RoKCksIGFjdHVhbENvdW50KTsJCQotCX0JCi0KLQlwcml2YXRlIHZvaWQgZG9VUklUZXN0KFN0cmluZyBFWFBFQ1RFRF9VUkkpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLSAKLQkJSUNhdGFsb2cgeG1sQ2F0YWxvZyA9IFhNTENvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldERlZmF1bHRYTUxDYXRhbG9nKCk7Ci0JCVN0cmluZyByZXNvbHZlZCA9IHhtbENhdGFsb2cucmVzb2x2ZVVSSShFWFBFQ1RFRF9VUkkpOwotCQlhc3NlcnROb3ROdWxsKCJleHBlY3RlZCB0byBmaW5kICIgKyBFWFBFQ1RFRF9VUkksIHJlc29sdmVkKTsKLQotCX0KLQkgdm9pZCBkb1VSSV9DTVRlc3QoU3RyaW5nIEVYUEVDVEVEX1VSSSkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQkgCi0JCUlDYXRhbG9nIHhtbENhdGFsb2cgPSBYTUxDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXREZWZhdWx0WE1MQ2F0YWxvZygpOwotCQlTdHJpbmcgcmVzb2x2ZWQgPSB4bWxDYXRhbG9nLnJlc29sdmVVUkkoRVhQRUNURURfVVJJKTsKLQkJYXNzZXJ0Tm90TnVsbCgiZXhwZWN0ZWQgdG8gZmluZCAiICsgRVhQRUNURURfVVJJLCByZXNvbHZlZCk7Ci0JCQotCQlDb250ZW50TW9kZWxNYW5hZ2VyIGNvbnRlbnRNb2RlbE1hbmFnZXIgPSBDb250ZW50TW9kZWxNYW5hZ2VyLmdldEluc3RhbmNlKCk7Ci0JCUNNRG9jdW1lbnQgY29udGVudE1vZGVsID0gY29udGVudE1vZGVsTWFuYWdlci5jcmVhdGVDTURvY3VtZW50KHJlc29sdmVkLCBudWxsKTsKLQkJYXNzZXJ0Tm90TnVsbCgiZXhwZWN0ZWQgdG8gY3JlYXRlIGNvbnRlbnQgbW9kZWwgZm9yICIgKyBFWFBFQ1RFRF9VUkksIGNvbnRlbnRNb2RlbCk7Ci0KLQl9Ci0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZG9jdW1lbnQvRmlsZUJ1ZmZlckRvY3VtZW50VGVzdGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9kb2N1bWVudC9GaWxlQnVmZmVyRG9jdW1lbnRUZXN0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGEyMDg5ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9kb2N1bWVudC9GaWxlQnVmZmVyRG9jdW1lbnRUZXN0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmRvY3VtZW50OwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuZmlsZWJ1ZmZlcnMuRmlsZUJ1ZmZlcnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5maWxlYnVmZmVycy5JVGV4dEZpbGVCdWZmZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5maWxlYnVmZmVycy5JVGV4dEZpbGVCdWZmZXJNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuZmlsZWJ1ZmZlcnMuTG9jYXRpb25LaW5kOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudEV4dGVuc2lvbjM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnRQYXJ0aXRpb25lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZFBhcnRpdGlvbmluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwudGV4dC5CYXNpY1N0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudGV4dC5ydWxlcy5TdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MOwotCi0KLQotcHVibGljIGNsYXNzIEZpbGVCdWZmZXJEb2N1bWVudFRlc3RlciBleHRlbmRzIFVuemlwcGVkUHJvamVjdFRlc3RlciB7Ci0KLQlwcml2YXRlIHZvaWQgZG9UZXN0Q3JlYXRlKFN0cmluZyBmaWxlUGF0aCwgQ2xhc3MgZXhwZWN0ZWREb2N1bWVudENsYXNzLCBDbGFzcyBleHBlY3RlZFBhcnRpb25lcikgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJSUZpbGUgZmlsZSA9IChJRmlsZSkgZlRlc3RQcm9qZWN0LmZpbmRNZW1iZXIoZmlsZVBhdGgpOwotCQlhc3NlcnROb3ROdWxsKCJUZXN0IENhc2UgaW4gZXJyb3IuIENvdWxkIG5vdCBmaW5kIGZpbGUgIiArIGZpbGVQYXRoLCBmaWxlKTsKLQkJSVBhdGggZnVsbFBhdGggPSBmaWxlLmdldEZ1bGxQYXRoKCk7Ci0JCUlUZXh0RmlsZUJ1ZmZlck1hbmFnZXIgYnVmZmVyTWFuYWdlciA9IEZpbGVCdWZmZXJzLmdldFRleHRGaWxlQnVmZmVyTWFuYWdlcigpOwotCQlidWZmZXJNYW5hZ2VyLmNvbm5lY3QoZnVsbFBhdGgsIExvY2F0aW9uS2luZC5JRklMRSwgbnVsbCk7Ci0JCUlUZXh0RmlsZUJ1ZmZlciBidWZmZXIgPSBidWZmZXJNYW5hZ2VyLmdldFRleHRGaWxlQnVmZmVyKGZ1bGxQYXRoKTsKLQkJSURvY3VtZW50IGRvY3VtZW50ID0gYnVmZmVyLmdldERvY3VtZW50KCk7Ci0JCWFzc2VydE5vdE51bGwoZG9jdW1lbnQpOwotCQlhc3NlcnRUcnVlKCJ3cm9uZyBjbGFzcyBvZiBkb2N1bWVudDogIiArIChkb2N1bWVudCAhPSBudWxsID8gZG9jdW1lbnQuZ2V0Q2xhc3MoKSA6IG51bGwpLCBleHBlY3RlZERvY3VtZW50Q2xhc3MuaXNJbnN0YW5jZShkb2N1bWVudCkpOwotCQlhc3NlcnRUcnVlKCJkb2N1bWVudCBkb2VzIG5vdCBpbXBsZW1lbnQgSURvY3VtZW50RXh0ZW5zaW9uMyIsIGRvY3VtZW50IGluc3RhbmNlb2YgSURvY3VtZW50RXh0ZW5zaW9uMyk7Ci0JCUlEb2N1bWVudFBhcnRpdGlvbmVyIGFjdHVhbFBhcnRpdGlvbmVyID0gKChJRG9jdW1lbnRFeHRlbnNpb24zKSBkb2N1bWVudCkuZ2V0RG9jdW1lbnRQYXJ0aXRpb25lcihJU3RydWN0dXJlZFBhcnRpdGlvbmluZy5ERUZBVUxUX1NUUlVDVFVSRURfUEFSVElUSU9OSU5HKTsKLQkJYXNzZXJ0VHJ1ZSgid3JvbmcgcGFydGl0aW9uZXIgaW4gZG9jdW1lbnQ6ICIgKyBhY3R1YWxQYXJ0aXRpb25lciwgZXhwZWN0ZWRQYXJ0aW9uZXIuaXNJbnN0YW5jZShhY3R1YWxQYXJ0aXRpb25lcikpOwotCQlidWZmZXJNYW5hZ2VyLmRpc2Nvbm5lY3QoZnVsbFBhdGgsIExvY2F0aW9uS2luZC5JRklMRSwgbnVsbCk7Ci0KLS8vCQlkb1Rlc3RDcmVhdGVXaXRoRmFjYWRlKGZpbGUsIGV4cGVjdGVkRG9jdW1lbnRDbGFzcywgZXhwZWN0ZWRQYXJ0aW9uZXIpOwotCQkgCi0JfQotCi0JLyoqCi0JICogQHBhcmFtIGZpbGUKLQkgKiBAcGFyYW0gZXhwZWN0ZWREb2N1bWVudENsYXNzCi0JICogQHBhcmFtIGV4cGVjdGVkUGFydGlvbmVyCi0JICogQHRocm93cyBDb3JlRXhjZXB0aW9uCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqLwotLy8JcHJpdmF0ZSB2b2lkIGRvVGVzdENyZWF0ZVdpdGhGYWNhZGUoSUZpbGUgZmlsZSwgQ2xhc3MgZXhwZWN0ZWREb2N1bWVudENsYXNzLCBDbGFzcyBleHBlY3RlZFBhcnRpb25lcikgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLS8vCQlEb2N1bWVudExvYWRlckZvclhNTCBkb2N1bWVudExvYWRlckZvclhNTCA9IG5ldyBEb2N1bWVudExvYWRlckZvclhNTCgpOwotLy8JCUlEb2N1bWVudCBkb2N1bWVudCA9IGRvY3VtZW50TG9hZGVyRm9yWE1MLmNyZWF0ZU5ld1N0cnVjdHVyZWREb2N1bWVudChmaWxlLCBudWxsKTsKLS8vCQlBc3NlcnQuYXNzZXJ0Tm90TnVsbChkb2N1bWVudCk7Ci0vLwl9Ci0KLQlwcml2YXRlIHZvaWQgZG9UZXN0Q3JlYXRlQ3JlYXRlRW1wdHkoU3RyaW5nIGZpbGVQYXRoLCBDbGFzcyBleHBlY3RlZERvY3VtZW50Q2xhc3MsIENsYXNzIGV4cGVjdGVkUGFydGlvbmVyKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlGaWxlIGZpbGUgPSAoSUZpbGUpIGZUZXN0UHJvamVjdC5maW5kTWVtYmVyKGZpbGVQYXRoKTsKLQkJYXNzZXJ0VHJ1ZSgiVGVzdCBDYXNlIGluIGVycm9yLiBOb24tZXhpc3RlbnQgZmlsZSBleGlzdGVkISAiICsgZmlsZVBhdGgsIGZpbGUgPT0gbnVsbCk7Ci0JCUlQYXRoIGxvY2F0aW9uUGF0aCA9IG5ldyBQYXRoKGZpbGVQYXRoKTsKLQkJSUZpbGUgbm9uRXhpc3RpbmdGaWxlID0gZlRlc3RQcm9qZWN0LmdldEZpbGUobG9jYXRpb25QYXRoKTsKLQkJbG9jYXRpb25QYXRoID0gbm9uRXhpc3RpbmdGaWxlLmdldEZ1bGxQYXRoKCk7Ci0JCUlUZXh0RmlsZUJ1ZmZlck1hbmFnZXIgYnVmZmVyTWFuYWdlciA9IEZpbGVCdWZmZXJzLmdldFRleHRGaWxlQnVmZmVyTWFuYWdlcigpOwotCQkvLyBjYW4gbm90ICJjb25uZWN0IiB0byBub24tZXhpc3RhbnQgbG9jYXRpb24KLQkJLy9idWZmZXJNYW5hZ2VyLmNvbm5lY3QobG9jYXRpb25QYXRoLCBudWxsKTsKLQkJSURvY3VtZW50IGRvY3VtZW50ID0gYnVmZmVyTWFuYWdlci5jcmVhdGVFbXB0eURvY3VtZW50KGxvY2F0aW9uUGF0aCk7Ci0JCWFzc2VydE5vdE51bGwoZG9jdW1lbnQpOwotCQlhc3NlcnRUcnVlKCJ3cm9uZyBjbGFzcyBvZiBkb2N1bWVudCIsIGV4cGVjdGVkRG9jdW1lbnRDbGFzcy5pc0luc3RhbmNlKGRvY3VtZW50KSk7Ci0JCWFzc2VydFRydWUoIndyb25nIHBhcnRpdGlvbmVyIGluIGRvY3VtZW50IiwgZXhwZWN0ZWRQYXJ0aW9uZXIuaXNJbnN0YW5jZShkb2N1bWVudC5nZXREb2N1bWVudFBhcnRpdGlvbmVyKCkpKTsKLQkJYnVmZmVyTWFuYWdlci5kaXNjb25uZWN0KGxvY2F0aW9uUGF0aCwgbnVsbCk7Ci0KLQl9Ci0KLQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvRW1wdHlGaWxlLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC9ldWNqcC54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdC54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvTWFsZm9ybWVkTm9FbmNvZGluZy54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvTWFsZm9ybWVkTm9FbmNvZGluZy54c2wiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvTm9FbmNvZGluZy54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvTm9ybWFsTm9uRGVmYXVsdC54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvc2hpZnRqaXMueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTExKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3Rlc3RFeHRyYUp1bmsueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTEyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3Rlc3RFeHRyYVZhbGlkU3R1ZmYueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTEzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3Rlc3RJbGxGb3JtZWQueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3Rlc3RJbGxGb3JtZWQyLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC90ZXN0SWxsRm9ybWVkMy54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZDQueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3Rlc3RNdWx0aUxpbmUueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb0VuY29kaW5nVmFsdWUueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb3JtYWxDYXNlLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC90ZXN0Tm9YTUxEZWNsLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC90ZXN0Tm9YTUxEZWNsQXRGaXJzdC54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdGVzdE5vWE1MRGVjbEluTGFyZ2VGaWxlLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC90ZXN0VVRGMTYueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL1VURjE2TEVBdFN0YXJ0T2ZMYXJnZUZpbGUueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXIyLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyQkUueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3V0ZjE2V2l0aEphcGFuZXNlQ2hhcnMueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL1VURjhXaXRoM0J5dGVCT00ueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3ROb25FeGlzdGVudFhNTCgpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlQ3JlYXRlRW1wdHkoInRlc3RmaWxlcy94bWwvdGVzdG5vbmV4aXN0ZW50LnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2ltcGxlQ2FzZSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC90ZXN0Tm9ybWFsQ2FzZS54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JLyoKLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9jc3MvZW1wdHlGaWxlLmNzcyIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yQ1NTLmNsYXNzKTsKLQl9Ci0KLQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC9NYWxmb3JtZWROb0VuY29kaW5nWFNMLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL3Rlc3RCcm9rZW5MaW5lLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL3Rlc3REZWZhdWx0RW5jb2RpbmcuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdGVzdERlZmF1bHRFbmNvZGluZ1dpdGhKdW5rLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL3Rlc3RFeHRyYUp1bmsuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdGVzdEV4dHJhVmFsaWRTdHVmZi5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC90ZXN0SWxsRm9ybWVkLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL3Rlc3RJbGxGb3JtZWQyLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL3Rlc3ROb0VuY29kaW5nVmFsdWUuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdGVzdE5vUGFnZURpcmVjdGl2ZS5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC90ZXN0Tm9QYWdlRGlyZWN0aXZlQXRGaXJzdC5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC90ZXN0Tm9QYWdlRGlyZWN0aXZlSW5MYXJnZUZpbGUuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdGVzdE5vcm1hbENhc2UuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdGVzdFVURjE2LmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXIyLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXJCRS5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC91dGYxNldpdGhKYXBhbmVzZUNoYXJzLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL1VURjhXaXRoM0J5dGVCT00uanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvV2VsbEZvcm1lZE5vcm1hbE5vbkRlZmF1bHQuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9yZWdyZXNzaW9uVGVzdEZpbGVzL2RlZmVjdDIyMzM2NS9TZWxDb2xCZWFuUm93MTJSZXN1bHRzRm9ybS5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9yZWdyZXNzaW9uVGVzdEZpbGVzL2RlZmVjdDIyMzM2NS9TZWxDb2xCZWFuUm93MTJSZXN1bHRzRm9ybUIuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjQyOTMvdGVzdHNoaWZ0amlzWG1sU3ludGF4LmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3JlZ3Jlc3Npb25UZXN0RmlsZXMvZGVmZWN0MjI5NjY3L2F1ZGkuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC9ub0VuY29kaW5nLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTcyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL05vRW5jb2RpbmdpblhNTERlY2wuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZU5vRW5jb2RpbmcuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlVXNpbmdDaGFyc2V0LmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZVVzaW5nWE1MU3ludGF4LmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL05vcm1hbE5vbkRlZmF1bHQuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvTm9ybWFsTm9uRGVmYXVsdFdpdGhYTUxEZWNsLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL05vcm1hbFBhZ2VDYXNlTm9uRGVmYXVsdC5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC9TZWxDb2xCZWFuUm93MTJSZXN1bHRzRm9ybS5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotKi8KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2RvY3VtZW50L0dldERvY3VtZW50UmVnaW9uc1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2RvY3VtZW50L0dldERvY3VtZW50UmVnaW9uc1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjBjMWQ0NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9kb2N1bWVudC9HZXREb2N1bWVudFJlZ2lvbnNUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5kb2N1bWVudDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvclhNTDsKLQotcHVibGljIGNsYXNzIEdldERvY3VtZW50UmVnaW9uc1Rlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JCi0JcHJpdmF0ZSBib29sZWFuIGZBbHJlYWR5U2V0dXAgPSBmYWxzZTsKLQlwcml2YXRlIElTdHJ1Y3R1cmVkRG9jdW1lbnQgZkRvYyA9IG51bGw7Ci0JcHJpdmF0ZSBTdHJpbmcgZlRleHQgPSBudWxsOwotCQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnNldFVwKCk7Ci0JCWlmKCFmQWxyZWFkeVNldHVwKSB7Ci0JCQlJU3RydWN0dXJlZE1vZGVsIHNNb2RlbCA9IGNyZWF0ZU1vZGVsKENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwpOwotCQkJZkRvYyA9IHNNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCWZUZXh0ID0gIjxodG1sPjxoZWFkPjwvaGVhZD48Ym9keT4gdGV4dCA8L2JvZHk+PC9odG1sPiI7Ci0JCQlmRG9jLnNldChmVGV4dCk7Ci0JCQlmQWxyZWFkeVNldHVwID0gdHJ1ZTsKLQkJfQotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0QWxsUmVnaW9ucygpIHsKLQotCQkvLyBhbGwgcmVnaW9ucwotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uW10gcmVnaW9ucyA9IGZEb2MuZ2V0U3RydWN0dXJlZERvY3VtZW50UmVnaW9ucygpOwotCQljaGVja1JlZ2lvbnMocmVnaW9ucywgNywgIjxodG1sPiIsICI8L2h0bWw+Iik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEV4Y2x1ZGVFbmRzKCkgewotCQkKLQkJLy8gbGVhdmUgb2ZmIHRoZSBlbmQgcmVnaW9ucwotCQkvLyA8aHRtbD5bPGhlYWQ+PGJvZHk+IHRleHQgPC9ib2R5Pl08L2h0bWw+Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25bXSByZWdpb25zID0gZkRvYy5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKDYsZlRleHQubGVuZ3RoKCkgLSAoNis3KSk7Ci0JCWNoZWNrUmVnaW9ucyhyZWdpb25zLCA1LCAiPGhlYWQ+IiwgIjwvYm9keT4iKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SW5jbHVkZUVuZHMoKSB7Ci0JCQotCQkvLyBpbmNsdWRlIGVuZCByZWdpb25zCi0JCS8vIDxodFttbD48aGVhZD48L2hlYWQ+PGJvZHk+IHRleHQgPC9ib2R5PjwvaHRdbWw+Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25bXSByZWdpb25zID0gZkRvYy5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKDMsZlRleHQubGVuZ3RoKCktICgzKzMpKTsKLQkJYXNzZXJ0RXF1YWxzKDcsIHJlZ2lvbnMubGVuZ3RoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Rmlyc3RUd28oKSB7Ci0JCS8vIGZpcnN0IDIgcmVnaW9ucwotCQkvLyA8aFt0bWw+PGhdZWFkPjwvaGVhZD4KLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbltdIHJlZ2lvbnMgPSBmRG9jLmdldFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoMiw2KTsKLQkJY2hlY2tSZWdpb25zKHJlZ2lvbnMsIDIsICI8aHRtbD4iLCAiPGhlYWQ+Iik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFJpZ2h0U2VhbSgpIHsKLQkJLy8gcmlnaHQgc2VhbQotCQkvLyBbPGh0bWw+PGhlYWQ+XTwvaGVhZD4KLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbltdIHJlZ2lvbnMgPSBmRG9jLmdldFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoMCwxMik7Ci0JCWNoZWNrUmVnaW9ucyhyZWdpb25zLCAyLCAiPGh0bWw+IiwgIjxoZWFkPiIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RMZWZ0U2VhbSgpIHsKLQkJLy8gbGVmdCBzZWFtCi0JCS8vIDwvYm9keT5bPC9odG1sPl0KLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbltdIHJlZ2lvbnMgPSBmRG9jLmdldFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoZlRleHQubGVuZ3RoKCktNywgNyk7Ci0JCWNoZWNrUmVnaW9ucyhyZWdpb25zLCAxLCAiPC9odG1sPiIsICI8L2h0bWw+Iik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldExhc3QoKSB7Ci0JCS8vIGxhc3QgcmVnaW9uIG9ubHkKLQkJLy8gPC9ib2R5PjwvaHRtbD58Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25bXSByZWdpb25zID0gZkRvYy5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKGZUZXh0Lmxlbmd0aCgpLCAwKTsKLQkJY2hlY2tSZWdpb25zKHJlZ2lvbnMsIDEsICI8L2h0bWw+IiwgIjwvaHRtbD4iKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0Rmlyc3QoKSB7Ci0JCS8vIGZpcnN0IHJlZ2lvbiBvbmx5Ci0JCS8vIHw8aHRtbD48aGVhZD4KLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbltdIHJlZ2lvbnMgPSBmRG9jLmdldFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoMCwwKTsKLQkJY2hlY2tSZWdpb25zKHJlZ2lvbnMsIDEsICI8aHRtbD4iLCAiPGh0bWw+Iik7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNoZWNrUmVnaW9ucyhJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uW10gcmVnaW9ucywgaW50IGV4cGVjdGVkTGVuZ3RoLCBTdHJpbmcgZmlyc3RUZXh0LCBTdHJpbmcgbGFzdFRleHQpIHsKLQkJCi0JCS8vZm9yIChpbnQgaSA9IDA7IGkgPCByZWdpb25zLmxlbmd0aDsgaSsrKSAKLQkJLy8JU3lzdGVtLm91dC5wcmludGxuKHJlZ2lvbnNbaV0uZ2V0VGV4dCgpKTsKLQkJCi0JCWFzc2VydEVxdWFscyhleHBlY3RlZExlbmd0aCwgcmVnaW9ucy5sZW5ndGgpOwotCQkKLQkJU3RyaW5nIHRleHQgPSByZWdpb25zWzBdLmdldFRleHQoKTsKLQkJYXNzZXJ0RXF1YWxzKHRleHQsIGZpcnN0VGV4dCk7Ci0JCQotCQl0ZXh0ID0gcmVnaW9uc1tyZWdpb25zLmxlbmd0aC0xXS5nZXRUZXh0KCk7Ci0JCWFzc2VydEVxdWFscyh0ZXh0LCBsYXN0VGV4dCk7Ci0JfQotCQotCXByaXZhdGUgSVN0cnVjdHVyZWRNb2RlbCBjcmVhdGVNb2RlbChTdHJpbmcgY29udGVudFR5cGVJRCkgewotCQkvLyBjcmVhdGUgYW4gZW1wdHkgbW9kZWwgd2l0aCBpdHMgZGVmYXVsdCBmYWN0b3JpZXMKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKGNvbnRlbnRUeXBlSUQpOwotCQlyZXR1cm4gbW9kZWw7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZG9jdW1lbnQvVGVzdFN0cnVjdHVyZWREb2N1bWVudC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZG9jdW1lbnQvVGVzdFN0cnVjdHVyZWREb2N1bWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODQ3NmRmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2RvY3VtZW50L1Rlc3RTdHJ1Y3R1cmVkRG9jdW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUwMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmRvY3VtZW50OwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuQmFkTG9jYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5CYWRQb3NpdGlvbkNhdGVnb3J5RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50RXh0ZW5zaW9uNDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LlBvc2l0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kuc2VydmljZS5kYXRhbG9jYXRpb24uTG9jYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLkVuY29kaW5nTWVtZW50bzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLklTdHJ1Y3R1cmVkRG9jdW1lbnRMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLk5ld0RvY3VtZW50RXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV2ZW50cy5Ob0NoYW5nZUV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5ldmVudHMuUmVnaW9uQ2hhbmdlZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5ldmVudHMuUmVnaW9uc1JlcGxhY2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV2ZW50cy5TdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWwuRmlsZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWwuUHJvamVjdFVuemlwVXRpbGl0eTsKLQotcHVibGljIGNsYXNzIFRlc3RTdHJ1Y3R1cmVkRG9jdW1lbnQgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQljbGFzcyBUZXN0TGlzdGVuZXIgaW1wbGVtZW50cyBJU3RydWN0dXJlZERvY3VtZW50TGlzdGVuZXIgewotCi0JCWJvb2xlYW4gbmV3TW9kZWxDYWxsZWQgPSBmYWxzZTsKLQkJYm9vbGVhbiBub0NoYW5nZUNhbGxlZCA9IGZhbHNlOwotCQlib29sZWFuIG5vZGVzUmVwbGFjZWRDYWxsZWQgPSBmYWxzZTsKLQkJYm9vbGVhbiByZWdpb25DaGFuZ2VkQ2FsbGVkID0gZmFsc2U7Ci0JCWJvb2xlYW4gcmVnaW9uc1JlcGxhY2VkQ2FsbGVkID0gZmFsc2U7Ci0KLQkJcHVibGljIHZvaWQgbmV3TW9kZWwoTmV3RG9jdW1lbnRFdmVudCBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkgewotCQkJbmV3TW9kZWxDYWxsZWQgPSB0cnVlOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgbm9DaGFuZ2UoTm9DaGFuZ2VFdmVudCBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkgewotCQkJbm9DaGFuZ2VDYWxsZWQgPSB0cnVlOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgbm9kZXNSZXBsYWNlZChTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkgewotCQkJbm9kZXNSZXBsYWNlZENhbGxlZCA9IHRydWU7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCByZWdpb25DaGFuZ2VkKFJlZ2lvbkNoYW5nZWRFdmVudCBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkgewotCQkJcmVnaW9uQ2hhbmdlZENhbGxlZCA9IHRydWU7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCByZWdpb25zUmVwbGFjZWQoUmVnaW9uc1JlcGxhY2VkRXZlbnQgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpIHsKLQkJCXJlZ2lvbnNSZXBsYWNlZENhbGxlZCA9IHRydWU7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gaXNTZXR1cCA9IGZhbHNlOwotCQotCi0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZlByb2plY3ROYW1lID0gIkRPQ1VNRU5ULUxPQURFUiI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZlppcEZpbGVOYW1lID0gInhtbC1kb2N1bWVudC1sb2FkZXItdGVzdHMuemlwIjsKLQotCXB1YmxpYyBUZXN0U3RydWN0dXJlZERvY3VtZW50KCkgewotCQlzdXBlcigiVGVzdFN0cnVjdHVyZWREb2N1bWVudCIpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLQkJc3VwZXIuc2V0VXAoKTsKLQkJaWYgKCF0aGlzLmlzU2V0dXApIHsKLQkJCQotCQkJZG9TZXR1cCgpOwotCQkJdGhpcy5pc1NldHVwID0gdHJ1ZTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBkb1NldHVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLQkJLy8gcm9vdCBvZiB3b3Jrc3BhY2UgZGlyZWN0b3J5Ci0JCUxvY2F0aW9uIHBsYXRmb3JtTG9jYXRpb24gPSBQbGF0Zm9ybS5nZXRJbnN0YW5jZUxvY2F0aW9uKCk7Ci0KLQkJUHJvamVjdFVuemlwVXRpbGl0eSB1bnppcFV0aWwgPSBuZXcgUHJvamVjdFVuemlwVXRpbGl0eSgpOwotCQlGaWxlIHppcEZpbGUgPSBGaWxlVXRpbC5tYWtlRmlsZUZvcihQcm9qZWN0VW56aXBVdGlsaXR5LlBST0pFQ1RfWklQU19GT0xERVIsIGZaaXBGaWxlTmFtZSwgUHJvamVjdFVuemlwVXRpbGl0eS5QUk9KRUNUX1pJUFNfRk9MREVSKTsKLQkJdW56aXBVdGlsLnVuemlwQW5kSW1wb3J0KHppcEZpbGUsIHBsYXRmb3JtTG9jYXRpb24uZ2V0VVJMKCkuZ2V0RmlsZSgpKTsKLQkJdW56aXBVdGlsLmluaXRKYXZhUHJvamVjdChmUHJvamVjdE5hbWUpOwotCX0KLQotCS8qKgotCSAqIEJlIHN1cmUgdG8gcmVsZWFzZSBhbnkgbW9kZWxzIG9idGFpbmVkIGZyb20gdGhpcyBtZXRob2QuCi0JICogCi0JICovCi0JSVN0cnVjdHVyZWRNb2RlbCBnZXRUZXN0TW9kZWwoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCi0JCUlQcm9qZWN0IHByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QoZlByb2plY3ROYW1lKTsKLQkJSUZpbGUgaUZpbGUgPSAoSUZpbGUpIHByb2plY3QuZmluZE1lbWJlcigiL2ZpbGVzL3NpbXBsZS54bWwiKTsKLQkJLy8gZlByb2plY3ROYW1lICsgIi9maWxlcy9zaW1wbGUueG1sIgotCi0KLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQotCQltb2RlbCA9IG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvckVkaXQoaUZpbGUpOwotCi0KLQkJcmV0dXJuIG1vZGVsOwotCi0JfQotCi0KLQotCXB1YmxpYyB2b2lkIHRlc3REb2N1bWVudENoYW5naW5nTGlzdGVuZXIoKSB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJLy8gVE9ETzogbWF5IG5lZWQgdG8gZmFrZSBldmVudHMgdG8gcmVhbGx5IHRlc3RzIHRoaXMKLQotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQotCQkJVGVzdExpc3RlbmVyIGxpc3RlbmVyID0gbmV3IFRlc3RMaXN0ZW5lcigpOwotCi0JCQlzRG9jLmFkZERvY3VtZW50Q2hhbmdpbmdMaXN0ZW5lcihsaXN0ZW5lcik7Ci0JCQlTdHJpbmcgdGV4dCA9IHNEb2MuZ2V0KCk7Ci0JCQlzRG9jLnJlcGxhY2UoMCwgdGV4dC5sZW5ndGgoKSwgdGV4dCk7Ci0KLQkJCXNEb2MucmVtb3ZlRG9jdW1lbnRDaGFuZ2luZ0xpc3RlbmVyKGxpc3RlbmVyKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UmVhZE9ubHkoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBnZXRUZXN0TW9kZWwoKTsKLQkJdHJ5IHsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc0RvYyA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJU3RyaW5nIHRleHQgPSBzRG9jLmdldCgpOwotCi0JCQlzRG9jLmNsZWFyUmVhZE9ubHkoMCwgdGV4dC5sZW5ndGgoKSk7Ci0JCQlhc3NlcnRGYWxzZShzRG9jLmNvbnRhaW5zUmVhZE9ubHkoMCwgdGV4dC5sZW5ndGgoKSkpOwotCi0JCQlzRG9jLm1ha2VSZWFkT25seSgwLCAxMCk7Ci0JCQlhc3NlcnRUcnVlKHNEb2MuY29udGFpbnNSZWFkT25seSg5LCAxKSk7Ci0JCQlhc3NlcnRUcnVlKHNEb2MuY29udGFpbnNSZWFkT25seSgwLCB0ZXh0Lmxlbmd0aCgpKSk7Ci0KLQkJCXNEb2MuY2xlYXJSZWFkT25seSgwLCB0ZXh0Lmxlbmd0aCgpKTsKLQkJCWFzc2VydEZhbHNlKHNEb2MuY29udGFpbnNSZWFkT25seSgwLCB0ZXh0Lmxlbmd0aCgpKSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldFJlZ2lvbkF0Q2hhcmFjdGVyT2Zmc2V0KCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQl0cnkgewotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzRG9jID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHIgPSBzRG9jLmdldFJlZ2lvbkF0Q2hhcmFjdGVyT2Zmc2V0KDApOwotCQkJYXNzZXJ0Tm90TnVsbCgiY291bGRuJ3QgZ2V0IHJlZ2lvbiBhdCBvZmZzZXQ6IDAiLCByKTsKLQotCQkJciA9IHNEb2MuZ2V0UmVnaW9uQXRDaGFyYWN0ZXJPZmZzZXQoc0RvYy5nZXRMZW5ndGgoKSk7Ci0JCQlhc3NlcnROb3ROdWxsKCJjb3VsZG4ndCBnZXQgcmVnaW9uIGF0IG9mZnNldDogIiArIHNEb2MuZ2V0TGVuZ3RoKCksIHIpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldFJlZ2lvbkxpc3QoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IHJlZ2lvbnMgPSBzRG9jLmdldFJlZ2lvbkxpc3QoKTsKLQkJCWFzc2VydE5vdE51bGwoImNvdWxkbid0IGdldCByZWdpb24gbGlzdCIsIHJlZ2lvbnMpOwotCQkJYXNzZXJ0RXF1YWxzKDE3LCByZWdpb25zLmdldExlbmd0aCgpKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0VGV4dCgpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBnZXRUZXN0TW9kZWwoKTsKLQkJdHJ5IHsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc0RvYyA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJU3RyaW5nIHRleHQgPSBzRG9jLmdldFRleHQoKTsKLQkJCVN0cmluZyBleHBlY3RlZFRleHQgPSAiPD94bWwgdmVyc2lvbj1cIjEuMFwiPz5cclxuPGxpc3Q+XHJcblx0PGl0ZW0xIGF0dHIxPVwiYXR0cjFcIiBhdHRyMj1cImF0dHIyXCIgYXR0cjM9XCJhdHRyM1wiPlxyXG5cdFx0b25lXHJcblx0PC9pdGVtMT5cclxuXHQ8aXRlbTIgYXR0cjE9XCJhdHRyMVwiIGF0dHIyPVwiYXR0cjJcIiBhdHRyMz1cImF0dHIzXCIgPlxyXG5cdFx0dHdvXHJcblx0PC9pdGVtMj5cclxuXHQ8aXRlbTMgYXR0cjE9XCJhdHRyMVwiIGF0dHIyPVwiYXR0cjJcIiBhdHRyMz1cImF0dHIzXCI+XHJcblx0XHR0aHJlZVxyXG5cdDwvaXRlbTM+XHJcbjwvbGlzdD4iOwotCQkJYXNzZXJ0RXF1YWxzKGV4cGVjdGVkVGV4dCwgdGV4dCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5ld0luc3RhbmNlKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQl0cnkgewotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzRG9jID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IG5ld0RvYyA9IHNEb2MubmV3SW5zdGFuY2UoKTsKLQkJCWFzc2VydE5vdFNhbWUoImRvY3VtZW50IGluc3RhbmNlcyBzaG91bGQgYmUgZGlmZmVyZW50Iiwgc0RvYywgbmV3RG9jKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFJlcGxhY2UoKSB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQl0cnkgewotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzRG9jID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlsb25nIG1vZGlmaWNhdGlvblN0YW1wID0gLTE7Ci0JCQlpZiAoc0RvYyBpbnN0YW5jZW9mIElEb2N1bWVudEV4dGVuc2lvbjQpIHsKLQkJCQltb2RpZmljYXRpb25TdGFtcCA9ICgoSURvY3VtZW50RXh0ZW5zaW9uNClzRG9jKS5nZXRNb2RpZmljYXRpb25TdGFtcCgpOwotCQkJfQotCQkJc0RvYy5yZXBsYWNlKDAsIHNEb2MuZ2V0TGVuZ3RoKCksICJyZXBsYWNlZCIpOwotCi0JCQlTdHJpbmcgdGV4dCA9IHNEb2MuZ2V0VGV4dCgpOwotCQkJYXNzZXJ0RXF1YWxzKCJyZXBsYWNlZCIsIHRleHQpOwotCi0JCQlpZiAobW9kaWZpY2F0aW9uU3RhbXAgPiAtMSkKLQkJCQlhc3NlcnRUcnVlKCJyZXBsYWNlIHRleHQgbW9kaWZpY2F0aW9uIHN0YW1wIGZhaWxlZCIsIG1vZGlmaWNhdGlvblN0YW1wICE9KChJRG9jdW1lbnRFeHRlbnNpb240KXNEb2MpLmdldE1vZGlmaWNhdGlvblN0YW1wKCkpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0UmVwbGFjZVdpdGhNb2RpZmljYXRpb25TdGFtcCgpIHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCWlmIChzRG9jIGluc3RhbmNlb2YgSURvY3VtZW50RXh0ZW5zaW9uNCkgewotCQkJCUlEb2N1bWVudEV4dGVuc2lvbjQgZXh0NCA9IChJRG9jdW1lbnRFeHRlbnNpb240KXNEb2M7Ci0JCQkJbG9uZyBtb2RpZmljYXRpb25TdGFtcCA9IGV4dDQuZ2V0TW9kaWZpY2F0aW9uU3RhbXAoKSArIDE7Ci0JCQkJCi0JCQkJZXh0NC5yZXBsYWNlKDAsIHNEb2MuZ2V0TGVuZ3RoKCksICJyZXBsYWNlZCIsIG1vZGlmaWNhdGlvblN0YW1wKTsKLQkJCQlTdHJpbmcgdGV4dCA9IHNEb2MuZ2V0VGV4dCgpOwotCQkJCWFzc2VydEVxdWFscygicmVwbGFjZWQiLCB0ZXh0KTsKLQkJCQkKLQkJCQlhc3NlcnRUcnVlKCJyZXBsYWNlIHRleHQgbW9kaWZpY2F0aW9uIHN0YW1wIGZhaWxlZCIsIG1vZGlmaWNhdGlvblN0YW1wID09KChJRG9jdW1lbnRFeHRlbnNpb240KXNEb2MpLmdldE1vZGlmaWNhdGlvblN0YW1wKCkpOwotCQkJfQotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RSZXBsYWNlVGV4dCgpIHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCWxvbmcgbW9kaWZpY2F0aW9uU3RhbXAgPSAtMTsKLQkJCWlmIChzRG9jIGluc3RhbmNlb2YgSURvY3VtZW50RXh0ZW5zaW9uNCkgewotCQkJCW1vZGlmaWNhdGlvblN0YW1wID0gKChJRG9jdW1lbnRFeHRlbnNpb240KXNEb2MpLmdldE1vZGlmaWNhdGlvblN0YW1wKCk7Ci0JCQl9Ci0JCQlzRG9jLnJlcGxhY2VUZXh0KHRoaXMsIDAsIHNEb2MuZ2V0TGVuZ3RoKCksICJyZXBsYWNlZCIpOwotCi0JCQlTdHJpbmcgdGV4dCA9IHNEb2MuZ2V0VGV4dCgpOwotCQkJYXNzZXJ0RXF1YWxzKCJyZXBsYWNlZCIsIHRleHQpOwotCi0JCQlpZiAobW9kaWZpY2F0aW9uU3RhbXAgPiAtMSkKLQkJCQlhc3NlcnRUcnVlKCJyZXBsYWNlIHRleHQgbW9kaWZpY2F0aW9uIHN0YW1wIGZhaWxlZCIsIG1vZGlmaWNhdGlvblN0YW1wICE9KChJRG9jdW1lbnRFeHRlbnNpb240KXNEb2MpLmdldE1vZGlmaWNhdGlvblN0YW1wKCkpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RPdmVycmlkZVJlYWRPbmx5UmVwbGFjZVRleHQoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCXNEb2MubWFrZVJlYWRPbmx5KDAsIDEpOwotCQkJCi0JCQlsb25nIG1vZGlmaWNhdGlvblN0YW1wID0gLTE7Ci0JCQlpZiAoc0RvYyBpbnN0YW5jZW9mIElEb2N1bWVudEV4dGVuc2lvbjQpIHsKLQkJCQltb2RpZmljYXRpb25TdGFtcCA9ICgoSURvY3VtZW50RXh0ZW5zaW9uNClzRG9jKS5nZXRNb2RpZmljYXRpb25TdGFtcCgpOwotCQkJfQotCQkJCi0JCQlzRG9jLnJlcGxhY2VUZXh0KHRoaXMsIDAsIHNEb2MuZ2V0TGVuZ3RoKCksICJyZXBsYWNlZCIpOwotCQkJYXNzZXJ0Tm90U2FtZSgidGV4dCBzaG91bGQgbm90IGhhdmUgYmVlbiByZXBsYWNhYmxlIChyZWFkIG9ubHkpIiwgInJlcGxhY2VkIiwgc0RvYy5nZXRUZXh0KCkpOwotCQkJCi0JCQlpZiAobW9kaWZpY2F0aW9uU3RhbXAgPiAtMSkKLQkJCQlhc3NlcnRUcnVlKCJyZXBsYWNlIHRleHQgbW9kaWZpY2F0aW9uIHN0YW1wIChyZWFkIG9ubHkpIGZhaWxlZCIsIG1vZGlmaWNhdGlvblN0YW1wICE9KChJRG9jdW1lbnRFeHRlbnNpb240KXNEb2MpLmdldE1vZGlmaWNhdGlvblN0YW1wKCkpOwotCQkJCi0JCQltb2RpZmljYXRpb25TdGFtcCA9IC0xOwotCQkJaWYgKHNEb2MgaW5zdGFuY2VvZiBJRG9jdW1lbnRFeHRlbnNpb240KSB7Ci0JCQkJbW9kaWZpY2F0aW9uU3RhbXAgPSAoKElEb2N1bWVudEV4dGVuc2lvbjQpc0RvYykuZ2V0TW9kaWZpY2F0aW9uU3RhbXAoKSArIDE7Ci0JCQl9Ci0JCQkKLQkJCXNEb2MucmVwbGFjZVRleHQodGhpcywgMCwgc0RvYy5nZXRMZW5ndGgoKSwgInJlcGxhY2VkIiwgdHJ1ZSk7Ci0JCQlhc3NlcnRFcXVhbHMoInRleHQgc2hvdWxkIGhhdmUgYmVlbiBmb3JjZWQgcmVwbGFjZWQiLCAicmVwbGFjZWQiLCBzRG9jLmdldFRleHQoKSk7Ci0JCQkKLQkJCWlmIChtb2RpZmljYXRpb25TdGFtcCA+IC0xKQotCQkJCWFzc2VydFRydWUoInJlcGxhY2UgdGV4dCBtb2RpZmljYXRpb24gc3RhbXAgZmFpbGVkIiwgbW9kaWZpY2F0aW9uU3RhbXAgIT0oKElEb2N1bWVudEV4dGVuc2lvbjQpc0RvYykuZ2V0TW9kaWZpY2F0aW9uU3RhbXAoKSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RTZXQoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCWxvbmcgbW9kaWZpY2F0aW9uU3RhbXAgPSAtMTsKLQkJCWlmIChzRG9jIGluc3RhbmNlb2YgSURvY3VtZW50RXh0ZW5zaW9uNCkgewotCQkJCW1vZGlmaWNhdGlvblN0YW1wID0gKChJRG9jdW1lbnRFeHRlbnNpb240KXNEb2MpLmdldE1vZGlmaWNhdGlvblN0YW1wKCk7Ci0JCQl9Ci0JCQlzRG9jLnNldCgic2V0IHRleHQiKTsKLQotCQkJYXNzZXJ0RXF1YWxzKCJzZXQgdGV4dCBmYWlsZWQiLCAic2V0IHRleHQiLCBzRG9jLmdldFRleHQoKSk7Ci0JCQlpZiAobW9kaWZpY2F0aW9uU3RhbXAgPiAtMSkKLQkJCQlhc3NlcnRUcnVlKCJzZXQgdGV4dCBtb2RpZmljYXRpb24gc3RhbXAgZmFpbGVkIiwgbW9kaWZpY2F0aW9uU3RhbXAgIT0oKElEb2N1bWVudEV4dGVuc2lvbjQpc0RvYykuZ2V0TW9kaWZpY2F0aW9uU3RhbXAoKSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RTZXRXaXRoTW9kaWZpY2F0aW9uU3RhbXAoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCWlmIChzRG9jIGluc3RhbmNlb2YgSURvY3VtZW50RXh0ZW5zaW9uNCkgewotCQkJCUlEb2N1bWVudEV4dGVuc2lvbjQgZXh0NCA9IChJRG9jdW1lbnRFeHRlbnNpb240KXNEb2M7Ci0JCQkJbG9uZyBtb2RpZmljYXRpb25TdGFtcCA9IGV4dDQuZ2V0TW9kaWZpY2F0aW9uU3RhbXAoKSArIDE7Ci0JCQkJZXh0NC5zZXQoInNldCB0ZXh0IiwgbW9kaWZpY2F0aW9uU3RhbXApOwotCi0JCQkJYXNzZXJ0RXF1YWxzKCJzZXQgdGV4dCBmYWlsZWQiLCAic2V0IHRleHQiLCBzRG9jLmdldFRleHQoKSk7Ci0JCQkJYXNzZXJ0VHJ1ZSgic2V0IHRleHQgbW9kaWZpY2F0aW9uIHN0YW1wIGZhaWxlZCIsIG1vZGlmaWNhdGlvblN0YW1wID09KChJRG9jdW1lbnRFeHRlbnNpb240KXNEb2MpLmdldE1vZGlmaWNhdGlvblN0YW1wKCkpOwotCQkJfQotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZXRUZXh0KCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQl0cnkgewotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzRG9jID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlsb25nIG1vZGlmaWNhdGlvblN0YW1wID0gLTE7Ci0JCQlpZiAoc0RvYyBpbnN0YW5jZW9mIElEb2N1bWVudEV4dGVuc2lvbjQpIHsKLQkJCQltb2RpZmljYXRpb25TdGFtcCA9ICgoSURvY3VtZW50RXh0ZW5zaW9uNClzRG9jKS5nZXRNb2RpZmljYXRpb25TdGFtcCgpOwotCQkJfQotCQkJc0RvYy5zZXRUZXh0KHRoaXMsICJzZXQgdGV4dCIpOwotCi0JCQlhc3NlcnRFcXVhbHMoInNldCB0ZXh0IGZhaWxlZCIsICJzZXQgdGV4dCIsIHNEb2MuZ2V0VGV4dCgpKTsKLQkJCWlmIChtb2RpZmljYXRpb25TdGFtcCA+IC0xKQotCQkJCWFzc2VydFRydWUoInNldCB0ZXh0IG1vZGlmaWNhdGlvbiBzdGFtcCBmYWlsZWQiLCBtb2RpZmljYXRpb25TdGFtcCAhPSgoSURvY3VtZW50RXh0ZW5zaW9uNClzRG9jKS5nZXRNb2RpZmljYXRpb25TdGFtcCgpKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0RW5jb2RpbmdNZW1lbnRvKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQl0cnkgewotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzRG9jID0gbnVsbDsKLQkJCXNEb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCUVuY29kaW5nTWVtZW50byBtZW1lbnRvID0gc0RvYy5nZXRFbmNvZGluZ01lbWVudG8oKTsKLQkJCWFzc2VydE5vdE51bGwoImNvdWxkbid0IGdldCBlbmNvZGluZyBtZW1lbnRvIiwgbWVtZW50byk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0JLyoKLQkgKiBWZXJpZnkgdGhhdCB0aGUgZmlyc3QgZGVsaW1pdGVyIGlzIFxyXG4gcmVnYXJkbGVzcyBvZgotCSAqIHByZWZlcmVuY2VzIG9yIHBsYXRmb3JtCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldERldGVjdGVkTGluZURlbGltaXRlcigpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiwgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCVN0cmluZyBkZWxpbSA9IHNEb2MuZ2V0TGluZURlbGltaXRlcigpOwotCQkJYXNzZXJ0RXF1YWxzKCJ3cm9uZyBwcmVmZXJyZWQgbGluZSBkZWxtaXRlciIsICJcclxuIiwgZGVsaW0pOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZXRFbmNvZGluZ01lbWVudG8oKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCUVuY29kaW5nTWVtZW50byBtZW1lbnRvID0gbmV3IEVuY29kaW5nTWVtZW50bygpOwotCQkJc0RvYy5zZXRFbmNvZGluZ01lbWVudG8obWVtZW50byk7Ci0JCQlFbmNvZGluZ01lbWVudG8gZ290dGVuTWVtZW50byA9IHNEb2MuZ2V0RW5jb2RpbmdNZW1lbnRvKCk7Ci0JCQlhc3NlcnRFcXVhbHMoIm1lbWVudG9zIGRvbid0IG1hdGNoIiwgbWVtZW50bywgZ290dGVuTWVtZW50byk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0Jdm9pZCBzZXREZXRlY3RlZExpbmVEZWxpbWl0ZXIoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCXNEb2Muc2V0UHJlZmVycmVkTGluZURlbGltaXRlcigiXG4iKTsKLQkJCVN0cmluZyBkZWxpbSA9IHNEb2MuZ2V0UHJlZmVycmVkTGluZURlbGltaXRlcigpOwotCQkJYXNzZXJ0RXF1YWxzKCJzZXQgbGluZSBkZWxpbWl0ZXIgZmFpbGVkIiwgIlxuIiwgZGVsaW0pOwotCi0JCQlzRG9jLnNldFByZWZlcnJlZExpbmVEZWxpbWl0ZXIoIlxyXG4iKTsKLQkJCWRlbGltID0gc0RvYy5nZXRQcmVmZXJyZWRMaW5lRGVsaW1pdGVyKCk7Ci0JCQlhc3NlcnRFcXVhbHMoInNldCBsaW5lIGRlbGltaXRlciBmYWlsZWQiLCAiXHJcbiIsIGRlbGltKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U3RyaW5nTWF0Y2hlcygpIHsKLQkJLy8gVE9ETzogd2lsbCBuZWVkIGEgdGVzdCB3aGVuIHRoaXMgQVBJIGlzIGNyZWF0ZWQKLQkJLy8gSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQkvLyBJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlUG9zaXRpb24oKSB0aHJvd3MgQmFkUG9zaXRpb25DYXRlZ29yeUV4Y2VwdGlvbiwgQmFkTG9jYXRpb25FeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQl0cnkgewotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzRG9jID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlQb3NpdGlvbiBwID0gbmV3IFBvc2l0aW9uKDAsIDEwKTsKLQkJCVN0cmluZ1tdIGNhdGVnb3JpZXMgPSBzRG9jLmdldFBvc2l0aW9uQ2F0ZWdvcmllcygpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjYXRlZ29yaWVzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJc0RvYy5hZGRQb3NpdGlvbihjYXRlZ29yaWVzW2ldLCBwKTsKLQkJCX0KLQkJCWludCBmb3VuZCA9IDA7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGNhdGVnb3JpZXMubGVuZ3RoOyBpKyspIHsKLQkJCQlQb3NpdGlvbltdIHBvc2l0aW9ucyA9IHNEb2MuZ2V0UG9zaXRpb25zKGNhdGVnb3JpZXNbaV0pOwotCQkJCWZvciAoaW50IGogPSAwOyBqIDwgcG9zaXRpb25zLmxlbmd0aDsgaisrKSB7Ci0JCQkJCWlmIChwb3NpdGlvbnNbal0gPT0gcCkgewotCQkJCQkJZm91bmQrKzsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCWFzc2VydEVxdWFscygid3JvbmcgbnVtYmVyIG9mIHBvc2l0aW9ucyIsIGNhdGVnb3JpZXMubGVuZ3RoLCBmb3VuZCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZG9jdW1lbnQvVGVzdFhNTERvY3VtZW50TG9hZGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9kb2N1bWVudC9UZXN0WE1MRG9jdW1lbnRMb2FkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTU3YTA4OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9kb2N1bWVudC9UZXN0WE1MRG9jdW1lbnRMb2FkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5kb2N1bWVudDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnNlcnZpY2UuZGF0YWxvY2F0aW9uLkxvY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5YTUxEb2N1bWVudExvYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMudXRpbC5GaWxlVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMudXRpbC5Qcm9qZWN0VW56aXBVdGlsaXR5OwotCi1wdWJsaWMgY2xhc3MgVGVzdFhNTERvY3VtZW50TG9hZGVyIGV4dGVuZHMgVGVzdENhc2UgewotCQotCXByaXZhdGUgYm9vbGVhbiBpc1NldHVwID0gZmFsc2U7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZlByb2plY3ROYW1lID0iRE9DVU1FTlQtTE9BREVSIjsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBmWmlwRmlsZU5hbWUgPSAieG1sLWRvY3VtZW50LWxvYWRlci10ZXN0cy56aXAiOwotCQkKLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zZXRVcCgpOwotCQlpZiAoIXRoaXMuaXNTZXR1cCkgewotCQkJZG9TZXR1cCgpOwotCQkJdGhpcy5pc1NldHVwID0gdHJ1ZTsKLQkJfQotCX0KLQkKLQlwcml2YXRlIHZvaWQgZG9TZXR1cCgpIHRocm93cyBFeGNlcHRpb24gewkKLQkKLQkJLy8gcm9vdCBvZiB3b3Jrc3BhY2UgZGlyZWN0b3J5Ci0JCUxvY2F0aW9uIHBsYXRmb3JtTG9jYXRpb24gPSBQbGF0Zm9ybS5nZXRJbnN0YW5jZUxvY2F0aW9uKCk7Ci0JCQotCQlQcm9qZWN0VW56aXBVdGlsaXR5IHVuemlwVXRpbCA9IG5ldyBQcm9qZWN0VW56aXBVdGlsaXR5KCk7Ci0JCUZpbGUgemlwRmlsZSA9IEZpbGVVdGlsLm1ha2VGaWxlRm9yKFByb2plY3RVbnppcFV0aWxpdHkuUFJPSkVDVF9aSVBTX0ZPTERFUiwgZlppcEZpbGVOYW1lLCBQcm9qZWN0VW56aXBVdGlsaXR5LlBST0pFQ1RfWklQU19GT0xERVIpOwotCQl1bnppcFV0aWwudW56aXBBbmRJbXBvcnQoemlwRmlsZSwgcGxhdGZvcm1Mb2NhdGlvbi5nZXRVUkwoKS5nZXRGaWxlKCkpOwotCQl1bnppcFV0aWwuaW5pdEphdmFQcm9qZWN0KGZQcm9qZWN0TmFtZSk7Ci0JfQotCQotCQotCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGVOZXdFbXB0eVN0cnVjdHVyZWREb2N1bWVudCgpIHsKLQotCQlYTUxEb2N1bWVudExvYWRlciB4bWxEb2N1bWVudExvYWRlciA9IG5ldyBYTUxEb2N1bWVudExvYWRlcigpOwotCQlJRG9jdW1lbnQgZG9jdW1lbnQgPSBudWxsOwotCQkKLQkJZG9jdW1lbnQgPSB4bWxEb2N1bWVudExvYWRlci5jcmVhdGVOZXdTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJYXNzZXJ0Tm90TnVsbCgiZmFpbGVkIHRvIGNyZWF0ZSBFbXB0eSBkb2N1bWVudCIsIGRvY3VtZW50KTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdENyZWF0ZU5ld1N0cnVjdHVyZWREb2N1bWVudEZyb21GaWxlKCkgewotCQkvLyBmcm9tIGEgZmlsZQkKLQkJSUZpbGUgZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShuZXcgUGF0aChmUHJvamVjdE5hbWUgKyAiL2ZpbGVzL3NpbXBsZS54bWwiKSk7Ci0JCQkKLQkJWE1MRG9jdW1lbnRMb2FkZXIgeG1sRG9jdW1lbnRMb2FkZXIgPSBuZXcgWE1MRG9jdW1lbnRMb2FkZXIoKTsKLQkJSURvY3VtZW50IGRvY3VtZW50ID0gbnVsbDsKLQkJdHJ5IHsKLQkJCWRvY3VtZW50ID0geG1sRG9jdW1lbnRMb2FkZXIuY3JlYXRlTmV3U3RydWN0dXJlZERvY3VtZW50KGZpbGUpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsJCi0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCWFzc2VydE5vdE51bGwoImZhaWxlZCB0byBjcmVhdGUgZG9jdW1lbnQgZnJvbSBJRmlsZSIsIGRvY3VtZW50KTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdENyZWF0ZU5ld1N0cnVjdHVyZWREb2N1bWVudEZyb21JbnB1dFN0cmVhbSgpIHsKLQkJU3RyaW5nIGZpbGVMb2NhdGlvbiA9ICIvZmlsZXMvc2ltcGxlLnhtbCI7Ci0JCVN0cmluZyBhYnNvbHV0ZUZpbGVMb2NhdGlvbiA9IFBsYXRmb3JtLmdldEluc3RhbmNlTG9jYXRpb24oKSArIGZQcm9qZWN0TmFtZSArIGZpbGVMb2NhdGlvbjsKLQkJCi0JCUlGaWxlIGZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgoZlByb2plY3ROYW1lICsgIi9maWxlcy9zaW1wbGUueG1sIikpOwotCQkKLQkJWE1MRG9jdW1lbnRMb2FkZXIgeG1sRG9jdW1lbnRMb2FkZXIgPSBuZXcgWE1MRG9jdW1lbnRMb2FkZXIoKTsKLQkJSURvY3VtZW50IGRvY3VtZW50ID0gbnVsbDsKLQkJCi0JCXRyeSB7Ci0JCQlkb2N1bWVudCA9IHhtbERvY3VtZW50TG9hZGVyLmNyZWF0ZU5ld1N0cnVjdHVyZWREb2N1bWVudChhYnNvbHV0ZUZpbGVMb2NhdGlvbiwgZmlsZS5nZXRDb250ZW50cygpKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7CQotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQlhc3NlcnROb3ROdWxsKCJmYWlsZWQgdG8gY3JlYXRlIGRvY3VtZW50IGZyb20gSW5wdXRTdHJlYW0iLCBkb2N1bWVudCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGVOZXdEb2N1bWVudEZyb21SZWFkZXJXaXRoRW5jb2RpbmdSdWxlKCkgewotCQkKLQkJU3RyaW5nIGZpbGVMb2NhdGlvbiA9ICIvZmlsZXMvc2ltcGxlLnhtbCI7Ci0JCVN0cmluZyBhYnNvbHV0ZUZpbGVMb2NhdGlvbiA9IFBsYXRmb3JtLmdldEluc3RhbmNlTG9jYXRpb24oKS5nZXRVUkwoKS5nZXRQYXRoKCkudG9TdHJpbmcoKSArIGZQcm9qZWN0TmFtZSArIGZpbGVMb2NhdGlvbjsKLQkJCi0JCUlGaWxlIGZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgoZlByb2plY3ROYW1lICsgIi9maWxlcy9zaW1wbGUueG1sIikpOwotCQkKLQkJWE1MRG9jdW1lbnRMb2FkZXIgeG1sRG9jdW1lbnRMb2FkZXIgPSBuZXcgWE1MRG9jdW1lbnRMb2FkZXIoKTsKLQkJSURvY3VtZW50IGRvY3VtZW50ID0gbnVsbDsKLQkJCi0JCXRyeSB7Ci0JCQlkb2N1bWVudCA9IHhtbERvY3VtZW50TG9hZGVyLmNyZWF0ZU5ld1N0cnVjdHVyZWREb2N1bWVudChhYnNvbHV0ZUZpbGVMb2NhdGlvbiwgZmlsZS5nZXRDb250ZW50cygpKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7CQotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQlhc3NlcnROb3ROdWxsKCJmYWlsZWQgdG8gY3JlYXRlIGRvY3VtZW50IGZyb20gSW5wdXRTdHJlYW0gd2l0aCBFbmNvZGluZ1J1bGUiLCBkb2N1bWVudCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZG9jdW1lbnQvVHJhbnNpdGlvblRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9kb2N1bWVudC9UcmFuc2l0aW9uVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTU1ZTFiNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9kb2N1bWVudC9UcmFuc2l0aW9uVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuZG9jdW1lbnQ7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5maWxlYnVmZmVycy5GaWxlQnVmZmVyczsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmZpbGVidWZmZXJzLklUZXh0RmlsZUJ1ZmZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmZpbGVidWZmZXJzLklUZXh0RmlsZUJ1ZmZlck1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuQmFkTG9jYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnRFeHRlbnNpb24zOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWRQYXJ0aXRpb25pbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnRleHQuQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnRleHQucnVsZXMuU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTDsKLQotLyoqCi0gKiBAYXV0aG9yIG5zZAotICogCi0gKi8KLXB1YmxpYyBjbGFzcyBUcmFuc2l0aW9uVGVzdHMgZXh0ZW5kcyBVbnppcHBlZFByb2plY3RUZXN0ZXIgewotCi0JLyoqCi0JICogCi0JICovCi0JcHVibGljIFRyYW5zaXRpb25UZXN0cygpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQotCXB1YmxpYyB2b2lkIHRlc3RTb2Z0UmV2ZXJ0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVQYXRoID0gInRlc3RmaWxlcy94bWwvRW1wdHlGaWxlLnhtbCI7IC8vJE5PTi1OTFMtMSQKLQkJSUZpbGUgZmlsZSA9IChJRmlsZSkgZlRlc3RQcm9qZWN0LmZpbmRNZW1iZXIoZmlsZVBhdGgpOwotCQlhc3NlcnROb3ROdWxsKCJUZXN0IENhc2UgaW4gZXJyb3IuIENvdWxkIG5vdCBmaW5kIGZpbGUgIiArIGZpbGVQYXRoLCBmaWxlKTsgLy8kTk9OLU5MUy0xJAotCQlJUGF0aCBsb2NhdGlvblBhdGggPSBmaWxlLmdldExvY2F0aW9uKCk7Ci0JCUlUZXh0RmlsZUJ1ZmZlck1hbmFnZXIgYnVmZmVyTWFuYWdlciA9IEZpbGVCdWZmZXJzLmdldFRleHRGaWxlQnVmZmVyTWFuYWdlcigpOwotCQlidWZmZXJNYW5hZ2VyLmNvbm5lY3QobG9jYXRpb25QYXRoLCBudWxsKTsKLQkJSVRleHRGaWxlQnVmZmVyIGJ1ZmZlciA9IGJ1ZmZlck1hbmFnZXIuZ2V0VGV4dEZpbGVCdWZmZXIobG9jYXRpb25QYXRoKTsKLQkJSURvY3VtZW50IGRvY3VtZW50ID0gYnVmZmVyLmdldERvY3VtZW50KCk7Ci0JCWFzc2VydE5vdE51bGwoZG9jdW1lbnQpOwotCQlhc3NlcnRUcnVlKCJ3cm9uZyBjbGFzcyBvZiBkb2N1bWVudCIsIGRvY3VtZW50IGluc3RhbmNlb2YgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQpOyAvLyROT04tTkxTLTEkCi0JCWFzc2VydFRydWUoIndyb25nIHBhcnRpdGlvbmVyIGluIGRvY3VtZW50LiIsICgoSURvY3VtZW50RXh0ZW5zaW9uMykgZG9jdW1lbnQpLmdldERvY3VtZW50UGFydGl0aW9uZXIoSVN0cnVjdHVyZWRQYXJ0aXRpb25pbmcuREVGQVVMVF9TVFJVQ1RVUkVEX1BBUlRJVElPTklORykgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MKTsgLy8kTk9OLU5MUy0xJAotCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmdldE1vZGVsRm9yRWRpdCgoSVN0cnVjdHVyZWREb2N1bWVudCkgZG9jdW1lbnQpOwotCQl0cnkgewotCQkJdHJ5IHsKLQkJCQlkb2N1bWVudC5yZXBsYWNlKDAsIDAsICJfXyIpOyAvLyROT04tTkxTLTEkCi0JCQkJZG9jdW1lbnQucmVwbGFjZSgyLCAwLCAiPGEiKTsgLy8kTk9OLU5MUy0xJAotCQkJCWRvY3VtZW50LnJlcGxhY2UoNCwgMCwgIj4iKTsgLy8kTk9OLU5MUy0xJAotCQkJCWRvY3VtZW50LnJlcGxhY2UoNSwgMCwgIiAgIik7IC8vJE5PTi1OTFMtMSQKLQkJCX0KLQkJCWNhdGNoIChCYWRMb2NhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQkJYXNzZXJ0TnVsbChlKTsKLQkJCX0KLQkJCWRvY3VtZW50LnNldCgiIik7IC8vJE5PTi1OTFMtMSQKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCi0JCQlidWZmZXJNYW5hZ2VyLmRpc2Nvbm5lY3QobG9jYXRpb25QYXRoLCBudWxsKTsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2RvY3VtZW50L1VuemlwcGVkUHJvamVjdFRlc3Rlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZG9jdW1lbnQvVW56aXBwZWRQcm9qZWN0VGVzdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0N2NhMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZG9jdW1lbnQvVW56aXBwZWRQcm9qZWN0VGVzdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmRvY3VtZW50OwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3REZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlUm9vdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuU1NFTW9kZWxYTUxUZXN0c1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMudXRpbC5Qcm9qZWN0VW56aXBVdGlsaXR5OwotCi0KLS8qIAotICogTWFkZSBhYnN0cmFjdCwgc28gd29uJ3QgYmUgYXV0b21hdGljYWxseSBwaWNrZWQgdXAgYXMgdGVzdCAoc2luY2UgaW50ZW5kZWQgdG8gYmUgc3ViY2xhc3NlZCkuCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBVbnppcHBlZFByb2plY3RUZXN0ZXIgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIElQcm9qZWN0IGZUZXN0UHJvamVjdDsKLQlwcml2YXRlIHN0YXRpYyBib29sZWFuIGZUZXN0UHJvamVjdEluaXRpYWxpemVkOwotCXByaXZhdGUgc3RhdGljIGludCBuU2V0dXBzID0gMDsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9QUk9KRUNUX05BTUUgPSAib3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLm5ld3Rlc3RzIjsKLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnNldFVwKCk7Ci0JCW5TZXR1cHMrKzsKLQkJaWYgKCFmVGVzdFByb2plY3RJbml0aWFsaXplZCkgewotCQkJZ2V0QW5kQ3JlYXRlUHJvamVjdCgpOwotCQkJLy8gdW56aXAgZmlsZXMgdG8gdGhlIHJvb3Qgb2Ygd29ya3NwYWNlIGRpcmVjdG9yeQotCQkJU3RyaW5nIGRlc3RpbmF0aW9uUHJvamVjdFN0cmluZyA9IGZUZXN0UHJvamVjdC5nZXRMb2NhdGlvbigpLnRvT1NTdHJpbmcoKTsKLQkJCVN0cmluZyBkZXN0aW5hdGlvbkZvbGRlciA9IGRlc3RpbmF0aW9uUHJvamVjdFN0cmluZyArICIvIjsKLQkJCS8vIHRoaXMgemlwIGZpbGUgaXMgc2l0dGluZyBpbiB0aGUgInJvb3QiIG9mIHRlc3QgcGx1Z2luCi0JCQlGaWxlIHppcEZpbGUgPSBTU0VNb2RlbFhNTFRlc3RzUGx1Z2luLmdldFRlc3RGaWxlKCJ0ZXN0ZmlsZXMuemlwIik7Ci0JCQlQcm9qZWN0VW56aXBVdGlsaXR5IHByb2pVdGlsID0gbmV3IFByb2plY3RVbnppcFV0aWxpdHkoKTsKLQkJCXByb2pVdGlsLnVuemlwQW5kSW1wb3J0KHppcEZpbGUsIGRlc3RpbmF0aW9uRm9sZGVyKTsKLQkJCXByb2pVdGlsLmluaXRKYXZhUHJvamVjdChURVNUX1BST0pFQ1RfTkFNRSk7Ci0JCQlmVGVzdFByb2plY3QucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7Ci0JCQlmVGVzdFByb2plY3RJbml0aWFsaXplZCA9IHRydWU7Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci50ZWFyRG93bigpOwotCQluU2V0dXBzLS07Ci0JCWlmIChuU2V0dXBzID09IDApIHsKLQkJCWlmICghREVCVUcpIHsKLQkJCQkvLwkJCQlEaXNwbGF5IGRpc3BsYXkgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldERpc3BsYXkoKTsKLQkJCQkvLwkJCQlkaXNwbGF5LmFzeW5jRXhlYyhuZXcgUnVubmFibGUoKSB7Ci0JCQkJLy8JCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkvLwkJCQkJCVByb2plY3RVbnppcFV0aWxpdHkgcHJvalV0aWwgPSBuZXcgUHJvamVjdFVuemlwVXRpbGl0eSgpOwotCQkJCS8vCQkJCQkJSVByb2plY3QgcHJvaiA9IGZUZXN0UHJvamVjdDsKLQkJCQkvLwkJCQkJCWZUZXN0UHJvamVjdCA9IG51bGw7Ci0JCQkJLy8JCQkJCQl0cnkgewotCQkJCS8vCQkJCQkJCXByb2pVdGlsLmRlbGV0ZVByb2plY3QocHJvaik7Ci0JCQkJLy8JCQkJCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJCS8vCQkJCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQkJLy8JCQkJCQl9Ci0JCQkJLy8JCQkJCX0KLQkJCQkvLwkJCQl9KTsKLQkJCX0KLQkJfQotCX0KLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKLQotCXByaXZhdGUgc3RhdGljIHZvaWQgZ2V0QW5kQ3JlYXRlUHJvamVjdCgpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJLy9UZXN0c1BsdWdpbiB0ZXN0c1BsdWdpbiA9IChUZXN0c1BsdWdpbikKLQkJLy8gUGxhdGZvcm0uZ2V0UGx1Z2luKCJvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcudGVzdHMiKTsKLQkJSVdvcmtzcGFjZSB3b3Jrc3BhY2UgPSBnZXRXb3Jrc3BhY2UoKTsKLQkJSVdvcmtzcGFjZVJvb3Qgcm9vdCA9IHdvcmtzcGFjZS5nZXRSb290KCk7Ci0JCWZUZXN0UHJvamVjdCA9IHJvb3QuZ2V0UHJvamVjdChURVNUX1BST0pFQ1RfTkFNRSk7Ci0JCS8vIHRoaXMgZm9ybSBjcmVhdGVzIHByb2plY3QgYXMgImxpbmtlZCIgYmFjayB0byAnZmlsZVJvb3QnCi0JCS8vY3JlYXRlUHJvamVjdCh0ZXN0UHJvamVjdCwgbmV3IFBhdGgoZmlsZVJvb3QpLCBudWxsKTsKLQkJY3JlYXRlUHJvamVjdChmVGVzdFByb2plY3QsIG51bGwsIG51bGwpOwotCQlmVGVzdFByb2plY3QucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7Ci0JCWFzc2VydFRydWUoZlRlc3RQcm9qZWN0LmV4aXN0cygpKTsKLQkJLy8JCUlDb250YWluZXIgZG90ZXN0RmlsZXMgPSB0ZXN0UHJvamVjdC5nZXRGb2xkZXIoImRvdGVzdEZpbGVzIik7Ci0JCS8vCQlhc3NlcnRUcnVlKGRvdGVzdEZpbGVzLmV4aXN0cygpKTsKLQkJLy8JCUlSZXNvdXJjZVtdIGFsbEZvbGRlcnMgPSBkb3Rlc3RGaWxlcy5tZW1iZXJzKCk7Ci0JCS8vCQlhc3NlcnROb3ROdWxsKGFsbEZvbGRlcnMpOwotCX0KLSAKLQlwcml2YXRlIHN0YXRpYyB2b2lkIGNyZWF0ZVByb2plY3QoSVByb2plY3QgcHJvamVjdCwgSVBhdGggbG9jYXRpb25QYXRoLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJaWYgKG1vbml0b3IgPT0gbnVsbCkgewotCQkJbW9uaXRvciA9IG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCk7Ci0JCX0KLQkJbW9uaXRvci5iZWdpblRhc2soImNyZWF0aW5nIHRlc3QgcHJvamVjdCIsIDEwKTsKLQkJLy8gY3JlYXRlIHRoZSBwcm9qZWN0Ci0JCXRyeSB7Ci0JCQlpZiAoIXByb2plY3QuZXhpc3RzKCkpIHsKLQkJCQlJUHJvamVjdERlc2NyaXB0aW9uIGRlc2MgPSBwcm9qZWN0LmdldFdvcmtzcGFjZSgpLm5ld1Byb2plY3REZXNjcmlwdGlvbihwcm9qZWN0LmdldE5hbWUoKSk7Ci0JCQkJaWYgKFBsYXRmb3JtLmdldExvY2F0aW9uKCkuZXF1YWxzKGxvY2F0aW9uUGF0aCkpIHsKLQkJCQkJbG9jYXRpb25QYXRoID0gbnVsbDsKLQkJCQl9Ci0JCQkJZGVzYy5zZXRMb2NhdGlvbihsb2NhdGlvblBhdGgpOwotCQkJCXByb2plY3QuY3JlYXRlKGRlc2MsIG1vbml0b3IpOwotCQkJCW1vbml0b3IgPSBudWxsOwotCQkJfQotCQkJaWYgKCFwcm9qZWN0LmlzT3BlbigpKSB7Ci0JCQkJcHJvamVjdC5vcGVuKG1vbml0b3IpOwotCQkJCW1vbml0b3IgPSBudWxsOwotCQkJfQotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vbml0b3IgIT0gbnVsbCkgewotCQkJCW1vbml0b3IuZG9uZSgpOwotCQkJfQotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgd29ya3NwYWNlIGluc3RhbmNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVdvcmtzcGFjZSBnZXRXb3Jrc3BhY2UoKSB7Ci0JCXJldHVybiBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZG9tL0F0dHJJbXBsVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2RvbS9BdHRySW1wbFRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2YWE4MmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZG9tL0F0dHJJbXBsVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuZG9tOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JYTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTmFtZWROb2RlTWFwOwotCi1wdWJsaWMgY2xhc3MgQXR0ckltcGxUZXN0cyBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBjb250ZW50cyA9ICI8ZWxlbWVudE5hbWUgYXR0clByZWZpeDpsb2NhbD0nbG9yZW0nIC8+IjsgLy8kTk9OLU5MUy0xJAotCi0JcHVibGljIEF0dHJJbXBsVGVzdHMoKSB7Ci0JfQotCi0JcHVibGljIEF0dHJJbXBsVGVzdHMoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEF0dHJJbXBsUHJlZml4KCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSAoSURPTU1vZGVsKSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MKTsKLQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0KGNvbnRlbnRzKTsKLQkJCi0JCUVsZW1lbnQgZG9jdW1lbnRFbGVtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKS5nZXREb2N1bWVudEVsZW1lbnQoKTsKLQkJYXNzZXJ0Tm90TnVsbCgibm8gZG9jdW1lbnQgZWxlbWVudCBmb3VuZCIsIGRvY3VtZW50RWxlbWVudCk7Ci0JCU5hbWVkTm9kZU1hcCBhdHRyaWJ1dGVzID0gZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZXMoKTsKLQkJYXNzZXJ0VHJ1ZSgibm8gYXR0cmlidXRlcyBmb3VuZCIsIGF0dHJpYnV0ZXMuZ2V0TGVuZ3RoKCkgPiAwKTsKLQkJQXR0ciBhdHRyaWJ1dGUgPSAoQXR0cikgYXR0cmlidXRlcy5pdGVtKDApOwotCQlhc3NlcnRFcXVhbHMoImF0dHJpYnV0ZSBwcmVmaXggd2FzIG5vdCBhcyBleHBlY3RlZCIsICJhdHRyUHJlZml4IiwgYXR0cmlidXRlLmdldFByZWZpeCgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QXR0ckltcGxMb2NhbE5hbWUoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IChJRE9NTW9kZWwpIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwpOwotCQltb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXQoY29udGVudHMpOwotCi0JCUVsZW1lbnQgZG9jdW1lbnRFbGVtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKS5nZXREb2N1bWVudEVsZW1lbnQoKTsKLQkJYXNzZXJ0Tm90TnVsbCgibm8gZG9jdW1lbnQgZWxlbWVudCBmb3VuZCIsIGRvY3VtZW50RWxlbWVudCk7Ci0JCU5hbWVkTm9kZU1hcCBhdHRyaWJ1dGVzID0gZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZXMoKTsKLQkJYXNzZXJ0VHJ1ZSgibm8gYXR0cmlidXRlcyBmb3VuZCIsIGF0dHJpYnV0ZXMuZ2V0TGVuZ3RoKCkgPiAwKTsKLQkJQXR0ciBhdHRyaWJ1dGUgPSAoQXR0cikgYXR0cmlidXRlcy5pdGVtKDApOwotCQlhc3NlcnRFcXVhbHMoImF0dHJpYnV0ZSBsb2NhbCBuYW1lIHdhcyBub3QgYXMgZXhwZWN0ZWQiLCAibG9jYWwiLCBhdHRyaWJ1dGUuZ2V0TG9jYWxOYW1lKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3ROYW1lc3BhY2VVUklPbkNyZWF0aW9uKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSAoSURPTU1vZGVsKSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MKTsKLQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0KGNvbnRlbnRzKTsKLQotCQlBdHRyIGF0dHIgPSBtb2RlbC5nZXREb2N1bWVudCgpLmNyZWF0ZUF0dHJpYnV0ZSgic2ltcGxlIik7Ci0JCWFzc2VydE51bGwoIm5hbWVzcGFjZSB3YXMgZm91bmQiLCBhdHRyLmdldE5hbWVzcGFjZVVSSSgpKTsKLQkJCi0JCUF0dHIgYXR0cjIgPSBtb2RlbC5nZXREb2N1bWVudCgpLmNyZWF0ZUF0dHJpYnV0ZU5TKCJodHRwOi8vbG9yZW0uaXBzdW0iLCAiY29tcGxleCIpOwotCQlhc3NlcnRFcXVhbHMoImF0dHJpYnV0ZSBuYW1lc3BhY2UgVVJJIHdhcyBub3QgYXMgZXhwZWN0ZWQiLCAiaHR0cDovL2xvcmVtLmlwc3VtIiwgYXR0cjIuZ2V0TmFtZXNwYWNlVVJJKCkpOwotCQlBdHRyIGF0dHIzID0gbW9kZWwuZ2V0RG9jdW1lbnQoKS5jcmVhdGVBdHRyaWJ1dGVOUyhudWxsLCAiY29tcGxleCIpOwotCQlhc3NlcnRFcXVhbHMoImF0dHJpYnV0ZSBuYW1lc3BhY2UgVVJJIHdhcyBub3QgYXMgZXhwZWN0ZWQiLCBudWxsLCBhdHRyMy5nZXROYW1lc3BhY2VVUkkoKSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZG9tL0VsZW1lbnRJbXBsVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2RvbS9FbGVtZW50SW1wbFRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzNmZjY2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZG9tL0VsZW1lbnRJbXBsVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuZG9tOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JYTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgRWxlbWVudEltcGxUZXN0cyBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBjb250ZW50cyA9ICI8ZWxlbWVudFByZWZpeDpsb2NhbE5hbWUgYXR0clByZWZpeDpsb2NhbD0nbG9yZW0nIHhtbG5zOmVsZW1lbnRQcmVmaXg9J3VybjpwcmVmaXgnIHhtbG5zOmF0dHJpYnV0ZVByZWZpeD0ndXJuOmF0dHJpYnV0ZTpwcmVmaXgnIC8+IjsgLy8kTk9OLU5MUy0xJAotCi0JcHVibGljIEVsZW1lbnRJbXBsVGVzdHMoKSB7Ci0JfQotCi0JcHVibGljIEVsZW1lbnRJbXBsVGVzdHMoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEVsZW1lbnRJbXBsUHJlZml4KCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSAoSURPTU1vZGVsKSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MKTsKLQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0KGNvbnRlbnRzKTsKLQotCQlFbGVtZW50IGRvY3VtZW50RWxlbWVudCA9IG1vZGVsLmdldERvY3VtZW50KCkuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0JCWFzc2VydE5vdE51bGwoIm5vIGRvY3VtZW50IGVsZW1lbnQgZm91bmQiLCBkb2N1bWVudEVsZW1lbnQpOwotCQlhc3NlcnRFcXVhbHMoImF0dHJpYnV0ZSBwcmVmaXggd2FzIG5vdCBhcyBleHBlY3RlZCIsICJlbGVtZW50UHJlZml4IiwgZG9jdW1lbnRFbGVtZW50LmdldFByZWZpeCgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RWxlbWVudEltcGxMb2NhbE5hbWUoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IChJRE9NTW9kZWwpIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwpOwotCQltb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXQoY29udGVudHMpOwotCi0JCUVsZW1lbnQgZG9jdW1lbnRFbGVtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKS5nZXREb2N1bWVudEVsZW1lbnQoKTsKLQkJYXNzZXJ0Tm90TnVsbCgibm8gZG9jdW1lbnQgZWxlbWVudCBmb3VuZCIsIGRvY3VtZW50RWxlbWVudCk7Ci0JCWFzc2VydEVxdWFscygiYXR0cmlidXRlIGxvY2FsIG5hbWUgd2FzIG5vdCBhcyBleHBlY3RlZCIsICJsb2NhbE5hbWUiLCBkb2N1bWVudEVsZW1lbnQuZ2V0TG9jYWxOYW1lKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RBdHRyQmFzZWRFbGVtZW50TmFtZXNwYWNlKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSAoSURPTU1vZGVsKSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MKTsKLQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0KGNvbnRlbnRzKTsKLQotCQlFbGVtZW50IGRvY3VtZW50RWxlbWVudCA9IG1vZGVsLmdldERvY3VtZW50KCkuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0JCWFzc2VydE5vdE51bGwoIm5vIGRvY3VtZW50IGVsZW1lbnQgZm91bmQiLCBkb2N1bWVudEVsZW1lbnQpOwotCQlhc3NlcnROb3ROdWxsKCJOYW1lc3BhY2Ugd2FzIG5vdCBmb3VuZC4iLCBkb2N1bWVudEVsZW1lbnQuZ2V0TmFtZXNwYWNlVVJJKCkpOwotCQlTdHJpbmcgbmFtZXNwYWNlID0gZG9jdW1lbnRFbGVtZW50LmdldE5hbWVzcGFjZVVSSSgpOwotCQlhc3NlcnRFcXVhbHMoImF0dHJpYnV0ZSBsb2NhbCBuYW1lIHdhcyBub3QgYXMgZXhwZWN0ZWQiLCAidXJuOnByZWZpeCIsIG5hbWVzcGFjZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5hbWVzcGFjZVVSSU9uQ3JlYXRpb24oKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IChJRE9NTW9kZWwpIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwpOwotCQltb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXQoY29udGVudHMpOwotCi0JCUVsZW1lbnQgZWxlbWVudCA9IG1vZGVsLmdldERvY3VtZW50KCkuY3JlYXRlRWxlbWVudCgic2ltcGxlIik7Ci0JCWFzc2VydE51bGwoIm5hbWVzcGFjZSB3YXMgZm91bmQiLCBlbGVtZW50LmdldE5hbWVzcGFjZVVSSSgpKTsKLQotCQlFbGVtZW50IGVsZW1lbnQyID0gbW9kZWwuZ2V0RG9jdW1lbnQoKS5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly9sb3JlbS5pcHN1bSIsICJjb21wbGV4Iik7Ci0JCWFzc2VydEVxdWFscygiYXR0cmlidXRlIG5hbWVzcGFjZSBVUkkgd2FzIG5vdCBhcyBleHBlY3RlZCIsICJodHRwOi8vbG9yZW0uaXBzdW0iLCBlbGVtZW50Mi5nZXROYW1lc3BhY2VVUkkoKSk7Ci0JCUVsZW1lbnQgZWxlbWVudDMgPSBtb2RlbC5nZXREb2N1bWVudCgpLmNyZWF0ZUVsZW1lbnROUyhudWxsLCAiY29tcGxleCIpOwotCQlhc3NlcnRFcXVhbHMoImF0dHJpYnV0ZSBuYW1lc3BhY2UgVVJJIHdhcyBub3QgYXMgZXhwZWN0ZWQiLCBudWxsLCBlbGVtZW50My5nZXROYW1lc3BhY2VVUkkoKSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZG9tL05hbWVWYWxpZGF0b3JUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZG9tL05hbWVWYWxpZGF0b3JUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTI4YzY3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2RvbS9OYW1lVmFsaWRhdG9yVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5kb207Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuTmFtZVZhbGlkYXRvcjsKLQotcHVibGljIGNsYXNzIE5hbWVWYWxpZGF0b3JUZXN0cyBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXByaXZhdGUgaW50IG5UcmlhbHMgPSAxMDA7Ci0KLQlwdWJsaWMgTmFtZVZhbGlkYXRvclRlc3RzKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXByaXZhdGUgdm9pZCBkb1Rlc3QoaW50IHRlc3ROdW1iZXIsIFN0cmluZyB0ZXN0U3RyaW5nLCBCb29sZWFuIGV4cGVjdGVkVmFsaWRpdHkpIHsKLS8vCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJYm9vbGVhbiBpc1ZhbGlkID0gTmFtZVZhbGlkYXRvci5pc1ZhbGlkKHRlc3RTdHJpbmcpOwotCQlhc3NlcnRFcXVhbHMoInRlc3ROdW1iZXI6ICIgKyB0ZXN0TnVtYmVyLCBleHBlY3RlZFZhbGlkaXR5LmJvb2xlYW5WYWx1ZSgpLCBpc1ZhbGlkKTsKLS8vCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdElzVmFsaWQoKSB7Ci0JCU9iamVjdFtdW10gdGVzdGVlcyA9IG5ldyBPYmplY3RbXVtdewotCQkJCQl7ImluaXRpYWwiLEJvb2xlYW4uVFJVRX0sIC8vMAotCQkJCQl7ImZvbyIsQm9vbGVhbi5UUlVFfSwJICAvLzEKLQkJCQkJeyI0IixCb29sZWFuLkZBTFNFfSwJICAvLzIKLQkJCQkJeyI5OTk5IiwgQm9vbGVhbi5GQUxTRX0sICAvLzMKLQkJCQkJeyJmOTk5OSIsIEJvb2xlYW4uVFJVRX0sICAvLzQKLQkJCQkJeyIiLCBCb29sZWFuLkZBTFNFfSwgICAgICAvLzUKLQkJCQkJeyJnb3Qgc3BhY2UiLCBCb29sZWFuLkZBTFNFfSwgLy82Ci0JCQkJCXsiIHNwYWNlYmVmb3JlIiwgQm9vbGVhbi5GQUxTRX0sIC8vNwotCQkJCQl7InNwYWNlYWZ0ZXIgIiwgQm9vbGVhbi5GQUxTRX0sICAvLzgKLQkJCQkJeyJuczpuYW1lc3BhY2UiLCBCb29sZWFuLlRSVUV9LCAgLy85Ci0JCQkJCXsiOmZ1bm55bnMiLCBCb29sZWFuLlRSVUV9LCAgICAgLy8xMAotCQkJCQkvKiBJU1NVRTogaXMgImVuZG5zOiIgcmVhbGx5IHZhbGlkIG5hbWUgKi8KLQkJCQkJeyJlbmRuczoiLCBCb29sZWFuLlRSVUV9LCAgIC8vMTEKLQkJCQkJeyJ1c191bmRlcnNjb3JlIiwgQm9vbGVhbi5UUlVFfSwgIC8vMTIKLQkJCQkJeyJfdW5kZXJzY29yZSIsIEJvb2xlYW4uVFJVRX0sICAgLy8xMwotCQkJCQl7InVuZGVyc2NvcmVfIiwgQm9vbGVhbi5UUlVFfSwgICAgLy8xNAotCQkJCQl7ImF2ZXJ5bG9uZ25hbWV0aGF0c2hvdWxkZ29vdmVyYnVmZmVyc2l6ZWF2ZXJ5bG9uZ25hbWV0aGF0c2hvdWxkZ29vdmVyYnVmZmVyc2l6ZWF2ZXJ5bG9uZ25hbWV0aGF0c2hvdWxkZ29vdmVyYnVmZmVyc2l6ZWF2ZXJ5bG9uZ25hbWV0aGF0c2hvdWxkZ29vdmVyYnVmZmVyc2l6ZWF2ZXJ5bG9uZ25hbWV0aGF0c2hvdWxkZ29vdmVyYnVmZmVyc2l6ZWF2ZXJ5bG9uZ25hbWV0aGF0c2hvdWxkZ29vdmVyYnVmZmVyc2l6ZWF2ZXJ5bG9uZ25hbWV0aGF0c2hvdWxkZ29vdmVyYnVmZmVyc2l6ZWF2ZXJ5bG9uZ25hbWV0aGF0c2hvdWxkZ29vdmVyYnVmZmVyc2l6ZWF2ZXJ5bG9uZ25hbWV0aGF0c2hvdWxkZ29vdmVyYnVmZmVyc2l6ZWF2ZXJ5bG9uZ25hbWV0aGF0c2hvdWxkZ29vdmVyYnVmZmVyc2l6ZWF2ZXJ5bG9uZ25hbWV0aGF0c2hvdWxkZ29vdmVyYnVmZmVyc2l6ZWF2ZXJ5bG9uZ25hbWV0aGF0c2hvdWxkZ29vdmVyYnVmZmVyc2l6ZWF2ZXJ5bG9uZ25hbWV0aGF0c2hvdWxkZ29vdmVyYnVmZmVyc2l6ZWF2ZXJ5bG9uZ25hbWV0aGF0c2hvdWxkZ29vdmVyYnVmZmVyc2l6ZWF2ZXJ5bG9uZ25hbWV0aGF0c2hvdWxkZ29vdmVyYnVmZmVyc2l6ZWF2ZXJ5bG9uZ25hbWV0aGF0c2hvdWxkZ29vdmVyYnVmZmVyc2l6ZWF2ZXJ5bG9uZ25hbWV0aGF0c2hvdWxkZ29vdmVyYnVmZmVyc2l6ZWF2ZXJ5bG9uZ25hbWV0aGF0c2hvdWxkZ29vdmVyYnVmZmVyc2l6ZSIsIEJvb2xlYW4uVFJVRX0sIC8vMTUKLQkJCQkJeyI8YnJhY2tldCIsIEJvb2xlYW4uRkFMU0V9LCAvLzE2Ci0JCQkJCXsiYnJhY2tldDwiLCBCb29sZWFuLkZBTFNFfSwgLy8xNwotCQkJCQl7ImJyYWNrZXQiLCBCb29sZWFuLlRSVUV9LCAvLzE4Ci0JCQkJCXsicGVyLmlvZCIsIEJvb2xlYW4uVFJVRX0sIC8vMTkKLQkJCQkJfTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCB0ZXN0ZWVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlmb3IgKGludCBqID0gMDsgaiA8IG5UcmlhbHM7IGorKykgewotCQkJCWRvVGVzdChpLCAoU3RyaW5nKXRlc3RlZXNbaV1bMF0sIChCb29sZWFuKSB0ZXN0ZWVzW2ldWzFdKTsKLQkJCX0KLQkJfQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZG9tL05vZGVMaXN0SW1wbFRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9kb20vTm9kZUxpc3RJbXBsVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWZlYzZjYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9kb20vTm9kZUxpc3RJbXBsVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmRvbTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5kb2N1bWVudC5Ob2RlTGlzdEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JYTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi1wdWJsaWMgY2xhc3MgTm9kZUxpc3RJbXBsVGVzdHMgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwcml2YXRlIHN0YXRpYyBjbGFzcyBBY2Nlc3Nvck5vZGVMaXN0IGV4dGVuZHMgTm9kZUxpc3RJbXBsIHsKLQkJcHVibGljIE5vZGUgYXBwZW5kTm9kZShOb2RlIG5vZGUpIHsKLQkJCXJldHVybiBzdXBlci5hcHBlbmROb2RlKG5vZGUpOwotCQl9Ci0KLQkJcHVibGljIE5vZGUgaW5zZXJ0Tm9kZShOb2RlIG5vZGUsIGludCBpbmRleCkgewotCQkJcmV0dXJuIHN1cGVyLmluc2VydE5vZGUobm9kZSwgaW5kZXgpOwotCQl9Ci0KLQkJcHVibGljIE5vZGUgcmVtb3ZlTm9kZShpbnQgaW5kZXgpIHsKLQkJCXJldHVybiBzdXBlci5yZW1vdmVOb2RlKGluZGV4KTsKLQkJfQotCi0JfQotCi0JcHVibGljIE5vZGVMaXN0SW1wbFRlc3RzKCkgewotCX0KLQotCXB1YmxpYyBOb2RlTGlzdEltcGxUZXN0cyhTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SW5zZXJ0QXRJbmRleCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gKElET01Nb2RlbCkgU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5jcmVhdGVVbk1hbmFnZWRTdHJ1Y3R1cmVkTW9kZWxGb3IoQ29udGVudFR5cGVJZEZvclhNTC5Db250ZW50VHlwZUlEX1hNTCk7Ci0JCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQlBY2Nlc3Nvck5vZGVMaXN0IGxpc3QgPSBuZXcgQWNjZXNzb3JOb2RlTGlzdCgpOwotCi0JCWFzc2VydEVxdWFscygibm9uLXplcm8gbGVuZ3RoIGF0IHN0YXJ0IiwgMCwgbGlzdC5nZXRMZW5ndGgoKSk7Ci0KLQkJbGlzdC5hcHBlbmROb2RlKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlc3QwIikpOwotCQlsaXN0LmFwcGVuZE5vZGUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVzdDEiKSk7Ci0JCWxpc3QuYXBwZW5kTm9kZShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXN0MiIpKTsKLQkJbGlzdC5hcHBlbmROb2RlKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlc3QzIikpOwotCQlsaXN0LmFwcGVuZE5vZGUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVzdDQiKSk7Ci0JCWxpc3QuYXBwZW5kTm9kZShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXN0NSIpKTsKLQkJbGlzdC5hcHBlbmROb2RlKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlc3Q2IikpOwotCi0JCWxpc3QuaW5zZXJ0Tm9kZShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXN0IiksIDMpOwotCQkKLQkJYXNzZXJ0RXF1YWxzKCJsaXN0IHNpemUgZGlkIG5vdCBpbmNyZW1lbnQiLCA4LCBsaXN0LmdldExlbmd0aCgpKTsKLQkJCi0JCWFzc2VydEVxdWFscygidGVzdDAgd2FzIG5vdCBhdCBleHBlY3RlZCBpbmRleCIsICJ0ZXN0MCIsIGxpc3QuaXRlbSgwKS5nZXRMb2NhbE5hbWUoKSk7Ci0JCWFzc2VydEVxdWFscygidGVzdDEgd2FzIG5vdCBhdCBleHBlY3RlZCBpbmRleCIsICJ0ZXN0MSIsIGxpc3QuaXRlbSgxKS5nZXRMb2NhbE5hbWUoKSk7Ci0JCWFzc2VydEVxdWFscygidGVzdDIgd2FzIG5vdCBhdCBleHBlY3RlZCBpbmRleCIsICJ0ZXN0MiIsIGxpc3QuaXRlbSgyKS5nZXRMb2NhbE5hbWUoKSk7Ci0JCWFzc2VydEVxdWFscygidGVzdCB3YXMgbm90IGF0IGV4cGVjdGVkIGluZGV4IiwgICJ0ZXN0IiwgIGxpc3QuaXRlbSgzKS5nZXRMb2NhbE5hbWUoKSk7Ci0JCWFzc2VydEVxdWFscygidGVzdDMgd2FzIG5vdCBhdCBleHBlY3RlZCBpbmRleCIsICJ0ZXN0MyIsIGxpc3QuaXRlbSg0KS5nZXRMb2NhbE5hbWUoKSk7Ci0JCWFzc2VydEVxdWFscygidGVzdDQgd2FzIG5vdCBhdCBleHBlY3RlZCBpbmRleCIsICJ0ZXN0NCIsIGxpc3QuaXRlbSg1KS5nZXRMb2NhbE5hbWUoKSk7Ci0JCWFzc2VydEVxdWFscygidGVzdDUgd2FzIG5vdCBhdCBleHBlY3RlZCBpbmRleCIsICJ0ZXN0NSIsIGxpc3QuaXRlbSg2KS5nZXRMb2NhbE5hbWUoKSk7Ci0JCWFzc2VydEVxdWFscygidGVzdDYgd2FzIG5vdCBhdCBleHBlY3RlZCBpbmRleCIsICJ0ZXN0NiIsIGxpc3QuaXRlbSg3KS5nZXRMb2NhbE5hbWUoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFJlbW92ZUZyb21JbmRleCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gKElET01Nb2RlbCkgU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5jcmVhdGVVbk1hbmFnZWRTdHJ1Y3R1cmVkTW9kZWxGb3IoQ29udGVudFR5cGVJZEZvclhNTC5Db250ZW50VHlwZUlEX1hNTCk7Ci0JCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQlBY2Nlc3Nvck5vZGVMaXN0IGxpc3QgPSBuZXcgQWNjZXNzb3JOb2RlTGlzdCgpOwotCi0JCWxpc3QuYXBwZW5kTm9kZShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXN0MCIpKTsKLQkJbGlzdC5hcHBlbmROb2RlKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlc3QxIikpOwotCQlsaXN0LmFwcGVuZE5vZGUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVzdDIiKSk7Ci0JCWxpc3QuYXBwZW5kTm9kZShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXN0MyIpKTsKLQkJbGlzdC5hcHBlbmROb2RlKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlc3Q0IikpOwotCQlsaXN0LmFwcGVuZE5vZGUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVzdDUiKSk7Ci0JCWxpc3QuYXBwZW5kTm9kZShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXN0NiIpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3cm9uZyBsZW5ndGggYWZ0ZXIgc2V0dXAiLCA3LCBsaXN0LmdldExlbmd0aCgpKTsKLQotCQlOb2RlIGV4Y2lzZWQgPSBsaXN0LnJlbW92ZU5vZGUoMyk7Ci0JCWFzc2VydEVxdWFscygidGVzdDMgd2FzIG5vdCB0aGUgb25lIHJlbW92ZWQiLCAidGVzdDMiLCBleGNpc2VkLmdldExvY2FsTmFtZSgpKTsKLQotCQlhc3NlcnRFcXVhbHMoIndyb25nIGxlbmd0aCBhZnRlciByZW1vdmFsIiwgNiwgbGlzdC5nZXRMZW5ndGgoKSk7CQkKLQkJYXNzZXJ0RXF1YWxzKCJ0ZXN0MCB3YXMgbm90IGF0IGV4cGVjdGVkIGluZGV4IiwgInRlc3QwIiwgbGlzdC5pdGVtKDApLmdldExvY2FsTmFtZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ0ZXN0MSB3YXMgbm90IGF0IGV4cGVjdGVkIGluZGV4IiwgInRlc3QxIiwgbGlzdC5pdGVtKDEpLmdldExvY2FsTmFtZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ0ZXN0MiB3YXMgbm90IGF0IGV4cGVjdGVkIGluZGV4IiwgInRlc3QyIiwgbGlzdC5pdGVtKDIpLmdldExvY2FsTmFtZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ0ZXN0NCB3YXMgbm90IGF0IGV4cGVjdGVkIGluZGV4IiwgInRlc3Q0IiwgbGlzdC5pdGVtKDMpLmdldExvY2FsTmFtZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ0ZXN0NSB3YXMgbm90IGF0IGV4cGVjdGVkIGluZGV4IiwgInRlc3Q1IiwgbGlzdC5pdGVtKDQpLmdldExvY2FsTmFtZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ0ZXN0NiB3YXMgbm90IGF0IGV4cGVjdGVkIGluZGV4IiwgInRlc3Q2IiwgbGlzdC5pdGVtKDUpLmdldExvY2FsTmFtZSgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SW5zZXJ0QXROZWdhdGl2ZUluZGV4KCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSAoSURPTU1vZGVsKSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MKTsKLQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCUFjY2Vzc29yTm9kZUxpc3QgbGlzdCA9IG5ldyBBY2Nlc3Nvck5vZGVMaXN0KCk7Ci0KLQkJLy8gYXBwZW5kcyBvbiBiYWQgdmFsdWUKLQkJbGlzdC5pbnNlcnROb2RlKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlc3QtMSIpLC0xKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3cm9uZyBsZW5ndGggYWZ0ZXIgaW5zZXJ0IGF0IG5lZ2F0aXZlIGluZGV4IiwgMSwgbGlzdC5nZXRMZW5ndGgoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFJlbW92ZUZyb21OZWdhdGl2ZUluZGV4KCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSAoSURPTU1vZGVsKSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MKTsKLQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCUFjY2Vzc29yTm9kZUxpc3QgbGlzdCA9IG5ldyBBY2Nlc3Nvck5vZGVMaXN0KCk7Ci0KLQkJbGlzdC5hcHBlbmROb2RlKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlc3QtMSIpKTsKLQkJLy8gaWdub3JlcyBiYWQgaW5kZXgKLQkJbGlzdC5yZW1vdmVOb2RlKC0xKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3cm9uZyBsZW5ndGggYWZ0ZXIgcmVtb3ZhbCBhdCBuZWdhdGl2ZSBpbmRleCIsIDEsIGxpc3QuZ2V0TGVuZ3RoKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RJbnNlcnRBdEV4Y2Vzc2l2ZUluZGV4KCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSAoSURPTU1vZGVsKSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MKTsKLQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCUFjY2Vzc29yTm9kZUxpc3QgbGlzdCA9IG5ldyBBY2Nlc3Nvck5vZGVMaXN0KCk7Ci0KLQkJLy8gYXBwZW5kcyBvbiBiYWQgdmFsdWUKLQkJbGlzdC5pbnNlcnROb2RlKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlc3QzIiksIDMpOwotCQlhc3NlcnRFcXVhbHMoIndyb25nIGxlbmd0aCBhZnRlciBpbnNlcnQgYXQgb3V0IG9mIGJvdW5kcyBpbmRleCIsIDEsIGxpc3QuZ2V0TGVuZ3RoKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RSZW1vdmVGcm9tRXhjZXNzaXZlSW5kZXgoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IChJRE9NTW9kZWwpIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwpOwotCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJQWNjZXNzb3JOb2RlTGlzdCBsaXN0ID0gbmV3IEFjY2Vzc29yTm9kZUxpc3QoKTsKLQotCQlsaXN0LmFwcGVuZE5vZGUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVzdDAiKSk7Ci0JCS8vIGlnbm9yZXMgYmFkIGluZGV4Ci0JCWxpc3QucmVtb3ZlTm9kZSgzKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3cm9uZyBsZW5ndGggYWZ0ZXIgcmVtb3ZhbCBhdCBub25leGlzdGVudCBpbmRleCIsIDEsIGxpc3QuZ2V0TGVuZ3RoKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RBcHBlbmQoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IChJRE9NTW9kZWwpIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwpOwotCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJQWNjZXNzb3JOb2RlTGlzdCBsaXN0ID0gbmV3IEFjY2Vzc29yTm9kZUxpc3QoKTsKLQotCQlhc3NlcnRFcXVhbHMoIm5vbi16ZXJvIGxlbmd0aCBhdCBzdGFydCIsIDAsIGxpc3QuZ2V0TGVuZ3RoKCkpOwotCi0JCWxpc3QuYXBwZW5kTm9kZShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXN0MSIpKTsKLQkJYXNzZXJ0RXF1YWxzKCJsaXN0IHNpemUgZGlkIG5vdCBpbmNyZW1lbnQiLCAxLCBsaXN0LmdldExlbmd0aCgpKTsKLQotCQlsaXN0LmFwcGVuZE5vZGUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVzdDIiKSk7Ci0JCWFzc2VydEVxdWFscygibGlzdCBzaXplIGRpZCBub3QgaW5jcmVtZW50IiwgMiwgbGlzdC5nZXRMZW5ndGgoKSk7Ci0KLQkJbGlzdC5hcHBlbmROb2RlKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlc3QzIikpOwotCQlhc3NlcnRFcXVhbHMoImxpc3Qgc2l6ZSBkaWQgbm90IGluY3JlbWVudCIsIDMsIGxpc3QuZ2V0TGVuZ3RoKCkpOwotCi0JCU5vZGUgZWxlbWVudDQgPSBsaXN0LmFwcGVuZE5vZGUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVzdDQiKSk7Ci0JCWFzc2VydEVxdWFscygibGlzdCBzaXplIGRpZCBub3QgaW5jcmVtZW50IiwgNCwgbGlzdC5nZXRMZW5ndGgoKSk7Ci0JCWFzc2VydEVxdWFscygidGVzdDQgbm90IHJldHVybmVkIGZyb20gYXBwZW5kIiwgInRlc3Q0IiwgZWxlbWVudDQuZ2V0TG9jYWxOYW1lKCkpOwotCQkKLQkJTm9kZSBlbGVtZW50NSA9IGxpc3QuYXBwZW5kTm9kZShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXN0NSIpKTsKLQkJYXNzZXJ0RXF1YWxzKCJsaXN0IHNpemUgZGlkIG5vdCBpbmNyZW1lbnQiLCA1LCBsaXN0LmdldExlbmd0aCgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ0ZXN0NSBub3QgcmV0dXJuZWQgZnJvbSBhcHBlbmQiLCAidGVzdDUiLCBlbGVtZW50NS5nZXRMb2NhbE5hbWUoKSk7Ci0JCQotCQlOb2RlIGVsZW1lbnQ2ID0gbGlzdC5hcHBlbmROb2RlKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlc3Q2IikpOwotCQlhc3NlcnRFcXVhbHMoImxpc3Qgc2l6ZSBkaWQgbm90IGluY3JlbWVudCIsIDYsIGxpc3QuZ2V0TGVuZ3RoKCkpOwotCQlhc3NlcnRFcXVhbHMoInRlc3Q2IG5vdCByZXR1cm5lZCBmcm9tIGFwcGVuZCIsICJ0ZXN0NiIsIGVsZW1lbnQ2LmdldExvY2FsTmFtZSgpKTsKLQkJCi0JCU5vZGUgZWxlbWVudDcgPSBsaXN0LmFwcGVuZE5vZGUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVzdDciKSk7Ci0JCWFzc2VydEVxdWFscygibGlzdCBzaXplIGRpZCBub3QgaW5jcmVtZW50IiwgNywgbGlzdC5nZXRMZW5ndGgoKSk7Ci0JCWFzc2VydEVxdWFscygidGVzdDcgbm90IHJldHVybmVkIGZyb20gYXBwZW5kIiwgInRlc3Q3IiwgZWxlbWVudDcuZ2V0TG9jYWxOYW1lKCkpOwotCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L1Rlc3RGb3JtYXRQcm9jZXNzb3JYTUwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC9UZXN0Rm9ybWF0UHJvY2Vzc29yWE1MLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkZDFhMTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L1Rlc3RGb3JtYXRQcm9jZXNzb3JYTUwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI1OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IEVjbGlwc2UgRm91bmRhdGlvbgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIEplc3BlciBTdGVlbiBN+GxsZXIgLSBqZXNwZXJAc2Vsc2thYmV0Lm9yZwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5mb3JtYXQ7Ci0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUNvbnRhaW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZm9ybWF0LkFic3RyYWN0U3RydWN0dXJlZEZvcm1hdFByb2Nlc3NvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZm9ybWF0LklTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnV0aWwuVVJJUmVzb2x2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmZvcm1hdC5Gb3JtYXRQcm9jZXNzb3JYTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmZvcm1hdC5TdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXNYTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWwuU3RyaW5nQ29tcGFyZVV0aWw7Ci0KLS8qKgotICogQGRlcHJlY2F0ZWQgVXNlIFRlc3RQYXJ0aXRpb25Gb3JtYXR0ZXJYTUwgaW5zdGVhZAotICoKLSAqLwotcHVibGljIGNsYXNzIFRlc3RGb3JtYXRQcm9jZXNzb3JYTUwgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIFNQTElUX01VTFRJX0FUVFJTID0gZmFsc2U7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5ERU5UID0gIlx0IjsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gQ0xFQVJfQUxMX0JMQU5LX0xJTkVTID0gZmFsc2U7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFYX0xJTkVfV0lEVEggPSA3MjsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBVVEZfOCA9ICJVVEYtOCI7Ci0KLQlwcml2YXRlIFN0cmluZ0NvbXBhcmVVdGlsIGZTdHJpbmdDb21wYXJlVXRpbDsKLQotCXB1YmxpYyBUZXN0Rm9ybWF0UHJvY2Vzc29yWE1MKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXByaXZhdGUgRm9ybWF0UHJvY2Vzc29yWE1MIGZvcm1hdFByb2Nlc3NvcjsKLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWZvcm1hdFByb2Nlc3NvciA9IG5ldyBGb3JtYXRQcm9jZXNzb3JYTUwoKTsKLQkJZlN0cmluZ0NvbXBhcmVVdGlsID0gbmV3IFN0cmluZ0NvbXBhcmVVdGlsKCk7Ci0JfQotCi0JLyoqCi0JICogbXVzdCByZWxlYXNlIG1vZGVsIChmcm9tIGVkaXQpIGFmdGVyCi0JICogCi0JICogQHBhcmFtIGZpbGVuYW1lCi0JICogICAgICAgICAgICByZWxhdGl2ZSB0byB0aGlzIGNsYXNzIChUZXN0U3RydWN0dXJlZFBhcnRpdGlvbmVyKQotCSAqLwotCXByaXZhdGUgSVN0cnVjdHVyZWRNb2RlbCBnZXRNb2RlbEZvckVkaXQoZmluYWwgU3RyaW5nIGZpbGVuYW1lKSB7Ci0KLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCQlJbnB1dFN0cmVhbSBpblN0cmVhbSA9IGdldENsYXNzKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbShmaWxlbmFtZSk7Ci0JCQlpZiAoaW5TdHJlYW0gPT0gbnVsbCkKLQkJCQl0aHJvdyBuZXcgRmlsZU5vdEZvdW5kRXhjZXB0aW9uKCJDYW4ndCBmaWxlIHJlc291cmNlIHN0cmVhbSAiICsgZmlsZW5hbWUpOwotCQkJZmluYWwgU3RyaW5nIGJhc2VGaWxlID0gZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZShmaWxlbmFtZSkudG9TdHJpbmcoKTsKLQkJCW1vZGVsID0gbW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yRWRpdChiYXNlRmlsZSwgaW5TdHJlYW0sIG5ldyBVUklSZXNvbHZlcigpIHsKLQotCQkJCVN0cmluZyBmQmFzZSA9IGJhc2VGaWxlOwotCi0JCQkJcHVibGljIFN0cmluZyBnZXRGaWxlQmFzZUxvY2F0aW9uKCkgewotCQkJCQlyZXR1cm4gZkJhc2U7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRMb2NhdGlvbkJ5VVJJKFN0cmluZyB1cmkpIHsKLQkJCQkJcmV0dXJuIGdldExvY2F0aW9uQnlVUkkodXJpLCBmQmFzZSk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRMb2NhdGlvbkJ5VVJJKFN0cmluZyB1cmksIGJvb2xlYW4gcmVzb2x2ZUNyb3NzUHJvamVjdExpbmtzKSB7Ci0JCQkJCXJldHVybiBnZXRMb2NhdGlvbkJ5VVJJKHVyaSk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRMb2NhdGlvbkJ5VVJJKFN0cmluZyB1cmksIFN0cmluZyBiYXNlUmVmZXJlbmNlKSB7Ci0JCQkJCWludCBsYXN0U2xhc2ggPSBiYXNlUmVmZXJlbmNlLmxhc3RJbmRleE9mKCIvIik7Ci0JCQkJCWlmIChsYXN0U2xhc2ggPiAwKQotCQkJCQkJcmV0dXJuIGJhc2VSZWZlcmVuY2Uuc3Vic3RyaW5nKDAsIGxhc3RTbGFzaCArIDEpICsgdXJpOwotCQkJCQlyZXR1cm4gYmFzZVJlZmVyZW5jZTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldExvY2F0aW9uQnlVUkkoU3RyaW5nIHVyaSwgU3RyaW5nIGJhc2VSZWZlcmVuY2UsIGJvb2xlYW4gcmVzb2x2ZUNyb3NzUHJvamVjdExpbmtzKSB7Ci0JCQkJCXJldHVybiBnZXRMb2NhdGlvbkJ5VVJJKHVyaSwgYmFzZVJlZmVyZW5jZSk7Ci0JCQkJfQotCi0JCQkJcHVibGljIElQcm9qZWN0IGdldFByb2plY3QoKSB7Ci0JCQkJCXJldHVybiBudWxsOwotCQkJCX0KLQotCQkJCXB1YmxpYyBJQ29udGFpbmVyIGdldFJvb3RMb2NhdGlvbigpIHsKLQkJCQkJcmV0dXJuIG51bGw7Ci0JCQkJfQotCi0JCQkJcHVibGljIElucHV0U3RyZWFtIGdldFVSSVN0cmVhbShTdHJpbmcgdXJpKSB7Ci0JCQkJCXJldHVybiBnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0oZ2V0TG9jYXRpb25CeVVSSSh1cmkpKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBzZXRGaWxlQmFzZUxvY2F0aW9uKFN0cmluZyBuZXdMb2NhdGlvbikgewotCQkJCQl0aGlzLmZCYXNlID0gbmV3TG9jYXRpb247Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgc2V0UHJvamVjdChJUHJvamVjdCBuZXdQcm9qZWN0KSB7Ci0JCQkJfQotCQkJfSk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGV4KSB7Ci0JCQlleC5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQlyZXR1cm4gbW9kZWw7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKFN0cmluZyBiZWZvcmVQYXRoLCBTdHJpbmcgYWZ0ZXJQYXRoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoYmVmb3JlUGF0aCwgYWZ0ZXJQYXRoLCB0cnVlKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKFN0cmluZyBiZWZvcmVQYXRoLCBTdHJpbmcgYWZ0ZXJQYXRoLCBib29sZWFuIHJlc2V0UHJlZmVyZW5jZXMpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgYmVmb3JlTW9kZWwgPSBudWxsLCBhZnRlck1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCWJlZm9yZU1vZGVsID0gZ2V0TW9kZWxGb3JFZGl0KGJlZm9yZVBhdGgpOwotCQkJYXNzZXJ0Tm90TnVsbCgiY291bGQgbm90IHJldHJpZXZlIHN0cnVjdHVyZWQgbW9kZWwgZm9yIDogIiArIGJlZm9yZVBhdGgsIGJlZm9yZU1vZGVsKTsKLQotCQkJYWZ0ZXJNb2RlbCA9IGdldE1vZGVsRm9yRWRpdChhZnRlclBhdGgpOwotCQkJYXNzZXJ0Tm90TnVsbCgiY291bGQgbm90IHJldHJpZXZlIHN0cnVjdHVyZWQgbW9kZWwgZm9yIDogIiArIGFmdGVyUGF0aCwgYWZ0ZXJNb2RlbCk7Ci0KLQkJCWlmIChyZXNldFByZWZlcmVuY2VzKQotCQkJCXJlc2V0UHJlZmVyZW5jZXNUb0RlZmF1bHQoKTsKLQotCQkJKChBYnN0cmFjdFN0cnVjdHVyZWRGb3JtYXRQcm9jZXNzb3IpIGZvcm1hdFByb2Nlc3NvcikucmVmcmVzaEZvcm1hdFByZWZlcmVuY2VzID0gZmFsc2U7Ci0JCQlmb3JtYXRQcm9jZXNzb3IuZm9ybWF0TW9kZWwoYmVmb3JlTW9kZWwpOwotCQkJKChBYnN0cmFjdFN0cnVjdHVyZWRGb3JtYXRQcm9jZXNzb3IpIGZvcm1hdFByb2Nlc3NvcikucmVmcmVzaEZvcm1hdFByZWZlcmVuY2VzID0gdHJ1ZTsKLQotCQkJQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGZvcm1hdHRlZEJ5dGVzID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOwotCQkJYmVmb3JlTW9kZWwuc2F2ZShmb3JtYXR0ZWRCeXRlcyk7IC8vICJiZWZvcmVNb2RlbCIgc2hvdWxkIG5vdyBiZQotCQkJLy8gYWZ0ZXIgdGhlIGZvcm1hdHRlcgotCi0JCQlCeXRlQXJyYXlPdXRwdXRTdHJlYW0gYWZ0ZXJCeXRlcyA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKLQkJCWFmdGVyTW9kZWwuc2F2ZShhZnRlckJ5dGVzKTsKLQotCQkJU3RyaW5nIGV4cGVjdGVkQ29udGVudHMgPSBuZXcgU3RyaW5nKGFmdGVyQnl0ZXMudG9CeXRlQXJyYXkoKSwgVVRGXzgpOwotCQkJU3RyaW5nIGFjdHVhbENvbnRlbnRzID0gbmV3IFN0cmluZyhmb3JtYXR0ZWRCeXRlcy50b0J5dGVBcnJheSgpLCBVVEZfOCk7Ci0JCQlhc3NlcnRUcnVlKCJGb3JtYXR0ZWQgZG9jdW1lbnQgZGlmZmVycyBmcm9tIHRoZSBleHBlY3RlZC5cbkV4cGVjdGVkIENvbnRlbnRzOlxuIiArIGV4cGVjdGVkQ29udGVudHMgKyAiXG5BY3R1YWwgQ29udGVudHM6XG4iICsgYWN0dWFsQ29udGVudHMsIGZTdHJpbmdDb21wYXJlVXRpbC5lcXVhbHNJZ25vcmVMaW5lU2VwZXJhdG9yKGV4cGVjdGVkQ29udGVudHMsIGFjdHVhbENvbnRlbnRzKSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAoYmVmb3JlTW9kZWwgIT0gbnVsbCkKLQkJCQliZWZvcmVNb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCWlmIChhZnRlck1vZGVsICE9IG51bGwpCi0JCQkJYWZ0ZXJNb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCByZXNldFByZWZlcmVuY2VzVG9EZWZhdWx0KCkgewotCQlJU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzIGZvcm1hdFByZWZlcmVuY2VzID0gZm9ybWF0UHJvY2Vzc29yLmdldEZvcm1hdFByZWZlcmVuY2VzKCk7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldExpbmVXaWR0aChNQVhfTElORV9XSURUSCk7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldENsZWFyQWxsQmxhbmtMaW5lcyhDTEVBUl9BTExfQkxBTktfTElORVMpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRJbmRlbnQoSU5ERU5UKTsKLQkJKChTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXNYTUwpIGZvcm1hdFByZWZlcmVuY2VzKS5zZXRTcGxpdE11bHRpQXR0cnMoU1BMSVRfTVVMVElfQVRUUlMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTaW1wbGVYbWwoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy94bWwvc2ltcGxlLXN0YW5kYWxvbmUueG1sIiwgInRlc3RmaWxlcy94bWwvc2ltcGxlLXN0YW5kYWxvbmUtZm10LnhtbCIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RQcmVzZXJ2ZUZvcm1hdCgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL3htbC94bWwtc3BhY2UtcHJlc2VydmUtc3RhbmRhbG9uZS54bWwiLCAidGVzdGZpbGVzL3htbC94bWwtc3BhY2UtcHJlc2VydmUtc3RhbmRhbG9uZS1mbXQueG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFByZXNlcnZlRm9ybWF0RFREKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0ZmlsZXMveG1sL3htbC1zcGFjZS1wcmVzZXJ2ZS1kdGQueG1sIiwgInRlc3RmaWxlcy94bWwveG1sLXNwYWNlLXByZXNlcnZlLWR0ZC1mbXQueG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE9uZUxpbmVGb3JtYXQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQkvLyBCVUcxMTU3MTYKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0ZmlsZXMveG1sL29uZWxpbmUueG1sIiwgInRlc3RmaWxlcy94bWwvb25lbGluZS1mbXQueG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE9uZUxpbmVUZXh0Tm9kZUZvcm1hdCgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCS8vIEJVRzE2NjQ0MQotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy94bWwvb25lbGluZVRleHROb2RlLnhtbCIsICJ0ZXN0ZmlsZXMveG1sL29uZWxpbmVUZXh0Tm9kZS1mbXQueG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEVtcHR5Q29udGVudE5vZGVGb3JtYXQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQkvLyBCVUcxNzQyNDMKLQkJSVN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlcyBmb3JtYXRQcmVmZXJlbmNlcyA9IGZvcm1hdFByb2Nlc3Nvci5nZXRGb3JtYXRQcmVmZXJlbmNlcygpOwotCQkoKFN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlc1hNTCkgZm9ybWF0UHJlZmVyZW5jZXMpLnNldFNwbGl0TXVsdGlBdHRycyh0cnVlKTsKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0ZmlsZXMveG1sL3VzZXRhZ3N3aXRoZW1wdHljb250ZW50LnhtbCIsICJ0ZXN0ZmlsZXMveG1sL3VzZXRhZ3N3aXRoZW1wdHljb250ZW50LWZtdC54bWwiLCBmYWxzZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFhTTEZvcm1hdCgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCS8vIEJVRzEwODA3NAotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy94bWwveHNsYXR0cmlidXRldGV4dC54c2wiLCAidGVzdGZpbGVzL3htbC94c2xhdHRyaWJ1dGV0ZXh0LWZtdC54c2wiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RW50aXR5Rm9ybWF0KCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJLy8gQlVHMTAyMDc2Ci0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL3htbC9lbnRpdGllcy54bWwiLCAidGVzdGZpbGVzL3htbC9lbnRpdGllcy1mbXQueG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFByZXNlcnZlUENEQVRBRm9ybWF0KCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJLy8gQlVHODQ2ODgKLQkJSVN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlcyBmb3JtYXRQcmVmZXJlbmNlcyA9IGZvcm1hdFByb2Nlc3Nvci5nZXRGb3JtYXRQcmVmZXJlbmNlcygpOwotCQkoKFN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlc1hNTCkgZm9ybWF0UHJlZmVyZW5jZXMpLnNldFByZXNlcnZlUENEQVRBQ29udGVudCh0cnVlKTsKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0ZmlsZXMveG1sL3htbC1wcmVzZXJ2ZXBjZGF0YS54bWwiLCAidGVzdGZpbGVzL3htbC94bWwtcHJlc2VydmVwY2RhdGEteWVzLWZtdC54bWwiLCBmYWxzZSk7Ci0KLQkJKChTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXNYTUwpIGZvcm1hdFByZWZlcmVuY2VzKS5zZXRQcmVzZXJ2ZVBDREFUQUNvbnRlbnQoZmFsc2UpOwotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy94bWwveG1sLXByZXNlcnZlcGNkYXRhLnhtbCIsICJ0ZXN0ZmlsZXMveG1sL3htbC1wcmVzZXJ2ZXBjZGF0YS1uby1mbXQueG1sIiwgZmFsc2UpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RQcmVzZXJ2ZUNEQVRBRm9ybWF0KCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJLy8gQlVHMTYxMzMwCi0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL3htbC91c2VjZGF0YS54bWwiLCAidGVzdGZpbGVzL3htbC91c2VjZGF0YS1mbXQueG1sIik7Ci0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL3htbC91c2VjZGF0YTIueG1sIiwgInRlc3RmaWxlcy94bWwvdXNlY2RhdGEyLWZtdC54bWwiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U3BsaXRBdHRyaWJ1dGVzRm9ybWF0KCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJLy8gQlVHMTEzNTg0Ci0JCUlTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXMgZm9ybWF0UHJlZmVyZW5jZXMgPSBmb3JtYXRQcm9jZXNzb3IuZ2V0Rm9ybWF0UHJlZmVyZW5jZXMoKTsKLQkJKChTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXNYTUwpIGZvcm1hdFByZWZlcmVuY2VzKS5zZXRTcGxpdE11bHRpQXR0cnModHJ1ZSk7Ci0JCSgoU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzWE1MKSBmb3JtYXRQcmVmZXJlbmNlcykuc2V0QWxpZ25FbmRCcmFja2V0KGZhbHNlKTsKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0ZmlsZXMveG1sL211bHRpYXR0cmlidXRlcy54bWwiLCAidGVzdGZpbGVzL3htbC9tdWx0aWF0dHJpYnV0ZXMteWVzc3BsaXQtbm9hbGlnbi1mbXQueG1sIiwgZmFsc2UpOwotCi0JCSgoU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzWE1MKSBmb3JtYXRQcmVmZXJlbmNlcykuc2V0U3BsaXRNdWx0aUF0dHJzKGZhbHNlKTsKLQkJKChTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXNYTUwpIGZvcm1hdFByZWZlcmVuY2VzKS5zZXRBbGlnbkVuZEJyYWNrZXQoZmFsc2UpOwotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy94bWwvbXVsdGlhdHRyaWJ1dGVzLnhtbCIsICJ0ZXN0ZmlsZXMveG1sL211bHRpYXR0cmlidXRlcy1ub3NwbGl0LW5vYWxpZ24tZm10LnhtbCIsIGZhbHNlKTsKLQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RBbGlnbkVuZEJyYWNrZXRGb3JtYXQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQkvLyBCVUcxMTM1ODQKLQkJSVN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlcyBmb3JtYXRQcmVmZXJlbmNlcyA9IGZvcm1hdFByb2Nlc3Nvci5nZXRGb3JtYXRQcmVmZXJlbmNlcygpOwotCQkoKFN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlc1hNTCkgZm9ybWF0UHJlZmVyZW5jZXMpLnNldFNwbGl0TXVsdGlBdHRycyhmYWxzZSk7Ci0JCSgoU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzWE1MKSBmb3JtYXRQcmVmZXJlbmNlcykuc2V0QWxpZ25FbmRCcmFja2V0KHRydWUpOwotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy94bWwvbXVsdGlhdHRyaWJ1dGVzLnhtbCIsICJ0ZXN0ZmlsZXMveG1sL211bHRpYXR0cmlidXRlcy1ub3NwbGl0LXllc2FsaWduLWZtdC54bWwiLCBmYWxzZSk7Ci0KLQkJKChTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXNYTUwpIGZvcm1hdFByZWZlcmVuY2VzKS5zZXRTcGxpdE11bHRpQXR0cnModHJ1ZSk7Ci0JCSgoU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzWE1MKSBmb3JtYXRQcmVmZXJlbmNlcykuc2V0QWxpZ25FbmRCcmFja2V0KHRydWUpOwotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy94bWwvbXVsdGlhdHRyaWJ1dGVzLnhtbCIsICJ0ZXN0ZmlsZXMveG1sL211bHRpYXR0cmlidXRlcy15ZXNzcGxpdC15ZXNhbGlnbi1mbXQueG1sIiwgZmFsc2UpOwotCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L1Rlc3RQYXJ0aXRpb25Gb3JtYXR0ZXJYTUwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC9UZXN0UGFydGl0aW9uRm9ybWF0dGVyWE1MLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkOTJmODQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L1Rlc3RQYXJ0aXRpb25Gb3JtYXR0ZXJYTUwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5mb3JtYXQ7Ci0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUNvbnRhaW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkJhZExvY2F0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnRleHQuZWRpdHMuTWFsZm9ybWVkVHJlZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS50ZXh0LmVkaXRzLlRleHRFZGl0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnV0aWwuVVJJUmVzb2x2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnV0aWxzLlN0cmluZ1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5mb3JtYXR0ZXIuRGVmYXVsdFhNTFBhcnRpdGlvbkZvcm1hdHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuZm9ybWF0dGVyLlhNTEZvcm1hdHRpbmdQcmVmZXJlbmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMudXRpbC5TdHJpbmdDb21wYXJlVXRpbDsKLQotcHVibGljIGNsYXNzIFRlc3RQYXJ0aXRpb25Gb3JtYXR0ZXJYTUwgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFVURl84ID0gIlVURi04IjsKLQotCXByaXZhdGUgU3RyaW5nQ29tcGFyZVV0aWwgZlN0cmluZ0NvbXBhcmVVdGlsOwotCXByaXZhdGUgRGVmYXVsdFhNTFBhcnRpdGlvbkZvcm1hdHRlciBwYXJ0aXRpb25Gb3JtYXR0ZXI7Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlwYXJ0aXRpb25Gb3JtYXR0ZXIgPSBuZXcgRGVmYXVsdFhNTFBhcnRpdGlvbkZvcm1hdHRlcigpOwotCQlmU3RyaW5nQ29tcGFyZVV0aWwgPSBuZXcgU3RyaW5nQ29tcGFyZVV0aWwoKTsKLQl9Ci0KLQkvKioKLQkgKiBtdXN0IHJlbGVhc2UgbW9kZWwgKGZyb20gZWRpdCkgYWZ0ZXIKLQkgKiAKLQkgKiBAcGFyYW0gZmlsZW5hbWUKLQkgKiAgICAgICAgICAgIHJlbGF0aXZlIHRvIHRoaXMgY2xhc3MgKFRlc3RTdHJ1Y3R1cmVkUGFydGl0aW9uZXIpCi0JICovCi0JcHJpdmF0ZSBJU3RydWN0dXJlZE1vZGVsIGdldE1vZGVsRm9yRWRpdChmaW5hbCBTdHJpbmcgZmlsZW5hbWUpIHsKLQotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJCUlucHV0U3RyZWFtIGluU3RyZWFtID0gZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKGZpbGVuYW1lKTsKLQkJCWlmIChpblN0cmVhbSA9PSBudWxsKQotCQkJCXRocm93IG5ldyBGaWxlTm90Rm91bmRFeGNlcHRpb24oIkNhbid0IGZpbGUgcmVzb3VyY2Ugc3RyZWFtICIgKyBmaWxlbmFtZSk7Ci0JCQlmaW5hbCBTdHJpbmcgYmFzZUZpbGUgPSBnZXRDbGFzcygpLmdldFJlc291cmNlKGZpbGVuYW1lKS50b1N0cmluZygpOwotCQkJbW9kZWwgPSBtb2RlbE1hbmFnZXIuZ2V0TW9kZWxGb3JFZGl0KGJhc2VGaWxlLCBpblN0cmVhbSwgbmV3IFVSSVJlc29sdmVyKCkgewotCi0JCQkJU3RyaW5nIGZCYXNlID0gYmFzZUZpbGU7Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldEZpbGVCYXNlTG9jYXRpb24oKSB7Ci0JCQkJCXJldHVybiBmQmFzZTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldExvY2F0aW9uQnlVUkkoU3RyaW5nIHVyaSkgewotCQkJCQlyZXR1cm4gZ2V0TG9jYXRpb25CeVVSSSh1cmksIGZCYXNlKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldExvY2F0aW9uQnlVUkkoU3RyaW5nIHVyaSwgYm9vbGVhbiByZXNvbHZlQ3Jvc3NQcm9qZWN0TGlua3MpIHsKLQkJCQkJcmV0dXJuIGdldExvY2F0aW9uQnlVUkkodXJpKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldExvY2F0aW9uQnlVUkkoU3RyaW5nIHVyaSwgU3RyaW5nIGJhc2VSZWZlcmVuY2UpIHsKLQkJCQkJaW50IGxhc3RTbGFzaCA9IGJhc2VSZWZlcmVuY2UubGFzdEluZGV4T2YoIi8iKTsKLQkJCQkJaWYgKGxhc3RTbGFzaCA+IDApCi0JCQkJCQlyZXR1cm4gYmFzZVJlZmVyZW5jZS5zdWJzdHJpbmcoMCwgbGFzdFNsYXNoICsgMSkgKyB1cmk7Ci0JCQkJCXJldHVybiBiYXNlUmVmZXJlbmNlOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0TG9jYXRpb25CeVVSSShTdHJpbmcgdXJpLCBTdHJpbmcgYmFzZVJlZmVyZW5jZSwgYm9vbGVhbiByZXNvbHZlQ3Jvc3NQcm9qZWN0TGlua3MpIHsKLQkJCQkJcmV0dXJuIGdldExvY2F0aW9uQnlVUkkodXJpLCBiYXNlUmVmZXJlbmNlKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgSVByb2plY3QgZ2V0UHJvamVjdCgpIHsKLQkJCQkJcmV0dXJuIG51bGw7Ci0JCQkJfQotCi0JCQkJcHVibGljIElDb250YWluZXIgZ2V0Um9vdExvY2F0aW9uKCkgewotCQkJCQlyZXR1cm4gbnVsbDsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgSW5wdXRTdHJlYW0gZ2V0VVJJU3RyZWFtKFN0cmluZyB1cmkpIHsKLQkJCQkJcmV0dXJuIGdldENsYXNzKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbShnZXRMb2NhdGlvbkJ5VVJJKHVyaSkpOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHNldEZpbGVCYXNlTG9jYXRpb24oU3RyaW5nIG5ld0xvY2F0aW9uKSB7Ci0JCQkJCXRoaXMuZkJhc2UgPSBuZXdMb2NhdGlvbjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBzZXRQcm9qZWN0KElQcm9qZWN0IG5ld1Byb2plY3QpIHsKLQkJCQl9Ci0JCQl9KTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZXgpIHsKLQkJCWV4LnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCXJldHVybiBtb2RlbDsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBmb3JtYXRBbmRBc3NlcnRFcXVhbHMoU3RyaW5nIGJlZm9yZVBhdGgsIFN0cmluZyBhZnRlclBhdGgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCWZvcm1hdEFuZEFzc2VydEVxdWFscyhiZWZvcmVQYXRoLCBhZnRlclBhdGgsIG51bGwpOwotCX0KLQotCXByaXZhdGUgdm9pZCBmb3JtYXRBbmRBc3NlcnRFcXVhbHMoU3RyaW5nIGJlZm9yZVBhdGgsIFN0cmluZyBhZnRlclBhdGgsIFhNTEZvcm1hdHRpbmdQcmVmZXJlbmNlcyBwcmVmcykgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBiZWZvcmVNb2RlbCA9IG51bGwsIGFmdGVyTW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJYmVmb3JlTW9kZWwgPSBnZXRNb2RlbEZvckVkaXQoYmVmb3JlUGF0aCk7Ci0JCQlhc3NlcnROb3ROdWxsKCJjb3VsZCBub3QgcmV0cmlldmUgc3RydWN0dXJlZCBtb2RlbCBmb3IgOiAiICsgYmVmb3JlUGF0aCwgYmVmb3JlTW9kZWwpOwotCi0JCQlhZnRlck1vZGVsID0gZ2V0TW9kZWxGb3JFZGl0KGFmdGVyUGF0aCk7Ci0JCQlhc3NlcnROb3ROdWxsKCJjb3VsZCBub3QgcmV0cmlldmUgc3RydWN0dXJlZCBtb2RlbCBmb3IgOiAiICsgYWZ0ZXJQYXRoLCBhZnRlck1vZGVsKTsKLQotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IGJlZm9yZU1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJCi0JCQlTdHJpbmcgbm9ybWFsaXplZENvbnRlbnRzID0gZG9jdW1lbnQuZ2V0KCk7Ci0JCQlub3JtYWxpemVkQ29udGVudHMgPSBTdHJpbmdVdGlscy5yZXBsYWNlKG5vcm1hbGl6ZWRDb250ZW50cywgIlxyXG4iLCAiXG4iKTsKLQkJCW5vcm1hbGl6ZWRDb250ZW50cyA9IFN0cmluZ1V0aWxzLnJlcGxhY2Uobm9ybWFsaXplZENvbnRlbnRzLCAiXHIiLCAiXG4iKTsKLQkJCWRvY3VtZW50LnNldChub3JtYWxpemVkQ29udGVudHMpOwotCQkJCi0JCQlpZiAocHJlZnMgPT0gbnVsbCkKLQkJCQlwcmVmcyA9IG5ldyBYTUxGb3JtYXR0aW5nUHJlZmVyZW5jZXMoKTsKLQkJCVRleHRFZGl0IGVkaXQgPSBwYXJ0aXRpb25Gb3JtYXR0ZXIuZm9ybWF0KGJlZm9yZU1vZGVsLCAwLCBkb2N1bWVudC5nZXRMZW5ndGgoKSwgcHJlZnMpOwotCQkJdHJ5IHsKLQkJCQllZGl0LmFwcGx5KGRvY3VtZW50KTsKLQkJCX0KLQkJCWNhdGNoIChNYWxmb3JtZWRUcmVlRXhjZXB0aW9uIGUpIHsKLQkJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCi0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJCWNhdGNoIChCYWRMb2NhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jawotCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQl9Ci0KLQkJCUJ5dGVBcnJheU91dHB1dFN0cmVhbSBmb3JtYXR0ZWRCeXRlcyA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKLQkJCWJlZm9yZU1vZGVsLnNhdmUoZm9ybWF0dGVkQnl0ZXMpOyAvLyAiYmVmb3JlTW9kZWwiIHNob3VsZCBub3cgYmUKLQkJCS8vIGFmdGVyIHRoZSBmb3JtYXR0ZXIKLQotCQkJQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGFmdGVyQnl0ZXMgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7Ci0JCQlhZnRlck1vZGVsLnNhdmUoYWZ0ZXJCeXRlcyk7Ci0KLQkJCVN0cmluZyBleHBlY3RlZENvbnRlbnRzID0gbmV3IFN0cmluZyhhZnRlckJ5dGVzLnRvQnl0ZUFycmF5KCksIFVURl84KTsKLQkJCVN0cmluZyBhY3R1YWxDb250ZW50cyA9IG5ldyBTdHJpbmcoZm9ybWF0dGVkQnl0ZXMudG9CeXRlQXJyYXkoKSwgVVRGXzgpOwotCi0JCQkvKiBNYWtlIHNvbWUgYWRqdXN0bWVudHMgdG8gaWdub3JlIGNyb3NzIHBsYXRmb3JtIGxpbmUgZGVsaW1pdGVyIGlzc3VlcyAqLwotCQkJZXhwZWN0ZWRDb250ZW50cyA9IFN0cmluZ1V0aWxzLnJlcGxhY2UoZXhwZWN0ZWRDb250ZW50cywgIlxyXG4iLCAiXG4iKTsKLQkJCWV4cGVjdGVkQ29udGVudHMgPSBTdHJpbmdVdGlscy5yZXBsYWNlKGV4cGVjdGVkQ29udGVudHMsICJcciIsICJcbiIpOwotCQkJYWN0dWFsQ29udGVudHMgPSBTdHJpbmdVdGlscy5yZXBsYWNlKGFjdHVhbENvbnRlbnRzLCAiXHJcbiIsICJcbiIpOwotCQkJYWN0dWFsQ29udGVudHMgPSBTdHJpbmdVdGlscy5yZXBsYWNlKGFjdHVhbENvbnRlbnRzLCAiXHIiLCAiXG4iKTsKLQkJCQotCQkJYXNzZXJ0VHJ1ZSgiRm9ybWF0dGVkIGRvY3VtZW50IGRpZmZlcnMgZnJvbSB0aGUgZXhwZWN0ZWQuXG5FeHBlY3RlZCBDb250ZW50czpcbiIgKyBleHBlY3RlZENvbnRlbnRzICsgIlxuQWN0dWFsIENvbnRlbnRzOlxuIiArIGFjdHVhbENvbnRlbnRzLCBmU3RyaW5nQ29tcGFyZVV0aWwuZXF1YWxzSWdub3JlTGluZVNlcGVyYXRvcihleHBlY3RlZENvbnRlbnRzLCBhY3R1YWxDb250ZW50cykpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKGJlZm9yZU1vZGVsICE9IG51bGwpCi0JCQkJYmVmb3JlTW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQlpZiAoYWZ0ZXJNb2RlbCAhPSBudWxsKQotCQkJCWFmdGVyTW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2ltcGxlWG1sKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJLy8gcmVzdWx0cyBhcmUgZGlmZmVyZW50IHRoYW4gb2xkIGZvcm1hdHRlcgotCQkvLyBCdWcgWzIyODQ5NV0gLSBSZXN1bHQgc2hvdWxkIGhhdmUgYmxhbmsgbGluZXMgY2xlYXJlZAotCQlYTUxGb3JtYXR0aW5nUHJlZmVyZW5jZXMgcHJlZnMgPSBuZXcgWE1MRm9ybWF0dGluZ1ByZWZlcmVuY2VzKCk7Ci0JCXByZWZzLnNldENsZWFyQWxsQmxhbmtMaW5lcyh0cnVlKTsKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0ZmlsZXMveG1sL3NpbXBsZS1zdGFuZGFsb25lLnhtbCIsICJ0ZXN0ZmlsZXMveG1sL3NpbXBsZS1zdGFuZGFsb25lLW5ld2ZtdC54bWwiLCBwcmVmcyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RXaGl0ZXNwYWNlRm9ybWF0WFNEKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJLy8gQnVnIDE5NDY5OAotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy94bWwveG1sLXdoaXRlc3BhY2UteHNkLnhtbCIsICJ0ZXN0ZmlsZXMveG1sL3htbC13aGl0ZXNwYWNlLXhzZC1hY3R1YWwueG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFByZXNlcnZlRm9ybWF0KCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJLy8gcmVzdWx0cyBhcmUgZGlmZmVyZW50IHRoYW4gb2xkIGZvcm1hdHRlcgotCQkvLyBCdWcgWzIyODQ5NV0gLSBSZXN1bHQgc2hvdWxkIGhhdmUgYmxhbmsgbGluZXMgY2xlYXJlZAotCQlYTUxGb3JtYXR0aW5nUHJlZmVyZW5jZXMgcHJlZnMgPSBuZXcgWE1MRm9ybWF0dGluZ1ByZWZlcmVuY2VzKCk7Ci0JCXByZWZzLnNldENsZWFyQWxsQmxhbmtMaW5lcyh0cnVlKTsKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0ZmlsZXMveG1sL3htbC1zcGFjZS1wcmVzZXJ2ZS1zdGFuZGFsb25lLnhtbCIsICJ0ZXN0ZmlsZXMveG1sL3htbC1zcGFjZS1wcmVzZXJ2ZS1zdGFuZGFsb25lLW5ld2ZtdC54bWwiLCBwcmVmcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFByZXNlcnZlRm9ybWF0RFREKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJLy8gcmVzdWx0cyBhcmUgZGlmZmVyZW50IHRoYW4gb2xkIGZvcm1hdHRlcgotCQkvLyBCdWcgWzIyODQ5NV0gLSBSZXN1bHQgc2hvdWxkIGhhdmUgYmxhbmsgbGluZXMgY2xlYXJlZAotCQlYTUxGb3JtYXR0aW5nUHJlZmVyZW5jZXMgcHJlZnMgPSBuZXcgWE1MRm9ybWF0dGluZ1ByZWZlcmVuY2VzKCk7Ci0JCXByZWZzLnNldENsZWFyQWxsQmxhbmtMaW5lcyh0cnVlKTsKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0ZmlsZXMveG1sL3htbC1zcGFjZS1wcmVzZXJ2ZS1kdGQueG1sIiwgInRlc3RmaWxlcy94bWwveG1sLXNwYWNlLXByZXNlcnZlLWR0ZC1uZXdmbXQueG1sIiwgcHJlZnMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RPbmVMaW5lRm9ybWF0KCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJLy8gQlVHMTE1NzE2Ci0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL3htbC9vbmVsaW5lLnhtbCIsICJ0ZXN0ZmlsZXMveG1sL29uZWxpbmUtZm10LnhtbCIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RPbmVMaW5lVGV4dE5vZGVGb3JtYXQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQkvLyByZXN1bHRzIGFyZSBkaWZmZXJlbnQgdGhhbiBvbGQgZm9ybWF0dGVyCi0JCS8vIEJVRzE2NjQ0MQotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy94bWwvb25lbGluZVRleHROb2RlLnhtbCIsICJ0ZXN0ZmlsZXMveG1sL29uZWxpbmVUZXh0Tm9kZS1uZXdmbXQueG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEVtcHR5Q29udGVudE5vZGVGb3JtYXQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQkvLyBCVUcxNzQyNDMKLQkJWE1MRm9ybWF0dGluZ1ByZWZlcmVuY2VzIHByZWZzID0gbmV3IFhNTEZvcm1hdHRpbmdQcmVmZXJlbmNlcygpOwotCQlwcmVmcy5zZXRJbmRlbnRNdWx0aXBsZUF0dHJpYnV0ZXModHJ1ZSk7Ci0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL3htbC91c2V0YWdzd2l0aGVtcHR5Y29udGVudC54bWwiLCAidGVzdGZpbGVzL3htbC91c2V0YWdzd2l0aGVtcHR5Y29udGVudC1mbXQueG1sIiwgcHJlZnMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RYU0xGb3JtYXQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQkvLyBCVUcxMDgwNzQKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0ZmlsZXMveG1sL3hzbGF0dHJpYnV0ZXRleHQueHNsIiwgInRlc3RmaWxlcy94bWwveHNsYXR0cmlidXRldGV4dC1mbXQueHNsIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEVudGl0eUZvcm1hdCgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCS8vIHJlc3VsdHMgYXJlIGRpZmZlcmVudCB0aGFuIG9sZCBmb3JtYXR0ZXIKLQkJLy8gQlVHMTAyMDc2Ci0JCVhNTEZvcm1hdHRpbmdQcmVmZXJlbmNlcyBwcmVmcyA9IG5ldyBYTUxGb3JtYXR0aW5nUHJlZmVyZW5jZXMoKTsKLQkJcHJlZnMuc2V0Q2xlYXJBbGxCbGFua0xpbmVzKHRydWUpOwotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy94bWwvZW50aXRpZXMueG1sIiwgInRlc3RmaWxlcy94bWwvZW50aXRpZXMtbmV3Zm10LnhtbCIsIHByZWZzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UHJlc2VydmVQQ0RBVEFGb3JtYXQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQkvLyBCVUc4NDY4OAotCQlYTUxGb3JtYXR0aW5nUHJlZmVyZW5jZXMgcHJlZnMgPSBuZXcgWE1MRm9ybWF0dGluZ1ByZWZlcmVuY2VzKCk7Ci0JCXByZWZzLnNldFBDRGF0YVdoaXRlc3BhY2VTdHJhdGVneShYTUxGb3JtYXR0aW5nUHJlZmVyZW5jZXMuUFJFU0VSVkUpOwotCQlwcmVmcy5zZXRDbGVhckFsbEJsYW5rTGluZXModHJ1ZSk7Ci0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL3htbC94bWwtcHJlc2VydmVwY2RhdGEueG1sIiwgInRlc3RmaWxlcy94bWwveG1sLXByZXNlcnZlcGNkYXRhLXllcy1mbXQueG1sIiwgcHJlZnMpOwotCi0JCS8vIHJlc3VsdHMgYXJlIGRpZmZlcmVudCB0aGFuIG9sZCBmb3JtYXR0ZXIKLQkJcHJlZnMuc2V0UENEYXRhV2hpdGVzcGFjZVN0cmF0ZWd5KFhNTEZvcm1hdHRpbmdQcmVmZXJlbmNlcy5DT0xMQVBTRSk7Ci0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL3htbC94bWwtcHJlc2VydmVwY2RhdGEueG1sIiwgInRlc3RmaWxlcy94bWwveG1sLXByZXNlcnZlcGNkYXRhLW5vLW5ld2ZtdC54bWwiLCBwcmVmcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFByZXNlcnZlQ0RBVEFGb3JtYXQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQkvLyBCVUcxNjEzMzAKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0ZmlsZXMveG1sL3VzZWNkYXRhLnhtbCIsICJ0ZXN0ZmlsZXMveG1sL3VzZWNkYXRhLWZtdC54bWwiKTsKLQkJLy8gdGhlIGJlbG93IHRlc3Qgd2lsbCBleHBvc2UgYSBidWcgaW4gdGhlIG5ldyBmb3JtYXR0ZXIgc28gY29tbWVudGluZwotCQkvLyBvdXQgZm9yIG5vdwotCQkvLyBmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy94bWwvdXNlY2RhdGEyLnhtbCIsCi0JCS8vICJ0ZXN0ZmlsZXMveG1sL3VzZWNkYXRhMi1mbXQueG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNwbGl0QXR0cmlidXRlc0Zvcm1hdCgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCS8vIEJVRzExMzU4NAotCQlYTUxGb3JtYXR0aW5nUHJlZmVyZW5jZXMgcHJlZnMgPSBuZXcgWE1MRm9ybWF0dGluZ1ByZWZlcmVuY2VzKCk7Ci0JCS8vIHRoZSBiZWxvdyB0ZXN0cyBhcmUgc2xpZ2h0eSBkaWZmZXJlbnQgZnJvbSBvbGQgZm9ybWF0dGVyIHRlc3QKLQkJcHJlZnMuc2V0SW5kZW50TXVsdGlwbGVBdHRyaWJ1dGVzKHRydWUpOwotCQlwcmVmcy5zZXRBbGlnbkZpbmFsQnJhY2tldChmYWxzZSk7Ci0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL3htbC9tdWx0aWF0dHJpYnV0ZXMyLnhtbCIsICJ0ZXN0ZmlsZXMveG1sL211bHRpYXR0cmlidXRlczIteWVzc3BsaXQtbm9hbGlnbi1uZXdmbXQueG1sIiwgcHJlZnMpOwotCi0JCXByZWZzLnNldEluZGVudE11bHRpcGxlQXR0cmlidXRlcyhmYWxzZSk7Ci0JCXByZWZzLnNldEFsaWduRmluYWxCcmFja2V0KGZhbHNlKTsKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0ZmlsZXMveG1sL211bHRpYXR0cmlidXRlczIueG1sIiwgInRlc3RmaWxlcy94bWwvbXVsdGlhdHRyaWJ1dGVzMi1ub3NwbGl0LW5vYWxpZ24tbmV3Zm10LnhtbCIsIHByZWZzKTsKLQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RBbGlnbkVuZEJyYWNrZXRGb3JtYXQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQkvLyByZXN1bHRzIGFyZSBkaWZmZXJlbnQgdGhhbiBvbGQgZm9ybWF0dGVyCi0JCS8vIEJVRzExMzU4NAotCQlYTUxGb3JtYXR0aW5nUHJlZmVyZW5jZXMgcHJlZnMgPSBuZXcgWE1MRm9ybWF0dGluZ1ByZWZlcmVuY2VzKCk7Ci0JCXByZWZzLnNldEluZGVudE11bHRpcGxlQXR0cmlidXRlcyhmYWxzZSk7Ci0JCXByZWZzLnNldEFsaWduRmluYWxCcmFja2V0KHRydWUpOwotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy94bWwvbXVsdGlhdHRyaWJ1dGVzLnhtbCIsICJ0ZXN0ZmlsZXMveG1sL211bHRpYXR0cmlidXRlcy1ub3NwbGl0LXllc2FsaWduLW5ld2ZtdC54bWwiLCBwcmVmcyk7Ci0KLQkJLy8gcmVzdWx0cyBhcmUgZGlmZmVyZW50IHRoYW4gb2xkIGZvcm1hdHRlcgotCQlwcmVmcy5zZXRJbmRlbnRNdWx0aXBsZUF0dHJpYnV0ZXModHJ1ZSk7Ci0JCXByZWZzLnNldEFsaWduRmluYWxCcmFja2V0KHRydWUpOwotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy94bWwvbXVsdGlhdHRyaWJ1dGVzLnhtbCIsICJ0ZXN0ZmlsZXMveG1sL211bHRpYXR0cmlidXRlcy15ZXNzcGxpdC15ZXNhbGlnbi1uZXdmbXQueG1sIiwgcHJlZnMpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0U3BhY2VCZWZvcmVFbXB0eUNsb3NlVGFnKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJLy8gQnVnIDE5NTI2NAotCQlYTUxGb3JtYXR0aW5nUHJlZmVyZW5jZXMgcHJlZnMgPSBuZXcgWE1MRm9ybWF0dGluZ1ByZWZlcmVuY2VzKCk7Ci0JCXByZWZzLnNldFNwYWNlQmVmb3JlRW1wdHlDbG9zZVRhZyhmYWxzZSk7Ci0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL3htbC94bWwtZW1wdHktdGFnLXNwYWNlLnhtbCIsICJ0ZXN0ZmlsZXMveG1sL3htbC1lbXB0eS10YWctc3BhY2Utbm9uZS1uZXdmbXQueG1sIiwgcHJlZnMpOwotCQkKLQkJcHJlZnMuc2V0U3BhY2VCZWZvcmVFbXB0eUNsb3NlVGFnKHRydWUpOwotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy94bWwveG1sLWVtcHR5LXRhZy1zcGFjZS54bWwiLCAidGVzdGZpbGVzL3htbC94bWwtZW1wdHktdGFnLXNwYWNlLW5ld2ZtdC54bWwiLCBwcmVmcyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCSAgICAvLyBCVUcxOTgyOTcKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0ZmlsZXMveG1sL3Byb2Nlc3NpbmdpbnN0cnVjdGlvbi54bWwiLCAidGVzdGZpbGVzL3htbC9wcm9jZXNzaW5naW5zdHJ1Y3Rpb24tZm10LnhtbCIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0Q29tbWVudHMoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQkvLyBCdWcgMjI2ODIxCi0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL3htbC94bWwtY29tbWVudC54bWwiLCAidGVzdGZpbGVzL3htbC94bWwtY29tbWVudC1uZXdmbXQueG1sIik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RLZWVwRW1wdHlMaW5lcygpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCS8vIEJ1ZyAyMjg0OTUKLQkJLy8gVGVzdCB0aGF0IGZvcm1hdHRpbmcga2VlcHMgZW1wdHkgbGluZXMKLQkJWE1MRm9ybWF0dGluZ1ByZWZlcmVuY2VzIHByZWZzID0gbmV3IFhNTEZvcm1hdHRpbmdQcmVmZXJlbmNlcygpOwotCQlwcmVmcy5zZXRDbGVhckFsbEJsYW5rTGluZXMoZmFsc2UpOwotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy94bWwveG1sLWtlZXAtYmxhbmstbGluZXMueG1sIiwgInRlc3RmaWxlcy94bWwveG1sLWtlZXAtYmxhbmstbGluZXMtZm10LnhtbCIsIHByZWZzKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdENsZWFyQmxhbmtMaW5lcygpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCS8vIEJ1ZyAyMjg0OTUKLQkJLy8gVGVzdCB0aGF0IGZvcm1hdHRpbmcgY2xlYXJzIGVtcHR5IGxpbmVzCi0JCVhNTEZvcm1hdHRpbmdQcmVmZXJlbmNlcyBwcmVmcyA9IG5ldyBYTUxGb3JtYXR0aW5nUHJlZmVyZW5jZXMoKTsKLQkJcHJlZnMuc2V0Q2xlYXJBbGxCbGFua0xpbmVzKHRydWUpOwotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy94bWwveG1sLWtlZXAtYmxhbmstbGluZXMueG1sIiwgInRlc3RmaWxlcy94bWwveG1sLWNsZWFyLWJsYW5rLWxpbmVzLWZtdC54bWwiLCBwcmVmcyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RGb3JtYXRNYWxmb3JtZWRFbmRUYWcoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQkvLyBCdWcgMjIxMjc5Ci0JCS8vIFRlc3QgdGhhdCBtYWxmb3JtZWQgZW5kIHRhZ3MgZG8gbm90IGNhdXNlIGEgTlBFIGFuZCBmb3JtYXQgdGhlIGRvY3VtZW50Ci0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL3htbC94bWwtMjIxMjc5LnhtbCIsICJ0ZXN0ZmlsZXMveG1sL3htbC0yMjEyNzktZm10LnhtbCIpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL2VudGl0aWVzLWZtdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9lbnRpdGllcy1mbXQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YzJlNjU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL2VudGl0aWVzLWZtdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgPz4KLTwhRE9DVFlQRSBkb2N1bWVudCBbCi08IUVOVElUWSBFSUkgIjxlbXBoPmVsZW1lbnQgaW5mb3JtYXRpb24gaXRlbTwvZW1waD4iPgotXT4KLTxkb2N1bWVudD4KLQlUaGlzIGRvY3VtZW50IGNvbnRhaW5zIG5vIGNoaWxkCi0JJkVJSTtzLiBJdCBkb2VzIGNvbnRhaW4gYSBub24mRUlJOy4KLTwvZG9jdW1lbnQ+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvZW50aXRpZXMtbmV3Zm10LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL2VudGl0aWVzLW5ld2ZtdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlYzgwM2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvZW50aXRpZXMtbmV3Zm10LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiA/PgotPCFET0NUWVBFIGRvY3VtZW50IFsKLTwhRU5USVRZIEVJSSAiPGVtcGg+ZWxlbWVudCBpbmZvcm1hdGlvbiBpdGVtPC9lbXBoPiI+Ci1dPgotPGRvY3VtZW50PgotCVRoaXMgZG9jdW1lbnQgY29udGFpbnMgbm8gY2hpbGQgJkVJSTtzLgotCUl0IGRvZXMgY29udGFpbiBhIG5vbiZFSUk7LiAKLTwvZG9jdW1lbnQ+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvZW50aXRpZXMueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvZW50aXRpZXMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNWJkZWRjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL2VudGl0aWVzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiA/PgotPCFET0NUWVBFIGRvY3VtZW50IFsKLTwhRU5USVRZIEVJSSAiPGVtcGg+ZWxlbWVudCBpbmZvcm1hdGlvbiBpdGVtPC9lbXBoPiI+Ci1dPgotPGRvY3VtZW50PgotVGhpcyBkb2N1bWVudCBjb250YWlucyBubyBjaGlsZCAmRUlJO3MuIEl0IGRvZXMgY29udGFpbiBhIG5vbiZFSUk7LgotPC9kb2N1bWVudD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9tdWx0aWF0dHJpYnV0ZXMtbm9zcGxpdC1ub2FsaWduLWZtdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9tdWx0aWF0dHJpYnV0ZXMtbm9zcGxpdC1ub2FsaWduLWZtdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkMTM5MGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvbXVsdGlhdHRyaWJ1dGVzLW5vc3BsaXQtbm9hbGlnbi1mbXQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxvbWc+Ci0JPHRvdGFsbHkgcmFkPSJkdWRlIiBpbnRlbnNlPSJtYW4iIGNyYXp5PSJhbmQgaW5zYW5lIgotCQlzY3JlYW09ImFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSI+Ci0JPC90b3RhbGx5PgotCTxsaWtlIGZlcj0ic3VyZSIgbm89IndheSI+Ci0JCXllcyB3YXkgaSBoYXZlIHRleHQgcmlnaHQgaGVyZSB3aGVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZQotCTwvbGlrZT4KLQk8c2VyaW91c2x5IG5vPSJqb2tlIiBmb3I9InJlYWxzIiAvPgotPC9vbWc+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvbXVsdGlhdHRyaWJ1dGVzLW5vc3BsaXQteWVzYWxpZ24tZm10LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL211bHRpYXR0cmlidXRlcy1ub3NwbGl0LXllc2FsaWduLWZtdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllODk3YzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvbXVsdGlhdHRyaWJ1dGVzLW5vc3BsaXQteWVzYWxpZ24tZm10LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08b21nPgotCTx0b3RhbGx5IHJhZD0iZHVkZSIgaW50ZW5zZT0ibWFuIiBjcmF6eT0iYW5kIGluc2FuZSIKLQkJc2NyZWFtPSJhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEiCi0JPgotCTwvdG90YWxseT4KLQk8bGlrZSBmZXI9InN1cmUiIG5vPSJ3YXkiPgotCQl5ZXMgd2F5IGkgaGF2ZSB0ZXh0IHJpZ2h0IGhlcmUgd2hlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWUKLQk8L2xpa2U+Ci0JPHNlcmlvdXNseSBubz0iam9rZSIgZm9yPSJyZWFscyIgLz4KLTwvb21nPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL211bHRpYXR0cmlidXRlcy1ub3NwbGl0LXllc2FsaWduLW5ld2ZtdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9tdWx0aWF0dHJpYnV0ZXMtbm9zcGxpdC15ZXNhbGlnbi1uZXdmbXQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYmU2YjJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL211bHRpYXR0cmlidXRlcy1ub3NwbGl0LXllc2FsaWduLW5ld2ZtdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08b21nPgotCTx0b3RhbGx5IHJhZD0iZHVkZSIgaW50ZW5zZT0ibWFuIiBjcmF6eT0iYW5kIGluc2FuZSIKLQkJc2NyZWFtPSJhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEiCi0JPjwvdG90YWxseT4KLQk8bGlrZSBmZXI9InN1cmUiIG5vPSJ3YXkiPnllcyB3YXkgaSBoYXZlIHRleHQgcmlnaHQgaGVyZQotCQl3aGVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZTwvbGlrZT4KLQk8c2VyaW91c2x5IG5vPSJqb2tlIiBmb3I9InJlYWxzIiAvPgotPC9vbWc+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvbXVsdGlhdHRyaWJ1dGVzLXllc3NwbGl0LW5vYWxpZ24tZm10LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL211bHRpYXR0cmlidXRlcy15ZXNzcGxpdC1ub2FsaWduLWZtdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3NTc1OTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvbXVsdGlhdHRyaWJ1dGVzLXllc3NwbGl0LW5vYWxpZ24tZm10LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08b21nPgotCTx0b3RhbGx5Ci0JCXJhZD0iZHVkZSIKLQkJaW50ZW5zZT0ibWFuIgotCQljcmF6eT0iYW5kIGluc2FuZSIKLQkJc2NyZWFtPSJhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEiPgotCTwvdG90YWxseT4KLQk8bGlrZQotCQlmZXI9InN1cmUiCi0JCW5vPSJ3YXkiPgotCQl5ZXMgd2F5IGkgaGF2ZSB0ZXh0IHJpZ2h0IGhlcmUgd2hlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWUKLQk8L2xpa2U+Ci0JPHNlcmlvdXNseQotCQlubz0iam9rZSIKLQkJZm9yPSJyZWFscyIgLz4KLTwvb21nPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL211bHRpYXR0cmlidXRlcy15ZXNzcGxpdC15ZXNhbGlnbi1mbXQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvbXVsdGlhdHRyaWJ1dGVzLXllc3NwbGl0LXllc2FsaWduLWZtdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3YmU5NmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvbXVsdGlhdHRyaWJ1dGVzLXllc3NwbGl0LXllc2FsaWduLWZtdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPG9tZz4KLQk8dG90YWxseQotCQlyYWQ9ImR1ZGUiCi0JCWludGVuc2U9Im1hbiIKLQkJY3Jhenk9ImFuZCBpbnNhbmUiCi0JCXNjcmVhbT0iYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIgotCT4KLQk8L3RvdGFsbHk+Ci0JPGxpa2UKLQkJZmVyPSJzdXJlIgotCQlubz0id2F5IgotCT4KLQkJeWVzIHdheSBpIGhhdmUgdGV4dCByaWdodCBoZXJlIHdoZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlCi0JPC9saWtlPgotCTxzZXJpb3VzbHkKLQkJbm89Impva2UiCi0JCWZvcj0icmVhbHMiCi0JLz4KLTwvb21nPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL211bHRpYXR0cmlidXRlcy15ZXNzcGxpdC15ZXNhbGlnbi1uZXdmbXQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvbXVsdGlhdHRyaWJ1dGVzLXllc3NwbGl0LXllc2FsaWduLW5ld2ZtdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiMGQyNmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvbXVsdGlhdHRyaWJ1dGVzLXllc3NwbGl0LXllc2FsaWduLW5ld2ZtdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPG9tZz4KLQk8dG90YWxseQotCQlyYWQ9ImR1ZGUiCi0JCWludGVuc2U9Im1hbiIKLQkJY3Jhenk9ImFuZCBpbnNhbmUiCi0JCXNjcmVhbT0iYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIgotCT48L3RvdGFsbHk+Ci0JPGxpa2UKLQkJZmVyPSJzdXJlIgotCQlubz0id2F5IgotCT55ZXMgd2F5IGkgaGF2ZSB0ZXh0IHJpZ2h0IGhlcmUgd2hlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWU8L2xpa2U+Ci0JPHNlcmlvdXNseQotCQlubz0iam9rZSIKLQkJZm9yPSJyZWFscyIgLz4KLTwvb21nPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL211bHRpYXR0cmlidXRlcy54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9tdWx0aWF0dHJpYnV0ZXMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZGU5YjRkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL211bHRpYXR0cmlidXRlcy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08b21nPgotPHRvdGFsbHkgcmFkPSJkdWRlIiBpbnRlbnNlPSJtYW4iIGNyYXp5PSJhbmQgaW5zYW5lIiBzY3JlYW09ImFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSI+PC90b3RhbGx5PgotPGxpa2UgZmVyPSJzdXJlIiBubz0id2F5Ij55ZXMgd2F5IGkgaGF2ZSB0ZXh0IHJpZ2h0IGhlcmUgd2hlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWU8L2xpa2U+Ci08c2VyaW91c2x5IG5vPSJqb2tlIiBmb3I9InJlYWxzIiAvPgotPC9vbWc+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvbXVsdGlhdHRyaWJ1dGVzMi1ub3NwbGl0LW5vYWxpZ24tbmV3Zm10LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL211bHRpYXR0cmlidXRlczItbm9zcGxpdC1ub2FsaWduLW5ld2ZtdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwY2EzOWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvbXVsdGlhdHRyaWJ1dGVzMi1ub3NwbGl0LW5vYWxpZ24tbmV3Zm10LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxvbWc+Ci0JPHRvdGFsbHkgcmFkPSJkdWRlIiBpbnRlbnNlPSJtYW4iIGNyYXp5PSJhbmQgaW5zYW5lIgotCQlzY3JlYW09ImFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSI+PC90b3RhbGx5PgotCTxsaWtlIGZlcj0ic3VyZSIgbm89IndheSI+eWVzIHdheSBpIGhhdmUgdGV4dCByaWdodCBoZXJlPC9saWtlPgotCTxzZXJpb3VzbHkgbm89Impva2UiIGZvcj0icmVhbHMiIC8+Ci08L29tZz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9tdWx0aWF0dHJpYnV0ZXMyLXllc3NwbGl0LW5vYWxpZ24tbmV3Zm10LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL211bHRpYXR0cmlidXRlczIteWVzc3BsaXQtbm9hbGlnbi1uZXdmbXQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MjI2NzZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL211bHRpYXR0cmlidXRlczIteWVzc3BsaXQtbm9hbGlnbi1uZXdmbXQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxvbWc+Ci0JPHRvdGFsbHkKLQkJcmFkPSJkdWRlIgotCQlpbnRlbnNlPSJtYW4iCi0JCWNyYXp5PSJhbmQgaW5zYW5lIgotCQlzY3JlYW09ImFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSI+PC90b3RhbGx5PgotCTxsaWtlCi0JCWZlcj0ic3VyZSIKLQkJbm89IndheSI+eWVzIHdheSBpIGhhdmUgdGV4dCByaWdodCBoZXJlPC9saWtlPgotCTxzZXJpb3VzbHkKLQkJbm89Impva2UiCi0JCWZvcj0icmVhbHMiIC8+Ci08L29tZz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9tdWx0aWF0dHJpYnV0ZXMyLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL211bHRpYXR0cmlidXRlczIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMTJkZWNlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL211bHRpYXR0cmlidXRlczIueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPG9tZz4KLTx0b3RhbGx5IHJhZD0iZHVkZSIgaW50ZW5zZT0ibWFuIiBjcmF6eT0iYW5kIGluc2FuZSIgc2NyZWFtPSJhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEiPjwvdG90YWxseT4KLTxsaWtlIGZlcj0ic3VyZSIgbm89IndheSI+eWVzIHdheSBpIGhhdmUgdGV4dCByaWdodCBoZXJlPC9saWtlPgotPHNlcmlvdXNseSBubz0iam9rZSIgZm9yPSJyZWFscyIgLz4KLTwvb21nPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL29uZWxpbmUtZm10LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL29uZWxpbmUtZm10LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzJhYTE5ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9vbmVsaW5lLWZtdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08b25lPgotCTx0d28+PC90d28+Ci0JPHRocmVlPgotCQk8Zm91cj48L2ZvdXI+Ci0JPC90aHJlZT4KLTwvb25lPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL29uZWxpbmUueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvb25lbGluZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3MjMyNDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvb25lbGluZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PjxvbmU+PHR3bz48L3R3bz48dGhyZWU+PGZvdXI+PC9mb3VyPjwvdGhyZWU+PC9vbmU+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvb25lbGluZVRleHROb2RlLWZtdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9vbmVsaW5lVGV4dE5vZGUtZm10LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjcwOTU0OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9vbmVsaW5lVGV4dE5vZGUtZm10LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxvbmUgYXR0cj0iMSIgYXR0cjI9IjIiPgotCTx0d28+PC90d28+Ci0JPHRocmVlPgotCQk8Zm91cj48L2ZvdXI+Ci0JPC90aHJlZT4KLTwvb25lPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL29uZWxpbmVUZXh0Tm9kZS1uZXdmbXQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvb25lbGluZVRleHROb2RlLW5ld2ZtdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0MGRmMDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvb25lbGluZVRleHROb2RlLW5ld2ZtdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08b25lIGF0dHI9IjEiIGF0dHIyPSIyIj4KLQk8dHdvPjwvdHdvPgotCTx0aHJlZT4KLQkJPGZvdXI+Ci0JCTwvZm91cj4KLQk8L3RocmVlPgotPC9vbmU+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvb25lbGluZVRleHROb2RlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL29uZWxpbmVUZXh0Tm9kZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1MTNmNmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvb25lbGluZVRleHROb2RlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+PG9uZSBhdHRyPSIxIgkJYXR0cjI9IjIiPgkJPHR3bz48L3R3bz48dGhyZWU+PGZvdXI+CQk8L2ZvdXI+PC90aHJlZT48L29uZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9wcm9jZXNzaW5naW5zdHJ1Y3Rpb24tZm10LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3Byb2Nlc3NpbmdpbnN0cnVjdGlvbi1mbXQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NjI4ZmZiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3Byb2Nlc3NpbmdpbnN0cnVjdGlvbi1mbXQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTx0ZXN0ZG9jPjw/dGVzdGluZyB0ZXN0PSJ5YXkiPz4KLTwvdGVzdGRvYz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3Byb2Nlc3NpbmdpbnN0cnVjdGlvbi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9wcm9jZXNzaW5naW5zdHJ1Y3Rpb24ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NjI4ZmZiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3Byb2Nlc3NpbmdpbnN0cnVjdGlvbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotPHRlc3Rkb2M+PD90ZXN0aW5nIHRlc3Q9InlheSI/PgotPC90ZXN0ZG9jPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvc2ltcGxlLXN0YW5kYWxvbmUtZm10LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3NpbXBsZS1zdGFuZGFsb25lLWZtdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1YmI2MjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvc2ltcGxlLXN0YW5kYWxvbmUtZm10LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotPG1haW4+Ci0JVGhpcyBpcyBqdXN0IGEgc2ltcGxlIHRlc3QKLQotCW9mIHRoZSBmb3JtYXR0ZXIKLQotCXdoaWNoIHNob3VsZCBiZSBlYXN5IHRvIHBhc3MuCi0JPGRhdGEtc3R1ZmYgYXR0cjE9InNob3J0LXZhbHVlIiBhMD0iIiBhMT0nICcgYTI9IiAgIiBhMz0nICAgJwotCQlhND0iICAgICIgYTU9JyAgICAgJyBhNj0iICAgICAgICIgYXR0cjI9InNob3J0LXZhbHVlIgotCQlhdHRyLXdoaWNoLWlzLXJlYWxseS1yZWFsbHktb2gtc28taG9ycmlibHktbG9uZy15ZXMtc2lyLTE9ImFsc28gcXVpdGUgZmFudGFzdGljYWxseSBsb25nIHZhbHVlIHdoaWNoIG11c3RuJ3QgYmUgIGJyb2tlbiIKLQkJYXR0cjM9InNob3J0LXZhbHVlIj4KLQotCQk8Y2RhdGE+Ci0JCQk8IVtDREFUQVsKLSAgIERhYSwgZGFhLCBkYSwgZGEgLSBkYSwgZGEgLSBkYSwgZGEKLQkKLQkJQ2FuJ3QgdG91Y2ggdGhpcyEKLSAgKHNwYWNlcyBoZXJlKQotCSh0YWIgaGVyZSkKLQkJXV0+Ci0JCTwvY2RhdGE+Ci0JCTxhPgotCQkJPGI+YjwvYj4KLQkJCTxiPmI8L2I+Ci0JCQk8Yj5iPC9iPjwhLS0gQ29tbWVudCBoZXJlICBkb24ndCB0d2lkZGxlIHdpdGggc3BhY2VzIGluIHRoZW0gLS0+Ci0JCQk8Yj5iPC9iPgotCQkJPGI+YjwvYj4KLQkJCTxiPmI8L2I+Ci0JCTwvYT4KLQkJPD90YXJnZXQgIHdoeSAgYW0gIEkgIGhlcmUgCi0gID8+Ci0JPC9kYXRhLXN0dWZmPgotPC9tYWluPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvc2ltcGxlLXN0YW5kYWxvbmUtbmV3Zm10LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3NpbXBsZS1zdGFuZGFsb25lLW5ld2ZtdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1ZDAxNmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvc2ltcGxlLXN0YW5kYWxvbmUtbmV3Zm10LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotPG1haW4+Ci0JVGhpcyBpcyBqdXN0IGEgc2ltcGxlIHRlc3Qgb2YgdGhlIGZvcm1hdHRlciB3aGljaCBzaG91bGQgYmUgZWFzeSB0bwotCXBhc3MuCi0JPGRhdGEtc3R1ZmYgYXR0cjE9InNob3J0LXZhbHVlIiBhMD0iIiBhMT0nICcgYTI9IiAgIiBhMz0nICAgJwotCQlhND0iICAgICIgYTU9JyAgICAgJyBhNj0iICAgICAgICIgYXR0cjI9InNob3J0LXZhbHVlIgotCQlhdHRyLXdoaWNoLWlzLXJlYWxseS1yZWFsbHktb2gtc28taG9ycmlibHktbG9uZy15ZXMtc2lyLTE9ImFsc28gcXVpdGUgZmFudGFzdGljYWxseSBsb25nIHZhbHVlIHdoaWNoIG11c3RuJ3QgYmUgIGJyb2tlbiIKLQkJYXR0cjM9InNob3J0LXZhbHVlIj4KLQkJPGNkYXRhPgotIDwhW0NEQVRBWwotICAgRGFhLCBkYWEsIGRhLCBkYSAtIGRhLCBkYSAtIGRhLCBkYQotCQotCQlDYW4ndCB0b3VjaCB0aGlzIQotICAoc3BhY2VzIGhlcmUpCi0JKHRhYiBoZXJlKQotCQldXT4KLQkJPC9jZGF0YT4KLQkJPGE+Ci0JCQk8Yj5iPC9iPgotCQkJPGI+YiA8L2I+Ci0JCQk8Yj4gYjwvYj4gIDwhLS0gQ29tbWVudCBoZXJlICBkb24ndCB0d2lkZGxlIHdpdGggc3BhY2VzIGluIHRoZW0gLS0+Ci0JCQk8Yj4gYiA8L2I+Ci0JCQk8Yj4gYiA8L2I+Ci0JCQk8Yj5iPC9iPgotCQk8L2E+PD90YXJnZXQgIHdoeSAgYW0gIEkgIGhlcmUgCi0gID8+Ci0JPC9kYXRhLXN0dWZmPgotPC9tYWluPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3NpbXBsZS1zdGFuZGFsb25lLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3NpbXBsZS1zdGFuZGFsb25lLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODIzZWYzMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9zaW1wbGUtc3RhbmRhbG9uZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTxtYWluPgotICAgICBUaGlzIGlzIGp1c3QgYSBzaW1wbGUgdGVzdAotICAKLSAgIG9mIHRoZSBmb3JtYXR0ZXIKLSAgCi13aGljaCBzaG91bGQgYmUgZWFzeSB0byBwYXNzLgotPGRhdGEtc3R1ZmYgYXR0cjE9InNob3J0LXZhbHVlIiBhMD0iIiBhMT0nICcgYTI9IiAgIiBhMz0nICAgJyBhND0iICAgICIgYTU9JyAgICAgJyBhNj0iICAgICAgICIgYXR0cjI9InNob3J0LXZhbHVlIiBhdHRyLXdoaWNoLWlzLXJlYWxseS1yZWFsbHktb2gtc28taG9ycmlibHktbG9uZy15ZXMtc2lyLTE9ImFsc28gcXVpdGUgZmFudGFzdGljYWxseSBsb25nIHZhbHVlIHdoaWNoIG11c3RuJ3QgYmUgIGJyb2tlbiIgYXR0cjM9InNob3J0LXZhbHVlIgotICA+Ci0gIAotCTxjZGF0YT4KLSA8IVtDREFUQVsKLSAgIERhYSwgZGFhLCBkYSwgZGEgLSBkYSwgZGEgLSBkYSwgZGEKLQkKLQkJQ2FuJ3QgdG91Y2ggdGhpcyEKLSAgKHNwYWNlcyBoZXJlKQotCSh0YWIgaGVyZSkKLQkJXV0+Ci0JPC9jZGF0YT4KLQk8YT4KLQk8Yj5iPC9iPgotCTxiPmIgPC9iPgotCTxiPiBiPC9iPiAgPCEtLSBDb21tZW50IGhlcmUgIGRvbid0IHR3aWRkbGUgd2l0aCBzcGFjZXMgaW4gdGhlbSAtLT4gICAgICAJPGI+IGIgPC9iPgotCTxiPgotCWIKLQk8L2I+Ci0JPGI+YjwvYj4KLQk8L2E+PD90YXJnZXQgIHdoeSAgYW0gIEkgIGhlcmUgCi0gID8+Ci08L2RhdGEtc3R1ZmY+Ci08L21haW4+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC90YWdzd2l0aGVtcHR5Y29udGVudC5kdGQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC90YWdzd2l0aGVtcHR5Y29udGVudC5kdGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3MjE3YTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvdGFnc3dpdGhlbXB0eWNvbnRlbnQuZHRkCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTwhRUxFTUVOVCB0b3Btb3N0IChlbXB0eSxlbXB0eXdpdGhhdHRyaWJ1dGUpPgotPCFFTEVNRU5UIGVtcHR5IEVNUFRZPgotPCFFTEVNRU5UIGVtcHR5d2l0aGF0dHJpYnV0ZSBFTVBUWT4KLTwhQVRUTElTVCBlbXB0eXdpdGhhdHRyaWJ1dGUKLQlteWF0dHJpYnV0ZTEgQ0RBVEEgI0lNUExJRUQKLQlteWF0dHJpYnV0ZTIgQ0RBVEEgI0lNUExJRUQ+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC91c2VjZGF0YS1mbXQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvdXNlY2RhdGEtZm10LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGZlNDNlMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC91c2VjZGF0YS1mbXQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08bWFueXRhZ3M+Ci0JPHNvbWV0YWcgc29tZWF0dHI9InNvbWVhdHRydmFsdWUiPjwhW0NEQVRBWwotICBibGFoIGJsYWggYmxhaCAKLSAgCQkJbm90aGluZwotICAJY2hhbmdlcwotICBpbgotaGVyZQotXV0+PC9zb21ldGFnPgotPC9tYW55dGFncz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC91c2VjZGF0YS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC91c2VjZGF0YS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViYzE3NmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvdXNlY2RhdGEueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08bWFueXRhZ3M+CTxzb21ldGFnIHNvbWVhdHRyPSJzb21lYXR0cnZhbHVlIj48IVtDREFUQVsKLSAgYmxhaCBibGFoIGJsYWggCi0gIAkJCW5vdGhpbmcKLSAgCWNoYW5nZXMKLSAgaW4KLWhlcmUKLV1dPjwvc29tZXRhZz4KLTwvbWFueXRhZ3M+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvdXNlY2RhdGEyLWZtdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC91c2VjZGF0YTItZm10LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWE0YTNhMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC91c2VjZGF0YTItZm10LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTxzY3JpcHQ+Ci0Jbm9zcGFjZWJldHdlZW5tZWFuZGNkYXRhPCFbQ0RBVEFbCi1mdW5jdGlvbiBtYXRjaHdvKGEsYikKLXsKLWlmIChhIDwgYiAmJiBhIDwgMCkgdGhlbgotICAgewotICAgcmV0dXJuIDEKLSAgIH0KLWVsc2UKLSAgIHsKLSAgIHJldHVybiAwCi0gICB9Ci19Ci1dXT5ub3NwYWNlYmV0d2Vlbm1lYW5kY2RhdGEKLTwvc2NyaXB0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3VzZWNkYXRhMi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC91c2VjZGF0YTIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYWI0ZWM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3VzZWNkYXRhMi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08c2NyaXB0Pgotbm9zcGFjZWJldHdlZW5tZWFuZGNkYXRhPCFbQ0RBVEFbCi1mdW5jdGlvbiBtYXRjaHdvKGEsYikKLXsKLWlmIChhIDwgYiAmJiBhIDwgMCkgdGhlbgotICAgewotICAgcmV0dXJuIDEKLSAgIH0KLWVsc2UKLSAgIHsKLSAgIHJldHVybiAwCi0gICB9Ci19Ci1dXT5ub3NwYWNlYmV0d2Vlbm1lYW5kY2RhdGEKLTwvc2NyaXB0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3VzZXRhZ3N3aXRoZW1wdHljb250ZW50LWZtdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC91c2V0YWdzd2l0aGVtcHR5Y29udGVudC1mbXQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YWMyZWVmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3VzZXRhZ3N3aXRoZW1wdHljb250ZW50LWZtdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgdG9wbW9zdCBTWVNURU0gInRhZ3N3aXRoZW1wdHljb250ZW50LmR0ZCIgPgotPHRvcG1vc3Q+Ci0JPGVtcHR5PjwvZW1wdHk+Ci0JPGVtcHR5d2l0aGF0dHJpYnV0ZQotCQlteWF0dHJpYnV0ZTE9IiIKLQkJbXlhdHRyaWJ1dGUyPSIiPjwvZW1wdHl3aXRoYXR0cmlidXRlPgotPC90b3Btb3N0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3VzZXRhZ3N3aXRoZW1wdHljb250ZW50LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3VzZXRhZ3N3aXRoZW1wdHljb250ZW50LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzI5OWNkNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC91c2V0YWdzd2l0aGVtcHR5Y29udGVudC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgdG9wbW9zdCBTWVNURU0gInRhZ3N3aXRoZW1wdHljb250ZW50LmR0ZCIgPgotPHRvcG1vc3Q+Ci0gIDxlbXB0eT48L2VtcHR5PgotICA8ZW1wdHl3aXRoYXR0cmlidXRlIG15YXR0cmlidXRlMT0iIiBteWF0dHJpYnV0ZTI9IiI+PC9lbXB0eXdpdGhhdHRyaWJ1dGU+Ci08L3RvcG1vc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLTIyMTI3OS1mbXQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLTIyMTI3OS1mbXQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMDJmYzBlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC0yMjEyNzktZm10LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxsaWJyYXJ5PgotCTxib29rcz4KLQkJPGJvb2s+Ci0JCQk8dGl0bGU+VGl0bGU8L3RpdGxlPgotCQkJPGF1dGhvcj5BdXRob3I8L2F1dGhvcj4KLQkJPC9ib29rIAotCTwvYm9va3M+Ci08L2xpYnJhcnk+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLTIyMTI3OS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtMjIxMjc5LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjkzMGIyMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtMjIxMjc5LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxsaWJyYXJ5PgotPGJvb2tzPgotPGJvb2s+Ci08dGl0bGU+VGl0bGU8L3RpdGxlPgotPGF1dGhvcj5BdXRob3I8L2F1dGhvcj4KLQk8L2Jvb2sgPC9ib29rcz4KLTwvbGlicmFyeT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtY2xlYXItYmxhbmstbGluZXMtZm10LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1jbGVhci1ibGFuay1saW5lcy1mbXQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTgxN2ExLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1jbGVhci1ibGFuay1saW5lcy1mbXQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290PgotCTwhLS0gQ29tbWVudCBub2RlIC0tPgotCTxub2NvbnRlbnQ+PC9ub2NvbnRlbnQ+Ci0JPG1peGVkY29udGVudD4KLQkJVGV4dG5vZGUgd2l0aCBzb21lIHRyYWlsaW5nIHdoaXRlc3BhY2UgLSBzaG91bGQgYmUgY29sbGFwc2VkIGFuZCBzb21lCi0JCW9mIHRoZSB0ZXh0IHNob3VsZCBiZSB3cmFwcGVkCi0JCTxtaXhlZD5BbGwgdGV4dDwvbWl4ZWQ+Ci0JPC9taXhlZGNvbnRlbnQ+Ci0JPG5vY29udGVudD4KLQk8L25vY29udGVudD4KLQk8c29tZW1vcmVub2NvbnRlbnQ+Ci0JCTxpbmRlbnRtb3JlPgotCQkJPGV2ZW5tb3JlPgotCQkJPC9ldmVubW9yZT4KLQkJPC9pbmRlbnRtb3JlPgotCTwvc29tZW1vcmVub2NvbnRlbnQ+Ci08L3Jvb3Q+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtY29tbWVudC1uZXdmbXQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWNvbW1lbnQtbmV3Zm10LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZmYWI1NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtY29tbWVudC1uZXdmbXQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxub2RlPgotCTxpbm5lcj4KLQkJPGFub3RoZXI+Ci0JCQk8ZWxzZT4gPCEtLSBEb24ndCB3cmFwIC0tPgotCQkJPC9lbHNlPgotCQkJPCEtLQotCQkJCUxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LiBNYWVjZW5hcwotCQkJCWVsaXQgZXN0LCBjb252YWxsaXMgaWQsIGNvbmd1ZSBpbiwgcG9zdWVyZSBldCwgbnVuYy4gU2VkIHV0IGxlY3R1cy4KLQkJCQlOdWxsYSBldSBkaWFtIGFjIG51bGxhIHBsYWNlcmF0IHRpbmNpZHVudC4gSW4gdml0YWUgdGVsbHVzLgotCQkJCVN1c3BlbmRpc3NlIHJ1dHJ1bS4gTnVuYyBtb2xsaXMgdXJuYSBhdCBtYXVyaXMgc3VzY2lwaXQgbGFjaW5pYS4KLQkJCQlQcmFlc2VudCBpbiBhbnRlLiBNYWVjZW5hcyB0aW5jaWR1bnQgbWF1cmlzIHMKLQkJCS0tPgotCQkJU29tZXRleHQgc3R1ZmYgaW4gdGhlIGRvY3VtZW50Ci0JCQk8c29tZXRoaW5nPgotCQkJCTxlbHNlIHhtbDpzcGFjZT0icHJlc2VydmUiPjwhLS0JTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVlciBhZGlwaXNjaW5nIGVsaXQuIE1hZWNlbmFzCQllbGl0IGVzdCwgY29udmFsbGlzIGlkLCBjb25ndWUgaW4sIHBvc3VlcmUgZXQsIG51bmMuIFNlZCB1dCBsZWN0dXMuCQkJTnVsbGEgZXUgZGlhbSBhYyBudWxsYSBwbGFjZXJhdCB0aW5jaWR1bnQuIEluIHZpdGFlIHRlbGx1cy4JCQkJU3VzcGVuZGlzc2UgcnV0cnVtLiBOdW5jIG1vbGxpcyB1cm5hIGF0IG1hdXJpcyBzdXNjaXBpdCBsYWNpbmlhLiBQcmFlc2VudCBpbiBhbnRlLiBNYWVjZW5hcyB0aW5jaWR1bnQgbWF1cmlzIHMtLT48L2Vsc2U+Ci0JCQk8L3NvbWV0aGluZz4KLQkJPC9hbm90aGVyPgotCTwvaW5uZXI+Ci08L25vZGU+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtY29tbWVudC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtY29tbWVudC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhZmVjN2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWNvbW1lbnQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxub2RlPgotCTxpbm5lcj4KLQkJPGFub3RoZXI+Ci0JCQk8ZWxzZT4gPCEtLSBEb24ndCB3cmFwIC0tPgotCQkJPC9lbHNlPjwhLS0JCQkJTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVlciBhZGlwaXNjaW5nIGVsaXQuIE1hZWNlbmFzCQkJCWVsaXQgZXN0LCBjb252YWxsaXMgaWQsIGNvbmd1ZSBpbiwgcG9zdWVyZSBldCwgbnVuYy4gU2VkIHV0IGxlY3R1cy4JCQkJTnVsbGEgZXUgZGlhbSBhYyBudWxsYSBwbGFjZXJhdCB0aW5jaWR1bnQuIEluIHZpdGFlIHRlbGx1cy4JCQkJU3VzcGVuZGlzc2UgcnV0cnVtLiBOdW5jIG1vbGxpcyB1cm5hIGF0IG1hdXJpcyBzdXNjaXBpdCBsYWNpbmlhLiBQcmFlc2VudCBpbiBhbnRlLiBNYWVjZW5hcyB0aW5jaWR1bnQgbWF1cmlzIHMtLT4KLQkJCVNvbWV0ZXh0IHN0dWZmIGluIHRoZSBkb2N1bWVudAotCTxzb21ldGhpbmc+Ci0JCQkJPGVsc2UgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PCEtLQlMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdC4gTWFlY2VuYXMJCWVsaXQgZXN0LCBjb252YWxsaXMgaWQsIGNvbmd1ZSBpbiwgcG9zdWVyZSBldCwgbnVuYy4gU2VkIHV0IGxlY3R1cy4JCQlOdWxsYSBldSBkaWFtIGFjIG51bGxhIHBsYWNlcmF0IHRpbmNpZHVudC4gSW4gdml0YWUgdGVsbHVzLgkJCQlTdXNwZW5kaXNzZSBydXRydW0uIE51bmMgbW9sbGlzIHVybmEgYXQgbWF1cmlzIHN1c2NpcGl0IGxhY2luaWEuIFByYWVzZW50IGluIGFudGUuIE1hZWNlbmFzIHRpbmNpZHVudCBtYXVyaXMgcy0tPjwvZWxzZT4KLQk8L3NvbWV0aGluZz4KLQkJPC9hbm90aGVyPgotCTwvaW5uZXI+Ci08L25vZGU+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtZW1wdHktdGFnLXNwYWNlLW5ld2ZtdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtZW1wdHktdGFnLXNwYWNlLW5ld2ZtdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyOWFmZDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWVtcHR5LXRhZy1zcGFjZS1uZXdmbXQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPG1haW4+Ci0JPGEgdGFnPSJ3aXRoIj4gU29tZSBjb250ZW50IDwvYT4KLQk8bm9jb250ZW50d2l0aHNwYWNlIC8+Ci0JPG5vY29udGVudHdpdGhvdXRzcGFjZSAvPgotCTxub2NvbnRlbnQgd2l0aGF0dHI9InN0dWZmIiAvPgotCTxub2NvbnRlbnQgLz4KLQk8bWFueWxpbmVkY29udGVudCB3aXRoPSJhdHRyaWJ1dGVzIiAvPgotPC9tYWluPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWVtcHR5LXRhZy1zcGFjZS1ub25lLW5ld2ZtdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtZW1wdHktdGFnLXNwYWNlLW5vbmUtbmV3Zm10LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDhlNjFkNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtZW1wdHktdGFnLXNwYWNlLW5vbmUtbmV3Zm10LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxtYWluPgotCTxhIHRhZz0id2l0aCI+IFNvbWUgY29udGVudCA8L2E+Ci0JPG5vY29udGVudHdpdGhzcGFjZS8+Ci0JPG5vY29udGVudHdpdGhvdXRzcGFjZS8+Ci0JPG5vY29udGVudCB3aXRoYXR0cj0ic3R1ZmYiLz4KLQk8bm9jb250ZW50Lz4KLQk8bWFueWxpbmVkY29udGVudCB3aXRoPSJhdHRyaWJ1dGVzIi8+Ci08L21haW4+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtZW1wdHktdGFnLXNwYWNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1lbXB0eS10YWctc3BhY2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNmZhZmVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1lbXB0eS10YWctc3BhY2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxtYWluPgotCTxhIHRhZz0id2l0aCI+IFNvbWUgY29udGVudCA8L2E+Ci0JPG5vY29udGVudHdpdGhzcGFjZSAvPgotCTxub2NvbnRlbnR3aXRob3V0c3BhY2UvPgotCTxub2NvbnRlbnQgd2l0aGF0dHI9InN0dWZmIi8+Ci0JPG5vY29udGVudCAgICAJCS8+Ci0JPG1hbnlsaW5lZGNvbnRlbnQgCi0JCi0JCXdpdGg9ImF0dHJpYnV0ZXMiCi0JCQkvPgotPC9tYWluPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWtlZXAtYmxhbmstbGluZXMtZm10LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1rZWVwLWJsYW5rLWxpbmVzLWZtdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExZDVhZjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWtlZXAtYmxhbmstbGluZXMtZm10LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdD4KLQotCTwhLS0gQ29tbWVudCBub2RlIC0tPgotCi0JPG5vY29udGVudD48L25vY29udGVudD4KLQotCTxtaXhlZGNvbnRlbnQ+Ci0JCVRleHRub2RlIHdpdGggc29tZSB0cmFpbGluZyB3aGl0ZXNwYWNlIC0gc2hvdWxkIGJlCi0KLQkJY29sbGFwc2VkIGFuZCBzb21lIG9mIHRoZSB0ZXh0IHNob3VsZCBiZSB3cmFwcGVkCi0KLQkJPG1peGVkPkFsbCB0ZXh0PC9taXhlZD4KLQotCTwvbWl4ZWRjb250ZW50PgotCi0KLQotCi0JPG5vY29udGVudD4KLQk8L25vY29udGVudD4KLQotCTxzb21lbW9yZW5vY29udGVudD4KLQkJPGluZGVudG1vcmU+Ci0JCQk8ZXZlbm1vcmU+Ci0KLQkJCTwvZXZlbm1vcmU+Ci0JCTwvaW5kZW50bW9yZT4KLQk8L3NvbWVtb3Jlbm9jb250ZW50PgotPC9yb290PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWtlZXAtYmxhbmstbGluZXMueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLWtlZXAtYmxhbmstbGluZXMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOWNhZDJkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1rZWVwLWJsYW5rLWxpbmVzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci0JCTxyb290PgotCQkKLQkJPCEtLSBDb21tZW50IG5vZGUgLS0+Ci0JCQotCQkJCQk8bm9jb250ZW50Pjwvbm9jb250ZW50PgotCQkKLTxtaXhlZGNvbnRlbnQ+Ci1UZXh0bm9kZSB3aXRoIAkJCXNvbWUgdHJhaWxpbmcgd2hpdGVzcGFjZSAtIHNob3VsZCBiZQotCi1jb2xsYXBzZWQgYW5kIHNvbWUgb2YgdGhlIHRleHQgc2hvdWxkIGJlIHdyYXBwZWQKLQotCQkJPG1peGVkPkFsbCB0ZXh0PC9taXhlZD4KLQotPC9taXhlZGNvbnRlbnQ+Ci0KLQotCi0KLQkJPG5vY29udGVudD4JCQk8L25vY29udGVudD4KLQkJCi0JCQkJPHNvbWVtb3Jlbm9jb250ZW50PgotCQkJCQk8aW5kZW50bW9yZT4JCQk8ZXZlbm1vcmU+Ci0JCQkJCQotCQkJCQk8L2V2ZW5tb3JlPgotCQk8L2luZGVudG1vcmU+Ci0JCQkJCQkJCQk8L3NvbWVtb3Jlbm9jb250ZW50PgotCTwvcm9vdD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1wcmVzZXJ2ZXBjZGF0YS1uby1mbXQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLXByZXNlcnZlcGNkYXRhLW5vLWZtdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwNjgzZjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLXByZXNlcnZlcGNkYXRhLW5vLWZtdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIHBjZGF0YWxpY2lvdXMgU1lTVEVNICJ4bWwtcHJlc2VydmVwY2RhdGEuZHRkIiA+Ci08cGNkYXRhbGljaW91cz4KLQk8aWhhdmVwY2RhdGE+aSBoYXZlIHBjZGF0YTwvaWhhdmVwY2RhdGE+Ci0JPGloYXZlcGNkYXRhPgotCQlpIGhhdmUKLQotCi0KLQkJc3BhY2VzCi0JPC9paGF2ZXBjZGF0YT4KLQk8aWRvbnQgLz4KLQk8bmVpdGhlcmRvaT5kbyBpIGhhdmUgcGNkYXRhPyBpJ20gbm90IHN1cmUuIGJvbyBob28uPC9uZWl0aGVyZG9pPgotPC9wY2RhdGFsaWNpb3VzPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLXByZXNlcnZlcGNkYXRhLW5vLW5ld2ZtdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtcHJlc2VydmVwY2RhdGEtbm8tbmV3Zm10LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTU2YWZmOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtcHJlc2VydmVwY2RhdGEtbm8tbmV3Zm10LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBwY2RhdGFsaWNpb3VzIFNZU1RFTSAieG1sLXByZXNlcnZlcGNkYXRhLmR0ZCIgPgotPHBjZGF0YWxpY2lvdXM+Ci0JPGloYXZlcGNkYXRhPmkgaGF2ZSBwY2RhdGE8L2loYXZlcGNkYXRhPgotCTxpaGF2ZXBjZGF0YT4gaSBoYXZlIHNwYWNlcyA8L2loYXZlcGNkYXRhPgotCTxpZG9udCAvPgotCTxuZWl0aGVyZG9pPmRvIGkgaGF2ZSBwY2RhdGE/IGknbSBub3Qgc3VyZS4gYm9vIGhvby48L25laXRoZXJkb2k+Ci08L3BjZGF0YWxpY2lvdXM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLXByZXNlcnZlcGNkYXRhLXllcy1mbXQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLXByZXNlcnZlcGNkYXRhLXllcy1mbXQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTA5YzhmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1wcmVzZXJ2ZXBjZGF0YS15ZXMtZm10LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgcGNkYXRhbGljaW91cyBTWVNURU0gInhtbC1wcmVzZXJ2ZXBjZGF0YS5kdGQiID4KLTxwY2RhdGFsaWNpb3VzPgotCTxpaGF2ZXBjZGF0YT5pIGhhdmUgICAgICBwY2RhdGE8L2loYXZlcGNkYXRhPgotCTxpaGF2ZXBjZGF0YT4gICBpIGhhdmUgIAotICAKLSAgCi0gIAotICAgICAgc3BhY2VzICAgPC9paGF2ZXBjZGF0YT4KLQk8aWRvbnQgLz4KLQk8bmVpdGhlcmRvaT5kbyBpIGhhdmUgcGNkYXRhPyBpJ20gbm90IHN1cmUuIGJvbyBob28uPC9uZWl0aGVyZG9pPgotPC9wY2RhdGFsaWNpb3VzPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLXByZXNlcnZlcGNkYXRhLmR0ZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1wcmVzZXJ2ZXBjZGF0YS5kdGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkMDg2ZGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLXByZXNlcnZlcGNkYXRhLmR0ZAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08IUVMRU1FTlQgcGNkYXRhbGljaW91cyAoaWhhdmVwY2RhdGEqLGlkb250KixuZWl0aGVyZG9pKik+Ci08IUVMRU1FTlQgaWhhdmVwY2RhdGEgKCNQQ0RBVEEpPgotPCFFTEVNRU5UIGlkb250IEVNUFRZPgotPCFFTEVNRU5UIG5laXRoZXJkb2kgQU5ZPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLXByZXNlcnZlcGNkYXRhLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1wcmVzZXJ2ZXBjZGF0YS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4NzRmODcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLXByZXNlcnZlcGNkYXRhLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgcGNkYXRhbGljaW91cyBTWVNURU0gInhtbC1wcmVzZXJ2ZXBjZGF0YS5kdGQiID4KLTxwY2RhdGFsaWNpb3VzPgotICA8aWhhdmVwY2RhdGE+aSBoYXZlICAgICAgcGNkYXRhPC9paGF2ZXBjZGF0YT4KLSAgPGloYXZlcGNkYXRhPiAgIGkgaGF2ZSAgCi0gIAotICAKLSAgCi0gICAgICBzcGFjZXMgICA8L2loYXZlcGNkYXRhPgotICA8aWRvbnQvPgotICA8bmVpdGhlcmRvaT5kbyBpIGhhdmUgcGNkYXRhPyBpJ20gbm90IHN1cmUuIGJvbyBob28uPC9uZWl0aGVyZG9pPgotPC9wY2RhdGFsaWNpb3VzPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLXNwYWNlLXByZXNlcnZlLWR0ZC1hY3R1YWwueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLXNwYWNlLXByZXNlcnZlLWR0ZC1hY3R1YWwueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMzBjMDQ3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1zcGFjZS1wcmVzZXJ2ZS1kdGQtYWN0dWFsLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotPCFET0NUWVBFIG1haW4gU1lTVEVNICJ4bWwtc3BhY2UtcHJlc2VydmUuZHRkIj4KLTxtYWluPgotCTxub3RoaW5nPgotCQl0aGlzICBpcyBub3QgYSAgdGFyZ2V0LCBzdHJpcCBzcGFjZXMgYXMKLQkJeW91ICBwbGVhc2UgPC9ub3RoaW5nPgotPHByZXNlcnZlPgotICBUaGlzIGlzIGp1c3QKLSAgICAgCi0gYSBzaW1wbGUgdGVzdAotIC4KLSAgLgotICAuCi0gIDwvcHJlc2VydmU+Ci0gICBvZiB0aGUgZm9ybWF0dGVyLgotICAgPHByZXNlcnZlIHhtbDpzcGFjZT0iZGVmYXVsdCI+Ci0JCVRoaXMgcGFydGljdWxhciB0ZXh0IGNhbgotCi0JCWFuZCBzaG91bGQgYmUgcmVmb3JtYXR0ZWQuCi0gICA8L3ByZXNlcnZlPgotICAgCi08cHJlc2VydmU+Ci0gIFRoaXMgaXMganVzdAotICAgICAKLSBhIHNpbXBsZSB0ZXN0Ci0gICAgPG5vdGhpbmc+Ci0JCXRoaXMgc3BhY2UgICBpcyBub3QgZm9yIHNhbGUJT1IgRk9STUFUVElORwotCQksIHBsZWFzZSA8L25vdGhpbmc+IDwhLS0gTk9URSBUSEUgU1BBQ0VTIC0tPiAgPHNwYWNlLWRlZmF1bHQ+Ci0gTm8gbWFuCi0gCi0gaXMgYW4KLSAKLSBpc2xhbmQsIC4KLSAgLgotICAuCi0gYnV0IHRoaXMgc2VjdGlvbiBpcywgcmVhbGx5LCBzbyBjbGVhbiBpdCB1cCBwbGVhc2UgLSB3YXN0ZSBvZiAgICAgICAgICAgc3BhY2UKLSAJPC9zcGFjZS1kZWZhdWx0PgotICAuCi0gIC4gVGhpcyBzaG91bGQgYmUgc3BhY2UgICBwcmVzZXJ2ZWQKLSAgPC9wcmVzZXJ2ZT4KLSAgIDxwcmVzZXJ2ZTI+Ci1UaGlzIHBhcnRpY3VsYXIKLSAgdGV4dCBtYXkgCi0KLW5vdCAgcmVmb3JtYXR0ZWQuPC9wcmVzZXJ2ZTI+ICA8bm90aGluZz4KLQkJdGhpcyAgaXMgbm90IGEgIHRhcmdldCwgc3RyaXAgc3BhY2VzIGFzCi0JCXlvdSAgcGxlYXNlIDwvbm90aGluZz4KLTwvbWFpbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtc3BhY2UtcHJlc2VydmUtZHRkLWZtdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtc3BhY2UtcHJlc2VydmUtZHRkLWZtdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3MWU2ZjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLXNwYWNlLXByZXNlcnZlLWR0ZC1mbXQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08IURPQ1RZUEUgbWFpbiBTWVNURU0gInhtbC1zcGFjZS1wcmVzZXJ2ZS5kdGQiPgotPG1haW4+Ci0JPG5vdGhpbmc+dGhpcyBpcyBub3QgYSB0YXJnZXQsIHN0cmlwIHNwYWNlcyBhcyB5b3UgcGxlYXNlPC9ub3RoaW5nPgotCTxwcmVzZXJ2ZT4KLSAgVGhpcyBpcyBqdXN0Ci0gICAgIAotIGEgc2ltcGxlIHRlc3QKLSAuCi0gIC4KLSAgLgotICA8L3ByZXNlcnZlPgotCW9mIHRoZSBmb3JtYXR0ZXIuCi0JPHByZXNlcnZlIHhtbDpzcGFjZT0iZGVmYXVsdCI+Ci0JCVRoaXMgcGFydGljdWxhciB0ZXh0IGNhbgotCi0JCWFuZCBzaG91bGQgYmUgcmVmb3JtYXR0ZWQuCi0JPC9wcmVzZXJ2ZT4KLQotCTxwcmVzZXJ2ZT4KLSAgVGhpcyBpcyBqdXN0Ci0gICAgIAotIGEgc2ltcGxlIHRlc3QKLSAgICA8bm90aGluZz4KLQkJdGhpcyBzcGFjZSAgIGlzIG5vdCBmb3Igc2FsZQlPUiBGT1JNQVRUSU5HCi0JCSwgcGxlYXNlIDwvbm90aGluZz4gPCEtLSBOT1RFIFRIRSBTUEFDRVMgLS0+ICA8c3BhY2UtZGVmYXVsdD4KLQkJCU5vIG1hbgotCi0JCQlpcyBhbgotCi0JCQlpc2xhbmQsIC4gLiAuIGJ1dCB0aGlzIHNlY3Rpb24gaXMsIHJlYWxseSwgc28gY2xlYW4gaXQgdXAKLQkJCXBsZWFzZSAtIHdhc3RlIG9mIHNwYWNlCi0gIDwvc3BhY2UtZGVmYXVsdD4KLSAgLgotICAuIFRoaXMgc2hvdWxkIGJlIHNwYWNlICAgcHJlc2VydmVkCi0gIDwvcHJlc2VydmU+Ci0JPHByZXNlcnZlMj4KLVRoaXMgcGFydGljdWxhcgotICB0ZXh0IG1heSAKLQotbm90ICByZWZvcm1hdHRlZC48L3ByZXNlcnZlMj4KLQk8bm90aGluZz50aGlzIGlzIG5vdCBhIHRhcmdldCwgc3RyaXAgc3BhY2VzIGFzIHlvdSBwbGVhc2U8L25vdGhpbmc+Ci08L21haW4+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtc3BhY2UtcHJlc2VydmUtZHRkLW5ld2ZtdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtc3BhY2UtcHJlc2VydmUtZHRkLW5ld2ZtdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmYzk0OTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLXNwYWNlLXByZXNlcnZlLWR0ZC1uZXdmbXQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08IURPQ1RZUEUgbWFpbiBTWVNURU0gInhtbC1zcGFjZS1wcmVzZXJ2ZS5kdGQiPgotPG1haW4+Ci0JPG5vdGhpbmc+IHRoaXMgaXMgbm90IGEgdGFyZ2V0LCBzdHJpcCBzcGFjZXMgYXMgeW91IHBsZWFzZSA8L25vdGhpbmc+Ci0JPHByZXNlcnZlPgotICBUaGlzIGlzIGp1c3QKLSAgICAgCi0gYSBzaW1wbGUgdGVzdAotIC4KLSAgLgotICAuCi0gIDwvcHJlc2VydmU+Ci0Jb2YgdGhlIGZvcm1hdHRlci4KLQk8cHJlc2VydmUgeG1sOnNwYWNlPSJkZWZhdWx0Ij4KLQkJVGhpcyBwYXJ0aWN1bGFyIHRleHQgY2FuIGFuZCBzaG91bGQgYmUgcmVmb3JtYXR0ZWQuCi0JPC9wcmVzZXJ2ZT4KLQk8cHJlc2VydmU+Ci0gIFRoaXMgaXMganVzdAotICAgICAKLSBhIHNpbXBsZSB0ZXN0Ci0gICAgPG5vdGhpbmc+Ci0JCXRoaXMgc3BhY2UgICBpcyBub3QgZm9yIHNhbGUJT1IgRk9STUFUVElORwotCQksIHBsZWFzZSA8L25vdGhpbmc+IDwhLS0gTk9URSBUSEUgU1BBQ0VTIC0tPiAgPHNwYWNlLWRlZmF1bHQ+Ci0JCU5vIG1hbiBpcyBhbiBpc2xhbmQsIC4gLiAuIGJ1dCB0aGlzIHNlY3Rpb24gaXMsIHJlYWxseSwgc28gY2xlYW4gaXQgdXAKLQkJcGxlYXNlIC0gd2FzdGUgb2Ygc3BhY2UKLQk8L3NwYWNlLWRlZmF1bHQ+Ci0gIC4KLSAgLiBUaGlzIHNob3VsZCBiZSBzcGFjZSAgIHByZXNlcnZlZAotICA8L3ByZXNlcnZlPgotCTxwcmVzZXJ2ZTI+Ci1UaGlzIHBhcnRpY3VsYXIKLSAgdGV4dCBtYXkgCi0KLW5vdCAgcmVmb3JtYXR0ZWQuPC9wcmVzZXJ2ZTI+Ci0JPG5vdGhpbmc+IHRoaXMgaXMgbm90IGEgdGFyZ2V0LCBzdHJpcCBzcGFjZXMgYXMgeW91IHBsZWFzZSA8L25vdGhpbmc+Ci08L21haW4+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtc3BhY2UtcHJlc2VydmUtZHRkLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1zcGFjZS1wcmVzZXJ2ZS1kdGQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOGEyYjcyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1zcGFjZS1wcmVzZXJ2ZS1kdGQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08IURPQ1RZUEUgbWFpbiBTWVNURU0gInhtbC1zcGFjZS1wcmVzZXJ2ZS5kdGQiPgotPG1haW4+Ci0JPG5vdGhpbmc+Ci0JCXRoaXMgIGlzIG5vdCBhICB0YXJnZXQsIHN0cmlwIHNwYWNlcyBhcwotCQl5b3UgIHBsZWFzZSA8L25vdGhpbmc+Ci08cHJlc2VydmUgICAgID4KLSAgVGhpcyBpcyBqdXN0Ci0gICAgIAotIGEgc2ltcGxlIHRlc3QKLSAuCi0gIC4KLSAgLgotICA8L3ByZXNlcnZlPgotICAgb2YgdGhlIGZvcm1hdHRlci4KLSAgIDxwcmVzZXJ2ZSB4bWw6c3BhY2U9ImRlZmF1bHQiPgotVGhpcyBwYXJ0aWN1bGFyIHRleHQgY2FuIAotCi1hbmQgICAgIHNob3VsZCBiZSByZWZvcm1hdHRlZC48L3ByZXNlcnZlPgotICAgCi08cHJlc2VydmUgICAgID4KLSAgVGhpcyBpcyBqdXN0Ci0gICAgIAotIGEgc2ltcGxlIHRlc3QKLSAgICA8bm90aGluZz4KLQkJdGhpcyBzcGFjZSAgIGlzIG5vdCBmb3Igc2FsZQlPUiBGT1JNQVRUSU5HCi0JCSwgcGxlYXNlIDwvbm90aGluZz4gPCEtLSBOT1RFIFRIRSBTUEFDRVMgLS0+ICA8c3BhY2UtZGVmYXVsdCA+Ci0gTm8gbWFuCi0gCi0gaXMgYW4KLSAKLSBpc2xhbmQsIC4KLSAgLgotICAuCi0gYnV0IHRoaXMgc2VjdGlvbiBpcywgcmVhbGx5LCBzbyBjbGVhbiBpdCB1cCBwbGVhc2UgLSB3YXN0ZSBvZiAgICAgICAgICAgc3BhY2UKLSAJPC9zcGFjZS1kZWZhdWx0PgotICAuCi0gIC4gVGhpcyBzaG91bGQgYmUgc3BhY2UgICBwcmVzZXJ2ZWQKLSAgPC9wcmVzZXJ2ZT4KLSAgIDxwcmVzZXJ2ZTI+Ci1UaGlzIHBhcnRpY3VsYXIKLSAgdGV4dCBtYXkgCi0KLW5vdCAgcmVmb3JtYXR0ZWQuPC9wcmVzZXJ2ZTI+ICA8bm90aGluZz4KLQkJdGhpcyAgaXMgbm90IGEgIHRhcmdldCwgc3RyaXAgc3BhY2VzIGFzCi0JCXlvdSAgcGxlYXNlIDwvbm90aGluZz4KLTwvbWFpbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1zcGFjZS1wcmVzZXJ2ZS1zdGFuZGFsb25lLWZtdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtc3BhY2UtcHJlc2VydmUtc3RhbmRhbG9uZS1mbXQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTExOTNlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1zcGFjZS1wcmVzZXJ2ZS1zdGFuZGFsb25lLWZtdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTxtYWluPgotCTxub3RoaW5nPnRoaXMgaXMgbm90IGEgdGFyZ2V0LCBzdHJpcCBzcGFjZXMgYXMgeW91IHBsZWFzZTwvbm90aGluZz4KLQk8cHJlc2VydmUgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgYnV0LWF0dHItY2xlYW4tdXA9InRydWUiPgotICBUaGlzIGlzIGp1c3QKLSAgICAgCi0gYSBzaW1wbGUgdGVzdAotIC4KLSAgLgotICAuCi0gIDwvcHJlc2VydmU+Ci0Jb2YgdGhlIGZvcm1hdHRlcgotCTxwcmVzZXJ2ZSB4bWw6c3BhY2U9InByZXNlcnZlIiBidXQtYXR0ci1jbGVhbi11cD0idHJ1ZSI+Ci0gIFRoaXMgaXMganVzdAotICAgICAKLSBhIHNpbXBsZSB0ZXN0Ci0gICAgPG5vdGhpbmc+Ci0JCXRoaXMgc3BhY2UgICBpcyBub3QgZm9yIHNhbGUJT1IgRk9STUFUVElORwotCQksIHBsZWFzZSA8L25vdGhpbmc+IDwhLS0gTk9URSBUSEUgU1BBQ0VTIC0tPiAgPHNwYWNlLWRlZmF1bHQKLQkJCXhtbDpzcGFjZT0iZGVmYXVsdCI+Ci0JCQlObyBtYW4KLQotCQkJaXMgYW4KLQotCQkJaXNsYW5kLCAuIC4gLiBidXQgdGhpcyBzZWN0aW9uIGlzLCByZWFsbHksIHNvIGNsZWFuIGl0IHVwCi0JCQlwbGVhc2UgLSB3YXN0ZSBvZiBzcGFjZQotICA8L3NwYWNlLWRlZmF1bHQ+Ci0gIC4KLSAgLiBUaGlzIHNob3VsZCBiZSBzcGFjZSAgIHByZXNlcnZlZAotICA8L3ByZXNlcnZlPgotCTxub3RoaW5nPnRoaXMgaXMgbm90IGEgdGFyZ2V0LCBzdHJpcCBzcGFjZXMgYXMgeW91IHBsZWFzZTwvbm90aGluZz4KLTwvbWFpbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1zcGFjZS1wcmVzZXJ2ZS1zdGFuZGFsb25lLW5ld2ZtdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtc3BhY2UtcHJlc2VydmUtc3RhbmRhbG9uZS1uZXdmbXQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNmZjZjdkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1zcGFjZS1wcmVzZXJ2ZS1zdGFuZGFsb25lLW5ld2ZtdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTxtYWluPgotCTxub3RoaW5nPiB0aGlzIGlzIG5vdCBhIHRhcmdldCwgc3RyaXAgc3BhY2VzIGFzIHlvdSBwbGVhc2UgPC9ub3RoaW5nPgotCTxwcmVzZXJ2ZSB4bWw6c3BhY2U9InByZXNlcnZlIiBidXQtYXR0ci1jbGVhbi11cD0idHJ1ZSI+Ci0gIFRoaXMgaXMganVzdAotICAgICAKLSBhIHNpbXBsZSB0ZXN0Ci0gLgotICAuCi0gIC4KLSAgPC9wcmVzZXJ2ZT4KLQlvZiB0aGUgZm9ybWF0dGVyCi0JPHByZXNlcnZlIHhtbDpzcGFjZT0icHJlc2VydmUiIGJ1dC1hdHRyLWNsZWFuLXVwPSJ0cnVlIj4KLSAgVGhpcyBpcyBqdXN0Ci0gICAgIAotIGEgc2ltcGxlIHRlc3QKLSAgICA8bm90aGluZz4KLQkJdGhpcyBzcGFjZSAgIGlzIG5vdCBmb3Igc2FsZQlPUiBGT1JNQVRUSU5HCi0JCSwgcGxlYXNlIDwvbm90aGluZz4gPCEtLSBOT1RFIFRIRSBTUEFDRVMgLS0+ICA8c3BhY2UtZGVmYXVsdAotCQl4bWw6c3BhY2U9ImRlZmF1bHQiPgotCQlObyBtYW4gaXMgYW4gaXNsYW5kLCAuIC4gLiBidXQgdGhpcyBzZWN0aW9uIGlzLCByZWFsbHksIHNvIGNsZWFuIGl0IHVwCi0JCXBsZWFzZSAtIHdhc3RlIG9mIHNwYWNlCi0JPC9zcGFjZS1kZWZhdWx0PgotICAuCi0gIC4gVGhpcyBzaG91bGQgYmUgc3BhY2UgICBwcmVzZXJ2ZWQKLSAgPC9wcmVzZXJ2ZT4KLQk8bm90aGluZz4gdGhpcyBpcyBub3QgYSB0YXJnZXQsIHN0cmlwIHNwYWNlcyBhcyB5b3UgcGxlYXNlIDwvbm90aGluZz4KLTwvbWFpbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtc3BhY2UtcHJlc2VydmUtc3RhbmRhbG9uZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtc3BhY2UtcHJlc2VydmUtc3RhbmRhbG9uZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiMTg3NTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLXNwYWNlLXByZXNlcnZlLXN0YW5kYWxvbmUueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08bWFpbj4KLQk8bm90aGluZz4KLQkJdGhpcyAgaXMgbm90IGEgIHRhcmdldCwgc3RyaXAgc3BhY2VzIGFzCi0JCXlvdSAgcGxlYXNlIDwvbm90aGluZz4KLTxwcmVzZXJ2ZSB4bWw6c3BhY2U9InByZXNlcnZlIiAgICBidXQtYXR0ci1jbGVhbi11cCA9ICJ0cnVlIj4KLSAgVGhpcyBpcyBqdXN0Ci0gICAgIAotIGEgc2ltcGxlIHRlc3QKLSAuCi0gIC4KLSAgLgotICA8L3ByZXNlcnZlPgotICAgb2YgdGhlIGZvcm1hdHRlcgotPHByZXNlcnZlICB4bWw6c3BhY2U9InByZXNlcnZlIiAgICBidXQtYXR0ci1jbGVhbi11cCA9ICJ0cnVlIj4KLSAgVGhpcyBpcyBqdXN0Ci0gICAgIAotIGEgc2ltcGxlIHRlc3QKLSAgICA8bm90aGluZz4KLQkJdGhpcyBzcGFjZSAgIGlzIG5vdCBmb3Igc2FsZQlPUiBGT1JNQVRUSU5HCi0JCSwgcGxlYXNlIDwvbm90aGluZz4gPCEtLSBOT1RFIFRIRSBTUEFDRVMgLS0+ICA8c3BhY2UtZGVmYXVsdCB4bWw6c3BhY2U9ImRlZmF1bHQiPgotIE5vIG1hbgotIAotIGlzIGFuCi0gCi0gaXNsYW5kLCAuCi0gIC4KLSAgLgotIGJ1dCB0aGlzIHNlY3Rpb24gaXMsIHJlYWxseSwgc28gY2xlYW4gaXQgdXAgcGxlYXNlIC0gd2FzdGUgb2YgICAgICAgICAgIHNwYWNlCi0gCTwvc3BhY2UtZGVmYXVsdD4KLSAgLgotICAuIFRoaXMgc2hvdWxkIGJlIHNwYWNlICAgcHJlc2VydmVkCi0gIDwvcHJlc2VydmU+Ci0gIDxub3RoaW5nPgotCQl0aGlzICBpcyBub3QgYSAgdGFyZ2V0LCBzdHJpcCBzcGFjZXMgYXMKLQkJeW91ICBwbGVhc2UgPC9ub3RoaW5nPgotPC9tYWluPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLXNwYWNlLXByZXNlcnZlLmR0ZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1zcGFjZS1wcmVzZXJ2ZS5kdGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlNTY3YmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLXNwYWNlLXByZXNlcnZlLmR0ZAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTw/eG1sIGVuY29kaW5nPSJVUy1BU0NJSSI/Pg0KLQ0KLTwhRUxFTUVOVCBtYWluICgjUENEQVRBIHwgbm90aGluZyB8IHByZXNlcnZlIHwgcHJlc2VydmUyKSogPg0KLQ0KLTwhRUxFTUVOVCBwcmVzZXJ2ZSAoI1BDREFUQSB8IG5vdGhpbmcgfCBzcGFjZS1kZWZhdWx0KSogPg0KLTwhQVRUTElTVCBwcmVzZXJ2ZSB4bWw6c3BhY2UgKGRlZmF1bHR8cHJlc2VydmUpICdwcmVzZXJ2ZSc+DQotDQotPCFFTEVNRU5UIHByZXNlcnZlMiAoI1BDREFUQSB8IG5vdGhpbmcgfCBzcGFjZS1kZWZhdWx0KSogPg0KLTwhQVRUTElTVCBwcmVzZXJ2ZTIgeG1sOnNwYWNlIE5NVE9LRU4gI0ZJWEVEICJwcmVzZXJ2ZSI+DQotDQotPCFFTEVNRU5UIHNwYWNlLWRlZmF1bHQgKCNQQ0RBVEF8IG5vdGhpbmcgfCBwcmVzZXJ2ZSkqPg0KLTwhQVRUTElTVCBzcGFjZS1kZWZhdWx0IHhtbDpzcGFjZSAoZGVmYXVsdHxwcmVzZXJ2ZSkgJ2RlZmF1bHQnPg0KLQ0KLTwhRUxFTUVOVCBub3RoaW5nICgjUENEQVRBKSA+DQotDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLXdoaXRlc3BhY2UteHNkLWFjdHVhbC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtd2hpdGVzcGFjZS14c2QtYWN0dWFsLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWUzZTVmYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtd2hpdGVzcGFjZS14c2QtYWN0dWFsLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c29uZyB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotCXhzaTpub05hbWVzcGFjZVNjaGVtYUxvY2F0aW9uPSJ4bWwtd2hpdGVzcGFjZS54c2QiPgotCTxhcnRpc3Q+ICAgU29tZSAgU2luZ2VyICA8L2FydGlzdD4KLQk8eWVhcj4xOTkyPC95ZWFyPgotCTx0aXRsZT5Mb3JlbSBpcHN1bSBkb2xvcjwvdGl0bGU+Ci0JPGx5cmljcz5Mb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdC4KLQkJIE51bmMgaW4gbmlzaS4gSW50ZWdlciBxdWlzIHF1YW0gbm9uIGVyb3MgYWNjdW1zYW4gZWxlbWVudHVtLgotCQkJU2VkIHJpc3VzIG9yY2ksCQkgbG9ib3J0aXMgYXQsIHB1bHZpbmFyIGF0LCB2YXJpdXMgYWMsIG5lcXVlLgotCU1vcmJpIHBlZGUgbnVsbGEsIHRpbmNpZHVudCBhYywgc2VtcGVyIHZlbCwgdWx0cmljaWVzIHZpdGFlLCBsYWN1cy4KLQkJTnVuYyBudW5jLgkJICAgPC9seXJpY3M+Ci0JPGxlbmd0aD4yPC9sZW5ndGg+Ci0JPGFsYnVtPkxvcmVtIGlwc3VtIGRvbG9yPC9hbGJ1bT4KLQk8bG9jYXRpb24+ICAgICBSYWxlaWdoLCAgTkMsICAgICAgVVNBICA8L2xvY2F0aW9uPgotPC9zb25nPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLXdoaXRlc3BhY2UteHNkLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC13aGl0ZXNwYWNlLXhzZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4ZWJkMWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLXdoaXRlc3BhY2UteHNkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c29uZyB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotCXhzaTpub05hbWVzcGFjZVNjaGVtYUxvY2F0aW9uPSJ4bWwtd2hpdGVzcGFjZS54c2QiPgotCTxhcnRpc3Q+CQkgU29tZSAJU2luZ2VyCi0JPC9hcnRpc3Q+Ci0JPHllYXI+CTE5OTIgPC95ZWFyPgotCTx0aXRsZT4gICAJTG9yZW0JCSAgICBpcHN1bSBkb2xvcgk8L3RpdGxlPgotCTxseXJpY3M+TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVlciBhZGlwaXNjaW5nIGVsaXQuCi0JCSBOdW5jIGluIG5pc2kuIEludGVnZXIgcXVpcyBxdWFtIG5vbiBlcm9zIGFjY3Vtc2FuIGVsZW1lbnR1bS4KLQkJCVNlZCByaXN1cyBvcmNpLAkJIGxvYm9ydGlzIGF0LCBwdWx2aW5hciBhdCwgdmFyaXVzIGFjLCBuZXF1ZS4KLQlNb3JiaSBwZWRlIG51bGxhLCB0aW5jaWR1bnQgYWMsIHNlbXBlciB2ZWwsIHVsdHJpY2llcyB2aXRhZSwgbGFjdXMuCi0JCU51bmMgbnVuYy4JCSAgIDwvbHlyaWNzPgotCTxsZW5ndGg+MjwvbGVuZ3RoPgotCTxhbGJ1bT4JICAgCUxvcmVtIAlpcHN1bSBkb2xvciA8L2FsYnVtPgotCTxsb2NhdGlvbj4gICAgCVJhbGVpZ2gsIAlOQywgCQkJCQlVU0EJCTwvbG9jYXRpb24+Ci08L3Nvbmc+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtd2hpdGVzcGFjZS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtd2hpdGVzcGFjZS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmZjk3N2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLXdoaXRlc3BhY2UueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0JPHhzZDplbGVtZW50IG5hbWU9InNvbmciIHR5cGU9InhzZFNvbmciIC8+Ci0JPCEtLSBEZWZpbmUgYSBzaW1wbGUgdHlwZSB0byB0ZXN0IHRoYXQgdGhlIGhpZXJhcmNoeSBvdmVycmlkaW5nIHdoaXRlc3BhY2UgcnVsZSBpcyBvYnNlcnZlZCAtLT4KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iQ29sbGFwc2VkU3RyaW5nIj4KLQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLQkJCTx4c2Q6d2hpdGVTcGFjZSB2YWx1ZT0iY29sbGFwc2UiIC8+Ci0JCTwveHNkOnJlc3RyaWN0aW9uPgotCTwveHNkOnNpbXBsZVR5cGU+Ci0JPCEtLSBEZWZpbmUgYSBzaW1wbGUgdHlwZSB0byB0ZXN0IHRoYXQgdGhlIHdoaXRlc3BhY2UgcnVsZSBpcyBpbmhlcml0ZWQgZnJvbSB0aGUgYW5jZXN0b3IgLS0+Ci0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik5vcm1hbGl6ZWQiPgotICAJCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOm5vcm1hbGl6ZWRTdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotICAJPC94c2Q6c2ltcGxlVHlwZT4KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9InhzZFNvbmciPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPCEtLSBXaGl0ZXNwYWNlIHNob3VsZCBiZSByZXBsYWNlZCAtLT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJhcnRpc3QiIHR5cGU9InhzZDpub3JtYWxpemVkU3RyaW5nIiAvPgotCQkJPHhzZDplbGVtZW50IG5hbWU9InllYXIiIHR5cGU9InhzZDpub25OZWdhdGl2ZUludGVnZXIiIC8+Ci0JCQk8IS0tIFdoaXRlc3BhY2Ugc2hvdWxkIGNvbGxhcHNlIC0tPgotCQkJPHhzZDplbGVtZW50IG5hbWU9InRpdGxlIiB0eXBlPSJ4c2Q6dG9rZW4iIC8+Ci0JCQk8IS0tIFdoaXRlc3BhY2Ugc2hvdWxkIGJlIHByZXNlcnZlZCAtLT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJseXJpY3MiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQk8IS0tIFdoaXRlc3BhY2Ugc2hvdWxkIGNvbGxhcHNlIC0tPgotCQkJPHhzZDplbGVtZW50IG5hbWU9Imxlbmd0aCIgdHlwZT0ieHNkOmR1cmF0aW9uIiAvPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImFsYnVtIiB0eXBlPSJDb2xsYXBzZWRTdHJpbmciIC8+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0ibG9jYXRpb24iIHR5cGU9Ik5vcm1hbGl6ZWQiIC8+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveHNsYXR0cmlidXRldGV4dC1mbXQueHNsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveHNsYXR0cmlidXRldGV4dC1mbXQueHNsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzU0MjZlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3hzbGF0dHJpYnV0ZXRleHQtZm10LnhzbAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTEiPz4KLTx4c2w6c3R5bGVzaGVldCB2ZXJzaW9uPSIxLjAiCi0JeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iPgotCTx4c2w6dGVtcGxhdGUgbWF0Y2g9Ii8iPgotCQk8aHRtbD4KLQkJCTxib2R5PgotCQkJCTxoMj5TcGFjZSBDaGVja2luZzwvaDI+Ci0JCQkJPHA+Ci0JCQkJCTx4c2w6YXR0cmlidXRlIG5hbWU9ImFsaWduIj5jZW50ZXI8L3hzbDphdHRyaWJ1dGU+Ci0JCQkJCUNoZWNrOgotCQkJCQk8eHNsOmZvci1lYWNoIHNlbGVjdD0idGV4dC9pdGVtIj4KLQkJCQkJCTx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJzb21ldGhpbmciIC8+Ci0JCQkJCQk8eHNsOmlmIHRlc3Q9InBvc2l0aW9uKCk9bGFzdCgpLTEiPgotCQkJCQkJCTx4c2w6dGV4dD50cmFpbGluZyBzcGFjZXMgICAgPC94c2w6dGV4dD4KLQkJCQkJCTwveHNsOmlmPgotCQkJCQkJPHhzbDppZiB0ZXN0PSJwb3NpdGlvbigpPWxhc3QoKS0xIj4KLQkJCQkJCQk8eHNsOnRleHQ+ICAgIGxlYWRpbmcgc3BhY2VzPC94c2w6dGV4dD4KLQkJCQkJCTwveHNsOmlmPgotCQkJCQkJPHhzbDppZiB0ZXN0PSJwb3NpdGlvbigpPWxhc3QoKSI+Ci0JCQkJCQkJPHhzbDp0ZXh0Pm5vc3BhY2U8L3hzbDp0ZXh0PgotCQkJCQkJPC94c2w6aWY+Ci0JCQkJCTwveHNsOmZvci1lYWNoPgotCQkJCTwvcD4KLQkJCTwvYm9keT4KLQkJPC9odG1sPgotCTwveHNsOnRlbXBsYXRlPgotPC94c2w6c3R5bGVzaGVldD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94c2xhdHRyaWJ1dGV0ZXh0LnhzbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3hzbGF0dHJpYnV0ZXRleHQueHNsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODdlMzg3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3hzbGF0dHJpYnV0ZXRleHQueHNsCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/PgotPHhzbDpzdHlsZXNoZWV0IHZlcnNpb249IjEuMCIKLXhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIj4KLTx4c2w6dGVtcGxhdGUgbWF0Y2g9Ii8iPgotPGh0bWw+Ci0gICAgPGJvZHk+Ci0gICAgPGgyPlNwYWNlIENoZWNraW5nPC9oMj4KLSAgICA8cD48eHNsOmF0dHJpYnV0ZSBuYW1lPSJhbGlnbiI+Y2VudGVyPC94c2w6YXR0cmlidXRlPkNoZWNrOjx4c2w6Zm9yLWVhY2ggc2VsZWN0PSJ0ZXh0L2l0ZW0iPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJzb21ldGhpbmciLz4KLSAgICAgIDx4c2w6aWYgdGVzdD0icG9zaXRpb24oKT1sYXN0KCktMSI+Ci0gICAgICAgIDx4c2w6dGV4dD50cmFpbGluZyBzcGFjZXMgICAgPC94c2w6dGV4dD4KLSAgICAgIDwveHNsOmlmPgotICAgICAgPHhzbDppZiB0ZXN0PSJwb3NpdGlvbigpPWxhc3QoKS0xIj4KLSAgICAgICAgPHhzbDp0ZXh0PiAgICBsZWFkaW5nIHNwYWNlczwveHNsOnRleHQ+Ci0gICAgICA8L3hzbDppZj4KLSAgICAgIDx4c2w6aWYgdGVzdD0icG9zaXRpb24oKT1sYXN0KCkiPgotICAgICAgICA8eHNsOnRleHQ+bm9zcGFjZTwveHNsOnRleHQ+Ci0gICAgICA8L3hzbDppZj4KLSAgICA8L3hzbDpmb3ItZWFjaD4KLSAgICA8L3A+Ci0gIDwvYm9keT4KLSAgPC9odG1sPgotPC94c2w6dGVtcGxhdGU+Ci08L3hzbDpzdHlsZXNoZWV0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL21vZGVsL1Rlc3RGcmFnRmlsZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvbW9kZWwvVGVzdEZyYWdGaWxlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5NWY1YWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvbW9kZWwvVGVzdEZyYWdGaWxlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLm1vZGVsOwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdCdWZmZXJJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLQotCi0KLXB1YmxpYyBjbGFzcyBUZXN0RnJhZ0ZpbGUgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RnJhZygpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBudWxsOwotCi0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQotCQlTdHJpbmcgdGVzdFN0cmluZzEgPSAiPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiVVRGLThcIj8+XHJcbiIgKyAiPCEtLVRoaXMgaXMgYW4gaW50ZXJuYWxseSBnZW5lcmF0ZWQgZmlsZSAtIG1hbnVhbCBjaGFuZ2VzIHRvIGl0IHdpbGwgYmUgaWdub3JlZCBhbmQgb3ZlcndyaXR0ZW4uLS0+XHJcbiIgKyAiPEZyYWdtZW50IHBhcmVudD1cIi9lamItamFyL2VudGVycHJpc2UtYmVhbnMmbHQ7ZGVzY3JpcHRpb24sZGlzcGxheS1uYW1lLHNtYWxsLWljb24sbGFyZ2UtaWNvblwiIGRlc3RpbmF0aW9uPVwiZWpiLWphci54bWxcIiB0eXBlPVwieG1sXCIgeG1saWQ9XCJpZCx4bWk6aWRcIiB0YWdTZXQ9XCJlamJcIj5cclxuIiArICI8c2Vzc2lvbiBpZD1cImVqYnMuVGVzdEJlYW5cIj5cclxuIiArICI8ZWpiLW5hbWU+VGVzdDwvZWpiLW5hbWU+XHJcbiIgKyAiPGhvbWU+ZWpicy5UZXN0SG9tZTwvaG9tZT5cclxuIiArICI8cmVtb3RlPmVqYnMuVGVzdDwvcmVtb3RlPlxyXG4iICsgIjxlamItY2xhc3M+ZWpicy5UZXN0QmVhbjwvZWpiLWNsYXNzPlxyXG4iICsgIjxzZXNzaW9uLXR5cGU+U3RhdGVsZXNzPC9zZXNzaW9uLXR5cGU+XHJcbiIgKyAiPHRyYW5zYWN0aW9uLXR5cGU+Q29udGFpbmVyPC90cmFuc2FjdGlvbi10eXBlPlxyXG4iICsgIjwvc2Vzc2lvbj5cclxuIiArICI8L0ZyYWdtZW50PiI7Ci0KLQotCQlJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbSh0ZXN0U3RyaW5nMS5nZXRCeXRlcygidXRmOCIpKTsKLQotCQltb2RlbCA9IG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvclJlYWQoInRlc3QuZnJhZyIsIGlucHV0U3RyZWFtLCBudWxsKTsgLy8kTk9OLU5MUy0xJAotCi0JCVN5c3RlbS5vdXQucHJpbnRsbihtb2RlbCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbihtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5nZXQoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZyYWdYKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0KLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCi0JCVN0cmluZyB0ZXN0U3RyaW5nID0gIjwhLS1UaGlzIGlzIGFuIGludGVybmFsbHkgZ2VuZXJhdGVkIGZpbGUgLSBtYW51YWwgY2hhbmdlcyB0byBpdCB3aWxsIGJlIGlnbm9yZWQgYW5kIG92ZXJ3cml0dGVuLi0tPlxyXG4iICsgIjxGcmFnbWVudCBwYXJlbnQ9XCIvZWpiLWphci9lbnRlcnByaXNlLWJlYW5zJmx0O2Rlc2NyaXB0aW9uLGRpc3BsYXktbmFtZSxzbWFsbC1pY29uLGxhcmdlLWljb25cIiBkZXN0aW5hdGlvbj1cImVqYi1qYXIueG1sXCIgdHlwZT1cInhtbFwiIHhtbGlkPVwiaWQseG1pOmlkXCIgdGFnU2V0PVwiZWpiXCI+XHJcbiIgKyAiPHNlc3Npb24gaWQ9XCJlamJzLlRlc3RCZWFuXCI+XHJcbiIgKyAiPGVqYi1uYW1lPlRlc3Q8L2VqYi1uYW1lPlxyXG4iICsgIjxob21lPmVqYnMuVGVzdEhvbWU8L2hvbWU+XHJcbiIgKyAiPHJlbW90ZT5lamJzLlRlc3Q8L3JlbW90ZT5cclxuIiArICI8ZWpiLWNsYXNzPmVqYnMuVGVzdEJlYW48L2VqYi1jbGFzcz5cclxuIiArICI8c2Vzc2lvbi10eXBlPlN0YXRlbGVzczwvc2Vzc2lvbi10eXBlPlxyXG4iICsgIjx0cmFuc2FjdGlvbi10eXBlPkNvbnRhaW5lcjwvdHJhbnNhY3Rpb24tdHlwZT5cclxuIiArICI8L3Nlc3Npb24+XHJcbiIgKyAiPC9GcmFnbWVudD4iOwotCi0KLQkJSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0gPSBuZXcgU3RyaW5nQnVmZmVySW5wdXRTdHJlYW0odGVzdFN0cmluZyk7Ci0KLQkJbW9kZWwgPSBtb2RlbE1hbmFnZXIuZ2V0TW9kZWxGb3JSZWFkKCJ0ZXN0LmZyYWd4IiwgaW5wdXRTdHJlYW0sIG51bGwpOyAvLyROT04tTkxTLTEkCi0KLQkJU3lzdGVtLm91dC5wcmludGxuKG1vZGVsKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLmdldCgpKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL21vZGVsL1Rlc3RNb2RlbE1hbmFnZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL21vZGVsL1Rlc3RNb2RlbE1hbmFnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjA5MGQwZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9tb2RlbC9UZXN0TW9kZWxNYW5hZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5tb2RlbDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS5zZXJ2aWNlLmRhdGFsb2NhdGlvbi5Mb2NhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXhjZXB0aW9ucy5SZXNvdXJjZUFscmVhZHlFeGlzdHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV4Y2VwdGlvbnMuUmVzb3VyY2VJblVzZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy51dGlsLkZpbGVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy51dGlsLlByb2plY3RVbnppcFV0aWxpdHk7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0TW9kZWxNYW5hZ2VyIGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHJpdmF0ZSBib29sZWFuIGlzU2V0dXAgPSBmYWxzZTsKLQotCXByaXZhdGUgZmluYWwgU3RyaW5nIGZQcm9qZWN0TmFtZSA9ICJET0NVTUVOVC1MT0FERVIiOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIGZaaXBGaWxlTmFtZSA9ICJ4bWwtZG9jdW1lbnQtbG9hZGVyLXRlc3RzLnppcCI7Ci0KLQlwdWJsaWMgVGVzdE1vZGVsTWFuYWdlcigpIHsKLQkJc3VwZXIoIlRlc3RNb2RlbE1hbmFnZXIiKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCi0JCXN1cGVyLnNldFVwKCk7Ci0JCWlmICghdGhpcy5pc1NldHVwKSB7Ci0JCQlkb1NldHVwKCk7Ci0JCQl0aGlzLmlzU2V0dXAgPSB0cnVlOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGRvU2V0dXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotCQkvLyByb290IG9mIHdvcmtzcGFjZSBkaXJlY3RvcnkKLQkJTG9jYXRpb24gcGxhdGZvcm1Mb2NhdGlvbiA9IFBsYXRmb3JtLmdldEluc3RhbmNlTG9jYXRpb24oKTsKLQotCQlQcm9qZWN0VW56aXBVdGlsaXR5IHVuemlwVXRpbCA9IG5ldyBQcm9qZWN0VW56aXBVdGlsaXR5KCk7Ci0JCUZpbGUgemlwRmlsZSA9IEZpbGVVdGlsLm1ha2VGaWxlRm9yKFByb2plY3RVbnppcFV0aWxpdHkuUFJPSkVDVF9aSVBTX0ZPTERFUiwgZlppcEZpbGVOYW1lLCBQcm9qZWN0VW56aXBVdGlsaXR5LlBST0pFQ1RfWklQU19GT0xERVIpOwotCQl1bnppcFV0aWwudW56aXBBbmRJbXBvcnQoemlwRmlsZSwgcGxhdGZvcm1Mb2NhdGlvbi5nZXRVUkwoKS5nZXRGaWxlKCkpOwotCQl1bnppcFV0aWwuaW5pdEphdmFQcm9qZWN0KGZQcm9qZWN0TmFtZSk7Ci0JfQotCi0JLyoqCi0JICogbXVzdCByZWxlYXNlIGFmdGVyIHVzZSEKLQkgKiAKLQkgKiBAcmV0dXJuCi0JICovCi0JcHJpdmF0ZSBJU3RydWN0dXJlZE1vZGVsIGdldFN0cnVjdHVyZWRNb2RlbEZvckVkaXQoKSB7Ci0JCS8vIGZyb20gYSBmaWxlCi0JCUlGaWxlIGYgPSBnZXRGaWxlKCk7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJbW9kZWwgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmdldE1vZGVsRm9yRWRpdChmKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCXJldHVybiBtb2RlbDsKLQl9Ci0KLQlwcml2YXRlIElGaWxlIGdldEZpbGUoKSB7Ci0JCXJldHVybiBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgoZlByb2plY3ROYW1lICsgIi9maWxlcy9zaW1wbGUueG1sIikpOwotCX0KLQkKLQlwcml2YXRlIElNb2RlbE1hbmFnZXIgZ2V0TU0oKSB7Ci0JCXJldHVybiBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDb3B5TW9kZWwoKSB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJbW9kZWwgPSBnZXRTdHJ1Y3R1cmVkTW9kZWxGb3JFZGl0KCk7Ci0JCQl0cnkgewotCQkJCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWxDb3B5ID0gZ2V0TU0oKS5jb3B5TW9kZWxGb3JFZGl0KG1vZGVsLmdldElkKCksICJuZXdJZCIpOwotCQkJCWFzc2VydE5vdE51bGwoImNvcGllZCBtb2RlbCB3YXMgbnVsbCIsIG1vZGVsQ29weSk7Ci0JCQl9Ci0JCQljYXRjaCAoUmVzb3VyY2VJblVzZSBlKSB7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJCQotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpCi0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlTmV3SW5zdGFuY2UoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCW1vZGVsID0gZ2V0U3RydWN0dXJlZE1vZGVsRm9yRWRpdCgpOwotCQkJSVN0cnVjdHVyZWRNb2RlbCBuZXdJbnN0YW5jZSA9IGdldE1NKCkuY3JlYXRlTmV3SW5zdGFuY2UobW9kZWwpOwotCQkJYXNzZXJ0VHJ1ZSgiZmFpbGVkIHRvIGNyZWF0ZSBuZXcgaW5zdGFuY2Ugb2Y6ICIgKyBtb2RlbCwgbW9kZWwgIT0gbmV3SW5zdGFuY2UpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpCi0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlTmV3U3RydWN0dXJlZERvY3VtZW50Rm9yKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlJRmlsZSBmaWxlID0gZ2V0RmlsZSgpOwotCQkJLy8gZW5zdXJlIG1vZGVsIGFscmVhZHkgZXhpc3RzCi0JCQltb2RlbCA9IGdldFN0cnVjdHVyZWRNb2RlbEZvckVkaXQoKTsKLQkJCWJvb2xlYW4gcmVzb3VyY2VFeGlzdHMgPSBmYWxzZTsKLQkJCXRyeSB7Ci0JCQkJZ2V0TU0oKS5jcmVhdGVOZXdTdHJ1Y3R1cmVkRG9jdW1lbnRGb3IoZmlsZSk7Ci0JCQl9Ci0JCQljYXRjaChSZXNvdXJjZUFscmVhZHlFeGlzdHMgZXgpIHsKLQkJCQlyZXNvdXJjZUV4aXN0cyA9IHRydWU7Ci0JCQl9Ci0JCQlhc3NlcnRUcnVlKCJzaG91bGQgaGF2ZSBnb3R0ZW4gUmVzb3VyY2VBbHJlYWR5RXhpdHMgZXhjZXB0aW9uIiwgcmVzb3VyY2VFeGlzdHMpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpCi0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlU3RydWN0dXJlZERvY3VtZW50Rm9yKCkgIHRocm93cyBJT0V4Y2VwdGlvbiwgUmVzb3VyY2VBbHJlYWR5RXhpc3RzLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlJRmlsZSBmaWxlID0gZ2V0RmlsZSgpOwotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzRG9jID0gZ2V0TU0oKS5jcmVhdGVTdHJ1Y3R1cmVkRG9jdW1lbnRGb3IoZmlsZSk7Ci0JCQlhc3NlcnROb3ROdWxsKCJmYWlsZWQgdG8gY3JlYXRlIHN0cnVjdHVyZWQgZG9jdW1lbnQiLCBzRG9jKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKQotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldEV4aXN0aW5nTW9kZWxGcm9tRmlsZSgpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlGaWxlIGYgPSBnZXRGaWxlKCk7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBudWxsOwotCQlJU3RydWN0dXJlZE1vZGVsIGV4aXN0aW5nTW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJbW9kZWwgPSBnZXRTdHJ1Y3R1cmVkTW9kZWxGb3JFZGl0KCk7Ci0JCQlleGlzdGluZ01vZGVsID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5nZXRFeGlzdGluZ01vZGVsRm9yRWRpdChmKTsKLQkJCWFzc2VydE5vdE51bGwoImZhaWxlZCB0byBnZXQgZXhpc3RpbmcgbW9kZWwiLCBleGlzdGluZ01vZGVsKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKQotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJaWYgKGV4aXN0aW5nTW9kZWwgIT0gbnVsbCkKLQkJCQlleGlzdGluZ01vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJCQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldEV4aXN0aW5nTW9kZWxGcm9tRG9jdW1lbnQoKSB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBudWxsOwotCQlJU3RydWN0dXJlZE1vZGVsIGdvdHRlbk1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCW1vZGVsID0gZ2V0U3RydWN0dXJlZE1vZGVsRm9yRWRpdCgpOwotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCWdvdHRlbk1vZGVsID0gZ2V0TU0oKS5nZXRFeGlzdGluZ01vZGVsRm9yRWRpdChkb2MpOwotCQkJYXNzZXJ0VHJ1ZSgibW9kZWxzIHNob3VsZCBiZSB0aGUgc2FtZSBpbnN0YW5jZSIsIG1vZGVsID09IGdvdHRlbk1vZGVsKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKQotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJaWYgKGdvdHRlbk1vZGVsICE9IG51bGwpCi0JCQkJZ290dGVuTW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEdldE1vZGVsRnJvbUZpbGUoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJRmlsZSBmID0gZ2V0RmlsZSgpOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCW1vZGVsID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5nZXRNb2RlbEZvckVkaXQoZik7Ci0JCQlhc3NlcnROb3ROdWxsKCJmYWlsZWQgdG8gZ2V0IG1vZGVsIiwgbW9kZWwpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpCi0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0TW9kZWxGcm9tRG9jdW1lbnQoKSB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBudWxsOwotCQlJU3RydWN0dXJlZE1vZGVsIGdvdHRlbk1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCW1vZGVsID0gZ2V0U3RydWN0dXJlZE1vZGVsRm9yRWRpdCgpOwotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJICAgIGdvdHRlbk1vZGVsID0gZ2V0TU0oKS5nZXRNb2RlbEZvckVkaXQoZG9jKTsKLQkJCWFzc2VydFRydWUoIm1vZGVscyBzaG91bGQgYmUgdGhlIHNhbWUgaW5zdGFuY2UiLCBtb2RlbCA9PSBnb3R0ZW5Nb2RlbCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCWlmIChnb3R0ZW5Nb2RlbCAhPSBudWxsKQotCQkJCWdvdHRlbk1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdElzU2hhcmVkKCkgewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbDIgPSBudWxsOwotCQl0cnkgewotCQkJbW9kZWwgPSBnZXRTdHJ1Y3R1cmVkTW9kZWxGb3JFZGl0KCk7Ci0JCQltb2RlbDIgPSBnZXRTdHJ1Y3R1cmVkTW9kZWxGb3JFZGl0KCk7Ci0JCQkvLyBUT0RPOiB3aWxsIGNoYW5nZSB3aGVuIEFQSSBhZGRlZCB0byBNTQotCQkJYm9vbGVhbiBpc1NoYXJlZCA9IGdldE1NKCkuaXNTaGFyZWQobW9kZWwuZ2V0SWQoKSk7Ci0JCQlhc3NlcnRUcnVlKCJtb2RlbCBzaG91bGQgYmUgc2hhcmVkIiwgaXNTaGFyZWQpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpCi0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQlpZiAobW9kZWwyICE9IG51bGwpCi0JCQkJbW9kZWwyLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFJlaW5pdGlhbGl6ZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJbW9kZWwgPSBnZXRTdHJ1Y3R1cmVkTW9kZWxGb3JFZGl0KCk7Ci0JCQlnZXRNTSgpLnJlaW5pdGlhbGl6ZShtb2RlbCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RSZWxlYXNlTW9kZWwoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQkvLyBUT0RPOiB3aWxsIG5lZWQgdG8gaW1wbGVtZW50IHdoZW4gTU0gaGFzIHRoaXMgZnVuY3Rpb24KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2F2ZU1vZGVsKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQltb2RlbCA9IGdldFN0cnVjdHVyZWRNb2RlbEZvckVkaXQoKTsKLQkJCS8vIFRPRE86IHdpbGwgbmVlZCB0byBjaGFuZ2Ugd2hlbiBNTSBoYXMgdGhpcyBmdW5jdGlvbgotCQkJbW9kZWwuc2F2ZSgpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpCi0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2F2ZU1vZGVsSWZOb3RTaGFyZWQoKSB7Ci0JCS8vIFRPRE86IHdpbGwgbmVlZCB0byBpbXBsZW1lbnQgd2hlbiBNTSBoYXMgdGhpcyBmdW5jdGlvbgotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL21vZGVsL1Rlc3RNb2RlbHNGcm9tRmlsZXMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL21vZGVsL1Rlc3RNb2RlbHNGcm9tRmlsZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2U1YTQ4ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9tb2RlbC9UZXN0TW9kZWxzRnJvbUZpbGVzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLm1vZGVsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ0J1ZmZlcklucHV0U3RyZWFtOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5maWxlYnVmZmVycy5GaWxlQnVmZmVyczsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmZpbGVidWZmZXJzLklUZXh0RmlsZUJ1ZmZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmZpbGVidWZmZXJzLklUZXh0RmlsZUJ1ZmZlck1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5leGNlcHRpb25zLlJlc291cmNlQWxyZWFkeUV4aXN0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXhjZXB0aW9ucy5SZXNvdXJjZUluVXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC50ZXh0LkJhc2ljU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC50ZXh0LnJ1bGVzLlN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmRvY3VtZW50LlVuemlwcGVkUHJvamVjdFRlc3RlcjsKLQotCi0KLXB1YmxpYyBjbGFzcyBUZXN0TW9kZWxzRnJvbUZpbGVzIGV4dGVuZHMgVW56aXBwZWRQcm9qZWN0VGVzdGVyIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTk9ORVhJU1RFTlRfRklMRU5BTUUxID0gInRlc3RmaWxlcy94bWwvdGVzdG5vbmV4aXN0ZW50MS54bWwiOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBOT05FWElTVEVOVF9GSUxFTkFNRTIgPSAidGVzdGZpbGVzL3htbC90ZXN0bm9uZXhpc3RlbnQyLnhtbCI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE5PTkVYSVNURU5UX0ZJTEVOQU1FMyA9ICJ0ZXN0ZmlsZXMveG1sL3Rlc3Rub25leGlzdGVudDMueG1sIjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhJU1RFTlRfRklMRU5BTUUxID0gInRlc3RmaWxlcy94bWwvdGVzdE5vcm1hbENhc2UueG1sIjsKLQlwcml2YXRlIGZpbmFsIHN0YXRpYyBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9uRXhpc3RlbnRGaWxlV2l0aEJ1ZmZlcigpIHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMsIFJlc291cmNlSW5Vc2UsIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlQnVmZmVyKE5PTkVYSVNURU5UX0ZJTEVOQU1FMSwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3ROb25FeGlzdGVudFhNTCgpIHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMsIFJlc291cmNlSW5Vc2UsIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKE5PTkVYSVNURU5UX0ZJTEVOQU1FMiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3ROb25FeGlzdGVudFhNTElEcygpIHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMsIFJlc291cmNlSW5Vc2UsIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlSURzKE5PTkVYSVNURU5UX0ZJTEVOQU1FMywgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTaW1wbGVDYXNlKCkgdGhyb3dzIFJlc291cmNlQWxyZWFkeUV4aXN0cywgUmVzb3VyY2VJblVzZSwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoRVhJU1RFTlRfRklMRU5BTUUxLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGFkZENvbnRlbnRzQW5kQ3JlYXRlRmlsZShJRmlsZSBmaWxlKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCVN0cmluZ0J1ZmZlcklucHV0U3RyZWFtIHN0cmluZ1N0cmVhbSA9IG5ldyBTdHJpbmdCdWZmZXJJbnB1dFN0cmVhbSgidGVzdGluZyB0ZXN0aW5nIHRlc3RpbmciKTsKLQkJZmlsZS5jcmVhdGUoc3RyaW5nU3RyZWFtLCBmYWxzZSwgbnVsbCk7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIHN0cmluZwotCSAqIEBwYXJhbSBjbGFzczEKLQkgKiBAcGFyYW0gY2xhc3MyCi0JICogQHRocm93cyBDb3JlRXhjZXB0aW9uCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqIEB0aHJvd3MgUmVzb3VyY2VJblVzZQotCSAqIEB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzCi0JICovCi0JcHJpdmF0ZSB2b2lkIGRvVGVzdENyZWF0ZShTdHJpbmcgZmlsZVBhdGgsIENsYXNzIGNsYXNzMSwgQ2xhc3MgY2xhc3MyKSB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzLCBSZXNvdXJjZUluVXNlLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSUZpbGUgZmlsZSA9IChJRmlsZSkgZlRlc3RQcm9qZWN0LmZpbmRNZW1iZXIoZmlsZVBhdGgpOwotCQlpZiAoZmlsZSA9PSBudWxsKSB7Ci0JCQlmaWxlID0gZlRlc3RQcm9qZWN0LmdldEZpbGUoZmlsZVBhdGgpOwotCQl9Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBtb2RlbE1hbmFnZXIuZ2V0TmV3TW9kZWxGb3JFZGl0KGZpbGUsIHRydWUpOwotCQl0cnkgewotCQkJLy8gY291bnQgYXMgc3VjY2VzcyBpZiBnZXRzIHRvIGhlZXIgd2l0aG91dCBleGNlcHRpb24KLQkJCWFzc2VydFRydWUodHJ1ZSk7Ci0JCQlTdHJpbmcgZmlsZUxvY2F0aW9uID0gbW9kZWwuZ2V0QmFzZUxvY2F0aW9uKCk7Ci0JCQlTdHJpbmcgaWQgPSBtb2RlbC5nZXRJZCgpOwotCQkJaWYgKERFQlVHKSB7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJmaWxlTG9jYXRpb246ICIgKyBmaWxlTG9jYXRpb24pOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiaWQ6ICIgKyBpZCk7Ci0JCQl9Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBkb1Rlc3RDcmVhdGVCdWZmZXIoU3RyaW5nIGZpbGVQYXRoLCBDbGFzcyBjbGFzczEsIENsYXNzIGNsYXNzMikgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlJRmlsZSBmaWxlID0gKElGaWxlKSBmVGVzdFByb2plY3QuZmluZE1lbWJlcihmaWxlUGF0aCk7Ci0JCWlmIChmaWxlID09IG51bGwpIHsKLQkJCWZpbGUgPSBmVGVzdFByb2plY3QuZ2V0RmlsZShmaWxlUGF0aCk7Ci0JCX0KLQotCQlJVGV4dEZpbGVCdWZmZXIgZmlsZUJ1ZmZlckJlZm9yZUV4aXN0cyA9IGdldFRleHRCdWZmZXIoZmlsZSk7Ci0KLQkJYWRkQ29udGVudHNBbmRDcmVhdGVGaWxlKGZpbGUpOwotCi0JCUlUZXh0RmlsZUJ1ZmZlciBmaWxlQnVmZmVyQWZ0ZXJFeGlzdHMgPSBnZXRUZXh0QnVmZmVyKGZpbGUpOwotCi0JCWJvb2xlYW4gYnVmZmVyc0lkZW50aWNhbCA9IGZpbGVCdWZmZXJCZWZvcmVFeGlzdHMgPT0gZmlsZUJ1ZmZlckFmdGVyRXhpc3RzOwotCQlhc3NlcnRUcnVlKGJ1ZmZlcnNJZGVudGljYWwpOwotCQlpZiAoREVCVUcpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihmaWxlQnVmZmVyQmVmb3JlRXhpc3RzLmdldExvY2F0aW9uKCkpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKGZpbGVCdWZmZXJBZnRlckV4aXN0cy5nZXRMb2NhdGlvbigpKTsKLQkJfQotCQkKLQotCi0JfQotCi0JcHJpdmF0ZSB2b2lkIGRvVGVzdENyZWF0ZUlEcyhTdHJpbmcgZmlsZVBhdGgsIENsYXNzIGNsYXNzMSwgQ2xhc3MgY2xhc3MyKSB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzLCBSZXNvdXJjZUluVXNlLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSUZpbGUgZmlsZSA9IChJRmlsZSkgZlRlc3RQcm9qZWN0LmZpbmRNZW1iZXIoZmlsZVBhdGgpOwotCQlpZiAoZmlsZSA9PSBudWxsKSB7Ci0JCQlmaWxlID0gZlRlc3RQcm9qZWN0LmdldEZpbGUoZmlsZVBhdGgpOwotCQl9Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBtb2RlbE1hbmFnZXIuZ2V0TmV3TW9kZWxGb3JFZGl0KGZpbGUsIHRydWUpOwotCi0JCXRyeSB7Ci0JCQlhc3NlcnROb3ROdWxsKG1vZGVsKTsKLQkJCWlmIChERUJVRykgewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiSUQ6ICIgKyBtb2RlbC5nZXRJZCgpKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkJhc2VMb2NhdGlvbiIgKyBtb2RlbC5nZXRCYXNlTG9jYXRpb24oKSk7Ci0JCQl9Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHJpdmF0ZSBJVGV4dEZpbGVCdWZmZXIgZ2V0VGV4dEJ1ZmZlcihJRmlsZSBmaWxlKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlUZXh0RmlsZUJ1ZmZlck1hbmFnZXIgZmlsZUJ1ZmZlck1hbmFnZXIgPSBGaWxlQnVmZmVycy5nZXRUZXh0RmlsZUJ1ZmZlck1hbmFnZXIoKTsKLQkJSVBhdGggZmlsZUlQYXRoID0gZmlsZS5nZXRGdWxsUGF0aCgpOwotCQlJUGF0aCBub3JtYWxpemVkUGF0aCA9IEZpbGVCdWZmZXJzLm5vcm1hbGl6ZUxvY2F0aW9uKGZpbGVJUGF0aCk7Ci0JCWZpbGVCdWZmZXJNYW5hZ2VyLmNvbm5lY3Qobm9ybWFsaXplZFBhdGgsIG51bGwpOwotCQlJVGV4dEZpbGVCdWZmZXIgYnVmZmVyID0gZmlsZUJ1ZmZlck1hbmFnZXIuZ2V0VGV4dEZpbGVCdWZmZXIobm9ybWFsaXplZFBhdGgpOwotCQlyZXR1cm4gYnVmZmVyOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvbW9kZWwvVGVzdFN0cnVjdHVyZWRNb2RlbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvbW9kZWwvVGVzdFN0cnVjdHVyZWRNb2RlbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNjZkOTE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL21vZGVsL1Rlc3RTdHJ1Y3R1cmVkTW9kZWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLm1vZGVsOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kuc2VydmljZS5kYXRhbG9jYXRpb24uTG9jYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbFN0YXRlTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvclhNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMudXRpbC5GaWxlVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMudXRpbC5Qcm9qZWN0VW56aXBVdGlsaXR5OwotCi1wdWJsaWMgY2xhc3MgVGVzdFN0cnVjdHVyZWRNb2RlbCBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXByaXZhdGUgYm9vbGVhbiBpc1NldHVwID0gZmFsc2U7Ci0JCi0KLQlwcml2YXRlIGZpbmFsIFN0cmluZyBmUHJvamVjdE5hbWUgPSAiRE9DVU1FTlQtTE9BREVSIjsKLQkvLyBpcyBpdCBhIHByb2JsZW0gdG8gdW56aXAgdGhlIHNhbWUgcHJvamVjdCBpbgotCS8vIGRpZmZlcmVudCB0ZXN0cz8KLQlwcml2YXRlIGZpbmFsIFN0cmluZyBmWmlwRmlsZU5hbWUgPSAieG1sLWRvY3VtZW50LWxvYWRlci10ZXN0cy56aXAiOwotCi0JcHVibGljIFRlc3RTdHJ1Y3R1cmVkTW9kZWwoKSB7Ci0JCXN1cGVyKCJUZXN0U3RydWN0dXJlZE1vZGVsIik7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotCQlzdXBlci5zZXRVcCgpOwotCQlpZiAoIXRoaXMuaXNTZXR1cCkgewotCQkJCi0JCQlkb1NldHVwKCk7Ci0JCQl0aGlzLmlzU2V0dXAgPSB0cnVlOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGRvU2V0dXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotCQkvLyByb290IG9mIHdvcmtzcGFjZSBkaXJlY3RvcnkKLQkJTG9jYXRpb24gcGxhdGZvcm1Mb2NhdGlvbiA9IFBsYXRmb3JtLmdldEluc3RhbmNlTG9jYXRpb24oKTsKLQotCQlQcm9qZWN0VW56aXBVdGlsaXR5IHVuemlwVXRpbCA9IG5ldyBQcm9qZWN0VW56aXBVdGlsaXR5KCk7Ci0JCUZpbGUgemlwRmlsZSA9IEZpbGVVdGlsLm1ha2VGaWxlRm9yKFByb2plY3RVbnppcFV0aWxpdHkuUFJPSkVDVF9aSVBTX0ZPTERFUiwgZlppcEZpbGVOYW1lLCBQcm9qZWN0VW56aXBVdGlsaXR5LlBST0pFQ1RfWklQU19GT0xERVIpOwotCQl1bnppcFV0aWwudW56aXBBbmRJbXBvcnQoemlwRmlsZSwgcGxhdGZvcm1Mb2NhdGlvbi5nZXRVUkwoKS5nZXRGaWxlKCkpOwotCQl1bnppcFV0aWwuaW5pdEphdmFQcm9qZWN0KGZQcm9qZWN0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEFib3V0VG9DaGFuZ2VNb2RlbCgpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBnZXRUZXN0TW9kZWwoKTsKLQkJdHJ5IHsKLQkJCW1vZGVsLmFib3V0VG9DaGFuZ2VNb2RlbCgpOwotCQkJYXNzZXJ0VHJ1ZSh0cnVlKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QWRkUmVtb3ZlTW9kZWxTdGF0ZUxpc3RlbmVyKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQl0cnkgewotCQkJSU1vZGVsU3RhdGVMaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBJTW9kZWxTdGF0ZUxpc3RlbmVyKCkgewotCi0JCQkJcHVibGljIHZvaWQgbW9kZWxBYm91dFRvQmVDaGFuZ2VkKElTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwpIHsKLQkJCQkJLy8KLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBtb2RlbENoYW5nZWQoSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCkgewotCQkJCQkvLyAJCi0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgbW9kZWxEaXJ0eVN0YXRlQ2hhbmdlZChJU3RydWN0dXJlZE1vZGVsIG1vZGVsLCBib29sZWFuIGlzRGlydHkpIHsKLQkJCQkJLy8KLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBtb2RlbFJlc291cmNlRGVsZXRlZChJU3RydWN0dXJlZE1vZGVsIG1vZGVsKSB7Ci0JCQkJCS8vIAotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIG1vZGVsUmVzb3VyY2VNb3ZlZChJU3RydWN0dXJlZE1vZGVsIG9sZE1vZGVsLCBJU3RydWN0dXJlZE1vZGVsIG5ld01vZGVsKSB7Ci0JCQkJCS8vIAkJCi0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgbW9kZWxBYm91dFRvQmVSZWluaXRpYWxpemVkKElTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsKSB7Ci0JCQkJCS8vIAkKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBtb2RlbFJlaW5pdGlhbGl6ZWQoSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwpIHsKLQkJCQkJLy8gCi0JCQkJfQotCQkJfTsKLQotCQkJbW9kZWwuYWJvdXRUb0NoYW5nZU1vZGVsKCk7Ci0KLQkJCW1vZGVsLnJlbW92ZU1vZGVsU3RhdGVMaXN0ZW5lcihsaXN0ZW5lcik7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0KLQkvKioKLQkgKiBUZXN0IGV4cGVjdGVzIGFuIGV4Y2VwdGlvbiBzaW5jZSBvbmx5IGEgY2hhbmdlZE1vZGVsIHNlbnQsIHdpdGhvdXQKLQkgKiBiZWdpbm5pbmcgJ2Fib3V0VG9DaGFuZ2VNb2RlbCcKLQkgKiAKLQkgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24KLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCi0JICogCi0JICovCi0JcHVibGljIHZvaWQgdGVzdENoYW5nZWRNb2RlbCgpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBnZXRUZXN0TW9kZWwoKTsKLQkJdHJ5IHsKLQkJCXRyeSB7Ci0JCQkJbW9kZWwuY2hhbmdlZE1vZGVsKCk7Ci0JCQl9Ci0JCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCQlhc3NlcnRUcnVlKGUgaW5zdGFuY2VvZiBJbGxlZ2FsU3RhdGVFeGNlcHRpb24pOwotCQkJfQotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRDb250ZW50VHlwZSgpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBnZXRUZXN0TW9kZWwoKTsKLQkJdHJ5IHsKLQkJCVN0cmluZyBjdCA9IG1vZGVsLmdldENvbnRlbnRUeXBlSWRlbnRpZmllcigpOwotCQkJYXNzZXJ0VHJ1ZSgibW9kZWwgaGFzIHdyb25nIGNvbnRlbnQgdHlwZToiICsgY3QgKyAiICE9ICIgKyBDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MLCBjdC5lcXVhbHMoQ29udGVudFR5cGVJZEZvclhNTC5Db250ZW50VHlwZUlEX1hNTCkpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRCYXNlTG9jYXRpb24oKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlTdHJpbmcgbG9jYXRpb24gPSBtb2RlbC5nZXRCYXNlTG9jYXRpb24oKTsKLQkJCWFzc2VydFRydWUoIndyb25nIGJhc2UgbG9jYXRpb24iLCBsb2NhdGlvbi5lcXVhbHMoIi8iICsgZlByb2plY3ROYW1lICsgIi9maWxlcy9zaW1wbGUueG1sIikpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCi0JcHVibGljIHZvaWQgdGVzdEdldEZhY3RvcnlSZWdpc3RyeSgpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBnZXRUZXN0TW9kZWwoKTsKLQkJdHJ5IHsKLQkJCW1vZGVsLmdldEZhY3RvcnlSZWdpc3RyeSgpOwotCQkJYXNzZXJ0VHJ1ZSh0cnVlKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0SW5kZXhlZFJlZ2lvbigpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBnZXRUZXN0TW9kZWwoKTsKLQkJdHJ5IHsKLQkJCW1vZGVsLmdldEluZGV4ZWRSZWdpb24oMCk7Ci0JCQlhc3NlcnRUcnVlKHRydWUpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRJbmRleGVkUmVnaW9ucygpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBnZXRUZXN0TW9kZWwoKTsKLQkJdHJ5IHsKLQkJCS8vIG5vdCBpbXBsZW1lbnRlZCB5ZXQuLi4KLQkJCS8vIG1vZGVsLmdldEluZGV4ZWRSZWdpb25zKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0U3RydWN0dXJlZERvY3VtZW50KCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQl0cnkgewotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCWFzc2VydE5vdE51bGwoImRvY3VtZW50IGlzIG51bGwiLCBkb2MpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RJc0RpcnR5KCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQl0cnkgewotCQkJYXNzZXJ0RmFsc2UoIm1vZGVsIHNob3VsZCBub3QgYmUgZGlydHkiLCBtb2RlbC5pc0RpcnR5KCkpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RJc01vZGVsU3RhdGVDaGFuZ2luZygpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBnZXRUZXN0TW9kZWwoKTsKLQkJdHJ5IHsKLQkJYXNzZXJ0RmFsc2UoIm1vZGVsIHNob3VsZCBub3QgYmUgY2hhbmdpbmciLCBtb2RlbC5pc01vZGVsU3RhdGVDaGFuZ2luZygpKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SXNOZXcoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCS8vIHRoaXMgQVBJIHNlZW1zIHN0cmFuZ2UKLQkJLy8gYXNzZXJ0RmFsc2UoIm5ldyBtb2RlbCBjaGVjayBmYWlsZWQiLCBtb2RlbC5pc05ldygpKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SXNSZWluaXRpYWxpemF0aW9uTmVlZGVkKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQl0cnkgewotCQlhc3NlcnRGYWxzZSgicmVpbml0aWFsaXphdGlvbiBzaG91bGQgbm90IGJlIG5lZWRlZCIsIG1vZGVsLmlzUmVpbml0aWFsaXphdGlvbk5lZWRlZCgpKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQotCXB1YmxpYyB2b2lkIHRlc3RJc1NhdmVOZWVkZWQoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlhc3NlcnRGYWxzZSgic2F2ZSBzaG91bGQgbm90IGJlIG5lZWRlZCIsIG1vZGVsLmlzU2F2ZU5lZWRlZCgpKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TmV3SW5zdGFuY2UoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZE1vZGVsIG5ld0luc3RhbmNlID0gbnVsbDsKLQkJCXRyeSB7Ci0JCQkJbmV3SW5zdGFuY2UgPSBtb2RlbC5uZXdJbnN0YW5jZSgpOwotCQkJfQotCQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCQlhc3NlcnRUcnVlKCJJT0V4Y2VwdGlvbiBkdXJpbmcgbW9kZWwgbmV3IGluc3RhbmNlIiwgZmFsc2UpOwotCQkJfQotCQkJYXNzZXJ0Tm90TnVsbCgibmV3IGluc3RhbmNlIGlzIG51bGwiLCBuZXdJbnN0YW5jZSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0JLyoqCi0JICogQmUgc3VyZSB0byByZWxlYXNlIGFueSBtb2RlbHMgb2J0YWluZWQgZnJvbSB0aGlzIG1ldGhvZC4KLQkgKiAKLQkgKi8KLQlJU3RydWN0dXJlZE1vZGVsIGdldFRlc3RNb2RlbCgpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0KLQkJSVByb2plY3QgcHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChmUHJvamVjdE5hbWUpOwotCQlJRmlsZSBpRmlsZSA9IChJRmlsZSkgcHJvamVjdC5maW5kTWVtYmVyKCIvZmlsZXMvc2ltcGxlLnhtbCIpOwotCQkvLyBmUHJvamVjdE5hbWUgKyAiL2ZpbGVzL3NpbXBsZS54bWwiCi0KLQotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCi0JCW1vZGVsID0gbW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yRWRpdChpRmlsZSk7Ci0KLQotCQlyZXR1cm4gbW9kZWw7Ci0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9tb2RlbC9UZXN0WE1MTW9kZWxMb2FkZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL21vZGVsL1Rlc3RYTUxNb2RlbExvYWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNDY4MzI0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL21vZGVsL1Rlc3RYTUxNb2RlbExvYWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI5ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLm1vZGVsOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kuc2VydmljZS5kYXRhbG9jYXRpb24uTG9jYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwubW9kZWxoYW5kbGVyLlhNTE1vZGVsTG9hZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy51dGlsLkZpbGVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy51dGlsLlByb2plY3RVbnppcFV0aWxpdHk7Ci0KLS8qKgotICoKLSAqIAotICovCi1wdWJsaWMgY2xhc3MgVGVzdFhNTE1vZGVsTG9hZGVyIGV4dGVuZHMgVGVzdENhc2UgewotCQotCXByaXZhdGUgYm9vbGVhbiBpc1NldHVwID0gZmFsc2U7Ci0JcHJpdmF0ZSBYTUxNb2RlbExvYWRlciBmTG9hZGVyID0gbnVsbDsKLQotCXByaXZhdGUgZmluYWwgU3RyaW5nIGZQcm9qZWN0TmFtZSA9IkRPQ1VNRU5ULUxPQURFUiI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZlppcEZpbGVOYW1lID0gInhtbC1kb2N1bWVudC1sb2FkZXItdGVzdHMuemlwIjsKLQkKLQkKLSAgICBwdWJsaWMgVGVzdFhNTE1vZGVsTG9hZGVyKCkgewotICAgICAgICBzdXBlcigiVGVzdE1vZGVsTG9hZGVyIik7Ci0gICAgfQotCQotICAgIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCQotICAgIAlzdXBlci5zZXRVcCgpOwotCQlpZighdGhpcy5pc1NldHVwKXsKLQkJCWZMb2FkZXIgPSBuZXcgWE1MTW9kZWxMb2FkZXIoKTsKLQkJCWRvU2V0dXAoKTsKLQkJCXRoaXMuaXNTZXR1cCA9IHRydWU7Ci0JCX0KLSAgICB9Ci0JCi0JcHJpdmF0ZSB2b2lkIGRvU2V0dXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsJCi0JCi0JCS8vIHJvb3Qgb2Ygd29ya3NwYWNlIGRpcmVjdG9yeQotCQlMb2NhdGlvbiBwbGF0Zm9ybUxvY2F0aW9uID0gUGxhdGZvcm0uZ2V0SW5zdGFuY2VMb2NhdGlvbigpOwotCQkKLQkJUHJvamVjdFVuemlwVXRpbGl0eSB1bnppcFV0aWwgPSBuZXcgUHJvamVjdFVuemlwVXRpbGl0eSgpOwotCQlGaWxlIHppcEZpbGUgPSBGaWxlVXRpbC5tYWtlRmlsZUZvcihQcm9qZWN0VW56aXBVdGlsaXR5LlBST0pFQ1RfWklQU19GT0xERVIsIGZaaXBGaWxlTmFtZSwgUHJvamVjdFVuemlwVXRpbGl0eS5QUk9KRUNUX1pJUFNfRk9MREVSKTsKLQkJdW56aXBVdGlsLnVuemlwQW5kSW1wb3J0KHppcEZpbGUsIHBsYXRmb3JtTG9jYXRpb24uZ2V0VVJMKCkuZ2V0RmlsZSgpKTsKLQkJdW56aXBVdGlsLmluaXRKYXZhUHJvamVjdChmUHJvamVjdE5hbWUpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlRW1wdHlNb2RlbCgpIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGZMb2FkZXIuY3JlYXRlTW9kZWwoKTsKLQkJYXNzZXJ0Tm90TnVsbCgibW9kZWwgaXMgbnVsbCIsIG1vZGVsKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdENyZWF0ZU1vZGVsV2l0aERvY3VtZW50KCkgewotCQlJU3RydWN0dXJlZE1vZGVsIGVtcHR5TW9kZWwgPSBmTG9hZGVyLmNyZWF0ZU1vZGVsKCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc0RvYyA9IGVtcHR5TW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCXNEb2Muc2V0KCI8P3htbCB2ZXJzaW9uPVwiMS4wXCI/PlxuPHRlc3Q+XG48aXRlbSBhdHRyPVwidmFsXCIgLz48L3Rlc3Q+XG4iKTsKLQkJCi0JCS8vIG51bGwgaGFuZGxkZXIgaXMgbm9ybWFsbHkgbm90IHZhbGlkLCBpbmNsdWRpbmcgb25seSBmb3IgdGhpcyB0ZXN0LgotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsRnJvbURvYyA9IGZMb2FkZXIuY3JlYXRlTW9kZWwoc0RvYywgIi90ZXN0IiwgbnVsbCk7Ci0JCWFzc2VydE5vdE51bGwoIm1vZGVsIGZyb20gZG9jIGlzIG51bGwiLCBtb2RlbEZyb21Eb2MpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlTW9kZWxXaXRoTW9kZWwoKSB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgZW1wdHlNb2RlbCA9IGZMb2FkZXIuY3JlYXRlTW9kZWwoKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBzRG9jID0gZW1wdHlNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJc0RvYy5zZXQoIjw/eG1sIHZlcnNpb249XCIxLjBcIj8+XG48dGVzdD5cbjxpdGVtIGF0dHI9XCJ2YWxcIiAvPjwvdGVzdD5cbiIpOwotCQkvLyBUT0RPOiBuZWVkIGFuIGV4aXN0aW5nIGZ1bGwgbW9kZWwKLQkJLy9JU3RydWN0dXJlZE1vZGVsIG1vZGVsRnJvbU1vZGVsID0gZkxvYWRlci5jcmVhdGVNb2RlbChlbXB0eU1vZGVsKTsKLQkJLy9hc3NlcnROb3ROdWxsKCJtb2RlbCBmcm9tIG1vZGVsIGlzIG51bGwiLCBtb2RlbEZyb21Nb2RlbCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RHZXRBZGFwdGVyRmFjdG9yaWVzKCkgewotCQlMaXN0IGZhY3RvcmllcyA9IGZMb2FkZXIuZ2V0QWRhcHRlckZhY3RvcmllcygpOwotCQlhc3NlcnRUcnVlKCJ0aGVyZSB3ZXJlIG5vIGFkYXB0ZXIgZmFjdG9yaWVzIGZvciBYTUwiLCBmYWN0b3JpZXMuc2l6ZSgpID4gMCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RMb2FkKCkgewotCQkvLyBmcm9tIGEgZmlsZQkKLQkJSUZpbGUgZiA9IGdldEZpbGUoKTsKLQkJCi0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZkxvYWRlci5jcmVhdGVNb2RlbCgpOwotCQkJZkxvYWRlci5sb2FkKGYsIG1vZGVsKTsKLQkJCVN0cmluZyB0ZXh0ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuZ2V0KCk7Ci0JCQlhc3NlcnRUcnVlKCJmYWlsZWQgdG8gbG9hZCIsIHRleHQubGVuZ3RoKCkgPiAwKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RMb2FkRnJvbVN0cmVhbSgpIHsKLQkJLy8gbmVlZCB0byBmaXggdGhpcyB0ZXN0Ci0JCS8vIHVubGVzcyB0aGUgQVBJIGlzIGdvaW5nIGF3YXkuLi4KLS8vCQlJRmlsZSBmID0gZ2V0RmlsZSgpOwotLy8JCQotLy8JCXRyeSB7Ci0vLwkJCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBmTG9hZGVyLmNyZWF0ZU1vZGVsKCk7Ci0vLwkJCWZMb2FkZXIubG9hZChmLmdldENvbnRlbnRzKCksIG1vZGVsLCBFbmNvZGluZ1J1bGUuRk9SQ0VfREVGQVVMVCk7Ci0vLwkJCVN0cmluZyB0ZXh0ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuZ2V0KCk7Ci0vLwkJCWFzc2VydFRydWUoImZhaWxlZCB0byBsb2FkIiwgdGV4dC5sZW5ndGgoKSA+IDApOwotLy8JCX0KLS8vCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotLy8JCQllLnByaW50U3RhY2tUcmFjZSgpOwotLy8JCX0KLS8vCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0vLwkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0vLwkJfQotCX0KLQkKLQkKLQlwcml2YXRlIElGaWxlIGdldEZpbGUoKSB7Ci0JCXJldHVybiBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgoZlByb2plY3ROYW1lICsgIi9maWxlcy9zaW1wbGUueG1sIikpOwkKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy90ZXh0L051bGxTdHJlYW0uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3RleHQvTnVsbFN0cmVhbS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOGY2NmVkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3RleHQvTnVsbFN0cmVhbS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnRleHQ7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci0KLQotcHVibGljIGNsYXNzIE51bGxTdHJlYW0gZXh0ZW5kcyBJbnB1dFN0cmVhbSB7Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBqYXZhLmlvLklucHV0U3RyZWFtI3JlYWQoKQotCSAqLwotCXB1YmxpYyBpbnQgcmVhZCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3RleHQvVGVzdFN0cnVjdHVyZWRQYXJ0aXRpb25lclhNTC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdGV4dC9UZXN0U3RydWN0dXJlZFBhcnRpdGlvbmVyWE1MLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkYTE3ZWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdGV4dC9UZXN0U3RydWN0dXJlZFBhcnRpdGlvbmVyWE1MLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy50ZXh0OwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5CYWRMb2NhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudEV4dGVuc2lvbjM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnRQYXJ0aXRpb25lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUeXBlZFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkUGFydGl0aW9uaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS51dGlscy5TdHJpbmdVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGV4dC5JWE1MUGFydGl0aW9uczsKLQotaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuRGVjaW1hbEZvcm1hdDsKLQotcHVibGljIGNsYXNzIFRlc3RTdHJ1Y3R1cmVkUGFydGl0aW9uZXJYTUwgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JCi0JcHJpdmF0ZSBib29sZWFuIERFQlVHX1BSSU5UX1JFU1VMVCA9IGZhbHNlOwotCXByb3RlY3RlZCBJVHlwZWRSZWdpb25bXSBwYXJ0aXRpb25zID0gbnVsbDsKLQotCXByaXZhdGUgYm9vbGVhbiB1c2VGb3JtYXR0ZXIgPSB0cnVlOwotCXByb3RlY3RlZCBEZWNpbWFsRm9ybWF0IGZvcm1hdHRlcjsKLQotCXB1YmxpYyBUZXN0U3RydWN0dXJlZFBhcnRpdGlvbmVyWE1MKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCQlpZiAoREVCVUdfUFJJTlRfUkVTVUxUICYmIHVzZUZvcm1hdHRlcikKLQkJCWZvcm1hdHRlciA9IG5ldyBEZWNpbWFsRm9ybWF0KCk7Ci0JfQotCQotCS8qKgotCSAqIG11c3QgcmVsZWFzZSBtb2RlbCAoZnJvbSBlZGl0KSBhZnRlcgotCSAqIEBwYXJhbSBmaWxlbmFtZSByZWxhdGl2ZSB0byB0aGlzIGNsYXNzIChUZXN0U3RydWN0dXJlZFBhcnRpdGlvbmVyKQotCSAqLwotCXByaXZhdGUgSVN0cnVjdHVyZWRNb2RlbCBnZXRNb2RlbEZvckVkaXQoU3RyaW5nIGZpbGVuYW1lKSB7Ci0KLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCQlJbnB1dFN0cmVhbSBpblN0cmVhbSA9IGdldENsYXNzKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbShmaWxlbmFtZSk7Ci0JCQlpZiAoaW5TdHJlYW0gPT0gbnVsbCkKLQkJCQlpblN0cmVhbSA9IG5ldyBOdWxsU3RyZWFtKCk7Ci0JCQltb2RlbCA9IG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvckVkaXQoZmlsZW5hbWUsIGluU3RyZWFtLCBudWxsKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZXgpIHsKLQkJCWV4LnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCXJldHVybiBtb2RlbDsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdERpc2Nvbm5lY3RDb25uZWN0KCkgewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCW1vZGVsID1nZXRNb2RlbEZvckVkaXQoInRlc3RmaWxlcy94bWwvZXhhbXBsZTAxLnhtbCIpOwotCQkJaWYobW9kZWwgIT0gbnVsbCkgewotCQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc0RvYyA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJCWFzc2VydFRydWUoInNEb2MgaW1wbGVtZW50YXRpb24gbm90IGluc3RhbmNlIG9mIElEb2N1bWVudEV4dGVuc2lvbjMiLCBzRG9jIGluc3RhbmNlb2YgSURvY3VtZW50RXh0ZW5zaW9uMyk7Ci0JCQkKLQkJCQlJRG9jdW1lbnRQYXJ0aXRpb25lciBwYXJ0aXRpb25lciA9ICgoSURvY3VtZW50RXh0ZW5zaW9uMylzRG9jKS5nZXREb2N1bWVudFBhcnRpdGlvbmVyKElTdHJ1Y3R1cmVkUGFydGl0aW9uaW5nLkRFRkFVTFRfU1RSVUNUVVJFRF9QQVJUSVRJT05JTkcpOwotCQkJCWFzc2VydFRydWUoInBhcnRpdGlvbmVyIGRvZXNuJ3QgaW1wbGVtZW50IElTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyIiwgcGFydGl0aW9uZXIgaW5zdGFuY2VvZiBJU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lcik7Ci0JCQkJCi0JCQkJSVN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXIgc3RwID0gKElTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyKXBhcnRpdGlvbmVyOwotCQkJCWFzc2VydE5vdE51bGwoInBhcnRpdGlvbmVyIHdhcyBudWxsIGZvciBzRG9jOiIgKyBzRG9jLCBwYXJ0aXRpb25lcik7Ci0JCQkJdHJ5IHsKLQkJCQkJc3RwLmRpc2Nvbm5lY3QoKTsKLQkJCQl9Ci0JCQkJY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkJCQkJYXNzZXJ0VHJ1ZSgicHJvYmxlbSBkaXNjb25uZWN0aW5nIHcvOiIgK3NEb2MgKyAiL24iICsgZSwgZmFsc2UpOwotCQkJCX0KLQkJCQl0cnkgewotCQkJCQlzdHAuY29ubmVjdChzRG9jKTsKLQkJCQl9Ci0JCQkJY2F0Y2goRXhjZXB0aW9uIGUpIHsKLQkJCQkJYXNzZXJ0VHJ1ZSgicHJvYmxlbSBjb25uZWN0aW5nIHcvOiIgKyBzRG9jICsgIi9uIiArIGUsIGZhbHNlKTsKLQkJCQl9Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlhc3NlcnRUcnVlKCJjb3VsZCBub3QgcmV0cmlldmUgc3RydWN0dXJlZCBtb2RlbCIsIGZhbHNlKTsKLQkJCX0KLQkJfQotCQlmaW5hbGx5ICB7Ci0JCQlpZihtb2RlbCAhPSBudWxsKQotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9CQotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0RGVmYXVsdFBhcnRpdGlvblR5cGUoKSB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJbW9kZWwgPWdldE1vZGVsRm9yRWRpdCgidGVzdGZpbGVzL3htbC9leGFtcGxlMDEueG1sIik7Ci0JCQlpZihtb2RlbCAhPSBudWxsKSB7Ci0JCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzRG9jID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQkJYXNzZXJ0VHJ1ZSgic0RvYyBpbXBsZW1lbnRhdGlvbiBub3QgaW5zdGFuY2Ugb2YgSURvY3VtZW50RXh0ZW5zaW9uMyIsIHNEb2MgaW5zdGFuY2VvZiBJRG9jdW1lbnRFeHRlbnNpb24zKTsKLQkJCQotCQkJCUlEb2N1bWVudFBhcnRpdGlvbmVyIHBhcnRpdGlvbmVyID0gKChJRG9jdW1lbnRFeHRlbnNpb24zKXNEb2MpLmdldERvY3VtZW50UGFydGl0aW9uZXIoSVN0cnVjdHVyZWRQYXJ0aXRpb25pbmcuREVGQVVMVF9TVFJVQ1RVUkVEX1BBUlRJVElPTklORyk7Ci0JCQkJYXNzZXJ0VHJ1ZSgicGFydGl0aW9uZXIgZG9lc24ndCBpbXBsZW1lbnQgSVN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXIiLCBwYXJ0aXRpb25lciBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyKTsKLQkJCQkKLQkJCQlJU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lciBzdHAgPSAoSVN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXIpcGFydGl0aW9uZXI7Ci0JCQkJU3RyaW5nIGRlZmF1bHRQYXJ0aXRpb25UeXBlID0gc3RwLmdldERlZmF1bHRQYXJ0aXRpb25UeXBlKCk7Ci0JCQkJYXNzZXJ0VHJ1ZSgid3JvbmcgZGVmYXVsdCBwYXJ0aXRpb24gdHlwZSB3YXM6IFsiICsgZGVmYXVsdFBhcnRpdGlvblR5cGUgKyAiXSBzaG91bGQgYmU6IFsiICsgSVhNTFBhcnRpdGlvbnMuWE1MX0RFRkFVTFQgKyAiXSIsIGRlZmF1bHRQYXJ0aXRpb25UeXBlLmVxdWFscyhJWE1MUGFydGl0aW9ucy5YTUxfREVGQVVMVCkpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJYXNzZXJ0VHJ1ZSgiY291bGQgbm90IHJldHJpZXZlIHN0cnVjdHVyZWQgbW9kZWwiLCBmYWxzZSk7Ci0JCQl9Ci0JCX0KLQkJZmluYWxseSAgewotCQkJaWYobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQkKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEdldFBhcnRpdGlvblR5cGUoKSB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJbW9kZWwgPWdldE1vZGVsRm9yRWRpdCgidGVzdGZpbGVzL3htbC9leGFtcGxlMDEueG1sIik7Ci0JCQlpZihtb2RlbCAhPSBudWxsKSB7Ci0JCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzRG9jID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQkJYXNzZXJ0VHJ1ZSgic0RvYyBpbXBsZW1lbnRhdGlvbiBub3QgaW5zdGFuY2Ugb2YgSURvY3VtZW50RXh0ZW5zaW9uMyIsIHNEb2MgaW5zdGFuY2VvZiBJRG9jdW1lbnRFeHRlbnNpb24zKTsKLQkJCQotCQkJCUlEb2N1bWVudFBhcnRpdGlvbmVyIHBhcnRpdGlvbmVyID0gKChJRG9jdW1lbnRFeHRlbnNpb24zKXNEb2MpLmdldERvY3VtZW50UGFydGl0aW9uZXIoSVN0cnVjdHVyZWRQYXJ0aXRpb25pbmcuREVGQVVMVF9TVFJVQ1RVUkVEX1BBUlRJVElPTklORyk7Ci0JCQkJYXNzZXJ0VHJ1ZSgicGFyaXRpb25lciBkb2Vzbid0IGltcGxlbWVudCBJU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lciIsIHBhcnRpdGlvbmVyIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXIpOwotCQkJCQotCQkJCUlTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyIHN0cCA9IChJU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lcilwYXJ0aXRpb25lcjsKLQkJCQlTdHJpbmcgZGVmYXVsdFBhcnRpdGlvblR5cGUgPSBzdHAuZ2V0RGVmYXVsdFBhcnRpdGlvblR5cGUoKTsKLQkJCQlhc3NlcnRUcnVlKCJ3cm9uZyBkZWZhdWx0IHBhcnRpdGlvbiB0eXBlIHdhczogWyIgKyBkZWZhdWx0UGFydGl0aW9uVHlwZSArICJdIHNob3VsZCBiZTogWyIgKyBJWE1MUGFydGl0aW9ucy5YTUxfREVGQVVMVCArICJdIiwgZGVmYXVsdFBhcnRpdGlvblR5cGUuZXF1YWxzKElYTUxQYXJ0aXRpb25zLlhNTF9ERUZBVUxUKSk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlhc3NlcnRUcnVlKCJjb3VsZCBub3QgcmV0cmlldmUgc3RydWN0dXJlZCBtb2RlbCIsIGZhbHNlKTsKLQkJCX0KLQkJfQotCQlmaW5hbGx5ICB7Ci0JCQlpZihtb2RlbCAhPSBudWxsKQotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9CQotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0WE1MMSgpIHRocm93cyBJT0V4Y2VwdGlvbiwgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlpbnQgZXhwZWN0ZWRQYXJ0aXRpb25zID0gNjsKLQkJaW50IG5QYXJ0aXRpb25zID0gZG9Db21wdXRlUGFydGl0aW9uaW5nVGVzdCgidGVzdGZpbGVzL3htbC9leGFtcGxlMDEueG1sIik7Ci0JCWFzc2VydEVxdWFscygid3JvbmcgbnVtYmVyIG9mIHBhcnRpdGlvbnMiLCBleHBlY3RlZFBhcnRpdGlvbnMsIG5QYXJ0aXRpb25zKTsKLQkJY2hlY2tTZWFtcygpOwotCQl2ZXJpZnlQYXJ0aXRpb25UeXBlcyhwYXJ0aXRpb25zLCBuZXcgU3RyaW5nW117SVhNTFBhcnRpdGlvbnMuWE1MX1BJLCBJWE1MUGFydGl0aW9ucy5YTUxfREVGQVVMVCwgSVhNTFBhcnRpdGlvbnMuWE1MX0RFQ0xBUkFUSU9OLCBJWE1MUGFydGl0aW9ucy5YTUxfREVGQVVMVCwgSVhNTFBhcnRpdGlvbnMuWE1MX0NPTU1FTlQsIElYTUxQYXJ0aXRpb25zLlhNTF9ERUZBVUxUfSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RFbXB0eSgpIHRocm93cyBJT0V4Y2VwdGlvbiwgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlpbnQgZXhwZWN0ZWRQYXJ0aXRpb25zID0gMTsKLQkJaW50IG5QYXJ0aXRpb25zID0gZG9Db21wdXRlUGFydGl0aW9uaW5nVGVzdCgidGVzdGZpbGVzL3htbC9lbXB0eS54bWwiKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3cm9uZyBudW1iZXIgb2YgcGFydGl0aW9ucyIsIGV4cGVjdGVkUGFydGl0aW9ucywgblBhcnRpdGlvbnMpOwotCQljaGVja1NlYW1zKCk7Ci0JCXZlcmlmeVBhcnRpdGlvblR5cGVzKHBhcnRpdGlvbnMsIG5ldyBTdHJpbmdbXXtJWE1MUGFydGl0aW9ucy5YTUxfREVGQVVMVH0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RQZXJmWE1MKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCWludCBleHBlY3RlZFBhcnRpdGlvbnMgPSA2OwotCQlpbnQgblBhcnRpdGlvbnMgPSBkb1RpbWVkQ29tcHV0ZVBhcnRpdGlvbmluZ1Rlc3QoInRlc3RmaWxlcy94bWwvY29tcGFueTMwMGsueG1sIik7Ci0JCWFzc2VydEVxdWFscygid3JvbmcgbnVtYmVyIG9mIHBhcnRpdGlvbnMiLCBleHBlY3RlZFBhcnRpdGlvbnMsIG5QYXJ0aXRpb25zKTsKLQkJY2hlY2tTZWFtcygpOwotCQl2ZXJpZnlQYXJ0aXRpb25UeXBlcyhwYXJ0aXRpb25zLCBuZXcgU3RyaW5nW117SVhNTFBhcnRpdGlvbnMuWE1MX1BJLCBJWE1MUGFydGl0aW9ucy5YTUxfREVGQVVMVCwgSVhNTFBhcnRpdGlvbnMuWE1MX0RFQ0xBUkFUSU9OLCBJWE1MUGFydGl0aW9ucy5YTUxfREVGQVVMVCwgSVhNTFBhcnRpdGlvbnMuWE1MX0NPTU1FTlQsIElYTUxQYXJ0aXRpb25zLlhNTF9ERUZBVUxUfSk7Ci0JfQotCQotCS8qKgotCSAqIEVuc3VyZSB0aGF0IHRoZSBjdXJyZW50IGxpc3Qgb2YgcGFydGl0aW9ucyBhcmUgYWxsIGFkamFjZW50IHRvIG9uZSBhbm90aGVyCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgY2hlY2tTZWFtcygpIHsKLQkJaWYgKHBhcnRpdGlvbnMgPT0gbnVsbCkKLQkJCXJldHVybjsKLQkJaW50IG9mZnNldCA9IDA7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgcGFydGl0aW9ucy5sZW5ndGg7IGkrKykgewotCQkJYXNzZXJ0RXF1YWxzKCJwYXJ0aXRpb25zIGFyZSBub3QgY29udGlndW91cyEiLCBvZmZzZXQsIHBhcnRpdGlvbnNbaV0uZ2V0T2Zmc2V0KCkpOwotCQkJb2Zmc2V0ID0gcGFydGl0aW9uc1tpXS5nZXRPZmZzZXQoKSArIHBhcnRpdGlvbnNbaV0uZ2V0TGVuZ3RoKCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBDb21wdXRlIHRoZSBwYXJ0aXRpb25zIGZvciB0aGUgZ2l2ZW4gZmlsZW5hbWUgdXNpbmcgdGhlIGRlZmF1bHQgcGFydGl0aW9uZXIKLQkgKiBmb3IgdGhhdCBmaWxlIHR5cGUuCi0JICogCi0JICogQHBhcmFtIGZpbGVuYW1lCi0JICogQHJldHVybiBpbnQKLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCi0JICogQHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbgotCSAqLwotCXByb3RlY3RlZCBpbnQgZG9Db21wdXRlUGFydGl0aW9uaW5nVGVzdChTdHJpbmcgZmlsZW5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiwgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCi0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSW5wdXRTdHJlYW0gaW5TdHJlYW0gPSBnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0oZmlsZW5hbWUpOwotCQlpZiAoaW5TdHJlYW0gPT0gbnVsbCkKLQkJCWluU3RyZWFtID0gbmV3IE51bGxTdHJlYW0oKTsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvckVkaXQoZmlsZW5hbWUsIGluU3RyZWFtLCBudWxsKTsKLQotCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQlpZiAoREVCVUdfUFJJTlRfUkVTVUxUICYmIHVzZUZvcm1hdHRlcikgewotCQkJZG91YmxlIGJhc2VUZW4gPSBNYXRoLmxvZygxMCk7Ci0JCQlmb3JtYXR0ZXIuc2V0TWluaW11bUludGVnZXJEaWdpdHMoKGludCkgKE1hdGgubG9nKHN0cnVjdHVyZWREb2N1bWVudC5nZXRMZW5ndGgoKSkgLyBiYXNlVGVuKSArIDEpOwotCQkJZm9ybWF0dGVyLnNldEdyb3VwaW5nVXNlZChmYWxzZSk7Ci0JCX0KLQotCQlwYXJ0aXRpb25zID0gc3RydWN0dXJlZERvY3VtZW50LmNvbXB1dGVQYXJ0aXRpb25pbmcoMCwgc3RydWN0dXJlZERvY3VtZW50LmdldExlbmd0aCgpKTsKLQkJaWYgKERFQlVHX1BSSU5UX1JFU1VMVCkgewotCQkJU3RyaW5nIGNvbnRlbnRzID0gbnVsbDsKLQotCQkJU3lzdGVtLm91dC5wcmludGxuKCJcbmZpbGVuYW1lOiAiICsgZmlsZW5hbWUpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwYXJ0aXRpb25zLmxlbmd0aDsgaSsrKSB7Ci0JCQkJdHJ5IHsKLQkJCQkJY29udGVudHMgPSBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0KHBhcnRpdGlvbnNbaV0uZ2V0T2Zmc2V0KCksIHBhcnRpdGlvbnNbaV0uZ2V0TGVuZ3RoKCkpOwotCQkJCX0KLQkJCQljYXRjaCAoQmFkTG9jYXRpb25FeGNlcHRpb24gZSkgewotCQkJCQljb250ZW50cyA9ICIqZXJyb3IqIjsKLQkJCQl9Ci0JCQkJaWYgKHVzZUZvcm1hdHRlcikKLQkJCQkJU3lzdGVtLm91dC5wcmludGxuKGZvcm1hdHRlci5mb3JtYXQocGFydGl0aW9uc1tpXS5nZXRPZmZzZXQoKSkgKyAiOiIgKyBmb3JtYXR0ZXIuZm9ybWF0KHBhcnRpdGlvbnNbaV0uZ2V0TGVuZ3RoKCkpICsgIiAtICIgKyBwYXJ0aXRpb25zW2ldLmdldFR5cGUoKSArICIgWyIgKyBTdHJpbmdVdGlscy5lc2NhcGUoY29udGVudHMpICsgIl0iKTsKLQkJCQllbHNlCi0JCQkJCVN5c3RlbS5vdXQucHJpbnRsbihwYXJ0aXRpb25zW2ldICsgIiBbIiArIFN0cmluZ1V0aWxzLmVzY2FwZShjb250ZW50cykgKyAiXSIpOwotCQkJfQotCQl9Ci0JCWNoZWNrU2VhbXMoKTsKLQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCWluU3RyZWFtLmNsb3NlKCk7Ci0KLQkJaWYgKHBhcnRpdGlvbnMgPT0gbnVsbCkKLQkJCXJldHVybiAtMTsKLQkJcmV0dXJuIHBhcnRpdGlvbnMubGVuZ3RoOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgc2luZ2xlIHBhcnRpdGlvbiBhdCB0aGUgZ2l2ZW4gb2Zmc2V0IGZvciB0aGUgZ2l2ZW4gZmlsZSwgdXNpbmcgdGhlCi0JICogZGVmYXVsdCBwYXJ0aXRpb25lciBmb3IgdGhhdCBmaWxlIHR5cGUuICBUaGlzIHRlc3QgYWxsb3dzIGZvciB2ZXJpZnlpbmcgdGhlIHplcm8tbGVuZ3RoCi0JICogcGFydGl0aW9uaW5nIGJlaGF2aW9yLgotCSAqIAotCSAqIEBwYXJhbSBmaWxlbmFtZQotCSAqIEBwYXJhbSBvZmZzZXQKLQkgKiBAcmV0dXJuIElUeXBlZFJlZ2lvbgotCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KLQkgKiBAdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uCi0JICovCi0JcHJvdGVjdGVkIElUeXBlZFJlZ2lvbiBnZXRQYXJ0aXRpb25UZXN0KFN0cmluZyBmaWxlbmFtZSwgaW50IG9mZnNldCkgdGhyb3dzIElPRXhjZXB0aW9uLCBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSW5wdXRTdHJlYW0gaW5TdHJlYW0gPSBnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0oZmlsZW5hbWUpOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yRWRpdChmaWxlbmFtZSwgaW5TdHJlYW0sIG51bGwpOwotCi0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0KLQkJcGFydGl0aW9ucyA9IG51bGw7Ci0JCUlUeXBlZFJlZ2lvbiBwYXJ0aXRpb24gPSBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0UGFydGl0aW9uKG9mZnNldCk7Ci0JCWlmIChERUJVR19QUklOVF9SRVNVTFQpIHsKLQkJCVN0cmluZyBjb250ZW50cyA9IG51bGw7Ci0KLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiXG5maWxlbmFtZTogIiArIGZpbGVuYW1lKTsKLQkJCXRyeSB7Ci0JCQkJY29udGVudHMgPSBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0KHBhcnRpdGlvbi5nZXRPZmZzZXQoKSwgcGFydGl0aW9uLmdldExlbmd0aCgpKTsKLQkJCX0KLQkJCWNhdGNoIChCYWRMb2NhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQkJY29udGVudHMgPSAiKmVycm9yKiI7Ci0JCQl9Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4ocGFydGl0aW9uICsgIiBbIiArIFN0cmluZ1V0aWxzLmVzY2FwZShjb250ZW50cykgKyAiXSIpOwotCQl9Ci0JCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQlpblN0cmVhbS5jbG9zZSgpOwotCi0JCXJldHVybiBwYXJ0aXRpb247Ci0JfQotCi0JLyoqCi0JICogVmVyaWZpZXMgdGhhdCB0aGUgZ2l2ZW4gcGFydGl0aW9ucyBhcmUgb2YgdGhlIGdpdmVuIHBhcnRpdGlvbiB0eXBlcwotCSAqIEBwYXJhbSB0eXBlZFJlZ2lvbnMKLQkgKiBAcGFyYW0gdHlwZXMKLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCB2ZXJpZnlQYXJ0aXRpb25UeXBlcyhJVHlwZWRSZWdpb24gYWN0dWFsVHlwZWRSZWdpb25zW10sIFN0cmluZyBleHBlY3RlZFR5cGVzW10pIHsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBleHBlY3RlZFR5cGVzLmxlbmd0aDsgaSsrKQotCQkJYXNzZXJ0RXF1YWxzKCJwYXJ0aXRpb24gdHlwZSBtaXNtYXRjaGVkIiwgZXhwZWN0ZWRUeXBlc1tpXSwgYWN0dWFsVHlwZWRSZWdpb25zW2ldLmdldFR5cGUoKSk7Ci0JfQotCi0JLyoqCi0JICogVmVyaWZpZXMgdGhhdCB0aGUgZ2l2ZW4gcGFydGl0aW9ucyBiZWdpbiBhdCB0aGUgZ2l2ZW4gb2Zmc2V0cwotCSAqIEBwYXJhbSB0eXBlZFJlZ2lvbnMKLQkgKiBAcGFyYW0gdHlwZXMKLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCB2ZXJpZnlQYXJ0aXRpb25SZWdpb25zKElUeXBlZFJlZ2lvbiB0eXBlZFJlZ2lvbnNbXSwgaW50IG9mZnNldHNbXSkgewotCQlmb3IgKGludCBpID0gMDsgaSA8IG9mZnNldHMubGVuZ3RoOyBpKyspIHsKLQkJCWFzc2VydEVxdWFscygib2Zmc2V0IG1pc21hdGNoZWQiLCB0eXBlZFJlZ2lvbnNbaV0uZ2V0T2Zmc2V0KCksIG9mZnNldHNbaV0pOwotCQkJaWYgKGkgPiAwKSB7Ci0JCQkJYXNzZXJ0RXF1YWxzKCJsZW5ndGhzIG1pc2FsaWduZWQiLCB0eXBlZFJlZ2lvbnNbaV0uZ2V0T2Zmc2V0KCksIHR5cGVkUmVnaW9uc1tpIC0gMV0uZ2V0T2Zmc2V0KCkgKyB0eXBlZFJlZ2lvbnNbaSAtIDFdLmdldExlbmd0aCgpKTsKLQkJCX0KLQkJfQotCX0KLQkKLQkvKioKLQkgKiBDb21wdXRlIHRoZSBwYXJ0aXRpb25zIGZvciB0aGUgZ2l2ZW4gZmlsZW5hbWUgdXNpbmcgdGhlIGRlZmF1bHQgcGFydGl0aW9uZXIKLQkgKiBmb3IgdGhhdCBmaWxlIHR5cGUuCi0JICogCi0JICogQHBhcmFtIGZpbGVuYW1lCi0JICogQHJldHVybiBpbnQKLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCi0JICogQHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbgotCSAqLwotCXByb3RlY3RlZCBpbnQgZG9UaW1lZENvbXB1dGVQYXJ0aXRpb25pbmdUZXN0KFN0cmluZyBmaWxlbmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uLCBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCi0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSW5wdXRTdHJlYW0gaW5TdHJlYW0gPSBnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0oZmlsZW5hbWUpOwotCQlpZiAoaW5TdHJlYW0gPT0gbnVsbCkKLQkJCWluU3RyZWFtID0gbmV3IE51bGxTdHJlYW0oKTsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvckVkaXQoZmlsZW5hbWUsIGluU3RyZWFtLCBudWxsKTsKLQkKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJaWYgKERFQlVHX1BSSU5UX1JFU1VMVCAmJiB1c2VGb3JtYXR0ZXIpIHsKLQkJCWRvdWJsZSBiYXNlVGVuID0gTWF0aC5sb2coMTApOwotCQkJZm9ybWF0dGVyLnNldE1pbmltdW1JbnRlZ2VyRGlnaXRzKChpbnQpIChNYXRoLmxvZyhzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0TGVuZ3RoKCkpIC8gYmFzZVRlbikgKyAxKTsKLQkJCWZvcm1hdHRlci5zZXRHcm91cGluZ1VzZWQoZmFsc2UpOwotCQl9Ci0JCWxvbmcgc3RhcnRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCXBhcnRpdGlvbnMgPSBzdHJ1Y3R1cmVkRG9jdW1lbnQuY29tcHV0ZVBhcnRpdGlvbmluZygwLCBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0TGVuZ3RoKCkpOwotCQlsb25nIGVuZFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJaWYgKERFQlVHX1BSSU5UX1JFU1VMVCkgewotCQkJCi0JCQlTdHJpbmcgY29udGVudHMgPSBudWxsOwotCQotCQkJU3lzdGVtLm91dC5wcmludGxuKCJcbmZpbGVuYW1lOiAiICsgZmlsZW5hbWUpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCJUaW1lIHRvIGNvbXB1dGUgIiArIHBhcnRpdGlvbnMubGVuZ3RoICsgIjogIiArIChlbmRUaW1lLXN0YXJ0VGltZSkgKyAiIChtc2VjcykiKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgcGFydGl0aW9ucy5sZW5ndGg7IGkrKykgewotCQkJCXRyeSB7Ci0JCQkJCWNvbnRlbnRzID0gc3RydWN0dXJlZERvY3VtZW50LmdldChwYXJ0aXRpb25zW2ldLmdldE9mZnNldCgpLCBwYXJ0aXRpb25zW2ldLmdldExlbmd0aCgpKTsKLQkJCQl9Ci0JCQkJY2F0Y2ggKEJhZExvY2F0aW9uRXhjZXB0aW9uIGUpIHsKLQkJCQkJY29udGVudHMgPSAiKmVycm9yKiI7Ci0JCQkJfQotCQkJCWlmICh1c2VGb3JtYXR0ZXIpCi0JCQkJCVN5c3RlbS5vdXQucHJpbnRsbihmb3JtYXR0ZXIuZm9ybWF0KHBhcnRpdGlvbnNbaV0uZ2V0T2Zmc2V0KCkpICsgIjoiICsgZm9ybWF0dGVyLmZvcm1hdChwYXJ0aXRpb25zW2ldLmdldExlbmd0aCgpKSArICIgLSAiICsgcGFydGl0aW9uc1tpXS5nZXRUeXBlKCkgKyAiIFsiICsgU3RyaW5nVXRpbHMuZXNjYXBlKGNvbnRlbnRzKSArICJdIik7Ci0JCQkJZWxzZQotCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4ocGFydGl0aW9uc1tpXSArICIgWyIgKyBTdHJpbmdVdGlscy5lc2NhcGUoY29udGVudHMpICsgIl0iKTsKLQkJCX0KLQkJfQotCQljaGVja1NlYW1zKCk7Ci0JCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQlpblN0cmVhbS5jbG9zZSgpOwotCQotCQlpZiAocGFydGl0aW9ucyA9PSBudWxsKQotCQkJcmV0dXJuIC0xOwotCQlyZXR1cm4gcGFydGl0aW9ucy5sZW5ndGg7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdGV4dC90ZXN0ZmlsZXMveG1sL2NvbXBhbnkzMDBrLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3RleHQvdGVzdGZpbGVzL3htbC9jb21wYW55MzAway54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyYmE1NTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdGV4dC90ZXN0ZmlsZXMveG1sL2NvbXBhbnkzMDBrLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDgxMDAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+Ci08aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+Ci0gICAgICAgIDxoZWFkPgotICAgICAgICAgICAgICAgIDx0aXRsZT5UaGUgVWx0aW1hdGUgQSBDb21wYW55PC90aXRsZT4KLSAgICAgICAgPC9oZWFkPgotICAgICAgICA8Ym9keT4KLSAgICAgICAgICAgICAgICA8cD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJiYW5uZXIuZ2lmIiBoZWlnaHQ9IjUxIiB3aWR0aD0iNjU5IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICA8L3A+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI4NCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0ibGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkE8L2I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydC4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWN0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQncyBOZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmRlciBPbmxpbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgotICAgICAgICAgICAgICAgIDwvdGFibGU+Ci0gICAgICAgICAgICAgICAgPCEtLSBjb21tZW50IGFkZGVkIHRvIHRlc3RzIDYgcGFydGl0aW9ucyAtLT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8cD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJmb290ZXIuZ2lmIiBoZWlnaHQ9IjI1IiB3aWR0aD0iNjU5IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICA8L3A+Ci0gICAgICAgIDwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy90ZXh0L3Rlc3RmaWxlcy94bWwvZW1wdHkueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdGV4dC90ZXN0ZmlsZXMveG1sL2VtcHR5LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy90ZXh0L3Rlc3RmaWxlcy94bWwvZW1wdHkueG1sCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3RleHQvdGVzdGZpbGVzL3htbC9leGFtcGxlMDEueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdGV4dC90ZXN0ZmlsZXMveG1sL2V4YW1wbGUwMS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0NmNjZWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdGV4dC90ZXN0ZmlsZXMveG1sL2V4YW1wbGUwMS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotPCFET0NUWVBFIHRlc3RjYXNlIFNZU1RFTSAidGVzdGNhc2UuZHRkIj4KLTwhLS0gdGhpcyBkb2N1bWVudCB3aWxsIG5vdCB2YWxpZGF0ZSAtLT4KLTx0ZXN0Y2FzZT48L3Rlc3RjYXNlPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdGV4dC90ZXN0ZmlsZXMveG1sL3Rlc3RjYXNlLmR0ZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3RleHQvdGVzdGZpbGVzL3htbC90ZXN0Y2FzZS5kdGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkNDQwOTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdGV4dC90ZXN0ZmlsZXMveG1sL3Rlc3RjYXNlLmR0ZAorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLTw/eG1sIGVuY29kaW5nPSJVUy1BU0NJSSI/PgotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09IEVudGl0aWVzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4KLTwhRU5USVRZICUgRWR0UGFnZVN1YkNhdCAiT3V0bGluZVZpZXcgfCBQcm9wZXJ0eVNoZWV0IHwgU291cmNlVmlldyI+Ci08IUVOVElUWSAlIFdlYlN1YkNhdCAiQWNjZXNzYWJpbGl0eSB8IEFuaW1HSUZEZXNpZ25lciB8IEFwcFNlcnZlckNvbmZpZyB8IENTU0VkaXRvciB8IERCV2l6YXJkIHwgRlRQSW1wb3J0IHwgRlRQRXhwb3J0IHwgSFRUUEltcG9ydCB8IEphdmFCZWFuV2l6YXJkIHwgTGlua1N0eWxlQ29udldpemFyZCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaW5rc1ZpZXcgfCBNaXNjZWxsYW5lb3VzIHwgSFRNTEZpbGVXaXphcmQgfCBKU1BGaWxlV2l6YXJkIHwgU2VydmxldEZpbGVXaXphcmQgfCBXZWJQcm9qV2l6YXJkIHwgTkxTIHwgU2FtcGxlcyB8IFdlYkFwcERlcGxveURlc2MiPgotPCFFTlRJVFkgJSBIVE1MU3ViQ2F0ICAiUGFnZURlc2lnbmVyIHwgRGVzaWduVmlldyB8ICAlRWR0UGFnZVN1YkNhdDsgfCBQcmV2aWV3Ij4KLTwhRU5USVRZICUgWE1MU3ViQ2F0ICAiJUVkdFBhZ2VTdWJDYXQ7Ij4KLTwhRU5USVRZICUgU3ViQ2F0ICIoJVdlYlN1YkNhdDsgfCAlSFRNTFN1YkNhdDsgfCAlWE1MU3ViQ2F0OykiPgotPCFFTlRJVFkgJSBDYXQgIih3ZWJ0b29sIHwgaHRtbCB8IHhtbCkiPgotCi08IUVOVElUWSAlIFN0YXRlICIoVW5kZWZpbmVkIHwgVW5kZXJDb25zdHJ1Y3Rpb24gfCBVbmRlclJldmlldyB8IFJldmlld0NvbXBsZXRlZCB8IEFwcHJvdmVkIHwgUmVhZHkgfCBDb21wbGV0ZSB8IE9ic29sZXRlKSI+Ci08IUVOVElUWSAlIEJ1Y2tldCAiKENvbXBvbmVudFRlc3QgfCBQcm9kdWN0VGVzdCB8IEludGVncmF0aW9uVGVzdCB8IFRyYW5zbGF0aW9uVGVzdCB8IFVuaXRUZXN0KSI+Ci08IUVOVElUWSAlIFBsYXRmb3JtICIoQWxsIHwgV2luMjAwMCB8IFdpbk1FIHwgV2luTlQgfCBXaW45OCB8IExpbnV4UmVkSGF0IHwgQ2FsZGVyYSB8IFN1U2UgfCBUdXJib0xpbnV4KSI+Ci0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PSBFbGVtZW50cyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPgotPCFFTEVNRU5UIHRlc3RjYXNlCi0gIAkoKGhlYWRlciwgc3VtbWFyeSwgZGVmaW5pdGlvbiwgZXhlY3V0aW9uKiksdmFyaWF0aW9uKik+Ci08IUVMRU1FTlQgdmFyaWF0aW9uCi0gIAkoaGVhZGVyLCBzdW1tYXJ5LCBkZWZpbml0aW9uLCBleGVjdXRpb24qKT4KLQotPCFFTEVNRU5UIGhlYWRlciAoc3ViamVjdCwgYXV0aG9yLCBjb2F1dGhvciosIGNyZWF0aW9uX2RhdGUpPgotPCFFTEVNRU5UIHN1YmplY3QgKCNQQ0RBVEEpPgotPCFFTEVNRU5UIGF1dGhvciAoI1BDREFUQSk+Ci08IUVMRU1FTlQgY29hdXRob3IgKCNQQ0RBVEEpPgotPCFFTEVNRU5UIGNyZWF0aW9uX2RhdGUgKCNQQ0RBVEEpPgotCi08IS0tIEV4YW1wbGUgb2YgaGF2aW5nIG1vcmUgdGhhbiBvbmUgYXR0cmlidXRlIGxpc3QgZGVmaW5lZCBmb3IgYSBnaXZlbiBlbGVtZW50IC0tPgotPCFBVFRMSVNUIGhlYWRlcgotCW51bWJlcgkJCUlECQkjUkVRVUlSRUQKLQlzdGF0ZQkJCSVTdGF0ZTsgICAgICAgICAiVW5kZXJDb25zdHJ1Y3Rpb24iCi0+Ci08IUFUVExJU1QgaGVhZGVyCi0JY2F0ZWdvcnkJCSVDYXQ7CQkjUkVRVUlSRUQKLQlzdWJDYXRlZ29yeQkJJVN1YkNhdDsJI1JFUVVJUkVECi0Jc3ViU3ViQ2F0ZW9nb3J5CSAgICAgICAgQ0RBVEEgICAgICAgICAJI0lNUExJRUQKLQk+Ci0KLTwhRUxFTUVOVCBzdW1tYXJ5ICh0ZXN0QnVja2V0KywgcGxhdGZvcm0rLCBwYXJ0KiwgcmVsZWFzZSspPgotPCFFTEVNRU5UIHRlc3RCdWNrZXQgRU1QVFk+Ci08IUFUVExJU1QgdGVzdEJ1Y2tldAotCXR5cGUJCSAJJUJ1Y2tldDsJI1JFUVVJUkVECi0+Ci08IUVMRU1FTlQgcGxhdGZvcm0gRU1QVFk+Ci08IUFUVExJU1QgcGxhdGZvcm0KLQl0eXBlCQkgCSVQbGF0Zm9ybTsJI1JFUVVJUkVECi0+Ci08IUVMRU1FTlQgcGFydCAoI1BDREFUQSk+Ci08IUVMRU1FTlQgcmVsZWFzZSAoI1BDREFUQSk+Ci0KLQotPCFFTEVNRU5UIGRlZmluaXRpb24gKHB1cnBvc2UsIHByZXJlcXVpc2l0ZSosIHByb2NlZHVyZSwgZXhwZWN0ZWRfcmVzdWx0cyk+Ci08IUVMRU1FTlQgcHVycG9zZSAoI1BDREFUQSk+Ci08IUVMRU1FTlQgcHJlcmVxdWlzaXRlIEVNUFRZPgotPCFBVFRMSVNUIHByZXJlcXVpc2l0ZQotCW51bWJlcgkJCUlEUkVGCQkjUkVRVUlSRUQKLT4KLTwhRUxFTUVOVCBwcm9jZWR1cmUgKCNQQ0RBVEEpPgotPCFFTEVNRU5UIGV4cGVjdGVkX3Jlc3VsdHMgKCNQQ0RBVEEpPgotCi08IUVMRU1FTlQgZXhlY3V0aW9uIEFOWT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3V0aWwvQ29tbW9uWE1MLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy91dGlsL0NvbW1vblhNTC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTc3OWQ5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3V0aWwvQ29tbW9uWE1MLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy51dGlsOwotCi0KLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07Ci0KLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXI7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeTsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5QYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uT3V0cHV0S2V5czsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlNvdXJjZTsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJFeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckZhY3Rvcnk7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckZhY3RvcnlDb25maWd1cmF0aW9uRXJyb3I7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5kb20uRE9NU291cmNlOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uc3RyZWFtLlN0cmVhbVJlc3VsdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5Mb2dnZXI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci0KLQotCi0vKioKLSAqLwotcHVibGljIGNsYXNzIENvbW1vblhNTCB7Ci0KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBEb2N1bWVudEJ1aWxkZXIgZ2V0RG9jdW1lbnRCdWlsZGVyKCkgewotCQlEb2N1bWVudEJ1aWxkZXIgcmVzdWx0ID0gbnVsbDsKLQkJdHJ5IHsKLQkJCXJlc3VsdCA9IERvY3VtZW50QnVpbGRlckZhY3RvcnkubmV3SW5zdGFuY2UoKS5uZXdEb2N1bWVudEJ1aWxkZXIoKTsKLQkJfQotCQljYXRjaCAoUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQlMb2dnZXIubG9nRXhjZXB0aW9uKGUpOwotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgRG9jdW1lbnRCdWlsZGVyIGdldERvY3VtZW50QnVpbGRlcihib29sZWFuIHZhbGlkYXRpbmcpIHsKLQkJRG9jdW1lbnRCdWlsZGVyIHJlc3VsdCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudEJ1aWxkZXJGYWN0b3J5IGluc3RhbmNlID0gRG9jdW1lbnRCdWlsZGVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotCQkJaW5zdGFuY2Uuc2V0VmFsaWRhdGluZyh2YWxpZGF0aW5nKTsKLQkJCXJlc3VsdCA9IGluc3RhbmNlLm5ld0RvY3VtZW50QnVpbGRlcigpOwotCQl9Ci0JCWNhdGNoIChQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIGUpIHsKLQkJCUxvZ2dlci5sb2dFeGNlcHRpb24oZSk7Ci0JCX0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgc2VyaWFsaXplKERvY3VtZW50IGRvY3VtZW50LCBPdXRwdXRTdHJlYW0gb3N0cmVhbSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU291cmNlIGRvbVNvdXJjZSA9IG5ldyBET01Tb3VyY2UoZG9jdW1lbnQpOwotCQl0cnkgewotCQkJVHJhbnNmb3JtZXIgc2VyaWFsaXplciA9IFRyYW5zZm9ybWVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpLm5ld1RyYW5zZm9ybWVyKCk7Ci0JCQl0cnkgewotCQkJCXNlcmlhbGl6ZXIuc2V0T3V0cHV0UHJvcGVydHkoT3V0cHV0S2V5cy5JTkRFTlQsICJ5ZXMiKTsKLQkJCQlzZXJpYWxpemVyLnNldE91dHB1dFByb3BlcnR5KCJ7aHR0cDovL3htbC5hcGFjaGUub3JnL3hzbHR9aW5kZW50LWFtb3VudCIsICI0Iik7Ci0JCQkJc2VyaWFsaXplci5zZXRPdXRwdXRQcm9wZXJ0eShPdXRwdXRLZXlzLkVOQ09ESU5HLCAiVVRGLTE2Iik7Ci0JCQl9Ci0JCQljYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKLQkJCQkvLyB1bnN1cHBvcnRlZCBwcm9wZXJ0aWVzCi0JCQl9Ci0JCQlzZXJpYWxpemVyLnRyYW5zZm9ybShkb21Tb3VyY2UsIG5ldyBTdHJlYW1SZXN1bHQob3N0cmVhbSkpOwotCQl9Ci0JCWNhdGNoIChUcmFuc2Zvcm1lckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gZSkgewotCQkJdGhyb3cgbmV3IElPRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKLQkJfQotCQljYXRjaCAoVHJhbnNmb3JtZXJGYWN0b3J5Q29uZmlndXJhdGlvbkVycm9yIGUpIHsKLQkJCXRocm93IG5ldyBJT0V4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7Ci0JCX0KLQkJY2F0Y2ggKFRyYW5zZm9ybWVyRXhjZXB0aW9uIGUpIHsKLQkJCXRocm93IG5ldyBJT0V4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7Ci0JCX0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdXRpbC9EYXRlVXRpbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdXRpbC9EYXRlVXRpbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MWQ4ODVlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3V0aWwvRGF0ZVV0aWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMudXRpbDsKLQotaW1wb3J0IGphdmEudXRpbC5DYWxlbmRhcjsKLWltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKLQotaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuRGF0ZUZvcm1hdDsKLWltcG9ydCBjb20uaWJtLmljdS50ZXh0LlNpbXBsZURhdGVGb3JtYXQ7Ci0KLS8qKgotICogQGF1dGhvciBkYXZpZHcKLSAqCi0gKiBUbyBjaGFuZ2UgdGhpcyBnZW5lcmF0ZWQgY29tbWVudCBlZGl0IHRoZSB0ZW1wbGF0ZSB2YXJpYWJsZSAidHlwZWNvbW1lbnQiOgotICogV2luZG93PlByZWZlcmVuY2VzPkphdmE+VGVtcGxhdGVzLgotICogVG8gZW5hYmxlIGFuZCBkaXNhYmxlIHRoZSBjcmVhdGlvbiBvZiB0eXBlIGNvbW1lbnRzIGdvIHRvCi0gKiBXaW5kb3c+UHJlZmVyZW5jZXM+SmF2YT5Db2RlIEdlbmVyYXRpb24uCi0gKi8KLXB1YmxpYyBjbGFzcyBEYXRlVXRpbCB7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgQWxsVGVzdHMuCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgbm93ID0gbnVsbDsKLQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgbm93KCkgewotCQkvLyBqdXN0IGNhbGN1bGF0ZSBvbmNlLCBzbyB3aG9sZSBydW4gYXMgc2FtZSB0aW1lc3RhbXAKLQkJaWYgKERhdGVVdGlsLm5vdyA9PSBudWxsKSB7Ci0JCQlEYXRlRm9ybWF0IGZvcm1hdCA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KCJ5eXl5Jy0nTU0nLSdkZCctJ2trJy0nbW0nLSdzcyIpOwotCQkJQ2FsZW5kYXIgY2FsZW5kYXIgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOwotCQkJRGF0ZSB0b2RheSA9IGNhbGVuZGFyLmdldFRpbWUoKTsKLQkJCURhdGVVdGlsLm5vdyA9IGZvcm1hdC5mb3JtYXQodG9kYXkpOwotCQl9Ci0JCXJldHVybiBEYXRlVXRpbC5ub3c7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy91dGlsL0ZpbGVVdGlsLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy91dGlsL0ZpbGVVdGlsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjM2Q0Y2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdXRpbC9GaWxlVXRpbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMudXRpbDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVuYW1lRmlsdGVyOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotCi0vKioKLSAqIEBhdXRob3IgZGF2aWR3Ci0gKgotICovCi1wdWJsaWMgY2xhc3MgRmlsZVV0aWwgewotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGZMaW5lU2VwYXJhdG9yID0gU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGZQYXRoU2VwYXJhdG9yID0gU3lzdGVtLmdldFByb3BlcnR5KCJwYXRoLnNlcGFyYXRvciIpOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGZGaWxlU2VwYXJhdG9yID0gU3lzdGVtLmdldFByb3BlcnR5KCJmaWxlLnNlcGFyYXRvciIpOwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIFhNTF9DT1JFX1RFU1RTX1BMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMiOwotCi0Jc3RhdGljIEZpbGUgcHJldmlvdXNSZXN1bHRzRGlyZWN0b3J5ID0gbnVsbDsKLQlzdGF0aWMgcHJpdmF0ZSBTdHJpbmcgbG9nU3ViRGlyZWN0b3J5UGF0aDsKLQotCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gbm90VHJpZWRZZXQgPSB0cnVlOwotCi0JcHVibGljIHN0YXRpYyBjbGFzcyBEaXJGaWxlbmFtZUZpbHRlciBpbXBsZW1lbnRzIEZpbGVuYW1lRmlsdGVyIHsKLQkJU3RyaW5nIHN0YXJ0T2ZBY2NlcHRhYmxlTmFtZXM7Ci0KLQkJcHVibGljIERpckZpbGVuYW1lRmlsdGVyKFN0cmluZyBzdGFydE9mRGlyTmFtZSkgewotCQkJc3RhcnRPZkFjY2VwdGFibGVOYW1lcyA9IHN0YXJ0T2ZEaXJOYW1lOwotCQl9Ci0KLQkJLyoqCi0JCSAqIEBzZWUgamF2YS5pby5GaWxlRmlsdGVyI2FjY2VwdChGaWxlKQotCQkgKi8KLQkJcHVibGljIGJvb2xlYW4gYWNjZXB0KEZpbGUgcGF0aG5hbWUsIFN0cmluZyBmaWxlbmFtZSkgewotCQkJLy8gd2UnbGwganVzdCBhc3N1bWUgaWYgaXQgc3RhcnRzIHdpdGggcmlnaHQga2V5LCBpdCBpcyBhIGRpcmVjdG9yeSAuLi4gZm9yIG5vdwotCQkJcmV0dXJuIGZpbGVuYW1lLnN0YXJ0c1dpdGgoc3RhcnRPZkFjY2VwdGFibGVOYW1lcyk7Ci0JCX0KLQotCX0KLQotCXB1YmxpYyBzdGF0aWMgRmlsZSBnZXRQcmV2aW91c1Jlc3VsdHNEaXJlY3RvcnkoU3RyaW5nIGRpcmVjdG9yeVJvb3ROYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlpZiAocHJldmlvdXNSZXN1bHRzRGlyZWN0b3J5ID09IG51bGwgJiYgbm90VHJpZWRZZXQpIHsKLQkJCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoWE1MX0NPUkVfVEVTVFNfUExVR0lOX0lEKTsKLQkJCVVSTCB1cmwgPSBidW5kbGUuZ2V0RW50cnkoIi8iKTsKLQkJCS8vU3RyaW5nIGluc3RhbGxQYXRoID0gdXJsLmdldFBhdGgoKTsKLQkJCS8vIGFkZCBrbm93biBmaWxlIHNvIFVSTCBtZXRob2QgYmVsb3cgY2FuIGJlIHVzZWQKLQkJCS8vIChkb2Vzbid0IHNlZW0gdG8gd29yayBmb3IgZGlyZWN0b3J5PykKLQkJCVVSTCB0b3RhbFVSTCA9IG5ldyBVUkwodXJsLCAicGx1Z2luLnhtbCIpOwotCQkJVVJMIGZpbmFsdXJsID0gRmlsZUxvY2F0b3IudG9GaWxlVVJMKHRvdGFsVVJMKTsKLQkJCVN0cmluZyBmaW5hbEZpbGUgPSBmaW5hbHVybC5nZXRGaWxlKCk7Ci0JCQlGaWxlIGZpbGUgPSBuZXcgRmlsZShmaW5hbEZpbGUpOwotCQkJU3RyaW5nIGZpbmFsUGF0aCA9IGZpbGUuZ2V0UGFyZW50KCk7Ci0JCQlGaWxlIHBsdWdpbkhvbWVEaXIgPSBuZXcgRmlsZShmaW5hbFBhdGgpOwotCQkJRmlsZW5hbWVGaWx0ZXIgZGlyRmlsdGVyID0gbmV3IERpckZpbGVuYW1lRmlsdGVyKGRpcmVjdG9yeVJvb3ROYW1lKTsKLQkJCUZpbGVbXSBhbGxEaXJzID0gcGx1Z2luSG9tZURpci5saXN0RmlsZXMoZGlyRmlsdGVyKTsKLQotCQkJLy8gYXNzdW1lIGZpcnN0IGluIGxpc3QgaXMgbmV3ZXN0LCB0aGVuIHN0YXJ0IGxvb2tpbmcgd2l0aCB0aGUgCi0JCQkvLyBzZWNvbmQgaXRlbSAuLi4ganVzdCB0byBhdm9pZCAibnVsbCIgY2FzZSBjaGVja2luZwotCQkJaWYgKGFsbERpcnMubGVuZ3RoID4gMCkgewotCQkJCUZpbGUgY3VycmVudE5ld2VzdCA9IGFsbERpcnNbMF07Ci0JCQkJZm9yIChpbnQgaSA9IDE7IGkgPCBhbGxEaXJzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJCUZpbGUgY3VycmVudCA9IGFsbERpcnNbaV07Ci0JCQkJCS8vIE5PVEU6IHdlIGdvIGJ5IG1vZGlmaWVkIGRhdGUsIG5vdCBieSB0aGUgYWN0dWFsIHRpbWUgc3RhbXAgaW4gbmFtZS4KLQkJCQkJLy8gVGhpcyBzaG91bGQgd29yayBmb3IgYWxsIG5vcm1hbCBjYXNlcywgYnV0IG1heSBub3QgaWYgc29tZW9uZSBkb2VzIHNvbWUKLQkJCQkJLy8gImZ1bm55IiBjb3B5aW5nLCBvciB1cGRhdGluZyBmcm9tIHJlcG9zaXRvcnkuCi0JCQkJCWlmIChjdXJyZW50Lmxhc3RNb2RpZmllZCgpID4gY3VycmVudE5ld2VzdC5sYXN0TW9kaWZpZWQoKSkgewotCQkJCQkJY3VycmVudE5ld2VzdCA9IGN1cnJlbnQ7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJcHJldmlvdXNSZXN1bHRzRGlyZWN0b3J5ID0gY3VycmVudE5ld2VzdDsKLQkJCX0KLQkJCW5vdFRyaWVkWWV0ID0gZmFsc2U7Ci0JCX0KLQkJcmV0dXJuIHByZXZpb3VzUmVzdWx0c0RpcmVjdG9yeTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIEZpbGUgbWFrZUZpbGVGb3IoU3RyaW5nIGRpcmVjdG9yeSwgU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgdGVzdFJlc3VsdHNEaXJlY3RvcnlQcmVmaXgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoWE1MX0NPUkVfVEVTVFNfUExVR0lOX0lEKTsKLQkJVVJMIHVybCA9IGJ1bmRsZS5nZXRFbnRyeSgiLyIpOwotCQlVUkwgbG9jYWxVUkwgPSBGaWxlTG9jYXRvci50b0ZpbGVVUkwodXJsKTsKLQkJU3RyaW5nIGluc3RhbGxQYXRoID0gbG9jYWxVUkwuZ2V0UGF0aCgpOwotCQlTdHJpbmcgdG90YWxEaXJlY3RvcnkgPSBpbnN0YWxsUGF0aCArIGRpcmVjdG9yeTsKLQkJU3RyaW5nIHRvdGFsUGF0aCA9IHRvdGFsRGlyZWN0b3J5ICsgIi8iICsgZmlsZW5hbWU7Ci0JCVVSTCB0b3RhbFVSTCA9IG5ldyBVUkwodXJsLCB0b3RhbFBhdGgpOwotCQkvL1VSTCBmaW5hbHVybCA9IFBsYXRmb3JtLmFzTG9jYWxVUkwodG90YWxVUkwpOwotCQlTdHJpbmcgZmluYWxGaWxlID0gdG90YWxVUkwuZ2V0RmlsZSgpOwotCQlGaWxlIGZpbGUgPSBuZXcgRmlsZShmaW5hbEZpbGUpOwotCQlTdHJpbmcgZmluYWxQYXRoID0gZmlsZS5nZXRQYXJlbnQoKTsKLQkJRmlsZSBkaXIgPSBuZXcgRmlsZShmaW5hbFBhdGgpOwotCQlpZiAoIWRpci5leGlzdHMoKSkgewotCQkJLy8gYSBsaXR0bGUgc2FmZXR5IG5ldCwgYmUgc3VyZSB0aGUgcHJldmlvdXMgbmV3ZXN0IGRpcmVjdG9yeQotCQkJLy8gaXMgaW5pdGlhbGl6ZWQsIGp1c3QgaW4gY2FzZSBubyBvbmUgZWxzZSBoYXMgZG9uZSBzbwotCQkJaWYgKHRlc3RSZXN1bHRzRGlyZWN0b3J5UHJlZml4ICE9IG51bGwgJiYgdGVzdFJlc3VsdHNEaXJlY3RvcnlQcmVmaXgubGVuZ3RoKCkgPiAwKSB7Ci0JCQkJRmlsZVV0aWwuZ2V0UHJldmlvdXNSZXN1bHRzRGlyZWN0b3J5KHRlc3RSZXN1bHRzRGlyZWN0b3J5UHJlZml4KTsKLQkJCX0KLQkJCS8vIG5vdyBpdHMgInNhZmUiIHRvIG1ha2UgdGhlIG5ldyBvbmUKLQkJCWRpci5ta2RpcnMoKTsKLQkJfQotCQlyZXR1cm4gZmlsZTsKLQl9Ci0KLQkvKioKLQkgKiBKdXN0IGEgZ2VuZXJhbCB1dGlsaXR5IG1ldGhvZAotCSAqIEBwYXJhbSBmaWxlbmFtZQotCSAqIEByZXR1cm4gU3RyaW5nCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RXh0ZW5zaW9uKFN0cmluZyBmaWxlbmFtZSkgewotCQlTdHJpbmcgZXh0ZW5zaW9uID0gbnVsbDsKLQkJaW50IGRvdFBvc3Rpb24gPSBmaWxlbmFtZS5sYXN0SW5kZXhPZignLicpOwotCQlpZiAoZG90UG9zdGlvbiA+IC0xKSB7Ci0JCQlleHRlbnNpb24gPSBmaWxlbmFtZS5zdWJzdHJpbmcoZG90UG9zdGlvbiArIDEpOwotCQl9Ci0JCWVsc2UgewotCQkJZXh0ZW5zaW9uID0gbmV3IFN0cmluZygpOwotCQl9Ci0JCXJldHVybiBleHRlbnNpb247Ci0JfQotCi0JLyoqCi0JICogR2VuZXJhbCBwdXJwb3NlIHV0aWxpdHkgbWV0aG9kIHRvIGVuc3VyZSB0aGUgbG9nCi0JICogZGlyZWN0b3J5IGV4aXN0cywgYW5kIHJldHVybnMgdGhlIG5hbWUuIAotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldExvZ0RpcmVjdG9yeSgpIHsKLQkJaWYgKGxvZ1N1YkRpcmVjdG9yeVBhdGggPT0gbnVsbCkgewotCQkJU3RyaW5nIG1haW5EaXJlY3RvcnkgPSAiL2xvZ3MiOwotCQkJRmlsZSBkaXIgPSBuZXcgRmlsZShtYWluRGlyZWN0b3J5KTsKLQkJCWVuc3VyZUV4aXN0cyhkaXIpOwotCQkJU3RyaW5nIHN1YkRpcmVjdG9yeSA9IFRpbWVzdGFtcFV0aWwudGltZXN0YW1wKCk7Ci0JCQlsb2dTdWJEaXJlY3RvcnlQYXRoID0gbWFpbkRpcmVjdG9yeSArICIvIiArIHN1YkRpcmVjdG9yeTsKLQkJCUZpbGUgc3ViZGlyID0gbmV3IEZpbGUobG9nU3ViRGlyZWN0b3J5UGF0aCk7Ci0JCQllbnN1cmVFeGlzdHMoc3ViZGlyKTsKLQkJfQotCQlyZXR1cm4gbG9nU3ViRGlyZWN0b3J5UGF0aDsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgZW5zdXJlRXhpc3RzKEZpbGUgZGlyKSB7Ci0JCWlmICghZGlyLmV4aXN0cygpKSB7Ci0JCQlkaXIubWtkaXJzKCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRQZXJmb3JtYW5jZU91dHB1dExvZ05hbWUoKSB7Ci0JCVN0cmluZyByZXN1bHQgPSBudWxsOwotCQlTdHJpbmcgZGlyZWN0b3J5TmFtZSA9IEZpbGVVdGlsLmdldExvZ0RpcmVjdG9yeSgpOwotCQlTdHJpbmcgZXh0ZW5zaW9uID0gIi5vdXQiOwotCQlTdHJpbmcgYmFzZU5hbWUgPSAic2VkVGVzdHMiOwotCQlsb25nIG5vdyA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQlTdHJpbmcgbm93U3RyID0gU3RyaW5nLnZhbHVlT2Yobm93KTsKLQkJcmVzdWx0ID0gZGlyZWN0b3J5TmFtZSArIEZpbGVVdGlsLmZGaWxlU2VwYXJhdG9yICsgYmFzZU5hbWUgKyBub3dTdHIgKyBleHRlbnNpb247Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy91dGlsL1Byb2plY3RVbnppcFV0aWxpdHkuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3V0aWwvUHJvamVjdFVuemlwVXRpbGl0eS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODEwNWE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3V0aWwvUHJvamVjdFVuemlwVXRpbGl0eS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzc0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMudXRpbDsKLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5JbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLnppcC5aaXBFbnRyeTsKLWltcG9ydCBqYXZhLnV0aWwuemlwLlppcEZpbGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlUm9vdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLldvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLklPdmVyd3JpdGVRdWVyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS53aXphcmRzLmRhdGF0cmFuc2Zlci5GaWxlU3lzdGVtU3RydWN0dXJlUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkud2l6YXJkcy5kYXRhdHJhbnNmZXIuSUltcG9ydFN0cnVjdHVyZVByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLndpemFyZHMuZGF0YXRyYW5zZmVyLkltcG9ydE9wZXJhdGlvbjsKLQotLyoqCi0gKiBJbXBvcnRzIHppcHBlZCBmaWxlcyBpbnRvIHRoZSB0ZXN0IHdvcmtzcGFjZS4gRGVsZXRlcyBhbGwgcHJvamVjdHMgaW4KLSAqIHdvcmtzcGFjZS4KLSAqIAotICogQGF1dGhvciBwYXZlcnkKLSAqLwotcHVibGljIGNsYXNzIFByb2plY3RVbnppcFV0aWxpdHkgewotCWNsYXNzIFdvcmtzcGFjZVByb2dyZXNzTW9uaXRvciBpbXBsZW1lbnRzIElQcm9ncmVzc01vbml0b3IgewotCQlwcml2YXRlIGJvb2xlYW4gZmluaXNoZWQgPSBmYWxzZTsKLQotCQlwdWJsaWMgdm9pZCBiZWdpblRhc2soU3RyaW5nIG5hbWUsIGludCB0b3RhbFdvcmspIHsKLQkJCS8vIG5vb3AKLQkJfQotCi0JCXB1YmxpYyB2b2lkIGRvbmUoKSB7Ci0JCQlmaW5pc2hlZCA9IHRydWU7Ci0JCX0KLQotCQlwdWJsaWMgYm9vbGVhbiBpc0ZpbmlzaGVkKCkgewotCQkJcmV0dXJuIGZpbmlzaGVkOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgaW50ZXJuYWxXb3JrZWQoZG91YmxlIHdvcmspIHsKLQkJCS8vIG5vb3AKLQkJfQotCi0JCXB1YmxpYyBib29sZWFuIGlzQ2FuY2VsZWQoKSB7Ci0JCQlyZXR1cm4gZmluaXNoZWQ7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBzZXRDYW5jZWxlZChib29sZWFuIHZhbHVlKSB7Ci0JCQlpZiAodmFsdWUgPT0gdHJ1ZSkKLQkJCQlmaW5pc2hlZCA9IHRydWU7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBzZXRUYXNrTmFtZShTdHJpbmcgbmFtZSkgewotCQkJLy8gbm9vcAotCQl9Ci0KLQkJcHVibGljIHZvaWQgc3ViVGFzayhTdHJpbmcgbmFtZSkgewotCQkJLy8gbm9vcAotCQl9Ci0KLQkJcHVibGljIHZvaWQgd29ya2VkKGludCB3b3JrKSB7Ci0JCQkvLyBub29wCi0JCX0KLQl9Ci0KLQljbGFzcyBNeU92ZXJ3cml0ZVF1ZXJ5IGltcGxlbWVudHMgSU92ZXJ3cml0ZVF1ZXJ5IHsKLQkJcHVibGljIFN0cmluZyBxdWVyeU92ZXJ3cml0ZShTdHJpbmcgcGF0aFN0cmluZykgewotCQkJcmV0dXJuIEFMTDsKLQkJfQotCX0KLQotCXB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFBST0pFQ1RfWklQU19GT0xERVIgPSAicHJvamVjdHRlc3RmaWxlcyI7Ci0JcHJpdmF0ZSBMaXN0IGZDcmVhdGVkUHJvamVjdHMgPSBudWxsOwotCi0JcHVibGljIFByb2plY3RVbnppcFV0aWxpdHkoKSB7Ci0JCS8vIGZvciBkZWxldGlvbiBsYXRlcgotCQlmQ3JlYXRlZFByb2plY3RzID0gbmV3IEFycmF5TGlzdCgpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBmaWxlVG9JbXBvcnQKLQkgKiAgICAgICAgICAgIHRoZSBmaWxlIHlvdSB3aXNoIHRvIGltcG9ydAotCSAqIEBwYXJhbSBmb2xkZXJQYXRoCi0JICogICAgICAgICAgICB0aGUgY29udGFpbmVyIHBhdGggd2l0aGluIHRoZSB3b3Jrc3BhY2UKLQkgKi8KLQlwdWJsaWMgdm9pZCBpbXBvcnRGaWxlKEZpbGUgZmlsZVRvSW1wb3J0LCBTdHJpbmcgZm9sZGVyUGF0aCkgewotCQlXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IgaW1wb3J0UHJvZ3Jlc3MgPSBuZXcgV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yKCk7Ci0JCXRyeSB7Ci0JCQlpZiAoZmlsZVRvSW1wb3J0LmV4aXN0cygpKSB7Ci0JCQkJSVBhdGggY29udGFpbmVyUGF0aCA9IG5ldyBQYXRoKGZvbGRlclBhdGgpOwotCQkJCS8vZkNyZWF0ZWRQcm9qZWN0cy5hZGQoZm9sZGVyUGF0aCk7Ci0JCQkJSUltcG9ydFN0cnVjdHVyZVByb3ZpZGVyIHByb3ZpZGVyID0gRmlsZVN5c3RlbVN0cnVjdHVyZVByb3ZpZGVyLklOU1RBTkNFOwotCQkJCUlPdmVyd3JpdGVRdWVyeSBvdmVyd3JpdGVJbXBsZW1lbnRvciA9IG5ldyBNeU92ZXJ3cml0ZVF1ZXJ5KCk7Ci0JCQkJRmlsZVtdIGZpbGVzVG9JbXBvcnQgPSB7ZmlsZVRvSW1wb3J0fTsKLQkJCQlJbXBvcnRPcGVyYXRpb24gaW1wb3J0T3AgPSBuZXcgSW1wb3J0T3BlcmF0aW9uKGNvbnRhaW5lclBhdGgsIG51bGwsIHByb3ZpZGVyLCBvdmVyd3JpdGVJbXBsZW1lbnRvciwgQXJyYXlzLmFzTGlzdChmaWxlc1RvSW1wb3J0KSk7Ci0JCQkJaW1wb3J0T3Auc2V0Q3JlYXRlQ29udGFpbmVyU3RydWN0dXJlKGZhbHNlKTsKLQkJCQlpbXBvcnRPcC5zZXRPdmVyd3JpdGVSZXNvdXJjZXModHJ1ZSk7Ci0JCQkJaW1wb3J0T3AucnVuKGltcG9ydFByb2dyZXNzKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiaGFuZGxlIHNvdXJjZSBkb2Vzbid0IGV4aXN0Iik7Ci0JCQl9Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCQkJZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpbXBvcnRQcm9ncmVzcy5kb25lKCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiB0aGUgZm9sbG93aW5nIGlzIGxvZ2ljIGZyb20KLQkgKiBodHRwOi8vd3d3LmRldnNoZWQuY29tL2MvYS9KYXZhL1ppcC1NZWV0cy1KYXZhLzIvCi0JICovCi0JLy8gc3BlY2lmeSBidWZmZXIgc2l6ZSBmb3IgZXh0cmFjdGlvbgotCXN0YXRpYyBmaW5hbCBpbnQgQlVGRkVSID0gMjA0ODsKLQotCXB1YmxpYyB2b2lkIHVuemlwQW5kSW1wb3J0KEZpbGUgaW5GaWxlLCBTdHJpbmcgZGVzdGluYXRpb25EaXJlY3RvcnkpIHsKLQkJdHJ5IHsKLQkJCS8vIFNwZWNpZnkgZmlsZSB0byBkZWNvbXByZXNzCi0JCQlTdHJpbmcgaW5GaWxlTmFtZSA9IGluRmlsZS5nZXRBYnNvbHV0ZVBhdGgoKTsgLy8iYzovZXhhbXBsZS56aXAiOwotCQkJLy8gU3BlY2lmeSBkZXN0aW5hdGlvbiB3aGVyZSBmaWxlIHdpbGwgYmUgdW56aXBwZWQKLQkJCS8vU3RyaW5nIGRlc3RpbmF0aW9uRGlyZWN0b3J5ID0KLQkJCS8vICJkOi9lY2xpcHNlZGV2L001X1NTRV9URVNUU19XT1JLU1BBQ0UvIjsgLy8iYzovdGVtcC8iOwotCQkJRmlsZSBzb3VyY2VaaXBGaWxlID0gbmV3IEZpbGUoaW5GaWxlTmFtZSk7Ci0JCQlGaWxlIHVuemlwRGVzdGluYXRpb25EaXJlY3RvcnkgPSBuZXcgRmlsZShkZXN0aW5hdGlvbkRpcmVjdG9yeSk7Ci0JCQkvLyBPcGVuIFppcCBmaWxlIGZvciByZWFkaW5nCi0JCQlaaXBGaWxlIHppcEZpbGUgPSBuZXcgWmlwRmlsZShzb3VyY2VaaXBGaWxlLCBaaXBGaWxlLk9QRU5fUkVBRCk7Ci0JCQkvLyBDcmVhdGUgYW4gZW51bWVyYXRpb24gb2YgdGhlIGVudHJpZXMgaW4gdGhlIHppcCBmaWxlCi0JCQlFbnVtZXJhdGlvbiB6aXBGaWxlRW50cmllcyA9IHppcEZpbGUuZW50cmllcygpOwotCQkJU3RyaW5nIHByb2plY3RGb2xkZXJOYW1lID0gbnVsbDsKLQkJCUlQcm9qZWN0IGN1cnJlbnRQcm9qZWN0ID0gbnVsbDsKLQkJCS8vIFByb2Nlc3MgZWFjaCBlbnRyeQotCQkJd2hpbGUgKHppcEZpbGVFbnRyaWVzLmhhc01vcmVFbGVtZW50cygpKSB7Ci0JCQkJLy8gZ3JhYiBhIHppcCBmaWxlIGVudHJ5Ci0JCQkJWmlwRW50cnkgZW50cnkgPSAoWmlwRW50cnkpIHppcEZpbGVFbnRyaWVzLm5leHRFbGVtZW50KCk7Ci0JCQkJU3RyaW5nIGN1cnJlbnRFbnRyeSA9IGVudHJ5LmdldE5hbWUoKTsKLQkJCQkvL1N5c3RlbS5vdXQucHJpbnRsbigiRXh0cmFjdGluZzogIiArIGVudHJ5KTsKLQkJCQlGaWxlIGRlc3RGaWxlID0gbmV3IEZpbGUodW56aXBEZXN0aW5hdGlvbkRpcmVjdG9yeSwgY3VycmVudEVudHJ5KTsKLQkJCQkvLyBncmFiIGZpbGUncyBwYXJlbnQgZGlyZWN0b3J5IHN0cnVjdHVyZQotCQkJCUZpbGUgZGVzdGluYXRpb25QYXJlbnQgPSBkZXN0RmlsZS5nZXRQYXJlbnRGaWxlKCk7Ci0JCQkJLy8gY3JlYXRlIHRoZSBwYXJlbnQgZGlyZWN0b3J5IHN0cnVjdHVyZSBpZiBuZWVkZWQKLQkJCQlkZXN0aW5hdGlvblBhcmVudC5ta2RpcnMoKTsKLQkJCQkvLyBleHRyYWN0IGZpbGUgaWYgbm90IGEgZGlyZWN0b3J5Ci0JCQkJaWYgKCFlbnRyeS5pc0RpcmVjdG9yeSgpKSB7Ci0JCQkJCUJ1ZmZlcmVkSW5wdXRTdHJlYW0gaXMgPSBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbSh6aXBGaWxlLmdldElucHV0U3RyZWFtKGVudHJ5KSk7Ci0JCQkJCWludCBjdXJyZW50Qnl0ZTsKLQkJCQkJLy8gZXN0YWJsaXNoIGJ1ZmZlciBmb3Igd3JpdGluZyBmaWxlCi0JCQkJCWJ5dGUgZGF0YVtdID0gbmV3IGJ5dGVbQlVGRkVSXTsKLQkJCQkJLy8gd3JpdGUgdGhlIGN1cnJlbnQgZmlsZSB0byBkaXNrCi0JCQkJCUZpbGVPdXRwdXRTdHJlYW0gZm9zID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oZGVzdEZpbGUpOwotCQkJCQlCdWZmZXJlZE91dHB1dFN0cmVhbSBkZXN0ID0gbmV3IEJ1ZmZlcmVkT3V0cHV0U3RyZWFtKGZvcywgQlVGRkVSKTsKLQkJCQkJLy8gcmVhZCBhbmQgd3JpdGUgdW50aWwgbGFzdCBieXRlIGlzIGVuY291bnRlcmVkCi0JCQkJCXdoaWxlICgoY3VycmVudEJ5dGUgPSBpcy5yZWFkKGRhdGEsIDAsIEJVRkZFUikpICE9IC0xKSB7Ci0JCQkJCQlkZXN0LndyaXRlKGRhdGEsIDAsIGN1cnJlbnRCeXRlKTsKLQkJCQkJfQotCQkJCQlkZXN0LmZsdXNoKCk7Ci0JCQkJCWRlc3QuY2xvc2UoKTsKLQkJCQkJaXMuY2xvc2UoKTsKLQkJCQkJaWYgKHByb2plY3RGb2xkZXJOYW1lICE9IG51bGwpCi0JCQkJCQlpbXBvcnRGaWxlKGRlc3RGaWxlLCBwcm9qZWN0Rm9sZGVyTmFtZSk7Ci0JCQkJfQotCQkJCWVsc2UgewotCQkJCQkvLyBuZWVkIGhhbmRsZSB0byB0aGUgbWFpbiBwcm9qZWN0IGZvbGRlciB0byBjcmVhdGUKLQkJCQkJLy8gY29udGFpbmVyUGF0aAotCQkJCQkvLyB1bmxpa2UgdmVyc2lvbiBpbiBzc2UudGVzdHMsIHdlIGRvbid0IGNyZWF0ZSBwcm9qZWN0Ci0JCQkJCS8vIGZvcgotCQkJCQkvLyBldmVyeSBkaXJlY3RvcnkKLQkJCQkJLy8JCQkJCWlmKHByb2plY3RGb2xkZXJOYW1lID09IG51bGwpIHsKLQkJCQkJLy8JCQkJCQlwcm9qZWN0Rm9sZGVyTmFtZSA9IGRlc3RGaWxlLmdldE5hbWUoKTsKLQkJCQkJLy8JCQkJCQlmQ3JlYXRlZFByb2plY3RzLmFkZChwcm9qZWN0Rm9sZGVyTmFtZSk7Ci0JCQkJCS8vCQkJCQkJCi0JCQkJCS8vCQkJCQkJY3VycmVudFByb2plY3QgPQotCQkJCQkvLyBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QocHJvamVjdEZvbGRlck5hbWUpOwotCQkJCQkvLwkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCXppcEZpbGUuY2xvc2UoKTsKLQkJCS8vIGZpeGVzIHdvcmtzcGFjZSBtZXRhZGF0YSBmb3IgdGhlIHByb2plY3QKLQkJCS8vIGZvciBjbGVhbiBzdGFydHVwIG5leHQgcnVuCi0JCQlpZiAoY3VycmVudFByb2plY3QgIT0gbnVsbCkgewotCQkJCXRyeSB7Ci0JCQkJCVBhdGggcHJvamVjdExvY2F0aW9uID0gbmV3IFBhdGgoUGxhdGZvcm0uZ2V0TG9jYXRpb24oKS50b09TU3RyaW5nKCkpOwotCQkJCQljcmVhdGVQcm9qZWN0KGN1cnJlbnRQcm9qZWN0LCBwcm9qZWN0TG9jYXRpb24sIG5ldyBXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQkJfQotCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGNleCkgewotCQkJCQljZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpIHsKLQkJCWlvZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCX0KLQotCS8qKgotCSAqICAKLQkgKi8KLQlwdWJsaWMgdm9pZCByZWZyZXNoV29ya3NwYWNlKCkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlJV29ya3NwYWNlUm9vdCB3c1Jvb3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpOwotCQlJUHJvamVjdFtdIHByb2plY3RzID0gd3NSb290LmdldFByb2plY3RzKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgcHJvamVjdHMubGVuZ3RoOyBpKyspIHsKLQkJCXByb2plY3RzW2ldLnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQl9Ci0JCXdzUm9vdC5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX0lORklOSVRFLCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiBEZWxldGUgcHJvamVjdHMgY3JlYXRlZCAodW56aXBwZWQgYW5kIGltcG9ydGVkKSBieSB0aGlzIHV0aWxpdHkKLQkgKiAKLQkgKiBAdGhyb3dzIEV4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIGRlbGV0ZVByb2plY3RzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWZpbmFsIElQcm9qZWN0W10gcHJvamVjdHMgPSBnZXRDcmVhdGVkUHJvamVjdHMoKTsKLQkJV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uIGRlbGV0ZU9wID0gbmV3IFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbigpIHsKLQkJCXByb3RlY3RlZCB2b2lkIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9qZWN0cy5sZW5ndGg7IGkrKykgewotCQkJCQlwcm9qZWN0c1tpXS5jbGVhckhpc3RvcnkobnVsbCk7Ci0JCQkJCXByb2plY3RzW2ldLmNsb3NlKG51bGwpOwotCQkJCQlwcm9qZWN0c1tpXS5kZWxldGUodHJ1ZSwgdHJ1ZSwgbnVsbCk7Ci0JCQkJfQotCQkJCXJlZnJlc2hXb3Jrc3BhY2UoKTsKLQkJCX0KLQkJfTsKLQkJV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzID0gbmV3IFdvcmtzcGFjZVByb2dyZXNzTW9uaXRvcigpOwotCQlkZWxldGVPcC5ydW4ocHJvZ3Jlc3MpOwotCQkvLyBzYXZlcyB0aGUgbmV3IHdvcmtzcGFjZSBtZXRhZGF0YQotCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuc2F2ZSh0cnVlLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBkZWxldGVQcm9qZWN0KFN0cmluZyBwcm9qZWN0TmFtZSkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWZpbmFsIFN0cmluZyBuYW1lID0gcHJvamVjdE5hbWU7Ci0JCUlXb3Jrc3BhY2VSb290IHdzUm9vdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCk7Ci0JCWZpbmFsIElQcm9qZWN0IHByb2ogPSB3c1Jvb3QuZ2V0UHJvamVjdChuYW1lKTsKLQkJV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uIGRlbGV0ZU9wID0gbmV3IFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbihwcm9qKSB7Ci0JCQlwcm90ZWN0ZWQgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQkJCS8vCQkJCUlXb3Jrc3BhY2VSb290IHdzUm9vdCA9Ci0JCQkJLy8gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLQkJCQkvLwkJCQlJUHJvamVjdCBwcm9qID0gd3NSb290LmdldFByb2plY3QobmFtZSk7Ci0JCQkJaWYgKHByb2ogIT0gbnVsbCAmJiBwcm9qLmV4aXN0cygpKSB7Ci0JCQkJCXByb2ouY2xlYXJIaXN0b3J5KG51bGwpOwotCQkJCQkvL3Byb2ouY2xvc2UobnVsbCk7Ci0JCQkJCXByb2oucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7Ci0JCQkJCXRyeSB7Ci0JCQkJCQlwcm9qLmRlbGV0ZSh0cnVlLCB0cnVlLCBudWxsKTsKLQkJCQkJfQotCQkJCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCQkJCS8vIGp1c3QgdHJ5IGFnYWluIChub3Qgc3VyZSB3aHkgdGhleSBhcmUgbm90IGJlaW5nCi0JCQkJCQkvLyBkZWxldGVkKQotCQkJCQkJcHJvai5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX0lORklOSVRFLCBudWxsKTsKLQkJCQkJCXByb2ouZGVsZXRlKHRydWUsIHRydWUsIG51bGwpOwotCQkJCQl9Ci0JCQkJCS8vcHJvaiA9IG51bGw7Ci0JCQkJfQotCQkJCXJlZnJlc2hXb3Jrc3BhY2UoKTsKLQkJCX0KLQkJfTsKLQkJV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzID0gbmV3IFdvcmtzcGFjZVByb2dyZXNzTW9uaXRvcigpOwotCQlkZWxldGVPcC5ydW4ocHJvZ3Jlc3MpOwotCQkvLyBzYXZlcyB0aGUgbmV3IHdvcmtzcGFjZSBtZXRhZGF0YQotCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuc2F2ZSh0cnVlLCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiBAcmV0dXJuIElQcm9qZWN0cyB0aGF0IHdlcmUgdW56aXBwZWQgYW5kIGltcG9ydGVkIGludG8gdGhlIHdvcmtzcGFjZSBieQotCSAqICAgICAgICAgdGhpcyB1dGlsaXR5Ci0JICovCi0JcHVibGljIElQcm9qZWN0W10gZ2V0Q3JlYXRlZFByb2plY3RzKCkgewotCQlJV29ya3NwYWNlUm9vdCB3c1Jvb3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpOwotCQlTdHJpbmdbXSBwcm9qZWN0TmFtZXMgPSAoU3RyaW5nW10pIGZDcmVhdGVkUHJvamVjdHMudG9BcnJheShuZXcgU3RyaW5nW2ZDcmVhdGVkUHJvamVjdHMuc2l6ZSgpXSk7Ci0JCUlQcm9qZWN0W10gcHJvamVjdHMgPSBuZXcgSVByb2plY3RbcHJvamVjdE5hbWVzLmxlbmd0aF07Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgcHJvamVjdE5hbWVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlwcm9qZWN0c1tpXSA9IHdzUm9vdC5nZXRQcm9qZWN0KHByb2plY3ROYW1lc1tpXSk7Ci0JCX0KLQkJcmV0dXJuIHByb2plY3RzOwotCX0KLQotCXB1YmxpYyB2b2lkIGluaXRKYXZhUHJvamVjdChTdHJpbmcgcHJvak5hbWUpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJLy8gcmVzeW5jaAotCQlyZWZyZXNoV29ya3NwYWNlKCk7Ci0JCS8vY2hhbmdlIHByZXJlcXMgdG8gZ2V0IHRoaXMgZnVuY3Rpb25hbGl0eSBiYWNrIGluCi0JCUlQcm9qZWN0IHByb2ogPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QocHJvak5hbWUpOwotCQlpZiAoIXByb2ouZXhpc3RzKCkpIHsKLQkJCXByb2ouY3JlYXRlKG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQl9Ci0JCS8vIG5lZWQgdG8gYWRkIGphdmEgbmF0dXJlLCBvciBlbHNlIHByb2plY3Qgd29uJ3QgImV4aXN0KCkiIGluIHRoZQotCQkvLyBqYXZhCi0JCS8vIGVsZW1lbnQgc2Vuc2UKLQkJU3RyaW5nW10gbmF0dXJlSWRzID0geyJvcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlIn07Ci0JCWlmICghcHJvai5pc09wZW4oKSkgewotCQkJcHJvai5vcGVuKG51bGwpOwotCQl9Ci0JCUlQcm9qZWN0RGVzY3JpcHRpb24gZGVzYyA9IHByb2ouZ2V0RGVzY3JpcHRpb24oKTsKLQkJZGVzYy5zZXROYXR1cmVJZHMobmF0dXJlSWRzKTsKLQkJcHJvai5zZXREZXNjcmlwdGlvbihkZXNjLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgY3JlYXRlUHJvamVjdChJUHJvamVjdCBwcm9qZWN0LCBJUGF0aCBsb2NhdGlvblBhdGgsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlpZiAobW9uaXRvciA9PSBudWxsKSB7Ci0JCQltb25pdG9yID0gbmV3IFdvcmtzcGFjZVByb2dyZXNzTW9uaXRvcigpOwotCQl9Ci0JCW1vbml0b3IuYmVnaW5UYXNrKCJjcmVhdGluZyB0ZXN0IHByb2plY3QiLCAxMCk7Ci0JCS8vIGNyZWF0ZSB0aGUgcHJvamVjdAotCQl0cnkgewotCQkJaWYgKCFwcm9qZWN0LmV4aXN0cygpKSB7Ci0JCQkJSVByb2plY3REZXNjcmlwdGlvbiBkZXNjID0gcHJvamVjdC5nZXRXb3Jrc3BhY2UoKS5uZXdQcm9qZWN0RGVzY3JpcHRpb24ocHJvamVjdC5nZXROYW1lKCkpOwotCQkJCWlmIChQbGF0Zm9ybS5nZXRMb2NhdGlvbigpLmVxdWFscyhsb2NhdGlvblBhdGgpKSB7Ci0JCQkJCWxvY2F0aW9uUGF0aCA9IG51bGw7Ci0JCQkJfQotCQkJCWRlc2Muc2V0TG9jYXRpb24obG9jYXRpb25QYXRoKTsKLQkJCQlwcm9qZWN0LmNyZWF0ZShkZXNjLCBtb25pdG9yKTsKLQkJCQltb25pdG9yID0gbnVsbDsKLQkJCX0KLQkJCWlmICghcHJvamVjdC5pc09wZW4oKSkgewotCQkJCXByb2plY3Qub3Blbihtb25pdG9yKTsKLQkJCQltb25pdG9yID0gbnVsbDsKLQkJCX0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb25pdG9yICE9IG51bGwpIHsKLQkJCQltb25pdG9yLmRvbmUoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIGRlbGV0ZVByb2plY3QoSVByb2plY3QgZlByb2plY3QpIHRocm93cyBJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uLCBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0JCWZpbmFsIElQcm9qZWN0IHByb2ogPSBmUHJvamVjdDsKLQkJV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uIGRlbGV0ZU9wID0gbmV3IFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbihwcm9qKSB7Ci0JCQlwcm90ZWN0ZWQgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQkJCS8vCQkJCUlXb3Jrc3BhY2VSb290IHdzUm9vdCA9Ci0JCQkJLy8gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLQkJCQkvLwkJCQlJUHJvamVjdCBwcm9qID0gd3NSb290LmdldFByb2plY3QobmFtZSk7Ci0JCQkJaWYgKHByb2ogIT0gbnVsbCAmJiBwcm9qLmV4aXN0cygpKSB7Ci0JCQkJCXByb2ouY2xlYXJIaXN0b3J5KG51bGwpOwotCQkJCQkvL3Byb2ouY2xvc2UobnVsbCk7Ci0JCQkJCXByb2oucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7Ci0JCQkJCXByb2ouZGVsZXRlKHRydWUsIHRydWUsIG51bGwpOwotCQkJCQkvL3Byb2ogPSBudWxsOwotCQkJCX0KLQkJCQlyZWZyZXNoV29ya3NwYWNlKCk7Ci0JCQl9Ci0JCX07Ci0JCS8vV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzID0gbmV3IFdvcmtzcGFjZVByb2dyZXNzTW9uaXRvcigpOwotCQlkZWxldGVPcC5ydW4obnVsbCk7Ci0JCS8vIHNhdmVzIHRoZSBuZXcgd29ya3NwYWNlIG1ldGFkYXRhCi0JCS8vUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnNhdmUodHJ1ZSwgbnVsbCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdXRpbC9TdHJpbmdDb21wYXJlVXRpbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdXRpbC9TdHJpbmdDb21wYXJlVXRpbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjU5YzgyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3V0aWwvU3RyaW5nQ29tcGFyZVV0aWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMudXRpbDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdSZWFkZXI7Ci0KLXB1YmxpYyBjbGFzcyBTdHJpbmdDb21wYXJlVXRpbCB7Ci0KLQlwdWJsaWMgYm9vbGVhbiBlcXVhbHNJZ25vcmVMaW5lU2VwZXJhdG9yKFN0cmluZyBzdHJpbmcxLCBTdHJpbmcgc3RyaW5nMikgewotCi0JCWlmIChzdHJpbmcxID09IG51bGwpCi0JCQlyZXR1cm4gZmFsc2U7Ci0JCWlmIChzdHJpbmcyID09IG51bGwpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJU3RyaW5nUmVhZGVyIHMxUmVhZGVyID0gbmV3IFN0cmluZ1JlYWRlcihzdHJpbmcxKTsKLQkJU3RyaW5nUmVhZGVyIHMyUmVhZGVyID0gbmV3IFN0cmluZ1JlYWRlcihzdHJpbmcyKTsKLQotCQkvLyBhc3N1bWUgdHJ1ZSB1bmxlc3MgZmluZCBldmlkZW5jZSB0byB0aGUgY29udHJhcnkKLQkJYm9vbGVhbiByZXN1bHQgPSB0cnVlOwotCQlpbnQgczFDaGFyID0gLTE7Ci0JCWludCBzMkNoYXIgPSAtMTsKLQkJZG8gewotCi0JCQlzMUNoYXIgPSBnZXROZXh0Q2hhcihzMVJlYWRlcik7Ci0KLQkJCXMyQ2hhciA9IGdldE5leHRDaGFyKHMyUmVhZGVyKTsKLQotCQkJaWYgKHMxQ2hhciAhPSBzMkNoYXIpIHsKLQkJCQlyZXN1bHQgPSBmYWxzZTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQl3aGlsZSAoczFDaGFyICE9IC0xICYmIHMyQ2hhciAhPSAtMSk7Ci0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQkvKioKLQkgKiBNZXRob2QgZ2V0TmV4dENoYXIuCi0JICogQHBhcmFtIHMxUmVhZGVyCi0JICogQHJldHVybiBjaGFyCi0JICovCi0JcHJpdmF0ZSBpbnQgZ2V0TmV4dENoYXIoU3RyaW5nUmVhZGVyIHJlYWRlcikgewotCQlpbnQgbmV4dENoYXIgPSAtMTsKLQkJdHJ5IHsKLQkJCW5leHRDaGFyID0gcmVhZGVyLnJlYWQoKTsKLQkJCXdoaWxlIChpc0VPTChuZXh0Q2hhcikpIHsKLQkJCQluZXh0Q2hhciA9IHJlYWRlci5yZWFkKCk7Ci0JCQl9Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJcmV0dXJuIG5leHRDaGFyOwotCX0KLQotCXByaXZhdGUgYm9vbGVhbiBpc0VPTChpbnQgYUNoYXIpIHsKLQkJcmV0dXJuIChhQ2hhciA9PSAnXG4nIHx8IGFDaGFyID09ICdccicpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdXRpbC9UaW1lc3RhbXBVdGlsLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy91dGlsL1RpbWVzdGFtcFV0aWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGE0NzFkYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy91dGlsL1RpbWVzdGFtcFV0aWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMudXRpbDsKLQotaW1wb3J0IGphdmEudXRpbC5DYWxlbmRhcjsKLWltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKLQotaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuRGF0ZUZvcm1hdDsKLWltcG9ydCBjb20uaWJtLmljdS50ZXh0LlNpbXBsZURhdGVGb3JtYXQ7Ci0KLS8qKgotICogQGF1dGhvciBkYXZpZHcKLSAqCi0gKiBUaGlzIGNsYXNzIHByb3ZpZGVzIG9uZSB0aW1lc3RhbXAgcGVyIFZNIHJ1bi4KLSAqIChUZWNobmljYWxseSwgcGVyIGNsYXNzIGxvYWRpbmcuKQotICovCi1wdWJsaWMgY2xhc3MgVGltZXN0YW1wVXRpbCB7Ci0KLQlwcml2YXRlIHN0YXRpYyBEYXRlIHRpbWVzdGFtcCA9IG51bGw7Ci0JcHJpdmF0ZSBzdGF0aWMgRGF0ZUZvcm1hdCBzaG9ydEZvcm1hdCA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KCJ5eXl5Jy0nTU0nLSdkZCIpOwotCS8vCXByaXZhdGUgc3RhdGljIERhdGVGb3JtYXQgbG9uZ0Zvcm1hdCA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KCJ5eXl5Jy0nTU0nLSdkZCctJ2trJy0nbW0nLSdzcyIpOwotCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIG5vd1Nob3J0ID0gbnVsbDsKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIHRpbWVzdGFtcCgpIHsKLQotCQlpZiAoVGltZXN0YW1wVXRpbC5ub3dTaG9ydCA9PSBudWxsKSB7Ci0JCQlUaW1lc3RhbXBVdGlsLm5vd1Nob3J0ID0gc2hvcnRGb3JtYXQuZm9ybWF0KGVuc3VyZVRpbWVzdGFtcCgpKTsKLQkJfQotCQlyZXR1cm4gVGltZXN0YW1wVXRpbC5ub3dTaG9ydDsKLQl9Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIERhdGUgZW5zdXJlVGltZXN0YW1wKCkgewotCQkvLyBqdXN0IGNhbGN1bGF0ZSAndGltZXN0YW1wJyBvbmNlIHBlciBjbGFzcyBsb2FkaW5nLCAKLQkJLy8gc28gdGhpcyAndGltZXN0YW1wJyByZW1haW5zIHRoZSBzYW1lIGR1cmluZyAKLQkJLy8gZW50aXJlIHJ1bi4gCi0JCWlmIChUaW1lc3RhbXBVdGlsLnRpbWVzdGFtcCA9PSBudWxsKSB7Ci0JCQlDYWxlbmRhciBjYWxlbmRhciA9IENhbGVuZGFyLmdldEluc3RhbmNlKCk7Ci0JCQlUaW1lc3RhbXBVdGlsLnRpbWVzdGFtcCA9IGNhbGVuZGFyLmdldFRpbWUoKTsKLQkJfQotCQlyZXR1cm4gVGltZXN0YW1wVXRpbC50aW1lc3RhbXA7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvdGVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwMjFhYWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3Rlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci0KLTxwcm9qZWN0Ci0gICAgbmFtZT0idGVzdHN1aXRlIgotICAgIGRlZmF1bHQ9InJ1biIKLSAgICBiYXNlZGlyPSIuIj4KLSAgICAKLSAgICA8IS0tIFRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyBzaG91bGQgYmUgcGFzc2VkIGludG8gdGhpcyBzY3JpcHQgLS0+Ci0gICAgPCEtLSAke2VjbGlwc2UtaG9tZX0gICAtLT4KLSAgICA8IS0tICR7YnVpbGREaXJlY3Rvcnl9ICAtLT4KLSAgICA8IS0tICR7YnVpbGRMYWJlbH0gICAgICAgIC0tPgotCi0gICAgPCEtLSBzaG91bGQgYmUgbGl0dGxlIG5lZWQgdG8gY2hhbmdlIHdoYXQncyBhYm92ZSAgLS0+Ci0gICAgCi0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9InBsdWdpbi1uYW1lIgotICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJjbGFzc25hbWUiCi0gICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuU1NFTW9kZWxYTUxUZXN0U3VpdGUiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9InRlc3RUeXBlIgotICAgICAgICB2YWx1ZT0iY29yZS10ZXN0IiAvPgotCi0gICAgPCEtLSBzaG91bGQgYmUgbGl0dGxlIG5lZWQgdG8gY2hhbmdlIHdoYXQncyBiZWxvdyAtLT4KLQotICAgIDxlY2hvIG1lc3NhZ2U9ImJhc2VkaXI6ICR7YmFzZWRpcn0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iZWNsaXBzZS1ob21lOiAke2VjbGlwc2UtaG9tZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iYnVpbGREaXJlY3Rvcnk6ICR7YnVpbGREaXJlY3Rvcnl9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9InBsdWdpbi1uYW1lOiAke3BsdWdpbi1uYW1lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJjbGFzc25hbWU6ICR7Y2xhc3NuYW1lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJ0ZXN0VHlwZSAke3Rlc3RUeXBlfSIgLz4KLQotCi0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9ImxpYnJhcnktZmlsZSIKLSAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4xLjAvbGlicmFyeS54bWwiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9IndvcmtzcGFjZSIKLSAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9qdW5pdHdvcmtzcGFjZXMvJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgIAotICAgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4KLSAgICA8IS0tIGFsbCB0ZXN0cyB0aGF0IGFyZSB0byBiZSBydW4uIEluaXRpYWxpemF0aW9uIGZvciBpbmRpdmlkdWFsIHRlc3RzIC0tPgotICAgIDwhLS0gc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIC0tPgotICAgIDx0YXJnZXQgbmFtZT0iaW5pdCI+Ci0gICAgICAgIDx0c3RhbXAgLz4KLSAgICAgICAgPGRlbGV0ZT4KLSAgICAgICAgICAgIDxmaWxlc2V0Ci0gICAgICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iCi0gICAgICAgICAgICAgICAgaW5jbHVkZXM9IiR7cGx1Z2luLW5hbWV9Lip4bWwiIC8+Ci0gICAgICAgIDwvZGVsZXRlPgotICAgICAgICA8IS0tIG1ha2UgZGlyZWN0b3J5LCBpbiBjYXNlIHBhdGggZG9lc24ndCBleGlzdCB5ZXQgLS0+Ci0gICAgICAgIDxta2RpciBkaXI9IiR7d29ya3NwYWNlfSIgLz4KLSAgICAgICAgPCEtLSAgYnV0IGRlbGV0ZSB0byBtYWtlIHN1cmUgZnJlc2ggY29udGVudHMtLT4KLSAgICAgICAgPGRlbGV0ZQotICAgICAgICAgICAgZGlyPSIke3dvcmtzcGFjZX0iCi0gICAgICAgICAgICBxdWlldD0idHJ1ZSIgLz4KLQotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9InN1aXRlIj4KLQotICAgICAgICA8YW50Ci0gICAgICAgICAgICB0YXJnZXQ9IiR7dGVzdFR5cGV9IgotICAgICAgICAgICAgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iZGF0YS1kaXIiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7d29ya3NwYWNlfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9InBsdWdpbi1uYW1lIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImNsYXNzbmFtZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtjbGFzc25hbWV9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0icGx1Z2luLXBhdGgiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICA8L2FudD4KLQotICAgICAgICA8Y29weQotICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIgotICAgICAgICAgICAgZmlsZT0iJHt3b3Jrc3BhY2V9Ly5tZXRhZGF0YS8ubG9nIgotICAgICAgICAgICAgdG9maWxlPSIke2J1aWxkRGlyZWN0b3J5fS8ke2J1aWxkTGFiZWx9L3Rlc3RSZXN1bHRzL2NvbnNvbGVsb2dzLyR7cGx1Z2luLW5hbWV9LmNvbnNvbGVsb2cudHh0IiAvPgotCi0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGNvZGUgdG8gY2xlYW51cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBhZnRlciAtLT4KLSAgICA8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+Ci0gICAgPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgotICAgIDx0YXJnZXQgbmFtZT0iY2xlYW51cCI+Ci0gICAgICAgIDwhLS0gdXN1YWxseSBubyBuZWVkIHRvIGRlbGV0ZSB3b3Jrc3BhY2UgdW50aWwgbmV4dCBydW4sIGFuZCBsZWF2aW5nIGl0IGFsbG93cyBpbnNwZWN0aW9uIC0tPgotICAgICAgICA8IS0tIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIiAvPiAtLT4KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4KLSAgICA8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+Ci0gICAgPHRhcmdldAotICAgICAgICBuYW1lPSJydW4iCi0gICAgICAgIGRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+Ci0gICAgICAgIDxhbnQKLSAgICAgICAgICAgIHRhcmdldD0iY29sbGVjdCIKLSAgICAgICAgICAgIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLSAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImluY2x1ZGVzIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfS4qeG1sIiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0ib3V0cHV0LWZpbGUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIgLz4KLSAgICAgICAgPC9hbnQ+Ci0gICAgPC90YXJnZXQ+Ci0KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvdGVzdGZpbGVzLnppcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy90ZXN0ZmlsZXMuemlwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwODRmMzMyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy90ZXN0ZmlsZXMuemlwCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NmM2MDI3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYy8iLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS40Ii8+Ci0JPGNsYXNzcGF0aGVudHJ5IHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIga2luZD0iY29uIj4KLQkJPGFjY2Vzc3J1bGVzPgotCQkJPGFjY2Vzc3J1bGUga2luZD0iYWNjZXNzaWJsZSIgcGF0dGVybj0ib3JnL2VjbGlwc2Uvd3N0LyoqIi8+Ci0JCTwvYWNjZXNzcnVsZXM+Ci0JPC9jbGFzc3BhdGhlbnRyeT4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy8uY3ZzaWdub3JlIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Nzk2OGJkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotYmluCi1idWlsZC54bWwKLXRlbXAuZm9sZGVyCi10ZXN0cy5qYXIKLWphdmFDb21waWxlci50ZXN0cy5qYXIuYXJncwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhYzM3MGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmc8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz48L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZhNWM5MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMDQgMDM6MzY6MzIgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1lbmNvZGluZy88cHJvamVjdD49SVNPLTg4NTktMQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZWM1NzUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI01vbiBBcHIgMTcgMDE6NDg6MzkgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1saW5lLnNlcGFyYXRvcj1cclxuCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZjdiYWM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotI1NhdCBBdWcgMTkgMTY6MzE6NDMgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmNsZWFuT3V0cHV0Rm9sZGVyPWNsZWFuCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmR1cGxpY2F0ZVJlc291cmNlVGFzaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmludmFsaWRDbGFzc3BhdGg9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLnJlc291cmNlQ29weUV4Y2x1c2lvbkZpbHRlcj0qLmxhdW5jaAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2lyY3VsYXJDbGFzc3BhdGg9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aC5leGNsdXNpb25QYXR0ZXJucz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGgubXVsdGlwbGVPdXRwdXRMb2NhdGlvbnM9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS40Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kb2MuY29tbWVudC5zdXBwb3J0PWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLm1heFByb2JsZW1QZXJVbml0PTEwMAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc0RlcHJlY2F0ZWRSZWY9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NOb3RWaXNpYmxlUmVmPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzVmlzaWJpbGl0eT1wcml2YXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzT3ZlcnJpZGluZz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNWaXNpYmlsaXR5PXB1YmxpYwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc092ZXJyaWRpbmc9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXByaXZhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5zYWZlVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMYWJlbD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wYXRpYmxlSkRLTGV2ZWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5pbmNvbXBsZXRlQ2xhc3NwYXRoPWVycm9yCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwMWM3YWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0jTW9uIEFwciAxNyAwMTo0ODozOSBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWludGVybmFsLmRlZmF1bHQuY29tcGxpYW5jZT1kZWZhdWx0Ci1vcmcuZWNsaXBzZS5qZHQudWkudGV4dC5jdXN0b21fY29kZV90ZW1wbGF0ZXM9PD94bWwgdmVyc2lvblw9IjEuMCIgZW5jb2RpbmdcPSJVVEYtOCI/PlxyXG48dGVtcGxhdGVzLz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1OTM2OGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjMyIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcuZW5hYmxlLnByb2plY3QucmVmYWN0b3JpbmcuaGlzdG9yeT1mYWxzZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYzUyMmJiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLSNNb24gQXByIDE3IDAyOjAxOjMzIEVEVCAyMDA2Ci1jb21waWxlcnMuaW5jb21wYXRpYmxlLWVudmlyb25tZW50PTAKLWNvbXBpbGVycy5wLmJ1aWxkPTAKLWNvbXBpbGVycy5wLmRlcHJlY2F0ZWQ9MQotY29tcGlsZXJzLnAuaWxsZWdhbC1hdHQtdmFsdWU9MAotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLm5vdC1leHRlcm5hbGl6ZWQtYXR0PTAKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MAotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTAKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnAudW51c2VkLWVsZW1lbnQtb3ItYXR0cmlidXRlPTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9MYXJnZU5vRW5jb2RpbmcuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvTGFyZ2VOb0VuY29kaW5nLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9MYXJnZU5vRW5jb2RpbmcuaHRtbAorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL0xhcmdlTm9uRGVmYXVsdC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9MYXJnZU5vbkRlZmF1bHQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL0xhcmdlTm9uRGVmYXVsdC5odG1sCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTNkNTc5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUuMAotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZwotQnVuZGxlLVZlcnNpb246IDEuMC4zMDAucXVhbGlmaWVyCi1CdW5kbGUtQ2xhc3NQYXRoOiB0ZXN0cy5qYXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcuVGVzdHNQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yLjAKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5wcmVmLAotIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcucHJvcGVydGllcywKLSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnJlYWQsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy51dGlsLAotIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcud3JpdGUsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy54bWwKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcywKLSBvcmcuanVuaXQ7YnVuZGxlLXZlcnNpb249IlszLjguMSw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLnVpLAotIG9yZy5lY2xpcHNlLnVpLndvcmtiZW5jaCwKLSBvcmcuZWNsaXBzZS51aS5pZGUsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUKLUJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5Ci1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvYWJvdXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE5OWRmMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQ1NTRhYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1iaW4uaW5jbHVkZXMgPSB0ZXN0cy5qYXIsXAotICAgICAgICAgICAgICAgdGVzdGZpbGVzLyxcCi0gICAgICAgICAgICAgICB0ZXN0ZmlsZXMuemlwLFwKLSAgICAgICAgICAgICAgIHRlc3QueG1sLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzCi1zb3VyY2UudGVzdHMuamFyID0gc3JjLwotb3V0cHV0LnRlc3RzLmphciA9IGJpbi8KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvb3V0cHV0RnJvbUxpc3RDaGFyc2V0cy9JQk0xNF8wMTI4LnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvb3V0cHV0RnJvbUxpc3RDaGFyc2V0cy9JQk0xNF8wMTI4LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWRmYjFkMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL291dHB1dEZyb21MaXN0Q2hhcnNldHMvSUJNMTRfMDEyOC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw4NTcgKzAsMCBAQAotCi1DdXJyZW50IExvY2FsZTogZW5fVVMKLQotSlJFIHZlcnNpb246IEoyUkUgMS40LjIgSUJNIFdpbmRvd3MgMzIgYnVpbGQgY25kZXYtMjAwNDAxMjggKEpJVCBlbmFibGVkOiBqaXRjKQotLS0gbGlzdGluZyBwcm9wZXJ0aWVzIC0tCi1qYXZhLmFzc2lzdGl2ZT1PTgotamF2YS5ydW50aW1lLm5hbWU9SmF2YShUTSkgMiBSdW50aW1lIEVudmlyb25tZW50LCBTdGFuZC4uLgotc3VuLmJvb3QubGlicmFyeS5wYXRoPUQ6XGJ1aWxkc1xEYWlseVx3c3diLVNESy1JMjAwNDAyMjYtd2kuLi4KLWphdmEudm0udmVyc2lvbj0xLjQuMgotamF2YS52bS52ZW5kb3I9SUJNIENvcnBvcmF0aW9uCi1qYXZhLnZlbmRvci51cmw9aHR0cDovL3d3dy5pYm0uY29tLwotcGF0aC5zZXBhcmF0b3I9OwotamF2YS52bS5uYW1lPUNsYXNzaWMgVk0KLWZpbGUuZW5jb2RpbmcucGtnPXN1bi5pbwotdXNlci5jb3VudHJ5PVVTCi1zdW4ub3MucGF0Y2gubGV2ZWw9U2VydmljZSBQYWNrIDEKLWphdmEudm0uc3BlY2lmaWNhdGlvbi5uYW1lPUphdmEgVmlydHVhbCBNYWNoaW5lIFNwZWNpZmljYXRpb24KLXVzZXIuZGlyPUQ6XGJ1aWxkc1xEYWlseVxlY2xpcHNlLVNESy1JMjAwNDAzMDQuLi4KLWphdmEucnVudGltZS52ZXJzaW9uPTEuNC4yCi1qYXZhLmZ1bGx2ZXJzaW9uPUoyUkUgMS40LjIgSUJNIFdpbmRvd3MgMzIgYnVpbGQgY25kZXYuLi4KLWphdmEuYXd0LmdyYXBoaWNzZW52PXN1bi5hd3QuV2luMzJHcmFwaGljc0Vudmlyb25tZW50Ci1qYXZhLmVuZG9yc2VkLmRpcnM9RDpcYnVpbGRzXERhaWx5XHdzd2ItU0RLLUkyMDA0MDIyNi13aS4uLgotb3MuYXJjaD14ODYKLWphdmEuaW8udG1wZGlyPUM6XERPQ1VNRX4xXERBVklEV34xLkRNV1xMT0NBTFN+MVxUZW1wXAotbGluZS5zZXBhcmF0b3I9Ci0KLWphdmEudm0uc3BlY2lmaWNhdGlvbi52ZW5kb3I9U3VuIE1pY3Jvc3lzdGVtcyBJbmMuCi11c2VyLnZhcmlhbnQ9Ci1qYXZhLmF3dC5mb250cz0KLW9zLm5hbWU9V2luZG93cyBYUAotc3VuLmphdmEyZC5mb250cGF0aD0KLWphdmEubGlicmFyeS5wYXRoPUQ6XGJ1aWxkc1xEYWlseVx3c3diLVNESy1JMjAwNDAyMjYtd2kuLi4KLWphdmEuc3BlY2lmaWNhdGlvbi5uYW1lPUphdmEgUGxhdGZvcm0gQVBJIFNwZWNpZmljYXRpb24KLWphdmEuY2xhc3MudmVyc2lvbj00OC4wCi1pYm0uc3lzdGVtLmVuY29kaW5nPUNwMTI1MgotamF2YS51dGlsLnByZWZzLlByZWZlcmVuY2VzRmFjdG9yeT1qYXZhLnV0aWwucHJlZnMuV2luZG93c1ByZWZlcmVuY2VzRmFjLi4uCi1pbnZva2VkdmlhamF2YT0KLW9zLnZlcnNpb249NS4xCi11c2VyLmhvbWU9QzpcRG9jdW1lbnRzIGFuZCBTZXR0aW5nc1xkYXZpZHcuRE1XMlQyMwotdXNlci50aW1lem9uZT0KLWphdmEuYXd0LnByaW50ZXJqb2I9c3VuLmF3dC53aW5kb3dzLldQcmludGVySm9iCi1qYXZhLnNwZWNpZmljYXRpb24udmVyc2lvbj0xLjQKLWZpbGUuZW5jb2Rpbmc9Q3AxMjUyCi11c2VyLm5hbWU9ZGF2aWR3Ci1qYXZhLmNsYXNzLnBhdGg9RDpcYnVpbGRzXERhaWx5XGVjbGlwc2UtU0RLLUkyMDA0MDMwNC4uLgotamF2YS52bS5zcGVjaWZpY2F0aW9uLnZlcnNpb249MS4wCi1zdW4uYXJjaC5kYXRhLm1vZGVsPTMyCi1qYXZhLmhvbWU9RDpcYnVpbGRzXERhaWx5XHdzd2ItU0RLLUkyMDA0MDIyNi13aS4uLgotamF2YS5zcGVjaWZpY2F0aW9uLnZlbmRvcj1TdW4gTWljcm9zeXN0ZW1zIEluYy4KLXVzZXIubGFuZ3VhZ2U9ZW4KLWF3dC50b29sa2l0PXN1bi5hd3Qud2luZG93cy5XVG9vbGtpdAotamF2YS52bS5pbmZvPUoyUkUgMS40LjIgSUJNIFdpbmRvd3MgMzIgYnVpbGQgY25kZXYuLi4KLWphdmEudmVyc2lvbj0xLjQuMgotamF2YS5leHQuZGlycz1EOlxidWlsZHNcRGFpbHlcd3N3Yi1TREstSTIwMDQwMjI2LXdpLi4uCi1zdW4uYm9vdC5jbGFzcy5wYXRoPUQ6XGJ1aWxkc1xEYWlseVx3c3diLVNESy1JMjAwNDAyMjYtd2kuLi4KLWphdmEudmVuZG9yPUlCTSBDb3Jwb3JhdGlvbgotZmlsZS5zZXBhcmF0b3I9XAotamF2YS52ZW5kb3IudXJsLmJ1Zz0KLWphdmEuY29tcGlsZXI9aml0Ywotc3VuLmlvLnVuaWNvZGUuZW5jb2Rpbmc9VW5pY29kZUxpdHRsZQotQXZhaWxhYmxlIExvY2FsZXMKLWFyCi1hcl9BRQotYXJfQkgKLWFyX0RaCi1hcl9FRwotYXJfSVEKLWFyX0pPCi1hcl9LVwotYXJfTEIKLWFyX0xZCi1hcl9NQQotYXJfT00KLWFyX1FBCi1hcl9TQQotYXJfU0QKLWFyX1NZCi1hcl9UTgotYXJfWUUKLWJlCi1iZV9CWQotYmcKLWJnX0JHCi1ibl9JTgotY2EKLWNhX0VTCi1jYV9FU19QUkVFVVJPCi1jcwotY3NfQ1oKLWRhCi1kYV9ESwotZGFfREtfRVVSTwotZGUKLWRlX0FUCi1kZV9BVF9QUkVFVVJPCi1kZV9DSAotZGVfREUKLWRlX0RFX1BSRUVVUk8KLWRlX0xVCi1kZV9MVV9QUkVFVVJPCi1lbAotZWxfR1IKLWVsX0dSX1BSRUVVUk8KLWVuCi1lbl9BVQotZW5fQkUKLWVuX0JFX1BSRUVVUk8KLWVuX0NBCi1lbl9HQgotZW5fR0JfRVVSTwotZW5fSEsKLWVuX0lFCi1lbl9JRV9QUkVFVVJPCi1lbl9JTgotZW5fTloKLWVuX1BICi1lbl9TRwotZW5fVVMKLWVuX1pBCi1lcwotZXNfQVIKLWVzX0JPCi1lc19DTAotZXNfQ08KLWVzX0NSCi1lc19ETwotZXNfRUMKLWVzX0VTCi1lc19FU19QUkVFVVJPCi1lc19HVAotZXNfSE4KLWVzX01YCi1lc19OSQotZXNfUEEKLWVzX1BFCi1lc19QUgotZXNfUFkKLWVzX1NWCi1lc19VUwotZXNfVVkKLWVzX1ZFCi1ldAotZXRfRUUKLWZpCi1maV9GSQotZmlfRklfUFJFRVVSTwotZnIKLWZyX0JFCi1mcl9CRV9QUkVFVVJPCi1mcl9DQQotZnJfQ0gKLWZyX0ZSCi1mcl9GUl9QUkVFVVJPCi1mcl9MVQotZnJfTFVfUFJFRVVSTwotZ3UKLWd1X0lOCi1oaQotaGlfSU4KLWhyCi1ocl9IUgotaHUKLWh1X0hVCi1pbgotaW5fSUQKLWlzCi1pc19JUwotaXQKLWl0X0NICi1pdF9JVAotaXRfSVRfUFJFRVVSTwotaXcKLWl3X0lMCi1qYQotamFfSlAKLWtrCi1ra19LWgota24KLWtuX0lOCi1rbwota29rX0lOCi1rb19LUgotbHQKLWx0X0xUCi1sdgotbHZfTFYKLW1rCi1ta19NSwotbWxfSU4KLW1yCi1tcl9JTgotbXMKLW1zX01ZCi1uYl9OTwotbmwKLW5sX0JFCi1ubF9CRV9QUkVFVVJPCi1ubF9OTAotbmxfTkxfUFJFRVVSTwotbm8KLW5vX05PCi1ub19OT19OWQotb3JfSU4KLXBhCi1wYV9JTgotcGwKLXBsX1BMCi1wdAotcHRfQlIKLXB0X1BUCi1wdF9QVF9QUkVFVVJPCi1ybwotcm9fUk8KLXJ1Ci1ydV9SVQotc2EKLXNhX0lOCi1zaAotc2hfWVUKLXNrCi1za19TSwotc2wKLXNsX1NJCi1zcQotc3FfQUwKLXNyCi1zcl9ZVQotc3YKLXN2X1NFCi1zdl9TRV9FVVJPCi10YQotdGFfSU4KLXRlCi10ZV9JTgotdGgKLXRoX1RICi10aF9USF9USAotdHIKLXRyX1RSCi11awotdWtfVUEKLXZpCi12aV9WTgotemgKLXpoX0NOCi16aF9DTl9ISwotemhfSEsKLXpoX1NHCi16aF9UVwotZmlsZS5lbmNvZGluZy5wa2c6IHN1bi5pbwotZmlsZS5lbmNvZGluZzogQ3AxMjUyCi0KLQotQXZhaWxhYmxlIENoYXJzZXRzCi0xLiAgQ2hhcnNldG5hbWU6IEJpZzUKLQlkaXNwbGF5TmFtZTogQmlnNTogUEMgVGFpd2FuIEJpZyA1Ci0JYWxpYXNlczogW2JpZzUsIEJpZzUtSEtTQ1NdCi0yLiAgQ2hhcnNldG5hbWU6IENFU1UtOAotCWRpc3BsYXlOYW1lOiBDRVNVLTg6IFVuaWNvZGUgVVRGLTggKHdpdGhvdXQgc3Vycm9nYXRlcykKLQlhbGlhc2VzOiBbQ0VTVThdCi0zLiAgQ2hhcnNldG5hbWU6IENPTVBPVU5EX1RFWFQKLQlkaXNwbGF5TmFtZTogQ09NUE9VTkRfVEVYVDogWDExIENvbXBvdW5kIFRleHQKLQlhbGlhc2VzOiBbeC1jb21wb3VuZC10ZXh0LCB4MTEtY29tcG91bmQtdGV4dF0KLTQuICBDaGFyc2V0bmFtZTogRVVDLUNOCi0JZGlzcGxheU5hbWU6IEVVQy1DTjogRVVDIENoaW5hCi0JYWxpYXNlczogW2V1Y19jbiwgZXVjY24sIGlibS1ldWNjbl0KLTUuICBDaGFyc2V0bmFtZTogRVVDLUpQCi0JZGlzcGxheU5hbWU6IEVVQy1KUDogRVVDIEphcGFuCi0JYWxpYXNlczogW2V1Yy1qcC1saW51eCwgeC1ldWMtanAsIHgtZXVjanAsIGV1Y19qcF9saW51eCwgZXVjanAsIGV1Y19qcF0KLTYuICBDaGFyc2V0bmFtZTogRVVDLUtSCi0JZGlzcGxheU5hbWU6IEVVQy1LUjogRVVDIEtvcmVhCi0JYWxpYXNlczogWzU2MDEsIGtzYzU2MDFfMTk4Nywga3NjXzU2MDEsIGlibS1ldWNrciwga3NjNTYwMS0xOTg3LCBpYm0tOTcwLCBldWNfa3IsIENwOTcwLCBrc19jXzU2MDEtMTk4NywgZXVja3JdCi03LiAgQ2hhcnNldG5hbWU6IEVVQy1UVwotCWRpc3BsYXlOYW1lOiBFVUMtVFc6IEVVQyBUYWl3YW4KLQlhbGlhc2VzOiBbZXVjX3R3LCBjbnMxMTY0MywgZXVjdHddCi04LiAgQ2hhcnNldG5hbWU6IEdCMTgwMzAKLQlkaXNwbGF5TmFtZTogR0IxODAzMDogUEMgQ2hpbmEgR0IxODAzMAotCWFsaWFzZXM6IFt3aW5kb3dzLTU0OTM2LCBpYm0tMTM5MiwgZ2IxODAzMC0yMDAwXQotOS4gIENoYXJzZXRuYW1lOiBHQjIzMTIKLQlkaXNwbGF5TmFtZTogR0IyMzEyCi0JYWxpYXNlczogW2diMjMxMi04MCwgZ2IyMzEyLTE5ODBdCi0xMC4gIENoYXJzZXRuYW1lOiBHQksKLQlkaXNwbGF5TmFtZTogR0JLOiBQQyBDaGluYSBHQksKLQlhbGlhc2VzOiBbR0JLXQotMTEuICBDaGFyc2V0bmFtZTogaHAtcm9tYW44Ci0JZGlzcGxheU5hbWU6IGhwLXJvbWFuODogSFAgUm9tYW4gOAotCWFsaWFzZXM6IFtDcDEwNTEsIGlibS0xMDUxLCByb21hbjgsIHI4XQotMTIuICBDaGFyc2V0bmFtZTogSUJNLTAzNwotCWRpc3BsYXlOYW1lOiBJQk0tMDM3OiBFQkNESUMgVW5pdGVkIFN0YXRlcwotCWFsaWFzZXM6IFtpYm0tMzddCi0xMy4gIENoYXJzZXRuYW1lOiBJQk0tMTAwNgotCWRpc3BsYXlOYW1lOiBJQk0tMTAwNjogSVNPIFVyZHUKLQlhbGlhc2VzOiBbaWJtMTAwNiwgQ3AxMDA2XQotMTQuICBDaGFyc2V0bmFtZTogSUJNLTEwMjUKLQlkaXNwbGF5TmFtZTogSUJNLTEwMjU6IEVCQ0RJQyBDeXJpbGxpYwotCWFsaWFzZXM6IFtpYm0xMDI1LCBDcDEwMjVdCi0xNS4gIENoYXJzZXRuYW1lOiBJQk0tMTAyNgotCWRpc3BsYXlOYW1lOiBJQk0tMTAyNjogRUJDRElDIExhdGluIDUgKFR1cmtleSkKLQlhbGlhc2VzOiBbQ3AxMDI2LCBpYm0xMDI2XQotMTYuICBDaGFyc2V0bmFtZTogSUJNLTEwMjcKLQlkaXNwbGF5TmFtZTogSUJNLTEwMjc6IEVCQ0RJQyBTQkNTIEphcGFuCi0JYWxpYXNlczogW2libTEwMjcsIENwMTAyN10KLTE3LiAgQ2hhcnNldG5hbWU6IElCTS0xMDQxCi0JZGlzcGxheU5hbWU6IElCTS0xMDQxOiBQQyBTQkNTLW9ubHkgSmFwYW4KLQlhbGlhc2VzOiBbQ3AxMDQxLCBpYm0xMDQxXQotMTguICBDaGFyc2V0bmFtZTogSUJNLTEwNDMKLQlkaXNwbGF5TmFtZTogSUJNLTEwNDM6IFBDIFNCQ1Mtb25seSBUYWl3YW4KLQlhbGlhc2VzOiBbQ3AxMDQzLCBpYm0xMDQzXQotMTkuICBDaGFyc2V0bmFtZTogSUJNLTEwNDYKLQlkaXNwbGF5TmFtZTogSUJNLTEwNDY6IEVCQ0RJQyBBcmFiaWMKLQlhbGlhc2VzOiBbaWJtMTA0NiwgQ3AxMDQ2XQotMjAuICBDaGFyc2V0bmFtZTogSUJNLTEwNDZTCi0JZGlzcGxheU5hbWU6IElCTS0xMDQ2UzogRUJDRElDIEFyYWJpYyAoc2hhcGVkKQotCWFsaWFzZXM6IFtDcDEwNDZTLCBpYm0xMDQ2U10KLTIxLiAgQ2hhcnNldG5hbWU6IElCTS0xMDQ3Ci0JZGlzcGxheU5hbWU6IElCTS0xMDQ3OiBFQkNESUMgT3BlbiBFZGl0aW9uCi0JYWxpYXNlczogW0NwMTA0NywgaWJtMTA0N10KLTIyLiAgQ2hhcnNldG5hbWU6IElCTS0xMDg4Ci0JZGlzcGxheU5hbWU6IElCTS0xMDg4OiBQQyBTQkNTLW9ubHkgS29yZWFuIEtTCi0JYWxpYXNlczogW0NwMTA4OCwgaWJtMTA4OF0KLTIzLiAgQ2hhcnNldG5hbWU6IElCTS0xMDk3Ci0JZGlzcGxheU5hbWU6IElCTS0xMDk3OiBFQkNESUMgRmFyc2kKLQlhbGlhc2VzOiBbQ3AxMDk3LCBpYm0xMDk3XQotMjQuICBDaGFyc2V0bmFtZTogSUJNLTEwOTgKLQlkaXNwbGF5TmFtZTogSUJNLTEwOTg6IElTTyBGYXJzaQotCWFsaWFzZXM6IFtDcDEwOTgsIGlibTEwOThdCi0yNS4gIENoYXJzZXRuYW1lOiBJQk0tMTExMgotCWRpc3BsYXlOYW1lOiBJQk0tMTExMjogRUJDRElDIEJhbHRpYwotCWFsaWFzZXM6IFtDcDExMTIsIGlibTExMTJdCi0yNi4gIENoYXJzZXRuYW1lOiBJQk0tMTExNAotCWRpc3BsYXlOYW1lOiBJQk0tMTExNDogUEMgU0JDUy1vbmx5IFRhaXdhbgotCWFsaWFzZXM6IFtDcDExMTQsIGlibTExMTRdCi0yNy4gIENoYXJzZXRuYW1lOiBJQk0tMTExNQotCWRpc3BsYXlOYW1lOiBJQk0tMTExNTogUEMgU0JDUy1vbmx5IENoaW5hCi0JYWxpYXNlczogW0NwMTExNSwgaWJtMTExNV0KLTI4LiAgQ2hhcnNldG5hbWU6IElCTS0xMTIyCi0JZGlzcGxheU5hbWU6IElCTS0xMTIyOiBFQkNESUMgRXN0b25pYQotCWFsaWFzZXM6IFtDcDExMjIsIGlibTExMjJdCi0yOS4gIENoYXJzZXRuYW1lOiBJQk0tMTEyMwotCWRpc3BsYXlOYW1lOiBJQk0tMTEyMzogRUJDRElDIFVrcmFpbmUKLQlhbGlhc2VzOiBbQ3AxMTIzLCBpYm0xMTIzXQotMzAuICBDaGFyc2V0bmFtZTogSUJNLTExMjQKLQlkaXNwbGF5TmFtZTogSUJNLTExMjQ6IFBDIFVrcmFpbmUKLQlhbGlhc2VzOiBbQ3AxMTI0LCBpYm0xMTI0XQotMzEuICBDaGFyc2V0bmFtZTogSUJNLTExNDAKLQlkaXNwbGF5TmFtZTogSUJNLTExNDA6IEVCQ0RJQyBVbml0ZWQgU3RhdGVzIChldXJvKQotCWFsaWFzZXM6IFtDcDExNDAsIGlibTExNDBdCi0zMi4gIENoYXJzZXRuYW1lOiBJQk0tMTE0MQotCWRpc3BsYXlOYW1lOiBJQk0tMTE0MTogRUJDRElDIEdlcm1hbnkgKGV1cm8pCi0JYWxpYXNlczogW0NwMTE0MSwgaWJtMTE0MV0KLTMzLiAgQ2hhcnNldG5hbWU6IElCTS0xMTQyCi0JZGlzcGxheU5hbWU6IElCTS0xMTQyOiBFQkNESUMgRGVubWFyaywgTm9yd2F5IChldXJvKQotCWFsaWFzZXM6IFtDcDExNDIsIGlibTExNDJdCi0zNC4gIENoYXJzZXRuYW1lOiBJQk0tMTE0MwotCWRpc3BsYXlOYW1lOiBJQk0tMTE0MzogRUJDRElDIEZpbmxhbmQsIFN3ZWRlbiAoZXVybykKLQlhbGlhc2VzOiBbaWJtMTE0MywgQ3AxMTQzXQotMzUuICBDaGFyc2V0bmFtZTogSUJNLTExNDQKLQlkaXNwbGF5TmFtZTogSUJNLTExNDQ6IEVCQ0RJQyBJdGFseSAoZXVybykKLQlhbGlhc2VzOiBbQ3AxMTQ0LCBpYm0xMTQ0XQotMzYuICBDaGFyc2V0bmFtZTogSUJNLTExNDUKLQlkaXNwbGF5TmFtZTogSUJNLTExNDU6IEVCQ0RJQyBTcGFpbiAoZXVybykKLQlhbGlhc2VzOiBbaWJtMTE0NSwgQ3AxMTQ1XQotMzcuICBDaGFyc2V0bmFtZTogSUJNLTExNDYKLQlkaXNwbGF5TmFtZTogSUJNLTExNDY6IEVCQ0RJQyBVSywgSXJlbGFuZCAoZXVybykKLQlhbGlhc2VzOiBbQ3AxMTQ2LCBpYm0xMTQ2XQotMzguICBDaGFyc2V0bmFtZTogSUJNLTExNDcKLQlkaXNwbGF5TmFtZTogSUJNLTExNDc6IEVCQ0RJQyBGcmFuY2UgKGV1cm8pCi0JYWxpYXNlczogW0NwMTE0NywgaWJtMTE0N10KLTM5LiAgQ2hhcnNldG5hbWU6IElCTS0xMTQ4Ci0JZGlzcGxheU5hbWU6IElCTS0xMTQ4OiBFQkNESUMgTXVsdGlsaW5ndWFsIChldXJvKQotCWFsaWFzZXM6IFtDcDExNDgsIGlibTExNDhdCi00MC4gIENoYXJzZXRuYW1lOiBJQk0tMTE0OQotCWRpc3BsYXlOYW1lOiBJQk0tMTE0OTogRUJDRElDIEljZWxhbmQKLQlhbGlhc2VzOiBbQ3AxMTQ5LCBpYm0xMTQ5XQotNDEuICBDaGFyc2V0bmFtZTogSUJNLTEzNTEKLQlkaXNwbGF5TmFtZTogSUJNLTEzNTE6IFBDIERCQ1Mtb25seSBKYXBhbgotCWFsaWFzZXM6IFtDcDEzNTEsIGlibTEzNTFdCi00Mi4gIENoYXJzZXRuYW1lOiBJQk0tMTM2MgotCWRpc3BsYXlOYW1lOiBJQk0tMTM2MjogUEMgREJDUy1vbmx5IEtvcmVhIEtTIGV4dGVuZGVkCi0JYWxpYXNlczogW0NwMTM2MiwgaWJtMTM2Ml0KLTQzLiAgQ2hhcnNldG5hbWU6IElCTS0xMzYzCi0JZGlzcGxheU5hbWU6IElCTS0xMzYzOiBQQyBLb3JlYSBLUyBleHRlbmRlZAotCWFsaWFzZXM6IFtDcDEzNjMsIGlibTEzNjNdCi00NC4gIENoYXJzZXRuYW1lOiBJQk0tMTM2M0MKLQlkaXNwbGF5TmFtZTogSUJNLTEzNjNDOiBQQyBLb3JlYSBLUyBleHRlbmRlZCAoc3ludGF4KQotCWFsaWFzZXM6IFtpYm0xMzYzQywgQ3AxMzYzQ10KLTQ1LiAgQ2hhcnNldG5hbWU6IElCTS0xMzY0Ci0JZGlzcGxheU5hbWU6IElCTS0xMzY0OiBFQkNESUMgS29yZWEgS1MgZXh0ZW5kZWQKLQlhbGlhc2VzOiBbaWJtMTM2NCwgQ3AxMzY0XQotNDYuICBDaGFyc2V0bmFtZTogSUJNLTEzNzAKLQlkaXNwbGF5TmFtZTogSUJNLTEzNzA6IFBDIFRhaXdhbiAoZXVybykKLQlhbGlhc2VzOiBbQ3AxMzcwLCBpYm0xMzcwXQotNDcuICBDaGFyc2V0bmFtZTogSUJNLTEzNzEKLQlkaXNwbGF5TmFtZTogSUJNLTEzNzE6IEVCQ0RJQyBUYWl3YW4gKGV1cm8pCi0JYWxpYXNlczogW0NwMTM3MSwgaWJtMTM3MV0KLTQ4LiAgQ2hhcnNldG5hbWU6IElCTS0xMzgwCi0JZGlzcGxheU5hbWU6IElCTS0xMzgwOiBQQyBEQkNTLW9ubHkgQ2hpbmEgR0IKLQlhbGlhc2VzOiBbaWJtMTM4MCwgQ3AxMzgwXQotNDkuICBDaGFyc2V0bmFtZTogSUJNLTEzODEKLQlkaXNwbGF5TmFtZTogSUJNLTEzODE6IFBDIENoaW5hIEdCCi0JYWxpYXNlczogW0NwMTM4MSwgaWJtMTM4MV0KLTUwLiAgQ2hhcnNldG5hbWU6IElCTS0xMzgyCi0JZGlzcGxheU5hbWU6IElCTS0xMzgyOiBFVUMgREJDUy1vbmx5IENoaW5hIEdCCi0JYWxpYXNlczogW2libTEzODIsIENwMTM4Ml0KLTUxLiAgQ2hhcnNldG5hbWU6IElCTS0xMzgzCi0JZGlzcGxheU5hbWU6IElCTS0xMzgzOiBFVUMgQ2hpbmEKLQlhbGlhc2VzOiBbQ3AxMzgzLCBpYm0xMzgzXQotNTIuICBDaGFyc2V0bmFtZTogSUJNLTEzODUKLQlkaXNwbGF5TmFtZTogSUJNLTEzODU6IFBDIERCQ1Mtb25seSBDaGluYSBHQksKLQlhbGlhc2VzOiBbQ3AxMzg1LCBpYm0xMzg1XQotNTMuICBDaGFyc2V0bmFtZTogSUJNLTEzODYKLQlkaXNwbGF5TmFtZTogSUJNLTEzODY6IFBDIENoaW5hIEdCSwotCWFsaWFzZXM6IFtDcDEzODYsIGlibTEzODZdCi01NC4gIENoYXJzZXRuYW1lOiBJQk0tMTM4OAotCWRpc3BsYXlOYW1lOiBJQk0tMTM4ODogRUJDRElDIENoaW5hIEdCSwotCWFsaWFzZXM6IFtpYm0xMzg4LCBDcDEzODhdCi01NS4gIENoYXJzZXRuYW1lOiBJQk0tMTM5MAotCWRpc3BsYXlOYW1lOiBJQk0tMTM5MDogRUJDRElDIEphcGFuIEthdGFrYW5hIChldXJvKQotCWFsaWFzZXM6IFtDcDEzOTAsIGlibTEzOTBdCi01Ni4gIENoYXJzZXRuYW1lOiBJQk0tMTM5OQotCWRpc3BsYXlOYW1lOiBJQk0tMTM5OTogRUJDRElDIEphcGFuIExhdGluIChldXJvKQotCWFsaWFzZXM6IFtDcDEzOTksIGlibTEzOTldCi01Ny4gIENoYXJzZXRuYW1lOiBJQk0tMjczCi0JZGlzcGxheU5hbWU6IElCTS0yNzM6IEVCQ0RJQyBHZXJtYW55Ci0JYWxpYXNlczogW2libTI3MywgQ3AyNzNdCi01OC4gIENoYXJzZXRuYW1lOiBJQk0tMjc3Ci0JZGlzcGxheU5hbWU6IElCTS0yNzc6IEVCQ0RJQyBEZW5tYXJrLCBOb3J3YXkKLQlhbGlhc2VzOiBbQ3AyNzcsIGlibTI3N10KLTU5LiAgQ2hhcnNldG5hbWU6IElCTS0yNzgKLQlkaXNwbGF5TmFtZTogSUJNLTI3ODogRUJDRElDIEZpbmxhbmQsIFN3ZWRlbgotCWFsaWFzZXM6IFtpYm0yNzgsIENwMjc4XQotNjAuICBDaGFyc2V0bmFtZTogSUJNLTI4MAotCWRpc3BsYXlOYW1lOiBJQk0tMjgwOiBFQkNESUMgSXRhbHkgCi0JYWxpYXNlczogW2libTI4MCwgQ3AyODBdCi02MS4gIENoYXJzZXRuYW1lOiBJQk0tMjg0Ci0JZGlzcGxheU5hbWU6IElCTS0yODQ6IEVCQ0RJQyBTcGFpbiwgTGF0aW4gQW1lcmljYQotCWFsaWFzZXM6IFtDcDI4NCwgaWJtMjg0XQotNjIuICBDaGFyc2V0bmFtZTogSUJNLTI4NQotCWRpc3BsYXlOYW1lOiBJQk0tMjg1OiBFQkNESUMgVUssIElyZWxhbmQKLQlhbGlhc2VzOiBbQ3AyODUsIGlibTI4NV0KLTYzLiAgQ2hhcnNldG5hbWU6IElCTS0yOTAKLQlkaXNwbGF5TmFtZTogSUJNLTI5MDogRUJDRElDIFNCQ1MgSmFwYW4gS2F0YWthbmEKLQlhbGlhc2VzOiBbQ3AyOTAsIGlibTI5MF0KLTY0LiAgQ2hhcnNldG5hbWU6IElCTS0yOTcKLQlkaXNwbGF5TmFtZTogSUJNLTI5NzogRUJDRElDIEZyYW5jZQotCWFsaWFzZXM6IFtDcDI5NywgaWJtMjk3XQotNjUuICBDaGFyc2V0bmFtZTogSUJNLTMwMAotCWRpc3BsYXlOYW1lOiBJQk0tMzAwOiBFQkNESUMgREJDUy1vbmx5IEphcGFuCi0JYWxpYXNlczogW0NwMzAwLCBpYm0zMDBdCi02Ni4gIENoYXJzZXRuYW1lOiBJQk0tMzAxCi0JZGlzcGxheU5hbWU6IElCTS0zMDE6IFBDIERCQ1Mtb25seSBKYXBhbgotCWFsaWFzZXM6IFtpYm0zMDEsIENwMzAxXQotNjcuICBDaGFyc2V0bmFtZTogSUJNLTMzNzIyCi0JZGlzcGxheU5hbWU6IElCTS0zMzcyMjogRVVDIEphcGFuCi0JYWxpYXNlczogW0NwMzM3MjIsIGlibTMzNzIyXQotNjguICBDaGFyc2V0bmFtZTogSUJNLTMzNzIyQwotCWRpc3BsYXlOYW1lOiBJQk0tMzM3MjJDOiBFVUMgSmFwYW4gc3ludGF4Ci0JYWxpYXNlczogW2libTMzNzIyQywgQ3AzMzcyMkNdCi02OS4gIENoYXJzZXRuYW1lOiBJQk0tNDIwCi0JZGlzcGxheU5hbWU6IElCTS00MjA6IEVCQ0RJQyBBcmFiaWMKLQlhbGlhc2VzOiBbQ3A0MjAsIGlibTQyMF0KLTcwLiAgQ2hhcnNldG5hbWU6IElCTS00MjBTCi0JZGlzcGxheU5hbWU6IElCTS00MjBTOiBFQkNESUMgQXJhYmljIHNoYXBlZAotCWFsaWFzZXM6IFtDcDQyMFMsIGlibTQyMFNdCi03MS4gIENoYXJzZXRuYW1lOiBJQk0tNDI0Ci0JZGlzcGxheU5hbWU6IElCTS00MjQ6IEVCQ0RJQyBIZWJyZXcKLQlhbGlhc2VzOiBbaWJtNDI0LCBDcDQyNF0KLTcyLiAgQ2hhcnNldG5hbWU6IElCTS00MzcKLQlkaXNwbGF5TmFtZTogSUJNLTQzNzogUEMgVW5pdGVkIFN0YXRlcwotCWFsaWFzZXM6IFtDcDQzNywgY3NwYzhjb2RlcGFnZTQzNywgaWJtNDM3XQotNzMuICBDaGFyc2V0bmFtZTogSUJNLTUwMAotCWRpc3BsYXlOYW1lOiBJQk0tNTAwOiBFQkNESUMgTGF0aW4gMQotCWFsaWFzZXM6IFtpYm01MDAsIENwNTAwXQotNzQuICBDaGFyc2V0bmFtZTogSUJNLTczNwotCWRpc3BsYXlOYW1lOiBJQk0tNzM3OiBNUy1ET1MgR3JlZWsKLQlhbGlhc2VzOiBbaWJtNzM3LCBDcDczN10KLTc1LiAgQ2hhcnNldG5hbWU6IElCTS03NzUKLQlkaXNwbGF5TmFtZTogSUJNLTc3NTogTVMtRE9TIEJhbHRpYyBSaW0KLQlhbGlhc2VzOiBbaWJtNzc1LCBDcDc3NV0KLTc2LiAgQ2hhcnNldG5hbWU6IElCTS04MDgKLQlkaXNwbGF5TmFtZTogSUJNLTgwODogUEMgUnVzc2lhbiAoZXVybykKLQlhbGlhc2VzOiBbaWJtODA4LCBDcDgwOF0KLTc3LiAgQ2hhcnNldG5hbWU6IElCTS04MzMKLQlkaXNwbGF5TmFtZTogSUJNLTgzMzogRUJDRElDIFNCQ1MgS29yZWFuCi0JYWxpYXNlczogW2libTgzMywgQ3A4MzNdCi03OC4gIENoYXJzZXRuYW1lOiBJQk0tODM0Ci0JZGlzcGxheU5hbWU6IElCTS04MzQ6IEVCQ0RJQyBEQkNTLW9ubHkgS29yZWFuCi0JYWxpYXNlczogW0NwODM0LCBpYm04MzRdCi03OS4gIENoYXJzZXRuYW1lOiBJQk0tODM1Ci0JZGlzcGxheU5hbWU6IElCTS04MzU6IEVCQ0RJQyBEQkNTLW9ubHkgVGFpd2FuCi0JYWxpYXNlczogW0NwODM1LCBpYm04MzVdCi04MC4gIENoYXJzZXRuYW1lOiBJQk0tODM2Ci0JZGlzcGxheU5hbWU6IElCTS04MzY6IEVCQ0RJQyBTQkNTIENoaW5hCi0JYWxpYXNlczogW0NwODM2LCBpYm04MzZdCi04MS4gIENoYXJzZXRuYW1lOiBJQk0tODM3Ci0JZGlzcGxheU5hbWU6IElCTS04Mzc6IEVCQ0RJQyBEQkNTLW9ubHkgQ2hpbmEKLQlhbGlhc2VzOiBbQ3A4MzcsIGlibTgzN10KLTgyLiAgQ2hhcnNldG5hbWU6IElCTS04MzgKLQlkaXNwbGF5TmFtZTogSUJNLTgzODogRUJDRElDIFRoYWkKLQlhbGlhc2VzOiBbQ3A4MzgsIGlibTgzOF0KLTgzLiAgQ2hhcnNldG5hbWU6IElCTS04NTAKLQlkaXNwbGF5TmFtZTogSUJNLTg1MDogUEMgTGF0aW4gMQotCWFsaWFzZXM6IFtjc3BjODUwbXVsdGlsaW5ndWFsLCBDcDg1MCwgaWJtODUwXQotODQuICBDaGFyc2V0bmFtZTogSUJNLTg1MgotCWRpc3BsYXlOYW1lOiBJQk0tODUyOiBQQyBMYXRpbiAyCi0JYWxpYXNlczogW0NwODUyLCBjc3BjcDg1MiwgaWJtODUyXQotODUuICBDaGFyc2V0bmFtZTogSUJNLTg1NQotCWRpc3BsYXlOYW1lOiBJQk0tODU1OiBQQyBDeXJpbGxpYwotCWFsaWFzZXM6IFtDcDg1NSwgaWJtODU1XQotODYuICBDaGFyc2V0bmFtZTogSUJNLTg1NgotCWRpc3BsYXlOYW1lOiBJQk0tODU2OiBQQyBIZWJyZXcgKG9sZCkKLQlhbGlhc2VzOiBbQ3A4NTYsIGlibTg1Nl0KLTg3LiAgQ2hhcnNldG5hbWU6IElCTS04NTcKLQlkaXNwbGF5TmFtZTogSUJNLTg1NzogUEMgTGF0aW4gNQotCWFsaWFzZXM6IFtjc2libTg1NywgaWJtODU3LCBDcDg1N10KLTg4LiAgQ2hhcnNldG5hbWU6IElCTS04NTgKLQlkaXNwbGF5TmFtZTogSUJNLTg1ODogUEMgTGF0aW4gMSAoZXVybykKLQlhbGlhc2VzOiBbQ3A4NTgsIGlibTg1OF0KLTg5LiAgQ2hhcnNldG5hbWU6IElCTS04NTkKLQlkaXNwbGF5TmFtZTogSUJNLTg1OTogUEMgTGF0aW4gOQotCWFsaWFzZXM6IFtDcDg1OSwgaWJtODU5XQotOTAuICBDaGFyc2V0bmFtZTogSUJNLTg2MAotCWRpc3BsYXlOYW1lOiBJQk0tODYwOiBQQyBQb3J0dWdhbAotCWFsaWFzZXM6IFtpYm04NjAsIENwODYwXQotOTEuICBDaGFyc2V0bmFtZTogSUJNLTg2MQotCWRpc3BsYXlOYW1lOiBJQk0tODYxOiBQQyBJY2VsYW5kCi0JYWxpYXNlczogW0NwODYxLCBpYm04NjFdCi05Mi4gIENoYXJzZXRuYW1lOiBJQk0tODYyCi0JZGlzcGxheU5hbWU6IElCTS04NjI6IFBDIElzcmFlbAotCWFsaWFzZXM6IFtDcDg2MiwgaWJtODYyXQotOTMuICBDaGFyc2V0bmFtZTogSUJNLTg2MwotCWRpc3BsYXlOYW1lOiBJQk0tODYzOiBQQyBDYW5hZGlhbiBGcmVuY2ggCi0JYWxpYXNlczogW2libTg2MywgQ3A4NjNdCi05NC4gIENoYXJzZXRuYW1lOiBJQk0tODY0Ci0JZGlzcGxheU5hbWU6IElCTS04NjQ6IFBDIEFyYWJpYwotCWFsaWFzZXM6IFtpYm04NjQsIENwODY0XQotOTUuICBDaGFyc2V0bmFtZTogSUJNLTg2NFMKLQlkaXNwbGF5TmFtZTogSUJNLTg2NFM6IFBDIEFyYWJpYyAoc2hhcGVkKQotCWFsaWFzZXM6IFtpYm04NjRTLCBDcDg2NFNdCi05Ni4gIENoYXJzZXRuYW1lOiBJQk0tODY1Ci0JZGlzcGxheU5hbWU6IElCTS04NjU6IFBDIE5vcmRpYwotCWFsaWFzZXM6IFtDcDg2NSwgaWJtODY1XQotOTcuICBDaGFyc2V0bmFtZTogSUJNLTg2NgotCWRpc3BsYXlOYW1lOiBJQk0tODY2OiBQQyBSdXNzaWEKLQlhbGlhc2VzOiBbQ3A4NjYsIGlibTg2Nl0KLTk4LiAgQ2hhcnNldG5hbWU6IElCTS04NjcKLQlkaXNwbGF5TmFtZTogSUJNLTg2NzogUEMgSXNyYWVsCi0JYWxpYXNlczogW0NwODY3LCBpYm04NjddCi05OS4gIENoYXJzZXRuYW1lOiBJQk0tODY4Ci0JZGlzcGxheU5hbWU6IElCTS04Njg6IFBDIFVyZHUKLQlhbGlhc2VzOiBbQ3A4NjgsIGlibTg2OF0KLTEwMC4gIENoYXJzZXRuYW1lOiBJQk0tODY5Ci0JZGlzcGxheU5hbWU6IElCTS04Njk6IFBDIEdyZWVjZQotCWFsaWFzZXM6IFtDcDg2OSwgaWJtODY5XQotMTAxLiAgQ2hhcnNldG5hbWU6IElCTS04NzAKLQlkaXNwbGF5TmFtZTogSUJNLTg3MDogRUJDRElDIExhdGluIDIKLQlhbGlhc2VzOiBbQ3A4NzAsIGlibTg3MF0KLTEwMi4gIENoYXJzZXRuYW1lOiBJQk0tODcxCi0JZGlzcGxheU5hbWU6IElCTS04NzE6IEVCQ0RJQyBJY2VsYW5kCi0JYWxpYXNlczogW0NwODcxLCBpYm04NzFdCi0xMDMuICBDaGFyc2V0bmFtZTogSUJNLTg3NAotCWRpc3BsYXlOYW1lOiBJQk0tODc0OiBQQyBUaGFpCi0JYWxpYXNlczogW2libTg3NCwgQ3A4NzRdCi0xMDQuICBDaGFyc2V0bmFtZTogSUJNLTg3NQotCWRpc3BsYXlOYW1lOiBJQk0tODc1OiBFQkNESUMgR3JlZWsKLQlhbGlhc2VzOiBbQ3A4NzUsIGlibTg3NV0KLTEwNS4gIENoYXJzZXRuYW1lOiBJQk0tODk3Ci0JZGlzcGxheU5hbWU6IElCTS04OTc6IFBDIFNCQ1Mtb25seSBKYXBhbgotCWFsaWFzZXM6IFtDcDg5NywgaWJtODk3XQotMTA2LiAgQ2hhcnNldG5hbWU6IElCTS05MTgKLQlkaXNwbGF5TmFtZTogSUJNLTkxODogRUJDRElDIFVyZHUKLQlhbGlhc2VzOiBbaWJtOTE4LCBDcDkxOF0KLTEwNy4gIENoYXJzZXRuYW1lOiBJQk0tOTIxCi0JZGlzcGxheU5hbWU6IElCTS05MjE6IFBDIEJhbHRpYwotCWFsaWFzZXM6IFtpYm05MjEsIENwOTIxXQotMTA4LiAgQ2hhcnNldG5hbWU6IElCTS05MjIKLQlkaXNwbGF5TmFtZTogSUJNLTkyMjogUEMgRXN0b25pYW4KLQlhbGlhc2VzOiBbQ3A5MjIsIGlibTkyMl0KLTEwOS4gIENoYXJzZXRuYW1lOiBJQk0tOTI0Ci0JZGlzcGxheU5hbWU6IElCTS05MjQ6IEVCQ0RJQyBMYXRpbiA5Ci0JYWxpYXNlczogW2libTkyNCwgQ3A5MjRdCi0xMTAuICBDaGFyc2V0bmFtZTogSUJNLTkyNwotCWRpc3BsYXlOYW1lOiBJQk0tOTI3OiBQQyBEQkNTLW9ubHkgVGFpd2FuCi0JYWxpYXNlczogW2libTkyNywgQ3A5MjddCi0xMTEuICBDaGFyc2V0bmFtZTogSUJNLTkzMAotCWRpc3BsYXlOYW1lOiBJQk0tOTMwOiBFQkNESUMgSmFwYW4gREJDUwotCWFsaWFzZXM6IFtDcDkzMCwgaWJtOTMwXQotMTEyLiAgQ2hhcnNldG5hbWU6IElCTS05MzIKLQlkaXNwbGF5TmFtZTogSUJNLTkzMjogUEMgSmFwYW4gU0pJUy03OCBzeW50YXgKLQlhbGlhc2VzOiBbQ3A5MzIsIGlibTkzMl0KLTExMy4gIENoYXJzZXRuYW1lOiBJQk0tOTMzCi0JZGlzcGxheU5hbWU6IElCTS05MzM6IEVCQ0RJQyBLb3JlYSBEQkNTCi0JYWxpYXNlczogW0NwOTMzLCBpYm05MzNdCi0xMTQuICBDaGFyc2V0bmFtZTogSUJNLTkzNQotCWRpc3BsYXlOYW1lOiBJQk0tOTM1OiBFQkNESUMgQ2hpbmEgREJDUwotCWFsaWFzZXM6IFtDcDkzNSwgaWJtOTM1XQotMTE1LiAgQ2hhcnNldG5hbWU6IElCTS05MzcKLQlkaXNwbGF5TmFtZTogSUJNLTkzNzogRUJDRElDIFRhaXdhbiBEQkNTCi0JYWxpYXNlczogW0NwOTM3LCBpYm05MzddCi0xMTYuICBDaGFyc2V0bmFtZTogSUJNLTkzOQotCWRpc3BsYXlOYW1lOiBJQk0tOTM5OiBFQkNESUMgSmFwYW4gRXh0ZW5kZWQgREJDUwotCWFsaWFzZXM6IFtDcDkzOSwgaWJtOTM5XQotMTE3LiAgQ2hhcnNldG5hbWU6IElCTS05NDIKLQlkaXNwbGF5TmFtZTogSUJNLTk0MjogUEMgSmFwYW4gU0pJUy03OAotCWFsaWFzZXM6IFtpYm05NDIsIENwOTQyXQotMTE4LiAgQ2hhcnNldG5hbWU6IElCTS05NDJDCi0JZGlzcGxheU5hbWU6IElCTS05NDJDOiBQQyBKYXBhbiBTSklTLTc4IHN5bnRheAotCWFsaWFzZXM6IFtpYm05NDJDLCBDcDk0MkNdCi0xMTkuICBDaGFyc2V0bmFtZTogSUJNLTk0MwotCWRpc3BsYXlOYW1lOiBJQk0tOTQzOiBQQyBKYXBhbiBTSklTLTkwCi0JYWxpYXNlczogW2libTk0MywgQ3A5NDNdCi0xMjAuICBDaGFyc2V0bmFtZTogSUJNLTk0M0MKLQlkaXNwbGF5TmFtZTogSUJNLTk0M0M6IFBDIEphcGFuIFNKSVMtOTAgc3ludGF4Ci0JYWxpYXNlczogW0NwOTQzQywgaWJtOTQzQ10KLTEyMS4gIENoYXJzZXRuYW1lOiBJQk0tOTQ3Ci0JZGlzcGxheU5hbWU6IElCTS05NDc6IFBDIERCQ1Mtb25seSBUYWl3YW4KLQlhbGlhc2VzOiBbaWJtOTQ3LCBDcDk0N10KLTEyMi4gIENoYXJzZXRuYW1lOiBJQk0tOTQ4Ci0JZGlzcGxheU5hbWU6IElCTS05NDg6IFBDIFRhaXdhbiBTQUEKLQlhbGlhc2VzOiBbaWJtOTQ4LCBDcDk0OF0KLTEyMy4gIENoYXJzZXRuYW1lOiBJQk0tOTQ5Ci0JZGlzcGxheU5hbWU6IElCTS05NDk6IFBDIEtvcmVhIChLUykKLQlhbGlhc2VzOiBbQ3A5NDksIGlibTk0OV0KLTEyNC4gIENoYXJzZXRuYW1lOiBJQk0tOTQ5QwotCWRpc3BsYXlOYW1lOiBJQk0tOTQ5QzogUEMgS29yZWEgKEtTKQotCWFsaWFzZXM6IFtDcDk0OUMsIGlibTk0OUNdCi0xMjUuICBDaGFyc2V0bmFtZTogSUJNLTk1MAotCWRpc3BsYXlOYW1lOiBJQk0tOTUwOiBQQyBUYWl3YW4KLQlhbGlhc2VzOiBbaWJtOTUwLCBDcDk1MF0KLTEyNi4gIENoYXJzZXRuYW1lOiBJQk0tOTUxCi0JZGlzcGxheU5hbWU6IElCTS05NTE6IFBDIERCQ1Mtb25seSBLb3JlYW4KLQlhbGlhc2VzOiBbQ3A5NTEsIGlibTk1MV0KLTEyNy4gIENoYXJzZXRuYW1lOiBJQk0tOTU0Ci0JZGlzcGxheU5hbWU6IElCTS05NTQ6IEVVQyBKYXBhbiAoZnVsbCkKLQlhbGlhc2VzOiBbQ3A5NTQsIGlibTk1NF0KLTEyOC4gIENoYXJzZXRuYW1lOiBJQk0tOTU0QwotCWRpc3BsYXlOYW1lOiBJQk0tOTU0QzogRVVDIEphcGFuIChmdWxsKSB3aXRoIHN5bnRheAotCWFsaWFzZXM6IFtDcDk1NGMsIGlibS1ldWNqcF0KLTEyOS4gIENoYXJzZXRuYW1lOiBJQk0tOTY0Ci0JZGlzcGxheU5hbWU6IElCTS05NjQ6IEVVQyBUYWl3YW4KLQlhbGlhc2VzOiBbQ3A5NjQsIGlibS1ldWN0d10KLTEzMC4gIENoYXJzZXRuYW1lOiBJQk0tOTcxCi0JZGlzcGxheU5hbWU6IElCTS05NzE6IEVVQyBEQkNTLW9ubHkgS29yZWFuCi0JYWxpYXNlczogW0NwOTcxLCBpYm05NzFdCi0xMzEuICBDaGFyc2V0bmFtZTogSVNDSUk5MQotCWRpc3BsYXlOYW1lOiBJU0NJSTkxOiBJU0NJSSBEZXZlbmFnYXJpIDkxCi0JYWxpYXNlczogW2lzY2lpXQotMTMyLiAgQ2hhcnNldG5hbWU6IElTTy0yMDIyLUNOCi0JZGlzcGxheU5hbWU6IElTTy0yMDIyLUNOOiBJU08gMjAyMiBUcmFkaXRpb25hbCBDaGluZXNlCi0JYWxpYXNlczogW2lzbzIwMjItY24tY25zLCBpc28tMjAyMi1jbi1jbnMsIGlzbzIwMjJjbi1jbnMsIGlzbzIwMjJjbiwgaXNvMjAyMi1jbl0KLTEzMy4gIENoYXJzZXRuYW1lOiBJU08tMjAyMi1DTi1HQgotCWRpc3BsYXlOYW1lOiBJU08tMjAyMi1DTi1HQjogSVNPIDIwMjIgU2ltcGxpZmllZCBDaGluZXNlCi0JYWxpYXNlczogW2lzbzIwMjJjbi1nYiwgaXNvMjAyMi1jbi1nYl0KLTEzNC4gIENoYXJzZXRuYW1lOiBJU08tMjAyMi1KUAotCWRpc3BsYXlOYW1lOiBJU08tMjAyMi1KUDogSVNPIDIwMjIgSmFwYW4KLQlhbGlhc2VzOiBbamlzLCBjc2lzbzIwMjJqcDIsIGlzbzIwMjItanAsIGNzamlzZW5jb2RpbmcsIGppcy1lbmNvZGluZywgaXNvLTIwMjItanAyLCBpc28yMDIyanBdCi0xMzUuICBDaGFyc2V0bmFtZTogSVNPLTIwMjItS1IKLQlkaXNwbGF5TmFtZTogSVNPLTIwMjItS1I6IElTTyAyMDIyIEtvcmVhCi0JYWxpYXNlczogW2lzbzIwMjIta3IsIGNzaXNvMjAyMmtyLCBpc28yMDIya3JdCi0xMzYuICBDaGFyc2V0bmFtZTogSVNPLTg4NTktMQotCWRpc3BsYXlOYW1lOiBJU08tODg1OS0xOiBJU08gTGF0aW4gMSAtIFdlc3Rlcm4gRXVyb3BlCi0JYWxpYXNlczogW2NzaXNvbGF0aW4xLCBpc28taXItMTAwLCBpc284ODU5LTEsIGlibS04MTksIGlzbzg4NTlfMSwgbGF0aW4xLCA4ODU5LTEsIGlibTgxOSwgaXNvLTg4NTktMToxOTg3LCBDcDgxOSwgbDFdCi0xMzcuICBDaGFyc2V0bmFtZTogSVNPLTg4NTktMTAKLQlkaXNwbGF5TmFtZTogSVNPLTg4NTktMTA6IElTTyBMYXRpbiA2IC0gTm9yZGljCi0JYWxpYXNlczogW2lzbzg4NTktMTAsIElTT184ODU5LTEwOjE5OTIsIGxhdGluNiwgaWJtLTkxOSwgODg1OS0xMCwgaXNvLWlyLTE1NywgbDYsIGlzbzg4NTlfMTAsIGNzaXNvbGF0aW42XQotMTM4LiAgQ2hhcnNldG5hbWU6IElTTy04ODU5LTEzCi0JZGlzcGxheU5hbWU6IElTTy04ODU5LTEzOiBJU08gTGF0aW4gNyAtIEJhbHRpYyBSaW0KLQlhbGlhc2VzOiBbaXNvODg1OS0xMywgaXNvODg1OV8xMywgODg1OS0xM10KLTEzOS4gIENoYXJzZXRuYW1lOiBJU08tODg1OS0xNAotCWRpc3BsYXlOYW1lOiBJU08tODg1OS0xNDogSVNPIExhdGluIDggLSBDZWx0aWMKLQlhbGlhc2VzOiBbODg1OS0xNCwgaXNvODg1OV8xNCwgaXNvLWlyLTE5OSwgSVNPXzg4NTktMTQ6MTk5OCwgbGF0aW44LCBpc284ODU5LTE0LCBpc29jZWx0aWMsIGw4XQotMTQwLiAgQ2hhcnNldG5hbWU6IElTTy04ODU5LTE1Ci0JZGlzcGxheU5hbWU6IElTTy04ODU5LTE1OiBJU08gTGF0aW4gOSAtIEV1cm8KLQlhbGlhc2VzOiBbbDksIGlibTkyMywgY3Npc29sYXRpbjksIDg4NTktOSwgaXNvODg1OS0xNSwgaWJtLTkyMywgbGF0aW45LCBpc284ODU5XzE1LCBDcDkyMywgaXNvODg1OV8xNV9mZGlzLCBsYXRpbjBdCi0xNDEuICBDaGFyc2V0bmFtZTogSVNPLTg4NTktMTYKLQlkaXNwbGF5TmFtZTogSVNPLTg4NTktMTY6IElTTyBSb21hbmlhbgotCWFsaWFzZXM6IFtpc284ODU5XzE2LCBpc284ODU5LTE2LCA4ODU5LTE2XQotMTQyLiAgQ2hhcnNldG5hbWU6IElTTy04ODU5LTIKLQlkaXNwbGF5TmFtZTogSVNPLTg4NTktMjogSVNPIExhdGluIDIgLSBDZW50cmFsIEV1cm9wZQotCWFsaWFzZXM6IFtpYm05MTIsIGwyLCBpYm0tOTEyLCBpc28taXItMTAxLCBjc2lzb2xhdGluMiwgaXNvLTg4NTktMjoxOTg3LCBsYXRpbjIsIGlzbzg4NTlfMiwgQ3A5MTIsIGlzbzg4NTktMiwgODg1OS0yXQotMTQzLiAgQ2hhcnNldG5hbWU6IElTTy04ODU5LTMKLQlkaXNwbGF5TmFtZTogSVNPLTg4NTktMzogSVNPIExhdGluIDMgLSBMYXRpbi9Fc3BlcmFudG8KLQlhbGlhc2VzOiBbaXNvLTg4NTktMzoxOTg4LCBjc2lzb2xhdGluMywgaXNvODg1OV8zLCA4ODU5LTMsIGlzbzg4NTktMywgQ3A5MTMsIGlzby1pci0xMDksIGlibS05MTMsIGwzLCBsYXRpbjNdCi0xNDQuICBDaGFyc2V0bmFtZTogSVNPLTg4NTktNAotCWRpc3BsYXlOYW1lOiBJU08tODg1OS00OiBJU08gTGF0aW4gNCAtIEJhbHRpYwotCWFsaWFzZXM6IFtpc28taXItMTEwLCBDcDkxNCwgbDQsIGlibS05MTQsIGxhdGluNCwgaXNvODg1OV80LCBpc28tODg1OS00OjE5ODgsIGlzbzg4NTktNCwgODg1OS00LCBjc2lzb2xhdGluNF0KLTE0NS4gIENoYXJzZXRuYW1lOiBJU08tODg1OS01Ci0JZGlzcGxheU5hbWU6IElTTy04ODU5LTU6IElTTyBDeXJpbGxpYwotCWFsaWFzZXM6IFtpc284ODU5XzUsIDg4NTktNSwgaWJtOTE1LCBpc28tODg1OS01OjE5ODgsIGNzaXNvbGF0aW5jeXJpbGxpYywgY3lyaWxsaWMsIENwOTE1LCBpc28taXItMTQ0LCBpc284ODU5LTUsIGlibS05MTVdCi0xNDYuICBDaGFyc2V0bmFtZTogSVNPLTg4NTktNgotCWRpc3BsYXlOYW1lOiBJU08tODg1OS02OiBJU08gQXJhYmljCi0JYWxpYXNlczogW2lzby1pci0xMjcsIGNzaXNvbGF0aW5hcmFiaWMsIGlzbzg4NTktNiwgaWJtMTA4OSwgZWNtYS0xMTQsIGFzbW8tNzA4LCBhcmFiaWMsIGlibS0xMDg5LCBpc284ODU5XzYsIDg4NTktNiwgQ3AxMDg5LCBpc28tODg1OS02OjE5ODddCi0xNDcuICBDaGFyc2V0bmFtZTogSVNPLTg4NTktNlMKLQlkaXNwbGF5TmFtZTogSVNPLTg4NTktNlM6IElTTyBBcmFiaWMgKHNoYXBlZCkKLQlhbGlhc2VzOiBbaXNvODg1OS02UywgaXNvODg1OV82U10KLTE0OC4gIENoYXJzZXRuYW1lOiBJU08tODg1OS03Ci0JZGlzcGxheU5hbWU6IElTTy04ODU5LTc6IElTTyBHcmVlawotCWFsaWFzZXM6IFtpc28tODg1OS03OjE5ODcsIENwODEzLCA4ODU5LTcsIGlzby1pci0xMjYsIGlibS04MTMsIGlzbzg4NTlfNywgZWNtYS0xMTgsIGdyZWVrOCwgaWJtODEzLCBlbG90LTkyOCwgY3Npc29sYXRpbmdyZWVrLCBpc284ODU5LTcsIGdyZWVrXQotMTQ5LiAgQ2hhcnNldG5hbWU6IElTTy04ODU5LTgKLQlkaXNwbGF5TmFtZTogSVNPLTg4NTktODogSVNPIEhlYnJldwotCWFsaWFzZXM6IFtpc28taXItMTM4LCBpc284ODU5LTgsIGlibS05MTYsIGlzbzg4NTlfOCwgY3Npc29sYXRpbmhlYnJldywgaGVicmV3LCBpc28tODg1OS04OjE5ODgsIGlibTkxNiwgQ3A5MTYsIDg4NTktOF0KLTE1MC4gIENoYXJzZXRuYW1lOiBJU08tODg1OS05Ci0JZGlzcGxheU5hbWU6IElTTy04ODU5LTk6IElTTyBMYXRpbiA1IC0gVHVya2V5Ci0JYWxpYXNlczogW0NwOTIwLCBsYXRpbjUsIGlzby1pci0xNDgsIDg4NTktOSwgbDUsIGNzaXNvbGF0aW41LCBpYm0tOTIwLCBpYm05MjAsIGlzbzg4NTlfOSwgaXNvODg1OS05XQotMTUxLiAgQ2hhcnNldG5hbWU6IEpJUzAyMDEKLQlkaXNwbGF5TmFtZTogSklTMDIwMTogSmFwYW4gSklTIDAyMDEgKGthdGFrYW5hKQotCWFsaWFzZXM6IFtdCi0xNTIuICBDaGFyc2V0bmFtZTogSklTMDIwOAotCWRpc3BsYXlOYW1lOiBKSVMwMjA4OiBKYXBhbiBKSVMgMDIwOAotCWFsaWFzZXM6IFtdCi0xNTMuICBDaGFyc2V0bmFtZTogSklTMDIxMgotCWRpc3BsYXlOYW1lOiBKSVMwMjEyOiBKYXBhbiBKSVMgMDIxMiAoZXh0ZW5kZWQpCi0JYWxpYXNlczogW10KLTE1NC4gIENoYXJzZXRuYW1lOiBKb2hhYgotCWRpc3BsYXlOYW1lOiBKb2hhYjogUEMgS29yZWFuIEpvaGFiCi0JYWxpYXNlczogW10KLTE1NS4gIENoYXJzZXRuYW1lOiBLT0k4LVIKLQlkaXNwbGF5TmFtZTogS09JOC1SOiBJbnRlcm5ldCBSdXNzaWEKLQlhbGlhc2VzOiBbaWJtLTg3OCwgY3Nrb2k4ciwga29pOCwga29pOF9yXQotMTU2LiAgQ2hhcnNldG5hbWU6IEtPSTgtUlUKLQlkaXNwbGF5TmFtZTogS09JOC1SVTogSW50ZXJuZXQgQmVsYXJ1cwotCWFsaWFzZXM6IFtpYm0tMTE2OCwga29pOF9ydV0KLTE1Ny4gIENoYXJzZXRuYW1lOiBLT0k4LVUKLQlkaXNwbGF5TmFtZTogS09JOC1VOiBJbnRlcm5ldCBVa3JhaW5lCi0JYWxpYXNlczogW2libS0xMTY3LCBrb2k4X3VdCi0xNTguICBDaGFyc2V0bmFtZTogS1NDNTYwMQotCWRpc3BsYXlOYW1lOiBLU0M1NjAxOiBLb3JlYSBLU0MKLQlhbGlhc2VzOiBbXQotMTU5LiAgQ2hhcnNldG5hbWU6IE1hY0FyYWJpYwotCWRpc3BsYXlOYW1lOiBNYWNBcmFiaWM6IEFwcGxlIEFyYWJpYwotCWFsaWFzZXM6IFtdCi0xNjAuICBDaGFyc2V0bmFtZTogTWFjQ2VudHJhbEV1cm9wZQotCWRpc3BsYXlOYW1lOiBNYWNDZW50cmFsRXVyb3BlOiBBcHBsZSBDZW50cmFsIEV1cm9wZQotCWFsaWFzZXM6IFtpYm0tMTI4Ml0KLTE2MS4gIENoYXJzZXRuYW1lOiBNYWNDcm9hdGlhbgotCWRpc3BsYXlOYW1lOiBNYWNDcm9hdGlhbjogQXBwbGUgQ3JvYXRpYW4gCi0JYWxpYXNlczogW2libS0xMjg0XQotMTYyLiAgQ2hhcnNldG5hbWU6IE1hY0N5cmlsbGljCi0JZGlzcGxheU5hbWU6IE1hY0N5cmlsbGljOiBBcHBsZSBDeXJpbGxpYwotCWFsaWFzZXM6IFtpYm0tMTI4M10KLTE2My4gIENoYXJzZXRuYW1lOiBNYWNEaW5nYmF0Ci0JZGlzcGxheU5hbWU6IE1hY0RpbmdiYXQ6IEFwcGxlIERpbmdiYXQKLQlhbGlhc2VzOiBbXQotMTY0LiAgQ2hhcnNldG5hbWU6IE1hY0dyZWVrCi0JZGlzcGxheU5hbWU6IE1hY0dyZWVrOiBBcHBsZSBHcmVlawotCWFsaWFzZXM6IFtpYm0tMTI4MF0KLTE2NS4gIENoYXJzZXRuYW1lOiBNYWNIZWJyZXcKLQlkaXNwbGF5TmFtZTogTWFjSGVicmV3OiBBcHBsZSBIZWJyZXcgCi0JYWxpYXNlczogW10KLTE2Ni4gIENoYXJzZXRuYW1lOiBNYWNJY2VsYW5kCi0JZGlzcGxheU5hbWU6IE1hY0ljZWxhbmQ6IEFwcGxlIEljZWxhbmQKLQlhbGlhc2VzOiBbaWJtLTEyODZdCi0xNjcuICBDaGFyc2V0bmFtZTogTWFjUm9tYW4KLQlkaXNwbGF5TmFtZTogTWFjUm9tYW46IEFwcGxlIFJvbWFuCi0JYWxpYXNlczogW2libS0xMjc1XQotMTY4LiAgQ2hhcnNldG5hbWU6IE1hY1JvbWFuaWEKLQlkaXNwbGF5TmFtZTogTWFjUm9tYW5pYTogQXBwbGUgUm9tYW5pYQotCWFsaWFzZXM6IFtpYm0tMTI4NV0KLTE2OS4gIENoYXJzZXRuYW1lOiBNYWNTeW1ib2wKLQlkaXNwbGF5TmFtZTogTWFjU3ltYm9sOiBBcHBsZSBQb3N0U2NyaXB0IFN5bWJvbAotCWFsaWFzZXM6IFtBZG9iZS1TeW1ib2wtRW5jb2RpbmcsIGlibS0xMDM4XQotMTcwLiAgQ2hhcnNldG5hbWU6IE1hY1RoYWkKLQlkaXNwbGF5TmFtZTogTWFjVGhhaTogQXBwbGUgVGhhaQotCWFsaWFzZXM6IFtdCi0xNzEuICBDaGFyc2V0bmFtZTogTWFjVHVya2lzaAotCWRpc3BsYXlOYW1lOiBNYWNUdXJraXNoOiBBcHBsZSBUdXJraXNoCi0JYWxpYXNlczogW2libS0xMjgxXQotMTcyLiAgQ2hhcnNldG5hbWU6IE1hY1VrcmFpbmUKLQlkaXNwbGF5TmFtZTogTWFjVWtyYWluZTogQXBwbGUgVWtyYWluZQotCWFsaWFzZXM6IFtdCi0xNzMuICBDaGFyc2V0bmFtZTogUFRDUDE1NAotCWRpc3BsYXlOYW1lOiBQVENQMTU0OiBXaW5kb3dzIEN5cmlsbGljIEFzaWFuCi0JYWxpYXNlczogW0lCTS0xMTY5LCBjc1BUQ1AxNTQsIEN5cmlsbGljLUFzaWFuLCBQVDE1NF0KLTE3NC4gIENoYXJzZXRuYW1lOiBTaGlmdF9KSVMKLQlkaXNwbGF5TmFtZTogU2hpZnRfSklTOiBTaGlmdCBKSVMgSmFwYW4KLQlhbGlhc2VzOiBbXQotMTc1LiAgQ2hhcnNldG5hbWU6IFRJUy02MjAKLQlkaXNwbGF5TmFtZTogVElTLTYyMDogUEMgVGhhaWxhbmQKLQlhbGlhc2VzOiBbdGlzNjIwLjI1MzMsIHRpczYyMF0KLTE3Ni4gIENoYXJzZXRuYW1lOiBVUy1BU0NJSQotCWRpc3BsYXlOYW1lOiBVUy1BU0NJSTogQVNDSUkgNyBiaXQKLQlhbGlhc2VzOiBbaXNvLTY0Ni5pcnY6MTk4MywgSVNPNjQ2LVVTLCBBU0NJSSwgZGVmYXVsdCwgSVNPLTY0Ni5pcnY6MTk5MSwgZGlyZWN0LCBhc2NpaTcsIEFOU0lfWDMuNC0xOTg2LCBpc28taXItNiwgdXMsIGlibS0zNjcsIDY0NiwgY3NBU0NJSSwgQU5TSV9YMy40LTE5NjgsIENwMzY3XQotMTc3LiAgQ2hhcnNldG5hbWU6IFVURi0xNgotCWRpc3BsYXlOYW1lOiBVVEYtMTYKLQlhbGlhc2VzOiBbVW5pY29kZSwgVVRGMTYsIFVURl8xNiwgVUNTLTJdCi0xNzguICBDaGFyc2V0bmFtZTogVVRGLTE2QkUKLQlkaXNwbGF5TmFtZTogVVRGLTE2QkU6IFVuaWNvZGUgVVRGLTE2IEJpZy1lbmRpYW4KLQlhbGlhc2VzOiBbWC1VVEYtMTZCRSwgVW5pY29kZUJpZ1VubWFya2VkLCBVVEYxNkJFLCBVVEZfMTZCRSwgSVNPLTEwNjQ2LVVDUy0yXQotMTc5LiAgQ2hhcnNldG5hbWU6IFVURi0xNkxFCi0JZGlzcGxheU5hbWU6IFVURi0xNkxFOiBVbmljb2RlIFVURi0xNiBMaXR0bGUtZW5kaWFuCi0JYWxpYXNlczogW1VURl8xNkxFLCBVVEYxNkxFLCBVbmljb2RlTGl0dGxlVW5tYXJrZWQsIFgtVVRGLTE2TEVdCi0xODAuICBDaGFyc2V0bmFtZTogVVRGLTMyCi0JZGlzcGxheU5hbWU6IFVURi0zMjogVW5pY29kZSBVVEYtMzIKLQlhbGlhc2VzOiBbSVNPLTEwNjQ2LVVDUy00LCBVVEYzMiwgVUNTLTQsIFVURl8zMkJFXQotMTgxLiAgQ2hhcnNldG5hbWU6IFVURi0zMkJFCi0JZGlzcGxheU5hbWU6IFVURi0zMkJFOiBVbmljb2RlIFVURi0zMiBCaWctZW5kaWFuCi0JYWxpYXNlczogW1VURjMyQkUsIFgtVVRGLTMyQkUsIFVURl8zMkJFXQotMTgyLiAgQ2hhcnNldG5hbWU6IFVURi0zMkxFCi0JZGlzcGxheU5hbWU6IFVURi0zMkxFOiBVbmljb2RlIFVURi0zMiBMaXR0bGUtZW5kaWFuCi0JYWxpYXNlczogW1VURl8zMkxFLCBVVEYzMkxFLCBYLVVURi0zMkxFXQotMTgzLiAgQ2hhcnNldG5hbWU6IFVURi04Ci0JZGlzcGxheU5hbWU6IFVURi04OiBVbmljb2RlIFVURi04Ci0JYWxpYXNlczogW1VURl84LCBVVEY4XQotMTg0LiAgQ2hhcnNldG5hbWU6IFVURi04SgotCWRpc3BsYXlOYW1lOiBVVEYtOEo6IFVuaWNvZGUgVVRGLTggKEphdmEpCi0JYWxpYXNlczogW1VURjhKXQotMTg1LiAgQ2hhcnNldG5hbWU6IHdpbmRvd3MtMTI1MAotCWRpc3BsYXlOYW1lOiB3aW5kb3dzLTEyNTA6IFdpbmRvd3MgTGF0aW4gMgotCWFsaWFzZXM6IFtpYm0tMTI1MCwgQ3AxMjUwXQotMTg2LiAgQ2hhcnNldG5hbWU6IHdpbmRvd3MtMTI1MQotCWRpc3BsYXlOYW1lOiB3aW5kb3dzLTEyNTE6IFdpbmRvd3MgQ3lyaWxsaWMKLQlhbGlhc2VzOiBbaWJtLTEyNTEsIENwMTI1MV0KLTE4Ny4gIENoYXJzZXRuYW1lOiB3aW5kb3dzLTEyNTIKLQlkaXNwbGF5TmFtZTogd2luZG93cy0xMjUyOiBXaW5kb3dzIExhdGluIDEgCi0JYWxpYXNlczogW0NwMTI1MiwgaWJtLTEyNTJdCi0xODguICBDaGFyc2V0bmFtZTogd2luZG93cy0xMjUzCi0JZGlzcGxheU5hbWU6IHdpbmRvd3MtMTI1MzogV2luZG93cyBHcmVlawotCWFsaWFzZXM6IFtDcDEyNTMsIGlibS0xMjUzXQotMTg5LiAgQ2hhcnNldG5hbWU6IHdpbmRvd3MtMTI1NAotCWRpc3BsYXlOYW1lOiB3aW5kb3dzLTEyNTQ6IFdpbmRvd3MgTGF0aW4gNSAoVHVya2V5KQotCWFsaWFzZXM6IFtDcDEyNTQsIGlibS0xMjU0XQotMTkwLiAgQ2hhcnNldG5hbWU6IHdpbmRvd3MtMTI1NQotCWRpc3BsYXlOYW1lOiB3aW5kb3dzLTEyNTU6IFdpbmRvd3MgSGVicmV3Ci0JYWxpYXNlczogW0NwMTI1NSwgaWJtLTEyNTVdCi0xOTEuICBDaGFyc2V0bmFtZTogd2luZG93cy0xMjU2Ci0JZGlzcGxheU5hbWU6IHdpbmRvd3MtMTI1NjogV2luZG93cyBBcmFiaWMKLQlhbGlhc2VzOiBbQ3AxMjU2LCBpYm0tMTI1Nl0KLTE5Mi4gIENoYXJzZXRuYW1lOiB3aW5kb3dzLTEyNTZTCi0JZGlzcGxheU5hbWU6IHdpbmRvd3MtMTI1NlM6IFdpbmRvd3MgQXJhYmljIChzaGFwZWQpCi0JYWxpYXNlczogW2libS0xMjU2cywgQ3AxMjU2c10KLTE5My4gIENoYXJzZXRuYW1lOiB3aW5kb3dzLTEyNTcKLQlkaXNwbGF5TmFtZTogd2luZG93cy0xMjU3OiBXaW5kb3dzIExhdGluIDQgKEJhbHR0aWMpCi0JYWxpYXNlczogW0NwMTI1NywgaWJtLTEyNTddCi0xOTQuICBDaGFyc2V0bmFtZTogd2luZG93cy0xMjU4Ci0JZGlzcGxheU5hbWU6IHdpbmRvd3MtMTI1ODogV2luZG93cyBWaWV0bmFtZXNlCi0JYWxpYXNlczogW2libS0xMTI5LCBpYm0tMTI1OCwgQ3AxMjU4XQotMTk1LiAgQ2hhcnNldG5hbWU6IHdpbmRvd3MtODc0Ci0JZGlzcGxheU5hbWU6IHdpbmRvd3MtODc0OiBXaW5kb3dzIFRoYWkKLQlhbGlhc2VzOiBbTVM4NzRdCi0xOTYuICBDaGFyc2V0bmFtZTogd2luZG93cy05MzIKLQlkaXNwbGF5TmFtZTogd2luZG93cy05MzI6IFdpbmRvd3MgSmFwYW4KLQlhbGlhc2VzOiBbbXNfa2FuamksIGNzd2luZG93czMxaiwgTVM5MzIsIHdpbmRvd3MtMzFqXQotMTk3LiAgQ2hhcnNldG5hbWU6IHdpbmRvd3MtOTM2Ci0JZGlzcGxheU5hbWU6IHdpbmRvd3MtOTM2OiBXaW5kb3dzIENoaW5hCi0JYWxpYXNlczogW01TOTM2LCA5MzZdCi0xOTguICBDaGFyc2V0bmFtZTogd2luZG93cy05NDkKLQlkaXNwbGF5TmFtZTogd2luZG93cy05NDk6IFdpbmRvd3MgS29yZWEKLQlhbGlhc2VzOiBbaWJtLTEzNjEsIENwMTM2MSwgaWJtMTM2MSwgTVM5NDksIG1zMTM2MSwga3NjNTYwMS0xOTkyXQotMTk5LiAgQ2hhcnNldG5hbWU6IHdpbmRvd3MtOTUwCi0JZGlzcGxheU5hbWU6IHdpbmRvd3MtOTUwOiBXaW5kb3dzIFRhaXdhbgotCWFsaWFzZXM6IFtNUzk1MF0KLTIwMC4gIENoYXJzZXRuYW1lOiBYLVVuaWNvZGVCaWcKLQlkaXNwbGF5TmFtZTogWC1Vbmljb2RlQmlnOiBVbmljb2RlIFVURi0xNiBCaWctZW5kaWFuIHdpdGggbWFyawotCWFsaWFzZXM6IFtVbmljb2RlQmlnXQotMjAxLiAgQ2hhcnNldG5hbWU6IFgtVW5pY29kZUxpdHRsZQotCWRpc3BsYXlOYW1lOiBYLVVuaWNvZGVMaXR0bGU6IFVuaWNvZGUgVVRGLTE2IExpdHRsZS1lbmRpYW4gd2l0aCBtYXJrCi0JYWxpYXNlczogW1VuaWNvZGVMaXR0bGVdCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL291dHB1dEZyb21MaXN0Q2hhcnNldHMvU3VuMS40LjNfMDIudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9vdXRwdXRGcm9tTGlzdENoYXJzZXRzL1N1bjEuNC4zXzAyLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzc5MjJhYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL291dHB1dEZyb21MaXN0Q2hhcnNldHMvU3VuMS40LjNfMDIudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMzQzICswLDAgQEAKLQotQ3VycmVudCBMb2NhbGU6IGVuX1VTCi0KLUpSRSB2ZXJzaW9uOiAxLjQuMl8wMyAoMS40LjJfMDMtYjAyKQotLS0gbGlzdGluZyBwcm9wZXJ0aWVzIC0tCi1qYXZhLnJ1bnRpbWUubmFtZT1KYXZhKFRNKSAyIFJ1bnRpbWUgRW52aXJvbm1lbnQsIFN0YW5kLi4uCi1zdW4uYm9vdC5saWJyYXJ5LnBhdGg9RDpcSkRLc1xqMnNkazEuNC4yXzAzXGpyZVxiaW4KLWphdmEudm0udmVyc2lvbj0xLjQuMl8wMy1iMDIKLWphdmEudm0udmVuZG9yPVN1biBNaWNyb3N5c3RlbXMgSW5jLgotamF2YS52ZW5kb3IudXJsPWh0dHA6Ly9qYXZhLnN1bi5jb20vCi1wYXRoLnNlcGFyYXRvcj07Ci1qYXZhLnZtLm5hbWU9SmF2YSBIb3RTcG90KFRNKSBDbGllbnQgVk0KLWZpbGUuZW5jb2RpbmcucGtnPXN1bi5pbwotdXNlci5jb3VudHJ5PVVTCi1zdW4ub3MucGF0Y2gubGV2ZWw9U2VydmljZSBQYWNrIDEKLWphdmEudm0uc3BlY2lmaWNhdGlvbi5uYW1lPUphdmEgVmlydHVhbCBNYWNoaW5lIFNwZWNpZmljYXRpb24KLXVzZXIuZGlyPUQ6XGJ1aWxkc1xEYWlseVxlY2xpcHNlLVNESy1JMjAwNDAzMDQuLi4KLWphdmEucnVudGltZS52ZXJzaW9uPTEuNC4yXzAzLWIwMgotamF2YS5hd3QuZ3JhcGhpY3NlbnY9c3VuLmF3dC5XaW4zMkdyYXBoaWNzRW52aXJvbm1lbnQKLWphdmEuZW5kb3JzZWQuZGlycz1EOlxKREtzXGoyc2RrMS40LjJfMDNcanJlXGxpYlxlbmRvcnNlZAotb3MuYXJjaD14ODYKLWphdmEuaW8udG1wZGlyPUM6XERPQ1VNRX4xXERBVklEV34xLkRNV1xMT0NBTFN+MVxUZW1wXAotbGluZS5zZXBhcmF0b3I9Ci0KLWphdmEudm0uc3BlY2lmaWNhdGlvbi52ZW5kb3I9U3VuIE1pY3Jvc3lzdGVtcyBJbmMuCi11c2VyLnZhcmlhbnQ9Ci1vcy5uYW1lPVdpbmRvd3MgWFAKLXN1bi5qYXZhMmQuZm9udHBhdGg9Ci1qYXZhLmxpYnJhcnkucGF0aD1EOlxKREtzXGoyc2RrMS40LjJfMDNcYmluOy47QzpcV0lORE9XLi4uCi1qYXZhLnNwZWNpZmljYXRpb24ubmFtZT1KYXZhIFBsYXRmb3JtIEFQSSBTcGVjaWZpY2F0aW9uCi1qYXZhLmNsYXNzLnZlcnNpb249NDguMAotamF2YS51dGlsLnByZWZzLlByZWZlcmVuY2VzRmFjdG9yeT1qYXZhLnV0aWwucHJlZnMuV2luZG93c1ByZWZlcmVuY2VzRmFjLi4uCi1vcy52ZXJzaW9uPTUuMQotdXNlci5ob21lPUM6XERvY3VtZW50cyBhbmQgU2V0dGluZ3NcZGF2aWR3LkRNVzJUMjMKLXVzZXIudGltZXpvbmU9Ci1qYXZhLmF3dC5wcmludGVyam9iPXN1bi5hd3Qud2luZG93cy5XUHJpbnRlckpvYgotZmlsZS5lbmNvZGluZz1DcDEyNTIKLWphdmEuc3BlY2lmaWNhdGlvbi52ZXJzaW9uPTEuNAotdXNlci5uYW1lPWRhdmlkdwotamF2YS5jbGFzcy5wYXRoPUQ6XGJ1aWxkc1xEYWlseVxlY2xpcHNlLVNESy1JMjAwNDAzMDQuLi4KLWphdmEudm0uc3BlY2lmaWNhdGlvbi52ZXJzaW9uPTEuMAotc3VuLmFyY2guZGF0YS5tb2RlbD0zMgotamF2YS5ob21lPUQ6XEpES3NcajJzZGsxLjQuMl8wM1xqcmUKLWphdmEuc3BlY2lmaWNhdGlvbi52ZW5kb3I9U3VuIE1pY3Jvc3lzdGVtcyBJbmMuCi11c2VyLmxhbmd1YWdlPWVuCi1hd3QudG9vbGtpdD1zdW4uYXd0LndpbmRvd3MuV1Rvb2xraXQKLWphdmEudm0uaW5mbz1taXhlZCBtb2RlCi1qYXZhLnZlcnNpb249MS40LjJfMDMKLWphdmEuZXh0LmRpcnM9RDpcSkRLc1xqMnNkazEuNC4yXzAzXGpyZVxsaWJcZXh0Ci1zdW4uYm9vdC5jbGFzcy5wYXRoPUQ6XEpES3NcajJzZGsxLjQuMl8wM1xqcmVcbGliXHJ0LmphcjsuLi4KLWphdmEudmVuZG9yPVN1biBNaWNyb3N5c3RlbXMgSW5jLgotZmlsZS5zZXBhcmF0b3I9XAotamF2YS52ZW5kb3IudXJsLmJ1Zz1odHRwOi8vamF2YS5zdW4uY29tL2NnaS1iaW4vYnVncmVwb3J0Li4uCi1zdW4uY3B1LmVuZGlhbj1saXR0bGUKLXN1bi5pby51bmljb2RlLmVuY29kaW5nPVVuaWNvZGVMaXR0bGUKLXN1bi5jcHUuaXNhbGlzdD1wZW50aXVtIGk0ODYgaTM4NgotQXZhaWxhYmxlIExvY2FsZXMKLWFyCi1hcl9BRQotYXJfQkgKLWFyX0RaCi1hcl9FRwotYXJfSVEKLWFyX0pPCi1hcl9LVwotYXJfTEIKLWFyX0xZCi1hcl9NQQotYXJfT00KLWFyX1FBCi1hcl9TQQotYXJfU0QKLWFyX1NZCi1hcl9UTgotYXJfWUUKLWhpX0lOCi1pdwotaXdfSUwKLWphCi1qYV9KUAota28KLWtvX0tSCi10aAotdGhfVEgKLXRoX1RIX1RICi16aAotemhfQ04KLXpoX0hLCi16aF9UVwotYmUKLWJlX0JZCi1iZwotYmdfQkcKLWNhCi1jYV9FUwotY3MKLWNzX0NaCi1kYQotZGFfREsKLWRlCi1kZV9BVAotZGVfQ0gKLWRlX0RFCi1kZV9MVQotZWwKLWVsX0dSCi1lbl9BVQotZW5fQ0EKLWVuX0dCCi1lbl9JRQotZW5fSU4KLWVuX05aCi1lbl9aQQotZXMKLWVzX0FSCi1lc19CTwotZXNfQ0wKLWVzX0NPCi1lc19DUgotZXNfRE8KLWVzX0VDCi1lc19FUwotZXNfR1QKLWVzX0hOCi1lc19NWAotZXNfTkkKLWVzX1BBCi1lc19QRQotZXNfUFIKLWVzX1BZCi1lc19TVgotZXNfVVkKLWVzX1ZFCi1ldAotZXRfRUUKLWZpCi1maV9GSQotZnIKLWZyX0JFCi1mcl9DQQotZnJfQ0gKLWZyX0ZSCi1mcl9MVQotaHIKLWhyX0hSCi1odQotaHVfSFUKLWlzCi1pc19JUwotaXQKLWl0X0NICi1pdF9JVAotbHQKLWx0X0xUCi1sdgotbHZfTFYKLW1rCi1ta19NSwotbmwKLW5sX0JFCi1ubF9OTAotbm8KLW5vX05PCi1ub19OT19OWQotcGwKLXBsX1BMCi1wdAotcHRfQlIKLXB0X1BUCi1ybwotcm9fUk8KLXJ1Ci1ydV9SVQotc2gKLXNoX1lVCi1zawotc2tfU0sKLXNsCi1zbF9TSQotc3EKLXNxX0FMCi1zcgotc3JfWVUKLXN2Ci1zdl9TRQotdHIKLXRyX1RSCi11awotdWtfVUEKLWVuCi1lbl9VUwotZmlsZS5lbmNvZGluZy5wa2c6IHN1bi5pbwotZmlsZS5lbmNvZGluZzogQ3AxMjUyCi0KLQotQXZhaWxhYmxlIENoYXJzZXRzCi0xLiAgQ2hhcnNldG5hbWU6IEJpZzUKLQlkaXNwbGF5TmFtZTogQmlnNQotCWFsaWFzZXM6IFtjc0JpZzVdCi0yLiAgQ2hhcnNldG5hbWU6IEJpZzUtSEtTQ1MKLQlkaXNwbGF5TmFtZTogQmlnNS1IS1NDUwotCWFsaWFzZXM6IFtiaWc1LWhrc2NzLCBCaWc1X0hLU0NTLCBiaWc1aGtzY3NdCi0zLiAgQ2hhcnNldG5hbWU6IEVVQy1KUAotCWRpc3BsYXlOYW1lOiBFVUMtSlAKLQlhbGlhc2VzOiBbZXVjamlzLCB4LWV1Y2pwLCBjc0VVQ1BrZEZtdGphcGFuZXNlLCBldWNqcCwgRXh0ZW5kZWRfVU5JWF9Db2RlX1BhY2tlZF9Gb3JtYXRfZm9yX0phcGFuZXNlLCB4LWV1Yy1qcCwgZXVjX2pwXQotNC4gIENoYXJzZXRuYW1lOiBFVUMtS1IKLQlkaXNwbGF5TmFtZTogRVVDLUtSCi0JYWxpYXNlczogW2tzYzU2MDEsIDU2MDEsIGtzYzU2MDFfMTk4Nywga3NjXzU2MDEsIGtzYzU2MDEtMTk4NywgZXVjX2tyLCBrc19jXzU2MDEtMTk4NywgZXVja3IsIGNzRVVDS1JdCi01LiAgQ2hhcnNldG5hbWU6IEdCMTgwMzAKLQlkaXNwbGF5TmFtZTogR0IxODAzMAotCWFsaWFzZXM6IFtnYjE4MDMwLTIwMDBdCi02LiAgQ2hhcnNldG5hbWU6IEdCSwotCWRpc3BsYXlOYW1lOiBHQksKLQlhbGlhc2VzOiBbd2luZG93cy05MzYsIENQOTM2XQotNy4gIENoYXJzZXRuYW1lOiBJU08tMjAyMi1KUAotCWRpc3BsYXlOYW1lOiBJU08tMjAyMi1KUAotCWFsaWFzZXM6IFtqaXMsIGppc19lbmNvZGluZywgY3NqaXNlbmNvZGluZywgY3NJU08yMDIySlAsIGlzbzIwMjJqcF0KLTguICBDaGFyc2V0bmFtZTogSVNPLTIwMjItS1IKLQlkaXNwbGF5TmFtZTogSVNPLTIwMjItS1IKLQlhbGlhc2VzOiBbSVNPMjAyMktSLCBjc0lTTzIwMjJLUl0KLTkuICBDaGFyc2V0bmFtZTogSVNPLTg4NTktMQotCWRpc3BsYXlOYW1lOiBJU08tODg1OS0xCi0JYWxpYXNlczogW2lzby1pci0xMDAsIDg4NTlfMSwgSVNPXzg4NTktMSwgSVNPODg1OV8xLCA4MTksIGNzSVNPTGF0aW4xLCBJQk0tODE5LCBJU09fODg1OS0xOjE5ODcsIGxhdGluMSwgY3A4MTksIElTTzg4NTktMSwgSUJNODE5LCBJU09fODg1OV8xLCBsMV0KLTEwLiAgQ2hhcnNldG5hbWU6IElTTy04ODU5LTEzCi0JZGlzcGxheU5hbWU6IElTTy04ODU5LTEzCi0JYWxpYXNlczogW2lzbzg4NTlfMTNdCi0xMS4gIENoYXJzZXRuYW1lOiBJU08tODg1OS0xNQotCWRpc3BsYXlOYW1lOiBJU08tODg1OS0xNQotCWFsaWFzZXM6IFs4ODU5XzE1LCBjc0lTT2xhdGluOSwgSUJNOTIzLCBjcDkyMywgOTIzLCBMOSwgSUJNLTkyMywgSVNPODg1OS0xNSwgTEFUSU45LCBJU09fODg1OS0xNSwgTEFUSU4wLCBjc0lTT2xhdGluMCwgSVNPODg1OV8xNV9GRElTLCBJU08tODg1OS0xNV0KLTEyLiAgQ2hhcnNldG5hbWU6IElTTy04ODU5LTIKLQlkaXNwbGF5TmFtZTogSVNPLTg4NTktMgotCWFsaWFzZXM6IFtsMiwgaXNvLWlyLTEwMSwgSVNPXzg4NTktMjoxOTg3LCBJU09fODg1OS0yLCBsYXRpbjIsIGNzSVNPTGF0aW4yLCBpc284ODU5XzJdCi0xMy4gIENoYXJzZXRuYW1lOiBJU08tODg1OS0zCi0JZGlzcGxheU5hbWU6IElTTy04ODU5LTMKLQlhbGlhc2VzOiBbXQotMTQuICBDaGFyc2V0bmFtZTogSVNPLTg4NTktNAotCWRpc3BsYXlOYW1lOiBJU08tODg1OS00Ci0JYWxpYXNlczogW2lzby1pci0xMTAsIGw0LCBsYXRpbjQsIGNzSVNPTGF0aW40LCBpc284ODU5XzQsIElTT184ODU5LTQ6MTk4OCwgSVNPXzg4NTktNF0KLTE1LiAgQ2hhcnNldG5hbWU6IElTTy04ODU5LTUKLQlkaXNwbGF5TmFtZTogSVNPLTg4NTktNQotCWFsaWFzZXM6IFtjeXJpbGxpYywgaXNvODg1OV81LCBJU09fODg1OS01LCBpc28taXItMTQ0LCBjc0lTT0xhdGluQ3lyaWxsaWNdCi0xNi4gIENoYXJzZXRuYW1lOiBJU08tODg1OS02Ci0JZGlzcGxheU5hbWU6IElTTy04ODU5LTYKLQlhbGlhc2VzOiBbXQotMTcuICBDaGFyc2V0bmFtZTogSVNPLTg4NTktNwotCWRpc3BsYXlOYW1lOiBJU08tODg1OS03Ci0JYWxpYXNlczogW2dyZWVrOCwgRUNNQS0xMTgsIHN1bl9ldV9ncmVlaywgRUxPVF85MjgsIElTT184ODU5LTc6MTk4NywgaXNvLWlyLTEyNiwgSVNPXzg4NTktNywgaXNvODg1OV83LCBncmVlaywgY3NJU09MYXRpbkdyZWVrXQotMTguICBDaGFyc2V0bmFtZTogSVNPLTg4NTktOAotCWRpc3BsYXlOYW1lOiBJU08tODg1OS04Ci0JYWxpYXNlczogW10KLTE5LiAgQ2hhcnNldG5hbWU6IElTTy04ODU5LTkKLQlkaXNwbGF5TmFtZTogSVNPLTg4NTktOQotCWFsaWFzZXM6IFtpc28taXItMTQ4LCBsYXRpbjUsIGw1LCBJU09fODg1OS05LCBJU09fODg1OS05OjE5ODksIGNzSVNPTGF0aW41LCBpc284ODU5XzldCi0yMC4gIENoYXJzZXRuYW1lOiBKSVNfWDAyMDEKLQlkaXNwbGF5TmFtZTogSklTX1gwMjAxCi0JYWxpYXNlczogW0pJU19YMDIwMSwgWDAyMDEsIEpJUzAyMDEsIGNzSGFsZldpZHRoS2F0YWthbmFdCi0yMS4gIENoYXJzZXRuYW1lOiBKSVNfWDAyMTItMTk5MAotCWRpc3BsYXlOYW1lOiBKSVNfWDAyMTItMTk5MAotCWFsaWFzZXM6IFtqaXNfeDAyMTItMTk5MCwgaXNvLWlyLTE1OSwgeDAyMTIsIEpJUzAyMTIsIGNzSVNPMTU5SklTWDAyMTIxOTkwXQotMjIuICBDaGFyc2V0bmFtZTogS09JOC1SCi0JZGlzcGxheU5hbWU6IEtPSTgtUgotCWFsaWFzZXM6IFtrb2k4LCBjc2tvaThyXQotMjMuICBDaGFyc2V0bmFtZTogU2hpZnRfSklTCi0JZGlzcGxheU5hbWU6IFNoaWZ0X0pJUwotCWFsaWFzZXM6IFtzaGlmdC1qaXMsIHgtc2ppcywgbXNfa2FuamksIHNoaWZ0X2ppcywgY3NTaGlmdEpJUywgc2ppcywgcGNrXQotMjQuICBDaGFyc2V0bmFtZTogVElTLTYyMAotCWRpc3BsYXlOYW1lOiBUSVMtNjIwCi0JYWxpYXNlczogW10KLTI1LiAgQ2hhcnNldG5hbWU6IFVTLUFTQ0lJCi0JZGlzcGxheU5hbWU6IFVTLUFTQ0lJCi0JYWxpYXNlczogW0lTTzY0Ni1VUywgSUJNMzY3LCBBU0NJSSwgY3AzNjcsIGFzY2lpNywgQU5TSV9YMy40LTE5ODYsIGlzby1pci02LCB1cywgNjQ2LCBpc29fNjQ2LmlydjoxOTgzLCBjc0FTQ0lJLCBBTlNJX1gzLjQtMTk2OCwgSVNPXzY0Ni5pcnY6MTk5MV0KLTI2LiAgQ2hhcnNldG5hbWU6IFVURi0xNgotCWRpc3BsYXlOYW1lOiBVVEYtMTYKLQlhbGlhc2VzOiBbVVRGXzE2XQotMjcuICBDaGFyc2V0bmFtZTogVVRGLTE2QkUKLQlkaXNwbGF5TmFtZTogVVRGLTE2QkUKLQlhbGlhc2VzOiBbWC1VVEYtMTZCRSwgVVRGXzE2QkUsIElTTy0xMDY0Ni1VQ1MtMl0KLTI4LiAgQ2hhcnNldG5hbWU6IFVURi0xNkxFCi0JZGlzcGxheU5hbWU6IFVURi0xNkxFCi0JYWxpYXNlczogW1VURl8xNkxFLCBYLVVURi0xNkxFXQotMjkuICBDaGFyc2V0bmFtZTogVVRGLTgKLQlkaXNwbGF5TmFtZTogVVRGLTgKLQlhbGlhc2VzOiBbVVRGOF0KLTMwLiAgQ2hhcnNldG5hbWU6IHdpbmRvd3MtMTI1MAotCWRpc3BsYXlOYW1lOiB3aW5kb3dzLTEyNTAKLQlhbGlhc2VzOiBbY3AxMjUwXQotMzEuICBDaGFyc2V0bmFtZTogd2luZG93cy0xMjUxCi0JZGlzcGxheU5hbWU6IHdpbmRvd3MtMTI1MQotCWFsaWFzZXM6IFtjcDEyNTFdCi0zMi4gIENoYXJzZXRuYW1lOiB3aW5kb3dzLTEyNTIKLQlkaXNwbGF5TmFtZTogd2luZG93cy0xMjUyCi0JYWxpYXNlczogW2NwMTI1Ml0KLTMzLiAgQ2hhcnNldG5hbWU6IHdpbmRvd3MtMTI1MwotCWRpc3BsYXlOYW1lOiB3aW5kb3dzLTEyNTMKLQlhbGlhc2VzOiBbY3AxMjUzXQotMzQuICBDaGFyc2V0bmFtZTogd2luZG93cy0xMjU0Ci0JZGlzcGxheU5hbWU6IHdpbmRvd3MtMTI1NAotCWFsaWFzZXM6IFtjcDEyNTRdCi0zNS4gIENoYXJzZXRuYW1lOiB3aW5kb3dzLTEyNTUKLQlkaXNwbGF5TmFtZTogd2luZG93cy0xMjU1Ci0JYWxpYXNlczogW10KLTM2LiAgQ2hhcnNldG5hbWU6IHdpbmRvd3MtMTI1NgotCWRpc3BsYXlOYW1lOiB3aW5kb3dzLTEyNTYKLQlhbGlhc2VzOiBbXQotMzcuICBDaGFyc2V0bmFtZTogd2luZG93cy0xMjU3Ci0JZGlzcGxheU5hbWU6IHdpbmRvd3MtMTI1NwotCWFsaWFzZXM6IFtjcDEyNTddCi0zOC4gIENoYXJzZXRuYW1lOiB3aW5kb3dzLTEyNTgKLQlkaXNwbGF5TmFtZTogd2luZG93cy0xMjU4Ci0JYWxpYXNlczogW10KLTM5LiAgQ2hhcnNldG5hbWU6IHdpbmRvd3MtMzFqCi0JZGlzcGxheU5hbWU6IHdpbmRvd3MtMzFqCi0JYWxpYXNlczogW2NzV2luZG93czMxSiwgd2luZG93cy05MzIsIE1TOTMyXQotNDAuICBDaGFyc2V0bmFtZTogeC1FVUMtQ04KLQlkaXNwbGF5TmFtZTogeC1FVUMtQ04KLQlhbGlhc2VzOiBbZ2IyMzEyLCBFVUNfQ04sIGV1Y2NuLCBldWMtY24sIGdiMjMxMi04MCwgZ2IyMzEyLTE5ODBdCi00MS4gIENoYXJzZXRuYW1lOiB4LWV1Yy1qcC1saW51eAotCWRpc3BsYXlOYW1lOiB4LWV1Yy1qcC1saW51eAotCWFsaWFzZXM6IFtldWNfanBfbGludXgsIGV1Yy1qcC1saW51eF0KLTQyLiAgQ2hhcnNldG5hbWU6IHgtRVVDLVRXCi0JZGlzcGxheU5hbWU6IHgtRVVDLVRXCi0JYWxpYXNlczogW2NuczExNjQzLCBldWNfdHcsIEVVQy1UVywgZXVjdHddCi00My4gIENoYXJzZXRuYW1lOiB4LUlTQ0lJOTEKLQlkaXNwbGF5TmFtZTogeC1JU0NJSTkxCi0JYWxpYXNlczogW2lzY2lpLCBTVF9TRVZfMzU4LTg4LCBpc28taXItMTUzLCBjc0lTTzE1M0dPU1QxOTc2ODc0LCBJU0NJSTkxXQotNDQuICBDaGFyc2V0bmFtZTogeC1KSVMwMjA4Ci0JZGlzcGxheU5hbWU6IHgtSklTMDIwOAotCWFsaWFzZXM6IFtKSVNfQzY2MjYtMTk4MywgSklTMDIwOCwgY3NJU084N0pJU1gwMjA4LCB4MDIwOCwgSklTX1gwMjA4LTE5ODMsIGlzby1pci04N10KLTQ1LiAgQ2hhcnNldG5hbWU6IHgtSm9oYWIKLQlkaXNwbGF5TmFtZTogeC1Kb2hhYgotCWFsaWFzZXM6IFtqb2hhYiwgbXMxMzYxLCBrc2M1NjAxLTE5OTIsIGtzYzU2MDFfMTk5Ml0KLTQ2LiAgQ2hhcnNldG5hbWU6IHgtTVM5NTAtSEtTQ1MKLQlkaXNwbGF5TmFtZTogeC1NUzk1MC1IS1NDUwotCWFsaWFzZXM6IFtNUzk1MF9IS1NDU10KLTQ3LiAgQ2hhcnNldG5hbWU6IHgtbXN3aW4tOTM2Ci0JZGlzcGxheU5hbWU6IHgtbXN3aW4tOTM2Ci0JYWxpYXNlczogW21zOTM2LCBtc185MzZdCi00OC4gIENoYXJzZXRuYW1lOiB4LXdpbmRvd3MtOTQ5Ci0JZGlzcGxheU5hbWU6IHgtd2luZG93cy05NDkKLQlhbGlhc2VzOiBbd2luZG93czk0OSwgbXNfOTQ5LCBtczk0OV0KLTQ5LiAgQ2hhcnNldG5hbWU6IHgtd2luZG93cy05NTAKLQlkaXNwbGF5TmFtZTogeC13aW5kb3dzLTk1MAotCWFsaWFzZXM6IFt3aW5kb3dzLTk1MCwgbXM5NTBdCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3BsdWdpbi5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDc2NWNhNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBwcm9wZXJ0aWVzIGZpbGUgZm9yIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcKLUJ1bmRsZS1WZW5kb3IuMCA9IEVjbGlwc2Uub3JnCi1CdW5kbGUtTmFtZS4wID0gRW5jb2RpbmcgVGVzdHMgUGx1Zy1pbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvQ3JlYXRlQ29kZWRSZWFkZXJUZXN0ZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvQ3JlYXRlQ29kZWRSZWFkZXJUZXN0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmU1Y2YzZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL0NyZWF0ZUNvZGVkUmVhZGVyVGVzdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmc7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS5uaW8uY2hhcnNldC5JbGxlZ2FsQ2hhcnNldE5hbWVFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uaW8uY2hhcnNldC5NYWxmb3JtZWRJbnB1dEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLnppcC5aaXBFbnRyeTsKLWltcG9ydCBqYXZhLnV0aWwuemlwLlppcE91dHB1dFN0cmVhbTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0RGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZVJvb3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuQ29kZWRSZWFkZXJDcmVhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5Ob25Db250ZW50QmFzZWRFbmNvZGluZ1J1bGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5leGNlcHRpb25zLlVuc3VwcG9ydGVkQ2hhcnNldEV4Y2VwdGlvbldpdGhEZXRhaWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy51dGlsLlByb2plY3RVbnppcFV0aWxpdHk7Ci0KLS8qKgotICogVGhpcyBjbGFzcyBpcyBpbnRlbmRlZCB0byBiZSBleGVjdXRlZCBvbmx5IGF0IGRldmVsb3BtZW50IHRpbWUsIGFuZCBpdAotICogY3JlYXRlcyB0aGUgY2xhc3MgdG8gSlVuaXQgdGVzdCBhbGwgdGhlIGZpbGVzIGZvdW5kIGluIHRoZSB0ZXN0ZmlsZXMKLSAqIGRpcmVjdG9yeS4KLSAqLwotcHVibGljIGNsYXNzIENyZWF0ZUNvZGVkUmVhZGVyVGVzdGVyIGV4dGVuZHMgVGVzdENhc2UgewotCS8vCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVEaXIgPSAiaHRtbC8iOwotCS8vCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVSb290ID0KLQkvLyAiL2J1aWxkcy9Xb3Jrc3BhY2VzL0hlYWRXb3Jrc3BhY2Uvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy8iOwotCS8vCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVMb2NhdGlvbiA9IGZpbGVSb290ICsgZmlsZURpcjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVEZJTEVTX1pJUEZJTEVfTkFNRSA9ICJ0ZXN0ZmlsZXMuemlwIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9GSUxFX0RJUiA9ICJ0ZXN0ZmlsZXMiOyAvLyROT04tTkxTLTEkCi0JLy8gbmVlZHMgdG8gYmUgc3RhdGljLCBzaW5jZSBKVW5pdCBjcmVhdGVzIGRpZmZlcmVuY2UgaW5zdGFuY2VzIGZvciBlYWNoCi0JLy8gdGVzdAotCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gZlRlc3RQcm9qZWN0SW5pdGlhbGl6ZWQ7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfUFJPSkVDVF9OQU1FID0gIm9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmciOyAvLyROT04tTkxTLTEkCi0Jc3RhdGljIElQcm9qZWN0IGZUZXN0UHJvamVjdDsKLQlwcml2YXRlIHN0YXRpYyBpbnQgblNldHVwcyA9IDA7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIGN1cnJlbnRQbGF0Zm9ybUNoYXJzZXQgPSBnZXRQbGF0Zm9ybURlZmF1bHQoKTsKLQlwcml2YXRlIGJvb2xlYW4gUkVDUkVBVEVfRklMRVMgPSBmYWxzZTsKLQotCS8qKgotCSAqICAKLQkgKi8KLQlwdWJsaWMgQ3JlYXRlQ29kZWRSZWFkZXJUZXN0ZXIoKSB7Ci0JCXN1cGVyKCk7Ci0JCS8vU3lzdGVtLm91dC5wcmludGxuKGN1cnJlbnRQbGF0Zm9ybUNoYXJzZXQpOwotCX0KLQotCS8qKgotCSAqIEByZXR1cm4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0UGxhdGZvcm1EZWZhdWx0KCkgewotCQlTdHJpbmcgcGxhdGZvcm1EZWZhdWx0ID0gTm9uQ29udGVudEJhc2VkRW5jb2RpbmdSdWxlcy51c2VEZWZhdWx0TmFtZVJ1bGVzKG51bGwpOwotCQlyZXR1cm4gcGxhdGZvcm1EZWZhdWx0OwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQkJLy8JCQkJdHJ5IHsKLQkJLy8JCQkJCW5ldyBDcmVhdGVDb2RlZFJlYWRlclRlc3RlcigpLmRvQ3JlYXRlQWxsRmlsZXMoKTsKLQkJLy8JCQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCS8vCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkvLwkJCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCS8vCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkvLwkJCQl9Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBjcmVhdGVQcm9qZWN0KElQcm9qZWN0IHByb2plY3QsIElQYXRoIGxvY2F0aW9uUGF0aCwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCWlmIChtb25pdG9yID09IG51bGwpIHsKLQkJCW1vbml0b3IgPSBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpOwotCQl9Ci0JCW1vbml0b3IuYmVnaW5UYXNrKCJjcmVhdGluZyB0ZXN0IHByb2plY3QiLCAxMCk7Ci0JCS8vIGNyZWF0ZSB0aGUgcHJvamVjdAotCQl0cnkgewotCQkJaWYgKCFwcm9qZWN0LmV4aXN0cygpKSB7Ci0JCQkJSVByb2plY3REZXNjcmlwdGlvbiBkZXNjID0gcHJvamVjdC5nZXRXb3Jrc3BhY2UoKS5uZXdQcm9qZWN0RGVzY3JpcHRpb24ocHJvamVjdC5nZXROYW1lKCkpOwotCQkJCWlmIChQbGF0Zm9ybS5nZXRMb2NhdGlvbigpLmVxdWFscyhsb2NhdGlvblBhdGgpKSB7Ci0JCQkJCWxvY2F0aW9uUGF0aCA9IG51bGw7Ci0JCQkJfQotCQkJCWRlc2Muc2V0TG9jYXRpb24obG9jYXRpb25QYXRoKTsKLQkJCQlwcm9qZWN0LmNyZWF0ZShkZXNjLCBtb25pdG9yKTsKLQkJCQltb25pdG9yID0gbnVsbDsKLQkJCX0KLQkJCWlmICghcHJvamVjdC5pc09wZW4oKSkgewotCQkJCXByb2plY3Qub3Blbihtb25pdG9yKTsKLQkJCQltb25pdG9yID0gbnVsbDsKLQkJCX0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb25pdG9yICE9IG51bGwpIHsKLQkJCQltb25pdG9yLmRvbmUoKTsKLQkJCX0KLQkJfQotCX0KLQotCXByaXZhdGUgc3RhdGljIHZvaWQgZ2V0QW5kQ3JlYXRlUHJvamVjdCgpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJLy9UZXN0c1BsdWdpbiB0ZXN0c1BsdWdpbiA9IChUZXN0c1BsdWdpbikKLQkJLy8gUGxhdGZvcm0uZ2V0UGx1Z2luKCJvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nIik7Ci0JCUlXb3Jrc3BhY2Ugd29ya3NwYWNlID0gVGVzdHNQbHVnaW4uZ2V0V29ya3NwYWNlKCk7Ci0JCUlXb3Jrc3BhY2VSb290IHJvb3QgPSB3b3Jrc3BhY2UuZ2V0Um9vdCgpOwotCQlmVGVzdFByb2plY3QgPSByb290LmdldFByb2plY3QoVEVTVF9QUk9KRUNUX05BTUUpOwotCQkvLyB0aGlzIGZvcm0gY3JlYXRlcyBwcm9qZWN0IGFzICJsaW5rZWQiIGJhY2sgdG8gJ2ZpbGVSb290JwotCQkvL2NyZWF0ZVByb2plY3QodGVzdFByb2plY3QsIG5ldyBQYXRoKGZpbGVSb290KSwgbnVsbCk7Ci0JCWNyZWF0ZVByb2plY3QoZlRlc3RQcm9qZWN0LCBudWxsLCBudWxsKTsKLQkJZlRlc3RQcm9qZWN0LnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQlhc3NlcnRUcnVlKGZUZXN0UHJvamVjdC5leGlzdHMoKSk7Ci0JCS8vCQlJQ29udGFpbmVyIHRlc3RGaWxlcyA9IHRlc3RQcm9qZWN0LmdldEZvbGRlcigidGVzdGZpbGVzIik7Ci0JCS8vCQlhc3NlcnRUcnVlKHRlc3RGaWxlcy5leGlzdHMoKSk7Ci0JCS8vCQlJUmVzb3VyY2VbXSBhbGxGb2xkZXJzID0gdGVzdEZpbGVzLm1lbWJlcnMoKTsKLQkJLy8JCWFzc2VydE5vdE51bGwoYWxsRm9sZGVycyk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNyZWF0ZVRlc3RNZXRob2RTb3VyY2UoaW50IGNvdW50LCBTdHJpbmcgZmlsZVBhdGhBbmROYW1lLCBTdHJpbmcgZGV0ZWN0ZWRDaGFyc2V0TmFtZSwgU3RyaW5nIGphdmFDaGFyc2V0TmFtZSwgU3RyaW5nIGV4cGVjdGVkRXhjZXB0aW9uKSB7Ci0JCVN0cmluZyBqYXZhQ2hhcnNldE5hbWVPcktleSA9IGphdmFDaGFyc2V0TmFtZTsKLQkJaWYgKG51bGwgIT0gamF2YUNoYXJzZXROYW1lT3JLZXkgJiYgamF2YUNoYXJzZXROYW1lT3JLZXkuZXF1YWxzKGN1cnJlbnRQbGF0Zm9ybUNoYXJzZXQpKQotCQkJamF2YUNoYXJzZXROYW1lT3JLZXkgPSAiZXhwZWN0UGxhdGZvcm1DaGFyc2V0IjsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJwdWJsaWMgdm9pZCB0ZXN0RmlsZSIgKyBjb3VudCArICIgKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsiICsgIiBkb1Rlc3QoIFwiIiArIGphdmFDaGFyc2V0TmFtZU9yS2V5ICsgIlwiLCBcIiIgKyBkZXRlY3RlZENoYXJzZXROYW1lICsgIlwiLCAgXCIiICsgZmlsZVBhdGhBbmROYW1lICsgIlwiLCAiICsgZXhwZWN0ZWRFeGNlcHRpb24gKyAiKTsgfSIpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnNldFVwKCk7Ci0JCW5TZXR1cHMrKzsKLQkJaWYgKCFmVGVzdFByb2plY3RJbml0aWFsaXplZCkgewotCQkJZ2V0QW5kQ3JlYXRlUHJvamVjdCgpOwotCQkJLy8gdW56aXAgZmlsZXMgdG8gdGhlIHJvb3Qgb2Ygd29ya3NwYWNlIGRpcmVjdG9yeQotCQkJU3RyaW5nIGRlc3RpbmF0aW9uUHJvamVjdFN0cmluZyA9IGZUZXN0UHJvamVjdC5nZXRMb2NhdGlvbigpLnRvT1NTdHJpbmcoKTsKLQkJCVN0cmluZyBkZXN0aW5hdGlvbkZvbGRlciA9IGRlc3RpbmF0aW9uUHJvamVjdFN0cmluZyArICIvIjsKLQkJCS8vIHRoaXMgemlwIGZpbGUgaXMgc2l0dGluZyBpbiB0aGUgInJvb3QiIG9mIHRlc3QgcGx1Z2luCi0JCQlGaWxlIHppcEZpbGUgPSBUZXN0c1BsdWdpbi5nZXRUZXN0RmlsZSgidGVzdGZpbGVzLnppcCIpOwotCQkJUHJvamVjdFVuemlwVXRpbGl0eSBwcm9qVXRpbCA9IG5ldyBQcm9qZWN0VW56aXBVdGlsaXR5KCk7Ci0JCQlwcm9qVXRpbC51bnppcEFuZEltcG9ydCh6aXBGaWxlLCBkZXN0aW5hdGlvbkZvbGRlcik7Ci0JCQlwcm9qVXRpbC5pbml0SmF2YVByb2plY3QoVEVTVF9QUk9KRUNUX05BTUUpOwotCQkJZlRlc3RQcm9qZWN0LnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQkJZlRlc3RQcm9qZWN0SW5pdGlhbGl6ZWQgPSB0cnVlOwotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIudGVhckRvd24oKTsKLQkJblNldHVwcy0tOwotCQlpZiAoblNldHVwcyA9PSAwKSB7Ci0JCQlpZiAoIURFQlVHKSB7Ci0JCQkJLy8JCQkJRGlzcGxheSBkaXNwbGF5ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXREaXNwbGF5KCk7Ci0JCQkJLy8JCQkJZGlzcGxheS5hc3luY0V4ZWMobmV3IFJ1bm5hYmxlKCkgewotCQkJCS8vCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJLy8JCQkJCQlQcm9qZWN0VW56aXBVdGlsaXR5IHByb2pVdGlsID0gbmV3IFByb2plY3RVbnppcFV0aWxpdHkoKTsKLQkJCQkvLwkJCQkJCUlQcm9qZWN0IHByb2ogPSBmVGVzdFByb2plY3Q7Ci0JCQkJLy8JCQkJCQlmVGVzdFByb2plY3QgPSBudWxsOwotCQkJCS8vCQkJCQkJdHJ5IHsKLQkJCQkvLwkJCQkJCQlwcm9qVXRpbC5kZWxldGVQcm9qZWN0KHByb2opOwotCQkJCS8vCQkJCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCQkvLwkJCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJCS8vCQkJCQkJfQotCQkJCS8vCQkJCQl9Ci0JCQkJLy8JCQkJfSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlQWxsRmlsZXMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlpZiAoUkVDUkVBVEVfRklMRVMpIHsKLQkJCUxpc3QgYWxsRmlsZXMgPSBUZXN0c1BsdWdpbi5nZXRBbGxUZXN0RmlsZXMoVEVTVF9GSUxFX0RJUik7Ci0JCQlVUkwgb3V0cHV0RGlyVVJMID0gVGVzdHNQbHVnaW4uZ2V0SW5zdGFsbExvY2F0aW9uKCk7Ci0JCQlGaWxlIHppcG91dEZpbGUgPSBuZXcgRmlsZShvdXRwdXREaXJVUkwuZ2V0UGF0aCgpLCBURVNURklMRVNfWklQRklMRV9OQU1FKTsKLQkJCWphdmEuaW8uRmlsZU91dHB1dFN0cmVhbSB6aXBPdXQgPSBuZXcgRmlsZU91dHB1dFN0cmVhbSh6aXBvdXRGaWxlKTsKLQkJCVppcE91dHB1dFN0cmVhbSB6aXBPdXRwdXRTdHJlYW0gPSBuZXcgWmlwT3V0cHV0U3RyZWFtKHppcE91dCk7Ci0JCQlpbnQgY291bnQgPSAxOwotCQkJZm9yIChJdGVyYXRvciBpdGVyID0gYWxsRmlsZXMuaXRlcmF0b3IoKTsgaXRlci5oYXNOZXh0KCk7KSB7Ci0JCQkJRmlsZSBmaWxlID0gKEZpbGUpIGl0ZXIubmV4dCgpOwotCQkJCWNyZWF0ZVppcEVudHJ5KHppcE91dHB1dFN0cmVhbSwgZmlsZSk7Ci0JCQkJQ29kZWRSZWFkZXJDcmVhdG9yIGNvZGVkUmVhZGVyQ3JlYXRvciA9IG5ldyBDb2RlZFJlYWRlckNyZWF0b3IoKTsKLQkJCQljb2RlZFJlYWRlckNyZWF0b3Iuc2V0KGZpbGUuZ2V0TmFtZSgpLCBuZXcgRmlsZUlucHV0U3RyZWFtKGZpbGUpKTsKLQkJCQlTdHJpbmcgZGV0ZWN0ZWRDaGFyc2V0TmFtZSA9IG51bGw7Ci0JCQkJU3RyaW5nIGphdmFDaGFyc2V0TmFtZSA9IG51bGw7Ci0JCQkJU3RyaW5nIGV4cGVjdGVkRXhjZXB0aW9uID0gbnVsbDsKLQkJCQl0cnkgewotCQkJCQkvLyBqdXN0IHVzZWQgZm9yIGRlYnVnIGluZm8sIGJ1dCBjYW4gdGhyb3cgZXhjZXB0aW9uCi0JCQkJCWphdmFDaGFyc2V0TmFtZSA9IGNvZGVkUmVhZGVyQ3JlYXRvci5nZXRFbmNvZGluZ01lbWVudG8oKS5nZXRKYXZhQ2hhcnNldE5hbWUoKTsKLQkJCQkJZGV0ZWN0ZWRDaGFyc2V0TmFtZSA9IGNvZGVkUmVhZGVyQ3JlYXRvci5nZXRFbmNvZGluZ01lbWVudG8oKS5nZXREZXRlY3RlZENoYXJzZXROYW1lKCk7Ci0JCQkJfQotCQkJCWNhdGNoIChVbnN1cHBvcnRlZENoYXJzZXRFeGNlcHRpb25XaXRoRGV0YWlsIGUpIHsKLQkJCQkJLy8gaWdub3JlIGZvciBzaW1wbHkgY3JlYXRpbmcgdGVzdHMKLQkJCQkJZXhwZWN0ZWRFeGNlcHRpb24gPSBlLmdldENsYXNzKCkuZ2V0TmFtZSgpICsgIi5jbGFzcyI7Ci0JCQkJfQotCQkJCWNhdGNoIChNYWxmb3JtZWRJbnB1dEV4Y2VwdGlvbiBlKSB7Ci0JCQkJCS8vIGlnbm9yZSBmb3Igc2ltcGx5IGNyZWF0aW5nIHRlc3RzCi0JCQkJCWV4cGVjdGVkRXhjZXB0aW9uID0gZS5nZXRDbGFzcygpLmdldE5hbWUoKSArICIuY2xhc3MiOwotCQkJCX0KLQkJCQljYXRjaCAoSWxsZWdhbENoYXJzZXROYW1lRXhjZXB0aW9uIGUpIHsKLQkJCQkJLy8gaWdub3JlIGZvciBzaW1wbHkgY3JlYXRpbmcgdGVzdHMKLQkJCQkJZXhwZWN0ZWRFeGNlcHRpb24gPSBlLmdldENsYXNzKCkuZ2V0TmFtZSgpICsgIi5jbGFzcyI7Ci0JCQkJfQotCQkJCVN0cmluZyBzdWJwYXRoID0gZ2V0U3ViUGF0aE5hbWUoZmlsZSk7Ci0JCQkJY3JlYXRlVGVzdE1ldGhvZFNvdXJjZShjb3VudCwgc3VicGF0aCwgZGV0ZWN0ZWRDaGFyc2V0TmFtZSwgamF2YUNoYXJzZXROYW1lLCBleHBlY3RlZEV4Y2VwdGlvbik7Ci0JCQkJY291bnQrKzsKLQkJCX0KLQkJCXppcE91dHB1dFN0cmVhbS5jbG9zZSgpOwotCQkJemlwT3V0LmNsb3NlKCk7Ci0JCQlhc3NlcnRUcnVlKHRydWUpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgZ2V0U3ViUGF0aE5hbWUoRmlsZSBmaWxlKSB7Ci0JCVN0cmluZyBwYXRoID0gZmlsZS5nZXRQYXRoKCk7Ci0JCWludCBsYXN0SW5kZXggPSBwYXRoLmxhc3RJbmRleE9mKFRFU1RfRklMRV9ESVIpOwotCQlTdHJpbmcgc3VicGF0aCA9IHBhdGguc3Vic3RyaW5nKGxhc3RJbmRleCk7Ci0JCXN1YnBhdGggPSBzdWJwYXRoLnJlcGxhY2UoJ1xcJywgJy8nKTsKLQkJcmV0dXJuIHN1YnBhdGg7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIHppcE91dHB1dFN0cmVhbQotCSAqIEBwYXJhbSBlbGVtZW50Ci0JICovCi0JcHJpdmF0ZSB2b2lkIGNyZWF0ZVppcEVudHJ5KFppcE91dHB1dFN0cmVhbSB6aXBPdXRwdXRTdHJlYW0sIEZpbGUgZmlsZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIHN1YlBhdGhOYW1lID0gZ2V0U3ViUGF0aE5hbWUoZmlsZSk7Ci0JCVppcEVudHJ5IHppcEVudHJ5ID0gbmV3IFppcEVudHJ5KHN1YlBhdGhOYW1lKTsKLQkJemlwT3V0cHV0U3RyZWFtLnB1dE5leHRFbnRyeSh6aXBFbnRyeSk7Ci0JCUlucHV0U3RyZWFtIGlucHV0U3RyZWFtID0gbmV3IEZpbGVJbnB1dFN0cmVhbShmaWxlKTsKLQkJaW50IG5SZWFkID0gMDsKLQkJYnl0ZVtdIGJ1ZmZlciA9IG5ldyBieXRlWzEwMjQgKiA4XTsKLQkJd2hpbGUgKG5SZWFkICE9IC0xKSB7Ci0JCQluUmVhZCA9IGlucHV0U3RyZWFtLnJlYWQoYnVmZmVyKTsKLQkJCWlmIChuUmVhZCA+IDApIHsKLQkJCQl6aXBPdXRwdXRTdHJlYW0ud3JpdGUoYnVmZmVyLCAwLCBuUmVhZCk7Ci0JCQl9Ci0JCX0KLQkJemlwT3V0cHV0U3RyZWFtLmZsdXNoKCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9FbmNvZGluZ1Rlc3RTdWl0ZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9FbmNvZGluZ1Rlc3RTdWl0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NDI5YTM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvRW5jb2RpbmdUZXN0U3VpdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcucHJvcGVydGllcy5UZXN0Q29tbW9uTmFtZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5wcm9wZXJ0aWVzLlRlc3RPdmVycmlkZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5yZWFkLlRlc3RDb2RlZFJlYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnJlYWQuVGVzdENvZGVkUmVhZGVyT25HZW5uZWRGaWxlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnJlYWQuVGVzdENvbnRlbnREZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnJlYWQuVGVzdENvbnRlbnRUeXBlRGVzY3JpcHRpb25Pbkdlbm5lZEZpbGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcucmVhZC5UZXN0Q29udGVudFR5cGVEZXRlY3Rpb25Gb3JYTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5yZWFkLlRlc3RDb250ZW50VHlwZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy53cml0ZS5UZXN0Q29kZWRXcml0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnhtbC5YTUxFbmNvZGluZ1Rlc3RzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcueG1sLlhNTEhlYWRUb2tlbml6ZXJUZXN0ZXI7Ci0KLQotcHVibGljIGNsYXNzIEVuY29kaW5nVGVzdFN1aXRlIGV4dGVuZHMgVGVzdFN1aXRlIHsKLQotCS8vIEZJWE1FOiBjb21tZW50ZWQgb3V0IGxhbmcuIHNwZWMuIHRlc3RzLCB1bnRpbCBhbGwgbWlncmF0ZWQgdG8gb3JnLmVjbGlwc2UgCi0JLy8gWzI1ODM0M10galVuaXQgZmFpbHVyZXMgYWZ0ZXIgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnhtbCBjb250ZW50IHR5cGUgaXMgZGlzYWJsZWQKLQlwcml2YXRlIHN0YXRpYyBDbGFzc1tdIGNsYXNzZXMgPSBuZXcgQ2xhc3NbXXtUZXN0T3ZlcnJpZGVzLmNsYXNzLCBUZXN0Q29kZWRSZWFkZXIuY2xhc3MsIFRlc3RDb2RlZFdyaXRlLmNsYXNzLCBYTUxFbmNvZGluZ1Rlc3RzLmNsYXNzLCBYTUxIZWFkVG9rZW5pemVyVGVzdGVyLmNsYXNzLCBUZXN0Q29udGVudFR5cGVEZXNjcmlwdGlvbk9uR2VubmVkRmlsZXMuY2xhc3MsIFRlc3RDb2RlZFJlYWRlck9uR2VubmVkRmlsZXMuY2xhc3MsIFRlc3RDb250ZW50RGVzY3JpcHRpb24uY2xhc3MsIFRlc3RDb250ZW50VHlwZXMuY2xhc3MsIFRlc3RDb21tb25OYW1lcy5jbGFzcywgVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uRm9yWE1MLmNsYXNzfTsKLS8vCXByaXZhdGUgc3RhdGljIENsYXNzW10gY2xhc3NlcyA9IG5ldyBDbGFzc1tde1Rlc3RPdmVycmlkZXMuY2xhc3MsIFRlc3RDb2RlZFJlYWRlci5jbGFzcywgVGVzdENvZGVkV3JpdGUuY2xhc3MsIFhNTEVuY29kaW5nVGVzdHMuY2xhc3MsIFhNTEhlYWRUb2tlbml6ZXJUZXN0ZXIuY2xhc3MsIFRlc3RDb250ZW50VHlwZURlc2NyaXB0aW9uT25HZW5uZWRGaWxlcy5jbGFzcywgVGVzdENvZGVkUmVhZGVyT25HZW5uZWRGaWxlcy5jbGFzcywgVGVzdENvbnRlbnREZXNjcmlwdGlvbi5jbGFzcywgVGVzdENvbnRlbnRUeXBlcy5jbGFzcywgVGVzdENvbW1vbk5hbWVzLmNsYXNzfTsKLQkvL3ByaXZhdGUgc3RhdGljIENsYXNzW10gY2xhc3NlcyA9IG5ldyBDbGFzc1tde1Rlc3RPdmVycmlkZXMuY2xhc3MsIENTU0VuY29kaW5nVGVzdGVyLmNsYXNzLCBDU1NIZWFkVG9rZW5pemVyVGVzdGVyLmNsYXNzLCBIVE1MRW5jb2RpbmdUZXN0cy5jbGFzcywgSFRNTEhlYWRUb2tlbml6ZXJUZXN0ZXIuY2xhc3MsIEpTUEVuY29kaW5nVGVzdHMuY2xhc3MsIEpTUEhlYWRUb2tlbml6ZXJUZXN0ZXIuY2xhc3MsIFRlc3RDb2RlZFJlYWRlci5jbGFzcywgVGVzdENvZGVkV3JpdGUuY2xhc3MsIFhNTEVuY29kaW5nVGVzdHMuY2xhc3MsIFhNTEhlYWRUb2tlbml6ZXJUZXN0ZXIuY2xhc3MsIFhNTE1hbGZvcm1lZElucHV0VGVzdHMuY2xhc3MsIFRlc3RDb250ZW50VHlwZURlc2NyaXB0aW9uT25HZW5uZWRGaWxlcy5jbGFzcywgVGVzdENvZGVkUmVhZGVyT25HZW5uZWRGaWxlcy5jbGFzcywgVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uLmNsYXNzLCBUZXN0Q29udGVudERlc2NyaXB0aW9uLmNsYXNzLCBUZXN0Q29udGVudFR5cGVzLmNsYXNzLCBUZXN0Q29tbW9uTmFtZXMuY2xhc3N9OwotCXB1YmxpYyBFbmNvZGluZ1Rlc3RTdWl0ZSgpIHsKLQkJc3VwZXIoIkVuY29kaW5nIFRlc3QgU3VpdGUiKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjbGFzc2VzLmxlbmd0aDsgaSsrKSB7Ci0JCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoY2xhc3Nlc1tpXSwgY2xhc3Nlc1tpXS5nZXROYW1lKCkpKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEBwYXJhbSB0aGVDbGFzcwotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIEVuY29kaW5nVGVzdFN1aXRlKENsYXNzIHRoZUNsYXNzLCBTdHJpbmcgbmFtZSkgewotCQlzdXBlcih0aGVDbGFzcywgbmFtZSk7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIHRoZUNsYXNzCi0JICovCi0JcHVibGljIEVuY29kaW5nVGVzdFN1aXRlKENsYXNzIHRoZUNsYXNzKSB7Ci0JCXN1cGVyKHRoZUNsYXNzKTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBFbmNvZGluZ1Rlc3RTdWl0ZShTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgRW5jb2RpbmdUZXN0U3VpdGUoKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL0ZpbGVVdGlsLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL0ZpbGVVdGlsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhZDI5NDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9GaWxlVXRpbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmc7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci0KLS8qKgotICogQGF1dGhvciBkYXZpZHcKLSAqIAotICogVG8gY2hhbmdlIHRoaXMgZ2VuZXJhdGVkIGNvbW1lbnQgZWRpdCB0aGUgdGVtcGxhdGUgdmFyaWFibGUgInR5cGVjb21tZW50IjoKLSAqIFdpbmRvdz5QcmVmZXJlbmNlcz5KYXZhPlRlbXBsYXRlcy4gVG8gZW5hYmxlIGFuZCBkaXNhYmxlIHRoZSBjcmVhdGlvbiBvZgotICogdHlwZSBjb21tZW50cyBnbyB0byBXaW5kb3c+UHJlZmVyZW5jZXM+SmF2YT5Db2RlIEdlbmVyYXRpb24uCi0gKi8KLWNsYXNzIEZpbGVVdGlsIHsKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgY3VycmVudFdvcmtzcGFjZSA9ICJkZXYwNzI1IjsKLQlwcml2YXRlIHN0YXRpYyBib29sZWFuIHByaW50ZWRPbmNlID0gZmFsc2U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgZkxpbmVTZXBhcmF0b3IgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIik7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgZlBhdGhTZXBhcmF0b3IgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoInBhdGguc2VwYXJhdG9yIik7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgZkZpbGVTZXBhcmF0b3IgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImZpbGUuc2VwYXJhdG9yIik7Ci0KLQlwdWJsaWMgc3RhdGljIEZpbGUgbWFrZUZpbGVGb3IoU3RyaW5nIGRpcmVjdG9yeSwgU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgdGVzdFJlc3VsdHNEaXJlY3RvcnlQcmVmaXgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBpbnN0YWxsUGF0aCA9ICIvYnVpbGRzL1dvcmtzcGFjZXMvIiArIGN1cnJlbnRXb3Jrc3BhY2UgKyAiL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvIjsKLQkJVVJMIHVybCA9IG5ldyBVUkwoImZpbGU6Ly8iICsgaW5zdGFsbFBhdGgpOwotCQlTdHJpbmcgdG90YWxEaXJlY3RvcnkgPSBpbnN0YWxsUGF0aCArIGRpcmVjdG9yeTsKLQkJU3RyaW5nIHRvdGFsUGF0aCA9IHRvdGFsRGlyZWN0b3J5ICsgIi8iICsgZmlsZW5hbWU7Ci0JCVVSTCB0b3RhbFVSTCA9IG5ldyBVUkwodXJsLCB0b3RhbFBhdGgpOwotCQlVUkwgZmluYWx1cmwgPSBGaWxlTG9jYXRvci50b0ZpbGVVUkwodG90YWxVUkwpOwotCQlTdHJpbmcgZmluYWxGaWxlID0gZmluYWx1cmwuZ2V0RmlsZSgpOwotCQlGaWxlIGZpbGUgPSBuZXcgRmlsZShmaW5hbEZpbGUpOwotCQlTdHJpbmcgZmluYWxQYXRoID0gZmlsZS5nZXRQYXJlbnQoKTsKLQkJRmlsZSBkaXIgPSBuZXcgRmlsZShmaW5hbFBhdGgpOwotCQlpZiAoIXByaW50ZWRPbmNlKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIk91dHB1dCB3cml0dGVuIHRvICIgKyBkaXIuZ2V0QWJzb2x1dGVQYXRoKCkpOwotCQkJcHJpbnRlZE9uY2UgPSB0cnVlOwotCQl9Ci0KLQkJaWYgKCFkaXIuZXhpc3RzKCkpIHsKLQkJCWRpci5ta2RpcnMoKTsKLQkJfQotCQlyZXR1cm4gZmlsZTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvR2VuZXJhdGVGaWxlcy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9HZW5lcmF0ZUZpbGVzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyN2Y0ZTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9HZW5lcmF0ZUZpbGVzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZzsKLQotCi1wdWJsaWMgY2xhc3MgR2VuZXJhdGVGaWxlcyB7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBnZXRNYWluRGlyZWN0b3J5QmFzZWRPblZNTmFtZSgpIHsKLQkJU3RyaW5nIG1haW5EaXJlY3RvcnkgPSAidGVzdGZpbGVzL2dlbmVkRmlsZXMtIiArIGdldEphdmFWZXJzaW9uKCk7Ci0JCXJldHVybiBtYWluRGlyZWN0b3J5OwotCX0KLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBnZXRKYXZhVmVyc2lvbigpIHsKLQkJU3RyaW5nIG5hbWUgPSBudWxsOyAvL1N5c3RlbS5nZXRQcm9wZXJ0eSgiamF2YS5mdWxsdmVyc2lvbiIpOwotCQlpZiAobmFtZSA9PSBudWxsKSB7Ci0JCQluYW1lID0gU3lzdGVtLmdldFByb3BlcnR5KCJqYXZhLnZlcnNpb24iKSArICIgKCIgKyBTeXN0ZW0uZ2V0UHJvcGVydHkoImphdmEucnVudGltZS52ZXJzaW9uIikgKyAiKSI7Ci0JCX0KLQkJcmV0dXJuIG5hbWU7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL0dlbmVyYXRlWE1MRmlsZXMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvR2VuZXJhdGVYTUxGaWxlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZGQwZTc1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvR2VuZXJhdGVYTUxGaWxlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDA5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nOwotCi1pbXBvcnQgamF2YS5pby5CdWZmZXJlZFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZVdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtV3JpdGVyOwotaW1wb3J0IGphdmEuaW8uUHJpbnRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uV3JpdGVyOwotaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuQ2hhcnNldDsKLWltcG9ydCBqYXZhLm5pby5jaGFyc2V0LkNoYXJzZXRFbmNvZGVyOwotaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuQ29kaW5nRXJyb3JBY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmNvbnRlbnQuSUNvbnRlbnREZXNjcmlwdGlvbjsKLQotLyoqCi0gKiBUaGUgcHVycG9zZSBhbmQgbG9naWMgb2YgdGhpcyBjbGFzcyBpcyB0byBjcmVhdGUgc21hbGwgIlhNTCBmaWxlcyIgb2YKLSAqIHZhcmlvdXMsIGtub3duIGVuY29kaW5ncywgd3JpdGUgdGhlbSB0byBmaWxlcywgYW5kIGluIGxhdGVyIHRlc3RzLCBiZSBzdXJlCi0gKiBhcHByb3ByaWF0ZSBlbmNvZGluZyBjYW4gYmUgZGV0ZWN0ZWQsIGFuZCByZWFkIGluIGFuZCBpbnRhY3QgY2hhcmFjdGVycy4KLSAqLwotcHVibGljIGNsYXNzIEdlbmVyYXRlWE1MRmlsZXMgZXh0ZW5kcyBHZW5lcmF0ZUZpbGVzIHsKLQlwcml2YXRlIFN0cmluZyBMRiA9ICJcbiI7Ci0JcHJpdmF0ZSBTdHJpbmcgQ1IgPSAiXHIiOwotCXByaXZhdGUgU3RyaW5nIENSTEYgPSBDUiArIExGOwotCS8vIGRpZmZlcmVudCB0ZXh0IHN0cmluZ3MgZm9yIGNvbXBhcmlzb25zCi0JcHJpdmF0ZSBTdHJpbmcgdGV4dFVTX0FTQ0lJX0xGID0gImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6XG4xMjM0NTY3ODkwXG5BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiI7Ci0JcHJpdmF0ZSBTdHJpbmcgdGV4dFVTX0FTQ0lJX0NSTEYgPSAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpcclxuMTIzNDU2Nzg5MFxyXG5BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiI7Ci0JcHJpdmF0ZSBib29sZWFuIERFQlVHID0gdHJ1ZTsKLQlwcml2YXRlIGJvb2xlYW4gREVCVUdDUkxGID0gZmFsc2U7Ci0JcHJpdmF0ZSBib29sZWFuIERFQlVHSU5GTyA9IHRydWU7Ci0KLQotCXB1YmxpYyBHZW5lcmF0ZVhNTEZpbGVzKCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQkJLy9qdW5pdC50ZXh0dWkuVGVzdFJ1bm5lci5ydW4oR2VuZXJhdGVYTUxGaWxlcy5jbGFzcyk7Ci0JCUdlbmVyYXRlWE1MRmlsZXMgdGhpc0FwcCA9IG5ldyBHZW5lcmF0ZVhNTEZpbGVzKCk7Ci0JCXRyeSB7Ci0JCQkvL3RoaXNBcHAuZ2VuZXJhdGVPcmlnaW5hbEZpbGVzKCk7Ci0JCQl0aGlzQXBwLmdlbmVyYXRlQWxsRmlsZXNGb3JDdXJyZW50Vk0oKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCi0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGdlbmVyYXRlQWxsRmlsZXNGb3JDdXJyZW50Vk0oKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlNYXAgYWxsQ2hhcnNldE1hcCA9IENoYXJzZXQuYXZhaWxhYmxlQ2hhcnNldHMoKTsKLQkJU2V0IGFsbEtleXMgPSBhbGxDaGFyc2V0TWFwLmtleVNldCgpOwotCQlPYmplY3RbXSBhbGxjaGFyc2V0cyA9IGFsbEtleXMudG9BcnJheSgpOwotCQlTdHJpbmdbXSBhbGxjaGFyc2V0TmFtZXMgPSBuZXcgU3RyaW5nW2FsbGNoYXJzZXRzLmxlbmd0aF07Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgYWxsY2hhcnNldHMubGVuZ3RoOyBpKyspIHsKLQkJCWFsbGNoYXJzZXROYW1lc1tpXSA9IGFsbGNoYXJzZXRzW2ldLnRvU3RyaW5nKCk7Ci0KLQkJfQotCQkvL2NyZWF0ZUZpbGVzKGFsbGNoYXJzZXROYW1lcywgZmFsc2UpOwotCQljcmVhdGVGaWxlcyhhbGxjaGFyc2V0TmFtZXMsIHRydWUpOwotCi0JfQotCi0JcHJpdmF0ZSB2b2lkIGNyZWF0ZUZpbGVzKFN0cmluZ1tdIGNoYXJzZXRuYW1lcywgYm9vbGVhbiB1c2VDUkxGKSB0aHJvd3MgRmlsZU5vdEZvdW5kRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gbnVsbDsKLQkJV3JpdGVyIG91dCA9IG51bGw7Ci0JCVN0cmluZyBtYWluRGlyZWN0b3J5ID0gZ2V0TWFpbkRpcmVjdG9yeUJhc2VkT25WTU5hbWVBbmRGaWxlRXh0ZW5zaW9uKCk7Ci0JCUxpc3QgY2hhcnNldEZpbGVzV3JpdHRlbiA9IG5ldyBBcnJheUxpc3QoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjaGFyc2V0bmFtZXMubGVuZ3RoOyBpKyspIHsKLQkJCXRyeSB7Ci0KLQotCQkJCWNoYXJzZXROYW1lID0gY2hhcnNldG5hbWVzW2ldOwotCi0JCQkJQ2hhcnNldCBjaGFyc2V0ID0gQ2hhcnNldC5mb3JOYW1lKGNoYXJzZXROYW1lKTsKLQkJCQlDaGFyc2V0RW5jb2RlciBjaGFyc2V0RW5jb2RlciA9IGNoYXJzZXQubmV3RW5jb2RlcigpOwotCQkJCWNoYXJzZXRFbmNvZGVyLm9uTWFsZm9ybWVkSW5wdXQoQ29kaW5nRXJyb3JBY3Rpb24uUkVQT1JUKTsKLQkJCQljaGFyc2V0RW5jb2Rlci5vblVubWFwcGFibGVDaGFyYWN0ZXIoQ29kaW5nRXJyb3JBY3Rpb24uUkVQT1JUKTsKLQotCQkJCVN0cmluZyBoZWFkZXIgPSBnZXRIZWFkZXJTdGFydCgpICsgY2hhcnNldE5hbWUgKyBnZXRIZWFkZXJFbmQoKTsKLQkJCQlTdHJpbmcgZnVsbHRleHQgPSBudWxsOwotCQkJCWlmICh1c2VDUkxGKSB7Ci0JCQkJCWZ1bGx0ZXh0ID0gaGVhZGVyICsgdGV4dFVTX0FTQ0lJX0NSTEY7Ci0JCQkJfQotCQkJCWVsc2UgewotCQkJCQlmdWxsdGV4dCA9IGhlYWRlciArIHRleHRVU19BU0NJSV9MRjsKLQkJCQl9Ci0KLQkJCQlpZiAoIWlzRWJjaWRpYyhjaGFyc2V0TmFtZSwgY2hhcnNldEVuY29kZXIpKSB7Ci0JCQkJCWlmIChjaGFyc2V0RW5jb2Rlci5jYW5FbmNvZGUoZnVsbHRleHQpKSB7Ci0JCQkJCQkvLwkJCQkJCWlmIChjYW5FbmNvZGVDUkxGKGNoYXJzZXROYW1lLCBjaGFyc2V0RW5jb2RlcikKLQkJCQkJCS8vICYmCi0JCQkJCQkvLyBjYW5FbmNvZGVTaW1wbGVTdHJpbmcoY2hhcnNldE5hbWUsCi0JCQkJCQkvLyBjaGFyc2V0RW5jb2RlciwgIjw/IikgJiYKLQkJCQkJCS8vIGNoYXJzZXRFbmNvZGVyLmNhbkVuY29kZShmdWxsdGV4dCkpIHsKLQkJCQkJCVN0cmluZyBvdXRwdXRmaWxlbmFtZSA9ICJ0ZXN0LSIgKyBjaGFyc2V0TmFtZSArICIueG1sIjsKLQkJCQkJCUZpbGUgb3V0RmlsZSA9IEZpbGVVdGlsLm1ha2VGaWxlRm9yKG1haW5EaXJlY3RvcnksIG91dHB1dGZpbGVuYW1lLCBudWxsKTsKLQkJCQkJCS8vU3lzdGVtLm91dC5wcmludGxuKG91dEZpbGUuZ2V0QWJzb2x1dGVQYXRoKCkpOwotCQkJCQkJT3V0cHV0U3RyZWFtIG91dHB1dFN0cmVhbSA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKG91dEZpbGUpOwotCQkJCQkJQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGJ5dGVzb3V0ID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOwotCi0JCQkJCQlXcml0ZXIgZmlsZVdyaXRlciA9IG5ldyBPdXRwdXRTdHJlYW1Xcml0ZXIob3V0cHV0U3RyZWFtLCBjaGFyc2V0RW5jb2Rlcik7Ci0JCQkJCQkvLyB0aGlzIGJ5dGUgd3JpdGVyIGlzIGNyZWF0ZWQganVzdCB0byBiZSBhYmxlIHRvCi0JCQkJCQkvLyBjb3VudCBwcmVjaXNlIGJ5dGVzLgotCQkJCQkJV3JpdGVyIGJ5dGVXcml0ZXIgPSBuZXcgT3V0cHV0U3RyZWFtV3JpdGVyKGJ5dGVzb3V0LCBjaGFyc2V0RW5jb2Rlcik7Ci0KLQkJCQkJCXN1cHBseUJPTXMoY2hhcnNldE5hbWUsIG91dHB1dFN0cmVhbSwgYnl0ZXNvdXQpOwotCi0JCQkJCQlvdXQgPSBuZXcgQnVmZmVyZWRXcml0ZXIoZmlsZVdyaXRlcik7Ci0KLQotCQkJCQkJb3V0LndyaXRlKGZ1bGx0ZXh0KTsKLQkJCQkJCWJ5dGVXcml0ZXIud3JpdGUoZnVsbHRleHQpOwotCQkJCQkJb3V0LmNsb3NlKCk7Ci0JCQkJCQlieXRlV3JpdGVyLmZsdXNoKCk7Ci0JCQkJCQkvLyBpZiB3ZSBtYWRlIGlzIHRoaXMgZmFyLCB3aXRoIG5vIGV4Y2VwdGlvbnMsCi0JCQkJCQkvLyBldGMuLAotCQkJCQkJLy8gdGhlbgotCQkJCQkJLy8gbXVzdCBoYXZlIGJlZW4KLQkJCQkJCS8vIHJlYWxseSB3cml0dGVuLgotCQkJCQkJU3RyaW5nIHdyaXR0ZW5SZWNvcmQgPSBjaGFyc2V0TmFtZTsKLQkJCQkJCWNoYXJzZXRGaWxlc1dyaXR0ZW4uYWRkKHdyaXR0ZW5SZWNvcmQpOwotCQkJCQkJaWYgKERFQlVHKSB7Ci0JCQkJCQkJcHJpbnREZWJ1Z0luZm8odXNlQ1JMRiwgaGVhZGVyLCBvdXRwdXRmaWxlbmFtZSwgYnl0ZXNvdXQpOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJCWVsc2UgewotCQkJCQkJaWYgKERFQlVHSU5GTykgewotCQkJCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiICoqKiBjb3VsZCBub3QgY29udmVydCBzYW1wbGUgYXNjaWkgdGV4dCBmb3IgIiArIGNoYXJzZXROYW1lKTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0KLQkJCX0KLQotCQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCQlpZiAoREVCVUdJTkZPKSB7Ci0JCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiICoqKioqIGNvdWxkIG5vdCBnZW5lcmF0ZSBmb3IgIiArIGNoYXJzZXROYW1lKTsKLQkJCQkJU3RyaW5nIG1zZyA9IGUuZ2V0TWVzc2FnZSgpOwotCQkJCQlpZiAobXNnID09IG51bGwpCi0JCQkJCQltc2cgPSAiIjsKLQkJCQkJU3lzdGVtLm91dC5wcmludGxuKCIgICAgICAgICAgZHVlIHRvICIgKyBlLmdldENsYXNzKCkuZ2V0TmFtZSgpICsgIiAgIiArIG1zZyk7Ci0JCQkJfQotCQkJfQotCQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJaWYgKERFQlVHSU5GTykgewotCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIiAqKioqKiBjb3VsZCBub3QgZ2VuZXJhdGUgZm9yICIgKyBjaGFyc2V0TmFtZSk7Ci0JCQkJCVN0cmluZyBtc2cgPSBlLmdldE1lc3NhZ2UoKTsKLQkJCQkJaWYgKG1zZyA9PSBudWxsKQotCQkJCQkJbXNnID0gIiI7Ci0JCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiICAgICAgICAgIGR1ZSB0byAiICsgZS5nZXRDbGFzcygpLmdldE5hbWUoKSArICIgICIgKyBtc2cpOwotCQkJCX0KLQkJCX0KLQkJCWZpbmFsbHkgewotCQkJCWlmIChvdXQgIT0gbnVsbCkgewotCQkJCQlvdXQuY2xvc2UoKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCi0JCS8vIG5vdyBjcmVhdGUgZmlsZSB0aGF0IHN1bW1hcml6ZXMgd2hhdCB3YXMgd3JpdHRlbgotCQkvLyBzdWl0YWJsZSB0byBwYXN0ZSBhcyBtZXRob2QgaW4gdGVzdCBjbGFzcwotCQlGaWxlIG91dEZpbGUgPSBGaWxlVXRpbC5tYWtlRmlsZUZvcihtYWluRGlyZWN0b3J5LCAidGVzdE1ldGhvZHMudGV4dCIsIG51bGwpOwotCQlGaWxlV3JpdGVyIG91dHByb3BlcnRpZXMgPSBuZXcgRmlsZVdyaXRlcihvdXRGaWxlKTsKLQkJb3V0cHJvcGVydGllcy53cml0ZShjaGFyc2V0RmlsZXNXcml0dGVuLnNpemUoKSArIENSTEYpOwotCQlJdGVyYXRvciBpdGVtcyA9IGNoYXJzZXRGaWxlc1dyaXR0ZW4uaXRlcmF0b3IoKTsKLQkJaW50IG4gPSAwOwotCQl3aGlsZSAoaXRlbXMuaGFzTmV4dCgpKSB7Ci0JCQlTdHJpbmcgaXRlbUNyZWF0ZWQgPSAoU3RyaW5nKSBpdGVtcy5uZXh0KCk7Ci0JCQlTdHJpbmcgdGVzdE1ldGhvZCA9IGNyZWF0ZU1ldGhvZChuKyssIGl0ZW1DcmVhdGVkKTsKLQkJCW91dHByb3BlcnRpZXMud3JpdGUodGVzdE1ldGhvZCArIENSTEYpOwotCQl9Ci0JCW91dHByb3BlcnRpZXMuY2xvc2UoKTsKLQotCX0KLQotCS8qKgotCSAqIEkgdGhvdWdodCB0aGlzIHVzZWQgdG8gYmUgYXV0b21hdGljLCBidXQgZG9lc24ndCBzZWVtIHRvIGJlIG5vdz8hCi0JICovCi0JcHJpdmF0ZSB2b2lkIHN1cHBseUJPTXMoU3RyaW5nIGNoYXJzZXROYW1lLCBPdXRwdXRTdHJlYW0gb3V0cHV0U3RyZWFtLCBCeXRlQXJyYXlPdXRwdXRTdHJlYW0gYnl0ZXNvdXQpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCWJ5dGVbXSBudWxsQnl0ZXMgPSBuZXcgYnl0ZVtdezB4MDAsIDB4MDB9OwotCQlpZiAoY2hhcnNldE5hbWUuZXF1YWxzKCJVVEYtMTYiKSkgewotCQkJb3V0cHV0U3RyZWFtLndyaXRlKElDb250ZW50RGVzY3JpcHRpb24uQk9NX1VURl8xNkxFKTsKLQkJCWJ5dGVzb3V0LndyaXRlKElDb250ZW50RGVzY3JpcHRpb24uQk9NX1VURl8xNkxFKTsKLQkJfQotCQlpZiAoY2hhcnNldE5hbWUuZXF1YWxzKCJVVEYtMTZMRSIpKSB7Ci0JCQlvdXRwdXRTdHJlYW0ud3JpdGUoSUNvbnRlbnREZXNjcmlwdGlvbi5CT01fVVRGXzE2TEUpOwotCQkJYnl0ZXNvdXQud3JpdGUoSUNvbnRlbnREZXNjcmlwdGlvbi5CT01fVVRGXzE2TEUpOwotCQl9Ci0JCWlmIChjaGFyc2V0TmFtZS5lcXVhbHMoIlgtVW5pY29kZUxpdHRsZSIpKSB7Ci0JCQlvdXRwdXRTdHJlYW0ud3JpdGUoSUNvbnRlbnREZXNjcmlwdGlvbi5CT01fVVRGXzE2TEUpOwotCQkJYnl0ZXNvdXQud3JpdGUoSUNvbnRlbnREZXNjcmlwdGlvbi5CT01fVVRGXzE2TEUpOwotCQl9Ci0JCWlmIChjaGFyc2V0TmFtZS5lcXVhbHMoIlVURi0xNkJFIikpIHsKLQkJCW91dHB1dFN0cmVhbS53cml0ZShJQ29udGVudERlc2NyaXB0aW9uLkJPTV9VVEZfMTZCRSk7Ci0JCQlieXRlc291dC53cml0ZShJQ29udGVudERlc2NyaXB0aW9uLkJPTV9VVEZfMTZCRSk7Ci0JCX0KLQkJaWYgKGNoYXJzZXROYW1lLmVxdWFscygiWC1Vbmljb2RlQmlnIikpIHsKLQkJCW91dHB1dFN0cmVhbS53cml0ZShJQ29udGVudERlc2NyaXB0aW9uLkJPTV9VVEZfMTZCRSk7Ci0JCQlieXRlc291dC53cml0ZShJQ29udGVudERlc2NyaXB0aW9uLkJPTV9VVEZfMTZCRSk7Ci0JCX0KLQkJaWYgKGNoYXJzZXROYW1lLmVxdWFscygiVVRGLTMyIikpIHsKLQkJCW91dHB1dFN0cmVhbS53cml0ZShudWxsQnl0ZXMpOwotCQkJb3V0cHV0U3RyZWFtLndyaXRlKElDb250ZW50RGVzY3JpcHRpb24uQk9NX1VURl8xNkxFKTsKLQkJCWJ5dGVzb3V0LndyaXRlKG51bGxCeXRlcyk7Ci0JCQlieXRlc291dC53cml0ZShJQ29udGVudERlc2NyaXB0aW9uLkJPTV9VVEZfMTZMRSk7Ci0JCX0KLQkJaWYgKGNoYXJzZXROYW1lLmVxdWFscygiVVRGLTMyTEUiKSkgewotCQkJb3V0cHV0U3RyZWFtLndyaXRlKG51bGxCeXRlcyk7Ci0JCQlvdXRwdXRTdHJlYW0ud3JpdGUoSUNvbnRlbnREZXNjcmlwdGlvbi5CT01fVVRGXzE2TEUpOwotCQkJYnl0ZXNvdXQud3JpdGUobnVsbEJ5dGVzKTsKLQkJCWJ5dGVzb3V0LndyaXRlKElDb250ZW50RGVzY3JpcHRpb24uQk9NX1VURl8xNkxFKTsKLQkJfQotCQlpZiAoY2hhcnNldE5hbWUuZXF1YWxzKCJVVEYtMzJCRSIpKSB7Ci0JCQlvdXRwdXRTdHJlYW0ud3JpdGUobnVsbEJ5dGVzKTsKLQkJCW91dHB1dFN0cmVhbS53cml0ZShJQ29udGVudERlc2NyaXB0aW9uLkJPTV9VVEZfMTZCRSk7Ci0JCQlieXRlc291dC53cml0ZShudWxsQnl0ZXMpOwotCQkJYnl0ZXNvdXQud3JpdGUoSUNvbnRlbnREZXNjcmlwdGlvbi5CT01fVVRGXzE2QkUpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGkKLQkgKiBAcGFyYW0gaXRlbUNyZWF0ZWQKLQkgKi8KLQlwcml2YXRlIFN0cmluZyBjcmVhdGVNZXRob2QoaW50IGksIFN0cmluZyBpdGVtQ3JlYXRlZCkgewotCQlTdHJpbmcgdGVtcGxhdGUgPSAiCXB1YmxpYyB2b2lkIHRlc3RGaWxlIiArIGkgKyAiKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7XHJcbiIgKyAiCQlTdHJpbmcgY2hhcnNldE5hbWUgPSBcIiIgKyBpdGVtQ3JlYXRlZCArICJcIjtcclxuIiArICIJCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7XHJcbiIgKyAiCX0iOwotCQlyZXR1cm4gdGVtcGxhdGU7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHByaW50RGVidWdJbmZvKGJvb2xlYW4gdXNlQ1JMRiwgU3RyaW5nIGhlYWRlciwgU3RyaW5nIG91dHB1dGZpbGVuYW1lLCBCeXRlQXJyYXlPdXRwdXRTdHJlYW0gYnl0ZXNvdXQpIHsKLQkJYnl0ZVtdIGJ5dGVzID0gYnl0ZXNvdXQudG9CeXRlQXJyYXkoKTsKLQkJaW50IG5CeXRlcyA9IGJ5dGVzLmxlbmd0aDsKLQkJaW50IG5DaGFycyA9IDA7Ci0JCWlmICh1c2VDUkxGKSB7Ci0JCQluQ2hhcnMgPSBoZWFkZXIubGVuZ3RoKCkgKyB0ZXh0VVNfQVNDSUlfQ1JMRi5sZW5ndGgoKTsKLQkJfQotCQllbHNlIHsKLQkJCW5DaGFycyA9IGhlYWRlci5sZW5ndGgoKSArIHRleHRVU19BU0NJSV9MRi5sZW5ndGgoKTsKLQkJfQotCi0JCVN5c3RlbS5vdXQucHJpbnRsbigiV3JvdGUgIiArIG5DaGFycyArICIgY2hhcmFjdGVycyBhbmQgIiArIG5CeXRlcyArICIgYnl0ZXMgdG8gIiArIG91dHB1dGZpbGVuYW1lKTsKLQl9Ci0KLQkvLyBUT0RPOiBuZXZlciB1c2VkCi0JIGJvb2xlYW4gY2FuRW5jb2RlU2ltcGxlU3RyaW5nKFN0cmluZyBjaGFyc2V0TmFtZSwgQ2hhcnNldEVuY29kZXIgY2hhcnNldEVuY29jZGVyLCBTdHJpbmcgc2ltcGxlU3RyaW5nKSB7Ci0JCS8vIHRoaXMgbWV0aG9kIGFkZGVkIHNpbmNlIHNvbWUgZW5jb2RlcnMgZG9uJ3QgcmVwb3J0IHRoYXQgdGhleSBjYW4ndAotCQkvLyBlbmNvZGUgc29tZXRoaW5nLCBidXQgdGhleSBvYnZpb3VzbHkKLQkJLy8gY2FuJ3QsIGF0IGxlYXN0IGluIHRoZSBub3JtYWwgbWVhbmluZyBvZiB0aGUgd29yZC4KLQkJLy8gVGhpcyBzZWVtcyB0byBtb3N0bHkgYXBwbHkgdG8gc29tZSBJQk0gdmFyaWV0aWVzIHdoZXJlLCBhcHBhcmVudGx5LAotCQkvLyB0aGUgaW5wdXQgY2FuJ3QgYmUgaW50ZXJwcmV0ZWQgYXQgYWxsIHdpdGhvdXQga25vd2luZyBlbmNvZGluZwotCQkvLyAodGhhdCBpcwotCQkvLyBjb3VsZCBub3QgYmUgdXNlZCBmb3IgY29udGVudCBiYXNlZCBlbmNvZGluZykuCi0JCWJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0KLQkJU3RyaW5nIG5ld0FzY2lpU3RyaW5nID0gbnVsbDsKLQkJYnl0ZVtdIHRyYW5zbGF0ZWRCeXRlcyA9IG51bGw7Ci0JCXRyeSB7Ci0JCQl0cmFuc2xhdGVkQnl0ZXMgPSBzaW1wbGVTdHJpbmcuZ2V0Qnl0ZXMoY2hhcnNldE5hbWUpOwotCQkJbmV3QXNjaWlTdHJpbmcgPSBuZXcgU3RyaW5nKHRyYW5zbGF0ZWRCeXRlcywgImFzY2lpIik7Ci0JCX0KLQkJY2F0Y2ggKFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gZSkgewotCQkJLy8gaW1wb3NzaWJsZSwgc2luY2UgY2hlY2tlZCBhbHJlYWR5Ci0JCQl0aHJvdyBuZXcgRXJyb3IoZSk7Ci0JCX0KLQkJcmVzdWx0ID0gc2ltcGxlU3RyaW5nLmVxdWFscyhuZXdBc2NpaVN0cmluZyk7Ci0JCWlmICghcmVzdWx0KSB7Ci0JCQlpZiAoY2hhcnNldEVuY29jZGVyLm1heEJ5dGVzUGVyQ2hhcigpICE9IDEpIHsKLQkJCQkvLyBkb24ndCBjaGVjayBtdWxpdGJ5dGUgZW5jb2RlcnMsIGp1c3QgYXNzdW1lIHRydWUgKGZvciBub3cpLgotCQkJCXJlc3VsdCA9IHRydWU7Ci0JCQkJaWYgKGNoYXJzZXRFbmNvY2Rlci5tYXhCeXRlc1BlckNoYXIoKSA9PSA0KSB7Ci0JCQkJCS8vZXhjZXB0LCBsZXQncyBqdXN0IGV4Y2x1ZGUgZm91ciBieXRlIHN0cmVhbXMsIGZvciBub3cuCi0JCQkJCXJlc3VsdCA9IGZhbHNlOwotCQkJCQlpZiAoY2hhcnNldEVuY29jZGVyLmF2ZXJhZ2VCeXRlc1BlckNoYXIoKSA9PSAyKSB7Ci0JCQkJCQkvLyBleGNlcHQsIGZvciBzb21lIHJlYXNvbiBVVEYgaGFzIG1heCBieXRlcyBvZiA0Ci0JCQkJCQkvLyAoYXZlcmFnZSBieXRlcyBvZiAyKS4KLQkJCQkJCXJlc3VsdCA9IGZhbHNlOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQkvKioKLQkgKiBBIHZlcnkgaGV1cmlzdGljIG1ldGhvZC4gU2hvdWxkIGhhdmUgdGFibGUsIHNvbWVkYXkuCi0JICovCi0JcHJpdmF0ZSBib29sZWFuIGlzRWJjaWRpYyhTdHJpbmcgY2hhcnNldE5hbWUsIENoYXJzZXRFbmNvZGVyIGNoYXJzZXRFbmNvY2RlcikgewotCQlib29sZWFuIHJlc3VsdCA9IGZhbHNlOwotCQlTdHJpbmcgc2ltcGxlU3RyaW5nID0gIjw/IjsKLQkJU3RyaW5nIG5ld0FzY2lpU3RyaW5nID0gbnVsbDsKLQkJYnl0ZVtdIHRyYW5zbGF0ZWRCeXRlcyA9IG51bGw7Ci0JCXRyeSB7Ci0JCQl0cmFuc2xhdGVkQnl0ZXMgPSBzaW1wbGVTdHJpbmcuZ2V0Qnl0ZXMoY2hhcnNldE5hbWUpOwotCQkJbmV3QXNjaWlTdHJpbmcgPSBuZXcgU3RyaW5nKHRyYW5zbGF0ZWRCeXRlcywgImFzY2lpIik7Ci0JCX0KLQkJY2F0Y2ggKFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gZSkgewotCQkJLy8gaW1wb3NzaWJsZSwgc2luY2UgY2hlY2tlZCBhbHJlYWR5Ci0JCQl0aHJvdyBuZXcgRXJyb3IoZSk7Ci0JCX0KLQkJLy8gZXhwZXJpbWVudGluZy9kZWJ1Z2dpbmcgc2hvd2VkIHRoZSBrbm93biBlYmNpZGljIG9uY2VzIGFsd2F5cwotCQkvLyAibWlzIiB0cmFubGF0ZWQgdG8gY2hhcmFjdGVycyBMIGFuZCBvLgotCQlyZXN1bHQgPSAiTG8iLmVxdWFscyhuZXdBc2NpaVN0cmluZyk7Ci0JCWlmIChyZXN1bHQpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihjaGFyc2V0TmFtZSArICIgYXNzdW1lZCB0byBiZSBFZGNpZGljIik7Ci0JCX0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gY2hhcnNldAotCSAqLwotCSBib29sZWFuIGNhbkVuY29kZUNSTEYoU3RyaW5nIGNoYXJzZXROYW1lLCBDaGFyc2V0RW5jb2RlciBjaGFyc2V0RW5jb2RlcikgewotCQlib29sZWFuIHJlc3VsdCA9IHRydWU7Ci0JCS8vU3RyaW5nIGNoYXJzZXRDb25vbmljYWxOYW1lID0gY2hhcnNldEVuY29kZXIuY2hhcnNldCgpLm5hbWUoKTsKLQkJaWYgKCFjaGFyc2V0RW5jb2Rlci5jYW5FbmNvZGUoTEYpKSB7Ci0JCQlpZiAoREVCVUdDUkxGKSB7Ci0JCQkJU3RyaW5nIHN0cmluZ05hbWUgPSAiTEYiOwotCQkJCVN0cmluZyB0ZXN0U3RyaW5nID0gTEY7Ci0JCQkJZXhwbG9yZUNvbnZlcnNpb24oY2hhcnNldE5hbWUsIHN0cmluZ05hbWUsIHRlc3RTdHJpbmcpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiY2FuIG5vdCBlbmNvZGUgTEYgZm9yICIgKyBjaGFyc2V0RW5jb2Rlci5jaGFyc2V0KCkubmFtZSgpKTsKLQkJCX0KLQkJCXJlc3VsdCA9IGZhbHNlOwotCQl9Ci0JCWlmICghY2hhcnNldEVuY29kZXIuY2FuRW5jb2RlKENSKSkgewotCQkJaWYgKERFQlVHQ1JMRikgewotCQkJCVN0cmluZyBzdHJpbmdOYW1lID0gIkNSIjsKLQkJCQlTdHJpbmcgdGVzdFN0cmluZyA9IENSOwotCQkJCWV4cGxvcmVDb252ZXJzaW9uKGNoYXJzZXROYW1lLCBzdHJpbmdOYW1lLCB0ZXN0U3RyaW5nKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oImNhbiBub3QgZW5jb2RlIENSIGZvciAiICsgY2hhcnNldEVuY29kZXIuY2hhcnNldCgpLm5hbWUoKSk7Ci0JCQl9Ci0JCQlyZXN1bHQgPSBmYWxzZTsKLQkJfQotCQlpZiAoIWNoYXJzZXRFbmNvZGVyLmNhbkVuY29kZShDUkxGKSkgewotCQkJaWYgKERFQlVHQ1JMRikgewotCQkJCVN0cmluZyBzdHJpbmdOYW1lID0gIkNSTEYiOwotCQkJCVN0cmluZyB0ZXN0U3RyaW5nID0gQ1JMRjsKLQkJCQlleHBsb3JlQ29udmVyc2lvbihjaGFyc2V0TmFtZSwgc3RyaW5nTmFtZSwgdGVzdFN0cmluZyk7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJjYW4gbm90IGVuY29kZSBDUkxGIGZvciAiICsgY2hhcnNldEVuY29kZXIuY2hhcnNldCgpLm5hbWUoKSk7Ci0JCQl9Ci0JCQlyZXN1bHQgPSBmYWxzZTsKLQkJfQotCQlyZXR1cm4gcmVzdWx0OwotCi0JfQotCi0JcHJpdmF0ZSB2b2lkIGV4cGxvcmVDb252ZXJzaW9uKFN0cmluZyBjaGFyc2V0TmFtZSwgU3RyaW5nIHN0cmluZ05hbWUsIFN0cmluZyB0ZXN0U3RyaW5nKSB0aHJvd3MgRXJyb3IgewotCQl0cnkgewotCQkJU3RyaW5nIG5ld0xGID0gbmV3IFN0cmluZyh0ZXN0U3RyaW5nLmdldEJ5dGVzKGNoYXJzZXROYW1lKSk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50KCJvbGQgIiArIHN0cmluZ05hbWUgKyAiIChkZWMpOiAiKTsKLQkJCWR1bXBTdHJpbmcoU3lzdGVtLm91dCwgdGVzdFN0cmluZyk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJCVN5c3RlbS5vdXQucHJpbnQoIm5ldyAiICsgc3RyaW5nTmFtZSArICIgKGRlYyk6ICIpOwotCQkJZHVtcFN0cmluZyhTeXN0ZW0ub3V0LCBuZXdMRik7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJfQotCQljYXRjaCAoVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiBlKSB7Ci0JCQkvL3Nob3VsZCBuZXZlciBoYXBwZW4sIGFscmVhZHkgY2hlY2tlZAotCQkJdGhyb3cgbmV3IEVycm9yKGUpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIG91dAotCSAqIEBwYXJhbSBsZjIKLQkgKi8KLQlwcml2YXRlIHZvaWQgZHVtcFN0cmluZyhQcmludFN0cmVhbSBvdXQsIFN0cmluZyBsZjIpIHsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBsZjIubGVuZ3RoKCk7IGkrKykgewotCQkJb3V0LnByaW50KChpbnQpIGxmMi5jaGFyQXQoaSkgKyAiICIpOwotCQl9Ci0KLQl9Ci0KLQlwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBnZXRNYWluRGlyZWN0b3J5QmFzZWRPblZNTmFtZUFuZEZpbGVFeHRlbnNpb24oKSB7Ci0JCVN0cmluZyBtYWluRGlyZWN0b3J5ID0gZ2V0TWFpbkRpcmVjdG9yeUJhc2VkT25WTU5hbWUoKSArICIveG1sIjsKLQkJcmV0dXJuIG1haW5EaXJlY3Rvcnk7Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgZ2V0SGVhZGVyU3RhcnQoKSB7Ci0JCXJldHVybiAiPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiIjsKLQl9Ci0KLQlwcml2YXRlIFN0cmluZyBnZXRIZWFkZXJFbmQoKSB7Ci0JCXJldHVybiAiXCI/PiI7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL0xpc3RDaGFyc2V0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9MaXN0Q2hhcnNldHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWVmMGVkZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL0xpc3RDaGFyc2V0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nOwotCi1pbXBvcnQgamF2YS5uaW8uY2hhcnNldC5DaGFyc2V0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLQotLyoqCi0gKiBTbWFsbCBjbGFzcyB0byBsaXN0IGNoYXJzZXQgZGV0ZWN0ZWQgZm9yIGEgcGFydGljdWxhciBWTS4gU2ltcGxlIHJ1biBhcyBKYXZhCi0gKiBBcHBsaWNhdGlvbnMgdG8gZ2V0IG91dHB1dCB0byBzdGFuZGFyZCBvdXQuCi0gKi8KLXB1YmxpYyBjbGFzcyBMaXN0Q2hhcnNldHMgewotCXByaXZhdGUgZmluYWwgU3RyaW5nIHRhYiA9ICJcdCI7Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0KLQkJTGlzdENoYXJzZXRzIHRoaXNBcHAgPSBuZXcgTGlzdENoYXJzZXRzKCk7Ci0KLQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0KLQkJU3lzdGVtLm91dC5wcmludGxuKCJDdXJyZW50IExvY2FsZTogIiArIExvY2FsZS5nZXREZWZhdWx0KCkpOwotCi0JCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCi0JCVN0cmluZyBuYW1lID0gU3lzdGVtLmdldFByb3BlcnR5KCJqYXZhLmZ1bGx2ZXJzaW9uIik7Ci0JCWlmIChuYW1lID09IG51bGwpIHsKLQkJCW5hbWUgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImphdmEudmVyc2lvbiIpICsgIiAoIiArIFN5c3RlbS5nZXRQcm9wZXJ0eSgiamF2YS5ydW50aW1lLnZlcnNpb24iKSArICIpIjsKLQkJfQotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkpSRSB2ZXJzaW9uOiAiICsgbmFtZSk7Ci0KLQkJU3lzdGVtLmdldFByb3BlcnRpZXMoKS5saXN0KFN5c3RlbS5vdXQpOwotCi0JCXRoaXNBcHAubGlzdE9mTG9jYWxlcygpOwotCi0JCVN5c3RlbS5vdXQucHJpbnRsbigiZmlsZS5lbmNvZGluZy5wa2c6ICIgKyBTeXN0ZW0uZ2V0UHJvcGVydHkoImZpbGUuZW5jb2RpbmcucGtnIikpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oImZpbGUuZW5jb2Rpbmc6ICIgKyBTeXN0ZW0uZ2V0UHJvcGVydHkoImZpbGUuZW5jb2RpbmciKSk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCi0JCWZvciAoaW50IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykgewotCQkJU3lzdGVtLm91dC5wcmludGxuKGFyZ3NbaV0pOwotCQl9Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQl0aGlzQXBwLmxpc3RPZkNoYXJzZXRzKCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGxpc3RPZkxvY2FsZXMoKSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiQXZhaWxhYmxlIExvY2FsZXMiKTsKLQkJTG9jYWxlW10gbG9jYWxlcyA9IExvY2FsZS5nZXRBdmFpbGFibGVMb2NhbGVzKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgbG9jYWxlcy5sZW5ndGg7IGkrKykgewotCQkJU3lzdGVtLm91dC5wcmludGxuKGxvY2FsZXNbaV0pOwotCi0JCX0KLQotCX0KLQotCXByaXZhdGUgdm9pZCBsaXN0T2ZDaGFyc2V0cygpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJBdmFpbGFibGUgQ2hhcnNldHMiKTsKLQkJaW50IGNvdW50ID0gMDsKLQkJTWFwIG1hcCA9IENoYXJzZXQuYXZhaWxhYmxlQ2hhcnNldHMoKTsKLQkJSXRlcmF0b3IgaXQgPSBtYXAua2V5U2V0KCkuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGl0Lmhhc05leHQoKSkgewotCQkJY291bnQrKzsKLQkJCS8vIEdldCBjaGFyc2V0IG5hbWUKLQkJCVN0cmluZyBjaGFyc2V0TmFtZSA9IChTdHJpbmcpIGl0Lm5leHQoKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihjb3VudCArICIuICIgKyAiIENoYXJzZXRuYW1lOiAiICsgY2hhcnNldE5hbWUpOwotCQkJLy8gR2V0IGNoYXJzZXQKLQkJCUNoYXJzZXQgY2hhcnNldCA9IENoYXJzZXQuZm9yTmFtZShjaGFyc2V0TmFtZSk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4odGFiICsgImRpc3BsYXlOYW1lOiAiICsgY2hhcnNldC5kaXNwbGF5TmFtZShMb2NhbGUuZ2V0RGVmYXVsdCgpKSk7Ci0JCQlTZXQgc2V0ID0gY2hhcnNldC5hbGlhc2VzKCk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4odGFiICsgImFsaWFzZXM6ICIgKyBzZXQpOwotCQl9Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvVGVzdHNQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvVGVzdHNQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWY5YzYxNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL1Rlc3RzUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmc7Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudHR5cGUuQnl0ZVJlYWRlcjsKLQotLyoqCi0gKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSAqLwotcHVibGljIGNsYXNzIFRlc3RzUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHsKLQkvLyBUaGUgc2hhcmVkIGluc3RhbmNlLgotCXByaXZhdGUgc3RhdGljIFRlc3RzUGx1Z2luIHBsdWdpbjsKLQotCS8qKgotCSAqIFRoZSBjb25zdHJ1Y3Rvci4KLQkgKi8KLQlwdWJsaWMgVGVzdHNQbHVnaW4oKSB7Ci0JCXN1cGVyKCk7Ci0JCXBsdWdpbiA9IHRoaXM7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgVGVzdHNQbHVnaW4gZ2V0RGVmYXVsdCgpIHsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB3b3Jrc3BhY2UgaW5zdGFuY2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBJV29ya3NwYWNlIGdldFdvcmtzcGFjZSgpIHsKLQkJcmV0dXJuIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzdHJpbmcgZnJvbSB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLCBvciAna2V5JyBpZiBub3QKLQkgKiBmb3VuZC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRSZXNvdXJjZVN0cmluZyhTdHJpbmcga2V5KSB7Ci0JCXJldHVybiBrZXk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLAotCSAqLwotCXB1YmxpYyBSZXNvdXJjZUJ1bmRsZSBnZXRSZXNvdXJjZUJ1bmRsZSgpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBVUkwgZ2V0SW5zdGFsbExvY2F0aW9uKCkgewotCQlVUkwgaW5zdGFsbExvY2F0aW9uID0gUGxhdGZvcm0uZ2V0QnVuZGxlKCJvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nIikuZ2V0RW50cnkoIi8iKTsKLQkJVVJMIHJlc29sdmVkTG9jYXRpb24gPSBudWxsOwotCQl0cnkgewotCQkJcmVzb2x2ZWRMb2NhdGlvbiA9IEZpbGVMb2NhdG9yLnJlc29sdmUoaW5zdGFsbExvY2F0aW9uKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJLy8gaW1wb3NzaWJsZQotCQkJdGhyb3cgbmV3IEVycm9yKGUpOwotCQl9Ci0JCXJldHVybiByZXNvbHZlZExvY2F0aW9uOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgRmlsZSBnZXRUZXN0RmlsZShTdHJpbmcgZmlsZXBhdGgpIHsKLQkJVVJMIGluc3RhbGxVUkwgPSBnZXRJbnN0YWxsTG9jYXRpb24oKTsKLQkJLy8gU3RyaW5nIHNjaGVtZSA9IGluc3RhbGxVUkwuZ2V0UHJvdG9jb2woKTsKLQkJU3RyaW5nIHBhdGggPSBpbnN0YWxsVVJMLmdldFBhdGgoKTsKLQkJU3RyaW5nIGxvY2F0aW9uID0gcGF0aCArIGZpbGVwYXRoOwotCQlGaWxlIHJlc3VsdCA9IG5ldyBGaWxlKGxvY2F0aW9uKTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIExpc3QgZ2V0QWxsVGVzdEZpbGVzKFN0cmluZyB0b3BEaXJOYW1lKSB7Ci0JCUxpc3QgcmVzdWx0ID0gbnVsbDsKLQkJVVJMIGluc3RhbGxVUkwgPSBnZXRJbnN0YWxsTG9jYXRpb24oKTsKLQkJLy8gU3RyaW5nIHNjaGVtZSA9IGluc3RhbGxVUkwuZ2V0UHJvdG9jb2woKTsKLQkJU3RyaW5nIHBhdGggPSBpbnN0YWxsVVJMLmdldFBhdGgoKTsKLQkJU3RyaW5nIGxvY2F0aW9uID0gcGF0aCArIHRvcERpck5hbWU7Ci0JCUZpbGUgdG9wRGlyID0gbmV3IEZpbGUobG9jYXRpb24pOwotCQlpZiAoIXRvcERpci5pc0RpcmVjdG9yeSgpKSB7Ci0JCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKHRvcERpck5hbWUgKyAiIGlzIG5vdCBhIGRpcmVjdG9yeSIpOwotCQl9Ci0JCXJlc3VsdCA9IGdldEZpbGVzSW5EaXIodG9wRGlyKTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gdG9wRGlyCi0JICogQHJldHVybgotCSAqLwotCXByaXZhdGUgc3RhdGljIExpc3QgZ2V0RmlsZXNJbkRpcihGaWxlIHRvcERpcikgewotCQlMaXN0IGZpbGVzID0gbmV3IEFycmF5TGlzdCgpOwotCQlGaWxlW10gdG9wRmlsZXMgPSB0b3BEaXIubGlzdEZpbGVzKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgdG9wRmlsZXMubGVuZ3RoOyBpKyspIHsKLQkJCUZpbGUgZmlsZSA9IHRvcEZpbGVzW2ldOwotCQkJaWYgKGZpbGUuaXNGaWxlKCkpIHsKLQkJCQlmaWxlcy5hZGQoZmlsZSk7Ci0JCQl9Ci0JCQllbHNlIGlmIChmaWxlLmlzRGlyZWN0b3J5KCkgJiYgIWZpbGUuZ2V0TmFtZSgpLmVuZHNXaXRoKCJDVlMiKSkgewotCQkJCUxpc3QgaW5uZXJGaWxlcyA9IGdldEZpbGVzSW5EaXIoZmlsZSk7Ci0JCQkJZmlsZXMuYWRkQWxsKGlubmVyRmlsZXMpOwotCQkJfQotCQl9Ci0JCXJldHVybiBmaWxlczsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFJlYWRlciBnZXRUZXN0UmVhZGVyKFN0cmluZyBmaWxlcGF0aCkgdGhyb3dzIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiB7Ci0JCVVSTCBpbnN0YWxsVVJMID0gZ2V0SW5zdGFsbExvY2F0aW9uKCk7Ci0JCS8vIFN0cmluZyBzY2hlbWUgPSBpbnN0YWxsVVJMLmdldFByb3RvY29sKCk7Ci0JCVN0cmluZyBwYXRoID0gaW5zdGFsbFVSTC5nZXRQYXRoKCk7Ci0JCVN0cmluZyBsb2NhdGlvbiA9IHBhdGggKyBmaWxlcGF0aDsKLQkJUmVhZGVyIHJlc3VsdCA9IG5ldyBGaWxlUmVhZGVyKGxvY2F0aW9uKTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFJlYWRlciBnZXRCeXRlUmVhZGVyKFN0cmluZyBmaWxlcGF0aCkgdGhyb3dzIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiB7Ci0JCVVSTCBpbnN0YWxsVVJMID0gZ2V0SW5zdGFsbExvY2F0aW9uKCk7Ci0JCS8vIFN0cmluZyBzY2hlbWUgPSBpbnN0YWxsVVJMLmdldFByb3RvY29sKCk7Ci0JCVN0cmluZyBwYXRoID0gaW5zdGFsbFVSTC5nZXRQYXRoKCk7Ci0JCVN0cmluZyBsb2NhdGlvbiA9IHBhdGggKyBmaWxlcGF0aDsKLQkJUmVhZGVyIHJlc3VsdCA9IG5ldyBCeXRlUmVhZGVyKG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKG5ldyBGaWxlSW5wdXRTdHJlYW0obG9jYXRpb24pKSk7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3ByZWYvVGVzdFByZWZlcmVuY2VzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3ByZWYvVGVzdFByZWZlcmVuY2VzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmYzI0YjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9wcmVmL1Rlc3RQcmVmZXJlbmNlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnByZWY7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmNvbnRlbnQuSUNvbnRlbnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5JRWNsaXBzZVByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5Db250ZW50QmFzZWRQcmVmZXJlbmNlR2F0ZXdheTsKLWltcG9ydCBvcmcub3NnaS5zZXJ2aWNlLnByZWZzLkJhY2tpbmdTdG9yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcub3NnaS5zZXJ2aWNlLnByZWZzLlByZWZlcmVuY2VzOwotCi0KLXB1YmxpYyBjbGFzcyBUZXN0UHJlZmVyZW5jZXMgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQkvKioKLQkgKiBAcGFyYW0gcHJlZmVyZW5jZXMKLQkgKiBAdGhyb3dzIEJhY2tpbmdTdG9yZUV4Y2VwdGlvbgotCSAqLwotCXByaXZhdGUgc3RhdGljIHZvaWQgcHJpbnRDaGlsZHJlbihQcmVmZXJlbmNlcyBwcmVmZXJlbmNlcykgdGhyb3dzIEJhY2tpbmdTdG9yZUV4Y2VwdGlvbiB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiXHQiICsgcHJlZmVyZW5jZXMuYWJzb2x1dGVQYXRoKCkpOwotCQlTdHJpbmcgW10ga2V5cyA9IHByZWZlcmVuY2VzLmtleXMoKTsKLQkJcHJpbnRLZXlzKGtleXMpOwotCQlTdHJpbmdbXSBjaGlsZHJlbiA9IHByZWZlcmVuY2VzLmNoaWxkcmVuTmFtZXMoKTsKLQkJcHJpbnRDaGlsZHJlbihjaGlsZHJlbik7IAotCQlmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7Ci0JCQlTdHJpbmcgY2hpbGQgPSBjaGlsZHJlbltpXTsKLQkJCVByZWZlcmVuY2VzIHN1YlByZWZlcmVuY2VzID0gcHJlZmVyZW5jZXMubm9kZShjaGlsZCk7Ci0JCQlTdHJpbmcgW10gc3Via2V5cyA9IHN1YlByZWZlcmVuY2VzLmtleXMoKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKGNoaWxkKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQkJcHJpbnRLZXlzKHN1YmtleXMpOwotCQl9Ci0JfQotCXN0YXRpYyBwcml2YXRlIHZvaWQgcHJpbnRDaGlsZHJlbihTdHJpbmdbXSBjaGlsZHJlbikgewotCQlwcmludFN0cmluZ0FycmF5KGNoaWxkcmVuLCAiXHQiKTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0ga2V5cwotCSAqLwotCXByaXZhdGUgc3RhdGljIHZvaWQgcHJpbnRLZXlzKFN0cmluZ1tdIGtleXMpIHsKLQkJcHJpbnRTdHJpbmdBcnJheShrZXlzLCAiXHRcdCIpOwotCQkKLQl9Ci0KLQlzdGF0aWMgcHJpdmF0ZSB2b2lkIHByaW50U3RyaW5nQXJyYXkoU3RyaW5nW10gYXJyYXksIFN0cmluZyB0YWJDaGFycykgewotCQlmb3IgKGludCBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7Ci0JCQlTdHJpbmcgc3RyaW5nID0gYXJyYXlbaV07Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4odGFiQ2hhcnMgKyBzdHJpbmcpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIERFQlVHID0gdHJ1ZTsKLQotCXByaXZhdGUgdm9pZCBkaXNwbGF5UHJlZmVyZW5jZVRyZWUoKSB7Ci0JCUlFY2xpcHNlUHJlZmVyZW5jZXMgZWNsaXBzZVByZWZlcmVuY2VzID0gUGxhdGZvcm0uZ2V0UHJlZmVyZW5jZXNTZXJ2aWNlKCkuZ2V0Um9vdE5vZGUoKTsKLQotCi0JCXRyeSB7Ci0JCQlTdHJpbmdbXSBjaGlsZHJlbiA9IGVjbGlwc2VQcmVmZXJlbmNlcy5jaGlsZHJlbk5hbWVzKCk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oZWNsaXBzZVByZWZlcmVuY2VzLmFic29sdXRlUGF0aCgpKTsKLQkJCXByaW50Q2hpbGRyZW4oY2hpbGRyZW4pOwotCi0JCQlmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7Ci0JCQkJU3RyaW5nIHN0cmluZyA9IGNoaWxkcmVuW2ldOwotCQkJCVByZWZlcmVuY2VzIHByZWZlcmVuY2VzID0gZWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoc3RyaW5nKTsKLQkJCQlwcmludENoaWxkcmVuKHByZWZlcmVuY2VzKTsKLQotCi0JCQl9Ci0KLQkJfQotCQljYXRjaCAoQmFja2luZ1N0b3JlRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RBY2Nlc3MoKSB7Ci0JCWlmIChERUJVRykgeyAKLQkJCWRpc3BsYXlQcmVmZXJlbmNlVHJlZSgpOwotCQl9Ci0JCS8vIGFsd2F5cyBvayBpZiBubyBleGNlcHRpb25zIHRocm93bgotCQlhc3NlcnRUcnVlKHRydWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDb250ZW50QmFzZWRQcmVmSFRNTCgpIHsKLQkJSUNvbnRlbnRUeXBlIGNvbnRlbnRUeXBlID0gUGxhdGZvcm0uZ2V0Q29udGVudFR5cGVNYW5hZ2VyKCkuZmluZENvbnRlbnRUeXBlRm9yKCJ0ZXN0Lmh0bWwiKTsKLQkJUHJlZmVyZW5jZXMgcHJlZmVyZW5jZXMgPSBDb250ZW50QmFzZWRQcmVmZXJlbmNlR2F0ZXdheS5nZXRQcmVmZXJlbmNlcyhjb250ZW50VHlwZSk7Ci0JCWFzc2VydE5vdE51bGwocHJlZmVyZW5jZXMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDb250ZW50QmFzZWRQcmVmWE1MKCkgewotCQlJQ29udGVudFR5cGUgY29udGVudFR5cGUgPSBQbGF0Zm9ybS5nZXRDb250ZW50VHlwZU1hbmFnZXIoKS5maW5kQ29udGVudFR5cGVGb3IoInRlc3QueG1sIik7Ci0JCVByZWZlcmVuY2VzIHByZWZlcmVuY2VzID0gQ29udGVudEJhc2VkUHJlZmVyZW5jZUdhdGV3YXkuZ2V0UHJlZmVyZW5jZXMoY29udGVudFR5cGUpOwotCQlhc3NlcnROb3ROdWxsKHByZWZlcmVuY2VzKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3Byb3BlcnRpZXMvVGVzdENvbW1vbk5hbWVzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3Byb3BlcnRpZXMvVGVzdENvbW1vbk5hbWVzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmZjc4ZDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9wcm9wZXJ0aWVzL1Rlc3RDb21tb25OYW1lcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcucHJvcGVydGllczsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5Db21tb25DaGFyc2V0TmFtZXM7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0Q29tbW9uTmFtZXMgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q29tbW9uTmFtZXMoKSB7Ci0JCVN0cmluZ1tdIG5hbWVzID0gQ29tbW9uQ2hhcnNldE5hbWVzLmdldENvbW1vbkNoYXJzZXROYW1lcygpOwotCQlhc3NlcnRUcnVlKCJjb21tb24gY2hhcnNldCBuYW1lcyBjb3VsZCBub3QgYmUgbG9hZGVkIiwgbmFtZXMgIT0gbnVsbCAmJiBuYW1lcy5sZW5ndGggPiAwKTsKLQkJaWYgKERFQlVHKSB7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJU3RyaW5nIG5hbWUgPSBuYW1lc1tpXTsKLQkJCQlTdHJpbmcgZGlzcGxheU5hbWUgPSBDb21tb25DaGFyc2V0TmFtZXMuZ2V0RGlzcGxheVN0cmluZyhuYW1lKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIG5hbWUgKyAiICAgICIgKyBkaXNwbGF5TmFtZSk7Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0JcHVibGljIHZvaWQgZG9UZXN0RGVmYXVsdElhbmFOYW1lcyhTdHJpbmcgc3RyaW5nVG9DaGVjaywgU3RyaW5nIGRlZmF1bHROYW1lLCBTdHJpbmcgZXhwZWN0ZWQpIHsKLQkJU3RyaW5nIGFjdHVhbCA9IENvbW1vbkNoYXJzZXROYW1lcy5nZXRQcmVmZXJyZWREZWZhdWx0SWFuYU5hbWUoc3RyaW5nVG9DaGVjaywgZGVmYXVsdE5hbWUpOwotCQlhc3NlcnRFcXVhbHMoImRlZmF1bHQgSUFOQSBuYW1lIHRlc3QgZmFpbGVkIGZvciAiICsgc3RyaW5nVG9DaGVjaywgZXhwZWN0ZWQsIGFjdHVhbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEFTQ0lJKCkgewotCQlkb1Rlc3REZWZhdWx0SWFuYU5hbWVzKCJBU0NJSSIsICJVVEYtOCIsICJVUy1BU0NJSSIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0Q3AxMjUyKCkgewotCQlkb1Rlc3REZWZhdWx0SWFuYU5hbWVzKCJDcDEyNTIiLCAiVVRGLTgiLCAiSVNPLTg4NTktMSIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0TVM5NTAoKSB7Ci0JCWRvVGVzdERlZmF1bHRJYW5hTmFtZXMoIk1TOTUwIiwgIlVURi04IiwgIkJJRzUiKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdENwMTI1NigpIHsKLQkJZG9UZXN0RGVmYXVsdElhbmFOYW1lcygiQ3AxMjU2IiwgIlVURi04IiwgIndpbmRvd3MtMTI1NiIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0TVM5NDkoKSB7Ci0JCWRvVGVzdERlZmF1bHRJYW5hTmFtZXMoIk1TOTQ5IiwgIlVURi04IiwgIkVVQy1LUiIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0RVVDX0pQKCkgewotCQlkb1Rlc3REZWZhdWx0SWFuYU5hbWVzKCJFVUMtSlAiLCAiVVRGLTgiLCAiRVVDLUpQIik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RUb3RhbGx5RmFrZSgpIHsKLQkJZG9UZXN0RGVmYXVsdElhbmFOYW1lcygidG90YWxseUZha2UiLCAiVVRGLTgiLCAiVVRGLTgiKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFN5c3RlbUVuY29kaW5nKCkgewotCQlTdHJpbmcgc3lzdGVtRW5jID0gU3lzdGVtLmdldFByb3BlcnR5KCJmaWxlLmVuY29kaW5nIik7Ci0JCWlmIChzeXN0ZW1FbmMgIT0gbnVsbCkgewotCQkJU3RyaW5nIGFjdHVhbCA9IENvbW1vbkNoYXJzZXROYW1lcy5nZXRQcmVmZXJyZWREZWZhdWx0SWFuYU5hbWUoc3lzdGVtRW5jLCAiVVRGLTgiKTsKLQkJCWFzc2VydE5vdE51bGwoImRlZmF1bHQgSUFOQSBuYW1lIHRlc3QgZmFpbGVkIGZvciBzeXN0ZW0gZW5jb2RpbmcgIiArIHN5c3RlbUVuYywgYWN0dWFsKTsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvcHJvcGVydGllcy9UZXN0RGlzcGxheU5hbWVzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3Byb3BlcnRpZXMvVGVzdERpc3BsYXlOYW1lcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDg0MjNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvcHJvcGVydGllcy9UZXN0RGlzcGxheU5hbWVzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5wcm9wZXJ0aWVzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLkNvbW1vbkNoYXJzZXROYW1lczsKLQotCi1wdWJsaWMgY2xhc3MgVGVzdERpc3BsYXlOYW1lcyBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q29tbW9uTmFtZSgpIHsKLQkJU3RyaW5nIGRpc3BsYXlOYW1lID0gQ29tbW9uQ2hhcnNldE5hbWVzLmdldERpc3BsYXlTdHJpbmcoIklTTy04ODU5LTIiKTsKLQkJYXNzZXJ0Tm90TnVsbCgiZGlzcGxheSBuYW1lIGZvciBjaGFyc2V0IGNvdWxkIG5vdCBiZSByZXRyaWV2ZWQiLCBkaXNwbGF5TmFtZSk7Ci0JCWlmIChERUJVRykgewotCQkJU3lzdGVtLm91dC5wcmludGxuKGRpc3BsYXlOYW1lKTsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvcHJvcGVydGllcy9UZXN0T3ZlcnJpZGVzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3Byb3BlcnRpZXMvVGVzdE92ZXJyaWRlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTQwMGE4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvcHJvcGVydGllcy9UZXN0T3ZlcnJpZGVzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5wcm9wZXJ0aWVzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLkNvZGVkSU87Ci0KLXB1YmxpYyBjbGFzcyBUZXN0T3ZlcnJpZGVzIGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVRyA9IGZhbHNlOwotCi0JcHVibGljIFN0cmluZyBkb1Rlc3RPdmVycmlkZShTdHJpbmcgc3RyaW5nVG9DaGVjaykgewotCi0JCVN0cmluZyBjaGFyc2V0ID0gQ29kZWRJTy5nZXRBcHByb3ByaWF0ZUphdmFDaGFyc2V0KHN0cmluZ1RvQ2hlY2spOwotCQlhc3NlcnROb3ROdWxsKCJvdmVycmlkZSB0ZXN0IGZhaWxlZCBmb3IgIiArIHN0cmluZ1RvQ2hlY2ssIGNoYXJzZXQpOwotCQlyZXR1cm4gY2hhcnNldDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SVNPODg1OThJKCkgewotCQlTdHJpbmcgcmVzdWx0ID0gZG9UZXN0T3ZlcnJpZGUoIklTTy04ODU5LTgtSSIpOwotCQlhc3NlcnRFcXVhbHMoIm1hcHBpbmcgb3ZlcnJpZGUgbm90IGNvcnJlY3QgZm9yIElTTy04ODU5LTgtSSIsICJJU08tODg1OS04IiwgcmVzdWx0KTsKLQkJaWYgKERFQlVHKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4ocmVzdWx0KTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RYU0pJUygpIHsKLQkJU3RyaW5nIHJlc3VsdCA9IGRvVGVzdE92ZXJyaWRlKCJYLVNKSVMiKTsKLQkJYXNzZXJ0RXF1YWxzKCJtYXBwaW5nIG92ZXJyaWRlIG5vdCBjb3JyZWN0IGZvciBYLVNKSVMiLCAiU2hpZnRfSklTIiwgcmVzdWx0KTsKLQkJaWYgKERFQlVHKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4ocmVzdWx0KTsKLQkJfQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9yZWFkL1Rlc3RDb2RlZFJlYWRlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9yZWFkL1Rlc3RDb2RlZFJlYWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNDM2ZGUzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvcmVhZC9UZXN0Q29kZWRSZWFkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYxNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5yZWFkOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmNvbnRlbnQuSUNvbnRlbnREZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuQ29kZWRSZWFkZXJDcmVhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5JQ29udGVudERlc2NyaXB0aW9uRXh0ZW5kZWQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLk5vbkNvbnRlbnRCYXNlZEVuY29kaW5nUnVsZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5UZXN0c1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnV0aWwuUHJvamVjdFVuemlwVXRpbGl0eTsKLQotCi1wdWJsaWMgY2xhc3MgVGVzdENvZGVkUmVhZGVyIGV4dGVuZHMgVGVzdENhc2UgewotCS8vIHByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVEaXIgPSAiaHRtbC8iOwotCS8vIHByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVSb290ID0KLQkvLyAiL2J1aWxkcy9Xb3Jrc3BhY2VzL0hlYWRXb3Jrc3BhY2Uvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy8iOwotCS8vIHByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVMb2NhdGlvbiA9IGZpbGVSb290ICsgZmlsZURpcjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVR19URVNUX0RFVEFJTCA9IGZhbHNlOwotCS8vIG5lZWRzIHRvIGJlIHN0YXRpYywgc2luY2UgSlVuaXQgY3JlYXRlcyBkaWZmZXJlbmNlIGluc3RhbmNlcyBmb3IgZWFjaAotCS8vIHRlc3QKLQlwcml2YXRlIHN0YXRpYyBib29sZWFuIGZUZXN0UHJvamVjdEluaXRpYWxpemVkOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX1BST0pFQ1RfTkFNRSA9ICJvcmcuZWNsaXBzZS5lbmNvZGluZy5yZXNvdXJjZS5uZXd0ZXN0cyI7Ci0Jc3RhdGljIElQcm9qZWN0IGZUZXN0UHJvamVjdDsKLQlwcm90ZWN0ZWQgc3RhdGljIGludCBuU2V0dXBzID0gMDsKLQotCXByaXZhdGUgU3RyaW5nIG1hc3NhZ2VDaGFyc2V0KFN0cmluZyBmb3VuZENoYXJzZXQpIHsKLQkJU3RyaW5nIHJlc3VsdCA9IGZvdW5kQ2hhcnNldDsKLQkJaWYgKCJVVEYtMTZMRSIuZXF1YWxzKGZvdW5kQ2hhcnNldCkpIHsKLQkJCXJlc3VsdCA9ICJVVEYtMTYiOwotCQl9IGVsc2UgaWYgKCJYLVVuaWNvZGVMaXR0bGUiLmVxdWFscyhmb3VuZENoYXJzZXQpKSB7Ci0JCQlyZXN1bHQgPSAiVVRGLTE2IjsKLQkJfSBlbHNlIGlmICgiWC1Vbmljb2RlQmlnIi5lcXVhbHMoZm91bmRDaGFyc2V0KSkgewotCQkJcmVzdWx0ID0gIlVURi0xNkJFIjsKLQkJfQotCi0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JLyoqCi0JICogCi0JICovCi0JcHVibGljIFRlc3RDb2RlZFJlYWRlcigpIHsKLQkJc3VwZXIoKTsKLQkJLy8gU3lzdGVtLm91dC5wcmludGxuKGN1cnJlbnRQbGF0Zm9ybUNoYXJzZXQpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQkJLy8gdHJ5IHsKLQkJLy8gbmV3IFRlc3RDb2RlZFJlYWRlcigpLmRvQWxsRmlsZXMoKTsKLQkJLy8gfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCS8vIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCS8vIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJLy8gZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJLy8gfQotCX0KLQotCXByaXZhdGUgc3RhdGljIHZvaWQgY3JlYXRlUHJvamVjdChJUHJvamVjdCBwcm9qZWN0LCBJUGF0aCBsb2NhdGlvblBhdGgsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlpZiAobW9uaXRvciA9PSBudWxsKSB7Ci0JCQltb25pdG9yID0gbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKTsKLQkJfQotCQltb25pdG9yLmJlZ2luVGFzaygiY3JlYXRpbmcgdGVzdCBwcm9qZWN0IiwgMTApOwotCQkvLyBjcmVhdGUgdGhlIHByb2plY3QKLQkJdHJ5IHsKLQkJCWlmICghcHJvamVjdC5leGlzdHMoKSkgewotCQkJCUlQcm9qZWN0RGVzY3JpcHRpb24gZGVzYyA9IHByb2plY3QuZ2V0V29ya3NwYWNlKCkubmV3UHJvamVjdERlc2NyaXB0aW9uKHByb2plY3QuZ2V0TmFtZSgpKTsKLQkJCQlpZiAoUGxhdGZvcm0uZ2V0TG9jYXRpb24oKS5lcXVhbHMobG9jYXRpb25QYXRoKSkgewotCQkJCQlsb2NhdGlvblBhdGggPSBudWxsOwotCQkJCX0KLQkJCQlkZXNjLnNldExvY2F0aW9uKGxvY2F0aW9uUGF0aCk7Ci0JCQkJcHJvamVjdC5jcmVhdGUoZGVzYywgbW9uaXRvcik7Ci0JCQkJbW9uaXRvciA9IG51bGw7Ci0JCQl9Ci0JCQlpZiAoIXByb2plY3QuaXNPcGVuKCkpIHsKLQkJCQlwcm9qZWN0Lm9wZW4obW9uaXRvcik7Ci0JCQkJbW9uaXRvciA9IG51bGw7Ci0JCQl9Ci0JCX0gZmluYWxseSB7Ci0JCQlpZiAobW9uaXRvciAhPSBudWxsKSB7Ci0JCQkJbW9uaXRvci5kb25lKCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyB2b2lkIGdldEFuZENyZWF0ZVByb2plY3QoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCS8vIFRlc3RzUGx1Z2luIHRlc3RzUGx1Z2luID0gKFRlc3RzUGx1Z2luKQotCQkvLyBQbGF0Zm9ybS5nZXRQbHVnaW4oIm9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmciKTsKLQkJSVdvcmtzcGFjZSB3b3Jrc3BhY2UgPSBUZXN0c1BsdWdpbi5nZXRXb3Jrc3BhY2UoKTsKLQkJSVdvcmtzcGFjZVJvb3Qgcm9vdCA9IHdvcmtzcGFjZS5nZXRSb290KCk7Ci0JCWZUZXN0UHJvamVjdCA9IHJvb3QuZ2V0UHJvamVjdChURVNUX1BST0pFQ1RfTkFNRSk7Ci0JCS8vIHRoaXMgZm9ybSBjcmVhdGVzIHByb2plY3QgYXMgImxpbmtlZCIgYmFjayB0byAnZmlsZVJvb3QnCi0JCS8vIGNyZWF0ZVByb2plY3QodGVzdFByb2plY3QsIG5ldyBQYXRoKGZpbGVSb290KSwgbnVsbCk7Ci0JCWNyZWF0ZVByb2plY3QoZlRlc3RQcm9qZWN0LCBudWxsLCBudWxsKTsKLQkJZlRlc3RQcm9qZWN0LnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQlhc3NlcnRUcnVlKGZUZXN0UHJvamVjdC5leGlzdHMoKSk7Ci0JCS8vIElDb250YWluZXIgZG90ZXN0RmlsZXMgPSB0ZXN0UHJvamVjdC5nZXRGb2xkZXIoImRvdGVzdEZpbGVzIik7Ci0JCS8vIGFzc2VydFRydWUoZG90ZXN0RmlsZXMuZXhpc3RzKCkpOwotCQkvLyBJUmVzb3VyY2VbXSBhbGxGb2xkZXJzID0gZG90ZXN0RmlsZXMubWVtYmVycygpOwotCQkvLyBhc3NlcnROb3ROdWxsKGFsbEZvbGRlcnMpOwotCX0KLQotCXByaXZhdGUgU3RyaW5nQnVmZmVyIHJlYWRJbnB1dFN0cmVhbShSZWFkZXIgcmVhZGVyKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlpbnQgbnVtUmVhZCA9IDA7Ci0JCWNoYXIgdEJ1ZmZbXSA9IG5ldyBjaGFyWzQwMDBdOwotCQl3aGlsZSAoKG51bVJlYWQgPSByZWFkZXIucmVhZCh0QnVmZiwgMCwgdEJ1ZmYubGVuZ3RoKSkgIT0gLTEpIHsKLQkJCWJ1ZmZlci5hcHBlbmQodEJ1ZmYsIDAsIG51bVJlYWQpOwotCQl9Ci0JCXJldHVybiBidWZmZXI7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc2V0VXAoKTsKLQkJblNldHVwcysrOwotCQlpZiAoIWZUZXN0UHJvamVjdEluaXRpYWxpemVkKSB7Ci0JCQlnZXRBbmRDcmVhdGVQcm9qZWN0KCk7Ci0JCQkvLyB1bnppcCBmaWxlcyB0byB0aGUgcm9vdCBvZiB3b3Jrc3BhY2UgZGlyZWN0b3J5Ci0JCQlTdHJpbmcgZGVzdGluYXRpb25Qcm9qZWN0U3RyaW5nID0gZlRlc3RQcm9qZWN0LmdldExvY2F0aW9uKCkudG9PU1N0cmluZygpOwotCQkJU3RyaW5nIGRlc3RpbmF0aW9uRm9sZGVyID0gZGVzdGluYXRpb25Qcm9qZWN0U3RyaW5nICsgIi8iOwotCQkJLy8gdGhpcyB6aXAgZmlsZSBpcyBzaXR0aW5nIGluIHRoZSAicm9vdCIgb2YgdGVzdCBwbHVnaW4KLQkJCUZpbGUgemlwRmlsZSA9IFRlc3RzUGx1Z2luLmdldFRlc3RGaWxlKCJ0ZXN0ZmlsZXMuemlwIik7Ci0JCQlQcm9qZWN0VW56aXBVdGlsaXR5IHByb2pVdGlsID0gbmV3IFByb2plY3RVbnppcFV0aWxpdHkoKTsKLQkJCXByb2pVdGlsLnVuemlwQW5kSW1wb3J0KHppcEZpbGUsIGRlc3RpbmF0aW9uRm9sZGVyKTsKLQkJCXByb2pVdGlsLmluaXRKYXZhUHJvamVjdChURVNUX1BST0pFQ1RfTkFNRSk7Ci0JCQlmVGVzdFByb2plY3QucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7Ci0JCQlmVGVzdFByb2plY3RJbml0aWFsaXplZCA9IHRydWU7Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci50ZWFyRG93bigpOwotCQluU2V0dXBzLS07Ci0JCWlmIChuU2V0dXBzID09IDApIHsKLQkJCWlmICghREVCVUcpIHsKLQkJCQkvLyBEaXNwbGF5IGRpc3BsYXkgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldERpc3BsYXkoKTsKLQkJCQkvLyBkaXNwbGF5LmFzeW5jRXhlYyhuZXcgUnVubmFibGUoKSB7Ci0JCQkJLy8gcHVibGljIHZvaWQgcnVuKCkgewotCQkJCS8vIFByb2plY3RVbnppcFV0aWxpdHkgcHJvalV0aWwgPSBuZXcgUHJvamVjdFVuemlwVXRpbGl0eSgpOwotCQkJCS8vIElQcm9qZWN0IHByb2ogPSBmVGVzdFByb2plY3Q7Ci0JCQkJLy8gZlRlc3RQcm9qZWN0ID0gbnVsbDsKLQkJCQkvLyB0cnkgewotCQkJCS8vIHByb2pVdGlsLmRlbGV0ZVByb2plY3QocHJvaik7Ci0JCQkJLy8gfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCQkvLyBlLnByaW50U3RhY2tUcmFjZSgpOwotCQkJCS8vIH0KLQkJCQkvLyB9Ci0JCQkJLy8gfSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBkb1Rlc3QoU3RyaW5nIGV4cGVjdGVkSmF2YUNoYXJzZXQsIFN0cmluZyBleHBlY3RlZERldGVjdGVkQ2hhcnNldCwgU3RyaW5nIGZpbGVQYXRoLCBDbGFzcyBleHBlY3RlZEV4Y2VwdGlvbikgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJUmVhZGVyIHJlYWRlciA9IG51bGw7Ci0JCUlGaWxlIGZpbGUgPSAoSUZpbGUpIGZUZXN0UHJvamVjdC5maW5kTWVtYmVyKGZpbGVQYXRoKTsKLQkJYXNzZXJ0Tm90TnVsbChmaWxlKTsKLQkJZXhwZWN0ZWRKYXZhQ2hhcnNldCA9IG1hc3NhZ2VDaGFyc2V0KGV4cGVjdGVkSmF2YUNoYXJzZXQpOwotCQlleHBlY3RlZERldGVjdGVkQ2hhcnNldCA9IG1hc3NhZ2VDaGFyc2V0KGV4cGVjdGVkRGV0ZWN0ZWRDaGFyc2V0KTsKLQotCQkvLyBub3RlOiBldmVudHVhbGx5LCBJIHNob3VsZCBjaGFuZ2UgY2FsbGluZyBtZXRob2RzIHNvIGlmIGRldGVjdGVkCi0JCS8vIGNoYXJzZXQgaXMgZXhwZWN0ZWQgdG8gYmUgc2FtZQotCQkvLyBhcyB0aGUgJ3VzZWQnIGphdmEgY2hhcnNldCwgdGhlbiBzaW1wbHkgcGFzcyBpbiBudWxsLCBidXQgZm9yIG5vdywKLQkJLy8gd2UnbGwgImZvcmNlIiB0aGF0IGhlcmUgaW4gdGhpcwotCQkvLyBtZXRob2QuCi0JCWlmIChleHBlY3RlZEphdmFDaGFyc2V0LmVxdWFscyhleHBlY3RlZERldGVjdGVkQ2hhcnNldCkpIHsKLQkJCWV4cGVjdGVkRGV0ZWN0ZWRDaGFyc2V0ID0gbnVsbDsKLQkJfQotCi0JCXRyeSB7Ci0JCQlyZWFkZXIgPSBkb0NvcmVUZXN0KGV4cGVjdGVkSmF2YUNoYXJzZXQsIGV4cGVjdGVkRGV0ZWN0ZWRDaGFyc2V0LCBmaWxlKTsKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCWlmIChleHBlY3RlZEV4Y2VwdGlvbiAhPSBudWxsKSB7Ci0JCQkJYm9vbGVhbiByZXN1bHQgPSBleHBlY3RlZEV4Y2VwdGlvbi5pc0luc3RhbmNlKGUpOwotCQkJCWFzc2VydFRydWUoIlVuZXhwZWN0ZWQgRXhjZXB0aW9uOiAiICsgZ2V0R29vZEZ1bGxNc2coZSksIHJlc3VsdCk7Ci0JCQl9IGVsc2UgewotCQkJCS8vIHdpbGwgYWx3YXkgYXNzZXJ0IGlmIGdldHMgdG8gaGVyZQotCQkJCVN0cmluZyBtc2cgPSBnZXRHb29kRnVsbE1zZyhlKTsKLQkJCQlhc3NlcnROdWxsKCJVbmV4cGVjdGVkIEV4Y2VwdGlvbjogIiArIG1zZywgZSk7Ci0JCQl9Ci0JCX0gZmluYWxseSB7Ci0JCQlpZiAocmVhZGVyICE9IG51bGwpIHsKLQkJCQlyZWFkZXIuY2xvc2UoKTsKLQkJCX0KLQotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIFJlYWRlciBkb0NvcmVUZXN0KFN0cmluZyBleHBlY3RlZEphdmFDaGFyc2V0LCBTdHJpbmcgZXhwZWN0ZWREZXRlY3RlZENoYXJzZXQsIElGaWxlIGZpbGUpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVJlYWRlciByZWFkZXI7Ci0JCS8vIGNyZWF0ZSB0aGVzZSBmaXJzdCwgdG8gdGVzdCBleGNlcHRpb24gYmVpbmcgdGhyb3duIGNvcnJlY3RseQotCQlDb2RlZFJlYWRlckNyZWF0b3IgY29kZWRSZWFkZXJDcmVhdG9yID0gbmV3IENvZGVkUmVhZGVyQ3JlYXRvcigpOwotCQljb2RlZFJlYWRlckNyZWF0b3Iuc2V0KGZpbGUpOwotCQlyZWFkZXIgPSBjb2RlZFJlYWRlckNyZWF0b3IuZ2V0Q29kZWRSZWFkZXIoKTsKLQotCQlTdHJpbmcgamF2YUNoYXJzZXROYW1lID0gZmlsZS5nZXRDaGFyc2V0KCk7Ci0JCUlDb250ZW50RGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSBmaWxlLmdldENvbnRlbnREZXNjcmlwdGlvbigpOwotCQlqYXZhQ2hhcnNldE5hbWUgPSBtYXNzYWdlQ2hhcnNldChqYXZhQ2hhcnNldE5hbWUpOwotCQkvLyBjb2RlZFJlYWRlckNyZWF0b3IuZ2V0RW5jb2RpbmdNZW1lbnRvKCkuZ2V0SmF2YUNoYXJzZXROYW1lKCk7Ci0JCWlmIChleHBlY3RlZEphdmFDaGFyc2V0LmVxdWFscygiZXhwZWN0UGxhdGZvcm1DaGFyc2V0IikpIHsKLQkJCVN0cmluZyBwbGF0Zm9ybURlZmF1bHQgPSBOb25Db250ZW50QmFzZWRFbmNvZGluZ1J1bGVzLnVzZURlZmF1bHROYW1lUnVsZXMobnVsbCk7Ci0JCQlhc3NlcnRUcnVlKGphdmFDaGFyc2V0TmFtZS5lcXVhbHMocGxhdGZvcm1EZWZhdWx0KSk7Ci0JCX0gZWxzZSB7Ci0JCQlib29sZWFuIGFzRXhwZWN0ZWQgPSBqYXZhQ2hhcnNldE5hbWUuZXF1YWxzKGV4cGVjdGVkSmF2YUNoYXJzZXQpOwotCQkJYXNzZXJ0VHJ1ZShqYXZhQ2hhcnNldE5hbWUgKyAiIGRpZCBub3QgZXF1YWwgdGhlIGV4cGVjdGVkICIgKyBleHBlY3RlZEphdmFDaGFyc2V0ICsgIiAodGhpcyBpcyBhIFZNIGRlcGVuZGVudCB0ZXN0KSIsIGFzRXhwZWN0ZWQpOwotCQl9Ci0JCVN0cmluZyBqYXZhQ2hhcnNldE5hbWVQcm9wZXJ0eSA9IChTdHJpbmcpIGRlc2NyaXB0aW9uLmdldFByb3BlcnR5KElDb250ZW50RGVzY3JpcHRpb24uQ0hBUlNFVCk7Ci0JCVN0cmluZyBkZXRlY3RlZENoYXJzZXROYW1lUHJvcGVydHkgPSBnZXREZXRlY3RlZENoYXJzZXROYW1lKGRlc2NyaXB0aW9uKTsKLQkJZGV0ZWN0ZWRDaGFyc2V0TmFtZVByb3BlcnR5ID0gbWFzc2FnZUNoYXJzZXQoZGV0ZWN0ZWRDaGFyc2V0TmFtZVByb3BlcnR5KTsKLQkJLy8gaWYgKGRldGVjdGVkQ2hhcnNldE5hbWUgPT0gbnVsbCkgewotCQkvLyBkZXRlY3RlZENoYXJzZXROYW1lID0gamF2YUNoYXJzZXROYW1lUHJvcGVydHk7Ci0JCS8vIH0KLQkJaWYgKCFleHBlY3RlZEphdmFDaGFyc2V0LmVxdWFscygiZXhwZWN0UGxhdGZvcm1DaGFyc2V0IikpIHsKLQkJCWJvb2xlYW4gZXhwZWNlZFJlc3VsdCA9IGV4cGVjdGVkSmF2YUNoYXJzZXQuZXF1YWxzKGphdmFDaGFyc2V0TmFtZVByb3BlcnR5KTsKLQkJCWFzc2VydFRydWUoImphdmEgYmFzZWQgY2hhcnNldCBuYW1lIHdhcyBub3QgYXMgZXhwZWN0ZWQiLCBleHBlY2VkUmVzdWx0KTsKLQkJfSBlbHNlIHsKLQkJCVN0cmluZyBleHBlY3RlZERlZmF1bHQgPSBOb25Db250ZW50QmFzZWRFbmNvZGluZ1J1bGVzLnVzZURlZmF1bHROYW1lUnVsZXMobnVsbCk7Ci0JCQlib29sZWFuIEV4cGVjdGVkUmVzdWx0ID0gZXhwZWN0ZWREZWZhdWx0LmVxdWFscyhqYXZhQ2hhcnNldE5hbWVQcm9wZXJ0eSk7Ci0JCQlhc3NlcnRUcnVlKCJqYXZhIGJhc2VkIGNoYXJzZXQgbmFtZSBub3QgYXMgZXhwZWN0ZWQgd2hlbiBwbGF0Zm9ybSBkZWZhdWx0IGV4cGVjdGVkIiwgRXhwZWN0ZWRSZXN1bHQpOwotCQl9Ci0KLQkJaWYgKGV4cGVjdGVkRGV0ZWN0ZWRDaGFyc2V0ICE9IG51bGwpIHsKLQkJCWJvb2xlYW4gZXhwZWN0ZWRSZXN1bHQgPSBleHBlY3RlZERldGVjdGVkQ2hhcnNldC5lcXVhbHMoZGV0ZWN0ZWRDaGFyc2V0TmFtZVByb3BlcnR5KTsKLQkJCWFzc2VydFRydWUoImRldGVjdGVkIGNoYXJzZXQgbmFtZSB3YXMgbm90IGFzIGV4cGVjdGVkIiwgZXhwZWN0ZWRSZXN1bHQpOwotCQl9Ci0JCS8vIHRlc3QgaWYgY2FuIHJlYWQvd3JpdGUgZmlsZQotCQlTdHJpbmdCdWZmZXIgYnVmZmVyID0gcmVhZElucHV0U3RyZWFtKHJlYWRlcik7Ci0JCWlmIChERUJVR19URVNUX0RFVEFJTCkgewotCQkJU3lzdGVtLm91dC5wcmludChidWZmZXIpOwotCQl9Ci0JCXJldHVybiByZWFkZXI7Ci0JfQotCi0JLyoqCi0JICogVGhpcyBtZXRob2QgaXMganVzdCB0byBoZWxwIGhhbmRsZSB0cmFuc2l0aW9uIGZyb20gdXNpbmcKLQkgKiBFbmNvZGluZ01lbXRlbnRvIHRvIG5vdCB1c2luZyBlbmNvZGluZ01lbWVudG8uCi0JICovCi0JcHJpdmF0ZSBTdHJpbmcgZ2V0RGV0ZWN0ZWRDaGFyc2V0TmFtZShJQ29udGVudERlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKSB7Ci0JCVN0cmluZyByZXN1bHQgPSBudWxsOwotCQlyZXN1bHQgPSAoU3RyaW5nKSBkZXNjcmlwdGlvbi5nZXRQcm9wZXJ0eShJQ29udGVudERlc2NyaXB0aW9uRXh0ZW5kZWQuREVURUNURURfQ0hBUlNFVCk7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGUKLQkgKiBAcmV0dXJuCi0JICovCi0JcHJpdmF0ZSBTdHJpbmcgZ2V0R29vZEZ1bGxNc2coRXhjZXB0aW9uIGUpIHsKLQkJU3RyaW5nIG1zZyA9IGUuZ2V0Q2xhc3MoKS5nZXROYW1lKCkgKyAiOiAiICsgZS5nZXRNZXNzYWdlKCk7Ci0JCXJldHVybiBtc2c7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJleHBlY3RQbGF0Zm9ybUNoYXJzZXQiLCBudWxsLCAidGVzdGZpbGVzL2Nzcy9lbXB0eUZpbGUuY3NzIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJFVUMtSlAiLCAiRVVDLUpQIiwgInRlc3RmaWxlcy9jc3MvZW5jb2RpbmdfdGVzdF9ldWNqcC5jc3MiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy0yMDIyLUpQIiwgIklTTy0yMDIyLUpQIiwgInRlc3RmaWxlcy9jc3MvZW5jb2RpbmdfdGVzdF9qaXMuY3NzIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJTaGlmdF9KSVMiLCAiU0hJRlRfSklTIiwgInRlc3RmaWxlcy9jc3MvZW5jb2RpbmdfdGVzdF9zamlzLmNzcyIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiZXhwZWN0UGxhdGZvcm1DaGFyc2V0IiwgbnVsbCwgInRlc3RmaWxlcy9jc3Mvbm9FbmNvZGluZy5jc3MiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTYiLCAiSVNPLTg4NTktNiIsICJ0ZXN0ZmlsZXMvY3NzL25vblN0YW5kYXJkLmNzcyIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktNiIsICJJU08tODg1OS02IiwgInRlc3RmaWxlcy9jc3Mvbm9uU3RhbmRhcmRJbGxGb3JtZWQuY3NzIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS02IiwgIklTTy04ODU5LTYiLCAidGVzdGZpbGVzL2Nzcy9ub25TdGFuZGFyZElsbEZvcm1lZDIuY3NzIiwgbnVsbCk7Ci0JfQotCi0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTU3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJleHBlY3RQbGF0Zm9ybUNoYXJzZXQiLCBudWxsLCAidGVzdGZpbGVzL2h0bWwvRW1wdHlGaWxlLmh0bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTU4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJVVEYtOCIsICJ0ZXN0ZmlsZXMvaHRtbC9JbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0Lmh0bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTU5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJleHBlY3RQbGF0Zm9ybUNoYXJzZXQiLCBudWxsLCAidGVzdGZpbGVzL2h0bWwvTGFyZ2VOb0VuY29kaW5nLmh0bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgImlzby04ODU5LTEiLCAidGVzdGZpbGVzL2h0bWwvTGFyZ2VOb25EZWZhdWx0Lmh0bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS02IiwgIklTTy04ODU5LTYiLCAidGVzdGZpbGVzL2h0bWwvTXVsdGlOb25EZWZhdWx0Lmh0bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJleHBlY3RQbGF0Zm9ybUNoYXJzZXQiLCBudWxsLCAidGVzdGZpbGVzL2h0bWwvTm9FbmNvZGluZy5odG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAiVVRGLTgiLCAidGVzdGZpbGVzL2h0bWwvbm9xdW90ZXMuaHRtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgIlVURi04IiwgInRlc3RmaWxlcy9odG1sL05vcm1hbE5vbkRlZmF1bHQuaHRtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTEiLCAiSVNPLTg4NTktMSIsICJ0ZXN0ZmlsZXMvanNwL0VtcHR5RmlsZS5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS04IiwgbnVsbCwgInRlc3RmaWxlcy9qc3AvSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJudWxsIiwgIm51bGwiLCAidGVzdGZpbGVzL2pzcC9pblZhbGlkRW5jb2RpbmdWYWx1ZS5qc3AiLCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZXhjZXB0aW9ucy5VbnN1cHBvcnRlZENoYXJzZXRFeGNlcHRpb25XaXRoRGV0YWlsLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJ3aW5kb3dzLTEyNTIiLCAiQ3AxMjUyIiwgInRlc3RmaWxlcy9qc3AvamF2YUVuY29kaW5nVmFsdWUuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsICJJU08tODg1OS0xIiwgInRlc3RmaWxlcy9qc3AvTWFsZm9ybWVkTm9FbmNvZGluZy5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTcwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgIklTTy04ODU5LTEiLCAidGVzdGZpbGVzL2pzcC9NYWxmb3JtZWROb0VuY29kaW5nWFNMLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTEiLCAiSVNPLTg4NTktMSIsICJ0ZXN0ZmlsZXMvanNwL25vRW5jb2RpbmcuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsICJJU08tODg1OS0xIiwgInRlc3RmaWxlcy9qc3AvTm9FbmNvZGluZ2luWE1MRGVjbC5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTczKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0yIiwgIklTTy04ODU5LTIiLCAidGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2UuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3NCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsICJJU08tODg1OS0xIiwgInRlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlTm9FbmNvZGluZy5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0zIiwgIklTTy04ODU5LTMiLCAidGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VVc2luZ0NoYXJzZXQuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMiIsICJJU08tODg1OS0yIiwgInRlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlVXNpbmdYTUxTeW50YXguanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktOCIsIG51bGwsICJ0ZXN0ZmlsZXMvanNwL05vcm1hbE5vbkRlZmF1bHQuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktOCIsICJJU08tODg1OS04IiwgInRlc3RmaWxlcy9qc3AvTm9ybWFsTm9uRGVmYXVsdFdpdGhYTUxEZWNsLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTciLCAiSVNPLTg4NTktNyIsICJ0ZXN0ZmlsZXMvanNwL05vcm1hbFBhZ2VDYXNlTm9uRGVmYXVsdC5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJTaGlmdF9KSVMiLCAiU0hJRlRfSklTIiwgInRlc3RmaWxlcy9qc3AvU2VsQ29sQmVhblJvdzEyUmVzdWx0c0Zvcm0uanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMyIsICJJU08tODg1OS0zIiwgInRlc3RmaWxlcy9qc3AvdGVzdEJyb2tlbkxpbmUuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4MigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgibnVsbCIsICJudWxsIiwgInRlc3RmaWxlcy9qc3AvdGVzdERlZmF1bHRFbmNvZGluZy5qc3AiLCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZXhjZXB0aW9ucy5VbnN1cHBvcnRlZENoYXJzZXRFeGNlcHRpb25XaXRoRGV0YWlsLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJudWxsIiwgIm51bGwiLCAidGVzdGZpbGVzL2pzcC90ZXN0RGVmYXVsdEVuY29kaW5nV2l0aEp1bmsuanNwIiwgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmV4Y2VwdGlvbnMuVW5zdXBwb3J0ZWRDaGFyc2V0RXhjZXB0aW9uV2l0aERldGFpbC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsICJJU08tODg1OS0xIiwgInRlc3RmaWxlcy9qc3AvdGVzdEV4dHJhSnVuay5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJVVEYtOCIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3RFeHRyYVZhbGlkU3R1ZmYuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsIG51bGwsICJ0ZXN0ZmlsZXMvanNwL3Rlc3RJbGxGb3JtZWQuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAiVVRGLTgiLCAidGVzdGZpbGVzL2pzcC90ZXN0SWxsRm9ybWVkMi5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgIklTTy04ODU5LTEiLCAidGVzdGZpbGVzL2pzcC90ZXN0Tm9FbmNvZGluZ1ZhbHVlLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTEiLCAiSVNPLTg4NTktMSIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmUuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMiIsICJJU08tODg1OS0yIiwgInRlc3RmaWxlcy9qc3AvdGVzdE5vUGFnZURpcmVjdGl2ZUF0Rmlyc3QuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsICJJU08tODg1OS0xIiwgInRlc3RmaWxlcy9qc3AvdGVzdE5vUGFnZURpcmVjdGl2ZUluTGFyZ2VGaWxlLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgIlVURi04IiwgInRlc3RmaWxlcy9qc3AvdGVzdE5vcm1hbENhc2UuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTE2IiwgIlVURi0xNiIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3RVVEYxNi5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtMTZMRSIsICJVVEYtMTZMRSIsICJ0ZXN0ZmlsZXMvanNwL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXIyLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi0xNiIsICJVVEYtMTYiLCAidGVzdGZpbGVzL2pzcC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyQkUuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTE2IiwgIlVURi0xNiIsICJ0ZXN0ZmlsZXMvanNwL3V0ZjE2V2l0aEphcGFuZXNlQ2hhcnMuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAiVVRGLTgiLCAidGVzdGZpbGVzL2pzcC9VVEY4V2l0aDNCeXRlQk9NLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTgiLCAiSVNPLTg4NTktOCIsICJ0ZXN0ZmlsZXMvanNwL1dlbGxGb3JtZWROb3JtYWxOb25EZWZhdWx0LmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlNoaWZ0X0pJUyIsICJTSElGVF9KSVMiLCAidGVzdGZpbGVzL3JlZ3Jlc3Npb25UZXN0RmlsZXMvZGVmZWN0MjIzMzY1L1NlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJTaGlmdF9KSVMiLCAiU0hJRlRfSklTIiwgInRlc3RmaWxlcy9yZWdyZXNzaW9uVGVzdEZpbGVzL2RlZmVjdDIyMzM2NS9TZWxDb2xCZWFuUm93MTJSZXN1bHRzRm9ybUIuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlNoaWZ0X0pJUyIsICJTSElGVF9KSVMiLCAidGVzdGZpbGVzL3JlZ3Jlc3Npb25UZXN0RmlsZXMvZGVmZWN0MjI0MjkzL3Rlc3RzaGlmdGppc1htbFN5bnRheC5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiU2hpZnRfSklTIiwgIlNoaWZ0X0pJUyIsICJ0ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjk2NjcvYXVkaS5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAiVVRGLTgiLCAidGVzdGZpbGVzL3htbC9FbXB0eUZpbGUueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIkVVQy1KUCIsICJFVUMtSlAiLCAidGVzdGZpbGVzL3htbC9ldWNqcC54bWwiLCBudWxsKTsKLQl9Ci0KLQkvLyBwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JLy8gZG9UZXN0KCJJU08tODg1OS0xIiwgIklTTy04ODU5LTEiLAotCS8vICJ0ZXN0ZmlsZXMveG1sL0lsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQueG1sIiwgbnVsbCk7Ci0JLy8gfQotCi0JLy8gcHVibGljIHZvaWQgdGVzdEZpbGUxMDYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCS8vIGRvVGVzdCgiVVRGLTgiLCAiVVRGLTgiLCAidGVzdGZpbGVzL3htbC9NYWxmb3JtZWROb0VuY29kaW5nLnhtbCIsCi0JLy8gQ2hhcmFjdGVyQ29kaW5nRXhjZXB0aW9uLmNsYXNzKTsKLQkvLyB9Ci0KLQkvLyBwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JLy8gZG9UZXN0KCJVVEYtOCIsICJVVEYtOCIsICJ0ZXN0ZmlsZXMveG1sL01hbGZvcm1lZE5vRW5jb2RpbmcueHNsIiwKLQkvLyBDaGFyYWN0ZXJDb2RpbmdFeGNlcHRpb24uY2xhc3MpOwotCS8vIH0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJVVEYtOCIsICJ0ZXN0ZmlsZXMveG1sL05vRW5jb2RpbmcueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTEiLCAiSVNPLTg4NTktMSIsICJ0ZXN0ZmlsZXMveG1sL05vcm1hbE5vbkRlZmF1bHQueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlNoaWZ0X0pJUyIsICJTaGlmdF9KSVMiLCAidGVzdGZpbGVzL3htbC9zaGlmdGppcy54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsICJJU08tODg1OS0xIiwgInRlc3RmaWxlcy94bWwvdGVzdEV4dHJhSnVuay54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAiVVRGLTgiLCAidGVzdGZpbGVzL3htbC90ZXN0RXh0cmFWYWxpZFN0dWZmLnhtbCIsIG51bGwpOwotCX0KLQotCS8vIHB1YmxpYyB2b2lkIHRlc3RGaWxlMTEzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkvLyBkb1Rlc3QoIlVURi04IiwgIlVURi04IiwgInRlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZC54bWwiLCBudWxsKTsKLQkvLyB9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAiVVRGLTgiLCAidGVzdGZpbGVzL3htbC90ZXN0SWxsRm9ybWVkMi54bWwiLCBudWxsKTsKLQl9Ci0KLQkvLyBwdWJsaWMgdm9pZCB0ZXN0RmlsZTExNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JLy8gZG9UZXN0KCJudWxsIiwgIm51bGwiLCAidGVzdGZpbGVzL3htbC90ZXN0SWxsRm9ybWVkMy54bWwiLAotCS8vIFVuc3VwcG9ydGVkQ2hhcnNldEV4Y2VwdGlvbldpdGhEZXRhaWwuY2xhc3MpOwotCS8vIH0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJVVEYtOCIsICJ0ZXN0ZmlsZXMveG1sL3Rlc3RJbGxGb3JtZWQ0LnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgIklTTy04ODU5LTEiLCAidGVzdGZpbGVzL3htbC90ZXN0TXVsdGlMaW5lLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJVVEYtOCIsICJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb0VuY29kaW5nVmFsdWUueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgIlVURi04IiwgInRlc3RmaWxlcy94bWwvdGVzdE5vcm1hbENhc2UueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgIlVURi04IiwgInRlc3RmaWxlcy94bWwvdGVzdE5vWE1MRGVjbC54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAiVVRGLTgiLCAidGVzdGZpbGVzL3htbC90ZXN0Tm9YTUxEZWNsQXRGaXJzdC54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAiVVRGLTgiLCAidGVzdGZpbGVzL3htbC90ZXN0Tm9YTUxEZWNsSW5MYXJnZUZpbGUueG1sIiwgbnVsbCk7Ci0JfQotCi0JLy8gcHVibGljIHZvaWQgdGVzdEZpbGUxMjMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCS8vIGRvVGVzdCgiVVRGLTE2QkUiLCAiVVRGLTE2QkUiLCAidGVzdGZpbGVzL3htbC90ZXN0VVRGMTYueG1sIiwKLQkvLyBDaGFyYWN0ZXJDb2RpbmdFeGNlcHRpb24uY2xhc3MpOwotCS8vIH0KLQotCS8vIHB1YmxpYyB2b2lkIHRlc3RGaWxlMTI0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkvLyBkb1Rlc3QoIlVURi0xNkxFIiwgIlVURi0xNkxFIiwKLQkvLyAidGVzdGZpbGVzL3htbC9VVEYxNkxFQXRTdGFydE9mTGFyZ2VGaWxlLnhtbCIsIG51bGwpOwotCS8vIH0KLQotCS8vIHB1YmxpYyB2b2lkIHRlc3RGaWxlMTI1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkvLyBkb1Rlc3QoIlVURi0xNkxFIiwgIlVURi0xNkxFIiwKLQkvLyAidGVzdGZpbGVzL3htbC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyMi54bWwiLCBudWxsKTsKLQkvLyB9Ci0KLQkvLyBwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JLy8gZG9UZXN0KCJVVEYtMTZCRSIsICJVVEYtMTZCRSIsCi0JLy8gInRlc3RmaWxlcy94bWwvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlckJFLnhtbCIsCi0JLy8gQ2hhcmFjdGVyQ29kaW5nRXhjZXB0aW9uLmNsYXNzKTsKLQkvLyB9Ci0KLQkvLyBwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JLy8gZG9UZXN0KCJVVEYtMTZCRSIsICJVVEYtMTZCRSIsCi0JLy8gInRlc3RmaWxlcy94bWwvdXRmMTZXaXRoSmFwYW5lc2VDaGFycy54bWwiLCBudWxsKTsKLQkvLyB9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAiVVRGLTgiLCAidGVzdGZpbGVzL3htbC9VVEY4V2l0aDNCeXRlQk9NLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3REb2N1bWVudFN0cmVhbUNhc2VIVE1MKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJTaGlmdF9KSVMiLCAiU0hJRlRfSklTIiwgInRlc3RmaWxlcy9Eb2N1bWVudFN0cmVhbVRlc3RDYXNlL2thZXJ1NS5odG0iLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RG9jdW1lbnRTdHJlYW1DYXNlSlNQKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJTaGlmdF9KSVMiLCAiU0hJRlRfSklTIiwgInRlc3RmaWxlcy9Eb2N1bWVudFN0cmVhbVRlc3RDYXNlL2thZXJ1NS5qc3AiLCBudWxsKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3JlYWQvVGVzdENvZGVkUmVhZGVyT25HZW5uZWRGaWxlcy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9yZWFkL1Rlc3RDb2RlZFJlYWRlck9uR2VubmVkRmlsZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzk3ODk0My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3JlYWQvVGVzdENvZGVkUmVhZGVyT25HZW5uZWRGaWxlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzE3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnJlYWQ7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5HZW5lcmF0ZUZpbGVzOwotCi0KLS8qKgotICogVGhpcyBjbGFzcyBzaG91bGQgY29udGFpbiBhICJtYXN0ZXIgbGlzdCIgb2YgYWxsIGZpbGVuYW1lcyBnZW5lcmF0ZWQgYnkKLSAqIHZhcmlvdXMgVk0ncyAuLi4gdGhlbiB0aGUgdGVzdCBpbmdvcmVzIGl0IGlmIHRoZSBmaWxlbmFtZSdzIG5vdCBmb3VuZCBkdWUKLSAqIHRvIHRoZSBWTSBub3Qgc3VwcG9ydGluZyBpdC4KLSAqICAKLSAqLwotcHVibGljIGNsYXNzIFRlc3RDb2RlZFJlYWRlck9uR2VubmVkRmlsZXMgZXh0ZW5kcyBUZXN0Q29kZWRSZWFkZXIgewotCXByaXZhdGUgc3RhdGljIGludCBub3RSYW4gPSAwOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKLQotCXByb3RlY3RlZCB2b2lkIGRvR2VuVGVzdChTdHJpbmcgY2hhcnNldE5hbWUpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdChjaGFyc2V0TmFtZSwgY2hhcnNldE5hbWUsIEdlbmVyYXRlRmlsZXMuZ2V0TWFpbkRpcmVjdG9yeUJhc2VkT25WTU5hbWUoKSArICIveG1sL3Rlc3QtIiArIGNoYXJzZXROYW1lICsgIi54bWwiLCBudWxsKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBkb1Rlc3QoU3RyaW5nIGV4cGVjdGVkSmF2YUNoYXJzZXQsIFN0cmluZyBleHBlY3RlZERldGVjdGVkQ2hhcnNldCwgU3RyaW5nIGZpbGVQYXRoLCBDbGFzcyBleHBlY3RlZEV4Y2VwdGlvbikgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJaWYgKGV4cGVjdGVkSmF2YUNoYXJzZXQgIT0gbnVsbCAmJiBleHBlY3RlZEphdmFDaGFyc2V0LmluZGV4T2YoIlVURi0zMiIpID4gLTEpIHsKLQkJCXJldHVybjsgLy93b24ndCB0cnkgMzIgYml0IHJpZ2h0IG5vdwotCQl9Ci0JCUlGaWxlIGZpbGUgPSAoSUZpbGUpIGZUZXN0UHJvamVjdC5maW5kTWVtYmVyKGZpbGVQYXRoKTsKLQotCQkvLyBpZiB0aGVyZSBubyBmaWxlLCBqdXN0IGFzc3VtZSB0aGF0IGl0cyBkdWUgdG8gd2hpY2ggVk0gaXMKLQkJLy8gYnJpbmcgdXNlZC4gKENvdWxkIGJlIGltcHJvdmVkIGluIGZ1dHVyZSB0byBhdm9pZCBjb3VudGluZyBhcyBhCi0JCS8vIHRlc3QpIC0gdGhpcyBjaGVjayBpbiBoZXJlIGZvciBpbml0aWFsIGRlYnVnZ2luZyBvbmx5Ci0JCWlmIChmaWxlID09IG51bGwpIHsKLQkJCW5vdFJhbisrOwotCQkJaWYgKERFQlVHKSB7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJ0ZXN0IG5vdCByYW4gc2luY2UgY2hhcnNldCBub3Qgc3VwcG9ydGVkIGJ5IFZNOiAiICsgZmlsZVBhdGgpOwotCQkJfQotCQkJcmV0dXJuOwotCQl9Ci0JCXN1cGVyLmRvVGVzdChleHBlY3RlZEphdmFDaGFyc2V0LCBleHBlY3RlZERldGVjdGVkQ2hhcnNldCwgZmlsZVBhdGgsIGV4cGVjdGVkRXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiQmlnNSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkNFU1UtOCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkNPTVBPVU5EX1RFWFQiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJFVUMtQ04iOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJFVUMtSlAiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJFVUMtS1IiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJHQjE4MDMwIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiR0IyMzEyIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiR0JLIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiaHAtcm9tYW44IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMDA2IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMDQxIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMDQzIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMDQ2IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTE0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMDQ2UyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTA4OCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTA5OCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTExNCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTExNSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTEyNCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTM2MyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTM2M0MiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEzNzAiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEzODEiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEzODMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEzODYiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTMzNzIyQyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tNDM3IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTI4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS03MzciOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTc3NSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODA4IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTMxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NTAiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg1MiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODU1IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTM0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NTYiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg1NyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODU4IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTM3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NTkiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg2MCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODYxIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NjIiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg2MyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0MigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODY0IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NjRTIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQ0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NjUiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg2NiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODY3IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQ3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NjgiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg2OSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODc0IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTUwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04OTciOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTkyMSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1MigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTIyIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTUzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05MzIiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTk0MiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1NSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTQyQyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTQzIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTU3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05NDNDIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTU4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05NDgiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTk0OSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTQ5QyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTUwIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05NTRDIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy0yMDIyLUNOIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy0yMDIyLUNOLUdCIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy0yMDIyLUpQIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy0yMDIyLUtSIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTEiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktMTAiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktMTMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktMTQiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktMTUiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktMTYiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktMiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3NCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0zIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTQiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktNSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS02IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTZTIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTciOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktOCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS05IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkpJUzAyMDEiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSklTMDIwOCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJKSVMwMjEyIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkpvaGFiIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIktPSTgtUiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJLT0k4LVJVIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIktPSTgtVSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJLU0M1NjAxIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY0FyYWJpYyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJNYWNDZW50cmFsRXVyb3BlIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY0Nyb2F0aWFuIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY0N5cmlsbGljIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY0dyZWVrIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY0hlYnJldyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJNYWNJY2VsYW5kIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY1JvbWFuIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY1JvbWFuaWEiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjVGhhaSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjVHVya2lzaCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjVWtyYWluZSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiUFRDUDE1NCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiU2hpZnRfSklTIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJUSVMtNjIwIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVUy1BU0NJSSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0vLwlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0vLwkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVURi0xNiI7Ci0vLwkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLS8vCX0KLQotLy8JcHVibGljIHZvaWQgdGVzdEZpbGUxMDcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotLy8JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVVEYtMTZCRSI7Ci0vLwkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLS8vCX0KLQotLy8JcHVibGljIHZvaWQgdGVzdEZpbGUxMDgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotLy8JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVVEYtMTZMRSI7Ci0vLwkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLS8vCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVURi0zMiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVVRGLTMyQkUiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTExKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVURi0zMkxFIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVVEYtOCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVVRGLThKIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTAiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1MSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjUyIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1NCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjU1IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTYiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1NlMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1NyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjU4IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTg3NCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy05MzIiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtOTM2IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTk0OSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy05NTAiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotLyogCi1yZW1vdmVkIGZvciBQUEMgbWFjaGluZSB3aXRoIElCTSBWTSAKLWh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0xMjY1MDMKLSovIAotLy8JcHVibGljIHZvaWQgdGVzdEZpbGUxMjkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotLy8JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJYLVVuaWNvZGVCaWciOwotLy8JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0vLwl9Ci0KLS8qIAotcmVtb3ZlZCBmb3IgUFBDIG1hY2hpbmUgd2l0aCBJQk0gVk0gCi1odHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MTI2NTAzCi0qLyAKLS8vCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTMwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLS8vCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiWC1Vbmljb2RlTGl0dGxlIjsKLS8vCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotLy8JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9yZWFkL1Rlc3RDb250ZW50RGVzY3JpcHRpb24uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvcmVhZC9UZXN0Q29udGVudERlc2NyaXB0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1ZTZhNmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9yZWFkL1Rlc3RDb250ZW50RGVzY3JpcHRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUzNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5yZWFkOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmNvbnRlbnQuSUNvbnRlbnREZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuTm9uQ29udGVudEJhc2VkRW5jb2RpbmdSdWxlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLlRlc3RzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcudXRpbC5Qcm9qZWN0VW56aXBVdGlsaXR5OwotCi0KLXB1YmxpYyBjbGFzcyBUZXN0Q29udGVudERlc2NyaXB0aW9uIGV4dGVuZHMgVGVzdENhc2UgewotCS8vCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVEaXIgPSAiaHRtbC8iOwotCS8vCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVSb290ID0KLQkvLyAiL2J1aWxkcy9Xb3Jrc3BhY2VzL0hlYWRXb3Jrc3BhY2Uvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy8iOwotCS8vCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVMb2NhdGlvbiA9IGZpbGVSb290ICsgZmlsZURpcjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHID0gdHJ1ZTsKLQkvL3ByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUdfVEVTVF9ERVRBSUwgPSBmYWxzZTsKLQkvLyBuZWVkcyB0byBiZSBzdGF0aWMsIHNpbmNlIEpVbml0IGNyZWF0ZXMgZGlmZmVyZW5jZSBpbnN0YW5jZXMgZm9yIGVhY2gKLQkvLyB0ZXN0Ci0JcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBmVGVzdFByb2plY3RJbml0aWFsaXplZDsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9QUk9KRUNUX05BTUUgPSAib3JnLmVjbGlwc2UuZW5jb2RpbmcucmVzb3VyY2UubmV3dGVzdHMiOwotCXN0YXRpYyBJUHJvamVjdCBmVGVzdFByb2plY3Q7Ci0JcHJpdmF0ZSBzdGF0aWMgaW50IG5TZXR1cHMgPSAwOwotCi0JLyoqCi0JICogIAotCSAqLwotCXB1YmxpYyBUZXN0Q29udGVudERlc2NyaXB0aW9uKCkgewotCQlzdXBlcigpOwotCQkvL1N5c3RlbS5vdXQucHJpbnRsbihjdXJyZW50UGxhdGZvcm1DaGFyc2V0KTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0JCS8vCQl0cnkgewotCQkvLwkJCW5ldyBUZXN0Q29kZWRSZWFkZXIoKS5kb0FsbEZpbGVzKCk7Ci0JCS8vCQl9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJLy8JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkvLwkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkvLwkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCS8vCQl9Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBjcmVhdGVQcm9qZWN0KElQcm9qZWN0IHByb2plY3QsIElQYXRoIGxvY2F0aW9uUGF0aCwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCWlmIChtb25pdG9yID09IG51bGwpIHsKLQkJCW1vbml0b3IgPSBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpOwotCQl9Ci0JCW1vbml0b3IuYmVnaW5UYXNrKCJjcmVhdGluZyB0ZXN0IHByb2plY3QiLCAxMCk7Ci0JCS8vIGNyZWF0ZSB0aGUgcHJvamVjdAotCQl0cnkgewotCQkJaWYgKCFwcm9qZWN0LmV4aXN0cygpKSB7Ci0JCQkJSVByb2plY3REZXNjcmlwdGlvbiBkZXNjID0gcHJvamVjdC5nZXRXb3Jrc3BhY2UoKS5uZXdQcm9qZWN0RGVzY3JpcHRpb24ocHJvamVjdC5nZXROYW1lKCkpOwotCQkJCWlmIChQbGF0Zm9ybS5nZXRMb2NhdGlvbigpLmVxdWFscyhsb2NhdGlvblBhdGgpKSB7Ci0JCQkJCWxvY2F0aW9uUGF0aCA9IG51bGw7Ci0JCQkJfQotCQkJCWRlc2Muc2V0TG9jYXRpb24obG9jYXRpb25QYXRoKTsKLQkJCQlwcm9qZWN0LmNyZWF0ZShkZXNjLCBtb25pdG9yKTsKLQkJCQltb25pdG9yID0gbnVsbDsKLQkJCX0KLQkJCWlmICghcHJvamVjdC5pc09wZW4oKSkgewotCQkJCXByb2plY3Qub3Blbihtb25pdG9yKTsKLQkJCQltb25pdG9yID0gbnVsbDsKLQkJCX0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb25pdG9yICE9IG51bGwpIHsKLQkJCQltb25pdG9yLmRvbmUoKTsKLQkJCX0KLQkJfQotCX0KLQotCXByaXZhdGUgc3RhdGljIHZvaWQgZ2V0QW5kQ3JlYXRlUHJvamVjdCgpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJLy9UZXN0c1BsdWdpbiB0ZXN0c1BsdWdpbiA9IChUZXN0c1BsdWdpbikKLQkJLy8gUGxhdGZvcm0uZ2V0UGx1Z2luKCJvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nIik7Ci0JCUlXb3Jrc3BhY2Ugd29ya3NwYWNlID0gVGVzdHNQbHVnaW4uZ2V0V29ya3NwYWNlKCk7Ci0JCUlXb3Jrc3BhY2VSb290IHJvb3QgPSB3b3Jrc3BhY2UuZ2V0Um9vdCgpOwotCQlmVGVzdFByb2plY3QgPSByb290LmdldFByb2plY3QoVEVTVF9QUk9KRUNUX05BTUUpOwotCQkvLyB0aGlzIGZvcm0gY3JlYXRlcyBwcm9qZWN0IGFzICJsaW5rZWQiIGJhY2sgdG8gJ2ZpbGVSb290JwotCQkvL2NyZWF0ZVByb2plY3QodGVzdFByb2plY3QsIG5ldyBQYXRoKGZpbGVSb290KSwgbnVsbCk7Ci0JCWNyZWF0ZVByb2plY3QoZlRlc3RQcm9qZWN0LCBudWxsLCBudWxsKTsKLQkJZlRlc3RQcm9qZWN0LnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQlhc3NlcnRUcnVlKGZUZXN0UHJvamVjdC5leGlzdHMoKSk7Ci0JCS8vCQlJQ29udGFpbmVyIGRvdGVzdEZpbGVzID0gdGVzdFByb2plY3QuZ2V0Rm9sZGVyKCJkb3Rlc3RGaWxlcyIpOwotCQkvLwkJYXNzZXJ0VHJ1ZShkb3Rlc3RGaWxlcy5leGlzdHMoKSk7Ci0JCS8vCQlJUmVzb3VyY2VbXSBhbGxGb2xkZXJzID0gZG90ZXN0RmlsZXMubWVtYmVycygpOwotCQkvLwkJYXNzZXJ0Tm90TnVsbChhbGxGb2xkZXJzKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zZXRVcCgpOwotCQluU2V0dXBzKys7Ci0JCWlmICghZlRlc3RQcm9qZWN0SW5pdGlhbGl6ZWQpIHsKLQkJCWdldEFuZENyZWF0ZVByb2plY3QoKTsKLQkJCS8vIHVuemlwIGZpbGVzIHRvIHRoZSByb290IG9mIHdvcmtzcGFjZSBkaXJlY3RvcnkKLQkJCVN0cmluZyBkZXN0aW5hdGlvblByb2plY3RTdHJpbmcgPSBmVGVzdFByb2plY3QuZ2V0TG9jYXRpb24oKS50b09TU3RyaW5nKCk7Ci0JCQlTdHJpbmcgZGVzdGluYXRpb25Gb2xkZXIgPSBkZXN0aW5hdGlvblByb2plY3RTdHJpbmcgKyAiLyI7Ci0JCQkvLyB0aGlzIHppcCBmaWxlIGlzIHNpdHRpbmcgaW4gdGhlICJyb290IiBvZiB0ZXN0IHBsdWdpbgotCQkJRmlsZSB6aXBGaWxlID0gVGVzdHNQbHVnaW4uZ2V0VGVzdEZpbGUoInRlc3RmaWxlcy56aXAiKTsKLQkJCVByb2plY3RVbnppcFV0aWxpdHkgcHJvalV0aWwgPSBuZXcgUHJvamVjdFVuemlwVXRpbGl0eSgpOwotCQkJcHJvalV0aWwudW56aXBBbmRJbXBvcnQoemlwRmlsZSwgZGVzdGluYXRpb25Gb2xkZXIpOwotCQkJcHJvalV0aWwuaW5pdEphdmFQcm9qZWN0KFRFU1RfUFJPSkVDVF9OQU1FKTsKLQkJCWZUZXN0UHJvamVjdC5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX0lORklOSVRFLCBudWxsKTsKLQkJCWZUZXN0UHJvamVjdEluaXRpYWxpemVkID0gdHJ1ZTsKLQkJfQotCX0KLQotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnRlYXJEb3duKCk7Ci0JCW5TZXR1cHMtLTsKLQkJaWYgKG5TZXR1cHMgPT0gMCkgewotCQkJaWYgKCFERUJVRykgewotCQkJCS8vCQkJCURpc3BsYXkgZGlzcGxheSA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0RGlzcGxheSgpOwotCQkJCS8vCQkJCWRpc3BsYXkuYXN5bmNFeGVjKG5ldyBSdW5uYWJsZSgpIHsKLQkJCQkvLwkJCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCS8vCQkJCQkJUHJvamVjdFVuemlwVXRpbGl0eSBwcm9qVXRpbCA9IG5ldyBQcm9qZWN0VW56aXBVdGlsaXR5KCk7Ci0JCQkJLy8JCQkJCQlJUHJvamVjdCBwcm9qID0gZlRlc3RQcm9qZWN0OwotCQkJCS8vCQkJCQkJZlRlc3RQcm9qZWN0ID0gbnVsbDsKLQkJCQkvLwkJCQkJCXRyeSB7Ci0JCQkJLy8JCQkJCQkJcHJvalV0aWwuZGVsZXRlUHJvamVjdChwcm9qKTsKLQkJCQkvLwkJCQkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJLy8JCQkJCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCQkvLwkJCQkJCX0KLQkJCQkvLwkJCQkJfQotCQkJCS8vCQkJCX0pOwotCQkJfQotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgZG9UZXN0KFN0cmluZyBleHBlY3RlZEphdmFDaGFyc2V0LCBTdHJpbmcgZmlsZVBhdGgsIENsYXNzIGV4cGVjdGVkRXhjZXB0aW9uKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlpZiAoZXhwZWN0ZWRKYXZhQ2hhcnNldCAhPSBudWxsICYmIGV4cGVjdGVkSmF2YUNoYXJzZXQuaW5kZXhPZigiVVRGLTMyIikgPiAtMSkgewotCQkJcmV0dXJuOyAvL3dvbid0IHRyeSAzMiBiaXQgcmlnaHQgbm93Ci0JCX0KLQkJZXhwZWN0ZWRKYXZhQ2hhcnNldCA9IG1hc3NhZ2VDaGFyc2V0KGV4cGVjdGVkSmF2YUNoYXJzZXQpOwotCQlJRmlsZSBmaWxlID0gKElGaWxlKSBmVGVzdFByb2plY3QuZmluZE1lbWJlcihmaWxlUGF0aCk7Ci0JCWFzc2VydE5vdE51bGwoIkVycm9yIGluIHRlc3QgY2FzZTogZmlsZSBub3QgZm91bmQ6ICIgKyBmaWxlUGF0aCwgZmlsZSk7Ci0KLQkJSUNvbnRlbnREZXNjcmlwdGlvbiBmaWxlQ29udGVudERlc2NyaXB0aW9uID0gZmlsZS5nZXRDb250ZW50RGVzY3JpcHRpb24oKTsKLQkvLwlJQ29udGVudERlc2NyaXB0aW9uIHN0cmVhbUNvbnRlbnREZXNjcmlwdGlvbiA9IFBsYXRmb3JtLmdldENvbnRlbnRUeXBlTWFuYWdlcigpLmdldERlc2NyaXB0aW9uRm9yKGZpbGUuZ2V0Q29udGVudHMoKSwgZmlsZS5nZXROYW1lKCksIElDb250ZW50RGVzY3JpcHRpb24uQUxMKTsKLQkvLwlhc3NlcnRFcXVhbHMoImNvbXBhcmluZyBmaWxlIGFuZCBzdHJlYW0gY29udGVudERlc2NyaXB0aW9uIiwgZmlsZUNvbnRlbnREZXNjcmlwdGlvbiwgc3RyZWFtQ29udGVudERlc2NyaXB0aW9uKTsKLQotCQlhc3NlcnROb3ROdWxsKCJOdWxsIGNvbnRlbnQgZGVzY3JpcHRpb24iLCBmaWxlQ29udGVudERlc2NyaXB0aW9uKTsKLQkJU3RyaW5nIGZvdW5kQ2hhcnNldCA9IGZpbGVDb250ZW50RGVzY3JpcHRpb24uZ2V0Q2hhcnNldCgpOwotCQlmb3VuZENoYXJzZXQgPSBtYXNzYWdlQ2hhcnNldChmb3VuZENoYXJzZXQpOwotCi0JCWlmIChleHBlY3RlZEphdmFDaGFyc2V0ID09IG51bGwgfHwgZXhwZWN0ZWRKYXZhQ2hhcnNldC5lcXVhbHMoImV4cGVjdFBsYXRmb3JtQ2hhcnNldCIpKSB7Ci0JCQlTdHJpbmcgcGxhdGZvcm1EZWZhdWx0ID0gTm9uQ29udGVudEJhc2VkRW5jb2RpbmdSdWxlcy51c2VEZWZhdWx0TmFtZVJ1bGVzKG51bGwpOwotCQkJYXNzZXJ0VHJ1ZShmb3VuZENoYXJzZXQuZXF1YWxzKHBsYXRmb3JtRGVmYXVsdCkpOwotCQl9Ci0JCWVsc2UgewotCQkJYm9vbGVhbiBhc0V4cGVjdGVkID0gZm91bmRDaGFyc2V0LmVxdWFscyhleHBlY3RlZEphdmFDaGFyc2V0KTsKLQkJCWFzc2VydFRydWUoZm91bmRDaGFyc2V0ICsgIiBkaWQgbm90IGVxdWFsIHRoZSBleHBlY3RlZCAiICsgZXhwZWN0ZWRKYXZhQ2hhcnNldCArICIgKHRoaXMgaXMgYSBWTSBkZXBlbmRlbnQgdGVzdCkiLCBhc0V4cGVjdGVkKTsKLQkJfQotCi0KLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gZm91bmRDaGFyc2V0Ci0JICogQHJldHVybgotCSAqLwotCXByaXZhdGUgU3RyaW5nIG1hc3NhZ2VDaGFyc2V0KFN0cmluZyBmb3VuZENoYXJzZXQpIHsKLQkJU3RyaW5nIHJlc3VsdCA9IGZvdW5kQ2hhcnNldDsKLQkJaWYgKCJVVEYtMTZMRSIuZXF1YWxzKGZvdW5kQ2hhcnNldCkpIHsKLQkJCXJlc3VsdCA9ICJVVEYtMTYiOwotCQl9Ci0JCWVsc2UgaWYgKCJYLVVuaWNvZGVMaXR0bGUiLmVxdWFscyhmb3VuZENoYXJzZXQpKSB7Ci0JCQlyZXN1bHQgPSAiVVRGLTE2IjsKLQkJfQotCQllbHNlIGlmICgiWC1Vbmljb2RlQmlnIi5lcXVhbHMoZm91bmRDaGFyc2V0KSkgewotCQkJcmVzdWx0ID0gIlVURi0xNkJFIjsKLQkJfQotCi0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJleHBlY3RQbGF0Zm9ybUNoYXJzZXQiLCAidGVzdGZpbGVzL2Nzcy9lbXB0eUZpbGUuY3NzIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJFVUMtSlAiLCAidGVzdGZpbGVzL2Nzcy9lbmNvZGluZ190ZXN0X2V1Y2pwLmNzcyIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTIwMjItSlAiLCAidGVzdGZpbGVzL2Nzcy9lbmNvZGluZ190ZXN0X2ppcy5jc3MiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlNoaWZ0X0pJUyIsICJ0ZXN0ZmlsZXMvY3NzL2VuY29kaW5nX3Rlc3Rfc2ppcy5jc3MiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoImV4cGVjdFBsYXRmb3JtQ2hhcnNldCIsICJ0ZXN0ZmlsZXMvY3NzL25vRW5jb2RpbmcuY3NzIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS02IiwgInRlc3RmaWxlcy9jc3Mvbm9uU3RhbmRhcmQuY3NzIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS02IiwgInRlc3RmaWxlcy9jc3Mvbm9uU3RhbmRhcmRJbGxGb3JtZWQuY3NzIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS02IiwgInRlc3RmaWxlcy9jc3Mvbm9uU3RhbmRhcmRJbGxGb3JtZWQyLmNzcyIsIG51bGwpOwotCX0KLQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiZXhwZWN0UGxhdGZvcm1DaGFyc2V0IiwgInRlc3RmaWxlcy9odG1sL0VtcHR5RmlsZS5odG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAidGVzdGZpbGVzL2h0bWwvSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5odG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiZXhwZWN0UGxhdGZvcm1DaGFyc2V0IiwgInRlc3RmaWxlcy9odG1sL0xhcmdlTm9FbmNvZGluZy5odG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsICJ0ZXN0ZmlsZXMvaHRtbC9MYXJnZU5vbkRlZmF1bHQuaHRtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTYiLCAidGVzdGZpbGVzL2h0bWwvTXVsdGlOb25EZWZhdWx0Lmh0bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJleHBlY3RQbGF0Zm9ybUNoYXJzZXQiLCAidGVzdGZpbGVzL2h0bWwvTm9FbmNvZGluZy5odG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAidGVzdGZpbGVzL2h0bWwvbm9xdW90ZXMuaHRtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgInRlc3RmaWxlcy9odG1sL05vcm1hbE5vbkRlZmF1bHQuaHRtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTEiLCAidGVzdGZpbGVzL2pzcC9FbXB0eUZpbGUuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktOCIsICJ0ZXN0ZmlsZXMvanNwL0lsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiYWJjIiwgInRlc3RmaWxlcy9qc3AvaW5WYWxpZEVuY29kaW5nVmFsdWUuanNwIiwgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmV4Y2VwdGlvbnMuVW5zdXBwb3J0ZWRDaGFyc2V0RXhjZXB0aW9uV2l0aERldGFpbC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgid2luZG93cy0xMjUyIiwgInRlc3RmaWxlcy9qc3AvamF2YUVuY29kaW5nVmFsdWUuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsICJ0ZXN0ZmlsZXMvanNwL01hbGZvcm1lZE5vRW5jb2RpbmcuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsICJ0ZXN0ZmlsZXMvanNwL01hbGZvcm1lZE5vRW5jb2RpbmdYU0wuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsICJ0ZXN0ZmlsZXMvanNwL25vRW5jb2RpbmcuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsICJ0ZXN0ZmlsZXMvanNwL05vRW5jb2RpbmdpblhNTERlY2wuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMiIsICJ0ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZS5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgInRlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlTm9FbmNvZGluZy5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0zIiwgInRlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlVXNpbmdDaGFyc2V0LmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTIiLCAidGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VVc2luZ1hNTFN5bnRheC5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS04IiwgInRlc3RmaWxlcy9qc3AvTm9ybWFsTm9uRGVmYXVsdC5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS04IiwgInRlc3RmaWxlcy9qc3AvTm9ybWFsTm9uRGVmYXVsdFdpdGhYTUxEZWNsLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTciLCAidGVzdGZpbGVzL2pzcC9Ob3JtYWxQYWdlQ2FzZU5vbkRlZmF1bHQuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiU2hpZnRfSklTIiwgInRlc3RmaWxlcy9qc3AvU2VsQ29sQmVhblJvdzEyUmVzdWx0c0Zvcm0uanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMyIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3RCcm9rZW5MaW5lLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoInRlc3RqdW5rIiwgInRlc3RmaWxlcy9qc3AvdGVzdERlZmF1bHRFbmNvZGluZy5qc3AiLCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZXhjZXB0aW9ucy5VbnN1cHBvcnRlZENoYXJzZXRFeGNlcHRpb25XaXRoRGV0YWlsLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJ0ZXN0anVuayIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3REZWZhdWx0RW5jb2RpbmdXaXRoSnVuay5qc3AiLCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZXhjZXB0aW9ucy5VbnN1cHBvcnRlZENoYXJzZXRFeGNlcHRpb25XaXRoRGV0YWlsLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgInRlc3RmaWxlcy9qc3AvdGVzdEV4dHJhSnVuay5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3RFeHRyYVZhbGlkU3R1ZmYuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3RJbGxGb3JtZWQuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAidGVzdGZpbGVzL2pzcC90ZXN0SWxsRm9ybWVkMi5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgInRlc3RmaWxlcy9qc3AvdGVzdE5vRW5jb2RpbmdWYWx1ZS5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgInRlc3RmaWxlcy9qc3AvdGVzdE5vUGFnZURpcmVjdGl2ZS5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0yIiwgInRlc3RmaWxlcy9qc3AvdGVzdE5vUGFnZURpcmVjdGl2ZUF0Rmlyc3QuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmVJbkxhcmdlRmlsZS5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3ROb3JtYWxDYXNlLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi0xNiIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3RVVEYxNi5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtMTZMRSIsICJ0ZXN0ZmlsZXMvanNwL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXIyLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi0xNiIsICJ0ZXN0ZmlsZXMvanNwL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXJCRS5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtMTYiLCAidGVzdGZpbGVzL2pzcC91dGYxNldpdGhKYXBhbmVzZUNoYXJzLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgInRlc3RmaWxlcy9qc3AvVVRGOFdpdGgzQnl0ZUJPTS5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS04IiwgInRlc3RmaWxlcy9qc3AvV2VsbEZvcm1lZE5vcm1hbE5vbkRlZmF1bHQuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiU2hpZnRfSklTIiwgInRlc3RmaWxlcy9yZWdyZXNzaW9uVGVzdEZpbGVzL2RlZmVjdDIyMzM2NS9TZWxDb2xCZWFuUm93MTJSZXN1bHRzRm9ybS5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiU2hpZnRfSklTIiwgInRlc3RmaWxlcy9yZWdyZXNzaW9uVGVzdEZpbGVzL2RlZmVjdDIyMzM2NS9TZWxDb2xCZWFuUm93MTJSZXN1bHRzRm9ybUIuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlNoaWZ0X0pJUyIsICJ0ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjQyOTMvdGVzdHNoaWZ0amlzWG1sU3ludGF4LmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJTaGlmdF9KSVMiLCAidGVzdGZpbGVzL3JlZ3Jlc3Npb25UZXN0RmlsZXMvZGVmZWN0MjI5NjY3L2F1ZGkuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgInRlc3RmaWxlcy94bWwvRW1wdHlGaWxlLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJFVUMtSlAiLCAidGVzdGZpbGVzL3htbC9ldWNqcC54bWwiLCBudWxsKTsKLQl9Ci0KLS8vCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLS8vCQlkb1Rlc3QoIklTTy04ODU5LTEiLCAidGVzdGZpbGVzL3htbC9JbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0LnhtbCIsIG51bGwpOwotLy8JfQotLy8KLS8vCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLS8vCQlkb1Rlc3QoIlVURi04IiwgInRlc3RmaWxlcy94bWwvTWFsZm9ybWVkTm9FbmNvZGluZy54bWwiLCBudWxsKTsKLS8vCX0KLS8vCi0vLwlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0vLwkJZG9UZXN0KCJVVEYtOCIsICJ0ZXN0ZmlsZXMveG1sL01hbGZvcm1lZE5vRW5jb2RpbmcueHNsIiwgbnVsbCk7Ci0vLwl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAidGVzdGZpbGVzL3htbC9Ob0VuY29kaW5nLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgInRlc3RmaWxlcy94bWwvTm9ybWFsTm9uRGVmYXVsdC54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiU2hpZnRfSklTIiwgInRlc3RmaWxlcy94bWwvc2hpZnRqaXMueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTEiLCAidGVzdGZpbGVzL3htbC90ZXN0RXh0cmFKdW5rLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTEyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJ0ZXN0ZmlsZXMveG1sL3Rlc3RFeHRyYVZhbGlkU3R1ZmYueG1sIiwgbnVsbCk7Ci0JfQotCi0vLwlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0vLwkJZG9UZXN0KCJVVEYtOCIsICJ0ZXN0ZmlsZXMveG1sL3Rlc3RJbGxGb3JtZWQueG1sIiwgbnVsbCk7Ci0vLwl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAidGVzdGZpbGVzL3htbC90ZXN0SWxsRm9ybWVkMi54bWwiLCBudWxsKTsKLQl9Ci0vLyAgWzI0OTIxNF0gLSBYTUxDb250ZW50RGVzY3JpYmVyIG5vIGxvbmdlciByZXR1cm5zIGNvbnRlbnQgdHlwZXMgZm9yIGludmFsaWQgZW5jb2RpbmdzCi0vLwlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0vLwkJZG9UZXN0KCJVVEYtOCBzdGFuZGFsb25lPSIsICJ0ZXN0ZmlsZXMveG1sL3Rlc3RJbGxGb3JtZWQzLnhtbCIsIGphdmEubmlvLmNoYXJzZXQuSWxsZWdhbENoYXJzZXROYW1lRXhjZXB0aW9uLmNsYXNzKTsKLS8vCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJ0ZXN0ZmlsZXMveG1sL3Rlc3RJbGxGb3JtZWQ0LnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgInRlc3RmaWxlcy94bWwvdGVzdE11bHRpTGluZS54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAidGVzdGZpbGVzL3htbC90ZXN0Tm9FbmNvZGluZ1ZhbHVlLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb3JtYWxDYXNlLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb1hNTERlY2wueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgInRlc3RmaWxlcy94bWwvdGVzdE5vWE1MRGVjbEF0Rmlyc3QueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgInRlc3RmaWxlcy94bWwvdGVzdE5vWE1MRGVjbEluTGFyZ2VGaWxlLnhtbCIsIG51bGwpOwotCX0KLQotLy8JcHVibGljIHZvaWQgdGVzdEZpbGUxMjMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotLy8JCWRvVGVzdCgiVVRGLTE2QkUiLCAidGVzdGZpbGVzL3htbC90ZXN0VVRGMTYueG1sIiwgbnVsbCk7Ci0vLwl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTE2TEUiLCAidGVzdGZpbGVzL3htbC9VVEYxNkxFQXRTdGFydE9mTGFyZ2VGaWxlLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtMTZMRSIsICJ0ZXN0ZmlsZXMveG1sL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXIyLnhtbCIsIG51bGwpOwotCX0KLQotLy8JcHVibGljIHZvaWQgdGVzdEZpbGUxMjYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotLy8JCWRvVGVzdCgiVVRGLTE2QkUiLCAidGVzdGZpbGVzL3htbC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyQkUueG1sIiwgbnVsbCk7Ci0vLwl9Ci0KLS8vCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLS8vCQlkb1Rlc3QoIlVURi0xNkJFIiwgInRlc3RmaWxlcy94bWwvdXRmMTZXaXRoSmFwYW5lc2VDaGFycy54bWwiLCBudWxsKTsKLS8vCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJ0ZXN0ZmlsZXMveG1sL1VURjhXaXRoM0J5dGVCT00ueG1sIiwgbnVsbCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTMwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtMTZCRSIsICJ0ZXN0ZmlsZXMveG1sL3V0ZjE2YmUueG1sIiwgbnVsbCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTMxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtMTZMRSIsICJ0ZXN0ZmlsZXMveG1sL3V0ZjE2bGUueG1sIiwgbnVsbCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTMyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtMTZMRSIsICJ0ZXN0ZmlsZXMveG1sL3V0ZjE2bGVNYWxmb3JtZWQueG1sIiwgbnVsbCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTMzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtMTZCRSIsICJ0ZXN0ZmlsZXMveG1sL3V0ZjE2YmVNYWxmb3JtZWQueG1sIiwgbnVsbCk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3JlYWQvVGVzdENvbnRlbnRUeXBlRGVzY3JpcHRpb25Pbkdlbm5lZEZpbGVzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3JlYWQvVGVzdENvbnRlbnRUeXBlRGVzY3JpcHRpb25Pbkdlbm5lZEZpbGVzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhOGQ5OTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9yZWFkL1Rlc3RDb250ZW50VHlwZURlc2NyaXB0aW9uT25HZW5uZWRGaWxlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzExICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnJlYWQ7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5HZW5lcmF0ZUZpbGVzOwotCi0KLQotcHVibGljIGNsYXNzIFRlc3RDb250ZW50VHlwZURlc2NyaXB0aW9uT25HZW5uZWRGaWxlcyBleHRlbmRzIFRlc3RDb250ZW50RGVzY3JpcHRpb24gewotCXByaXZhdGUgc3RhdGljIGludCBub3RSYW4gPSAwOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKLQotCXByb3RlY3RlZCB2b2lkIGRvR2VuVGVzdChTdHJpbmcgY2hhcnNldE5hbWUpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IEdlbmVyYXRlRmlsZXMuZ2V0TWFpbkRpcmVjdG9yeUJhc2VkT25WTU5hbWUoKSArICIveG1sL3Rlc3QtIiArIGNoYXJzZXROYW1lICsgIi54bWwiOwotCQlkb1Rlc3QoY2hhcnNldE5hbWUsIGZpbGVuYW1lLCBudWxsKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBkb1Rlc3QoU3RyaW5nIGV4cGVjdGVkSmF2YUNoYXJzZXQsIFN0cmluZyBmaWxlUGF0aCwgQ2xhc3MgZXhwZWN0ZWRFeGNlcHRpb24pIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWlmIChleHBlY3RlZEphdmFDaGFyc2V0ICE9IG51bGwgJiYgZXhwZWN0ZWRKYXZhQ2hhcnNldC5pbmRleE9mKCJVVEYtMzIiKSA+IC0xKSB7Ci0JCQlyZXR1cm47IC8vd29uJ3QgdHJ5IDMyIGJpdCByaWdodCBub3cKLQkJfQotCQlJRmlsZSBmaWxlID0gKElGaWxlKSBmVGVzdFByb2plY3QuZmluZE1lbWJlcihmaWxlUGF0aCk7Ci0KLQkJLy8gaWYgdGhlcmUgbm8gZmlsZSwganVzdCBhc3N1bWUgdGhhdCBpdHMgZHVlIHRvIHdoaWNoIFZNIGlzCi0JCS8vIGJyaW5nIHVzZWQuIChDb3VsZCBiZSBpbXByb3ZlZCBpbiBmdXR1cmUgdG8gYXZvaWQgY291bnRpbmcgYXMgYQotCQkvLyB0ZXN0KSAtIHRoaXMgY2hlY2sgaW4gaGVyZSBmb3IgaW5pdGlhbCBkZWJ1Z2dpbmcgb25seQotCQlpZiAoZmlsZSA9PSBudWxsKSB7Ci0JCQlub3RSYW4rKzsKLQkJCWlmIChERUJVRykgewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigidGVzdCBub3QgcmFuIHNpbmNlIGNoYXJzZXQgbm90IHN1cHBvcnRlZCBieSBWTTogIiArIGZpbGVQYXRoKTsKLQkJCX0KLQkJCXJldHVybjsKLQkJfQotCQlzdXBlci5kb1Rlc3QoZXhwZWN0ZWRKYXZhQ2hhcnNldCwgZmlsZVBhdGgsIGV4cGVjdGVkRXhjZXB0aW9uKTsKLQl9Ci0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJCaWc1IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiQ0VTVS04IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiQ09NUE9VTkRfVEVYVCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkVVQy1DTiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkVVQy1KUCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkVVQy1LUiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkdCMTgwMzAiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJHQjIzMTIiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJHQksiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJocC1yb21hbjgiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEwMDYiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEwNDEiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEwNDMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEwNDYiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEwNDZTIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTE1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMDg4IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTE2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMDk4IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTE3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMTE0IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTE4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMTE1IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTE5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMTI0IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTIwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMzYzIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTIxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMzYzQyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTM3MCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTM4MSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTM4MyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTM4NiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMzM3MjJDIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTI3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS00MzciOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTczNyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tNzc1IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTMwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04MDgiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg1MCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODUyIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTMzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NTUiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg1NiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODU3IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTM2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NTgiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg1OSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODYwIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTM5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NjEiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg2MiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODYzIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NjQiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg2NFMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg2NSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0NSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODY2IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQ2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NjciOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg2OCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODY5IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQ5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NzQiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg5NyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTIxIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTUyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05MjIiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTkzMiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1NCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTQyIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTU1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05NDJDIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTU2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05NDMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTk0M0MiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTk0OCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTQ5IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05NDlDIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05NTAiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTk1NEMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTIwMjItQ04iOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTIwMjItQ04tR0IiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTIwMjItSlAiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTIwMjItS1IiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktMSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0xMCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0xMyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0xNCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0xNSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0xNiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0yIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktNCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS01IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTYiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktNlMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktNyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS04IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTkiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSklTMDIwMSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJKSVMwMjA4IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkpJUzAyMTIiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSm9oYWIiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiS09JOC1SIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIktPSTgtUlUiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiS09JOC1VIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIktTQzU2MDEiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjQXJhYmljIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY0NlbnRyYWxFdXJvcGUiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjQ3JvYXRpYW4iOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjQ3lyaWxsaWMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjR3JlZWsiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjSGVicmV3IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY0ljZWxhbmQiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjUm9tYW4iOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjUm9tYW5pYSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJNYWNUaGFpIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJNYWNUdXJraXNoIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJNYWNVa3JhaW5lIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJQVENQMTU0IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJTaGlmdF9KSVMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlRJUy02MjAiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVTLUFTQ0lJIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVVEYtMTYiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotLy8JcHVibGljIHZvaWQgdGVzdEZpbGUxMDcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotLy8JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVVEYtMTZCRSI7Ci0vLwkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLS8vCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVURi0xNkxFIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVVEYtMzIiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTEwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVURi0zMkJFIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVVEYtMzJMRSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVVRGLTgiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTEzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVURi04SiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjUwIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTEiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1MiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjUzIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTQiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1NSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjU2IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTZTIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTciOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1OCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy04NzQiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtOTMyIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTkzNiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy05NDkiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtOTUwIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0vKiAKLXJlbW92ZWQgZm9yIFBQQyBtYWNoaW5lIHdpdGggSUJNIFZNIAotaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTEyNjUwMwotKi8gCi0vLwlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0vLwkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlgtVW5pY29kZUJpZyI7Ci0vLwkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLS8vCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTMwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlgtVW5pY29kZUxpdHRsZSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9yZWFkL1Rlc3RDb250ZW50VHlwZURldGVjdGlvbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9yZWFkL1Rlc3RDb250ZW50VHlwZURldGVjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YjIwZWRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvcmVhZC9UZXN0Q29udGVudFR5cGVEZXRlY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5yZWFkOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0RGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZVJvb3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuY29udGVudC5JQ29udGVudERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5jb250ZW50LklDb250ZW50VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLlRlc3RzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcudXRpbC5Qcm9qZWN0VW56aXBVdGlsaXR5OwotCi0KLXB1YmxpYyBjbGFzcyBUZXN0Q29udGVudFR5cGVEZXRlY3Rpb24gZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVRyA9IGZhbHNlOwotCXN0YXRpYyBJUHJvamVjdCBmVGVzdFByb2plY3Q7Ci0JLy8gbmVlZHMgdG8gYmUgc3RhdGljLCBzaW5jZSBKVW5pdCBjcmVhdGVzIGRpZmZlcmVuY2UgaW5zdGFuY2VzIGZvciBlYWNoCi0JLy8gdGVzdAotCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gZlRlc3RQcm9qZWN0SW5pdGlhbGl6ZWQ7Ci0JcHJpdmF0ZSBzdGF0aWMgaW50IG5TZXR1cHMgPSAwOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX1BST0pFQ1RfTkFNRSA9ICJvcmcuZWNsaXBzZS53c3QueG1sLnRlbXAudGVzdHMuZW5jb2RpbmcucmVzb3VyY2UubmV3dGVzdHMiOwotCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBjcmVhdGVQcm9qZWN0KElQcm9qZWN0IHByb2plY3QsIElQYXRoIGxvY2F0aW9uUGF0aCwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCWlmIChtb25pdG9yID09IG51bGwpIHsKLQkJCW1vbml0b3IgPSBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpOwotCQl9Ci0JCW1vbml0b3IuYmVnaW5UYXNrKCJjcmVhdGluZyB0ZXN0IHByb2plY3QiLCAxMCk7Ci0JCS8vIGNyZWF0ZSB0aGUgcHJvamVjdAotCQl0cnkgewotCQkJaWYgKCFwcm9qZWN0LmV4aXN0cygpKSB7Ci0JCQkJSVByb2plY3REZXNjcmlwdGlvbiBkZXNjID0gcHJvamVjdC5nZXRXb3Jrc3BhY2UoKS5uZXdQcm9qZWN0RGVzY3JpcHRpb24ocHJvamVjdC5nZXROYW1lKCkpOwotCQkJCWlmIChQbGF0Zm9ybS5nZXRMb2NhdGlvbigpLmVxdWFscyhsb2NhdGlvblBhdGgpKSB7Ci0JCQkJCWxvY2F0aW9uUGF0aCA9IG51bGw7Ci0JCQkJfQotCQkJCWRlc2Muc2V0TG9jYXRpb24obG9jYXRpb25QYXRoKTsKLQkJCQlwcm9qZWN0LmNyZWF0ZShkZXNjLCBtb25pdG9yKTsKLQkJCQltb25pdG9yID0gbnVsbDsKLQkJCX0KLQkJCWlmICghcHJvamVjdC5pc09wZW4oKSkgewotCQkJCXByb2plY3Qub3Blbihtb25pdG9yKTsKLQkJCQltb25pdG9yID0gbnVsbDsKLQkJCX0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb25pdG9yICE9IG51bGwpIHsKLQkJCQltb25pdG9yLmRvbmUoKTsKLQkJCX0KLQkJfQotCX0KLQotCXByaXZhdGUgc3RhdGljIHZvaWQgZ2V0QW5kQ3JlYXRlUHJvamVjdCgpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJSVdvcmtzcGFjZSB3b3Jrc3BhY2UgPSBUZXN0c1BsdWdpbi5nZXRXb3Jrc3BhY2UoKTsKLQkJSVdvcmtzcGFjZVJvb3Qgcm9vdCA9IHdvcmtzcGFjZS5nZXRSb290KCk7Ci0JCWZUZXN0UHJvamVjdCA9IHJvb3QuZ2V0UHJvamVjdChURVNUX1BST0pFQ1RfTkFNRSk7Ci0JCS8vIHRoaXMgZm9ybSBjcmVhdGVzIHByb2plY3QgYXMgImxpbmtlZCIgYmFjayB0byAnZmlsZVJvb3QnCi0JCS8vIGNyZWF0ZVByb2plY3QodGVzdFByb2plY3QsIG5ldyBQYXRoKGZpbGVSb290KSwgbnVsbCk7Ci0JCWNyZWF0ZVByb2plY3QoZlRlc3RQcm9qZWN0LCBudWxsLCBudWxsKTsKLQkJZlRlc3RQcm9qZWN0LnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQlhc3NlcnRUcnVlKGZUZXN0UHJvamVjdC5leGlzdHMoKSk7Ci0JfQotCi0JLyoqCi0JICogCi0JICovCi0JcHVibGljIFRlc3RDb250ZW50VHlwZURldGVjdGlvbigpIHsKLQkJc3VwZXIoKTsKLQkJLy8gU3lzdGVtLm91dC5wcmludGxuKGN1cnJlbnRQbGF0Zm9ybUNoYXJzZXQpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGRvVGVzdChTdHJpbmcgZXhwZWN0ZWRDb250ZW50VHlwZSwgU3RyaW5nIGZpbGVQYXRoLCBDbGFzcyBleHBlY3RlZEV4Y2VwdGlvbikgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJSUZpbGUgZmlsZSA9IChJRmlsZSkgZlRlc3RQcm9qZWN0LmZpbmRNZW1iZXIoZmlsZVBhdGgpOwotCQlhc3NlcnROb3ROdWxsKCJFcnJvciBpbiB0ZXN0IGNhc2U6IGZpbGUgbm90IGZvdW5kOiAiICsgZmlsZVBhdGgsIGZpbGUpOwotCi0KLQkJSUNvbnRlbnREZXNjcmlwdGlvbiBzdHJlYW1Db250ZW50RGVzY3JpcHRpb24gPSBkb0dldENvbnRlbnRUeXBlQmFzZWRPblN0cmVhbShmaWxlKTsKLQkJSUNvbnRlbnREZXNjcmlwdGlvbiBmaWxlQ29udGVudERlc2NyaXB0aW9uID0gZG9HZXRDb250ZW50VHlwZUJhc2VkT25GaWxlKGZpbGUpOwotCi0JCUlDb250ZW50VHlwZSBmaWxlQ29udGVudFR5cGUgPSBmaWxlQ29udGVudERlc2NyaXB0aW9uLmdldENvbnRlbnRUeXBlKCk7Ci0JCWFzc2VydE5vdE51bGwoImZpbGUgY29udGVudCB0eXBlIHdhcyBudWxsIiwgZmlsZUNvbnRlbnRUeXBlKTsKLQotCQlJQ29udGVudFR5cGUgc3RyZWFtQ29udGVudFR5cGUgPSBzdHJlYW1Db250ZW50RGVzY3JpcHRpb24uZ2V0Q29udGVudFR5cGUoKTsKLQkJYXNzZXJ0Tm90TnVsbCgic3RyZWFtIGNvbnRlbnQgdHlwZSB3YXMgbnVsbCIsIHN0cmVhbUNvbnRlbnRUeXBlKTsKLQotCQlhc3NlcnRFcXVhbHMoImNvbXBhcmluZyBjb250ZW50IHR5cGUgYmFzZWQgb24gZmlsZSBhbmQgc3RyZWFtOiAiLCBmaWxlQ29udGVudFR5cGUsIHN0cmVhbUNvbnRlbnRUeXBlKTsKLQotCQkvLyBpZiBlcXVhbCwgYWJvdmUsIGFzIGV4cGVjdGVkLCB0aGVuIG9ubHkgbmVlZCB0byBjaGVjayBvbmUuCi0JCWFzc2VydEVxdWFscygiY29tcGFyZWluZyB3aXRoIGV4cGVjdGVkIGNvbnRlbnQgdHlwZSBpZCIsIGV4cGVjdGVkQ29udGVudFR5cGUsIGZpbGVDb250ZW50VHlwZS5nZXRJZCgpKTsKLQotCX0KLQotCXByb3RlY3RlZCBJQ29udGVudERlc2NyaXB0aW9uIGRvR2V0Q29udGVudFR5cGVCYXNlZE9uU3RyZWFtKElGaWxlIGZpbGUpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCUlDb250ZW50RGVzY3JpcHRpb24gc3RyZWFtQ29udGVudERlc2NyaXB0aW9uID0gbnVsbDsKLQkJSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0gPSBudWxsOwotCQl0cnkgewotCQkJaW5wdXRTdHJlYW0gPSBmaWxlLmdldENvbnRlbnRzKCk7Ci0JCQlzdHJlYW1Db250ZW50RGVzY3JpcHRpb24gPSBQbGF0Zm9ybS5nZXRDb250ZW50VHlwZU1hbmFnZXIoKS5nZXREZXNjcmlwdGlvbkZvcihpbnB1dFN0cmVhbSwgZmlsZS5nZXROYW1lKCksIElDb250ZW50RGVzY3JpcHRpb24uQUxMKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChpbnB1dFN0cmVhbSAhPSBudWxsKSB7Ci0JCQkJaW5wdXRTdHJlYW0uY2xvc2UoKTsKLQkJCX0KLQkJfQotCQlhc3NlcnROb3ROdWxsKCJjb250ZW50IGRlc2NyaXB0aW9uIHdhcyBudWxsIiwgc3RyZWFtQ29udGVudERlc2NyaXB0aW9uKTsKLQkJcmV0dXJuIHN0cmVhbUNvbnRlbnREZXNjcmlwdGlvbjsKLQl9Ci0KLQlwcm90ZWN0ZWQgSUNvbnRlbnREZXNjcmlwdGlvbiBkb0dldENvbnRlbnRUeXBlQmFzZWRPbkZpbGUoSUZpbGUgZmlsZSkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlJQ29udGVudERlc2NyaXB0aW9uIGZpbGVDb250ZW50RGVzY3JpcHRpb24gPSBmaWxlLmdldENvbnRlbnREZXNjcmlwdGlvbigpOwotCQlhc3NlcnROb3ROdWxsKCJmaWxlIGNvbnRlbnQgZGVzY3JpcHRpb24gd2FzIG51bGwiLCBmaWxlQ29udGVudERlc2NyaXB0aW9uKTsKLQkJcmV0dXJuIGZpbGVDb250ZW50RGVzY3JpcHRpb247Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgZG9UZXN0Rm9yUGFyZW50KFN0cmluZyBleHBlY3RlZENvbnRlbnRUeXBlLCBTdHJpbmcgZmlsZVBhdGgsIENsYXNzIGV4cGVjdGVkRXhjZXB0aW9uKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlJRmlsZSBmaWxlID0gKElGaWxlKSBmVGVzdFByb2plY3QuZmluZE1lbWJlcihmaWxlUGF0aCk7Ci0JCWFzc2VydE5vdE51bGwoIkVycm9yIGluIHRlc3QgY2FzZTogZmlsZSBub3QgZm91bmQ6ICIgKyBmaWxlUGF0aCwgZmlsZSk7Ci0KLQkJSUNvbnRlbnREZXNjcmlwdGlvbiBjb250ZW50RGVzY3JpcHRpb24gPSBmaWxlLmdldENvbnRlbnREZXNjcmlwdGlvbigpOwotCQlpZiAoY29udGVudERlc2NyaXB0aW9uID09IG51bGwpIHsKLQkJCUlucHV0U3RyZWFtIGlucHV0U3RyZWFtID0gbnVsbDsKLQkJCXRyeSB7Ci0JCQkJaW5wdXRTdHJlYW0gPSBmaWxlLmdldENvbnRlbnRzKCk7Ci0JCQkJY29udGVudERlc2NyaXB0aW9uID0gUGxhdGZvcm0uZ2V0Q29udGVudFR5cGVNYW5hZ2VyKCkuZ2V0RGVzY3JpcHRpb25Gb3IoaW5wdXRTdHJlYW0sIGZpbGUuZ2V0TmFtZSgpLCBJQ29udGVudERlc2NyaXB0aW9uLkFMTCk7Ci0JCQl9Ci0JCQlmaW5hbGx5IHsKLQkJCQlpZiAoaW5wdXRTdHJlYW0gIT0gbnVsbCkgewotCQkJCQlpbnB1dFN0cmVhbS5jbG9zZSgpOwotCQkJCX0KLQkJCX0KLQkJfQotCQlhc3NlcnROb3ROdWxsKCJjb250ZW50IGRlc2NyaXB0aW9uIHdhcyBudWxsIiwgY29udGVudERlc2NyaXB0aW9uKTsKLQkJSUNvbnRlbnRUeXBlIGNvbnRlbnRUeXBlID0gY29udGVudERlc2NyaXB0aW9uLmdldENvbnRlbnRUeXBlKCk7Ci0JCWFzc2VydE5vdE51bGwoImNvbnRlbnQgdHlwZSB3YXMgbnVsbCIsIGNvbnRlbnRUeXBlKTsKLQotCQlJQ29udGVudFR5cGUgcGFyZW50Q29udGVudFR5cGUgPSBjb250ZW50VHlwZTsKLQkJYm9vbGVhbiBmb3VuZCA9IGZhbHNlOwotCQl3aGlsZSAocGFyZW50Q29udGVudFR5cGUgIT0gbnVsbCAmJiAhZm91bmQpIHsKLQkJCWZvdW5kID0gZXhwZWN0ZWRDb250ZW50VHlwZS5lcXVhbHMocGFyZW50Q29udGVudFR5cGUuZ2V0SWQoKSk7Ci0JCQlwYXJlbnRDb250ZW50VHlwZSA9IHBhcmVudENvbnRlbnRUeXBlLmdldEJhc2VUeXBlKCk7Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSgiZGlkIG5vdCBmaW5kICciICsgZXhwZWN0ZWRDb250ZW50VHlwZSArICInIGluIHBhcmVudCBjaGFpbiBvZiBiYXNlIHR5cGVzIiwgZm91bmQpOwotCi0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc2V0VXAoKTsKLQkJblNldHVwcysrOwotCQlpZiAoIWZUZXN0UHJvamVjdEluaXRpYWxpemVkKSB7Ci0JCQlnZXRBbmRDcmVhdGVQcm9qZWN0KCk7Ci0JCQkvLyB1bnppcCBmaWxlcyB0byB0aGUgcm9vdCBvZiB3b3Jrc3BhY2UgZGlyZWN0b3J5Ci0JCQlTdHJpbmcgZGVzdGluYXRpb25Qcm9qZWN0U3RyaW5nID0gZlRlc3RQcm9qZWN0LmdldExvY2F0aW9uKCkudG9PU1N0cmluZygpOwotCQkJU3RyaW5nIGRlc3RpbmF0aW9uRm9sZGVyID0gZGVzdGluYXRpb25Qcm9qZWN0U3RyaW5nICsgIi8iOwotCQkJLy8gdGhpcyB6aXAgZmlsZSBpcyBzaXR0aW5nIGluIHRoZSAicm9vdCIgb2YgdGVzdCBwbHVnaW4KLQkJCUZpbGUgemlwRmlsZSA9IFRlc3RzUGx1Z2luLmdldFRlc3RGaWxlKCJ0ZXN0ZmlsZXMuemlwIik7Ci0JCQlQcm9qZWN0VW56aXBVdGlsaXR5IHByb2pVdGlsID0gbmV3IFByb2plY3RVbnppcFV0aWxpdHkoKTsKLQkJCXByb2pVdGlsLnVuemlwQW5kSW1wb3J0KHppcEZpbGUsIGRlc3RpbmF0aW9uRm9sZGVyKTsKLQkJCXByb2pVdGlsLmluaXRKYXZhUHJvamVjdChURVNUX1BST0pFQ1RfTkFNRSk7Ci0JCQlmVGVzdFByb2plY3QucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7Ci0JCQlmVGVzdFByb2plY3RJbml0aWFsaXplZCA9IHRydWU7Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci50ZWFyRG93bigpOwotCQluU2V0dXBzLS07Ci0JCWlmIChuU2V0dXBzID09IDApIHsKLQkJCWlmICghREVCVUcpIHsKLS8vCQkJCSBEaXNwbGF5IGRpc3BsYXkgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldERpc3BsYXkoKTsKLS8vCQkJCWRpc3BsYXkuYXN5bmNFeGVjKG5ldyBSdW5uYWJsZSgpIHsKLS8vCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0vLwkJCQkJCVByb2plY3RVbnppcFV0aWxpdHkgcHJvalV0aWwgPSBuZXcgUHJvamVjdFVuemlwVXRpbGl0eSgpOwotLy8JCQkJCQlJUHJvamVjdCBwcm9qID0gZlRlc3RQcm9qZWN0OwotLy8JCQkJCQlmVGVzdFByb2plY3QgPSBudWxsOwotLy8JCQkJCQl0cnkgewotLy8JCQkJCQkJcHJvalV0aWwuZGVsZXRlUHJvamVjdChwcm9qKTsKLS8vCQkJCQkJfQotLy8JCQkJCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLS8vCQkJCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0vLwkJCQkJCX0KLS8vCQkJCQl9Ci0vLwkJCQl9KTsKLQkJCX0KLQkJfQotCX0KLQotCXByb3RlY3RlZCBzdGF0aWMgSVByb2plY3QgZ2V0VGVzdFByb2plY3QoKSB7Ci0JCXJldHVybiBmVGVzdFByb2plY3Q7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9yZWFkL1Rlc3RDb250ZW50VHlwZURldGVjdGlvbkZvclhNTC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9yZWFkL1Rlc3RDb250ZW50VHlwZURldGVjdGlvbkZvclhNTC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjBhZmEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvcmVhZC9UZXN0Q29udGVudFR5cGVEZXRlY3Rpb25Gb3JYTUwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5yZWFkOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotCi1wdWJsaWMgY2xhc3MgVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uRm9yWE1MIGV4dGVuZHMgVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgZXhwZWN0ZWRDdXN0b21YTUxDb250ZW50VHlwZSA9ICJvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUueG1sc291cmNlIjsKLQkKLS8vCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBleHBlY3RlZFhTTENvbnRlbnRUeXBlID0gIm9yZy5lY2xpcHNlLndzdC54bWwuY29yZS54c2xzb3VyY2UiOwotCQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBleHBlY3RlZFhNTENvbnRlbnRUeXBlID0gIm9yZy5lY2xpcHNlLmNvcmUucnVudGltZS54bWwiOwotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvRW1wdHlGaWxlLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAzUCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdEZvclBhcmVudChleHBlY3RlZFhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC9FbXB0eUZpbGUueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvZXVjanAueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDRiKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL2V1Y2pwLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL0lsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQueG1sIiwgbnVsbCk7Ci0JfQotLy8gIFsyNTE3ODZdIC0gTm8gZW5jb2Rpbmcgc2hvdWxkIHRyeSB0byBiZSBwaWNrZWQgdXAgYnkgdGhlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS54bWxzb3VyY2UKLS8vCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLS8vCQlkb1Rlc3QoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvTWFsZm9ybWVkTm9FbmNvZGluZy54bWwiLCBudWxsKTsKLS8vCX0KLQotCS8qKgotCSAqIFRoaXMgZmlsZSBpcyBpbGxmb3JtZWQgaW4gaXRzIHNwZWNpZmllZCBjaGFyc2V0Ci0JICogYW5kIGNoYXJhY3RlcnMuIAotCSAqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KLQkgKi8KLS8vICBbMjUxNzg2XSAtIE5vIGVuY29kaW5nIHNob3VsZCB0cnkgdG8gYmUgcGlja2VkIHVwIGJ5IHRoZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUueG1sc291cmNlCi0vLwlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0vLwkJZG9UZXN0KGV4cGVjdGVkWFNMQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL01hbGZvcm1lZE5vRW5jb2RpbmcueHNsIiwgbnVsbCk7Ci0vLwl9Ci0vLyAgWzI1MTc4Nl0gLSBObyBlbmNvZGluZyBzaG91bGQgdHJ5IHRvIGJlIHBpY2tlZCB1cCBieSB0aGUgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnhtbHNvdXJjZQotLy8JcHVibGljIHZvaWQgdGVzdEZpbGUxMDdQKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLS8vCQlkb1Rlc3RGb3JQYXJlbnQoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvTWFsZm9ybWVkTm9FbmNvZGluZy54c2wiLCBudWxsKTsKLS8vCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL05vRW5jb2RpbmcueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvTm9ybWFsTm9uRGVmYXVsdC54bWwiLCBudWxsKTsKLQl9Ci0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTEwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL3NoaWZ0amlzLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTExKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL3Rlc3RFeHRyYUp1bmsueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvdGVzdEV4dHJhVmFsaWRTdHVmZi54bWwiLCBudWxsKTsKLQl9Ci0JLy8gWzI1MDM5Ml0gdGhlIHZlcnNpb24gbnVtYmVyIGlzIGlsbGZvcm1lZCBhbmQgc2hvdWxkIG5vdCBiZSBwYXJzZWQgY29ycmVjdGx5IGJ5IHRoZSBYTUxDb250ZW50RGVzY3JpYmVyLgotCS8vIE1pZ2h0IGJlIGFibGUgdG8gZml4IHdoZW4gWzI1MTc4Nl0gaXMgY29ycmVjdGVkCi0vLwlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0vLwkJZG9UZXN0KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL3Rlc3RJbGxGb3JtZWQueG1sIiwgbnVsbCk7Ci0vLwl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdChleHBlY3RlZFhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC90ZXN0SWxsRm9ybWVkMi54bWwiLCBudWxsKTsKLQl9Ci0KLQkvLyBbMjUwMzkyXSB0aGUgdmVyc2lvbiBudW1iZXIgaXMgaWxsZm9ybWVkIGFuZCBzaG91bGQgbm90IGJlIHBhcnNlZCBjb3JyZWN0bHkgYnkgdGhlIFhNTENvbnRlbnREZXNjcmliZXIuCi0JLy8gTWlnaHQgYmUgYWJsZSB0byBmaXggd2hlbiBbMjUxNzg2XSBpcyBjb3JyZWN0ZWQKLS8vCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLS8vCQlkb1Rlc3QoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZDMueG1sIiwgamF2YS5uaW8uY2hhcnNldC5JbGxlZ2FsQ2hhcnNldE5hbWVFeGNlcHRpb24uY2xhc3MpOwotLy8JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZDQueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvdGVzdE11bHRpTGluZS54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdChleHBlY3RlZFhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC90ZXN0Tm9FbmNvZGluZ1ZhbHVlLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb3JtYWxDYXNlLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb1hNTERlY2wueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjBXUygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCS8vIHdoaXRlc3BhY2UgKENSTEYpIGJlZm9yZSB4bWwgZGVjbGFyYXRpb24KLQkJZG9UZXN0KGV4cGVjdGVkQ3VzdG9tWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL3Rlc3RXU0JlZm9yZVhNTERlY2wueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjBXUzIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQkvLyB3aGl0ZXNwYWNlIChzcGFjZSBvbmx5KSBiZWZvcmUgeG1sIGRlY2xhcmF0aW9uCi0JCWRvVGVzdChleHBlY3RlZEN1c3RvbVhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC90ZXN0V1NCZWZvcmVYTUxEZWNsMi54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMFdTMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCS8vIHdoaXRlc3BhY2UgKHNwYWNlLCB0YWJzLCBhbmQgQ1Igb25seSkgYmVmb3JlIHhtbCBkZWNsYXJhdGlvbgotCQlkb1Rlc3QoZXhwZWN0ZWRDdXN0b21YTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvdGVzdFdTQmVmb3JlWE1MRGVjbDMueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjBQKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Rm9yUGFyZW50KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb1hNTERlY2wueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQkvLyB0YWcgKG5vdCBqdXN0IHdoaXRlIHNwYWNlKSBiZWZvcmUgeG1sIGRlY2xhcmF0aW9uLgotCQlkb1Rlc3QoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvdGVzdE5vWE1MRGVjbEF0Rmlyc3QueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjFQKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Rm9yUGFyZW50KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb1hNTERlY2xBdEZpcnN0LnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb1hNTERlY2xJbkxhcmdlRmlsZS54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMlAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RGb3JQYXJlbnQoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvdGVzdE5vWE1MRGVjbEluTGFyZ2VGaWxlLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL3Rlc3RVVEYxNi54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCS8vIGxhcmdlLCB1dGYxNiwgYnV0IG5vIHhtbERlY2wKLQkJZG9UZXN0KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL1VURjE2TEVBdFN0YXJ0T2ZMYXJnZUZpbGUueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjRQKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Rm9yUGFyZW50KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL1VURjE2TEVBdFN0YXJ0T2ZMYXJnZUZpbGUueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQkvLyBpbGxmb3JtZWQsIGlzIGluIHV0ZjE2LCBidXQgbm90IGluIGhlYWRlciwgbm90IGluIGVuY29kaW5nPSBzcGVjLgotCQlkb1Rlc3QoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlcjIueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjVQKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Rm9yUGFyZW50KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXIyLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXJCRS54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdChleHBlY3RlZFhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC91dGYxNldpdGhKYXBhbmVzZUNoYXJzLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL1VURjhXaXRoM0J5dGVCT00ueG1sIiwgbnVsbCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KGV4cGVjdGVkQ3VzdG9tWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL3V0ZjE2YmUueG1sIiwgbnVsbCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTMwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KGV4cGVjdGVkQ3VzdG9tWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL3V0ZjE2bGUueG1sIiwgbnVsbCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTMxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KGV4cGVjdGVkQ3VzdG9tWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL3V0ZjE2YmVNYWxmb3JtZWQueG1sIiwgbnVsbCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTMyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KGV4cGVjdGVkQ3VzdG9tWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL3V0ZjE2bGVNYWxmb3JtZWQueG1sIiwgbnVsbCk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3JlYWQvVGVzdENvbnRlbnRUeXBlcy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9yZWFkL1Rlc3RDb250ZW50VHlwZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjVhNjE2Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3JlYWQvVGVzdENvbnRlbnRUeXBlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnJlYWQ7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmNvbnRlbnQuSUNvbnRlbnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5jb250ZW50LklDb250ZW50VHlwZU1hbmFnZXI7Ci0KLQotcHVibGljIGNsYXNzIFRlc3RDb250ZW50VHlwZXMgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVRyA9IGZhbHNlOwotCi0JcHVibGljIHZvaWQgdGVzdENyZWF0aW9uKCkgewotCQlJQ29udGVudFR5cGVNYW5hZ2VyIHJlZ2lzdHJ5ID0gUGxhdGZvcm0uZ2V0Q29udGVudFR5cGVNYW5hZ2VyKCk7Ci0JCWFzc2VydFRydWUoImNvbnRlbnQgdHlwZSBpZGVudGlmZXIgcmVnaXN0cnkgbXVzdCBleGlzdCIsIHJlZ2lzdHJ5ICE9IG51bGwpOwotCQlJQ29udGVudFR5cGVbXSBhbGxUeXBlcyA9IHJlZ2lzdHJ5LmdldEFsbENvbnRlbnRUeXBlcygpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGFsbFR5cGVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlJQ29udGVudFR5cGUgY29udGVudFR5cGUgPSBhbGxUeXBlc1tpXTsKLQkJCUlDb250ZW50VHlwZSBwYXJlbnRUeXBlID0gY29udGVudFR5cGUuZ2V0QmFzZVR5cGUoKTsKLQkJCWlmIChERUJVRykgewotCQkJCVN5c3RlbS5vdXQucHJpbnQoY29udGVudFR5cGUpOwotCi0JCQkJaWYgKHBhcmVudFR5cGUgIT0gbnVsbCkgewotCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIiAoZXh0ZW5kcyAiICsgcGFyZW50VHlwZSArICIpIik7Ci0JCQkJfQotCQkJCWVsc2UgewotCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJCQl9Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCIgICAiICsgY29udGVudFR5cGUuZ2V0TmFtZSgpKTsKLQkJCX0KLQkJCVN0cmluZ1tdIGZpbGVzcGVjcyA9IGNvbnRlbnRUeXBlLmdldEZpbGVTcGVjcyhJQ29udGVudFR5cGUuRklMRV9FWFRFTlNJT05fU1BFQyB8IElDb250ZW50VHlwZS5GSUxFX05BTUVfU1BFQyk7Ci0JCQlpZiAoREVCVUcpIHsKLQkJCQlmb3IgKGludCBqID0gMDsgaiA8IGZpbGVzcGVjcy5sZW5ndGg7IGorKykgewotCQkJCQlTdHJpbmcgZmlsZXNwZWMgPSBmaWxlc3BlY3Nbal07Ci0JCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiICAgICAgICAiICsgZmlsZXNwZWMpOwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3V0aWwvUHJvamVjdFVuemlwVXRpbGl0eS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy91dGlsL1Byb2plY3RVbnppcFV0aWxpdHkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGRhZDU4Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3V0aWwvUHJvamVjdFVuemlwVXRpbGl0eS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzM3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy51dGlsOwotCi1pbXBvcnQgamF2YS5pby5CdWZmZXJlZElucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5JbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLnppcC5aaXBFbnRyeTsKLWltcG9ydCBqYXZhLnV0aWwuemlwLlppcEZpbGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlUm9vdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLldvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLklPdmVyd3JpdGVRdWVyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS53aXphcmRzLmRhdGF0cmFuc2Zlci5GaWxlU3lzdGVtU3RydWN0dXJlUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkud2l6YXJkcy5kYXRhdHJhbnNmZXIuSUltcG9ydFN0cnVjdHVyZVByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLndpemFyZHMuZGF0YXRyYW5zZmVyLkltcG9ydE9wZXJhdGlvbjsKLQotLyoqCi0gKiBJbXBvcnRzIHppcHBlZCBmaWxlcyBpbnRvIHRoZSB0ZXN0IHdvcmtzcGFjZS4gRGVsZXRlcyBhbGwgcHJvamVjdHMgaW4KLSAqIHdvcmtzcGFjZS4KLSAqIAotICogQGF1dGhvciBwYXZlcnkKLSAqLwotcHVibGljIGNsYXNzIFByb2plY3RVbnppcFV0aWxpdHkgewotCWNsYXNzIE15T3ZlcndyaXRlUXVlcnkgaW1wbGVtZW50cyBJT3ZlcndyaXRlUXVlcnkgewotCQlwdWJsaWMgU3RyaW5nIHF1ZXJ5T3ZlcndyaXRlKFN0cmluZyBwYXRoU3RyaW5nKSB7Ci0JCQlyZXR1cm4gQUxMOwotCQl9Ci0JfQotCi0JcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgUFJPSkVDVF9aSVBTX0ZPTERFUiA9ICJQcm9qZWN0VGVzdEZpbGVzIjsKLQlwcml2YXRlIExpc3QgZkNyZWF0ZWRQcm9qZWN0cyA9IG51bGw7Ci0KLQlwdWJsaWMgUHJvamVjdFVuemlwVXRpbGl0eSgpIHsKLQkJLy8gZm9yIGRlbGV0aW9uIGxhdGVyCi0JCWZDcmVhdGVkUHJvamVjdHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIGZpbGVUb0ltcG9ydAotCSAqICAgICAgICAgICAgdGhlIGZpbGUgeW91IHdpc2ggdG8gaW1wb3J0Ci0JICogQHBhcmFtIGZvbGRlclBhdGgKLQkgKiAgICAgICAgICAgIHRoZSBjb250YWluZXIgcGF0aCB3aXRoaW4gdGhlIHdvcmtzcGFjZQotCSAqLwotCXB1YmxpYyB2b2lkIGltcG9ydEZpbGUoRmlsZSBmaWxlVG9JbXBvcnQsIFN0cmluZyBmb2xkZXJQYXRoKSB7Ci0JCVdvcmtzcGFjZVByb2dyZXNzTW9uaXRvciBpbXBvcnRQcm9ncmVzcyA9IG5ldyBXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IoKTsKLQkJdHJ5IHsKLQkJCWlmIChmaWxlVG9JbXBvcnQuZXhpc3RzKCkpIHsKLQkJCQlJUGF0aCBjb250YWluZXJQYXRoID0gbmV3IFBhdGgoZm9sZGVyUGF0aCk7Ci0JCQkJLy9mQ3JlYXRlZFByb2plY3RzLmFkZChmb2xkZXJQYXRoKTsKLQkJCQlJSW1wb3J0U3RydWN0dXJlUHJvdmlkZXIgcHJvdmlkZXIgPSBGaWxlU3lzdGVtU3RydWN0dXJlUHJvdmlkZXIuSU5TVEFOQ0U7Ci0JCQkJSU92ZXJ3cml0ZVF1ZXJ5IG92ZXJ3cml0ZUltcGxlbWVudG9yID0gbmV3IE15T3ZlcndyaXRlUXVlcnkoKTsKLQkJCQlGaWxlW10gZmlsZXNUb0ltcG9ydCA9IHtmaWxlVG9JbXBvcnR9OwotCQkJCUltcG9ydE9wZXJhdGlvbiBpbXBvcnRPcCA9IG5ldyBJbXBvcnRPcGVyYXRpb24oY29udGFpbmVyUGF0aCwgbnVsbCwgcHJvdmlkZXIsIG92ZXJ3cml0ZUltcGxlbWVudG9yLCBBcnJheXMuYXNMaXN0KGZpbGVzVG9JbXBvcnQpKTsKLQkJCQlpbXBvcnRPcC5zZXRDcmVhdGVDb250YWluZXJTdHJ1Y3R1cmUoZmFsc2UpOwotCQkJCWltcG9ydE9wLnNldE92ZXJ3cml0ZVJlc291cmNlcyh0cnVlKTsKLQkJCQlpbXBvcnRPcC5ydW4oaW1wb3J0UHJvZ3Jlc3MpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJoYW5kbGUgc291cmNlIGRvZXNuJ3QgZXhpc3QiKTsKLQkJCX0KLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JCQlleC5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWltcG9ydFByb2dyZXNzLmRvbmUoKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIHRoZSBmb2xsb3dpbmcgaXMgbG9naWMgZnJvbQotCSAqIGh0dHA6Ly93d3cuZGV2c2hlZC5jb20vYy9hL0phdmEvWmlwLU1lZXRzLUphdmEvMi8KLQkgKi8KLQkvLyBzcGVjaWZ5IGJ1ZmZlciBzaXplIGZvciBleHRyYWN0aW9uCi0Jc3RhdGljIGZpbmFsIGludCBCVUZGRVIgPSAyMDQ4OwotCi0JcHVibGljIHZvaWQgdW56aXBBbmRJbXBvcnQoRmlsZSBpbkZpbGUsIFN0cmluZyBkZXN0aW5hdGlvbkRpcmVjdG9yeSkgewotCQl0cnkgewotCQkJLy8gU3BlY2lmeSBmaWxlIHRvIGRlY29tcHJlc3MKLQkJCVN0cmluZyBpbkZpbGVOYW1lID0gaW5GaWxlLmdldEFic29sdXRlUGF0aCgpOyAvLyJjOi9leGFtcGxlLnppcCI7Ci0JCQkvLyBTcGVjaWZ5IGRlc3RpbmF0aW9uIHdoZXJlIGZpbGUgd2lsbCBiZSB1bnppcHBlZAotCQkJLy9TdHJpbmcgZGVzdGluYXRpb25EaXJlY3RvcnkgPQotCQkJLy8gImQ6L2VjbGlwc2VkZXYvTTVfU1NFX1RFU1RTX1dPUktTUEFDRS8iOyAvLyJjOi90ZW1wLyI7Ci0JCQlGaWxlIHNvdXJjZVppcEZpbGUgPSBuZXcgRmlsZShpbkZpbGVOYW1lKTsKLQkJCUZpbGUgdW56aXBEZXN0aW5hdGlvbkRpcmVjdG9yeSA9IG5ldyBGaWxlKGRlc3RpbmF0aW9uRGlyZWN0b3J5KTsKLQkJCS8vIE9wZW4gWmlwIGZpbGUgZm9yIHJlYWRpbmcKLQkJCVppcEZpbGUgemlwRmlsZSA9IG5ldyBaaXBGaWxlKHNvdXJjZVppcEZpbGUsIFppcEZpbGUuT1BFTl9SRUFEKTsKLQkJCS8vIENyZWF0ZSBhbiBlbnVtZXJhdGlvbiBvZiB0aGUgZW50cmllcyBpbiB0aGUgemlwIGZpbGUKLQkJCUVudW1lcmF0aW9uIHppcEZpbGVFbnRyaWVzID0gemlwRmlsZS5lbnRyaWVzKCk7Ci0JCQlTdHJpbmcgcHJvamVjdEZvbGRlck5hbWUgPSBudWxsOwotCQkJSVByb2plY3QgY3VycmVudFByb2plY3QgPSBudWxsOwotCQkJLy8gUHJvY2VzcyBlYWNoIGVudHJ5Ci0JCQl3aGlsZSAoemlwRmlsZUVudHJpZXMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLQkJCQkvLyBncmFiIGEgemlwIGZpbGUgZW50cnkKLQkJCQlaaXBFbnRyeSBlbnRyeSA9IChaaXBFbnRyeSkgemlwRmlsZUVudHJpZXMubmV4dEVsZW1lbnQoKTsKLQkJCQlTdHJpbmcgY3VycmVudEVudHJ5ID0gZW50cnkuZ2V0TmFtZSgpOwotCQkJCS8vU3lzdGVtLm91dC5wcmludGxuKCJFeHRyYWN0aW5nOiAiICsgZW50cnkpOwotCQkJCUZpbGUgZGVzdEZpbGUgPSBuZXcgRmlsZSh1bnppcERlc3RpbmF0aW9uRGlyZWN0b3J5LCBjdXJyZW50RW50cnkpOwotCQkJCS8vIGdyYWIgZmlsZSdzIHBhcmVudCBkaXJlY3Rvcnkgc3RydWN0dXJlCi0JCQkJRmlsZSBkZXN0aW5hdGlvblBhcmVudCA9IGRlc3RGaWxlLmdldFBhcmVudEZpbGUoKTsKLQkJCQkvLyBjcmVhdGUgdGhlIHBhcmVudCBkaXJlY3Rvcnkgc3RydWN0dXJlIGlmIG5lZWRlZAotCQkJCWRlc3RpbmF0aW9uUGFyZW50Lm1rZGlycygpOwotCQkJCS8vIGV4dHJhY3QgZmlsZSBpZiBub3QgYSBkaXJlY3RvcnkKLQkJCQlpZiAoIWVudHJ5LmlzRGlyZWN0b3J5KCkpIHsKLQkJCQkJQnVmZmVyZWRJbnB1dFN0cmVhbSBpcyA9IG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKHppcEZpbGUuZ2V0SW5wdXRTdHJlYW0oZW50cnkpKTsKLQkJCQkJLy8gZXN0YWJsaXNoIGJ1ZmZlciBmb3Igd3JpdGluZyBmaWxlCi0JCQkJCWJ5dGUgZGF0YVtdID0gbmV3IGJ5dGVbQlVGRkVSXTsKLQkJCQkJLy8gd3JpdGUgdGhlIGN1cnJlbnQgZmlsZSB0byBkaXNrCi0JCQkJCUZpbGVPdXRwdXRTdHJlYW0gZmlsZU91dHB1dFN0cmVhbSA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKGRlc3RGaWxlKTsKLQkJCQkJQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGRlc3QgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKEJVRkZFUik7Ci0JCQkJCS8vIHJlYWQgYW5kIHdyaXRlIHVudGlsIGxhc3QgYnl0ZSBpcyBlbmNvdW50ZXJlZAotCQkJCQlib29sZWFuIGVvZiA9IGZhbHNlOwotCQkJCQlpbnQgbkJ5dGVzID0gMDsKLQkJCQkJd2hpbGUgKCFlb2YpIHsKLQkJCQkJCW5CeXRlcyA9IGlzLnJlYWQoZGF0YSwgMCwgQlVGRkVSKTsKLQkJCQkJCWlmIChuQnl0ZXMgIT0gLTEpIHsKLQkJCQkJCQlkZXN0LndyaXRlKGRhdGEsIDAsIG5CeXRlcyk7Ci0JCQkJCQl9Ci0JCQkJCQllbHNlIHsKLQkJCQkJCQllb2YgPSB0cnVlOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJCWRlc3QuZmx1c2goKTsKLQkJCQkJZGVzdC5jbG9zZSgpOwotCQkJCQlmaWxlT3V0cHV0U3RyZWFtLndyaXRlKGRlc3QudG9CeXRlQXJyYXkoKSk7Ci0JCQkJCWZpbGVPdXRwdXRTdHJlYW0uY2xvc2UoKTsKLQkJCQkJaXMuY2xvc2UoKTsKLQkJCQkJaWYgKHByb2plY3RGb2xkZXJOYW1lICE9IG51bGwpCi0JCQkJCQlpbXBvcnRGaWxlKGRlc3RGaWxlLCBwcm9qZWN0Rm9sZGVyTmFtZSk7Ci0JCQkJfQotCQkJCWVsc2UgewotCQkJCQkvLyBuZWVkIGhhbmRsZSB0byB0aGUgbWFpbiBwcm9qZWN0IGZvbGRlciB0byBjcmVhdGUKLQkJCQkJLy8gY29udGFpbmVyUGF0aAotCQkJCQkvLyB1bmxpa2UgdmVyc2lvbiBpbiBzc2UudGVzdHMsIHdlIGRvbid0IGNyZWF0ZSBwcm9qZWN0Ci0JCQkJCS8vIGZvcgotCQkJCQkvLyBldmVyeSBkaXJlY3RvcnkKLQkJCQkJLy8JCQkJCWlmKHByb2plY3RGb2xkZXJOYW1lID09IG51bGwpIHsKLQkJCQkJLy8JCQkJCQlwcm9qZWN0Rm9sZGVyTmFtZSA9IGRlc3RGaWxlLmdldE5hbWUoKTsKLQkJCQkJLy8JCQkJCQlmQ3JlYXRlZFByb2plY3RzLmFkZChwcm9qZWN0Rm9sZGVyTmFtZSk7Ci0JCQkJCS8vCQkJCQkJCi0JCQkJCS8vCQkJCQkJY3VycmVudFByb2plY3QgPQotCQkJCQkvLyBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QocHJvamVjdEZvbGRlck5hbWUpOwotCQkJCQkvLwkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCXppcEZpbGUuY2xvc2UoKTsKLQkJCS8vIGZpeGVzIHdvcmtzcGFjZSBtZXRhZGF0YSBmb3IgdGhlIHByb2plY3QKLQkJCS8vIGZvciBjbGVhbiBzdGFydHVwIG5leHQgcnVuCi0JCQlpZiAoY3VycmVudFByb2plY3QgIT0gbnVsbCkgewotCQkJCXRyeSB7Ci0JCQkJCVBhdGggcHJvamVjdExvY2F0aW9uID0gbmV3IFBhdGgoUGxhdGZvcm0uZ2V0TG9jYXRpb24oKS50b09TU3RyaW5nKCkpOwotCQkJCQljcmVhdGVQcm9qZWN0KGN1cnJlbnRQcm9qZWN0LCBwcm9qZWN0TG9jYXRpb24sIG5ldyBXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQkJfQotCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGNleCkgewotCQkJCQljZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpIHsKLQkJCWlvZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCX0KLQotCS8qKgotCSAqICAKLQkgKi8KLQlwdWJsaWMgdm9pZCByZWZyZXNoV29ya3NwYWNlKCkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlJV29ya3NwYWNlUm9vdCB3c1Jvb3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpOwotCQlJUHJvamVjdFtdIHByb2plY3RzID0gd3NSb290LmdldFByb2plY3RzKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgcHJvamVjdHMubGVuZ3RoOyBpKyspIHsKLQkJCXByb2plY3RzW2ldLnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQl9Ci0JCXdzUm9vdC5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX0lORklOSVRFLCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiBEZWxldGUgcHJvamVjdHMgY3JlYXRlZCAodW56aXBwZWQgYW5kIGltcG9ydGVkKSBieSB0aGlzIHV0aWxpdHkKLQkgKiAKLQkgKiBAdGhyb3dzIEV4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIGRlbGV0ZVByb2plY3RzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWZpbmFsIElQcm9qZWN0W10gcHJvamVjdHMgPSBnZXRDcmVhdGVkUHJvamVjdHMoKTsKLQkJV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uIGRlbGV0ZU9wID0gbmV3IFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbigpIHsKLQkJCXByb3RlY3RlZCB2b2lkIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9qZWN0cy5sZW5ndGg7IGkrKykgewotCQkJCQlwcm9qZWN0c1tpXS5jbGVhckhpc3RvcnkobnVsbCk7Ci0JCQkJCXByb2plY3RzW2ldLmNsb3NlKG51bGwpOwotCQkJCQlwcm9qZWN0c1tpXS5kZWxldGUodHJ1ZSwgdHJ1ZSwgbnVsbCk7Ci0JCQkJfQotCQkJCXJlZnJlc2hXb3Jrc3BhY2UoKTsKLQkJCX0KLQkJfTsKLQkJV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzID0gbmV3IFdvcmtzcGFjZVByb2dyZXNzTW9uaXRvcigpOwotCQlkZWxldGVPcC5ydW4ocHJvZ3Jlc3MpOwotCQkvLyBzYXZlcyB0aGUgbmV3IHdvcmtzcGFjZSBtZXRhZGF0YQotCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuc2F2ZSh0cnVlLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBkZWxldGVQcm9qZWN0KFN0cmluZyBwcm9qZWN0TmFtZSkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWZpbmFsIFN0cmluZyBuYW1lID0gcHJvamVjdE5hbWU7Ci0JCUlXb3Jrc3BhY2VSb290IHdzUm9vdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCk7Ci0JCWZpbmFsIElQcm9qZWN0IHByb2ogPSB3c1Jvb3QuZ2V0UHJvamVjdChuYW1lKTsKLQkJV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uIGRlbGV0ZU9wID0gbmV3IFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbihwcm9qKSB7Ci0JCQlwcm90ZWN0ZWQgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQkJCS8vCQkJCUlXb3Jrc3BhY2VSb290IHdzUm9vdCA9Ci0JCQkJLy8gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLQkJCQkvLwkJCQlJUHJvamVjdCBwcm9qID0gd3NSb290LmdldFByb2plY3QobmFtZSk7Ci0JCQkJaWYgKHByb2ogIT0gbnVsbCAmJiBwcm9qLmV4aXN0cygpKSB7Ci0JCQkJCXByb2ouY2xlYXJIaXN0b3J5KG51bGwpOwotCQkJCQkvL3Byb2ouY2xvc2UobnVsbCk7Ci0JCQkJCXByb2oucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7Ci0JCQkJCXRyeSB7Ci0JCQkJCQlwcm9qLmRlbGV0ZSh0cnVlLCB0cnVlLCBudWxsKTsKLQkJCQkJfQotCQkJCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCQkJCS8vIGp1c3QgdHJ5IGFnYWluIChub3Qgc3VyZSB3aHkgdGhleSBhcmUgbm90IGJlaW5nCi0JCQkJCQkvLyBkZWxldGVkKQotCQkJCQkJcHJvai5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX0lORklOSVRFLCBudWxsKTsKLQkJCQkJCXByb2ouZGVsZXRlKHRydWUsIHRydWUsIG51bGwpOwotCQkJCQl9Ci0JCQkJCS8vcHJvaiA9IG51bGw7Ci0JCQkJfQotCQkJCXJlZnJlc2hXb3Jrc3BhY2UoKTsKLQkJCX0KLQkJfTsKLQkJV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzID0gbmV3IFdvcmtzcGFjZVByb2dyZXNzTW9uaXRvcigpOwotCQlkZWxldGVPcC5ydW4ocHJvZ3Jlc3MpOwotCQkvLyBzYXZlcyB0aGUgbmV3IHdvcmtzcGFjZSBtZXRhZGF0YQotCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuc2F2ZSh0cnVlLCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiBAcmV0dXJuIElQcm9qZWN0cyB0aGF0IHdlcmUgdW56aXBwZWQgYW5kIGltcG9ydGVkIGludG8gdGhlIHdvcmtzcGFjZSBieQotCSAqICAgICAgICAgdGhpcyB1dGlsaXR5Ci0JICovCi0JcHVibGljIElQcm9qZWN0W10gZ2V0Q3JlYXRlZFByb2plY3RzKCkgewotCQlJV29ya3NwYWNlUm9vdCB3c1Jvb3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpOwotCQlTdHJpbmdbXSBwcm9qZWN0TmFtZXMgPSAoU3RyaW5nW10pIGZDcmVhdGVkUHJvamVjdHMudG9BcnJheShuZXcgU3RyaW5nW2ZDcmVhdGVkUHJvamVjdHMuc2l6ZSgpXSk7Ci0JCUlQcm9qZWN0W10gcHJvamVjdHMgPSBuZXcgSVByb2plY3RbcHJvamVjdE5hbWVzLmxlbmd0aF07Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgcHJvamVjdE5hbWVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlwcm9qZWN0c1tpXSA9IHdzUm9vdC5nZXRQcm9qZWN0KHByb2plY3ROYW1lc1tpXSk7Ci0JCX0KLQkJcmV0dXJuIHByb2plY3RzOwotCX0KLQotCXB1YmxpYyB2b2lkIGluaXRKYXZhUHJvamVjdChTdHJpbmcgcHJvak5hbWUpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJLy8gcmVzeW5jaAotCQlyZWZyZXNoV29ya3NwYWNlKCk7Ci0JCS8vY2hhbmdlIHByZXJlcXMgdG8gZ2V0IHRoaXMgZnVuY3Rpb25hbGl0eSBiYWNrIGluCi0JCUlQcm9qZWN0IHByb2ogPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QocHJvak5hbWUpOwotCQkvLyBuZWVkIHRvIGFkZCBqYXZhIG5hdHVyZSwgb3IgZWxzZSBwcm9qZWN0IHdvbid0ICJleGlzdCgpIiBpbiB0aGUKLQkJLy8gamF2YSBlbGVtZW50IHNlbnNlCi0JCVN0cmluZ1tdIG5hdHVyZUlkcyA9IHsib3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZSJ9OwotCQlpZiAoIXByb2ouaXNPcGVuKCkpIHsKLQkJCXByb2oub3BlbihudWxsKTsKLQkJfQotCQlJUHJvamVjdERlc2NyaXB0aW9uIGRlc2MgPSBwcm9qLmdldERlc2NyaXB0aW9uKCk7Ci0JCWRlc2Muc2V0TmF0dXJlSWRzKG5hdHVyZUlkcyk7Ci0JCXByb2ouc2V0RGVzY3JpcHRpb24oZGVzYywgbnVsbCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNyZWF0ZVByb2plY3QoSVByb2plY3QgcHJvamVjdCwgSVBhdGggbG9jYXRpb25QYXRoLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJaWYgKG1vbml0b3IgPT0gbnVsbCkgewotCQkJbW9uaXRvciA9IG5ldyBXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IoKTsKLQkJfQotCQltb25pdG9yLmJlZ2luVGFzaygiY3JlYXRpbmcgdGVzdCBwcm9qZWN0IiwgMTApOwotCQkvLyBjcmVhdGUgdGhlIHByb2plY3QKLQkJdHJ5IHsKLQkJCWlmICghcHJvamVjdC5leGlzdHMoKSkgewotCQkJCUlQcm9qZWN0RGVzY3JpcHRpb24gZGVzYyA9IHByb2plY3QuZ2V0V29ya3NwYWNlKCkubmV3UHJvamVjdERlc2NyaXB0aW9uKHByb2plY3QuZ2V0TmFtZSgpKTsKLQkJCQlpZiAoUGxhdGZvcm0uZ2V0TG9jYXRpb24oKS5lcXVhbHMobG9jYXRpb25QYXRoKSkgewotCQkJCQlsb2NhdGlvblBhdGggPSBudWxsOwotCQkJCX0KLQkJCQlkZXNjLnNldExvY2F0aW9uKGxvY2F0aW9uUGF0aCk7Ci0JCQkJcHJvamVjdC5jcmVhdGUoZGVzYywgbW9uaXRvcik7Ci0JCQkJbW9uaXRvciA9IG51bGw7Ci0JCQl9Ci0JCQlpZiAoIXByb2plY3QuaXNPcGVuKCkpIHsKLQkJCQlwcm9qZWN0Lm9wZW4obW9uaXRvcik7Ci0JCQkJbW9uaXRvciA9IG51bGw7Ci0JCQl9Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9uaXRvciAhPSBudWxsKSB7Ci0JCQkJbW9uaXRvci5kb25lKCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCBkZWxldGVQcm9qZWN0KElQcm9qZWN0IGZQcm9qZWN0KSB0aHJvd3MgSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiwgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotCQlmaW5hbCBJUHJvamVjdCBwcm9qID0gZlByb2plY3Q7Ci0JCVdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBkZWxldGVPcCA9IG5ldyBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24ocHJvaikgewotCQkJcHJvdGVjdGVkIHZvaWQgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJCQkvLwkJCQlJV29ya3NwYWNlUm9vdCB3c1Jvb3QgPQotCQkJCS8vIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCk7Ci0JCQkJLy8JCQkJSVByb2plY3QgcHJvaiA9IHdzUm9vdC5nZXRQcm9qZWN0KG5hbWUpOwotCQkJCWlmIChwcm9qICE9IG51bGwgJiYgcHJvai5leGlzdHMoKSkgewotCQkJCQlwcm9qLmNsZWFySGlzdG9yeShudWxsKTsKLQkJCQkJLy9wcm9qLmNsb3NlKG51bGwpOwotCQkJCQlwcm9qLnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQkJCQlwcm9qLmRlbGV0ZSh0cnVlLCB0cnVlLCBudWxsKTsKLQkJCQkJLy9wcm9qID0gbnVsbDsKLQkJCQl9Ci0JCQkJcmVmcmVzaFdvcmtzcGFjZSgpOwotCQkJfQotCQl9OwotCQkvL1dvcmtzcGFjZVByb2dyZXNzTW9uaXRvciBwcm9ncmVzcyA9IG5ldyBXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IoKTsKLQkJZGVsZXRlT3AucnVuKG51bGwpOwotCQkvLyBzYXZlcyB0aGUgbmV3IHdvcmtzcGFjZSBtZXRhZGF0YQotCQkvL1Jlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5zYXZlKHRydWUsIG51bGwpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3V0aWwvV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3V0aWwvV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkN2Y3ZDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy91dGlsL1dvcmtzcGFjZVByb2dyZXNzTW9uaXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnV0aWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLQotY2xhc3MgV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yIGltcGxlbWVudHMgSVByb2dyZXNzTW9uaXRvciB7Ci0JcHJpdmF0ZSBib29sZWFuIGZpbmlzaGVkID0gZmFsc2U7Ci0KLQlwdWJsaWMgdm9pZCBiZWdpblRhc2soU3RyaW5nIG5hbWUsIGludCB0b3RhbFdvcmspIHsKLQkJLy8gbm9vcAotCX0KLQotCXB1YmxpYyB2b2lkIGRvbmUoKSB7Ci0JCWZpbmlzaGVkID0gdHJ1ZTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBpc0ZpbmlzaGVkKCkgewotCQlyZXR1cm4gZmluaXNoZWQ7Ci0JfQotCi0JcHVibGljIHZvaWQgaW50ZXJuYWxXb3JrZWQoZG91YmxlIHdvcmspIHsKLQkJLy8gbm9vcAotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzQ2FuY2VsZWQoKSB7Ci0JCXJldHVybiBmaW5pc2hlZDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRDYW5jZWxlZChib29sZWFuIHZhbHVlKSB7Ci0JCWlmICh2YWx1ZSA9PSB0cnVlKQotCQkJZmluaXNoZWQgPSB0cnVlOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFRhc2tOYW1lKFN0cmluZyBuYW1lKSB7Ci0JCS8vIG5vb3AKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzdWJUYXNrKFN0cmluZyBuYW1lKSB7Ci0JCS8vIG5vb3AKLQl9Ci0KLQlwdWJsaWMgdm9pZCB3b3JrZWQoaW50IHdvcmspIHsKLQkJLy8gbm9vcAotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3dyaXRlL1Rlc3RDb2RlZFdyaXRlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3dyaXRlL1Rlc3RDb2RlZFdyaXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExMjUyMWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy93cml0ZS9UZXN0Q29kZWRXcml0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLndyaXRlOwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuQ29kZWRTdHJlYW1DcmVhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5FbmNvZGluZ1J1bGU7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0Q29kZWRXcml0ZSBleHRlbmRzIFRlc3RDYXNlIHsKLQkvKiogQSB0YWJsZSBvZiBoZXggZGlnaXRzICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2hhcltdIGhleERpZ2l0ID0geycwJywgJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2JywgJzcnLCAnOCcsICc5JywgJ0EnLCAnQicsICdDJywgJ0QnLCAnRScsICdGJ307Ci0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nQnVmZmVyIHNCdWZmID0gbmV3IFN0cmluZ0J1ZmZlcigyKTsKLQotCXByaXZhdGUgc3RhdGljIFN0cmluZyBieXRlVG9IZXgoYnl0ZSBieXRlY2hhcikgewotCQlzQnVmZi5zZXRMZW5ndGgoMCk7Ci0JCWludCBsb3cgPSBieXRlY2hhciAmIDB4RjsKLQkJaW50IGhpID0gKGJ5dGVjaGFyID4+IDQpICYgMHhGOwotCQlzQnVmZi5hcHBlbmQodG9IZXgoaGkpKTsKLQkJc0J1ZmYuYXBwZW5kKHRvSGV4KGxvdykpOwotCQlyZXR1cm4gc0J1ZmYudG9TdHJpbmcoKTsKLQl9Ci0KLQkvKioKLQkgKiBDb252ZXJ0IGEgbmliYmxlIHRvIGEgaGV4IGNoYXJhY3RlcgotCSAqIAotCSAqIEBwYXJhbSBuaWJibGUKLQkgKiAgICAgICAgICAgIHRoZSBuaWJibGUgdG8gY29udmVydC4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBjaGFyIHRvSGV4KGludCBuaWJibGUpIHsKLQkJcmV0dXJuIGhleERpZ2l0WyhuaWJibGUgJiAweEYpXTsKLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKLQotCS8qKgotCSAqICAKLQkgKi8KLQlwdWJsaWMgVGVzdENvZGVkV3JpdGUoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgVGVzdENvZGVkV3JpdGUoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNpbXBsZSgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBqc3AgPSAiPCVAIHBhZ2UgY29udGVudFR5cGU9XCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktM1wiJT4iOwotCQlDb2RlZFN0cmVhbUNyZWF0b3IgY29kZWRTdHJlYW1DcmVhdG9yID0gbmV3IENvZGVkU3RyZWFtQ3JlYXRvcigpOwotCQljb2RlZFN0cmVhbUNyZWF0b3Iuc2V0KCJkdW1teS5qc3AiLCBqc3ApOwotCQlCeXRlQXJyYXlPdXRwdXRTdHJlYW0gb3V0cHV0U3RyZWFtID0gY29kZWRTdHJlYW1DcmVhdG9yLmdldENvZGVkQnl0ZUFycmF5T3V0cHV0U3RyZWFtKEVuY29kaW5nUnVsZS5DT05URU5UX0JBU0VEKTsKLQkJaWYgKERFQlVHKSB7Ci0JCQlkZWJ1Z1ByaW50KCJ0ZXN0U2ltcGxlIiwganNwLCAiSVNPLTg4NTktMyIsIG91dHB1dFN0cmVhbSk7Ci0JCX0KLQkJYXNzZXJ0Tm90TnVsbChvdXRwdXRTdHJlYW0pOwotCi0JfQotCi0JcHJpdmF0ZSB2b2lkIGRlYnVnUHJpbnQoU3RyaW5nIHRlc3RuYW1lLCBTdHJpbmcgb3JpZ2luYWxTdHJpbmcsIFN0cmluZyBlbmNvZGluZywgQnl0ZUFycmF5T3V0cHV0U3RyZWFtIG91dHB1dFN0cmVhbSkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gewotCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKHRlc3RuYW1lKTsKLQkJYnl0ZVtdIGJ5dGVzID0gb3V0cHV0U3RyZWFtLnRvQnl0ZUFycmF5KCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpKyspIHsKLQkJCVN5c3RlbS5vdXQucHJpbnQoYnl0ZVRvSGV4KGJ5dGVzW2ldKSk7Ci0JCX0KLQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCWlmIChlbmNvZGluZyA9PSBudWxsKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4obmV3IFN0cmluZyhieXRlcykpOwotCi0JCX0KLQkJZWxzZSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4obmV3IFN0cmluZyhieXRlcywgZW5jb2RpbmcpKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTaW1wbGVVVEYxNkJFKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGpzcCA9ICI8JUAgcGFnZSBjb250ZW50VHlwZT1cInRleHQvaHRtbDsgY2hhcnNldD1VVEYtMTZCRVwiJT4iOwotCQlDb2RlZFN0cmVhbUNyZWF0b3IgY29kZWRTdHJlYW1DcmVhdG9yID0gbmV3IENvZGVkU3RyZWFtQ3JlYXRvcigpOwotCQljb2RlZFN0cmVhbUNyZWF0b3Iuc2V0KCJkdW1teS5qc3AiLCBqc3ApOwotCQlCeXRlQXJyYXlPdXRwdXRTdHJlYW0gb3V0cHV0U3RyZWFtID0gY29kZWRTdHJlYW1DcmVhdG9yLmdldENvZGVkQnl0ZUFycmF5T3V0cHV0U3RyZWFtKEVuY29kaW5nUnVsZS5DT05URU5UX0JBU0VEKTsKLQkJaWYgKERFQlVHKSB7Ci0JCQlkZWJ1Z1ByaW50KCJ0ZXN0U2ltcGxlVVRGMTZCRSIsIGpzcCwgIlVURi0xNkJFIiwgb3V0cHV0U3RyZWFtKTsKLQkJfQotCQlhc3NlcnROb3ROdWxsKG91dHB1dFN0cmVhbSk7Ci0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2ltcGxlcigpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCUNvZGVkU3RyZWFtQ3JlYXRvciBjb2RlZFN0cmVhbUNyZWF0b3IgPSBuZXcgQ29kZWRTdHJlYW1DcmVhdG9yKCk7Ci0JCVN0cmluZyB4bWxTdHJpbmcgPSAiPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiVVRGLTE2XCI/Pjx0YWc+dGVzdCB0ZXh0PC90YWc+IjsKLQkJY29kZWRTdHJlYW1DcmVhdG9yLnNldCgiZHVtbXkueG1sIiwgeG1sU3RyaW5nKTsKLQkJQnl0ZUFycmF5T3V0cHV0U3RyZWFtIG91dHB1dFN0cmVhbSA9IGNvZGVkU3RyZWFtQ3JlYXRvci5nZXRDb2RlZEJ5dGVBcnJheU91dHB1dFN0cmVhbShFbmNvZGluZ1J1bGUuQ09OVEVOVF9CQVNFRCk7Ci0JCWlmIChERUJVRykgewotCQkJZGVidWdQcmludCgidGVzdFNpbXBsZXIiLCB4bWxTdHJpbmcsICJVVEYtMTYiLCBvdXRwdXRTdHJlYW0pOwotCQl9Ci0JCWFzc2VydE5vdE51bGwob3V0cHV0U3RyZWFtKTsKLQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTaW1wbGVzdCgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCUNvZGVkU3RyZWFtQ3JlYXRvciBjb2RlZFN0cmVhbUNyZWF0b3IgPSBuZXcgQ29kZWRTdHJlYW1DcmVhdG9yKCk7Ci0JCVN0cmluZyB0ZXh0ID0gInRlc3QgdGV4dCI7Ci0JCWNvZGVkU3RyZWFtQ3JlYXRvci5zZXQoImR1bW15LnhtbCIsIHRleHQpOwotCQlCeXRlQXJyYXlPdXRwdXRTdHJlYW0gb3V0cHV0U3RyZWFtID0gY29kZWRTdHJlYW1DcmVhdG9yLmdldENvZGVkQnl0ZUFycmF5T3V0cHV0U3RyZWFtKEVuY29kaW5nUnVsZS5DT05URU5UX0JBU0VEKTsKLQkJaWYgKERFQlVHKSB7Ci0JCQlkZWJ1Z1ByaW50KCJ0ZXN0U2ltcGxlc3QiLCB0ZXh0LCBudWxsLCBvdXRwdXRTdHJlYW0pOwotCQl9Ci0JCWFzc2VydE5vdE51bGwob3V0cHV0U3RyZWFtKTsKLQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcveG1sL1hNTEVuY29kaW5nVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcveG1sL1hNTEVuY29kaW5nVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGFiMWM4ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3htbC9YTUxFbmNvZGluZ1Rlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcueG1sOwotCi1pbXBvcnQgamF2YS5pby5CdWZmZXJlZElucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLm5pby5jaGFyc2V0LkNoYXJzZXQ7Ci1pbXBvcnQgamF2YS5uaW8uY2hhcnNldC5DaGFyc2V0RGVjb2RlcjsKLWltcG9ydCBqYXZhLm5pby5jaGFyc2V0LkNvZGluZ0Vycm9yQWN0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLkVuY29kaW5nTWVtZW50bzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuSVJlc291cmNlQ2hhcnNldERldGVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50dHlwZS5YTUxSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5UZXN0c1BsdWdpbjsKLQotCi1wdWJsaWMgY2xhc3MgWE1MRW5jb2RpbmdUZXN0cyBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcml2YXRlIGludCBSRUFEX0JVRkZFUl9TSVpFID0gODAwMDsKLQlwcml2YXRlIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBmaWxlUm9vdCA9ICJ0ZXN0ZmlsZXMvIjsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBmaWxlRGlyID0gInhtbC8iOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVMb2NhdGlvbiA9IGZpbGVSb290ICsgZmlsZURpcjsKLQotCXB1YmxpYyBYTUxFbmNvZGluZ1Rlc3RzKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXByaXZhdGUgdm9pZCBkb1Rlc3RGaWxlU3RyZWFtKFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIGV4cGVjdGVkSUFOQUVuY29kaW5nLCBJUmVzb3VyY2VDaGFyc2V0RGV0ZWN0b3IgZGV0ZWN0b3IpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUZpbGUgZmlsZSA9IFRlc3RzUGx1Z2luLmdldFRlc3RGaWxlKGZpbGVuYW1lKTsKLQkJaWYgKCFmaWxlLmV4aXN0cygpKQotCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbihmaWxlbmFtZSArICIgd2FzIG5vdCBmb3VuZCIpOwotCQlJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oZmlsZSk7Ci0JCS8vSW5wdXRTdHJlYW0gaW5TdHJlYW0gPSBnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0oZmlsZW5hbWUpOwotCQlJbnB1dFN0cmVhbSBpc3RyZWFtID0gZ2V0TWFya1N1cHBvcnRlZFN0cmVhbShpbnB1dFN0cmVhbSk7Ci0JCXRyeSB7Ci0JCQlkZXRlY3Rvci5zZXQoaXN0cmVhbSk7Ci0JCQlFbmNvZGluZ01lbWVudG8gZW5jb2RpbmdNZW1lbnRvID0gKChYTUxSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IpZGV0ZWN0b3IpLmdldEVuY29kaW5nTWVtZW50bygpOwotCQkJU3RyaW5nIGZvdW5kSUFOQUVuY29kaW5nID0gZW5jb2RpbmdNZW1lbnRvLmdldEphdmFDaGFyc2V0TmFtZSgpOwotCQkJLy8gSSBjaGFuZ2VkIG1hbnkgImVxdWFscyIgdG8gImVxdWFsc0lnbm9yZUNhc2UiIG9uIDExLzQvMjAwMiwKLQkJCS8vIHNpbmNlCi0JCQkvLyBzb21lIGlzc3VlcyB3aXRoIFNISUZUX0pJUyB2cy4gU2hpZnRfSklTIHdlcmUgY2F1c2luZyBmYWlsdXJlcy4KLQkJCS8vIFdlIGRvIHdhbnQgdG8gYmUgdG9sZXJhbnQgb24gaW5wdXQsIGFuZCBhY2NlcHQgZWl0aGVyLCBidXQgSQotCQkJLy8gdGhpbmsKLQkJCS8vIHRoYXQgU3VwcG9ydGVkSmF2YUVuY29kaW5ncyBuZWVkcyB0byBiZSBjaGFuZ2VkIHRvICJyZWNvbW1lbmQiCi0JCQkvLyBTaGlmdF9KSVMuCi0JCQlib29sZWFuIGV4cGVjdGVkSUFOQVJlc3VsdCA9IGZhbHNlOwotCQkJZXhwZWN0ZWRJQU5BUmVzdWx0ID0gZXhwZWN0ZWRJQU5BRW5jb2RpbmcuZXF1YWxzSWdub3JlQ2FzZShmb3VuZElBTkFFbmNvZGluZyk7Ci0KLQkJCWFzc2VydFRydWUoImVuY29kaW5nIHRlc3QgZmlsZSAiICsgZmlsZW5hbWUgKyAiIGV4cGVjdGVkOiAiICsgZXhwZWN0ZWRJQU5BRW5jb2RpbmcgKyAiIGZvdW5kOiAiICsgZm91bmRJQU5BRW5jb2RpbmcsIGV4cGVjdGVkSUFOQVJlc3VsdCk7Ci0JCQkvLyBhIHZlcnkgc2ltcGxlIHJlYWQgdGVzdCAuLi4gd2lsbCBjYXVzZSBKVW5pdCBlcnJvciAobm90IGZhaWwpIGlmIHRocm93cyBleGNlcHRpb24uCi0JCQllbnN1cmVDYW5SZWFkKGZpbGVuYW1lLCBmb3VuZElBTkFFbmNvZGluZywgaXN0cmVhbSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAoaXN0cmVhbSAhPSBudWxsKSB7Ci0JCQkJaXN0cmVhbS5jbG9zZSgpOwotCQkJfQotCQkJaWYgKGlucHV0U3RyZWFtICE9IG51bGwpIHsKLQkJCQlpbnB1dFN0cmVhbS5jbG9zZSgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFhNTEVtcHR5RmlsZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJFbXB0eUZpbGUueG1sIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgIlVURi04IiwgbmV3IFhNTFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0WE1MSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJJbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0LnhtbCI7Ci0JCVN0cmluZyBpYW5hSW5GaWxlID0gIklTTy04ODU5LTEiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCBpYW5hSW5GaWxlLCBuZXcgWE1MUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RYTUxOb3JtYWxOb25EZWZhdWx0KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIk5vcm1hbE5vbkRlZmF1bHQueG1sIjsKLQkJU3RyaW5nIGlhbmFJbkZpbGUgPSAiSVNPLTg4NTktMSI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsIGlhbmFJbkZpbGUsIG5ldyBYTUxSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFhNTE5vRW5jb2RpbmcoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiTm9FbmNvZGluZy54bWwiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCAiVVRGLTgiLCBuZXcgWE1MUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQotCS8qKgotCSAqIENhdXRpb24sIHdoZW4gdGhpcyBmaWxlIHByaW50cyBvdXQgaW4gY29uc29sZSAod2hlbiBkZWJ1ZyBzZXQgdG8gdHJ1ZSwgaXQgYXBwZWFycyAKLQkgKiBpbmNvcnJlY3QgKGR1ZSB0byBmb250IHByb2JsZW1zIGluIGNvbnNvbGUpLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RVVEYxNigpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ1dGYxNldpdGhKYXBhbmVzZUNoYXJzLnhtbCI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsICJVVEYtMTYiLCBuZXcgWE1MUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQotCS8qKgotCSAqIFRoaXMgdGVzdCBzaG93cyB1bmljb2RlIEJPTSBzaG91bGQgdGFrZSBwcmlvcml0eSBvdmVyIHNldHRpbmdzL2RlZmF1bHRzCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFV0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXIoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlcjIueG1sIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgIlVURi0xNiIsIG5ldyBYTUxSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCi0JLyoqCi0JICogVGhpcyB0ZXN0IHNob3dzIHVuaWNvZGUgQk9NIHNob3VsZCB0YWtlIHByaW9yaXR5IG92ZXIgc2V0dGluZ3MvZGVmYXVsdHMKLQkgKiBOb3RlOiBVVEYtMTYgPT0gVVRGLTE2QkUKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0VXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlckJFKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInV0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXJCRS54bWwiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCAiVVRGLTE2IiwgbmV3IFhNTFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0VVRGODNCeXRlQk9NKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIlVURjhXaXRoM0J5dGVCT00ueG1sIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgIlVURi04IiwgbmV3IFhNTFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFVURjE2QkUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidXRmMTZiZS54bWwiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCAiVVRGLTE2QkUiLCBuZXcgWE1MUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0VVRGMTZMRSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ1dGYxNmxlLnhtbCI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsICJVVEYtMTZMRSIsIG5ldyBYTUxSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RVVEYxNkxFTWFsZm9ybWVkKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInV0ZjE2bGVNYWxmb3JtZWQueG1sIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgIlVURi0xNkxFIiwgbmV3IFhNTFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFVURjE2QkVNYWxmb3JtZWQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidXRmMTZiZU1hbGZvcm1lZC54bWwiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCAiVVRGLTE2QkUiLCBuZXcgWE1MUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQotCS8qKgotCSAqIEVuc3VyZXMgdGhhdCBhbiBJbnB1dFN0cmVhbSBoYXMgbWFyay9yZXNldCBzdXBwb3J0LgotCSAqLwotCXByaXZhdGUgc3RhdGljIElucHV0U3RyZWFtIGdldE1hcmtTdXBwb3J0ZWRTdHJlYW0oSW5wdXRTdHJlYW0gb3JpZ2luYWwpIHsKLQkJaWYgKG9yaWdpbmFsID09IG51bGwpCi0JCQlyZXR1cm4gbnVsbDsKLQkJaWYgKG9yaWdpbmFsLm1hcmtTdXBwb3J0ZWQoKSkKLQkJCXJldHVybiBvcmlnaW5hbDsKLQkJcmV0dXJuIG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKG9yaWdpbmFsKTsKLQl9Ci0KLQlwcml2YXRlIFN0cmluZ0J1ZmZlciByZWFkSW5wdXRTdHJlYW0oUmVhZGVyIHJlYWRlcikgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQotCQlTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlpbnQgbnVtUmVhZCA9IDA7Ci0JCWNoYXIgdEJ1ZmZbXSA9IG5ldyBjaGFyW1JFQURfQlVGRkVSX1NJWkVdOwotCQl3aGlsZSAoKG51bVJlYWQgPSByZWFkZXIucmVhZCh0QnVmZiwgMCwgdEJ1ZmYubGVuZ3RoKSkgIT0gLTEpIHsKLQkJCWJ1ZmZlci5hcHBlbmQodEJ1ZmYsIDAsIG51bVJlYWQpOwotCQl9Ci0JCXJldHVybiBidWZmZXI7Ci0JfQotCi0JLyoqCi0JICogVGhpcyBtZXRob2QganVzdCByZWFkcyB0byBzdHJlYW0sIHRvIGJlIHN1cmUgaXQgY2FuIGJlIHJlYWQgcGVyCi0JICogZW5jb2RpbmcsIHdpdGhvdXQgZXhjZXB0aW9uLgotCSAqLwotCXByaXZhdGUgdm9pZCBlbnN1cmVDYW5SZWFkKFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIGVuY29kaW5nLCBJbnB1dFN0cmVhbSBpblN0cmVhbSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJQ2hhcnNldCBjaGFyc2V0ID0gQ2hhcnNldC5mb3JOYW1lKGVuY29kaW5nKTsKLQkJQ2hhcnNldERlY29kZXIgY2hhcnNldERlY29kZXIgPSBjaGFyc2V0Lm5ld0RlY29kZXIoKTsKLQkJY2hhcnNldERlY29kZXIub25NYWxmb3JtZWRJbnB1dChDb2RpbmdFcnJvckFjdGlvbi5SRVBPUlQpOwotCQljaGFyc2V0RGVjb2Rlci5vblVubWFwcGFibGVDaGFyYWN0ZXIoQ29kaW5nRXJyb3JBY3Rpb24uUkVQT1JUKTsKLQotCQlJbnB1dFN0cmVhbVJlYWRlciByZWFkZXIgPSBuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaW5TdHJlYW0sIGNoYXJzZXREZWNvZGVyKTsKLQkJU3RyaW5nQnVmZmVyIHN0cmluZ0J1ZmZlciA9IHJlYWRJbnB1dFN0cmVhbShyZWFkZXIpOwotCQlpZiAoREVCVUcpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKGZpbGVuYW1lKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihzdHJpbmdCdWZmZXIudG9TdHJpbmcoKSk7Ci0JCX0KLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcveG1sL1hNTEhlYWRUb2tlbml6ZXJUZXN0ZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcveG1sL1hNTEhlYWRUb2tlbml6ZXJUZXN0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDAzYzM3NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3htbC9YTUxIZWFkVG9rZW5pemVyVGVzdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzODAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcueG1sOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50dHlwZS5FbmNvZGluZ1BhcnNlckNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudHR5cGUuSGVhZFBhcnNlclRva2VuOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50dHlwZS5YTUxIZWFkVG9rZW5pemVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50dHlwZS5YTUxIZWFkVG9rZW5pemVyQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcuVGVzdHNQbHVnaW47Ci0KLQotcHVibGljIGNsYXNzIFhNTEhlYWRUb2tlbml6ZXJUZXN0ZXIgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwcml2YXRlIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBmaWxlRGlyID0gInhtbC8iOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVIb21lID0gInRlc3RmaWxlcy8iOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVMb2NhdGlvbiA9IGZpbGVIb21lICsgZmlsZURpcjsKLQlwcml2YXRlIFN0cmluZyBmRW5jb2RpbmcgPSBudWxsOwotCXByaXZhdGUgSGVhZFBhcnNlclRva2VuIGZGaW5hbFRva2VuOwotCi0JcHJpdmF0ZSB2b2lkIGRvVGVzdEZpbGUoU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgZXhwZWN0ZWROYW1lKSB7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsIGV4cGVjdGVkTmFtZSwgbnVsbCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGRvVGVzdEZpbGUoU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgZXhwZWN0ZWROYW1lLCBTdHJpbmcgZXhwZWN0ZWRGaW5hbFRva2VuVHlwZSkgewotCi0JCVhNTEhlYWRUb2tlbml6ZXIgdG9rZW5pemVyID0gbnVsbDsKLQkJUmVhZGVyIGZpbGVSZWFkZXIgPSBudWxsOwotCQl0cnkgewotCQkJaWYgKERFQlVHKSB7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCIgICAgICAgIiArIGZpbGVuYW1lKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJCX0KLQkJCWZpbGVSZWFkZXIgPSBUZXN0c1BsdWdpbi5nZXRCeXRlUmVhZGVyKGZpbGVuYW1lKTsKLQkJCXRva2VuaXplciA9IG5ldyBYTUxIZWFkVG9rZW5pemVyKGZpbGVSZWFkZXIpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkVycm9yIG9wZW5pbmcgZmlsZSBcIiIgKyBmaWxlbmFtZSArICJcIiIpOwotCQl9Ci0KLQkJU3RyaW5nIHJlc3VsdFZhbHVlID0gbnVsbDsKLQkJdHJ5IHsKLQkJCXBhcnNlKHRva2VuaXplcik7Ci0JCQlyZXN1bHRWYWx1ZSA9IGZFbmNvZGluZzsKLQkJCWlmIChERUJVRykgewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiWE1MIEhlYWQgVG9rZW5pemVyIEZvdW5kIEVuY29kaW5nOiAiICsgcmVzdWx0VmFsdWUpOwotCQkJfQotCQkJZmlsZVJlYWRlci5jbG9zZSgpOwotCQl9Ci0JCWNhdGNoIChqYXZhLmlvLklPRXhjZXB0aW9uIGUpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQW4gSS9PIGVycm9yIG9jY3VyZWQgd2hpbGUgc2Nhbm5pbmcgOiIpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKGUpOwotCQl9Ci0KLQkJaWYgKGV4cGVjdGVkRmluYWxUb2tlblR5cGUgIT0gbnVsbCkgewotCQkJYXNzZXJ0VHJ1ZSgiZGlkIG5vdCBlbmQgYXMgZXhwZWN0ZWQuIGZvdW5kOiAgIiArIGZGaW5hbFRva2VuLmdldFR5cGUoKSwgZXhwZWN0ZWRGaW5hbFRva2VuVHlwZS5lcXVhbHMoZkZpbmFsVG9rZW4uZ2V0VHlwZSgpKSk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlpZiAoZXhwZWN0ZWROYW1lID09IG51bGwpIHsKLQkJCQkvLyBUT0RPOiB0aGlzIHRlc3QgYnJhbmNoIG5lZWRzIHRvIGJlIGltcHJvdmVkIC4uLiBkb2Vzbid0Ci0JCQkJLy8gZmFpbAotCQkJCS8vIGFzIGl0IHNob3VsZAotCQkJCS8vIChzdWNoIGFzIHdoZW4gdG9rZW5pemVyIGNoYW5nZWQgdG8gcmV0dXJuIGVhcmx5IHdoZW4KLQkJCQkvLyBVbmljb2RlCi0JCQkJLy8gc3RyZWFtIGZvdW5kKS4KLQkJCQlhc3NlcnRUcnVlKCJleHBlY3RlZCBubyBlbmNvZGluZywgYnV0IGZvdW5kOiAiICsgcmVzdWx0VmFsdWUsIHJlc3VsdFZhbHVlID09IG51bGwpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJYXNzZXJ0VHJ1ZSgiZXhwZWN0ZWQgIiArIGV4cGVjdGVkTmFtZSArICIgYnV0IGZvdW5kICIgKyByZXN1bHRWYWx1ZSwgZXhwZWN0ZWROYW1lLmVxdWFscyhyZXN1bHRWYWx1ZSkpOwotCQkJfQotCQl9Ci0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgcGFyc2UoWE1MSGVhZFRva2VuaXplciB0b2tlbml6ZXIpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUhlYWRQYXJzZXJUb2tlbiB0b2tlbiA9IG51bGw7Ci0JCVN0cmluZyB0b2tlblR5cGUgPSBudWxsOwotCQlkbyB7Ci0JCQl0b2tlbiA9IHRva2VuaXplci5nZXROZXh0VG9rZW4oKTsKLQkJCXRva2VuVHlwZSA9IHRva2VuLmdldFR5cGUoKTsKLQkJCS8vIG5vcm1hbGx5ICJwYXJzaW5nIiB0aGUgdG9rZW5zIHNob3VsZCBiZSBkb25lIGJ5IHBhcnNlcgotCQkJLy8gQHNlZSwgWE1MUmVzb3VyY2VFbmNvZG9pbmdEZXRlY3RvcgotCQkJLy8gYnV0IHdlJ2xsCi0JCQkvLyBkbyBpdCBoZXJlIGZvciBhIGxpdHRsZQotCQkJLy8gbW9yZSBpbmRlcGVuZGVudCB0ZXN0LgotCQkJaWYgKHRva2VuVHlwZSA9PSBFbmNvZGluZ1BhcnNlckNvbnN0YW50cy5VVEYxNkJFKSB7Ci0JCQkJZkVuY29kaW5nID0gIlVURjE2QkVJblN0cmVhbSI7Ci0JCQl9Ci0JCQlpZiAodG9rZW5UeXBlID09IEVuY29kaW5nUGFyc2VyQ29uc3RhbnRzLlVURjE2TEUpIHsKLQkJCQlmRW5jb2RpbmcgPSAiVVRGMTZMRUluU3RyZWFtIjsKLQkJCX0KLQkJCWlmICh0b2tlblR5cGUgPT0gRW5jb2RpbmdQYXJzZXJDb25zdGFudHMuVVRGODNCeXRlQk9NKSB7Ci0JCQkJZkVuY29kaW5nID0gIlVURjgzQnl0ZUJPTUluU3RyZWFtIjsKLQkJCX0KLQkJCWlmICh0b2tlblR5cGUgPT0gWE1MSGVhZFRva2VuaXplckNvbnN0YW50cy5YTUxEZWxFbmNvZGluZykgewotCQkJCWlmICh0b2tlbml6ZXIuaGFzTW9yZVRva2VucygpKSB7Ci0JCQkJCXRva2VuID0gdG9rZW5pemVyLmdldE5leHRUb2tlbigpOwotCQkJCQl0b2tlblR5cGUgPSB0b2tlbi5nZXRUeXBlKCk7Ci0JCQkJCWlmIChpc0xlZ2FsU3RyaW5nKHRva2VuVHlwZSkpIHsKLQkJCQkJCWZFbmNvZGluZyA9IHRva2VuLmdldFRleHQoKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCQl3aGlsZSAodG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSk7Ci0JCS8vIGZvciB0ZXN0aW5nCi0JCWZGaW5hbFRva2VuID0gdG9rZW47Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIGlzTGVnYWxTdHJpbmcoU3RyaW5nIHRva2VuVHlwZSkgewotCQlib29sZWFuIHJlc3VsdCA9IGZhbHNlOwotCQlpZiAodG9rZW5UeXBlICE9IG51bGwpIHsKLQkJCXJlc3VsdCA9IHRva2VuVHlwZS5lcXVhbHMoRW5jb2RpbmdQYXJzZXJDb25zdGFudHMuU3RyaW5nVmFsdWUpIHx8IHRva2VuVHlwZS5lcXVhbHMoRW5jb2RpbmdQYXJzZXJDb25zdGFudHMuVW5EZWxpbWl0ZWRTdHJpbmdWYWx1ZSkgfHwgdG9rZW5UeXBlLmVxdWFscyhFbmNvZGluZ1BhcnNlckNvbnN0YW50cy5JbnZhbGlkVGVybWluYXRlZFN0cmluZ1ZhbHVlKSB8fCB0b2tlblR5cGUuZXF1YWxzKEVuY29kaW5nUGFyc2VyQ29uc3RhbnRzLkludmFsaWRUZXJtaW50YXRlZFVuRGVsaW1pdGVkU3RyaW5nVmFsdWUpOwotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JLyoqCi0JICogTm9ybWFsIFhNTERlY2xhcmF0aW9uIHdpdGggZGVmYXVsdCBlbmNvZGluZyBzcGVjaWZpZWQgKFVURi04KQotCSAqIAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RCZXN0Q2FzZSgpIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInRlc3ROb3JtYWxDYXNlLnhtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJVVEYtOCIpOwotCi0JfQotCi0JLyoqCi0JICogVGhpcyBpcyBhIFVURi0xNiBmaWxlIChVbmljb2RlIGJ5dGVzIGluIEJPTSkuIFNvLCB0aGUgdG9rZW5pemVyIGJ5Ci0JICogaXRzZWxmIGNhbid0IHJlYWQgY29ycmVjdGx5LiBSZXR1cm5zIG51bGwgaW4gInB1cmUiIHRva2VuaXplciB0ZXN0LCBidXQKLQkgKiBlbmNvZGluZyBkZXRlY3RvciBjYXNlIHNob3VsZCBzdGlsbCBoYW5kbGUgc2luY2UgbG9va3MgZm9yIGJ5dGVzIGZpcnN0LgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RVVEYxNigpIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInRlc3RVVEYxNi54bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiVVRGMTZCRUluU3RyZWFtIik7Ci0JfQotCi0JLyoqCi0JICogSnVzdCB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgY2hva2Ugb24gZW1wdHkgZmlsZS4KLQkgKiAKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0RW1wdHlGaWxlKCkgewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiRW1wdHlGaWxlLnhtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsIG51bGwpOwotCX0KLQotCS8qKgotCSAqIFRlc3RpbmcgYXMgYSByZXN1bHQgb2YgQ01WQyBkZWZlY3QgMjE3NzIwCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEVVQ0pQKCkgewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiZXVjanAueG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIkVVQy1KUCIpOwotCX0KLQotCS8qKgotCSAqIEV4dGVuZGVkIFhNTCBEZWNsYXJhdGlvbiB0aGF0IGNvbnRhaW5zICdzdGFuZGFsb25lJyBhdHRyaWJ1dGUKLQkgKiAKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0RXh0cmFBdHRyQ2FzZSgpIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInRlc3RFeHRyYVZhbGlkU3R1ZmYueG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIlVURi04Iik7Ci0KLQl9Ci0KLQkvKioKLQkgKiBBIGNhc2Ugd2l0aCBhIHZhbGlkIGVuY29kaW5nLCBidXQgZXh0cmEgYXR0cmlidXRlcyB3aGljaCBhcmUgbm90Ci0JICogdmFsaWQvbWVhbmluZ2Z1bC4KLQkgKiAKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0RXh0cmFKdW5rQ2FzZSgpIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInRlc3RFeHRyYUp1bmsueG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIklTTy04ODU5LTEiKTsKLQl9Ci0KLQkvKioKLQkgKiBNaXNzaW5nIDIgcXVvdGVzLCBvbmUgYW5kIGVuZCBvZiB2ZXJzaW9uIHZhbHVlIGFuZCBvbmUgYXQgYmVnaW5uaW5nIG9mCi0JICogZW5jb2RpbmcgdmFsdWUuIEluIHRoaXMgY2FzZSwgdG9rZW5pemVyIGhhbmRsZXMgYXMgdW5kZWxpbWl0ZSBzdHJpbmcsCi0JICogYnV0IGlmIHdlIGV2ZXIgbW9kaWZpeSB0byBhbHNvIGxvb2sgZm9yICd2ZXJzaW9uJywgdGhlbiB3b3VsZCBub3Qgd29yawotCSAqIHRoZSBzYW1lLgotCSAqIAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RJbGxGb3JtZWQoKSB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ0ZXN0SWxsRm9ybWVkLnhtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsIG51bGwpOwotCX0KLQotCS8qKgotCSAqIE1pc3NpbmcgWE1MRGVjbCBlbmQgdGFnIC4uLiB3ZSBzaG91bGQgYmUgYWJsZSB0byBzYWZlbHkgZ3Vlc3MuCi0JICogCi0JICovCi0JcHVibGljIHZvaWQgdGVzdElsbEZvcm1lZDIoKSB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ0ZXN0SWxsRm9ybWVkMi54bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiVVRGLTgiKTsKLQl9Ci0KLQkvKioKLQkgKiBNaXNzaW5nIGVuZCBxdW90ZSBvbiBVVEYtOCBhdHRyaWJ1dGUsIHNvIHBpY2tzIHVwIGZvbGxvd2luZyBhdHRyaWJ0ZQotCSAqIHRvby4KLQkgKiAKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0SWxsRm9ybWVkMygpIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInRlc3RJbGxGb3JtZWQzLnhtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJVVEYtOCBzdGFuZGFsb25lPSIpOwotCX0KLQotCS8qKgotCSAqIE1pc3NpbmcgZW5kIHF1b3RlIG9uIFVURi04IGF0dHJpYnV0ZSwgYnV0IHRoZW4gWE1MRGVjbEVuZHMsIHNvIHNob3VsZAotCSAqIGJlIGFibGUgdG8gaGFuZGxlCi0JICogCi0JICovCi0JcHVibGljIHZvaWQgdGVzdElsbEZvcm1lZDQoKSB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ0ZXN0SWxsRm9ybWVkNC54bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiVVRGLTgiKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0IG9mIG1pc3NpbmcgZW5kIHF1b3RlIG9uIGVuY29kaW5nIHZhbHVlLgotCSAqIAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RJbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0KCkgewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdC54bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiSVNPLTg4NTktMSIpOwotCX0KLQotCS8qKgotCSAqIEVtcHR5IHN0cmluZyBhcyBlbmNvZGluZyB2YWx1ZTsgKEFuZCwgbWFsZm9ybWVkIGlucHV0LCBmb3IgVVRGLTggLi4uCi0JICogc2hvdWxkIG5vdCBlZmZlY3QgcmVzdWx0cyBvZiB0aGlzIGxldmVsIG9mIHRlc3QpLgotCSAqIAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RNYWxmb3JtZWROb0VuY29kaW5nKCkgewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiTWFsZm9ybWVkTm9FbmNvZGluZy54bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiIik7Ci0JfQotCi0JLyoqCi0JICogRW1wdHkgc3RyaW5nIGFzIGVuY29kaW5nIHZhbHVlOyAoQW5kLCBtYWxmb3JtZWQgaW5wdXQsIGZvciBVVEYtOCAuLi4KLQkgKiBzaG91bGQgbm90IGVmZmVjdCByZXN1bHRzIG9mIHRoaXMgbGV2ZWwgb2YgdGVzdCkuCi0JICogCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE1hbGZvcm1lZE5vRW5jb2RpbmdYU0woKSB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJNYWxmb3JtZWROb0VuY29kaW5nLnhzbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICIiKTsKLQl9Ci0KLQkvKioKLQkgKiBYTUxEZWNsYXJhdGlvbiBub3QgYWxsIG9uIHNhbWUgbGluZQotCSAqIAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RNdWx0aUxpbmVDYXNlKCkgewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidGVzdE11bHRpTGluZS54bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiSVNPLTg4NTktMSIpOwotCi0JfQotCi0JLyoqCi0JICogTm8gZW5jb2RpbmcgaW4gWE1MRGVjbGFyYXRpb24KLQkgKiAKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9FbmNvZGluZygpIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIk5vRW5jb2RpbmcueG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgbnVsbCk7Ci0JfQotCi0JLyoqCi0JICogP0lzIHRoaXMgYSBkdXA/Ci0JICogCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE5vRW5jb2RpbmdDYXNlKCkgewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidGVzdE5vRW5jb2RpbmdWYWx1ZS54bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiBOb3JtYWwgWE1MRGVjbGFyYXRpb24gd2l0aCBJU08tMSBzcGVjaWZpZWQKLQkgKiAKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9ybWFsTm9uRGVmYXVsdCgpIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIk5vcm1hbE5vbkRlZmF1bHQueG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIklTTy04ODU5LTEiKTsKLQl9Ci0KLQkvKioKLQkgKiBObyBYTUxEZWNsYXJhdGlvbiBhdCBhbGwuIChJbnZhbGlkLCBidXQgc2hvdWxkIHN0aWxsIGJlIGFibGUgdG8gcGFyc2UpLgotCSAqIAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3ROb1hNTERlY2woKSB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ0ZXN0Tm9YTUxEZWNsLnhtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsIG51bGwpOwotCX0KLQotCS8qKgotCSAqIEhhcmQgdG8gaGFuZGxlIHNhZmVseSAobWF5IGFwcGVhciBpbiBjb21tZW50LCBmb3IgZXhhbXBsZSkuCi0JICogCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE5vWE1MRGVjbEF0Rmlyc3QoKSB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ0ZXN0Tm9YTUxEZWNsQXRGaXJzdC54bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiBUaGlzIHRlc3QgaXMganVzdCB0byBtYWtlIHN1cmUgdGhlIHNjYW5uaW5nIGVuZHMgYmVmb3JlIGVuZCBvZiBmaWxlIGlzCi0JICogcmVhY2hlZC4KLQkgKiAKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9YTUxEZWNsSW5MYXJnZUZpbGUoKSB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ0ZXN0Tm9YTUxEZWNsSW5MYXJnZUZpbGUueG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgbnVsbCwgRW5jb2RpbmdQYXJzZXJDb25zdGFudHMuTUFYX0NIQVJTX1JFQUNIRUQpOwotCX0KLQotCS8qKgotCSAqIFRlc3RpbmcgYXMgYSByZXN1bHQgb2YgQ01WQyBkZWZlY3QgMjE3NzIwCi0JICovCi0JcHVibGljIHZvaWQgdGVzdHNoaWZ0amlzKCkgewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAic2hpZnRqaXMueG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIlNoaWZ0X0pJUyIpOwotCX0KLQotCS8qKgotCSAqIFRlc3RpbmcgYXMgYSByZXN1bHQgb2YgQ01WQyBkZWZlY3QgMjE3NzIwCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFVURjE2TEVXaXRoSmFwYW5lc2VDaGFycygpIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInV0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXIyLnhtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJVVEYxNkxFSW5TdHJlYW0iKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0aW5nIGFzIGEgcmVzdWx0IG9mIENNVkMgZGVmZWN0IDIxNzcyMAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RVVEYxNkJFV2l0aEphcGFuZXNlQ2hhcnMoKSB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ1dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyQkUueG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIlVURjE2QkVJblN0cmVhbSIpOwotCX0KLQotCS8qKgotCSAqIEEgY29tbW9uIGNhc2UuCi0JICogCi0JICovCi0JIHB1YmxpYyB2b2lkIHRlc3RVVEY4V2l0aDNCeXRlQk9NKCkgewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiVVRGOFdpdGgzQnl0ZUJPTS54bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiVVRGODNCeXRlQk9NSW5TdHJlYW0iKTsKLQl9Ci0JcHVibGljIHZvaWQgVVRGMTZMRUF0U3RhcnRPZkxhcmdlRmlsZSgpIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIlVURjE2TEVBdFN0YXJ0T2ZMYXJnZUZpbGUueG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIlVURjE2TEVJblN0cmVhbSIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0VVRGMTZMRSgpIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInV0ZjE2bGUueG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIlVURi0xNkxFIik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RVVEYxNkJFKCkgewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidXRmMTZiZS54bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiVVRGLTE2QkUiKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFVURjE2QkVNYWxmb3JtZWQoKSB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ1dGYxNmJlTWFsZm9ybWVkLnhtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJVVEYtMTZCRSIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0VVRGMTZMRU1hbGZvcm1lZCgpIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInV0ZjE2bGVNYWxmb3JtZWQueG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIlVURi0xNkxFIik7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy94bWwvWE1MTWFsZm9ybWVkSW5wdXRUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy94bWwvWE1MTWFsZm9ybWVkSW5wdXRUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YmUwOTlhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcveG1sL1hNTE1hbGZvcm1lZElucHV0VGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI3NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy54bWw7Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuQ2hhcnNldDsKLWltcG9ydCBqYXZhLm5pby5jaGFyc2V0LkNoYXJzZXREZWNvZGVyOwotaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuQ29kaW5nRXJyb3JBY3Rpb247Ci1pbXBvcnQgamF2YS5uaW8uY2hhcnNldC5NYWxmb3JtZWRJbnB1dEV4Y2VwdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5FbmNvZGluZ01lbWVudG87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLklSZXNvdXJjZUNoYXJzZXREZXRlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZXhjZXB0aW9ucy5NYWxmb3JtZWRJbnB1dEV4Y2VwdGlvbldpdGhEZXRhaWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnR0eXBlLlhNTFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLlRlc3RzUGx1Z2luOwotCi0vKioKLSAqIEZJWE1FOiB0aGlzIG1pZ2h0IGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBjcmVhdGUgYSAiZmlsZSBwZWVrZXIiPyBCdXQsCi0gKiBpdHMgbm90IG90aGVyd2lzZWQgdXNlZCAtLSBkZWxldGUgaWYgbm90IGZpeGVkL2ltcHJvdmVkIHNvb24KLSAqIFhNTE1hbGZvcm1lZElucHV0VGVzdHMKLSAqLwotCi1wdWJsaWMgY2xhc3MgWE1MTWFsZm9ybWVkSW5wdXRUZXN0cyBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcml2YXRlIGludCBSRUFEX0JVRkZFUl9TSVpFID0gODAwMDsKLQlwcml2YXRlIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKLQotCi0JcHVibGljIFhNTE1hbGZvcm1lZElucHV0VGVzdHMoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JLyoqCi0JICogVGVzdHMgZm9yIGEgZmlsZSwgZmlsZW5hbWUgdGhhdCBzaG91bGQgdGhyb3cgYQotCSAqIE1hbGZvcm1lZElucHV0RXhjZXB0aW9uV2l0aERldGFpbCBhdCBjaGFyYWN0ZXIsIGV4cGVjdGVkUG9zaXRpb24uIFRoaXMKLQkgKiBoYXBwZW5zIHdoZW4gbm8gZW5jb2RpbmcgaXMgc3BlY2lmaWVkLCBzbyB0aGUgZGVmYXVsdCBpcyB1c2VkLCBidXQKLQkgKiB0aGVyZSBhcmUgY2hhcmFjdGVycyB0aGF0IHRoZSBkZWZhdWx0IGVuY29kaW5nIGRvZXMgbm90IHJlY29nbml6ZQotCSAqLwotCXZvaWQgZG9UZXN0TWFsZm9ybWVkSW5wdXQoU3RyaW5nIGZpbGVuYW1lLCBJUmVzb3VyY2VDaGFyc2V0RGV0ZWN0b3IgZGV0ZWN0b3IsIGludCBleHBlY3RlZFBvc2l0aW9uKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlFeGNlcHRpb24gZm91bmRFeGNlcHRpb24gPSBudWxsOwotCQlpbnQgYmFkQ2hhclBvc2l0aW9uID0gLTE7Ci0JCUZpbGUgZmlsZSA9IFRlc3RzUGx1Z2luLmdldFRlc3RGaWxlKGZpbGVuYW1lKTsKLQkJaWYgKCFmaWxlLmV4aXN0cygpKQotCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbihmaWxlbmFtZSArICIgd2FzIG5vdCBmb3VuZCIpOwotCQlJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oZmlsZSk7Ci0JCUlucHV0U3RyZWFtIGlzdHJlYW0gPSBnZXRNYXJrU3VwcG9ydGVkU3RyZWFtKGlucHV0U3RyZWFtKTsKLQkJZGV0ZWN0b3Iuc2V0KGlzdHJlYW0pOwotCQkvLyBJRW5jb2RlZERvY3VtZW50IGRvYyA9Ci0JCS8vIGRldGVjdG9yLmNyZWF0ZU5ld1N0cnVjdHVyZWREb2N1bWVudChmaWxlbmFtZSwgaXN0cmVhbSk7Ci0JCUVuY29kaW5nTWVtZW50byBlbmNvZGluZ01lbWVudG8gPSAoKFhNTFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcikgZGV0ZWN0b3IpLmdldEVuY29kaW5nTWVtZW50bygpOwotCQlTdHJpbmcgZm91bmRJQU5BRW5jb2RpbmcgPSBlbmNvZGluZ01lbWVudG8uZ2V0SmF2YUNoYXJzZXROYW1lKCk7Ci0KLQkJQ2hhcnNldCBjaGFyc2V0ID0gQ2hhcnNldC5mb3JOYW1lKGZvdW5kSUFOQUVuY29kaW5nKTsKLQkJQ2hhcnNldERlY29kZXIgY2hhcnNldERlY29kZXIgPSBjaGFyc2V0Lm5ld0RlY29kZXIoKTsKLQkJY2hhcnNldERlY29kZXIub25NYWxmb3JtZWRJbnB1dChDb2RpbmdFcnJvckFjdGlvbi5SRVBPUlQpOwotCQljaGFyc2V0RGVjb2Rlci5vblVubWFwcGFibGVDaGFyYWN0ZXIoQ29kaW5nRXJyb3JBY3Rpb24uUkVQT1JUKTsKLQotCQlpc3RyZWFtLmNsb3NlKCk7Ci0JCWlucHV0U3RyZWFtLmNsb3NlKCk7Ci0KLQkJLy8gbm93LCB0cnkgcmVhZGluZyBhcyBwZXIgZW5jb2RpbmcKLQkJaW5wdXRTdHJlYW0gPSBuZXcgRmlsZUlucHV0U3RyZWFtKGZpbGUpOwotCQkvLyBza2lwIEJPTSBmb3IgdGhpcyBjYXNlCi0JCS8vIFN5c3RlbS5vdXQucHJpbnRsbihpbnB1dFN0cmVhbS5yZWFkKCkpOwotCQkvLyBTeXN0ZW0ub3V0LnByaW50bG4oaW5wdXRTdHJlYW0ucmVhZCgpKTsKLQkJLy8gU3lzdGVtLm91dC5wcmludGxuKGlucHV0U3RyZWFtLnJlYWQoKSk7Ci0JCUlucHV0U3RyZWFtUmVhZGVyIHJlYWRlciA9IG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpbnB1dFN0cmVhbSwgY2hhcnNldERlY29kZXIpOwotCi0JCXRyeSB7Ci0JCQkvLyBqdXN0IHRyeSByZWFkaW5nIC4uLiBzaG91bGQgdGhyb3cgZXhjZXB0aW9uCi0JCQkvLyBleGNlcHRpb24pCi0JCQlyZWFkSW5wdXRTdHJlYW0ocmVhZGVyKTsKLQkJfQotCQljYXRjaCAoTWFsZm9ybWVkSW5wdXRFeGNlcHRpb24gZSkgewotCQkJLy8gYXMgZXhwZWN0ZWQsIG5vdyBkbyBkZXRhaWxlZCBjaGVja2luZy4KLQkJCWlucHV0U3RyZWFtLmNsb3NlKCk7Ci0JCQlpc3RyZWFtLmNsb3NlKCk7Ci0JCQlpbnB1dFN0cmVhbSA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oZmlsZSk7Ci0JCQljaGFyc2V0RGVjb2RlciA9IGNoYXJzZXQubmV3RGVjb2RlcigpOwotCQkJY2hhcnNldERlY29kZXIub25NYWxmb3JtZWRJbnB1dChDb2RpbmdFcnJvckFjdGlvbi5SRVBPUlQpOwotCQkJY2hhcnNldERlY29kZXIub25Vbm1hcHBhYmxlQ2hhcmFjdGVyKENvZGluZ0Vycm9yQWN0aW9uLlJFUE9SVCk7Ci0JCQlyZWFkZXIgPSBuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaW5wdXRTdHJlYW0sIGNoYXJzZXREZWNvZGVyKTsKLQkJCWlzdHJlYW0gPSBnZXRNYXJrU3VwcG9ydGVkU3RyZWFtKGlucHV0U3RyZWFtKTsKLQkJCXRyeSB7Ci0JCQkJaGFuZGxlTWFsRm9ybWVkSW5wdXRfRGV0YWlsQ2hlY2tpbmcocmVhZGVyLCBmb3VuZElBTkFFbmNvZGluZyk7Ci0JCQl9Ci0JCQljYXRjaCAoTWFsZm9ybWVkSW5wdXRFeGNlcHRpb25XaXRoRGV0YWlsIHNlKSB7Ci0JCQkJZm91bmRFeGNlcHRpb24gPSBzZTsKLQkJCQliYWRDaGFyUG9zaXRpb24gPSBzZS5nZXRDaGFyUG9zaXRpb24oKTsKLQkJCX0KLQotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKGlzdHJlYW0gIT0gbnVsbCkgewotCQkJCWlzdHJlYW0uY2xvc2UoKTsKLQkJCX0KLQkJCWlmIChpbnB1dFN0cmVhbSAhPSBudWxsKSB7Ci0JCQkJaW5wdXRTdHJlYW0uY2xvc2UoKTsKLQkJCX0KLQotCQl9Ci0JCS8vIGhhbmRsZSBhZGp1c3RtZW50cyBoZXJlIGZvciBWTSBkaWZmZXJuY2VzOgotCQkvLyBmb3Igbm93IGl0cyBlaXRoZXIgNDkgb3IgNDkgKyAyIEJPTXMgKDUxKQotCQkvLyBjYW4gYmUgc21hcnRpbmcgbGF0ZXIuCi0JCWFzc2VydFRydWUoIk1hbGZvcm1lZElucHV0RXhjZXB0aW9uIHdhcyBub3QgdGhyb3duIGFzIGV4cGVjdGVkIGZvciBmaWxlbmFtZTogIiArIGZpbGVuYW1lICsgIiBFeGNlcHRpb24gdGhyb3duOiIgKyBmb3VuZEV4Y2VwdGlvbiwgZm91bmRFeGNlcHRpb24gaW5zdGFuY2VvZiBNYWxmb3JtZWRJbnB1dEV4Y2VwdGlvbldpdGhEZXRhaWwpOwotCQlhc3NlcnRUcnVlKCJXcm9uZyBjaGFyYWN0ZXIgcG9zaXRpb24gZGV0ZWN0ZWQgaW4gTWFsZm9ybWVkSW5wdXRFeGNlcHRpb24uICBFeHBlY3RlZDogIiArIGV4cGVjdGVkUG9zaXRpb24gKyAiIEZvdW5kOiAiICsgYmFkQ2hhclBvc2l0aW9uLCAoYmFkQ2hhclBvc2l0aW9uID09IGV4cGVjdGVkUG9zaXRpb24pIHx8IGJhZENoYXJQb3NpdGlvbiA9PSBleHBlY3RlZFBvc2l0aW9uIC0gMik7Ci0JfQotCi0JLy8gcHVibGljIHZvaWQgdGVzdFhTTE1hbGZvcm1lZElucHV0KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkvLyBTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiTWFsZm9ybWVkTm9FbmNvZGluZy54c2wiOwotCS8vIGRvVGVzdE1hbGZvcm1lZElucHV0KGZpbGVuYW1lLCBuZXcgWE1MUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCksIDIxMSk7Ci0JLy8gfQotCi0JLyoqCi0JICogRW5zdXJlcyB0aGF0IGFuIElucHV0U3RyZWFtIGhhcyBtYXJrL3Jlc2V0IHN1cHBvcnQuCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgSW5wdXRTdHJlYW0gZ2V0TWFya1N1cHBvcnRlZFN0cmVhbShJbnB1dFN0cmVhbSBvcmlnaW5hbCkgewotCQlpZiAob3JpZ2luYWwgPT0gbnVsbCkKLQkJCXJldHVybiBudWxsOwotCQlpZiAob3JpZ2luYWwubWFya1N1cHBvcnRlZCgpKQotCQkJcmV0dXJuIG9yaWdpbmFsOwotCQlyZXR1cm4gbmV3IEJ1ZmZlcmVkSW5wdXRTdHJlYW0ob3JpZ2luYWwpOwotCX0KLQotCXByaXZhdGUgU3RyaW5nQnVmZmVyIHJlYWRJbnB1dFN0cmVhbShSZWFkZXIgcmVhZGVyKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCi0JCVN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWludCBudW1SZWFkID0gMDsKLQkJY2hhciB0QnVmZltdID0gbmV3IGNoYXJbUkVBRF9CVUZGRVJfU0laRV07Ci0JCXdoaWxlICgobnVtUmVhZCA9IHJlYWRlci5yZWFkKHRCdWZmLCAwLCB0QnVmZi5sZW5ndGgpKSAhPSAtMSkgewotCQkJaWYgKERFQlVHKSB7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKHRCdWZmWzBdKTsKLQkJCX0KLQkJCWJ1ZmZlci5hcHBlbmQodEJ1ZmYsIDAsIG51bVJlYWQpOwotCQl9Ci0JCXJldHVybiBidWZmZXI7Ci0JfQotCi0JLyoKLQkgKiByZW1vdmVkIGZvciBQUEMgbWFjaGluZSB3aXRoIElCTSBWTQotCSAqIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0xMjY1MDMKLQkgKi8KLQkvLyBwdWJsaWMgdm9pZCB0ZXN0WE1MTWFsZm9ybWVkSW5wdXQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCS8vIFN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJNYWxmb3JtZWROb0VuY29kaW5nLnhtbCI7Ci0JLy8gZG9UZXN0TWFsZm9ybWVkSW5wdXQoZmlsZW5hbWUsIG5ldyBYTUxSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSwgNTEpOwotCS8vIH0KLQkvLyBzaW5jZSBhYm92ZSB0ZXN0IHdhcyBvbmx5IG9uZSBpbSB0aGlzIGNsYXNzLCBwdXQgaW4gdGhpcyBubyBvcCB0byBhdm9pZAotCS8vIGEgZmFpbHVyZSBkdWUgdG8gbm8gdGVzdHMgaW4gY2xhc3MhCi0JcHVibGljIHZvaWQgdGVzdE5vT3AoKSB7Ci0JCWFzc2VydFRydWUodHJ1ZSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGhhbmRsZU1hbEZvcm1lZElucHV0X0RldGFpbENoZWNraW5nKFJlYWRlciByZWFkZXIsIFN0cmluZyBlbmNvZGluZ05hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiwgTWFsZm9ybWVkSW5wdXRFeGNlcHRpb25XaXRoRGV0YWlsIHsKLQkJaW50IGNoYXJQb3N0aW9uID0gLTE7Ci0JCWNoYXJQb3N0aW9uID0gZ2V0Q2hhclBvc3Rpb25PZkZhaWx1cmUocmVhZGVyKTsKLQkJLy8gYWxsIG9mIHRoYXQganVzdCB0byB0aHJvdyBtb3JlIGFjY3VyYXRlIGVycm9yCi0JCS8vIG5vdGU6IHdlIGRvIHRoZSBjb252ZXJzaW9uIHRvIGlhbmFOYW1lLCBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBsb2NhbAotCQkvLyB2YXJpYWJsZSwKLQkJLy8gYmVjYXVzZSB0aGlzIGlzIHVsdGltYXRlbHkgb25seSBmb3IgdGhlIHVzZXIgZXJyb3IgbWVzc2FnZSAodGhhdAotCQkvLyBpcywKLQkJLy8gdGhlIGVycm9yIG9jY3VycmVkCi0JCS8vIGluIGNvbnRleHQgb2YgamF2YUVuY29kaW5nTmFtZSBubyBtYXR0ZXIgd2hhdCBpYW5hRW5jb2RpbmdOYW1lIGlzCi0JCXRocm93IG5ldyBNYWxmb3JtZWRJbnB1dEV4Y2VwdGlvbldpdGhEZXRhaWwoZW5jb2RpbmdOYW1lLCBjaGFyUG9zdGlvbik7Ci0JfQotCi0JcHJpdmF0ZSBpbnQgZ2V0Q2hhclBvc3Rpb25PZkZhaWx1cmUoUmVhZGVyIHJlYWRlcikgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJaW50IGNoYXJQb3NpdGlvbiA9IDE7Ci0JCWludCBjaGFyUmVhZCA9IC0xOwotCQlpbnQgcmVzdWx0ID0gLTE7Ci0JCWJvb2xlYW4gZXJyb3JGb3VuZCA9IGZhbHNlOwotCQlkbyB7Ci0JCQl0cnkgewotCQkJCWlmIChyZWFkZXIucmVhZHkoKSkgewotCQkJCQljaGFyUmVhZCA9IHJlYWRlci5yZWFkKCk7Ci0JCQkJfQotCQkJCWlmIChERUJVRykgewotCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oY2hhclBvc2l0aW9uICsgIjogIiArIGVzY2FwZSgoY2hhcikgY2hhclJlYWQsIHRydWUpKTsKLQkJCQl9Ci0JCQkJY2hhclBvc2l0aW9uKys7Ci0JCQl9Ci0JCQljYXRjaCAoTWFsZm9ybWVkSW5wdXRFeGNlcHRpb24gZSkgewotCQkJCS8vIHRoaXMgaXMgZXhwZWN0ZWQsIHNpbmNlIHdlJ3JlIGV4cGVjdGluZyBmYWlsdXJlLAotCQkJCS8vIHNvIG5vIG5lZWQgdG8gZG8gYW55dGhpbmcuCi0JCQkJZXJyb3JGb3VuZCA9IHRydWU7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJd2hpbGUgKChjaGFyUmVhZCAhPSAtMSAmJiAhZXJyb3JGb3VuZCkgJiYgcmVhZGVyLnJlYWR5KCkpOwotCi0JCWlmIChlcnJvckZvdW5kKQotCQkJcmVzdWx0ID0gY2hhclBvc2l0aW9uOwotCQllbHNlCi0JCQlyZXN1bHQgPSAtMTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQlwcml2YXRlIFN0cmluZyBlc2NhcGUoY2hhciBhQ2hhciwgYm9vbGVhbiBlc2NhcGVTcGFjZSkgewotCi0JCVN0cmluZ0J1ZmZlciBvdXRCdWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCXN3aXRjaCAoYUNoYXIpIHsKLQkJCWNhc2UgJyAnIDoKLQkJCQlpZiAoZXNjYXBlU3BhY2UpCi0JCQkJCW91dEJ1ZmZlci5hcHBlbmQoJ1xcJyk7Ci0KLQkJCQlvdXRCdWZmZXIuYXBwZW5kKCcgJyk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlICdcXCcgOgotCQkJCW91dEJ1ZmZlci5hcHBlbmQoJ1xcJyk7Ci0JCQkJb3V0QnVmZmVyLmFwcGVuZCgnXFwnKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgJ1x0JyA6Ci0JCQkJb3V0QnVmZmVyLmFwcGVuZCgnXFwnKTsKLQkJCQlvdXRCdWZmZXIuYXBwZW5kKCd0Jyk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlICdcbicgOgotCQkJCW91dEJ1ZmZlci5hcHBlbmQoJ1xcJyk7Ci0JCQkJb3V0QnVmZmVyLmFwcGVuZCgnbicpOwotCQkJCWJyZWFrOwotCQkJY2FzZSAnXHInIDoKLQkJCQlvdXRCdWZmZXIuYXBwZW5kKCdcXCcpOwotCQkJCW91dEJ1ZmZlci5hcHBlbmQoJ3InKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgJ1xmJyA6Ci0JCQkJb3V0QnVmZmVyLmFwcGVuZCgnXFwnKTsKLQkJCQlvdXRCdWZmZXIuYXBwZW5kKCdmJyk7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0IDoKLQkJCQlpZiAoKGFDaGFyIDwgMHgwMDIwKSB8fCAoYUNoYXIgPiAweDAwN2UpKSB7Ci0JCQkJCW91dEJ1ZmZlci5hcHBlbmQoJ1xcJyk7Ci0JCQkJCW91dEJ1ZmZlci5hcHBlbmQoJ3UnKTsKLQkJCQkJb3V0QnVmZmVyLmFwcGVuZCh0b0hleCgoYUNoYXIgPj4gMTIpICYgMHhGKSk7Ci0JCQkJCW91dEJ1ZmZlci5hcHBlbmQodG9IZXgoKGFDaGFyID4+IDgpICYgMHhGKSk7Ci0JCQkJCW91dEJ1ZmZlci5hcHBlbmQodG9IZXgoKGFDaGFyID4+IDQpICYgMHhGKSk7Ci0JCQkJCW91dEJ1ZmZlci5hcHBlbmQodG9IZXgoYUNoYXIgJiAweEYpKTsKLQkJCQl9Ci0JCQkJZWxzZSB7Ci0JCQkJCWlmIChzcGVjaWFsU2F2ZUNoYXJzLmluZGV4T2YoYUNoYXIpICE9IC0xKQotCQkJCQkJb3V0QnVmZmVyLmFwcGVuZCgnXFwnKTsKLQkJCQkJb3V0QnVmZmVyLmFwcGVuZChhQ2hhcik7Ci0JCQkJfQotCQl9Ci0KLQkJcmV0dXJuIG91dEJ1ZmZlci50b1N0cmluZygpOwotCX0KLQotCS8qKgotCSAqIENvbnZlcnQgYSBuaWJibGUgdG8gYSBoZXggY2hhcmFjdGVyCi0JICogCi0JICogQHBhcmFtIG5pYmJsZQotCSAqICAgICAgICAgICAgdGhlIG5pYmJsZSB0byBjb252ZXJ0LgotCSAqLwotCXByaXZhdGUgc3RhdGljIGNoYXIgdG9IZXgoaW50IG5pYmJsZSkgewotCQlyZXR1cm4gaGV4RGlnaXRbKG5pYmJsZSAmIDB4RildOwotCX0KLQotCS8qKiBBIHRhYmxlIG9mIGhleCBkaWdpdHMgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBjaGFyW10gaGV4RGlnaXQgPSB7JzAnLCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsICc4JywgJzknLCAnQScsICdCJywgJ0MnLCAnRCcsICdFJywgJ0YnfTsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgc3BlY2lhbFNhdmVDaGFycyA9ICI9OiBcdFxyXG5cZiMhIjsKLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3Njk4MTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotCi08cHJvamVjdAotICAgIG5hbWU9InRlc3RzdWl0ZSIKLSAgICBkZWZhdWx0PSJydW4iCi0gICAgYmFzZWRpcj0iLiI+Ci0gICAgCi0gICAgPCEtLSBUaGUgZm9sbG93aW5nIHByb3BlcnRpZXMgc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgotICAgIDwhLS0gJHtlY2xpcHNlLWhvbWV9ICAgLS0+Ci0gICAgPCEtLSAke2J1aWxkRGlyZWN0b3J5fSAgLS0+Ci0gICAgPCEtLSAke2J1aWxkTGFiZWx9ICAgICAgICAtLT4KLQotICAgIDwhLS0gc2hvdWxkIGJlIGxpdHRsZSBuZWVkIHRvIGNoYW5nZSB3aGF0J3MgYWJvdmUgIC0tPgotCi0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9InBsdWdpbi1uYW1lIgotICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZyIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0iY2xhc3NuYW1lIgotICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5FbmNvZGluZ1Rlc3RTdWl0ZSIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0idGVzdFR5cGUiCi0gICAgICAgIHZhbHVlPSJ1aS10ZXN0IiAvPgotCi0gICAgPCEtLSBzaG91bGQgYmUgbGl0dGxlIG5lZWQgdG8gY2hhbmdlIHdoYXQncyBiZWxvdyAtLT4KLQotICAgIDxlY2hvIG1lc3NhZ2U9ImJhc2VkaXI6ICR7YmFzZWRpcn0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iZWNsaXBzZS1ob21lOiAke2VjbGlwc2UtaG9tZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iYnVpbGREaXJlY3Rvcnk6ICR7YnVpbGREaXJlY3Rvcnl9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9InBsdWdpbi1uYW1lOiAke3BsdWdpbi1uYW1lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJjbGFzc25hbWU6ICR7Y2xhc3NuYW1lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJ0ZXN0VHlwZSAke3Rlc3RUeXBlfSIgLz4KLQotCi0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9ImxpYnJhcnktZmlsZSIKLSAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4xLjAvbGlicmFyeS54bWwiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9IndvcmtzcGFjZSIKLSAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9qdW5pdHdvcmtzcGFjZXMvJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgIAotICAgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4KLSAgICA8IS0tIGFsbCB0ZXN0cyB0aGF0IGFyZSB0byBiZSBydW4uIEluaXRpYWxpemF0aW9uIGZvciBpbmRpdmlkdWFsIHRlc3RzIC0tPgotICAgIDwhLS0gc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIC0tPgotICAgIDx0YXJnZXQgbmFtZT0iaW5pdCI+Ci0gICAgICAgIDx0c3RhbXAgLz4KLSAgICAgICAgPGRlbGV0ZT4KLSAgICAgICAgICAgIDxmaWxlc2V0Ci0gICAgICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iCi0gICAgICAgICAgICAgICAgaW5jbHVkZXM9IiR7cGx1Z2luLW5hbWV9Lip4bWwiIC8+Ci0gICAgICAgIDwvZGVsZXRlPgotICAgICAgICA8IS0tIG1ha2UgZGlyZWN0b3J5LCBpbiBjYXNlIHBhdGggZG9lc24ndCBleGlzdCB5ZXQgLS0+Ci0gICAgICAgIDxta2RpciBkaXI9IiR7d29ya3NwYWNlfSIgLz4KLSAgICAgICAgPCEtLSAgYnV0IGRlbGV0ZSB0byBtYWtlIHN1cmUgZnJlc2ggY29udGVudHMtLT4KLSAgICAgICAgPGRlbGV0ZQotICAgICAgICAgICAgZGlyPSIke3dvcmtzcGFjZX0iCi0gICAgICAgICAgICBxdWlldD0idHJ1ZSIgLz4KLQotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9InN1aXRlIj4KLQotICAgICAgICA8YW50Ci0gICAgICAgICAgICB0YXJnZXQ9IiR7dGVzdFR5cGV9IgotICAgICAgICAgICAgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iZGF0YS1kaXIiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7d29ya3NwYWNlfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9InBsdWdpbi1uYW1lIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImNsYXNzbmFtZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtjbGFzc25hbWV9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0icGx1Z2luLXBhdGgiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICA8L2FudD4KLQotICAgICAgICA8Y29weQotICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIgotICAgICAgICAgICAgZmlsZT0iJHt3b3Jrc3BhY2V9Ly5tZXRhZGF0YS8ubG9nIgotICAgICAgICAgICAgdG9maWxlPSIke2J1aWxkRGlyZWN0b3J5fS8ke2J1aWxkTGFiZWx9L3Rlc3RSZXN1bHRzL2NvbnNvbGVsb2dzLyR7cGx1Z2luLW5hbWV9LmNvbnNvbGVsb2cudHh0IiAvPgotCi0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGNvZGUgdG8gY2xlYW51cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBhZnRlciAtLT4KLSAgICA8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+Ci0gICAgPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgotICAgIDx0YXJnZXQgbmFtZT0iY2xlYW51cCI+Ci0gICAgICAgIDwhLS0gdXN1YWxseSBubyBuZWVkIHRvIGRlbGV0ZSB3b3Jrc3BhY2UgdW50aWwgbmV4dCBydW4sIGFuZCBsZWF2aW5nIGl0IGFsbG93cyBpbnNwZWN0aW9uIC0tPgotICAgICAgICA8IS0tIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIiAvPiAtLT4KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4KLSAgICA8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+Ci0gICAgPHRhcmdldAotICAgICAgICBuYW1lPSJydW4iCi0gICAgICAgIGRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+Ci0gICAgICAgIDxhbnQKLSAgICAgICAgICAgIHRhcmdldD0iY29sbGVjdCIKLSAgICAgICAgICAgIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLSAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImluY2x1ZGVzIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfS4qeG1sIiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0ib3V0cHV0LWZpbGUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIgLz4KLSAgICAgICAgPC9hbnQ+Ci0gICAgPC90YXJnZXQ+Ci0KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy56aXAgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy56aXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzOTQzODQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMuemlwCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvRG9jdW1lbnRTdHJlYW1UZXN0Q2FzZS9rYWVydTUuaHRtIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvRG9jdW1lbnRTdHJlYW1UZXN0Q2FzZS9rYWVydTUuaHRtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTU3MGZlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL0RvY3VtZW50U3RyZWFtVGVzdENhc2Uva2FlcnU1Lmh0bQorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPCUtLSBqc2Y6Y29kZUJlaGluZCBsYW5ndWFnZT0iamF2YSIgbG9jYXRpb249Ii9KYXZhU291cmNlL3BhZ2Vjb2RlL3Rlc3QvS2FlcnU1LmphdmEiIC0tJT48JS0tIC9qc2Y6Y29kZUJlaGluZCAtLSU+Ci08JUB0YWdsaWIgdXJpPSJodHRwOi8vamF2YS5zdW4uY29tL2pzZi9odG1sIiBwcmVmaXg9ImgiJT4KLTwlQHRhZ2xpYiB1cmk9Imh0dHA6Ly93d3cuaWJtLmNvbS9qc2YvaHRtbF9leHRlbmRlZCIgcHJlZml4PSJoeCIlPgotPEhUTUw+Ci08SEVBRD4KLTwlQCB0YWdsaWIgdXJpPSJodHRwOi8vamF2YS5zdW4uY29tL2pzZi9jb3JlIiBwcmVmaXg9ImYiICU+Ci08JUAgcGFnZSAKLWxhbmd1YWdlPSJqYXZhIgotY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1TSElGVF9KSVMiCi1wYWdlRW5jb2Rpbmc9IlNISUZUX0pJUyIKLSU+Ci08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1TSElGVF9KSVMiPgotPE1FVEEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJJQk0gV2ViU3BoZXJlIFN0dWRpbyI+Ci08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KLTxMSU5LIGhyZWY9Ii4uL3RoZW1lL01hc3Rlci5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPgotPExJTksgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iLi4vdGhlbWUvc3R5bGVzaGVldC5jc3MiCi0JdGl0bGU9IlN0eWxlIj4KLTxUSVRMRT5rYWVydS5qc3A8L1RJVExFPgotPC9IRUFEPgotPGY6dmlldz4KLQk8Qk9EWT4KLQk8aHg6c2NyaXB0Q29sbGVjdG9yIGlkPSJzY3JpcHRDb2xsZWN0b3IxIj4KLQkJPGg6Zm9ybSBzdHlsZUNsYXNzPSJmb3JtIiBpZD0iZm9ybTEiPgotCQkJj7OURgotCQkJj7OURgotCQkJj7OURgotCQkJPGg6c2VsZWN0T25lTWVudSBpZD0iQ29tYm8zMCIgc3R5bGVDbGFzcz0iQ29tYm8zMCIgdGFiaW5kZXg9IjI2Ij4KLQkJCQk8ZjpzZWxlY3RJdGVtIGl0ZW1WYWx1ZT0idG9reW8iIGl0ZW1MYWJlbD0idG9reW8iIC8+Ci0JCQkJPGY6c2VsZWN0SXRlbSBpdGVtVmFsdWU9Io/YjJSO5oj4j4oiIGl0ZW1MYWJlbD0ij9iMlI7miPiPiiIgLz4KLQkJCTwvaDpzZWxlY3RPbmVNZW51PgotCQkJPGg6c2VsZWN0T25lTWVudSBpZD0iQ29tYm8zMSIgc3R5bGVDbGFzcz0iQ29tYm8zMSIgdGFiaW5kZXg9IjI3Ij4KLQkJCQk8ZjpzZWxlY3RJdGVtIGl0ZW1WYWx1ZT0idG9reW8iIGl0ZW1MYWJlbD0idG9reW8iIC8+Ci0JCQkJPGY6c2VsZWN0SXRlbSBpdGVtVmFsdWU9Imt5b3RvIiBpdGVtTGFiZWw9Imt5b3RvIiAvPgotCQkJPC9oOnNlbGVjdE9uZU1lbnU+Ci0JCTwvaDpmb3JtPgotCTwvaHg6c2NyaXB0Q29sbGVjdG9yPgotCTwvQk9EWT4KLTwvZjp2aWV3PgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvRG9jdW1lbnRTdHJlYW1UZXN0Q2FzZS9rYWVydTUuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvRG9jdW1lbnRTdHJlYW1UZXN0Q2FzZS9rYWVydTUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwODM3MDRiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL0RvY3VtZW50U3RyZWFtVGVzdENhc2Uva2FlcnU1LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPg0KLTwlLS0ganNmOmNvZGVCZWhpbmQgbGFuZ3VhZ2U9ImphdmEiIGxvY2F0aW9uPSIvSmF2YVNvdXJjZS9wYWdlY29kZS90ZXN0L0thZXJ1NS5qYXZhIiAtLSU+PCUtLSAvanNmOmNvZGVCZWhpbmQgLS0lPg0KLTwlQHRhZ2xpYiB1cmk9Imh0dHA6Ly9qYXZhLnN1bi5jb20vanNmL2h0bWwiIHByZWZpeD0iaCIlPg0KLTwlQHRhZ2xpYiB1cmk9Imh0dHA6Ly93d3cuaWJtLmNvbS9qc2YvaHRtbF9leHRlbmRlZCIgcHJlZml4PSJoeCIlPg0KLTxIVE1MPg0KLTxIRUFEPg0KLTwlQCB0YWdsaWIgdXJpPSJodHRwOi8vamF2YS5zdW4uY29tL2pzZi9jb3JlIiBwcmVmaXg9ImYiICU+DQotPCVAIHBhZ2UgDQotbGFuZ3VhZ2U9ImphdmEiDQotY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1TSElGVF9KSVMiDQotcGFnZUVuY29kaW5nPSJTSElGVF9KSVMiDQotJT4NCi08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1TSElGVF9KSVMiPg0KLTxNRVRBIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iSUJNIFdlYlNwaGVyZSBTdHVkaW8iPg0KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPg0KLTxMSU5LIGhyZWY9Ii4uL3RoZW1lL01hc3Rlci5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPg0KLTxMSU5LIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii4uL3RoZW1lL3N0eWxlc2hlZXQuY3NzIg0KLQl0aXRsZT0iU3R5bGUiPg0KLTxUSVRMRT5rYWVydS5qc3A8L1RJVExFPg0KLTwvSEVBRD4NCi08Zjp2aWV3Pg0KLQk8Qk9EWT4NCi0JPGh4OnNjcmlwdENvbGxlY3RvciBpZD0ic2NyaXB0Q29sbGVjdG9yMSI+DQotCQk8aDpmb3JtIHN0eWxlQ2xhc3M9ImZvcm0iIGlkPSJmb3JtMSI+DQotCQkJj7OURg0KLQkJCY+zlEYNCi0JCQmPs5RGDQotCQkJPGg6c2VsZWN0T25lTWVudSBpZD0iQ29tYm8zMCIgc3R5bGVDbGFzcz0iQ29tYm8zMCIgdGFiaW5kZXg9IjI2Ij4NCi0JCQkJPGY6c2VsZWN0SXRlbSBpdGVtVmFsdWU9InRva3lvIiBpdGVtTGFiZWw9InRva3lvIiAvPg0KLQkJCQk8ZjpzZWxlY3RJdGVtIGl0ZW1WYWx1ZT0ij9iMlI7miPiPiiIgaXRlbUxhYmVsPSKP2IyUjuaI+I+KIiAvPg0KLQkJCTwvaDpzZWxlY3RPbmVNZW51Pg0KLQkJCTxoOnNlbGVjdE9uZU1lbnUgaWQ9IkNvbWJvMzEiIHN0eWxlQ2xhc3M9IkNvbWJvMzEiIHRhYmluZGV4PSIyNyI+DQotCQkJCTxmOnNlbGVjdEl0ZW0gaXRlbVZhbHVlPSJ0b2t5byIgaXRlbUxhYmVsPSJ0b2t5byIgLz4NCi0JCQkJPGY6c2VsZWN0SXRlbSBpdGVtVmFsdWU9Imt5b3RvIiBpdGVtTGFiZWw9Imt5b3RvIiAvPg0KLQkJCTwvaDpzZWxlY3RPbmVNZW51Pg0KLQkJPC9oOmZvcm0+DQotCTwvaHg6c2NyaXB0Q29sbGVjdG9yPg0KLQk8L0JPRFk+DQotPC9mOnZpZXc+DQotPC9IVE1MPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9lbXB0eUZpbGUuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL2VtcHR5RmlsZS5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL2VtcHR5RmlsZS5jc3MKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL2VuY29kaW5nX3Rlc3RfZXVjanAuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL2VuY29kaW5nX3Rlc3RfZXVjanAuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTI1NmU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9lbmNvZGluZ190ZXN0X2V1Y2pwLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotQGNoYXJzZXQgIkVVQy1KUCI7DQotDQotQk9EWSB7DQotCWZvbnQtZmFtaWx5IDogIqPNo9Mgo9CltKW3pcOlryI7DQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9lbmNvZGluZ190ZXN0X2ppcy5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvZW5jb2RpbmdfdGVzdF9qaXMuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODQ3NjhiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9lbmNvZGluZ190ZXN0X2ppcy5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLUBjaGFyc2V0ICJJU08tMjAyMi1KUCI7DQotDQotQk9EWSB7DQotCWZvbnQtZmFtaWx5IDogIhskQiNNI1MbKEIgGyRCI1AlNCU3JUMlLxsoQiI7DQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9lbmNvZGluZ190ZXN0X3NqaXMuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL2VuY29kaW5nX3Rlc3Rfc2ppcy5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1MjljZGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL2VuY29kaW5nX3Rlc3Rfc2ppcy5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLUBjaGFyc2V0ICJTSElGVF9KSVMiOw0KLQ0KLUJPRFkgew0KLQlmb250LWZhbWlseSA6ICKCbIJyIIJvg1ODVoNig04iOw0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3Mvbm9FbmNvZGluZy5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3Mvbm9FbmNvZGluZy5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzZjA2YmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL25vRW5jb2RpbmcuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotQk9EWSB7DQotCWZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgIk1TIFNhbnMgU2VyaWYiOw0KLQl0ZXh0LWRlY29yYXRpb246IG5vbmU7DQotCWJhY2tncm91bmQtY29sb3I6IHdoaXRlOw0KLX0NCi0NCi1URCB7DQotCWZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIjsNCi0JZm9udC1zaXplOiAxMnB0Ow0KLQljb2xvcjogYmxhY2s7DQotCWZvbnQtc3R5bGU6IG5vcm1hbDsNCi0JdGV4dC1hbGlnbjogbGVmdDsNCi19DQotDQotVEggew0KLQlmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiI7DQotCWZvbnQtc2l6ZTogMTJwdDsNCi0JY29sb3I6IGJsYWNrOw0KLQlmb250LXN0eWxlOiBub3JtYWw7DQotCWZvbnQtd2VpZ2h0OiBib2xkZXI7DQotCXRleHQtYWxpZ246IGxlZnQ7DQotfQ0KLQ0KLUgxIHsNCi0JZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iOw0KLQlmb250LXNpemU6IDE0cHQ7DQotCWNvbG9yOiBibGFjazsNCi0JZm9udC1zdHlsZTogbm9ybWFsOw0KLQlmb250LXdlaWdodDogYm9sZGVyOw0KLQl0ZXh0LWFsaWduOiBjZW50ZXINCi19DQotDQotSDIgew0KLQlmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiI7DQotCWZvbnQtc2l6ZTogMTJwdDsNCi0JY29sb3I6IGJsYWNrOw0KLQlmb250LXN0eWxlOiBub3JtYWw7DQotCWZvbnQtd2VpZ2h0OiBib2xkZXINCi19DQotDQotSDMgew0KLQlmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiI7DQotCWZvbnQtc2l6ZTogMTJwdDsNCi0JY29sb3I6IGJsYWNrOw0KLQlmb250LXN0eWxlOiBpdGFsaWMgIA0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3Mvbm9uU3RhbmRhcmQuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL25vblN0YW5kYXJkLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGM5OTdlYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3Mvbm9uU3RhbmRhcmQuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1AY2hhcnNldCAiSVNPLTg4NTktNiI7DQotDQotDQotDQotDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL25vblN0YW5kYXJkSWxsRm9ybWVkLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9ub25TdGFuZGFyZElsbEZvcm1lZC5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxYTRlNDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL25vblN0YW5kYXJkSWxsRm9ybWVkLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotQGNoYXJzZXQgIklTTy04ODU5LTY7DQotDQotDQotDQotDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL25vblN0YW5kYXJkSWxsRm9ybWVkMi5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3Mvbm9uU3RhbmRhcmRJbGxGb3JtZWQyLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTNjOGExZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3Mvbm9uU3RhbmRhcmRJbGxGb3JtZWQyLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotDQotDQotICAgIEBjaGFyc2V0ICJJU08tODg1OS02IjsNCi0NCi0NCi0NCi0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvdXRmMTZCT00uY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL3V0ZjE2Qk9NLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzI0ZGI4Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvdXRmMTZCT00uY3NzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL3V0ZjE2YmUuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL3V0ZjE2YmUuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOGMwNWQ1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy91dGYxNmJlLmNzcworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy91dGYxNmJlTWFsZm9ybWVkLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy91dGYxNmJlTWFsZm9ybWVkLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDg1MjdjMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvdXRmMTZiZU1hbGZvcm1lZC5jc3MKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvdXRmMTZsZS5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvdXRmMTZsZS5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjOTRmZmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL3V0ZjE2bGUuY3NzCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL3V0ZjE2bGVNYWxmb3JtZWQuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL3V0ZjE2bGVNYWxmb3JtZWQuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjN2RkNjc4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy91dGYxNmxlTWFsZm9ybWVkLmNzcworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtQmlnNS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1CaWc1LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkZmU1YTUuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1CaWc1LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IkJpZzUiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUNFU1UtOC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1DRVNVLTgueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmI3YTU0NC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUNFU1UtOC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJDRVNVLTgiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUNPTVBPVU5EX1RFWFQueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtQ09NUE9VTkRfVEVYVC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMGZiNzEyLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtQ09NUE9VTkRfVEVYVC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJDT01QT1VORF9URVhUIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1FVUMtQ04ueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtRVVDLUNOLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1MGIxNmIuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1FVUMtQ04ueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iRVVDLUNOIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1FVUMtSlAueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtRVVDLUpQLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1Mzk3NzQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1FVUMtSlAueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iRVVDLUpQIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1FVUMtS1IueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtRVVDLUtSLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhZTkyOWIuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1FVUMtS1IueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iRVVDLUtSIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1HQjE4MDMwLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUdCMTgwMzAueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2ZhMTNjMC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUdCMTgwMzAueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iR0IxODAzMCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtR0IyMzEyLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUdCMjMxMi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ODQ5MmQ3Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtR0IyMzEyLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IkdCMjMxMiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtR0JLLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUdCSy54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MmJiZDQ3Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtR0JLLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IkdCSyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTEwMDYueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTEwMDYueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzc3YmE3NS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMDA2LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS0xMDA2Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTA0MS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTA0MS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDk1OGU5Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTEwNDEueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTEwNDEiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMDQzLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMDQzLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3M2QzYWEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTA0My54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tMTA0MyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTEwNDYueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTEwNDYueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmM0MGMxOS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMDQ2LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS0xMDQ2Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTA0NlMueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTEwNDZTLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkZTIwYTQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTA0NlMueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTEwNDZTIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTA4OC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTA4OC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwN2E1MWEzLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTEwODgueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTEwODgiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMDk4LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMDk4LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkYTM0NDMuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTA5OC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tMTA5OCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTExMTQueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTExMTQueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDMzY2VmNC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMTE0LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS0xMTE0Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTExNS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTExNS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDI5MGIxLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTExMTUueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTExMTUiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMTI0LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMTI0LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1NTk2YzUuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTEyNC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tMTEyNCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTEzNjMueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTEzNjMueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWY3MmE1ZC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMzYzLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS0xMzYzIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTM2M0MueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTEzNjNDLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxODEyNGQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTM2M0MueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTEzNjNDIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTM3MC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTM3MC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxODM5Yzg5Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTEzNzAueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTEzNzAiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMzgxLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMzgxLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhYzkwZTkuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTM4MS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tMTM4MSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTEzODMueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTEzODMueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTlhZjI4YS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMzgzLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS0xMzgzIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTM4Ni54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTM4Ni54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYWQ5OWNlLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTEzODYueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTEzODYiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0zMzcyMkMueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTMzNzIyQy54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjU5MmViLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTMzNzIyQy54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tMzM3MjJDIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tNDM3LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS00MzcueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWYwNGVmMC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS00MzcueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTQzNyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTczNy54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tNzM3LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiODUzNWYuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tNzM3LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS03MzciPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS03NzUueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTc3NS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZGM5NDQ5Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTc3NS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tNzc1Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODA4LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04MDgueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODAyOGZjZS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04MDgueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTgwOCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg1MC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODUwLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxODdkOTEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODUwLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS04NTAiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NTIueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg1Mi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTk0ZDVjLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg1Mi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tODUyIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODU1LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NTUueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDAzNTQ3Yy4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NTUueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTg1NSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg1Ni54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODU2LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0YTRiNWIuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODU2LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS04NTYiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NTcueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg1Ny54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTIwYzkxLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg1Ny54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tODU3Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODU4LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NTgueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzU1ZjE0YS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NTgueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTg1OCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg1OS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODU5LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1OWIyNTAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODU5LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS04NTkiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NjAueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg2MC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjgyMjkzLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg2MC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tODYwIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODYxLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NjEueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODI5MTBlYy4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NjEueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTg2MSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg2Mi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODYyLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyYTcxMTQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODYyLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS04NjIiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NjMueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg2My54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMTY3MzU3Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg2My54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tODYzIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODY0LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NjQueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDMzZTU3Ny4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NjQueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTg2NCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg2NFMueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg2NFMueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTgzYWViOC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NjRTLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS04NjRTIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODY1LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NjUueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGQ3ZDVkYi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NjUueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTg2NSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg2Ni54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODY2LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxZmEyNjEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODY2LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS04NjYiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NjcueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg2Ny54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNWY2NzUwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg2Ny54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tODY3Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODY4LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NjgueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmMzODAxYS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NjgueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTg2OCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg2OS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODY5LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmZWUwYzEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODY5LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS04NjkiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NzQueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg3NC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzN2MyNTBhLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg3NC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tODc0Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODk3LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04OTcueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjFiMTU5Ni4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04OTcueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTg5NyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTkyMS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tOTIxLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4NDE3ZTAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tOTIxLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS05MjEiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS05MjIueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTkyMi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDZiODI2Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTkyMi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tOTIyIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tOTMyLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS05MzIueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzk0NmZlMC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS05MzIueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTkzMiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTk0Mi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tOTQyLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzM2U1YmYuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tOTQyLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS05NDIiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS05NDJDLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS05NDJDLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyM2UzOGQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tOTQyQy54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tOTQyQyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTk0My54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tOTQzLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0MTQyNjAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tOTQzLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS05NDMiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS05NDNDLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS05NDNDLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkYTkxZWEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tOTQzQy54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tOTQzQyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTk0OC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tOTQ4LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlZGEyMjIuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tOTQ4LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS05NDgiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS05NDkueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTk0OS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYzVhY2RiLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTk0OS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tOTQ5Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tOTQ5Qy54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tOTQ5Qy54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNmY0NWM2Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTk0OUMueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTk0OUMiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS05NTAueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTk1MC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZjU2NmIxLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTk1MC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tOTUwIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tOTU0Qy54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tOTU0Qy54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTY1YzE0Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTk1NEMueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTk1NEMiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy0yMDIyLUNOLUdCLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy0yMDIyLUNOLUdCLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1NmI1OWEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tMjAyMi1DTi1HQi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tMjAyMi1DTi1HQiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTIwMjItQ04ueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTIwMjItQ04ueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWNmM2RhMy4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy0yMDIyLUNOLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy0yMDIyLUNOIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tMjAyMi1KUC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tMjAyMi1KUC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYzY3YzE3Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTIwMjItSlAueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTIwMjItSlAiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy0yMDIyLUtSLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy0yMDIyLUtSLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyNzgwNGEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tMjAyMi1LUi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tMjAyMi1LUiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS0xLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmMGFiODMuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS0xLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTEiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTEwLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTEwLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmMDc0OTYuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS0xMC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xMCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMTMueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMTMueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2YzZWQ2MS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTEzLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTEzIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS0xNC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS0xNC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMzg5OWNiLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMTQueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMTQiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTE1LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTE1LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4ZDZmZDcuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS0xNS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xNSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMTYueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMTYueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTBmNTdkOC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTE2LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTE2Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS0yLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTIueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTgxODVjMi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTIueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMy54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS0zLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxMzQ5NDEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS0zLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTMiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTQueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktNC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMGY5OTM1Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktNC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS00Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS01LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTUueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzY4NmJmOS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTUueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktNSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktNi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS02LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzNDQ0YmYuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS02LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTYiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTZTLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTZTLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkOWFkOWEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS02Uy54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS02UyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktNy54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS03LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlZTk1ZDUuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS03LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTciPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTgueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktOC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjRkMzAxLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktOC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS04Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS05LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTkueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDA4MzkzMC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTkueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktOSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSklTMDIwMS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1KSVMwMjAxLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1MjMzZDkuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1KSVMwMjAxLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IkpJUzAyMDEiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUpJUzAyMDgueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSklTMDIwOC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZDk5MzRiLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSklTMDIwOC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJKSVMwMjA4Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1KSVMwMjEyLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUpJUzAyMTIueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDAyOWY2My4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUpJUzAyMTIueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSklTMDIxMiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSm9oYWIueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSm9oYWIueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWUwN2NjYi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUpvaGFiLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IkpvaGFiIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1LT0k4LVIueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtS09JOC1SLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzMDQ1ZTYuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1LT0k4LVIueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iS09JOC1SIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1LT0k4LVJVLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUtPSTgtUlUueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDdjZGRhMC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUtPSTgtUlUueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iS09JOC1SVSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtS09JOC1VLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUtPSTgtVS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTQ4ZjNjLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtS09JOC1VLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IktPSTgtVSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtS1NDNTYwMS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1LU0M1NjAxLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4NTk0NzkuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1LU0M1NjAxLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IktTQzU2MDEiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LU1hY0FyYWJpYy54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1NYWNBcmFiaWMueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmZlMDI3YS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LU1hY0FyYWJpYy54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJNYWNBcmFiaWMiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LU1hY0NlbnRyYWxFdXJvcGUueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtTWFjQ2VudHJhbEV1cm9wZS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYmIwZDcwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtTWFjQ2VudHJhbEV1cm9wZS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJNYWNDZW50cmFsRXVyb3BlIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1NYWNDcm9hdGlhbi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1NYWNDcm9hdGlhbi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTBhYjNhLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtTWFjQ3JvYXRpYW4ueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iTWFjQ3JvYXRpYW4iPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LU1hY0N5cmlsbGljLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LU1hY0N5cmlsbGljLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwZTNjOTIuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1NYWNDeXJpbGxpYy54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJNYWNDeXJpbGxpYyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtTWFjR3JlZWsueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtTWFjR3JlZWsueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWRmYWQ2Mi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LU1hY0dyZWVrLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9Ik1hY0dyZWVrIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1NYWNIZWJyZXcueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtTWFjSGVicmV3LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzYjU0OTIuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1NYWNIZWJyZXcueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iTWFjSGVicmV3Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1NYWNJY2VsYW5kLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LU1hY0ljZWxhbmQueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWRhZDQ3ZC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LU1hY0ljZWxhbmQueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iTWFjSWNlbGFuZCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtTWFjUm9tYW4ueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtTWFjUm9tYW4ueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmMxZjBkNS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LU1hY1JvbWFuLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9Ik1hY1JvbWFuIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1NYWNSb21hbmlhLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LU1hY1JvbWFuaWEueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWY2YTRiOS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LU1hY1JvbWFuaWEueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iTWFjUm9tYW5pYSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtTWFjVGhhaS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1NYWNUaGFpLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmNGRhY2YuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1NYWNUaGFpLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9Ik1hY1RoYWkiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LU1hY1R1cmtpc2gueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtTWFjVHVya2lzaC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxY2Q2ODI2Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtTWFjVHVya2lzaC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJNYWNUdXJraXNoIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1NYWNVa3JhaW5lLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LU1hY1VrcmFpbmUueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDBiYzk1My4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LU1hY1VrcmFpbmUueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iTWFjVWtyYWluZSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtUFRDUDE1NC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1QVENQMTU0LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlNzY3YmEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1QVENQMTU0LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlBUQ1AxNTQiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVNoaWZ0X0pJUy54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1TaGlmdF9KSVMueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjliNGU2Mi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVNoaWZ0X0pJUy54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJTaGlmdF9KSVMiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVRJUy02MjAueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtVElTLTYyMC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZmQzMmE3Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtVElTLTYyMC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJUSVMtNjIwIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1VUy1BU0NJSS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1VUy1BU0NJSS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4N2VhOGIwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtVVMtQVNDSUkueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVMtQVNDSUkiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVVURi0xNi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1VVEYtMTYueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTY5ZGM1Mi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVVURi0xNi54bWwiCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1VVEYtMTZCRS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1VVEYtMTZCRS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzU4YzBiLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtVVRGLTE2QkUueG1sIgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtVVRGLTE2TEUueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtVVRGLTE2TEUueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZThkMmUwZC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVVURi0xNkxFLnhtbCIKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVVURi0zMi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1VVEYtMzIueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDEwZDUwOC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVVURi0zMi54bWwiCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1VVEYtMzJCRS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1VVEYtMzJCRS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOGE5YmYxLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtVVRGLTMyQkUueG1sIgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtVVRGLTMyTEUueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtVVRGLTMyTEUueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTkwYTdmOC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVVURi0zMkxFLnhtbCIKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVVURi04LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVVURi04LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyNmYzYmIuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1VVEYtOC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtVVRGLThKLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVVURi04Si54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNDY2NTlkLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtVVRGLThKLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04SiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtWC1Vbmljb2RlQmlnLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVgtVW5pY29kZUJpZy54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTFiNzBhLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtWC1Vbmljb2RlQmlnLnhtbCIKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVgtVW5pY29kZUxpdHRsZS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1YLVVuaWNvZGVMaXR0bGUueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzE0YjliYy4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVgtVW5pY29kZUxpdHRsZS54bWwiCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1ocC1yb21hbjgueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtaHAtcm9tYW44LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlOTgzMDQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1ocC1yb21hbjgueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaHAtcm9tYW44Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTAueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjUwLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4ZDY1NmYuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTAueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0xMjUwIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTEueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjUxLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyYmMwYzMuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTEueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0xMjUxIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTIueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjUyLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4YWM1ODUuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTIueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0xMjUyIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTMueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjUzLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5ZTZhZWMuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTMueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0xMjUzIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTQueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU0LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4MDYyOGYuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTQueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0xMjU0Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTUueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU1LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyNjcyNzAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTUueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0xMjU1Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTYueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU2LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1ZTAwNDkuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTYueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0xMjU2Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTZTLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1NlMueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzk4NzI2NC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1NlMueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0xMjU2UyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU3LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1Ny54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDk1YTYxLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU3LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IndpbmRvd3MtMTI1NyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU4LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1OC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZmM1ZTlhLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU4LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IndpbmRvd3MtMTI1OCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy04NzQueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy04NzQueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODJjM2QxMy4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtODc0LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IndpbmRvd3MtODc0Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTkzMi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTkzMi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiN2YyNmI1Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy05MzIueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy05MzIiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtOTM2LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtOTM2LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4NzlmY2UuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTkzNi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTkzNiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy05NDkueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy05NDkueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjJkMzQ4MS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtOTQ5LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IndpbmRvd3MtOTQ5Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTk1MC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTk1MC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1N2MzYmM2Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy05NTAueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy05NTAiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0TWV0aG9kcy50ZXh0IiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3RNZXRob2RzLnRleHQiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzRkZGRiLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3RNZXRob2RzLnRleHQiCisrKyAvZGV2L251bGwKQEAgLTEsNTI1ICswLDAgQEAKLTEzMQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJCaWc1IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiQ0VTVS04IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiQ09NUE9VTkRfVEVYVCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkVVQy1DTiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkVVQy1KUCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkVVQy1LUiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkdCMTgwMzAiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJHQjIzMTIiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJHQksiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJocC1yb21hbjgiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEwMDYiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEwNDEiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEwNDMiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEwNDYiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTE0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEwNDZTIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMDg4IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMDk4IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMTE0IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMTE1IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMTI0IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMzYzIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMzYzQyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTM3MCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTM4MSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTM4MyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTM4NiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMzM3MjJDIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS00MzciOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTI4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTczNyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tNzc1IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04MDgiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTMxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg1MCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODUyIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NTUiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTM0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg1NiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODU3IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NTgiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTM3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg1OSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODYwIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NjEiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg2MiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODYzIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0MigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NjQiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg2NFMiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQ0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg2NSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODY2IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NjciOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQ3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg2OCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODY5IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NzQiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTUwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg5NyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTIxIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1MigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05MjIiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTUzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTkzMiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTQyIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1NSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05NDJDIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05NDMiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTU3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTk0M0MiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTU4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTk0OCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTQ5IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05NDlDIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05NTAiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTk1NEMiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTIwMjItQ04iOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTIwMjItQ04tR0IiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTIwMjItSlAiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTIwMjItS1IiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktMSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0xMCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0xMyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0xNCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0xNSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0xNiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0yIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3NCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTMiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktNCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS01IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTYiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktNlMiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktNyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS04IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTkiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSklTMDIwMSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJKSVMwMjA4IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkpJUzAyMTIiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSm9oYWIiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiS09JOC1SIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIktPSTgtUlUiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiS09JOC1VIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIktTQzU2MDEiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjQXJhYmljIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY0NlbnRyYWxFdXJvcGUiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjQ3JvYXRpYW4iOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjQ3lyaWxsaWMiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjR3JlZWsiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjSGVicmV3IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY0ljZWxhbmQiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjUm9tYW4iOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjUm9tYW5pYSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJNYWNUaGFpIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJNYWNUdXJraXNoIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJNYWNVa3JhaW5lIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJQVENQMTU0IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJTaGlmdF9KSVMiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlRJUy02MjAiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVTLUFTQ0lJIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVVEYtMTYiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVURi0xNkJFIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVVEYtMTZMRSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVVRGLTMyIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVVEYtMzJCRSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTExKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVVRGLTMyTEUiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVURi04IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVVEYtOEoiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1MCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjUxIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTIiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1MyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjU0IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTUiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1NiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjU2UyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjU3IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTgiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtODc0IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTkzMiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy05MzYiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtOTQ5IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTk1MCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiWC1Vbmljb2RlQmlnIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMzAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJYLVVuaWNvZGVMaXR0bGUiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUJpZzUtSEtTQ1MueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUJpZzUtSEtTQ1MueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTEwMzI0ZC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1CaWc1LUhLU0NTLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IkJpZzUtSEtTQ1MiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1CaWc1LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1CaWc1LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkZmU1YTUuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtQmlnNS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJCaWc1Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtRVVDLUpQLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1FVUMtSlAueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTUzOTc3NC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1FVUMtSlAueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iRVVDLUpQIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtRVVDLUtSLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1FVUMtS1IueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWFlOTI5Yi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1FVUMtS1IueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iRVVDLUtSIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtR0IxODAzMC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtR0IxODAzMC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZmExM2MwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUdCMTgwMzAueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iR0IxODAzMCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUdCSy54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtR0JLLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyYmJkNDcuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtR0JLLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IkdCSyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUlTTy0yMDIyLUpQLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tMjAyMi1KUC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYzY3YzE3Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUlTTy0yMDIyLUpQLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy0yMDIyLUpQIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSVNPLTIwMjItS1IueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUlTTy0yMDIyLUtSLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyNzgwNGEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSVNPLTIwMjItS1IueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTIwMjItS1IiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tODg1OS0xLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tODg1OS0xLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmMGFiODMuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMTMueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTEzLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmM2VkNjEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMTMueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMTMiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tODg1OS0xNS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMTUueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOThkNmZkNy4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tODg1OS0xNS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xNSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTIueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTIueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTgxODVjMi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tODg1OS0yLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTIiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tODg1OS0zLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tODg1OS0zLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxMzQ5NDEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMy54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0zIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktNC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktNC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMGY5OTM1Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTQueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktNCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTUueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTUueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzY4NmJmOS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tODg1OS01LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTUiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tODg1OS02LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tODg1OS02LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzNDQ0YmYuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktNi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS02Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktNy54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktNy54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZWU5NWQ1Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTcueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktNyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTgueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTgueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjY0ZDMwMS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tODg1OS04LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTgiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tODg1OS05LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tODg1OS05LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwODM5MzAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktOS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS05Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSklTX1gwMjAxLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1KSVNfWDAyMDEueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjNhNDJkOC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1KSVNfWDAyMDEueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSklTX1gwMjAxIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSklTX1gwMjEyLTE5OTAueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUpJU19YMDIxMi0xOTkwLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmNzBiNzQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSklTX1gwMjEyLTE5OTAueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSklTX1gwMjEyLTE5OTAiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1LT0k4LVIueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUtPSTgtUi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzA0NWU2Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUtPSTgtUi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJLT0k4LVIiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1TaGlmdF9KSVMueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LVNoaWZ0X0pJUy54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OWI0ZTYyLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LVNoaWZ0X0pJUy54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJTaGlmdF9KSVMiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1USVMtNjIwLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1USVMtNjIwLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmZDMyYTcuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtVElTLTYyMC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJUSVMtNjIwIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtVVMtQVNDSUkueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LVVTLUFTQ0lJLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3ZWE4YjAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtVVMtQVNDSUkueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVMtQVNDSUkiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1VVEYtMTYueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LVVURi0xNi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZWM1NTMwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LVVURi0xNi54bWwiCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtVVRGLTE2QkUueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LVVURi0xNkJFLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzNThjMGIuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtVVRGLTE2QkUueG1sIgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LVVURi0xNkxFLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1VVEYtMTZMRS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOGQyZTBkLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LVVURi0xNkxFLnhtbCIKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1VVEYtOC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtVVRGLTgueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTI2ZjNiYi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1VVEYtOC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1MC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjUwLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4ZDY1NmYuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjUwLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IndpbmRvd3MtMTI1MCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1MS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjUxLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyYmMwYzMuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjUxLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IndpbmRvd3MtMTI1MSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1Mi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjUyLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4YWM1ODUuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjUyLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IndpbmRvd3MtMTI1MiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1My54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjUzLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5ZTZhZWMuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjUzLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IndpbmRvd3MtMTI1MyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1NC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU0LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4MDYyOGYuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU0LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IndpbmRvd3MtMTI1NCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1NS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU1LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyNjcyNzAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU1LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IndpbmRvd3MtMTI1NSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1Ni54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU2LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1ZTAwNDkuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU2LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IndpbmRvd3MtMTI1NiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1Ny54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU3LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwOTVhNjEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU3LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IndpbmRvd3MtMTI1NyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1OC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU4LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmYzVlOWEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU4LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IndpbmRvd3MtMTI1OCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMzFqLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC13aW5kb3dzLTMxai54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MzhjZmQ1Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMzFqLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IndpbmRvd3MtMzFqIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QteC1FVUMtQ04ueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXgtRVVDLUNOLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmZGM2NDEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QteC1FVUMtQ04ueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0ieC1FVUMtQ04iPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC14LUVVQy1UVy54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QteC1FVUMtVFcueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQ4ZTM3YS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC14LUVVQy1UVy54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ4LUVVQy1UVyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXgtSklTMDIwOC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QteC1KSVMwMjA4LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyZDA3ZmQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QteC1KSVMwMjA4LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IngtSklTMDIwOCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXgtSm9oYWIueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXgtSm9oYWIueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGVhZjg3YS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC14LUpvaGFiLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IngtSm9oYWIiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC14LU1TOTUwLUhLU0NTLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC14LU1TOTUwLUhLU0NTLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4MDZiMzEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QteC1NUzk1MC1IS1NDUy54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ4LU1TOTUwLUhLU0NTIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QteC1ldWMtanAtbGludXgueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXgtZXVjLWpwLWxpbnV4LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiNDNkZmIuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QteC1ldWMtanAtbGludXgueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0ieC1ldWMtanAtbGludXgiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC14LW1zd2luLTkzNi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QteC1tc3dpbi05MzYueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTFiZjEwYS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC14LW1zd2luLTkzNi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ4LW1zd2luLTkzNiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXgtd2luZG93cy05NDkueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXgtd2luZG93cy05NDkueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYThjOTNmNC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC14LXdpbmRvd3MtOTQ5LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9Ingtd2luZG93cy05NDkiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC14LXdpbmRvd3MtOTUwLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC14LXdpbmRvd3MtOTUwLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0OGU1M2IuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QteC13aW5kb3dzLTk1MC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ4LXdpbmRvd3MtOTUwIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3RNZXRob2RzLnRleHQiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3RNZXRob2RzLnRleHQiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZjY4ZjI0Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0TWV0aG9kcy50ZXh0IgorKysgL2Rldi9udWxsCkBAIC0xLDE5MyArMCwwIEBACi00OA0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJCaWc1IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiQmlnNS1IS1NDUyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkVVQy1KUCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkVVQy1LUiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkdCMTgwMzAiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJHQksiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tMjAyMi1KUCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy0yMDIyLUtSIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktMSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTEzIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTE1IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTIiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktMyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS00IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTUiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTE1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktNiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS03IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTgiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTE4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktOSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJKSVNfWDAyMDEiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTIwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSklTX1gwMjEyLTE5OTAiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTIxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiS09JOC1SIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlNoaWZ0X0pJUyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJUSVMtNjIwIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVTLUFTQ0lJIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVURi0xNiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVVEYtMTZCRSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVVEYtMTZMRSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVVEYtOCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTAiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTMwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjUxIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1MiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTMiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTMzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjU0IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1NSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTYiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTM2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjU3IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1OCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTMxaiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ4LUVVQy1DTiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ4LWV1Yy1qcC1saW51eCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ4LUVVQy1UVyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ4LUpJUzAyMDgiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAieC1Kb2hhYiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ4LU1TOTUwLUhLU0NTIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0NSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIngtbXN3aW4tOTM2IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIngtd2luZG93cy05NDkiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQ3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAieC13aW5kb3dzLTk1MCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtQmlnNS1IS1NDUy54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtQmlnNS1IS1NDUy54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTAzMjRkLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUJpZzUtSEtTQ1MueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iQmlnNS1IS1NDUyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUJpZzUueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUJpZzUueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2RmZTVhNS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1CaWc1LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IkJpZzUiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1FVUMtSlAueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUVVQy1KUC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTM5Nzc0Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUVVQy1KUC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJFVUMtSlAiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1FVUMtS1IueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUVVQy1LUi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YWU5MjliLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUVVQy1LUi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJFVUMtS1IiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1HQjE4MDMwLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1HQjE4MDMwLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmYTEzYzAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtR0IxODAzMC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJHQjE4MDMwIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtR0JLLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1HQksueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTJiYmQ0Ny4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1HQksueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iR0JLIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSVNPLTIwMjItSlAueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy0yMDIyLUpQLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjNjdjMTcuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSVNPLTIwMjItSlAueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTIwMjItSlAiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1JU08tMjAyMi1LUi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSVNPLTIwMjItS1IueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzI3ODA0YS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1JU08tMjAyMi1LUi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tMjAyMi1LUiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy04ODU5LTEueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy04ODU5LTEueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWYwYWI4My4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1JU08tODg1OS0xLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTEiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1JU08tODg1OS0xMy54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMTMueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2YzZWQ2MS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1JU08tODg1OS0xMy54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xMyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy04ODU5LTE1LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1JU08tODg1OS0xNS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OGQ2ZmQ3Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy04ODU5LTE1LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTE1Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODE4NWMyLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy04ODU5LTIueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy04ODU5LTMueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy04ODU5LTMueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODEzNDk0MS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1JU08tODg1OS0zLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTMiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1JU08tODg1OS00LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1JU08tODg1OS00LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwZjk5MzUuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSVNPLTg4NTktNC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS00Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSVNPLTg4NTktNS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSVNPLTg4NTktNS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Njg2YmY5Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy04ODU5LTUueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktNSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy04ODU5LTYueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy04ODU5LTYueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjM0NDRiZi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1JU08tODg1OS02LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTYiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1JU08tODg1OS03LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1JU08tODg1OS03LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlZTk1ZDUuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSVNPLTg4NTktNy54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS03Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSVNPLTg4NTktOC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSVNPLTg4NTktOC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjRkMzAxLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy04ODU5LTgueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktOCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy04ODU5LTkueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy04ODU5LTkueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDA4MzkzMC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1JU08tODg1OS05LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTkiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1KSVNfWDAyMDEueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUpJU19YMDIwMS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiM2E0MmQ4Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUpJU19YMDIwMS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJKSVNfWDAyMDEiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1KSVNfWDAyMTItMTk5MC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSklTX1gwMjEyLTE5OTAueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGY3MGI3NC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1KSVNfWDAyMTItMTk5MC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJKSVNfWDAyMTItMTk5MCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUtPSTgtUi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtS09JOC1SLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzMDQ1ZTYuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtS09JOC1SLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IktPSTgtUiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LVNoaWZ0X0pJUy54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtU2hpZnRfSklTLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5YjRlNjIuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtU2hpZnRfSklTLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlNoaWZ0X0pJUyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LVRJUy02MjAueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LVRJUy02MjAueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmZkMzJhNy4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1USVMtNjIwLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlRJUy02MjAiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1VUy1BU0NJSS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtVVMtQVNDSUkueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODdlYThiMC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1VUy1BU0NJSS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVUy1BU0NJSSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LVVURi0xNi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtVVRGLTE2LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlYzU1MzAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtVVRGLTE2LnhtbCIKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1VVEYtMTZCRS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtVVRGLTE2QkUueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDM1OGMwYi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1VVEYtMTZCRS54bWwiCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtVVRGLTE2TEUueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LVVURi0xNkxFLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4ZDJlMGQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtVVRGLTE2TEUueG1sIgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LVVURi04LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1VVEYtOC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjZmM2JiLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LVVURi04LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjUwLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTAueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjhkNjU2Zi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTAueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0xMjUwIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjUxLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTEueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDJiYzBjMy4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTEueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0xMjUxIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjUyLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTIueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDhhYzU4NS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTIueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0xMjUyIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjUzLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTMueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTllNmFlYy4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTMueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0xMjUzIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU0LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTQueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjgwNjI4Zi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTQueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0xMjU0Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU1LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTUueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzI2NzI3MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTUueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0xMjU1Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU2LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTYueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDVlMDA0OS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTYueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0xMjU2Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU3LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTcueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjA5NWE2MS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTcueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0xMjU3Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU4LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTgueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGZjNWU5YS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTgueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0xMjU4Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3Qtd2luZG93cy0zMWoueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXdpbmRvd3MtMzFqLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzOGNmZDUuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3Qtd2luZG93cy0zMWoueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0zMWoiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC14LUVVQy1DTi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QteC1FVUMtQ04ueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2ZkYzY0MS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC14LUVVQy1DTi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ4LUVVQy1DTiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXgtRVVDLVRXLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC14LUVVQy1UVy54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDhlMzdhLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXgtRVVDLVRXLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IngtRVVDLVRXIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QteC1KSVMwMjA4LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC14LUpJUzAyMDgueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjJkMDdmZC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC14LUpJUzAyMDgueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0ieC1KSVMwMjA4Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QteC1Kb2hhYi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QteC1Kb2hhYi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZWFmODdhLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXgtSm9oYWIueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0ieC1Kb2hhYiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXgtTVM5NTAtSEtTQ1MueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXgtTVM5NTAtSEtTQ1MueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTgwNmIzMS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC14LU1TOTUwLUhLU0NTLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IngtTVM5NTAtSEtTQ1MiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC14LWV1Yy1qcC1saW51eC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QteC1ldWMtanAtbGludXgueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGI0M2RmYi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC14LWV1Yy1qcC1saW51eC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ4LWV1Yy1qcC1saW51eCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXgtbXN3aW4tOTM2LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC14LW1zd2luLTkzNi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMWJmMTBhLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXgtbXN3aW4tOTM2LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IngtbXN3aW4tOTM2Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QteC13aW5kb3dzLTk0OS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QteC13aW5kb3dzLTk0OS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOGM5M2Y0Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXgtd2luZG93cy05NDkueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0ieC13aW5kb3dzLTk0OSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXgtd2luZG93cy05NTAueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXgtd2luZG93cy05NTAueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQ4ZTUzYi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC14LXdpbmRvd3MtOTUwLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9Ingtd2luZG93cy05NTAiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdE1ldGhvZHMudGV4dCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdE1ldGhvZHMudGV4dCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmNjhmMjQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3RNZXRob2RzLnRleHQiCisrKyAvZGV2L251bGwKQEAgLTEsMTkzICswLDAgQEAKLTQ4DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkJpZzUiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJCaWc1LUhLU0NTIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiRVVDLUpQIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiRVVDLUtSIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiR0IxODAzMCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkdCSyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy0yMDIyLUpQIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTIwMjItS1IiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0xIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktMTMiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktMTUiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktMiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0zIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTQiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTE0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktNSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS02IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTciOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTE3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktOCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS05IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkpJU19YMDIwMSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJKSVNfWDAyMTItMTk5MCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJLT0k4LVIiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTIyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiU2hpZnRfSklTIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlRJUy02MjAiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTI0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVVMtQVNDSUkiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTI1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVVRGLTE2IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVURi0xNkJFIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVURi0xNkxFIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVURi04IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1MCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTEiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTMxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjUyIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1MyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTQiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTM0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjU1IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1NiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTciOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTM3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjU4IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMzFqIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIngtRVVDLUNOIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIngtZXVjLWpwLWxpbnV4IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIngtRVVDLVRXIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0MigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIngtSklTMDIwOCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ4LUpvaGFiIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0NCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIngtTVM5NTAtSEtTQ1MiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQ1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAieC1tc3dpbi05MzYiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQ2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAieC13aW5kb3dzLTk0OSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ4LXdpbmRvd3MtOTUwIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL0VtcHR5RmlsZS5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9FbXB0eUZpbGUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL0VtcHR5RmlsZS5odG1sCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9JbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmOGI1YzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9JbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi08SEVBRD4KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTg+Ci08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS02Ij4KLTxNRVRBIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iSUJNIFdlYlNwaGVyZSBTdHVkaW8iPgotPFRJVExFPklCTSBXZWJTcGhlcmUgU2FtcGxlcyBHYWxsZXJ5PC9USVRMRT4KLTwvSEVBRD4KLTxGUkFNRVNFVCByb3dzPSI3NSwqIj4KLQk8RlJBTUUgbmFtZT0idGl0bGUiIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiIGZyYW1lYm9yZGVyPSIwIiBzcmM9Ik1lbnUvVGl0bGUuaHRtbCIgc2Nyb2xsaW5nPSJOTyIgbm9yZXNpemU+Ci0JPEZSQU1FU0VUIGNvbHM9IjE2MCwqIj4KLQkJPEZSQU1FIG5hbWU9Im1lbnUiIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiIGZyYW1lYm9yZGVyPSIwIiBzcmM9Ik1lbnUvTWVudS5odG1sIiBzY3JvbGxpbmc9ImF1dG8iIG5vcmVzaXplPgotCQk8RlJBTUUgbmFtZT0ibWFpbiIgbWFyZ2lud2lkdGg9IjAiIG1hcmdpbmhlaWdodD0iMCIgZnJhbWVib3JkZXI9IjAiIHNyYz0iTWVudS9TYW1wbGVzSW50cm8uaHRtbCIgc2Nyb2xsaW5nPSJhdXRvIiBub3Jlc2l6ZT4KLQk8L0ZSQU1FU0VUPgotCTxOT0ZSQU1FUz4KLQk8Qk9EWT4KLQk8UD5UbyB2aWV3IHRoaXMgcGFnZSwgeW91IG5lZWQgYSBicm93c2VyIHRoYXQgc3VwcG9ydHMgZnJhbWVzLjwvUD4KLQk8L0JPRFk+Ci0JPC9OT0ZSQU1FUz4KLTwvRlJBTUVTRVQ+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL0xhcmdlTm9FbmNvZGluZy5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9MYXJnZU5vRW5jb2RpbmcuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODRjYTYwZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL0xhcmdlTm9FbmNvZGluZy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjY0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDL0RURC8gSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotCi08aHRtbD4KLTxoZWFkPgotPG1ldGEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJNb3ppbGxhLzQuNyBbZW5dIChXaW5OVDsgVSkgW05ldHNjYXBlXSI+Ci08TUVUQSBjb250ZW50PSJ0ZXh0L2NzcyIgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIj4KLTx0aXRsZT5zbW9rZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLTxoMj4gU21va2UgVGVzdCAtIFhNTCBFZGl0b3I8L2gyPgotTGFzdCB1cGRhdGVkOiBKdW5lIDI1LCAyMDAxCi08UD5UaGlzIFNtb2tlIFRlc3QgcHJpbWFyaWx5IGZvY3VzZXMgb24gdGhlIFJUUCBwb3J0aW9uIG9mIHRoZSBYTUwgCi1FZGl0aW9yLCB3aGljaCBpcyB0aGUgU291cmNlIHBhZ2Ugb2YgdGhlIFhNTCBFZGl0b3IuIEl0IGFsc28gcGVyZm9ybXMgCi1zb21lIGludGVncmF0aW9uIHRlc3RpbmcuIEZvciBleGFtcGxlLCBpdCB0ZXN0cyBzeW5jaHJvbml6YXRpb24gYmV0d2VlbiAKLXRoZSBEZXNpZ24gYW5kIFNvdXJjZSBwYWdlcyBvZiB0aGUgWE1MIEVkaXRvciwgYXMgd2VsbCBhcyB3aXRoIHRoZSAKLU91dGxpbmUgYW5kIFByb3BlcnRpZXMgdmlld3MuIEl0IGFsc28gdmVyaWZpZXMgdGhhdCBmaWxlcyBjcmVhdGVkIAotdGhyb3VnaCB0aGUgWE1MIEZpbGUgd2l6YXJkIGFuZCByZWZlcmVuY2VzIHRvIHRoZSBYTUwgQ2F0YWxvZyBhcmUgCi1zdXBwb3J0ZWQgYXMgZXhwZWN0ZWQuPC9QPgotPFA+PEZPTlQgY29sb3I9IiNmZjAwMDAiPjxCPk5PVEU8L0I+OiBYTUwgZmlsZXMgYXJlIGNhc2Utc2Vuc2l0aXZlIHNvIGJlIHN1cmUgdGhhdCB0aGluZ3MgYXBwZWFyIAotZXhhY3RseSBhcyBub3RlZC48L0ZPTlQ+PC9QPgotCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBTZXR1cAotICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0+Ci08SDI+PEZPTlQgY29sb3I9IiMwMDAwZmYiPlNldHVwPC9GT05UPjwvSDI+Ci08UD48Qj5TdGFydGluZyBDbGVhbjwvQj48L1A+Ci08dWw+Ci0gICAgPGxpPiBEZWxldGUgYW55IGV4aXN0aW5nIHdvcmtiZW5jaDwvbGk+Ci0gICAgPGxpPiBTdGFydCBFY2xpcHNlPC9saT4KLTwvdWw+Ci08UD48Qj5PcGVuIGFuIFhNTCBQZXJzcGVjdGl2ZTxCUj4KLTwvQj48L1A+Ci08VUw+Ci0gICAgPExJPlNlbGVjdCB0aGUgPEI+T3BlbiBQZXJzcGVjdGl2ZTwvQj4gdG9vbGJhciBidXR0b24gaW4gdGhlIHVwcGVyIGxlZnQ8L0xJPgotICAgIDxMST5TZWxlY3QgPEI+T3RoZXIuLi48L0I+PC9MST4KLSAgICA8TEk+U2VsZWN0IDxCPlhNTDwvQj48L0xJPgotICAgIDxMST5WZXJpZnkgdGhlIGZvbGxvd2luZyB2aWV3cyBhcHBlYXIgaW4gdGhlIFhNTCBwZXJzcGVjdGl2ZTogPEZPTlQgY29sb3I9IiNmZjAwMDAiPlRoZSBsb2NhdGlvbiBvZiB0aGUgT3V0bGluZSBhbmQgTmF2aWdhdG9yIHZpZXdzIGFyZSByZXZlcnNlZCBmcm9tIHRoZSBSZXNvdXJjZSBhbmQgV2ViIHBlcnNwZWN0aXZlcy4gRG8gd2Ugd2FudCB0byB0cnkgdG8gYmUgY29uc2lzdGVudCBhY3Jvc3MgdGhlIHBlcnNwZWN0aXZlcz8gQWxzbywgSSBvcGVuZWQgPEI+ZGVmZWN0PC9CPiAxNzc2NjQgdG8gZW5hYmxlIGVhc3kgYWNjZXNzIHRvIHRoZSBQcm9wZXJ0aWVzIHZpZXcgZnJvbSB3aXRoaW4gdGhlIFhNTCBwZXJzcGVjdGl2ZS4gSWYgdGhpcyB2aWV3IGlzbid0IGluY2x1ZGVkIGluIHRoZSBQZXJzcGVjdGl2ZSBiZWNhdXNlIGl0cyB1c2UgaXMgbGltaXRlZCwgdGhlbiByZWNvbW1lbmQgd2UgYXQgbGVhc3QgcHJvdmlkZSBhIFNob3cgb3IgSGlkZSBQcm9wZXJ0aWVzIFZpZXcgdG9vbGJhciBidXR0b24gKHNpbWlsYXIgdG8gdGhlIGJ1dHRvbnMgdGhhdCBQYWdlIERlc2lnbmVyIHByb3ZpZGVzKS48L0ZPTlQ+PC9MST4KLTwvVUw+Ci08UD48Qj5Qcm9qZWN0IENyZWF0aW9uIGFuZCBGaWxlIEltcG9ydHM8QlI+Ci08L0I+PC9QPgotPFVMPgotICAgIDxMST5DcmVhdGUgYSBQcm9qZWN0LCA8Qj5YTUxUZXN0MjwvQj4gPC9MST4KLSAgICA8TEk+SW1wb3J0IHRoZSBmb2xsb3dpbmcgZmlsZXMgaW50byB0aGlzIHByb2plY3Q6Ci0gICAgPFVMPgotICAgICAgICA8TEk+PEI+UHVyY2hhc2VPcmRlci54c2Q8L0I+PC9MST4KLSAgICAgICAgPExJPjxCPkludm9pY2UuZHRkPC9CPjwvTEk+Ci0gICAgPExJPjxCPkpvYkRlc2MueG1sPC9CPjwvTEk+Ci0gICAgPExJPjxCPldpcmVsZXNzLnhtbDwvQj48L0xJPgotICAgIDxMST48Qj5nb3RjaGFUQ0JlYW5zLnNldDwvQj48L0xJPgotICAgIDxMST48Qj5BVFMuZHRkPC9CPjwvTEk+Ci0gICAgPExJPjxGT05UIGNvbG9yPSIjZmYwMDAwIj5hbnkgb3RoZXJzPzwvRk9OVD48L0xJPgotICAgIDwvVUw+Ci0gICAgPC9MST4KLTwvVUw+Ci0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgICAgICAgICAgICAgICAgQ3JlYXRlL09wZW4vRWRpdCB0ZXN0IGNhc2VzCi0gICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLT4KLTxIMj48Rk9OVCBjb2xvcj0iIzAwMDBmZiI+Q3JlYXRlL09wZW4vRWRpdCB0ZXN0IGNhc2VzPC9GT05UPjwvSDI+Ci08UD48Qj5DcmVhdGUgYW4gWE1MIEZpbGUgZnJvbSBzY3JhdGNoPC9CPjwvUD4KLTxVTD4KLSAgICA8TEk+U2VsZWN0IHRoZSA8Qj5DcmVhdGUgYSBuZXcgWE1MIGZpbGU8L0I+IHRvb2xiYXIgYnV0dG9uLjwvTEk+Ci0gICAgPExJPlZlcmlmeSB0aGUgQ3JlYXRlIGEgWE1MIEZpbGUgd2l6YXJkIGFwcGVhcnMgYW5kIHRoZSBGaW5pc2ggYnV0dG9uIGlzIGRpc2FibGVkLiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+PEI+REVGRUNUOjwvQj4gMTc3NjYwIC0gWE1MIEZpbGUgd2l6YXJkOiBkaXNhYmxlIEZpbmlzaCBidXR0b24gb24gdGhlIGZpcnN0IHBhZ2U8L0ZPTlQ+LjwvTEk+Ci0gICAgPExJPkFjY2VwdCB0aGUgZGVmYXVsdCB0byA8Qj5DcmVhdGUgYSBuZXcgWE1MIGZpbGU8L0I+PC9MST4KLSAgICA8TEk+R28gdG8gdGhlIE5leHQgcGFnZQotICAgIDxVTD4KLSAgICAgICAgPExJPlNlbGVjdCA8Qj5YTUxUZXN0MjwvQj4gYXMgdGhlIGZvbGRlcjwvTEk+Ci0gICAgICAgIDxMST5TcGVjaWZ5IGEgRmlsZSBuYW1lIG9mIDxCPmZyb21TY3JhdGNoPC9CPjwvTEk+Ci0gICAgICAgIDxMST5TZWxlY3QgPEI+RmluaXNoPC9CPjwvTEk+Ci0gICAgPC9VTD4KLSAgICA8L0xJPgotICAgIDxMST5WZXJpZnkgdGhlIGZvbGxvd2luZzoKLSAgICA8VUw+Ci0gICAgICAgIDxMST5mcm9tU2NyYXRjaC54bWwgYXBwZWFycyBpbiB0aGUgTmF2aWdhdG9yIHZpZXcuPC9MST4KLSAgICAgICAgPExJPmZyb21TY3JhdGNoLnhtbCBpcyBvcGVuIHRvIHRoZSBEZXNpZ24gcGFnZSBvZiB0aGUgWE1MIEVkaXRvciBhbmQgaGFzIGZvY3VzLjwvTEk+Ci0gICAgICAgIDxMST50aGUgRGVzaWduIHRhYiBhcHBlYXJzIGJlZm9yZSB0aGUgU291cmNlIHRhYiBpbiB0aGUgWE1MIEVkaXRvci48L0xJPgotICAgICAgICA8TEk+dGhlIERlc2lnbiBhbmQgU291cmNlIHBhZ2Ugc2hvdyBubyBjb250ZW50LjwvTEk+Ci0gICAgICAgIDxMST50aGUgT3V0bGluZSBhbmQgUHJvcGVydGllcyB2aWV3cyBzaG93IG5vdGhpbmcuPC9MST4KLSAgICA8L1VMPgotICAgIDwvTEk+Ci0gICAgPExJPlN3aXRjaCB0byB0aGUgU291cmNlIHBhZ2UuIFZlcmlmeSB0aGUgY3Vyc29yIGFwcGVhcnMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS48L0xJPgotICAgIDxMST5SaWdodCBtb3VzZSBidXR0b24gMiBhbmQgdmVyaWZ5IGEgcG9wdXAgbWVudSBhcHBlYXJzLjwvTEk+Ci0gICAgPExJPkhpdCA8Qj5DdHJsK1NwYWNlPC9CPi4gVmVyaWZ5IHRoZSBjb250ZW50IGFzc2lzdCBwcm9wb3NhbCBsaXN0IGFwcGVhcnMuPC9MST4KLSAgICA8TEk+U2VsZWN0IDxCPiZsdDs/eG1sIHZlcnNpb249JnF1b3Q7MS4wJnF1b3Q7IGVuY29kaW5nPSZxdW90O1VURi04JnF1b3Q7PyZndDs8L0I+PC9MST4KLSAgICA8TEk+VmVyaWZ5ICZsdDs/eG1sIHZlcnNpb249JnF1b3Q7MS4wJnF1b3Q7IGVuY29kaW5nPSZxdW90O1VURi04JnF1b3Q7PyZndDsgaXMgaW5zZXJ0ZWQgYW5kIGFwcGVhcnMgc3ludGF4IGhpZ2hsaWdodGVkIGFuZCBhbiBlbnRyeSBhcHBlYXJzIGZvciBpdCBpbiB0aGUgT3V0bGluZSB2aWV3LjwvTEk+Ci0gICAgPExJPlBvc2l0aW9uIHRoZSBjdXJzb3Igd2l0aGluIHRoZSBYTUwgZGVjbGFyYXRpb24gYW5kIHZlcmlmeSA8Qj52ZXJzaW9uPC9CPiBhbmQgPEI+ZW5jb2Rpbmc8L0I+IGFwcGVhciBpbiB0aGUgUHJvcGVydGllcyB2aWV3LiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+VGhpcyB1c2VkIHRvIHdvcmssIGJ1dCBub3cgaXQncyBub3Qgd29ya2luZy4gT3BlbmVkIDxCPmRlZmVjdDwvQj4gMTc3NjYyIC0gWE1MIGRlY2xhcmF0aW9uIGF0dHJpYnV0ZXMgbm90IGFwcGVhcmluZyBpbiBQcm9wZXJ0aWVzIHZpZXcuIElmIHdlIGRlY2lkZSB0byBub3QgdHJlYXQgdmVyc2lvbiBhbmQgZW5jb2RpbmcgYXMgYXR0cmlidXRlcywgdGhlbiB0aGlzIHN0ZXAgc2hvdWxkIGJlIHJlbW92ZWQuPC9GT05UPjwvTEk+Ci0gICAgPExJPkNvbnRpbnVlIHRvIHRoZSBuZXh0IHNlY3Rpb24uPC9MST4KLTwvVUw+Ci08UD48Qj5JZGVudGlmeSBhIGxvY2FsIERURCAoPC9CPnZlcmlmaWVzIGEgRFREIGlzIGltbWVkaWF0ZWx5IHJlY29nbml6ZWQ7IGluIHRoZSBwYXN0LCB5b3UgaGFkIHRvIGNsb3NlIGFuZCByZW9wZW4gdGhlIFdvcmtiZW5jaDxCPik8L0I+PC9QPgotPFVMPgotICAgIDxMST5UeXBlIHRoZSBmb2xsb3dpbmcgYWZ0ZXIgdGhlIFhNTCBkZWNsYXJhdGlvbiBpbiA8Qj5mcm9tU2NyYXRjaC54bWw8L0I+OiA8Qj4mbHQ7IURPQ1RZUEUgSW52b2ljZSBTWVNURU0gJnF1b3Q7SW52b2ljZS5kdGQmcXVvdDsmZ3Q7PC9CPi4gVGhlIHRleHQgc2hvdWxkIGJlIHN5bnRheCBoaWdobGlnaHRlZCBhcyB5b3UgdHlwZSBhbmQgeW91IHNob3VsZCBzZWUgYW4gZW50cnkgZ2V0IGFkZGVkIHRvIHRoZSBPdXRsaW5lIHZpZXcuPC9MST4KLSAgICA8TEk+SGl0IDxCPkVudGVyPC9CPiB0byBjcmVhdGUgYSBuZXcgbGluZSBhZnRlciB0aGUgRE9DVFlQRSBkZWNsYXJhdGlvbi48L0xJPgotICAgIDxMST5IaXQgPEI+Q3RybCtTcGFjZTwvQj4uVmVyaWZ5IG9ubHkgPEI+SW52b2ljZTwvQj4gYW5kIDxCPmNvbW1lbnQ8L0I+IGFwcGVhciBpbiB0aGUgcHJvcG9zYWwgbGlzdC4gKDxCPk5PVEU8L0I+OiA8Qj5JbnZvaWNlPC9CPiBpcyB0aGUgcm9vdCBlbGVtZW50KTwvTEk+Ci0gICAgPExJPkhpdCA8Qj5FbnRlcjwvQj4gdG8gYWNjZXB0IDxCPkludm9pY2U8L0I+IGFzIGEgc2VsZWN0aW9uLiBWZXJpZnkgdGhlIEludm9pY2Ugc3RhcnQgYW5kIGVuZCB0YWdzIGFyZSBpbnNlcnRlZCBpbnRvIHRoZSBTb3VyY2UgYW5kIHRoZSBjdXJzb3IgYXBwZWFycyBiZXR3ZWVuIHRoZW0uIEFuIGVsZW1lbnQgZW50cnkgc2hvdWxkIGFwcGVhciBmb3IgSW52b2ljZSBpbiB0aGUgT3V0bGluZSB2aWV3LiAoPEI+Tk9URTwvQj46IFhNTCBpcyBjYXNlLXNlbnNpdGl2ZSBzbyBiZSBzdXJlIHlvdSBzZWUgSW52b2ljZSBhbmQgbm90IGludm9pY2UgZXZlcnl3aGVyZSkuPC9MST4KLSAgICA8TEk+SGl0IDxCPkN0cmwrU3BhY2U8L0I+LiBWZXJpZnkgdGhlIGZvbGxvd2luZyBhcHBlYXJzIGluIHRoZSBwcm9wb3NhbCBsaXN0IChpbiB0aGUgb3JkZXIgc2hvd24pOiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+SXRlbSBpcyBhcHBlYXJpbmcgYmVmb3JlIEhlYWRlci4gVGhlIGRlZmF1bHQgaXMgbm90IHRvIHNvcnQgdGhlIGxpc3QgYWxwaGFiZXRpY2FsbHkuIFRoYXQgbWVhbnMgdGhlIGxpc3Qgc2hvdWxkIGJlIHNvcnRlZCBiYXNlZCBvbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhlIGNoaWxkIHRhZ3MgYXJlIGRlZmluZWQgaW4gdGhlIGVsZW1lbnQgZGVmaW5pdGlvbiBmb3IgSW52b2ljZSBpbiB0aGUgRFRELiBJbiBvdGhlciB3b3JkcywgdXNlcnMgc2hvdWxkIHNlZSBjaGlsZCB0YWdzIGxpc3RlZCBhY2NvcmRpbmcgdG8gdGhlaXIgc2VxdWVuY2luZyBvcmRlciBpbiB0aGUgRFRELCB3aGljaCB0aGUgRFREIEVkaXRvciBzaG93cy4gVmlvbGF0aW5nIHRoZSBzZXF1ZW5jaW5nIG9yZGVyIGNhdXNlcyBhbiBYTUwgZmlsZSB0byBiZWNvbWUgbm90IHZhbGlkLiA8Qj5ERUZFQ1Q6PC9CPiAxNzc2Njg8L0ZPTlQ+Ci0gICAgPFVMPgotICAgICAgICA8TEk+SGVhZGVyPC9MST4KLSAgICAgICAgPExJPkl0ZW08L0xJPgotICAgICAgICA8TEk+Y29tbWVudDwvTEk+Ci0gICAgPC9VTD4KLSAgICA8L0xJPgotICAgIDxMST5IaXQgPEI+RW50ZXI8L0I+IHRvIGFjY2VwdCA8Qj5IZWFkZXI8L0I+IGFzIGEgc2VsZWN0aW9uLjwvTEk+Ci0gICAgPExJPlZlcmlmeSB0aGUgU291cmNlIG5vdyBsb29rcyBsaWtlIHRoZSBmb2xsb3dpbmcgYW5kIHRoZSBjdXJzb3IgYXBwZWFycyBiZWZvcmUgPEI+aW52b2ljZU51bWJlcjwvQj46PElNRyBib3JkZXI9IjAiIGhlaWdodD0iODMiIHNyYz0iaWRlbnRpZnlEVEQuanBnIiB3aWR0aD0iNDg1Ij48L0xJPgotICAgIDxMST5WZXJpZnkgPEI+SGVhZGVyPC9CPiBhcHBlYXJzIG5lc3RlZCB1bmRlciA8Qj5JbnZvaWNlPC9CPiBpbiB0aGUgT3V0bGluZSB2aWV3LjwvTEk+Ci0gIDxMST5DbG9zZSB0aGlzIGZpbGUsIGFuZCByZXNwb25kIDxCPlllczwvQj4gd2hlbiBwcm9tcHRlZCB0byBzYXZlIHRoZSBjaGFuZ2VzLjwvTEk+Ci0gIDxMST5SZW9wZW4gdGhlIGZpbGUgYW5kIHZlcmlmeSB0aGUgY2hhbmdlcyB3ZXJlIHNhdmVkLjwvTEk+Ci0gIDxMST5DbG9zZSB0aGUgZmlsZS4gVmVyaWZ5IG5vIHNhdmUgY2hhbmdlcyBwcm9tcHQgYXBwZWFycy48L0xJPgotPC9VTD4KLTxQPjxCPkNyZWF0ZSBhbiBYTUwgRmlsZSBmcm9tIGFuIGltcG9ydGVkIERURDwvQj48L1A+Ci08VUw+Ci0gICAgPExJPlNlbGVjdCB0aGUgPEI+RmlsZS0mZ3Q7TmV3LSZndDtYTUwgRmlsZTwvQj4uPC9MST4KLSAgICA8TEk+VmVyaWZ5IHRoZSBDcmVhdGUgYSBYTUwgRmlsZSB3aXphcmQgYXBwZWFycy48L0xJPgotICAgIDxMST5TZWxlY3QgdG8gPEI+Q3JlYXRlIGEgbmV3IFhNTCBmaWxlIGZyb20gYSBEVEQgZmlsZTwvQj48L0xJPgotICAgIDxMST5HbyB0byB0aGUgTmV4dCBwYWdlCi0gICAgPFVMPgotICAgICAgICA8TEk+U2VsZWN0IDxCPlhNTFRlc3QyPC9CPiBhcyB0aGUgZm9sZGVyPC9MST4KLSAgICAgICAgPExJPlNwZWNpZnkgYSBGaWxlIG5hbWUgb2YgPEI+ZnJvbUxvY2FsRFREPC9CPjwvTEk+Ci0gICAgICAgIDxMST5HbyB0byB0aGUgTmV4dCBwYWdlPC9MST4KLSAgICA8L1VMPgotICAgIDwvTEk+Ci0gICAgPExJPlNlbGVjdCB0aGUgPEI+SW1wb3J0IEZpbGU8L0I+IGJ1dHRvbgotICAgIDxVTD4KLSAgICAgICAgPExJPlVzZSB0aGUgQnJvd3NlIGJ1dHRvbiB0byBmaW5kIDxCPnRlc3RjYXNlLmR0ZDwvQj48L0xJPgotICAgICAgICA8TEk+U2VsZWN0IDxCPlhNTFRlc3QyPC9CPiBhcyB0aGUgZm9sZGVyLiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+V291bGQgYmUgbmljZSBpZiB0aGlzIHdlcmUgYWxyZWFkeSBmaWxsZWQgaW4uIE9wZW4gYSBkZWZlY3QuPC9GT05UPjwvTEk+Ci0gICAgICAgIDxMST5TZWxlY3QgPEI+RmluaXNoPC9CPiB0byBjbG9zZSB0aGUgSW1wb3J0IEZpbGUgd2l6YXJkPC9MST4KLSAgICA8L1VMPgotICAgIDwvTEk+Ci0gICAgPExJPkV4cGFuZCA8Qj5YTUx0ZXN0MjwvQj4gYW5kIHRoZW4gc2VsZWN0IDxCPnRlc3RjYXNlLmR0ZDwvQj4uIDxGT05UIGNvbG9yPSIjZmYwMDAwIj5XYXMgZXhwZWN0aW5nIHRvIHNlZSB0aGUgaW1wb3J0ZWQgZmlsZSBzZWxlY3RlZCBpbiB0aGUgV29ya2JlbmNoIGZpbGVzIGxpc3QsIGJ1dCBpdCB3YXNuJ3QuIE9wZW4gYSBkZWZlY3QuPC9GT05UPjwvTEk+Ci0gICAgPExJPkdvIHRvIHRoZSBOZXh0IHBhZ2UuPC9MST4KLSAgICA8TEk+U2VsZWN0IDxCPnRlc3RjYXNlPC9CPiBhcyB0aGUgUm9vdCBFbGVtZW50LjwvTEk+Ci0gICAgPExJPkFjY2VwdCB0aGUgZGVmYXVsdCB0byA8Qj5DcmVhdGUgcmVxdWlyZWQgY29udGVudCBvbmx5PC9CPi48L0xJPgotICAgIDxMST5WZXJpZnkgPEI+dGVzdGNhc2UuZHRkPC9CPiBhcHBlYXJzIGFzIHRoZSBTeXN0ZW0gSWQuPC9MST4KLSAgICA8TEk+U2VsZWN0IEZpbmlzaC4gVmVyaWZ5IDxCPmZyb21Mb2NhbERURC54bWw8L0I+IGFwcGVhcnMgaW4gdGhlIFhNTCBFZGl0b3IuIFZlcmlmeSB0aGUgU291cmNlIHBhZ2UgbG9va3MgbGlrZSB0aGUgZm9sbG93aW5nOiA8SU1HIGJvcmRlcj0iMCIgaGVpZ2h0PSIyOTAiIHNyYz0iaW1wb3J0RFRELmpwZyIgd2lkdGg9IjY2MCI+PC9MST4KLSAgPExJPlZlcmlmeSB0aGUgT3V0bGluZSB2aWV3IGFuZCB0aGUgZm9ybWF0dGluZyBpbmRlbnRhdGlvbiByZWZsZWN0IHRoZSBwcm9wZXIgZWxlbWVudC90YWcgaGllcmFyY2h5LiBIZXJlJ3Mgd2hhdCB0aGUgT3V0bGluZSB2aWV3IHNob3VsZCBsb29rIGxpa2U6PElNRyBib3JkZXI9IjAiIGhlaWdodD0iMjk3IiBzcmM9Im91dGxpbmUxLmpwZyIgd2lkdGg9IjY1NSI+PC9MST4KLSAgPExJPlZlcmlmeSBzZWxlY3Rpb24gc3luY2hyb25pemF0aW9uIGJldHdlZW4gdGhlIERlc2lnbiBwYWdlLCBTb3VyY2UgcGFnZSwgT3V0bGluZSB2aWV3LCAKLSAgICAgICAgYW5kIFByb3BlcnRpZXMgdmlldy4KLSAgICA8VUw+Ci0gICAgICAgIDxMST5Gcm9tIHRoZSBTb3VyY2UgcGFnZSwgY2xpY2sgd2l0aGluIHRoZSA8Qj5oZWFkZXI8L0I+IHN0YXJ0IHRhZy4gCi0gICAgICAgICAgICBWZXJpZnkgPEI+aGVhZGVyPC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgT3V0bGluZSB2aWV3IGFuZCBpbiB0aGUgRGVzaWduIAotICAgICAgICAgICAgcGFnZSBhbmQgdGhhdCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXMgYW5kIHByb3BlcnR5IHZhbHVlcyBhcHBlYXIgaW4gdGhlIAotICAgICAgICAgICAgUHJvcGVydGllcyB2aWV3OgotICAgICAgICA8VEFCTEUgYm9yZGVyPSIxIj4KLSAgICAgICAgICAgIDxUQk9EWT4KLSAgICAgICAgICAgICAgICA8VFI+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iMTAwIj48Qj5Qcm9wZXJ0eTwvQj48L1REPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9Ijc2Ij48Qj5WYWx1ZTwvQj48L1REPgotICAgICAgICAgICAgICAgIDwvVFI+Ci0gICAgICAgICAgICAgICAgPFRSPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9IjEwMCI+Y2F0ZWdvcnk8L1REPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9Ijc2Ij53ZWJ0b29sPC9URD4KLSAgICAgICAgICAgICAgICA8L1RSPgotICAgICAgICAgICAgICAgIDxUUj4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSIxMDAiPm51bWJlcjwvVEQ+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iNzYiPmlkdmFsdWUwPC9URD4KLSAgICAgICAgICAgICAgICA8L1RSPgotICAgICAgICAgICAgICAgIDxUUj4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSIxMDAiPnN0YXRlPC9URD4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSI3NiI+Jm5ic3A7PC9URD4KLSAgICAgICAgICAgICAgICA8L1RSPgotICAgICAgICAgICAgICAgIDxUUj4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSIxMDAiPnN1YkNhdGVnb3J5PC9URD4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSI3NiI+QWNjZXNzYWJpbGl0eTwvVEQ+Ci0gICAgICAgICAgICAgICAgPC9UUj4KLSAgICAgICAgICAgICAgICA8VFI+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iMTAwIj5zdWJTdWJDYXRlZ29yeTwvVEQ+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iNzYiPiZuYnNwOzwvVEQ+Ci0gICAgICAgICAgICAgICAgPC9UUj4KLSAgICAgICAgICAgIDwvVEJPRFk+Ci0gICAgICAgIDwvVEFCTEU+Ci0gICAgICAgIDwvTEk+Ci0JPExJPkZyb20gdGhlIE91dGxpbmUgdmlldywgc2VsZWN0IHRoZSA8Qj50ZXN0QnVja2V0PC9CPiB0YWcuCi0gICAgICAgICAgICBWZXJpZnkgPEI+dGVzdEJ1Y2tldDwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIERlc2lnbiBwYWdlIGFuZCB0aGUgY3VycmVudCBtYXJrZXIKLSAgICAgICAgICAgIGluIHRoZSBsZWZ0aGFuZCBtYXJnaW4gb2YgdGhlIFNvdXJjZSBwYWdlIGluZGljYXRlcyB0aGUgcmFuZ2Ugb2YgdGhlIAotICAgICAgICAgICAgPEI+dGVzdEJ1Y2tldDwvQj4gdGFnLiBUaGUgUHJvcGVydGllcyB2aWV3IHNob3VsZCBzaG93IGEgcHJvcGVydHkgb2YgPEI+dHlwZTwvQj4KLSAgICAgICAgICAgIHdpdGggYSB2YWx1ZSBvZiA8Qj5Db21wb25lbnRUZXN0PC9CPi4KLSAgICAgICAgPC9MST4KLSAgICA8L1VMPiAgIAotICAgIDwvTEk+IAotICAgIDxMST5WZXJpZnkgZWRpdCBzeW5jaHJvbml6YXRpb24gYmV0d2VlbiB0aGUgRGVzaWduIHBhZ2UsIFNvdXJjZSBwYWdlLCBhbmQgCi0gICAgICAgIFByb3BlcnRpZXMgdmlldyAoZm9jdXMgaGVyZSBpcyBvbiBhZGRpbmcgYXR0cmlidXRlcyBhbmQgYXR0cmlidXRlIHZhbHVlcykuCi0gICAgPFVMPgotICAgICAgICA8TEk+RnJvbSB0aGUgU291cmNlIHBhZ2UsIHVzZSBjb250ZW50IGFzc2lzdCB0byBpbnNlcnQgYW4gYXR0cmlidXRlIGFuZCBhdHRyaWJ1dGUgdmFsdWUKLSAgICAgICAgICAgIGZvciB0aGUgPEI+aGVhZGVyPC9CPiBzdGFydCB0YWcuCi0gICAgICAgICAgICA8VUw+Ci0gICAgICAgICAgICA8TEk+UG9zaXRpb24gdGhlIGN1cnNvciBhZnRlciB0aGUgPEI+Y2F0ZWdvcnk8L0I+IGF0dHJpYnV0ZSBpbiB0aGUgPEI+aGVhZGVyPC9CPiBzdGFydCB0YWcuPC9MST4KLSAgICAgICAgICAgIDxMST5UeXBlIDxCPnNwYWNlPC9CPiBhbmQgdGhlbiBoaXQgcHJvbXB0IGZvciBjb250ZW50IGFzc2lzdC48L0xJPgotICAgICAgICAgICAgPExJPlZlcmlmeSBvbmx5IDxCPnN0YXRlPC9CPiBhbmQgPEI+c3ViU3ViQ2F0ZWdvcnk8L0I+IGFwcGVhciBpbiB0aGUgcHJvcG9zYWwgbGlzdCAoY29udGVudCBhc3Npc3QgaXMgc21hcnQgZW5vdWdoIG5vdCB0byBsaXN0IGFueSBhdHRyaWJ1dGVzIHRoYXQgYWxyZWFkeSBleGlzdCBpbiB0aGUgc3RhcnQgdGFnIHNpbmNlIGF0dHJpYnV0ZXMgY2FuIG9ubHkgYXBwZWFyIG9uY2UuIDxGT05UIGNvbG9yPSIjMDAwMGZmIj5Db29sITwvRk9OVD4pLjwvTEk+Ci0gICAgICAgICAgICA8TEk+U2VsZWN0IDxCPnN0YXRlPC9CPi48L0xJPiAgIAotICAgICAgICAgICAgPExJPlZlcmlmeSA8Qj5zdGF0ZT0iVW5kZXJDb25zdHJ1Y3Rpb24iPC9CPiBpcyBpbnNlcnRlZCBpbiB0aGUgU291cmNlIHBhZ2UgKGNvbnRlbnQgYXNzaXN0IGF1dG9tYXRpY2FsbHkgaW5zZXJ0cyBhbnkgZGVmYXVsdCB2YWx1ZXMuIDxGT05UIGNvbG9yPSIjMDAwMGZmIj5Db29sITwvRk9OVD4pLiBWZXJpZnkgdGhlIERlc2lnbiBwYWdlIGFuZCBQcm9wZXJ0aWVzIHZpZXcgcmVmbGVjdCB0aGlzIGNoYW5nZS48L0xJPiAgICAgICAgIAotICAgICAgICAgICAgPC9VTD4KLSAgICAgICAgPC9MST4KLSAgICAgICAgPExJPkZyb20gdGhlIFByb3BlcnRpZXMgdmlldywgdXBkYXRlIHRoZSA8Qj5zdGF0ZTwvQj4gYXR0cmlidXRlIHZhbHVlIHRvICJVbmRlclJldmlldyIgCi0gICAgICAgICAgICAoYSBwdWxsZG93biBsaXN0IG9mIHZhbHVlcyBzaG91bGQgYmUgYXZhaWxhYmxlKS4gVmVyaWZ5IHRoZSBjaGFuZ2UgaXMgcmVmbGVjdGVkCi0gICAgICAgICAgICBpbiB0aGUgU291cmNlIGFuZCBEZXNpZ24gcGFnZXMuCi0gICAgICAgIDwvTEk+Ci0gICAgICAgIDxMST5Gcm9tIHRoZSBEZXNpZ24gcGFnZSwgYWRkIGFuIGF0dHJpYnV0ZSBhbmQgYXR0cmlidXRlIHZhbHVlIHRvIHRoZSA8Qj5oZWFkZXI8L0I+IHRhZy4KLSAgICAgICAgICAgIDxVTD4KLSAgICAgICAgICAgIDxMST5CcmluZyB1cCB0aGUgcG9wdXAgbWVudSBmb3IgdGhlIDxCPmhlYWRlcjwvQj4gdGFnLjwvTEk+Ci0gICAgICAgICAgICA8TEk+U2VsZWN0IDxCPkFkZCBBdHRyaWJ1dGUtPnN1YlN1YkNhdGVnb3J5PC9CPiBmcm9tIHRoZSBwb3B1cCBtZW51IChpdCdzIHNtYXJ0Ci0gICAgICAgICAgICAgICAgZW5vdWdoIHRvIGtub3cgd2hpY2ggYXR0cmlidXRlcyBoYXZlbid0IGJlZW4gc3BlY2lmaWVkIHlldCAuLi4gbGlrZSBjb250ZW50IAotICAgICAgICAgICAgICAgIGFzc2lzdC4gQ29vbCEpLjwvTEk+Ci0gICAgICAgICAgICA8TEk+VHlwZSBpbiBhIHZhbHVlIG9mIDxCPktleWJvYXJkIHN1cHBvcnQ8L0I+LjwvTEk+Ci0gICAgICAgICAgICA8TEk+VmVyaWZ5IHRoZSBjaGFuZ2UgaXMgcmVmbGVjdGVkIGluIHRoZSBTb3VyY2UgcGFnZSBhbmQgUHJvcGVydGllcyB2aWV3PC9MST4KLSAgICAgICAgICAgIDwvVUw+Ci0gICAgICAgIDwvTEk+Ci0gICAgPC9VTD4KLSAgICA8L0xJPgotPC9VTD4KLTxQPjxCPk9wZW4gYW4gWE1MIEZpbGUgdGhhdCByZWZlcmVuY2VzIGEgcmVtb3RlIERURDwvQj48L1A+Ci08VUw+Ci0gICAgPExJPk9wZW4gdGhlIDxCPldpcmVsZXNzLnhtbDwvQj4gZmlsZS48L0xJPgotICAgIDxMST5WZXJpZnkgaXQgbG9va3MgbGlrZSB0aGUgZm9sbG93aW5nIGluIHRoZSBTb3VyY2UgcGFnZTo8SU1HIGJvcmRlcj0iMCIgaGVpZ2h0PSIyMzkiIHNyYz0id2lyZWxlc3MuanBnIiB3aWR0aD0iNjU2Ij48L0xJPgotICAgIDxMST5WZXJpZnkgdGhlIE91dGxpbmUgdmlldyBhbmQgdGhlIGZvcm1hdHRpbmcgaW5kZW50YXRpb24gcmVmbGVjdCB0aGUgcHJvcGVyIAotICAgICAgICBlbGVtZW50L3RhZyBoaWVyYXJjaHkuIEhlcmUncyB3aGF0IHRoZSBPdXRsaW5lIHZpZXcgc2hvdWxkIGxvb2sgbGlrZTogPElNRyBib3JkZXI9IjAiIGhlaWdodD0iMTg5IiBzcmM9Im91dGxpbmUyLmpwZyIgd2lkdGg9IjY1NiI+PC9MST4gCi0gICAgPExJPlZlcmlmeSBjb250ZW50IGFzc2lzdCA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+RGVmZWN0IDE3NjM3OSAoaW4gdmVyaWZ5IHN0YXRlLCBidXQgc3RpbGwgbm90IHdvcmtpbmcpPC9GT05UPi48L0xJPgotICAgICAgICA8VUw+Ci0gICAgICAgICAgIDxMST5DcmVhdGUgYSBuZXcgbGluZSBhZnRlciB0aGUgPEI+d21sPC9CPiBzdGFydCB0YWcuPC9MST4KLSAgICAgICAgICAgPExJPlByb21wdCBmb3IgY29udGVudCBhc3Npc3Qgb24gdGhlIG5ldyBsaW5lLjwvTEk+Ci0gICAgICAgICAgIDxMST5WZXJpZnkgdGhlIGZvbGxvd2luZyBhcHBlYXIgYXMgcHJvcG9zYWxzIChpbiB0aGUgb3JkZXIgc2hvd24pOiAKLSAgICAgICAgICAgICAgIDxVTD4KLSAgICAgICAgICAgICAgICAgICA8TEk+aGVhZDwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPnRlbXBsYXRlPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+Y2FyZDwvTEk+Ci0gICAgICAgICAgICAgICA8L1VMPgotICAgICAgICAgICA8L0xJPgotICAgICAgICAgICA8TEk+Q3JlYXRlIGEgbmV3IGxpbmUgYWZ0ZXIgdGhlIDxCPndtbDwvQj4gc3RhcnQgdGFnLjwvTEk+Ci0gICAgICAgICAgIDxMST5UeXBlIGEgc3BhY2UgYmVmb3JlIHRoZSBlbmRpbmcgZGVsaW1pdGVyIG9uIHRoZSBjYXJkIHN0YXJ0IHRhZy48L0xJPgotICAgICAgICAgICA8TEk+UHJvbXB0IGZvciBjb250ZW50IGFzc2lzdDwvTEk+Ci0gICAgICAgICAgIDxMST5WZXJpZnkgdGhlIGZvbGxvd2luZyBhcHBlYXIgYXMgcHJvcG9zYWxzIChub3QgbmVjZXNzYXJpbHkgaW4gdGhlCi0gICAgICAgICAgICAgICBvcmRlciBzaG93bikuIAotICAgICAgICAgICAgICAgPFVMPgotICAgICAgICAgICAgICAgICAgIDxMST50aXRsZTwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPm5ld2NvbnRleHQ8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST5vcmRlcmVkPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+eG1sOmxhbmc8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST5vbmVudGVyYmFja3dhcmQ8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST5vbnRpbWVyPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+aWQ8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST5jbGFzczwvTEk+Ci0gICAgICAgICAgICAgICA8L1VMPgotICAgICAgICAgICA8L0xJPgotICAgICAgICAgICA8TEk+UG9zaXRpb24gdGhlIGN1cnNvciB3aXRoaW4gdGhlIDxCPm1ldGhvZDwvQj4gYXR0cmlidXRlIHZhbHVlIGluIHRoZSA8Qj5nbzwvQj4gc3RhcnQgdGFnLjwvTEk+Ci0gICAgICAgICAgIDxMST5Qcm9tcHQgZm9yIGNvbnRlbnQgYXNzaXN0PC9MST4KLSAgICAgICAgICAgPExJPlZlcmlmeSA8Qj5wb3N0PC9CPiBhbmQgPEI+Z2V0PC9CPiBhcHBlYXIgYXMgcHJvcG9zYWxzLjwvTEk+Ci0gICAgICAgIDwvVUw+Ci0gICAgPExJPlZlcmlmeSBzZWxlY3Rpb24gc3luY2hyb25pemF0aW9uIGJldHdlZW4gdGhlIERlc2lnbiBwYWdlLCBTb3VyY2UgcGFnZSwgT3V0bGluZSB2aWV3LCAKLSAgICAgICAgYW5kIFByb3BlcnRpZXMgdmlldy4KLSAgICA8VUw+Ci0gICAgICAgIDxMST5Gcm9tIHRoZSBTb3VyY2UgcGFnZSwgY2xpY2sgd2l0aGluIHRoZSA8Qj5jYXJkPC9CPiBzdGFydCB0YWcuIAotICAgICAgICAgICAgVmVyaWZ5IDxCPmNhcmQ8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBPdXRsaW5lIHZpZXcgYW5kIGluIHRoZSBEZXNpZ24gCi0gICAgICAgICAgICBwYWdlIGFuZCB0aGF0IHRoZSBjb250ZW50IGFzc2lzdCBwcm9wb3NhbHMgbGlzdGVkIGFib3ZlIGZvciB0aGUKLSAgICAgICAgICAgIDxCPmNhcmQ8L0I+IHRhZyBhcHBlYXIgYXMgcHJvcGVydGllcyBpbiB0aGUgUHJvcGVydGllcyB2aWV3LiBObyB2YWx1ZXMgc2hvdWxkIGFwcGVhciBmb3IgdGhlc2UgcHJvcGVydGllcy48L0xJPgotCTxMST5Gcm9tIHRoZSBPdXRsaW5lIHZpZXcsIHNlbGVjdCB0aGUgPEI+cG9zdGZpZWxkPC9CPiB0YWcuCi0gICAgICAgICAgICBWZXJpZnkgPEI+cG9zdGZpZWxkPC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgRGVzaWduIHBhZ2UgYW5kIHRoZSBjdXJyZW50IG1hcmtlcgotICAgICAgICAgICAgaW4gdGhlIGxlZnRoYW5kIG1hcmdpbiBvZiB0aGUgU291cmNlIHBhZ2UgaW5kaWNhdGVzIHRoZSByYW5nZSBvZiB0aGUgCi0gICAgICAgICAgICA8Qj5wb3N0ZmllbGQ8L0I+IHRhZy4gVGhlIFByb3BlcnRpZXMgdmlldyBzaG91bGQgc2hvdyB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXMsCi0gICAgICAgICAgICBub25lIG9mIHdoaWNoIHNob3VsZCBoYXZlIGEgdmFsdWU6Ci0gICAgICAgICAgICAgICA8VUw+Ci0gICAgICAgICAgICAgICAgICAgPExJPm5hbWU8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST52YWx1ZTwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPmlkPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+Y2xhc3M8L0xJPgotICAgICAgICAgICAgICAgPC9VTD4KLSAgICAgICAgICAgPC9MST4KLSAgICA8L1VMPiAgIAotICAgIDwvTEk+Ci0gICAgPExJPlZlcmlmeSBlZGl0IHN5bmNocm9uaXphdGlvbiBiZXR3ZWVuIHRoZSBEZXNpZ24gcGFnZSwgU291cmNlIHBhZ2UsIE91dGxpbmUgdmlldywgYW5kIAotICAgICAgICBQcm9wZXJ0aWVzIHZpZXcgKGZvY3VzIGhlcmUgaXMgb24gYWRkaW5nIGVsZW1lbnRzL3RhZ3MpLgotICAgIDxVTD4KLSAgICAgICAgPExJPkZyb20gdGhlIFNvdXJjZSBwYWdlLCBjb3B5IGFuZCBwYXN0ZSB0aGUgPEI+Y2FyZDwvQj4gdGFnLgotICAgICAgICAgICAgPFVMPgotICAgICAgICAgICAgPExJPlBvc2l0aW9uIHRoZSBjdXJzb3IgaW4gdGhlIDxCPmNhcmQ8L0I+IHN0YXJ0IHRhZy48L0xJPgotICAgICAgICAgICAgPExJPk5vdGljZSB0aGUgcmFuZ2Ugb2YgdGhlIDxCPmNhcmQ8L0I+IHRhZyBpbiB0aGUgbGVmdGhhbmQgbWFyZ2luIGFyZWEuPC9MST4KLSAgICAgICAgICAgIDxMST5Db3B5IHRoaXMgcmFuZ2Ugb2YgbGluZXMgdXNpbmcgdGhlIDxCPkVkaXQtPkNvcHk8L0I+IHB1bGxkb3duIG1lbnUgc2VsZWN0aW9uLjwvTEk+Ci0gICAgICAgICAgICA8TEk+UGFzdGUgYWZ0ZXIgdGhlIDxCPmNhcmQ8L0I+IGVuZCB0YWcgdXNpbmcgQ3RybCtWLjwvTEk+Ci0gICAgICAgICAgICA8TEk+VmVyaWZ5IHRoZSBhcHByb3ByaWF0ZSBsaW5lcyB3ZXJlIHBhc3RlZCBuIHRoZSBTb3VyY2UgcGFnZS4KLSAgICAgICAgICAgICAgICBWZXJpZnkgdGhlIERlc2lnbiBwYWdlLCBPdXRsaW5lIHZpZXcsIGFuZCB0aGUgUHJvcGVydGllcyAKLSAgICAgICAgICAgICAgICB2aWV3IHJlZmxlY3QgdGhpcyBjaGFuZ2UuPC9MST4gICAgICAgICAKLSAgICAgICAgICAgIDwvVUw+Ci0gICAgICAgIDwvTEk+Ci0gICAgICAgIDxMST5Gcm9tIHRoZSBEZXNpZ24gcGFnZSwgYWRkIGFub3RoZXIgPEI+Y2FyZDwvQj4gdGFnLgotICAgICAgICAgICAgPFVMPgotICAgICAgICAgICAgPExJPkJyaW5nIHVwIHRoZSBwb3B1cCBtZW51IGZvciB0aGUgPEI+d21sPC9CPiB0YWcuPC9MST4KLSAgICAgICAgICAgIDxMST5TZWxlY3QgPEI+QWRkIENoaWxkLT5jYXJkPC9CPiBmcm9tIHRoZSBwb3B1cCBtZW51LjwvTEk+Ci0gICAgICAgICAgICA8TEk+VmVyaWZ5IHRoZSBTb3VyY2UgcGFnZSwgT3V0bGluZSB2aWV3LCBhbmQgdGhlIFByb3BlcnRpZXMKLSAgICAgICAgICAgICAgICB2aWV3IHJlZmxlY3QgdGhpcyBjaGFuZ2UuIE5PVEU6IGl0IHNob3VsZCBoYXZlIGdlbmVyYXRlZCBvdXQKLSAgICAgICAgICAgICAgICB0aGUgc2FtZSB0aGluZyBhcyB0aGUgb3JpZ2luYWwgY2FyZCB0YWcsIHdpdGggdGhlIGV4Y2VwdGlvbgotICAgICAgICAgICAgICAgIHRoYXQgYSA8Qj5tZXRob2Q8L0I+IGF0dHJpYnV0ZSBzaG91bGQgbm90IGV4aXN0IGluIHRoZSA8Qj5nbzwvQj4gc3RhcnQgdGFnLiA8L0xJPgotICAgICAgICAgICAgPC9VTD4KLSAgICAgICAgPC9MST4KLSAgICA8L1VMPgotICAgIDwvTEk+IAotPC9VTD4KLTxQPjxCPkNyZWF0ZSBhbmQgVmFsaWRhdGUgYW4gWE1MIEZpbGUgZnJvbSBhIHNjaGVtYTwvQj48QlI+Ci0KLTxQPih0aGVzZSBzdGVwcyBhcmUgdGFrZW4gZnJvbSB0aGUgJ0Rlc2lnbicgc21va2UgdGVzdCwgZXhjZXB0IHRoZSBTb3VyY2UgUGFnZSBpcyB0aGUgZm9jdXMpPC9QPgotPHVsPgotPGxpPgotUmlnaHQgbW91c2UgYnV0dG9uIDIgb24gdGhlIFB1cmNoYXNlT3JkZXIueHNkIGFuZCBzZWxlY3QgPGI+Q3JlYXRlIFhNTAotRmlsZTwvYj4uPC9saT4KLQotPGxpPgotQWNjZXB0IHRoZSBkZWZhdWx0IGZpbGUgbmFtZXMuPC9saT4KLQotPGxpPgotSW4gdGhlIFNlbGVjdCBSb290IEVsZW1lbnQgcGFnZSwgY2hvb3NlIDxiPnB1cmNoYXNlT3JkZXI8L2I+IGFzIHJvb3QgZWxlbWVudC48L2xpPgotCi08bGk+Ci1DaG9vc2UgPGI+Q3JlYXRlIHJlcXVpcmVkIGFuZCBvcHRpb25hbCBjb250ZW50PC9iPiB0byBjcmVhdGUgYSBtaW5pbWFsCi1kb2N1bWVudC48L2xpPgotCi08bGk+Ci1FbnRlciA8Yj5wbzwvYj4gYXMgdGhlIG5hbWVzcGFjZSBwcmVmaXguPC9saT4KLQotPGxpPk9uIEZpbmlzaCwgYSBQdXJjaGFzZU9yZGVyLnhtbCBpcyBjcmVhdGVkIGFuZCB0aGUgWE1MIEVkaXRvciBpcyBvcGVuZWQuIChTZWxlY3QgU291cmNlIFBhZ2UgaWYgbm90IGFscmVhZHkgdGhlcmUuKTwvbGk+Ci0KLTxsaT4KLVJ1biBWYWxpZGF0ZS4gVGhlIFB1cmNoYXNlT3JkZXIueG1sIHNob3VsZCBiZSBpbnZhbGlkLjwvbGk+Ci0KLTxsaT4KLURvdWJsZSBjbGljayBvbiB0aGUgZXJyb3IgbWVzc2FnZS4gSXQgc2hvdWxkIGJlIHBvc2l0aW9uZWQgdG8gdGhlIGxpbmUKLWluIGVycm9yLCBpLmUuIHRoZSA8Yj5wYXJ0TnVtPC9iPiBhdHRyaWJ1dGUuIEl0IGlzIGludmFsaWQgYmVjYXVzZSB0aGUKLXZhbHVlIGlzIG5vdCBzZXQgdG8gbWF0Y2ggdGhlIFhNTCBzY2hlbWEgcGF0dGVybiBmYWNldCAiZDMtW0EtWl17Mn0iICgzCi1kaWdpdHMgZm9sbG93ZWQgYnkgMiBjaGFyYWN0ZXJzKS48L2xpPgotCi08bGk+SW4gdGhlIFNvdXJjZSBWaWV3LCBsb2NhdGUgdGhlIDxiPnBhcnROdW08L2I+IGF0dHJpYnV0ZSB1bmRlciBlbGVtZW50IGl0ZW0uCi1FbnRlciB0aGUgdmFsdWUgMzMzLUFCLjwvbGk+Ci0KLTxsaT4KLVJ1biBWYWxpZGF0ZS4gVGhlIFB1cmNoYXNlT3JkZXIueG1sIGRvY3VtZW50IHNob3VsZCBub3cgYmUgdmFsaWQuPC9saT4KLTwvVUw+Ci08VUw+Ci0gIDxMST4KLSAgPEhSPjwvTEk+Ci0gIDxsaT5QbGFjZSB0aGUgY3Vyc29yIGFmdGVyIHRoZSAmbHQ7aXRlbXMmZ3Q7IHRhZyBhbmQgYmVzdXJlICJpdGVtIiBpcyAKLSAgbGlzdGVkIGluIHRoZSBjb250ZW50IGFzc2lzdCBsaXN0LiA8L2xpPgotPGxpPlJlbmFtZSB0aGUgcHVyY2hhc2VPcmRlci54c2QgdG8sIHNheSwgcHVyY2hhc2VPcmRlckhPTEQueHNkPC9saT4KLTxsaT5WZXJpZnkgdGhhdCBjb250ZW50IGFzc2lzdCBzdGlsbCBnaXZlcyB5b3UgIml0ZW0iIGFzIGFib3ZlLjwvbGk+Ci08bGk+Tm93IHNlbGVjdCB0aGUgIlJlbG9hZCBEZXBlbmRhbmNpZXMiIGJ1dHRvbi48L2xpPgotPGxpPlZlcmlmeSB0aGF0IG5vdyBjb250ZW50IGFzc2lzdCBubyBsb25nZXIgbGlzdHMgYW55IGl0ZW1zIG90aGVyIAotdGhhdCB0aGUgbWFjcm8gImNvbW1lbnQiLjwvbGk+Ci08bGk+UmVwZWF0IG1ha2luZyBwdXJjaGFzZU9yZGVyLnhzZCB3b3JrYWJsZSBhZ2Fpbi48L2xpPgotPC91bD4KLTxQPjwvUD48UD48L1A+PFA+PC9QPjxQPjwvUD48UD48L1A+PC9QPgotPFA+PEI+T3BlbiBhbiBYTUwgRmlsZSBmb3IgYSBzaGlwcGVkIERURCBjYXRhbG9nIGVudHJ5PC9CPjxCUj4KLTxCUj4KLVtwdXQgaW4gb3B0aW9uYWwgc2VjdGlvbiAuLiB0aGlzIGlzbid0IGEgY3VzdG9tZXIgc2NlbmVyaW9dPEJSPgotVG8gdmVyaWZ5IHRoYXQgc2hpcHBlZCBEVERzIGFyZSB3b3JraW5nOjxCUj4KLTxVTD4KLTxMST4KLVVzZSBhIHdlYiBwcm9qZWN0IHdpdGggYSBzdGFuZGFyZCB3ZWIueG1sIGZpbGUgaW4gaXQuIEJlIHN1cmUgCi10aGVyZSBpcyBubyB3ZWItYXBwXzJfMi5kdGQgZmlsZSBpbiB0aGUgZGlyZWN0b3J5LiBJbiB0aGUgd2ViLnhtbCBmaWxlIAotaXRzZWxmLCBtYW5nbGUgdGhlIHdlYi1hcHBfMl8yLmR0ZCBmaWxlbmFtZSBpbiB0aGUgc3lzdGVtIGlkIGEgbGl0dGxlLCBzdWNoIGFzIAotY2hhbmdlIGl0IHRvIHhlYi1hcHBfMl8yLmR0ZCB0byBiZSBzdXJlIGl0IGNhbid0IGJlIGZvdW5kIHZpYSB0aGUKLW5vcm1hbCBodHRwIG1ldGhvZCAoVGhpcyBpc24ndCByZWFsbHkgbmVjZXNzYXJ5IGZvciB0aGUgZnVudGlvbiB0byB3b3JrLAotaXRzIGp1c3QgdG8gYmUgc3VyZSBvbmx5IHRoZSBjYXRhbG9nIGZ1bmN0aW9uIGlzIGluIGVmZmVjdCkuCi08L0xJPgotPExJPgotR28gdG8gdGhlIHByZWZlcmVuY2VzIHBhZ2UsIGFuZCBvcGVuIHRoZSBYTUwgQ2F0YWxvZy4gVmVyaWZ5IHRoZXJlIAotaXMgYW4gZW50cnkgZm9yIC0vL1N1biBNaWNyb3N5c3RlbXMsIEluYy4vL0RURCBXZWIgQXBwbGljYXRpb24gMi4yLy9FTi4KLTwvTEk+Ci08TEk+Ci1PbmNlIGFsbCB0aGUgcHJlcCB3b3JrIGlzIGRvbmUgKGZpbGVzIGRlbGV0ZWQsIHRleHQgbW9kaWZpZWQpLCB5b3Ugc2hvdWxkIAotZXhpdCBhbmQgcmVzdGFydCBFY2xpcHNlIHRvIGJlIHN1cmUgeW91IGhhdmUgYSBmcmVzaCBzdGFydC4KLTwvTEk+Ci08TEk+Ci1PcGVuIHRoZSB3ZWIueG1sIGZpbGUgYW5kIGJlIHN1cmUgdGhhdCBjb250ZW50IGFzc2lzdCB3b3JrcyBmb3IgdGhhdCBmaWxlLgotRm9yIGV4YW1wbGUsIHJpZ2h0IGFmdGVyIHRoZSBlbmQgb2YgdGhlICZsdDsvZGlzcGxheS1uYW1lJmd0OyB0YWcsIGN0cmwtc3BhY2UgCi1zaG91bGQgcHJvdmlkZSBhIGxvbmcgbGlzdCBvZiBlbGVtZW50cywgc3RhcnRpbmcgd2l0aCBzZXJ2bGV0LCBzZXJ2bGV0LW1hcHBpbmcsIGV0Yy4KLVRoaXMgaW5kaWNhdGVzIHRoZSBzaGlwcGVkIERURCBmdW5jdGlvbiBpcyB3b3JraW5nIGFuZCBjb25maWd1cmVkIAotY29ycmVjdGx5IChhdCBsZWFzdCBmb3IgdGhlIHdlYi54bWwgZmlsZSkuCi08L0xJPgotPC9VTD4KLTwvUD4KLTxQPjxCPkNyZWF0ZSBhbiBYTUwgRmlsZSBmcm9tIGEgbmV3IERURCBjYXRhbG9nIGVudHJ5PC9CPjxCUj48SU1HIGJvcmRlcj0iMCIgaGVpZ2h0PSI2MyIgc3JjPSJ1MDExYW5pLmdpZiIgd2lkdGg9IjYzIj48L1A+Ci0KLTxiPlRoZSBmb2xsb3dpbmcgY29tZXMgZGlyZWN0bHkgZnJvbSB0aGUgJ0Rlc2lnbicgU21va2UgVGVzdDogWE1MIENhdGFsb2cgZm9yIFhNTCBTY2hlbWE8L2I+Ci08dWw+Ci08bGk+Ci1SdW4gVmFsaWRhdGUgb24gUHVyY2hhc2VPcmRlci54bWwgdG8gbWFrZSBzdXJlIGl0IGlzIHZhbGlkPC9saT4KLQotPGxpPgotQ3JlYXRlIGEgbmV3IHByb2plY3QsIFhNTFRlc3QyPC9saT4KLQotPGxpPgotTW92ZSB0aGUgUHVyY2hhc2VPcmRlci54c2QgaW50byBYTUxUZXN0Mi48L2xpPgotCi08bGk+Ci1SdW4gVmFsaWRhdGUgb24gUHVyY2hhc2VPcmRlci54bWwuIFlvdSB3aWxsIG5vdGljZSB0aGF0IGl0IGlzIG5vIGxvbmdlcgotdmFsaWQuIFRoZSBlcnJvciBtZXNzYWdlIHNob3VsZCBnaXZlIHlvdSBhIGhpbnQgdGhhdCB0aGUgZmlsZSBQdXJjaGFzZU9yZGVyLnhzZAotY2FuIG5vIGxvbmdlciBiZSBmb3VuZC48L2xpPgotCi08bGk+Ci1PcGVuIHRoZSBXaW5kb3ctPlByZWZlcmVuY2VzIGFuZCBzZWxlY3QgdGhlIFhNTCBDYXRhbG9nLjwvbGk+Ci0KLTxsaT4KLUVudGVyIHRoZSBwYWlyIDxiPklkID0gUHVyY2hhc2VPcmRlci54c2QgVXJpID0gZjpcZWNsaXBzZVxYTUxUZXN0MlxQdXJjaGFzZU9yZGVyLnhzZDwvYj48L2xpPgotCi08YnI+T3IgYWx0ZXJuYXRpdmVseSwgeW91IGNhbiB1c2UgYSByZWxhdGl2ZSBwYXRoIHRvIHRoZSBpbnN0YWxsIGRpcmVjdG9yeQotb2YgdGhlIHdvcmtiZW5jaCBhcyBmb2xsb3dzOgotPGJyPjxiPklkID0gUHVyY2hhc2VPcmRlci54c2QgVXJpID0gLlxYTUxUZXN0MlxQdXJjaGFzZU9yZGVyLnhzZDwvYj4KLTxsaT4KLUNsaWNrIG9uIHRoZSBSZWxvYWQgYnV0dG9uIHRvIHJlbG9hZCB0aGUgY2F0YWxvZyBzZXR0aW5ncy48L2xpPgotCi08bGk+Ci1SdW4gVmFsaWRhdGUuIFRoZSBQdXJjaGFzZU9yZGVyLnhtbCBkb2N1bWVudCBzaG91bGQgbm93IGJlIHZhbGlkLjwvbGk+Ci08L3VsPgotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgICAgICAgICAgICAgICAgIFNhdmUvVmFsaWRhdGUgdGVzdCBjYXNlcwotICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0+Ci08SDI+PEZPTlQgY29sb3I9IiMwMDAwZmYiPlNhdmUvVmFsaWRhdGUgdGVzdCBjYXNlczwvRk9OVD48L0gyPgotPFA+PEI+U2F2aW5nIGFuIFhNTCBGaWxlPC9CPjxCUj4KLShOT1RFOiB0aGUgPEI+SWRlbnRpZnkgYSBsb2NhbCBEVEQ8L0I+IHRlc3QgY2FzZSB0ZXN0cyB0aGUgc2F2ZSBwcm9tcHQgb24gYSBmaWxlIGNsb3NlLik8L1A+Ci08VUw+Ci0gIDxMST5JZiBhbnkgZmlsZXMgYXJlIG9wZW4sIHNlbGVjdCA8Qj5GaWxlLSZndDtDbG9zZSBBbGw8L0I+IChvciA8Qj5DdHJsK1NoaWZ0K0Y0PC9CPikgdG8gY2xvc2UgdGhlbS48L0xJPgotICA8TEk+T3BlbiBhbnkgeG1sIGZpbGUgaW4gdGhlIDxCPlhNTFRlc3QyPC9CPiBwcm9qZWN0LjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIGZvbGxvd2luZyAobm8tY2hhbmdlcy1tYWRlIGNvbmRpdGlvbik6Ci0gIDxVTD4KLSAgICA8TEk+PEI+RmlsZS0mZ3Q7U2F2ZTwvQj4gaXMgZGlzYWJsZWQuPC9MST4KLSAgICA8TEk+PEI+RmlsZS0mZ3Q7U2F2ZSBBbGw8L0I+IGlzIGRpc2FibGVkLjwvTEk+Ci0gICAgPExJPjxCPkZpbGUtJmd0O1NhdmUgQXM8L0I+IGlzIGVuYWJsZWQuPC9MST4KLSAgICA8TEk+dGhlIDxCPlNhdmU8L0I+IHRvb2xiYXIgYnV0dG9uIChhIGRpc2tldHRlKSBpcyBkaXNhYmxlZC48L0xJPgotICAgIDxMST50aGUgPEI+U2F2ZSBBczwvQj4gdG9vbGJhciBidXR0b24gaXMgZW5hYmxlZC48L0xJPgotICAgIDxMST48Qj5TYXZlPC9CPiBpcyBkaXNhYmxlZCBvbiB0aGUgU291cmNlIHBvcHVwIG1lbnUuIDxGT05UIGNvbG9yPSIjZmYwMDAwIj5Xb3VsZCBiZSBuaWNlIGlmIHRoZSBEZXNpZ24gcG9wdXAgbWVudSBhbHNvIGhhZCBhIFNhdmUgc2VsZWN0aW9uLiBPcGVuIGEgc3VnZ2VzdGlvbiBkZWZlY3QuPC9GT05UPjwvTEk+Ci0gICAgPExJPm5vIDxCPio8L0I+IGFwcGVhcnMgaW4gdGhlIGZpbGUgdGFiLjwvTEk+Ci0gIDwvVUw+PC9MST4KLSAgPExJPk1ha2UgYSBjaGFuZ2UgaW4gdGhlIFNvdXJjZSBwYWdlLjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIGZvbGxvd2luZyAoY2hhbmdlcy1tYWRlIGNvbmRpdGlvbik6Ci0gIDxVTD4KLSAgICA8TEk+PEI+RmlsZS0mZ3Q7U2F2ZTwvQj4gaXMgZW5hYmxlZC48L0xJPgotICAgIDxMST48Qj5GaWxlLSZndDtTYXZlIEFsbDwvQj4gaXMgZW5hYmxlZDwvTEk+Ci0gICAgPExJPnRoZSA8Qj5TYXZlPC9CPiB0b29sYmFyIGJ1dHRvbiAoYSBkaXNrZXR0ZSkgaXMgZW5hYmxlZC48L0xJPgotICAgIDxMST48Qj5TYXZlPC9CPiBpcyBlbmFibGVkIG9uIHRoZSBTb3VyY2UgcG9wdXAgbWVudS48L0xJPgotICAgIDxMST5hIDxCPio8L0I+IGFwcGVhcnMgaW4gdGhlIGZpbGUgdGFiLjwvTEk+Ci0gIDwvVUw+PC9MST4KLSAgPExJPkhpdCA8Qj5DdHJsK1M8L0I+LiA8L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBuby1jaGFuZ2VzLW1hZGUgY29uZGl0aW9ucyBhcHBseS48L0xJPgotICA8TEk+TWFrZSBhIGNoYW5nZSBpbiB0aGUgRGVzaWduIHBhZ2UuPC9MST4KLSAgPExJPlZlcmlmeSB0aGUgY2hhbmdlcy1tYWRlIGNvbmRpdGlvbnMgYXBwbHkuPC9MST4KLSAgPExJPkZpbGUtJmd0O1NhdmUgQWxsPEI+PC9CPi48L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBuby1jaGFuZ2VzLW1hZGUgY29uZGl0aW9ucyBhcHBseS48L0xJPgotICA8TEk+TWFrZSBhIGNoYW5nZSBpbiB0aGUgUHJvcGVydGllcyB2aWV3LjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIGNoYW5nZXMtbWFkZSBjb25kaXRpb25zIGFwcGx5LjwvTEk+Ci0gIDxMST5TZWxlY3QgPEI+U2F2ZTwvQj4gZnJvbSB0aGUgU291cmNlIHBvcHVwIG1lbnUuPC9MST4KLSAgPExJPlZlcmlmeSB0aGUgbm8tY2hhbmdlcy1tYWRlIGNvbmRpdGlvbnMgYXBwbHkuPC9MST4KLSAgPExJPkNsb3NlIGFuZCB0aGVuIHJlb3BlbiB0aGUgZmlsZS48L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBjaGFuZ2VzIHRoYXQgd2VyZSBtYWRlIGluIHRoZSBwcmV2aW91cyBzdGVwcyBhcHBlYXIgaW4gdGhlIERlc2lnbiBhbmQgU291cmNlIHBhZ2VzLjwvTEk+Ci08L1VMPgotPFA+PEI+U2F2aW5nIGFuIFhNTCBGaWxlIGFjcm9zcyBtdWx0aXBsZSBwZXJzcGVjdGl2ZXMgKG9wdGlvbmFsKTwvQj48L1A+Ci08VUw+Ci0gIDxMST5PcGVuIGFueSB4bWwgZmlsZSBpbiB0aGUgPEI+WE1MVGVzdDI8L0I+IHByb2plY3QuPC9MST4KLSAgPExJPk1ha2UgYSBjaGFuZ2UgdG8gdGhlIGZpbGUuPC9MST4KLSAgPExJPk9wZW4gYW5vdGhlciBYTUwgUGVyc3BlY3RpdmUgYnk6Ci0gIDxVTD4KLSAgICA8TEk+PEI+c2VsZWN0aW5nIFBlcnNwZWN0aXZlLSZndDtPcGVuLSZndDtPdGhlci4uLjwvQj48L0xJPgotICAgIDxMST53aGlsZSBob2xkaW5nIGRvd24gdGhlIDxCPlNoaWZ0PC9CPiBrZXksIHNlbGVjdCA8Qj5YTUw8L0I+LjwvTEk+Ci0gIDwvVUw+PC9MST4KLSAgPExJPlZlcmlmeSBhbm90aGVyIFhNTCBQZXJzcGVjdGl2ZSBidXR0b24gYXBwZWFycyBpbiB0aGUgbGVmdGhhbmQgc2lkZSBvZiB0aGUgV29ya2JlbmNoIHRvIHJlcHJlc2VudCB0aGlzIHNlY29uZCBwZXJzcGVjdGl2ZS48L0xJPgotICA8TEk+T3BlbiB0aGUgc2FtZSB4bWwgZmlsZSBhcyBpbiB0aGUgZmlyc3Qgc3RlcCBhYm92ZS48L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBjaGFuZ2VzLW1hZGUgY29uZGl0aW9ucyBhcHBseSBpbiBib3RoIFhNTCBQZXJzcGVjdGl2ZXMgYW5kIHZlcmlmeSB0aGF0IHRoZSBjaGFuZ2VzIG1hZGUgdG8gdGhlIGZpbGUgaW4gdGhlIGZpcnN0IHBlcnNwZWN0aXZlIGFwcGVhciBpbiB0aGUgc2FtZSBmaWxlIGluIHRoZSBzZWNvbmQgcGVyc3BlY3RpdmUuIDxGT05UIGNvbG9yPSIjZmYwMDAwIj5UaGUgKiBuZXZlciBhcHBlYXJzIGluIHRoZSBmaWxlIHRhYiBvZiB0aGUgc2Vjb25kIHBlcnNwZWN0aXZlIGV2ZW4gd2hlbiBtYWtlIGNoYW5nZXMgdG8gdGhlIGZpbGUgaW4gdGhlIHNlY29uZCBwZXJzcGVjdGl2ZS4gVGFsayB0byBEYXZpZC48L0ZPTlQ+PC9MST4KLSAgPExJPk1ha2Ugc29tZSBjaGFuZ2VzIHRvIHRoZSBmaWxlIGluIHRoZSBzZWNvbmQgcGVyc3BlY3RpdmUuPC9MST4KLSAgPExJPlZlcmlmeSB0aGVzZSBjaGFuZ2VzIGFwcGVhciBpbiB0aGUgc2FtZSBmaWxlIGluIHRoZSBmaXJzdCBwZXJzcGVjdGl2ZS48L0xJPgotICA8TEk+Q2xvc2UgdGhlIGZpbGUgaW4gdGhlIHNlY29uZCBwZXJzcGVjdGl2ZSBhbmQgcmVzcG9uZCA8Qj5ZZXM8L0I+IHRvIHRoZSBzYXZlIGNoYW5nZXMgcHJvbXB0LjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIG5vLWNoYW5nZXMtbWFkZSBjb25kaXRpb24gYXBwbGllcyBpbiB0aGUgZmlyc3QgcGVyc3BlY3RpdmUuPC9MST4KLTwvVUw+Ci08UD48Qj5WYWxpZGF0aW5nIGEgbm9uIHdlbGwgZm9ybWVkIFhNTCBGaWxlIChubyBEVEQvU2NoZW1hKTwvQj48QlI+Ci0oTk9URTogaXQncyBpbXBvcnRhbnQgdGhhdCB0aGUgZm9sbG93aW5nIGJlIHR5cGVkIGluLiBUaGlzIHRlc3QgY2FzZSB0cmllcyB0byBjb3ZlciBzb21lIG9mIHRoZSBtb3JlIGNvbW1vbiBlcnJvcnMgdGhhdCByZW5kZXIgYW4gWE1MIGZpbGUgYXMgbm90IGJlaW5nIHdlbGwtZm9ybWVkLiBJdCBpcyBub3QgaW50ZW5kZWQgdG8gdmVyaWZ5IHRoYXQgYWxsIHBvc3NpYmxlIGVycm9ycyBhcmUgYmVpbmcgZGV0ZWN0ZWQgYW5kIGdyYWNlZnVsbHkgaGFuZGxlZC4gKTwvUD4KLTxVTD4KLSAgPExJPlNlbGVjdCB0aGUgPEI+Q3JlYXRlIGEgbmV3IFhNTCBmaWxlPC9CPiB0b29sYmFyIGJ1dHRvbi48L0xJPjxMST5BY2NlcHQgdGhlIGRlZmF1bHQgdG8gPEI+Q3JlYXRlIGEgbmV3IFhNTCBmaWxlPC9CPjwvTEk+Ci0gIDxMST5HbyB0byB0aGUgTmV4dCBwYWdlCi0gICAgPFVMPgotICAgICAgICA8TEk+U2VsZWN0IDxCPlhNTFRlc3QyPC9CPiBhcyB0aGUgZm9sZGVyPC9MST4KLSAgICAgICAgPExJPlNwZWNpZnkgYSBGaWxlIG5hbWUgb2YgPEI+Tm9uV2VsbEZvcm1lZDwvQj48L0xJPgotICAgICAgICA8TEk+U2VsZWN0IDxCPkZpbmlzaDwvQj48L0xJPgotICA8L1VMPjwvTEk+Ci0gIDxMST5Qcm9tcHQgZm9yIGNvbnRlbnQgYXNzaXN0LjwvTEk+Ci0gIDxMST5TZWxlY3QgPEI+Jmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7VVRGLTgmcXVvdDs/Jmd0Oy48L0I+PC9MST4KLSAgPExJPkNyZWF0ZSBhIG5ldyBsaW5lIGFmdGVyIHRoZSBYTUwgZGVjbGFyYXRpb24uPC9MST4KLSAgPExJPlByb21wdCBmb3IgY29udGVudCBhc3Npc3QuPC9MST4KLSAgPExJPlNlbGVjdCBjb21tZW50LjwvTEk+Ci0gIDxMST5FbWJlZCBtb3JlIHRoYW4gMiBjb25zZWN1dGl2ZSBkYXNoZXMgaW4gdGhlIGNvbW1lbnQuIAotICAgICAgICA8Rk9OVCBjb2xvcj0iIzAwMDBmZiI+KE5PVEU6IG1vcmUgdGhhbiAyIGNvbnNlY3V0aXZlIGRhc2hlcyBjYW4gbm90IGJlIGVtYmVkZGVkIHdpdGhpbiBhIGNvbW1lbnQpPC9GT05UPjwvTEk+Ci0gIDxMST5UeXBlIGluIHRoZSByZW1haW5pbmcgbGluZXMgYXMgc2hvd24gYmVsb3c6IAotICAgICAgICA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+KEkgY2FuJ3Qgc2hvdyB0aGUgbGluZXMgdW50aWwgZGVmZWN0IDE3Nzc1NSBpcyBmaXhlZCAuLi4gdW50aWwgdGhlbiwgaGVyZSdzIHRoZSB0eXBlIG9mIHRoaW5ncyB0aGF0IGNhdXNlIAotICAgICAgICBhIGRvY3VtZW50IHRvIG5vdCBiZSB3ZWxsLWZvcm1lZCk6PC9GT05UPgotICA8VUw+Ci0gICAgPExJPmNyZWF0ZSBhIHN0YXJ0IGFuZCBlbmQgdGFnIHRoYXQgZG9uJ3QgbWF0Y2ggaW4gdGhlaXIgY2FzZSBzZW5zaXRpdml0eSAKLSAgICAgICAgKGUuZy4sICZsdDt0YWcmZ3Q7IGFuZCAmbHQ7L1RhZyZndDspLiA8L0xJPgotICAgIDxMST5jcmVhdGUgYSBzdGFydCBhbmQgZW5kIHRhZyB3aGVyZSB0aGUgc3RhcnQgdGFnIGNvbnRhaW5zIGFuIGF0dHJpYnV0ZSB2YWx1ZSB0aGF0IGlzIG5vdCAKLSAgICAgICAgZW5jbG9zZWQgaW4gcXVvdGVzLgotICAgICAgICA8Rk9OVCBjb2xvcj0iIzAwMDBmZiI+KE5PVEU6IHRoaXMgaXMgcGVybWl0dGVkIGluIEhUTUwsIGJ1dCBub3QgWE1MKTwvRk9OVD48L0xJPgotICAgIDxMST5jcmVhdGUgdGFncyB0aGF0IGFyZSBub3QgcHJvcGVybHkgbmVzdGVkLgotICAgICAgICA8Rk9OVCBjb2xvcj0iIzAwMDBmZiI+KE5PVEU6IGEgY2hpbGQgdGFnIG11c3QgYmUgY29tcGxldGVkIGJlZm9yZSBpdHMgcGFyZW50IHRhZyk8L0ZPTlQ+PC9MST4KLSAgICA8TEk+Y3JlYXRlIGEgc3RhcnQgdGFnIHdpdGhvdXQgYSBjb3JyZXNvbmRpbmcgZW5kIHRhZy4KLSAgICAgICAgPEZPTlQgY29sb3I9IiMwMDAwZmYiPihOT1RFOiBhbGwgc3RhcnQgdGFncyBtdXN0IGhhdmUgYSBjb3JyZXNwb25kaW5nIGVuZCB0YWcgdW5sZXNzIHRoZSAKLSAgICAgICAgdGFnIGlzIGFuIGVtcHR5IHRhZywgaW4gd2hpY2ggY2FzZSB0aGUgc2hvcnRoYW5kIHZlcnNpb24gY2FuIGJlIHVzZWQgKCZsdDtzaG9ydFRhZy8mZ3Q7KSkuPC9GT05UPjwvTEk+Ci0gICAgPExJPmRvIG5vdCBwcm92aWRlIGFuIGF0dHJpYnV0ZSB2YWx1ZSAoPSZxdW90O3ZhbHVlJnF1b3Q7KS4KLSAgICAgICAgPEZPTlQgY29sb3I9IiMwMDAwZmYiPihOT1RFOiB0aGlzIGlzIHBlcm1pdHRlZCBpbiBIVE1MIGZvciB0aG9zZSBhdHRyaWJ1dGVzIHRoYXQgaGF2ZSAKLSAgICAgICAgb25seSBvbmUgdmFsdWUsIGJ1dCBpdCdzIG5vdCB2YWxpZCBpbiBYTUwpPC9GT05UPjwvTEk+Ci0gICAgIDxMST5kZWZpbmUgYW4gYXR0cmlidXRlIG1vcmUgdGhhbiBvbmNlIGluIGEgc3RhcnQgdGFnLjwvTEk+Ci0gIDwvVUw+PC9MST4KLSAgPExJPlNhdmUgdGhlIGZpbGUuPC9MST4KLSAgPExJPlZlcmlmeSBlcnJvcnMgYXJlIGxpc3RlZCBpbiB0aGUgVGFza3MgdmlldyBmb3IgdGhlIGFib3ZlIHZpb2xhdGlvbnMgYW5kIHRoYXQgZXJyb3IgbWFya2VycyBhcHBlYXIgb24gdGhlIGFwcHJvcHJpYXRlIAotICAgICAgICAgbGluZXMgaW4gdGhlIFNvdXJjZSBwYWdlLiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+SSdtIG5vdCBzdXJlIGhvdyB0aGUgRGVzaWduIHBhZ2UgaGFuZGxlcyBhbnkgb2YgdGhlc2UgdmlvbGF0aW9ucyAKLSAgICAgICAgIGFuZCB3aGF0IHdpbGwgYXBwZWFyIGluIHRoZSBPdXRsaW5lIGFuZCBQcm9wZXJ0aWVzIHZpZXcuIFRhbGsgdG8gQ3JhaWcgYW5kIERhdmlkLjwvRk9OVD48L0xJPgotICA8TEk+UmVvcGVuIHRoZSBmaWxlIGFuZCB2ZXJpZnkgZXZlcnl0aGluZyB3YXMgc2F2ZWQuPC9MST4KLTwvVUw+Ci0KLQotPFA+PEI+VmFsaWRhdGUgYW4gWE1MIEZpbGUgYmFzZWQgb24gYSBEVEQ8L0I+PC9QPgotPFVMPgotPExJPk9wZW4gPEI+ZnJvbVNjcmF0Y2gueG1sPC9CPi48L0xJPgotPExJPkRlbGV0ZSBhIGNoYXJhY3RlciBmcm9tIG9uZSBvZiB0aGUgc3RhcnQgdGFncyAobWlzdHlwaW5nIGEgdGFnIGlzIG5vdCB1bmNvbW1vbikuPC9MST4KLTxMST5Qcm9tcHQgZm9yIGNvbnRlbnQgYXNzaXN0IHdpdGhpbiB0aGUgYmFkIHRhZy4gVmVyaWZ5IGEgbWVzc2FnZSBhcHBlYXJzIGluIHRoZSBzdGF0dXMgYXJlYQotb2YgdGhlIFdvcmtiZW5jaCBpbmRpY2F0aW5nIHRoYXQgdGhlIGJhZCB0YWcgaXMgYW4gdW5rbm93biB0YWcuPC9MST4KLTxMST5TZWxlY3QgdGhlIDxCPlZhbGlkYXRlPC9CPiB0b29sYmFyIGJ1dHRvbi48L0xJPgotPExJPlZlcmlmeSBhbiBlcnJvciBhcHBlYXJzIGluIHRoZSBUYXNrcyB2aWV3IGFuZCBhbiBlcnJvciBtYXJrZXIgYXBwZWFycyBpbiB0aGUgU291cmNlIHBhZ2UKLXRvIGZsYWcgdGhlIGludmFsaWQgdGFnLjwvTEk+Ci08TEk+U2VsZWN0IDxCPkVkaXQtPlVuZG88L0I+IGZyb20gdGhlIFNvdXJjZSBwYWdlLjwvTEk+Ci08TEk+VmVyaWZ5IHRoZSBiYWQgdGFnIGVycm9yIG5vIGxvbmdlciBhcHBlYXJzIGluIHRoZSBUYXNrcyB2aWV3LjwvTEk+Ci08TEk+UmVtb3ZlIHRoZSA8Qj5IZWFkZXI8L0I+IGVuZCB0YWcgZnJvbSB0aGUgU291cmNlIHBhZ2UuPC9MST4KLTxMST5TYXZlIHRoZSBmaWxlLjwvTEk+Ci08TEk+VmVyaWZ5IGFuIGVycm9yIGFwcGVhcnMgaW4gdGhlIFRhc2tzIHZpZXcgaW5kaWNhdGluZyB0aGF0IHRoZSA8Qj5IZWFkZXI8L0I+IGVuZCB0YWcgaXMgbWlzc2luZzwvTEk+Ci08TEk+Q2xvc2UgdGhlIGZpbGUsIHJlc3BvbmRpbmcgPEI+WWVzPC9CPiB0byB0aGUgc2F2ZSBjaGFuZ2VzIHByb21wdC48L0xJPgotPExJPkRvdWJsZS1jbGljayBvbiB0aGUgZXJyb3IgaW4gdGhlIFRhc2tzIHZpZXcsIGFuZCB2ZXJpZnkgPEI+ZnJvbVNjcmF0Y2gueG1sPC9CPiBvcGVucyB0byB0aGUKLWFwcHJvcHJpYXRlIGxpbmUgaW4gdGhlIFNvdXJjZSBwYWdlIG9mIHRoZSBYTUwgRWRpdG9yLjwvTEk+Ci08TEk+SGVyZSdzIHNvbWUgb3RoZXIgdmlvbGF0aW9ucyB0aGF0IGNhbiBiZSBhdHRlbXB0ZWQ6Ci08VUw+Ci08TEk+U3BlY2lmeSBhIGJhZCBhdHRyaWJ1dGUuPC9MST4KLTxMST5TcGVjaWZ5IGEgYmFkIGF0dHJpYnV0ZSB2YWx1ZS48L0xJPgotPExJPlNwZWNpZnkgY2hpbGQgdGFncyBvdXQgb2Ygc2VxdWVuY2luZyBvcmRlcjwvTEk+Ci08TEk+VmlvbGF0ZSB0aGUgb2NjdXJyZW5jZSBpbmRpY2F0b3IgZm9yIGEgdGFnIChlLmcuLCBpZiB0aGUgRFREIHNob3dzID8sIHRoZW4gb25seQotMCBvciAxIG9jY3VycmVuY2VzIG9mIHRoZSB0YWcgaXMgcGVybWl0dGVkKS4KLTwvVUw+PC9MST4KLTxMST5TYXZlIHRoZSBmaWxlLjwvTEk+Ci08TEk+VmVyaWZ5IGVycm9ycyBhcmUgbGlzdGVkIGluIHRoZSBUYXNrcyB2aWV3IGZvciB0aGUgYWJvdmUgdmlvbGF0aW9ucyBhbmQgdGhhdCBlcnJvciBtYXJrZXJzIGFwcGVhciBvbiB0aGUgYXBwcm9wcmlhdGUgCi1saW5lcyBpbiB0aGUgU291cmNlIHBhZ2UuIDxGT05UIGNvbG9yPSIjZmYwMDAwIj5JJ20gbm90IHN1cmUgaG93IHRoZSBEZXNpZ24gcGFnZSBoYW5kbGVzIGFueSBvZiB0aGVzZSB2aW9sYXRpb25zIAotYW5kIHdoYXQgd2lsbCBhcHBlYXIgaW4gdGhlIE91dGxpbmUgYW5kIFByb3BlcnRpZXMgdmlldy4gVGFsayB0byBDcmFpZyBhbmQgRGF2aWQuPC9GT05UPjwvTEk+Ci08TEk+UmVvcGVuIHRoZSBmaWxlIGFuZCB2ZXJpZnkgZXZlcnl0aGluZyB3YXMgc2F2ZWQuPC9MST4KLTwvVUw+Ci0KLTwhLS0gIHJlbW92ZWQgc2luY2UgZG9uZSBlbHNld2hlcmUgYXMgcGFydCBvZiBvdGhlciBzY2VuZXJpb3MKLTxQPjxCPlZhbGlkYXRlIGFuIFhNTCBGaWxlIGJhc2VkIG9uIGEgU2NoZW1hPC9CPjxCUj4KLS0tPgotPElNRyBib3JkZXI9IjAiIGhlaWdodD0iNjMiIHNyYz0idTAxMWFuaS5naWYiIHdpZHRoPSI2MyI+PC9QPgotCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2UgU3BlY2lmaWMgdGVzdCBjYXNlcwotICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0+Ci08SDI+PEI+PEZPTlQgY29sb3I9IiMwMDAwZmYiPlNvdXJjZSBTcGVjaWZpYyB0ZXN0IGNhc2VzIChvcHRpb25hbCk8L0ZPTlQ+PC9CPjwvSDI+Ci08UD48Qj5Vc2luZyB0aGUgQXV0byBDb21wbGV0aW9uIENvbnRlbnQgQXNzaXN0IFByZWZlcmVuY2U8L0I+PEJSPgotPFVMPgotPExJPk9wZW4gYSBhbnkgWE1MIGZpbGUgdGhhdCBoYXMgZW5vdWdoIHRhZ3MgdG8gcHJvdmlkZSBzeW50YXggaGlnaHRsaWdodGluZy48L0xJPgotPExJPldoaWxlIHRoYXQgZmlsZSBpcyBsZWZ0IG9wZW4sIGdvIHRvIHRoZSBQcmVmZXJlbmNlcyBwYWdlLCBzZWxlY3QKLVhNTCBFZGl0b3IsIHRoZW4gU291cmNlIFN0eWxlcy4gPC9MST4KLTxMST5PbiB0aGF0IHBhZ2UsIHVzZSB0aGUgbW91c2UgdG8gInNlbGVjdCIgYSB0YWcgbmFtZS4gVGhlIHRhZyBuYW1lIGlzIG5vdCBsaXRlcmFsbHkKLXNlbGVjdGVkLCBidXQgd2hlbiB5b3UgY2xpY2sgb24gYW4gZWxlbWVudCBpbiB0aGUgZXhhbXBsZSB0ZXh0LCB0aGUgbGlzdAotYWJvdmUgaXQgd2lsbCBkaXNwbGF5IHRoZSB0eXBlIG9mIGVsZW1lbnQgaXQgaXMsIGFuZCB3aGF0IGl0cyBjdXJyZW50IGNvbG9ycyBhcmUuPC9MST4KLTxMST5Gb3IgInRhZyBuYW1lIiwgc2VsZWN0IHRoZSBib2xkIGNoZWNrIGJveC4gVGhlbiBwcmVzcyBBcHBseSwgYW5kIHlvdSBzaG91bGQKLXNlZSB0aGUgY2hhbmdlIHRha2UgZWZmZWN0IGluIHlvdXIgYWN0aXZlIGVkaXRvci48L0xJPgotPExJPlNlbGVjdCAiRGVmYXVsdHMiIGFuZCBtYWtlIHN1cmUgdGhlIHRhZyBuYW1lcyBhcmUgc2V0IGJhY2sgdG8gbm90IGJvbGQuPC9MST4KLTwvVUw+Ci08SU1HIGJvcmRlcj0iMCIgaGVpZ2h0PSI2MyIgc3JjPSJ1MDExYW5pLmdpZiIgd2lkdGg9IjYzIj48L1A+Ci08UD48Qj5Eb3VibGUtQ2xpY2tpbmcgV2l0aGluIHRoZSBTb3VyY2U8L0I+IDxCUj4KLShOT1RFOiBpZiB5b3UgY29udGludWUgdG8gZG91YmxlLWNsaWNrIGF0IGEgZ2l2ZW4gY3Vyc29yIHBvc2l0aW9uLCB0aGUgc2VsZWN0aW9uIGFyZWEgd2lsbCBjb250aW51ZSB0byBleHBhbmQuIFdoZW4gdGhlIG1heGltdW0gcmVnaW9uIGFyZWEgaGFzIGJlZW4gcmVhY2hlZCwgdGhlIG5leHQgZG91YmxlLWNsaWNrIHdpbGwgY2F1c2UgdGhlIG9yaWdpbmFsIHNlbGVjdGlvbi4gU28sIHRoZSBzZWxlY3Rpb25zIHdpbGwgd3JhcC9jeWNsZS4gPEZPTlQgY29sb3I9IiMwMDAwZmYiPkNvb2whPC9GT05UPikuPC9QPgotPFVMPgotICA8TEk+T3BlbiA8Qj5Kb2JEZXNjLnhtbDwvQj4uPC9MST4KLSAgPExJPkRvdWJsZS1jbGlja2luZyB3aXRoaW4gdGFnIGNvbnRlbnQ6Ci0gIDxVTD4KLSAgICA8TEk+RG91YmxlLWNsaWNrIHdpdGhpbiA8Qj5NaWRkbGV3YXJlPC9CPiBvbiBsaW5lIDcuPC9MST4KLSAgICA8TEk+VmVyaWZ5IDxCPk1pZGRsZXdhcmU8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBTb3VyY2UgYW5kIERlc2lnbiBwYWdlcyBhbmQgPEI+QnVzVHlwZTwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIE91dGxpbmUgdmlldy4gPEZPTlQgY29sb3I9IiNmZjAwMDAiPk5vdCBzdXJlIHdoYXQgdGhlIFByb3BlcnRpZXMgdmlldyBpcyBzdXBwb3NlZCB0byBzaG93LiBJdCBnb2VzIGJsYW5rLiBTZWUgZGVmZWN0IDE3Nzc1My4gQWxzbywgPEI+TWlkZGxld2FyZTwvQj4gd2Fzbid0IHNlbGVjdGVkIGluIHRoZSBEZXNpZ24gcGFnZSBhcyBoYWQgZXhwZWN0ZWQuIFRoZSBEZXNpZ24gcGFnZSBvbmx5IHNlZW1zIHRvIHN0YXkgaW4gc3luYyBhdCB0aGUgZWxlbWVudC90YWcgbGV2ZWwgbGlrZSB0aGUgT3V0bGluZSB2aWV3LiBUYWxrIHRvIENyYWlnIGFib3V0IHRoaXMuPC9GT05UPjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGljayBhZ2FpbiBhdCB0aGUgc2FtZSBjdXJzb3IgcG9zaXRpb24uPC9MST4KLSAgICA8TEk+VmVyaWZ5IDxCPkFwcGxpY2F0aW9uIGFuZCBNaWRkbGV3YXJlIFNvZnR3YXJlPC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgU291cmNlIGFuZCBEZXNpZ24gcGFnZXMgYW5kIDxCPkJ1c1R5cGU8L0I+IHJlbWFpbnMgdG8gYmUgdGhlIG9ubHkgdGhpbmcgc2VsZWN0ZWQgaW4gdGhlIE91dGxpbmUgdmlldy48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2tpbmcgYWdhaW4gd2lsbCBjYXVzZSBjeWNsaW5nIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNlbGVjdGlvbi48L0xJPgotICA8L1VMPjwvTEk+Ci0gIDxMST5Eb3VibGUtY2xpY2tpbmcgd2l0aGluIGEgdGFnIG5hbWU6Ci0gIDxVTD4KLSAgICA8TEk+RG91YmxlLWNsaWNrIHdpdGhpbiA8Qj5Ib3dUb0FwcGx5PC9CPiBvbiBsaW5lIDYxLjwvTEk+Ci0gICAgPExJPlZlcmlmeSA8Qj5Ib3dUb0FwcGx5PC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgU291cmNlIHBhZ2UsIERlc2lnbiBwYWdlLCBhbmQgT3V0bGluZSB2aWV3LiAKLSAgICAgICAgPEI+Y2xhc3M8L0I+LCA8Qj5kaXN0cmlidXRlPC9CPiwgPEI+aWQ8L0I+LCBhbmQgPEI+bmFtZTwvQj4gc2hvdWxkIGFwcGVhciBpbiB0aGUgCi0gICAgICAgIFByb3BlcnRpZXMgdmlldy4gT25seSA8Qj5kaXN0cmlidXRlPC9CPiBzaG91bGQgc2hvdyBhIHZhbHVlLjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGljayBhZ2FpbiBhdCB0aGUgc2FtZSBjdXJzb3IgcG9zaXRpb24uPC9MST4KLSAgICA8TEk+VmVyaWZ5IHRoZSB3aG9sZSA8Qj5Ib3dUb0FwcGx5PC9CPiBzdGFydCB0YWcgKGluY2x1ZGluZyBpdHMgZGVsaW1pdGVycykgaXMgc2VsZWN0ZWQgCi0gICAgICAgIGluIHRoZSBTb3VyY2UgcGFnZS4gPEI+SG93VG9BcHBseTwvQj4gc2hvdWxkIHJlbWFpbiBzZWxlY3RlZCBpbgotICAgICAgICB0aGUgRGVzaWduIHBhZ2UgYW5kIE91dGxpbmUgdmlldy4gPEI+PEZPTlQgY29sb3I9IiNmZjAwMDAiPkhvd1RvQXBwbHk8L0ZPTlQ+PC9CPjxGT05UIGNvbG9yPSIjZmYwMDAwIj4gYW5kIGFsbCBkZXNjZW5kZW50cyBiZWNvbWUgc2VsZWN0ZWQgaW4gdGhlIE91dGxpbmUgdmlldyAoZGVmZWN0IDE3Nzc1MikuIEFsc28sIHRoZSBQcm9wZXJ0aWVzIHZpZXcgc2hvd3Mgbm8gcHJvcGVydGllcyAoZGVmZWN0IDE3Nzc1MykuPC9GT05UPjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGlja2luZyBhZ2FpbiB3aWxsIGNhdXNlIGN5Y2xpbmcgYmFjayB0byB0aGUgb3JpZ2luYWwgc2VsZWN0aW9uLjwvTEk+Ci0gIDwvVUw+PC9MST4KLSAgPExJPkRvdWJsZS1jbGlja2luZyB3aXRoaW4gYW4gYXR0cmlidXRlIG5hbWU6Ci0gIDxVTD4KLSAgICA8TEk+VHlwZSA8Qj5DdHJsK0VuZDwvQj4gdG8gcG9zaXRpb24gdGhlIGN1cnNvciBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGljayB3aXRoaW4gPEI+ZGlzdHJpYnV0ZTwvQj4gb24gbGluZSA2MS4gVmVyaWZ5IDxCPmRpc3RyaWJ1dGU8L0I+IGlzIHNlbGVjdGVkIAotICAgICAgICBpbiB0aGUgU291cmNlIHBhZ2UgYW5kIDxCPkhvd1RvQXBwbHk8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBEZXNpZ24gcGFnZSBhbmQgT3V0bGluZSAKLSAgICAgICAgdmlldy4gPEI+Y2xhc3M8L0I+LCA8Qj5kaXN0cmlidXRlPC9CPiwgPEI+aWQ8L0I+LCBhbmQgPEI+bmFtZTwvQj4gc2hvdWxkIGFwcGVhciBpbiAKLSAgICAgICAgdGhlIFByb3BlcnRpZXMgdmlldy4gT25seSA8Qj5kaXN0cmlidXRlPC9CPiBzaG91bGQgc2hvdyBhIHZhbHVlLjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGljayBhdCB0aGUgc2FtZSBjdXJzb3IgcG9zaXRpb24uIFZlcmlmeSA8Qj5kaXN0cmlidXRlPSJpbnRlcm5hbCI8L0I+IGlzCi0gICAgICAgIHNlbGVjdGVkIGluIHRoZSBTb3VyY2UuIE5vdGhpbmcgc2hvdWxkIGNoYW5nZSBpbiB0aGUgRGVzaWduIHBhZ2Ugb3Igdmlld3MuPC9MST4gICAgICAgICAgICAgICAgIAotICAgIDxMST5Eb3VibGUtY2xpY2sgYXQgdGhlIHNhbWUgY3Vyc29yIHBvc2l0aW9uLiBWZXJpZnkgdGhlIHdob2xlIDxCPkhvd1RvQXBwbHk8L0I+IHN0YXJ0IHRhZyBpcyBzZWxlY3RlZCBpbiB0aGUgU291cmNlIHBhZ2UgKGluY2x1ZGluZyBpdHMgZGVsaW1pdGVycykuIE5vdGhpbmcgc2hvdWxkIGNoYW5nZSBpbiB0aGUgRGVzaWduIHBhZ2Ugb3Igdmlld3MuPEI+PEZPTlQgY29sb3I9IiNmZjAwMDAiPkhvd1RvQXBwbHk8L0ZPTlQ+PC9CPjxGT05UIGNvbG9yPSIjZmYwMDAwIj4gYW5kIGFsbCBkZXNjZW5kZW50cyBiZWNvbWUgc2VsZWN0ZWQgaW4gdGhlIE91dGxpbmUgdmlldyAoZGVmZWN0IDE3Nzc1MikuIEFsc28sIHRoZSBQcm9wZXJ0aWVzIHZpZXcgc2hvd3Mgbm8gcHJvcGVydGllcyAoZGVmZWN0IDE3Nzc1MykuPC9GT05UPjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGlja2luZyBhZ2FpbiB3aWxsIGNhdXNlIGN5Y2xpbmcgYmFjayB0byB0aGUgb3JpZ2luYWwgc2VsZWN0aW9uLjwvTEk+Ci0gIDwvVUw+PC9MST4KLSA8TEk+RG91YmxlLWNsaWNraW5nIHdpdGhpbiBhbiBhdHRyaWJ1dGUgdmFsdWU6Ci0gIDxVTD4KLSAgICA8TEk+VHlwZSA8Qj5DdHJsK0hvbWU8L0I+IHRvIHBvc2l0aW9uIHRoZSBjdXJzb3IgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS48L0xJPgotICAgIDxMST5TY3JvbGwgZG93biBzdWNoIHRoYXQgbGluZSA2MSBpcyB2aXNpYmxlLjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGljayB3aXRoaW4gPEI+aW50ZXJuYWw8L0I+IG9uIGxpbmUgNjEuIFZlcmlmeSA8Qj5pbnRlcm5hbDwvQj4gaXMgc2VsZWN0ZWQgCi0gICAgICAgIGluIHRoZSBTb3VyY2UgcGFnZSBhbmQgPEI+SG93VG9BcHBseTwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIERlc2lnbiBwYWdlIGFuZCBPdXRsaW5lIAotICAgICAgICB2aWV3LiA8Qj5jbGFzczwvQj4sIDxCPmRpc3RyaWJ1dGU8L0I+LCA8Qj5pZDwvQj4sIGFuZCA8Qj5uYW1lPC9CPiBzaG91bGQgYXBwZWFyIGluIAotICAgICAgICB0aGUgUHJvcGVydGllcyB2aWV3LiBPbmx5IDxCPmRpc3RyaWJ1dGU8L0I+IHNob3VsZCBzaG93IGEgdmFsdWUuPC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNrIGF0IHRoZSBzYW1lIGN1cnNvciBwb3NpdGlvbi4gVmVyaWZ5IDxCPiJpbnRlcm5hbCI8L0I+IGlzCi0gICAgICAgIHNlbGVjdGVkIGluIHRoZSBTb3VyY2UuIE5vdGhpbmcgc2hvdWxkIGNoYW5nZSBpbiB0aGUgRGVzaWduIHBhZ2Ugb3Igdmlld3MuPC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNrIGF0IHRoZSBzYW1lIGN1cnNvciBwb3NpdGlvbi4gVmVyaWZ5IDxCPmRpc3RyaWJ1dGU9ImludGVybmFsIjwvQj4gaXMKLSAgICAgICAgc2VsZWN0ZWQgaW4gdGhlIFNvdXJjZS4gTm90aGluZyBzaG91bGQgY2hhbmdlIGluIHRoZSBEZXNpZ24gcGFnZSBvciB2aWV3cy48L0xJPiAgICAgICAgICAgICAgICAgCi0gICAgPExJPkRvdWJsZS1jbGljayBhdCB0aGUgc2FtZSBjdXJzb3IgcG9zaXRpb24uIFZlcmlmeSB0aGUgd2hvbGUgPEI+SG93VG9BcHBseTwvQj4gc3RhcnQgdGFnIGlzIHNlbGVjdGVkIGluIHRoZSBTb3VyY2UgcGFnZSAoaW5jbHVkaW5nIGl0cyBkZWxpbWl0ZXJzKS4gTm90aGluZyBzaG91bGQgY2hhbmdlIGluIHRoZSBEZXNpZ24gcGFnZSBvciB2aWV3cy4gPEI+PEZPTlQgY29sb3I9IiNmZjAwMDAiPkhvd1RvQXBwbHk8L0ZPTlQ+PC9CPjxGT05UIGNvbG9yPSIjZmYwMDAwIj4gYW5kIGFsbCBkZXNjZW5kZW50cyBiZWNvbWUgc2VsZWN0ZWQgaW4gdGhlIE91dGxpbmUgdmlldyAoZGVmZWN0IDE3Nzc1MikuIEFsc28sIHRoZSBQcm9wZXJ0aWVzIHZpZXcgc2hvd3Mgbm8gcHJvcGVydGllcyAoZGVmZWN0IDE3Nzc1MykuPC9GT05UPjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGlja2luZyBhZ2FpbiB3aWxsIGNhdXNlIGN5Y2xpbmcgYmFjayB0byB0aGUgb3JpZ2luYWwgc2VsZWN0aW9uLjwvTEk+Ci0gIDwvVUw+PC9MST4KLTwvVUw+Ci0KLTxQPjxCPkZvcm1hdHRpbmcgYSBGaWxlIENyZWF0ZWQgYnkgRGlmZmVyZW50IEVkaXRvcnM8L0I+PEJSPgotPHVsPgotPGxpPgotSW1wb3J0IHRoZSA8Yj5Kb2JQb3N0aW5nLmR0ZDwvYj4gYW5kIDxiPkpvYkRlc2MueG1sPC9iPjwvbGk+Ci0KLTxsaT4KLU9wZW4gdGhlIEpvYkRlc2MueG1sLiBDaGVjayB0aGUgc291cmNlIGZvciBpbmRlbnRhdGlvbiB0byBzZWUgaWYgaXQgcHJlc2VydmVzCi10aGUgd2hpdGUgc3BhY2UgZnJvbSB0aGUgb3JpZ2luYWwgZG9jdW1lbnQuPC9saT4KLQotPGxpPgotVGhlIG9yaWduYWwgZG9jdW1lbnQgdXNlcyBzcGFjZXMgYW5kIHRhYnMsIHNvIHRoZSBmb3JtYXR0aW5nIHdpbGwgYXBwZWFyIGEgbGl0dGxlIHdyb25nLgotQnkgdXNpbmcgdGhlIHJpZ2h0L2xlZnQgYXJyb3dzLCB2ZXJpZnkgdGhhdCBzb21lIHNwYWNlIGlzIHNwYWNlcyBhbmQgc29tZSBzcGFjZQotaXMgdGFiIGNoYXJhY3RlcnMuPC9saT4KLTxMST5Vc2UgJ2Zvcm1hdCBkb2N1bWVudCcgdG8gYmUgc3VyZSBpdCBmb3JtYXRzLiA8L0xJPgotPExJPlRoZSBkZWZhdWx0IGlzIHRvIGZvcm1hdCB3aXRoIHNwYWNlcyAuLi4gdmVyaWZ5IG9ubHkgc3BhY2VzIHJlbWFpbiBpbiBmaWxlLCBub3QgdGFiIGNoYXJhY3Rlcy4gCi0oSnVzdCBhIGxpdHRsZSBtb3ZlbWVudCB3aXRoIHRoZSBhcnJvdyBrZXlzIHNob3VsZCBzdWZmaWNlLjwvTEk+Ci08TEk+R28gdG8gdGhlIHByZWZlcmVuY2UgcGFnZSB0byBjaGFuZ2UgdGhlIGZvcm1hdCBzZXR0aW5ncyBmb3IgdGhlIFhNTCBFZGl0b3IKLXRvIHVzZSB0aGUgdGFiIGNoYXJhY3RlciBpbnN0ZWFkIG9mIDQgc3BhY2VzLiBXaGlsZSB0aGVyZSwgdmVyaWZ5IHRoYXQgdGhlIGRpYWxvZwotd2lsbCBub3QgYWxsb3cgb3RoZXIgdmFsdWVzIHRvIGJlIGludGVyZWQgZXhjZXB0ICJ3aGl0ZXNwYWNlIiAuLi4nXHQncyBhbmQgYmxhbmtzLgotPC9MST4KLTxMST5Gb3JtYXQgdGhlIGRvY3VtZW50IGFnYWluIGFuZCBiZSBzdXJlIHRoaXMgdGltZSB0YWIgY2hhcmFjdGVycyB3ZXJlIHVzZWQuPC9MST4KLTwvdWw+Ci08SU1HIGJvcmRlcj0iMCIgaGVpZ2h0PSI2MyIgc3JjPSJ1MDExYW5pLmdpZiIgd2lkdGg9IjYzIj48L1A+Ci08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBPdGhlciB0ZXN0IGNhc2VzCi0gICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLT4KLTxIMj48Qj48Rk9OVCBjb2xvcj0iIzAwMDBmZiI+T3RoZXIgdGVzdCBjYXNlczwvRk9OVD48L0I+PC9IMj4KLTxQPjxCPkFzc29jaWF0ZSB0aGUgWE1MIEVkaXRvciB0byBhIG5ldyBmaWxlIHR5cGU8L0I+PC9QPgotPFVMPgotICA8TEk+V2luZG93LSZndDtQcmVmZXJlbmNlczxCPjwvQj4uPC9MST4KLSAgPExJPkV4cGFuZCA8Qj5Xb3JrYmVuY2g8L0I+LjwvTEk+Ci0gIDxMST5TZWxlY3QgPEI+RmlsZSBFZGl0b3JzPC9CPi48L0xJPgotICA8TEk+U2VsZWN0IHRoZSA8Qj5BZGQ8L0I+IGJ1dHRvbiB0byBhZGQgYSBuZXcgZmlsZSB0eXBlLjwvTEk+Ci0gIDxMST5TcGVjaWZ5IGEgZmlsZSB0eXBlIG9mIDxCPiouc2V0PC9CPiBhbmQgdGhlbiBjbG9zZSB0aGUgQWRkIGRpYWxvZy48L0xJPgotICA8TEk+VmVyaWZ5IDxCPiouc2V0PC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgbGlzdCBvZiBmaWxlIHR5cGVzLjwvTEk+Ci0gIDxMST5TZWxlY3QgdGhlIDxCPkFkZDwvQj4gYnV0dG9uIHRvIGFzc29jaWF0ZSB0aGUgWE1MIEVkaXRvciB0byB0aGUgbmV3IGZpbGUgdHlwZS48L0xJPgotICA8TEk+U2VsZWN0IDxCPlhNTCBFZGl0b3I8L0I+IGZyb20gdGhlIGxpc3Qgb2YgZWRpdG9ycy4gVmVyaWZ5IGl0IGFwcGVhcnMgd2l0aCBpdHMgb3duIHNwZWNpYWwgaWNvbi4gQ2xvc2UgdGhlIGRpYWxvZy4gPEZPTlQgY29sb3I9IiNmZjAwMDAiPk5PVEU6IHdhaXRpbmcgdG8gaGVhciBiYWNrIGZyb20gT1RJIG9uIGhvdyBjYW4gcHJldmVudCAyIFhNTCBFZGl0b3IgZW50cmllcyBmcm9tIGFwcGVhcmluZyBpbiB0aGUgbGlzdC48L0ZPTlQ+PC9MST4KLSAgPExJPlZlcmlmeSA8Qj5YTUwgRWRpdG9yPC9CPiBhcHBlYXJzIGFzIHRoZSBkZWZhdWx0IGVkaXRvciBub3cgZm9yIHRoZSA8Qj4qLnNldDwvQj4gZmlsZSB0eXBlLjwvTEk+Ci0gIDxMST5PcGVuIDxCPmdvdGNoYVRDQmVhbnMuc2V0PC9CPiBmcm9tIHRoZSBOYXZpZ2F0b3Igdmlldy4gVmVyaWZ5IGl0IG9wZW5zIHRvIHRoZSBYTUwgRWRpdG9yLjwvTEk+Ci08L1VMPgotPFA+PEZPTlQgY29sb3I9IiMwMDAwZmYiPlRIRSBFTkQhPC9GT05UPjwvUD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvTGFyZ2VOb25EZWZhdWx0Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL0xhcmdlTm9uRGVmYXVsdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYmNkZDE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvTGFyZ2VOb25EZWZhdWx0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2NjUgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvRFRELyBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci0KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KLTxtZXRhIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iTW96aWxsYS80LjcgW2VuXSAoV2luTlQ7IFUpIFtOZXRzY2FwZV0iPgotPE1FVEEgY29udGVudD0idGV4dC9jc3MiIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSI+Ci08dGl0bGU+c21va2U8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci08aDI+IFNtb2tlIFRlc3QgLSBYTUwgRWRpdG9yPC9oMj4KLUxhc3QgdXBkYXRlZDogSnVuZSAyNSwgMjAwMQotPFA+VGhpcyBTbW9rZSBUZXN0IHByaW1hcmlseSBmb2N1c2VzIG9uIHRoZSBSVFAgcG9ydGlvbiBvZiB0aGUgWE1MIAotRWRpdGlvciwgd2hpY2ggaXMgdGhlIFNvdXJjZSBwYWdlIG9mIHRoZSBYTUwgRWRpdG9yLiBJdCBhbHNvIHBlcmZvcm1zIAotc29tZSBpbnRlZ3JhdGlvbiB0ZXN0aW5nLiBGb3IgZXhhbXBsZSwgaXQgdGVzdHMgc3luY2hyb25pemF0aW9uIGJldHdlZW4gCi10aGUgRGVzaWduIGFuZCBTb3VyY2UgcGFnZXMgb2YgdGhlIFhNTCBFZGl0b3IsIGFzIHdlbGwgYXMgd2l0aCB0aGUgCi1PdXRsaW5lIGFuZCBQcm9wZXJ0aWVzIHZpZXdzLiBJdCBhbHNvIHZlcmlmaWVzIHRoYXQgZmlsZXMgY3JlYXRlZCAKLXRocm91Z2ggdGhlIFhNTCBGaWxlIHdpemFyZCBhbmQgcmVmZXJlbmNlcyB0byB0aGUgWE1MIENhdGFsb2cgYXJlIAotc3VwcG9ydGVkIGFzIGV4cGVjdGVkLjwvUD4KLTxQPjxGT05UIGNvbG9yPSIjZmYwMDAwIj48Qj5OT1RFPC9CPjogWE1MIGZpbGVzIGFyZSBjYXNlLXNlbnNpdGl2ZSBzbyBiZSBzdXJlIHRoYXQgdGhpbmdzIGFwcGVhciAKLWV4YWN0bHkgYXMgbm90ZWQuPC9GT05UPjwvUD4KLQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgICAgICAgICAgICAgICAgICAgICAgU2V0dXAKLSAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tPgotPEgyPjxGT05UIGNvbG9yPSIjMDAwMGZmIj5TZXR1cDwvRk9OVD48L0gyPgotPFA+PEI+U3RhcnRpbmcgQ2xlYW48L0I+PC9QPgotPHVsPgotICAgIDxsaT4gRGVsZXRlIGFueSBleGlzdGluZyB3b3JrYmVuY2g8L2xpPgotICAgIDxsaT4gU3RhcnQgRWNsaXBzZTwvbGk+Ci08L3VsPgotPFA+PEI+T3BlbiBhbiBYTUwgUGVyc3BlY3RpdmU8QlI+Ci08L0I+PC9QPgotPFVMPgotICAgIDxMST5TZWxlY3QgdGhlIDxCPk9wZW4gUGVyc3BlY3RpdmU8L0I+IHRvb2xiYXIgYnV0dG9uIGluIHRoZSB1cHBlciBsZWZ0PC9MST4KLSAgICA8TEk+U2VsZWN0IDxCPk90aGVyLi4uPC9CPjwvTEk+Ci0gICAgPExJPlNlbGVjdCA8Qj5YTUw8L0I+PC9MST4KLSAgICA8TEk+VmVyaWZ5IHRoZSBmb2xsb3dpbmcgdmlld3MgYXBwZWFyIGluIHRoZSBYTUwgcGVyc3BlY3RpdmU6IDxGT05UIGNvbG9yPSIjZmYwMDAwIj5UaGUgbG9jYXRpb24gb2YgdGhlIE91dGxpbmUgYW5kIE5hdmlnYXRvciB2aWV3cyBhcmUgcmV2ZXJzZWQgZnJvbSB0aGUgUmVzb3VyY2UgYW5kIFdlYiBwZXJzcGVjdGl2ZXMuIERvIHdlIHdhbnQgdG8gdHJ5IHRvIGJlIGNvbnNpc3RlbnQgYWNyb3NzIHRoZSBwZXJzcGVjdGl2ZXM/IEFsc28sIEkgb3BlbmVkIDxCPmRlZmVjdDwvQj4gMTc3NjY0IHRvIGVuYWJsZSBlYXN5IGFjY2VzcyB0byB0aGUgUHJvcGVydGllcyB2aWV3IGZyb20gd2l0aGluIHRoZSBYTUwgcGVyc3BlY3RpdmUuIElmIHRoaXMgdmlldyBpc24ndCBpbmNsdWRlZCBpbiB0aGUgUGVyc3BlY3RpdmUgYmVjYXVzZSBpdHMgdXNlIGlzIGxpbWl0ZWQsIHRoZW4gcmVjb21tZW5kIHdlIGF0IGxlYXN0IHByb3ZpZGUgYSBTaG93IG9yIEhpZGUgUHJvcGVydGllcyBWaWV3IHRvb2xiYXIgYnV0dG9uIChzaW1pbGFyIHRvIHRoZSBidXR0b25zIHRoYXQgUGFnZSBEZXNpZ25lciBwcm92aWRlcykuPC9GT05UPjwvTEk+Ci08L1VMPgotPFA+PEI+UHJvamVjdCBDcmVhdGlvbiBhbmQgRmlsZSBJbXBvcnRzPEJSPgotPC9CPjwvUD4KLTxVTD4KLSAgICA8TEk+Q3JlYXRlIGEgUHJvamVjdCwgPEI+WE1MVGVzdDI8L0I+IDwvTEk+Ci0gICAgPExJPkltcG9ydCB0aGUgZm9sbG93aW5nIGZpbGVzIGludG8gdGhpcyBwcm9qZWN0OgotICAgIDxVTD4KLSAgICAgICAgPExJPjxCPlB1cmNoYXNlT3JkZXIueHNkPC9CPjwvTEk+Ci0gICAgICAgIDxMST48Qj5JbnZvaWNlLmR0ZDwvQj48L0xJPgotICAgIDxMST48Qj5Kb2JEZXNjLnhtbDwvQj48L0xJPgotICAgIDxMST48Qj5XaXJlbGVzcy54bWw8L0I+PC9MST4KLSAgICA8TEk+PEI+Z290Y2hhVENCZWFucy5zZXQ8L0I+PC9MST4KLSAgICA8TEk+PEI+QVRTLmR0ZDwvQj48L0xJPgotICAgIDxMST48Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+YW55IG90aGVycz88L0ZPTlQ+PC9MST4KLSAgICA8L1VMPgotICAgIDwvTEk+Ci08L1VMPgotCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgICAgICAgICAgICAgICAgIENyZWF0ZS9PcGVuL0VkaXQgdGVzdCBjYXNlcwotICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0+Ci08SDI+PEZPTlQgY29sb3I9IiMwMDAwZmYiPkNyZWF0ZS9PcGVuL0VkaXQgdGVzdCBjYXNlczwvRk9OVD48L0gyPgotPFA+PEI+Q3JlYXRlIGFuIFhNTCBGaWxlIGZyb20gc2NyYXRjaDwvQj48L1A+Ci08VUw+Ci0gICAgPExJPlNlbGVjdCB0aGUgPEI+Q3JlYXRlIGEgbmV3IFhNTCBmaWxlPC9CPiB0b29sYmFyIGJ1dHRvbi48L0xJPgotICAgIDxMST5WZXJpZnkgdGhlIENyZWF0ZSBhIFhNTCBGaWxlIHdpemFyZCBhcHBlYXJzIGFuZCB0aGUgRmluaXNoIGJ1dHRvbiBpcyBkaXNhYmxlZC4gPEZPTlQgY29sb3I9IiNmZjAwMDAiPjxCPkRFRkVDVDo8L0I+IDE3NzY2MCAtIFhNTCBGaWxlIHdpemFyZDogZGlzYWJsZSBGaW5pc2ggYnV0dG9uIG9uIHRoZSBmaXJzdCBwYWdlPC9GT05UPi48L0xJPgotICAgIDxMST5BY2NlcHQgdGhlIGRlZmF1bHQgdG8gPEI+Q3JlYXRlIGEgbmV3IFhNTCBmaWxlPC9CPjwvTEk+Ci0gICAgPExJPkdvIHRvIHRoZSBOZXh0IHBhZ2UKLSAgICA8VUw+Ci0gICAgICAgIDxMST5TZWxlY3QgPEI+WE1MVGVzdDI8L0I+IGFzIHRoZSBmb2xkZXI8L0xJPgotICAgICAgICA8TEk+U3BlY2lmeSBhIEZpbGUgbmFtZSBvZiA8Qj5mcm9tU2NyYXRjaDwvQj48L0xJPgotICAgICAgICA8TEk+U2VsZWN0IDxCPkZpbmlzaDwvQj48L0xJPgotICAgIDwvVUw+Ci0gICAgPC9MST4KLSAgICA8TEk+VmVyaWZ5IHRoZSBmb2xsb3dpbmc6Ci0gICAgPFVMPgotICAgICAgICA8TEk+ZnJvbVNjcmF0Y2gueG1sIGFwcGVhcnMgaW4gdGhlIE5hdmlnYXRvciB2aWV3LjwvTEk+Ci0gICAgICAgIDxMST5mcm9tU2NyYXRjaC54bWwgaXMgb3BlbiB0byB0aGUgRGVzaWduIHBhZ2Ugb2YgdGhlIFhNTCBFZGl0b3IgYW5kIGhhcyBmb2N1cy48L0xJPgotICAgICAgICA8TEk+dGhlIERlc2lnbiB0YWIgYXBwZWFycyBiZWZvcmUgdGhlIFNvdXJjZSB0YWIgaW4gdGhlIFhNTCBFZGl0b3IuPC9MST4KLSAgICAgICAgPExJPnRoZSBEZXNpZ24gYW5kIFNvdXJjZSBwYWdlIHNob3cgbm8gY29udGVudC48L0xJPgotICAgICAgICA8TEk+dGhlIE91dGxpbmUgYW5kIFByb3BlcnRpZXMgdmlld3Mgc2hvdyBub3RoaW5nLjwvTEk+Ci0gICAgPC9VTD4KLSAgICA8L0xJPgotICAgIDxMST5Td2l0Y2ggdG8gdGhlIFNvdXJjZSBwYWdlLiBWZXJpZnkgdGhlIGN1cnNvciBhcHBlYXJzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUuPC9MST4KLSAgICA8TEk+UmlnaHQgbW91c2UgYnV0dG9uIDIgYW5kIHZlcmlmeSBhIHBvcHVwIG1lbnUgYXBwZWFycy48L0xJPgotICAgIDxMST5IaXQgPEI+Q3RybCtTcGFjZTwvQj4uIFZlcmlmeSB0aGUgY29udGVudCBhc3Npc3QgcHJvcG9zYWwgbGlzdCBhcHBlYXJzLjwvTEk+Ci0gICAgPExJPlNlbGVjdCA8Qj4mbHQ7P3htbCB2ZXJzaW9uPSZxdW90OzEuMCZxdW90OyBlbmNvZGluZz0mcXVvdDtVVEYtOCZxdW90Oz8mZ3Q7PC9CPjwvTEk+Ci0gICAgPExJPlZlcmlmeSAmbHQ7P3htbCB2ZXJzaW9uPSZxdW90OzEuMCZxdW90OyBlbmNvZGluZz0mcXVvdDtVVEYtOCZxdW90Oz8mZ3Q7IGlzIGluc2VydGVkIGFuZCBhcHBlYXJzIHN5bnRheCBoaWdobGlnaHRlZCBhbmQgYW4gZW50cnkgYXBwZWFycyBmb3IgaXQgaW4gdGhlIE91dGxpbmUgdmlldy48L0xJPgotICAgIDxMST5Qb3NpdGlvbiB0aGUgY3Vyc29yIHdpdGhpbiB0aGUgWE1MIGRlY2xhcmF0aW9uIGFuZCB2ZXJpZnkgPEI+dmVyc2lvbjwvQj4gYW5kIDxCPmVuY29kaW5nPC9CPiBhcHBlYXIgaW4gdGhlIFByb3BlcnRpZXMgdmlldy4gPEZPTlQgY29sb3I9IiNmZjAwMDAiPlRoaXMgdXNlZCB0byB3b3JrLCBidXQgbm93IGl0J3Mgbm90IHdvcmtpbmcuIE9wZW5lZCA8Qj5kZWZlY3Q8L0I+IDE3NzY2MiAtIFhNTCBkZWNsYXJhdGlvbiBhdHRyaWJ1dGVzIG5vdCBhcHBlYXJpbmcgaW4gUHJvcGVydGllcyB2aWV3LiBJZiB3ZSBkZWNpZGUgdG8gbm90IHRyZWF0IHZlcnNpb24gYW5kIGVuY29kaW5nIGFzIGF0dHJpYnV0ZXMsIHRoZW4gdGhpcyBzdGVwIHNob3VsZCBiZSByZW1vdmVkLjwvRk9OVD48L0xJPgotICAgIDxMST5Db250aW51ZSB0byB0aGUgbmV4dCBzZWN0aW9uLjwvTEk+Ci08L1VMPgotPFA+PEI+SWRlbnRpZnkgYSBsb2NhbCBEVEQgKDwvQj52ZXJpZmllcyBhIERURCBpcyBpbW1lZGlhdGVseSByZWNvZ25pemVkOyBpbiB0aGUgcGFzdCwgeW91IGhhZCB0byBjbG9zZSBhbmQgcmVvcGVuIHRoZSBXb3JrYmVuY2g8Qj4pPC9CPjwvUD4KLTxVTD4KLSAgICA8TEk+VHlwZSB0aGUgZm9sbG93aW5nIGFmdGVyIHRoZSBYTUwgZGVjbGFyYXRpb24gaW4gPEI+ZnJvbVNjcmF0Y2gueG1sPC9CPjogPEI+Jmx0OyFET0NUWVBFIEludm9pY2UgU1lTVEVNICZxdW90O0ludm9pY2UuZHRkJnF1b3Q7Jmd0OzwvQj4uIFRoZSB0ZXh0IHNob3VsZCBiZSBzeW50YXggaGlnaGxpZ2h0ZWQgYXMgeW91IHR5cGUgYW5kIHlvdSBzaG91bGQgc2VlIGFuIGVudHJ5IGdldCBhZGRlZCB0byB0aGUgT3V0bGluZSB2aWV3LjwvTEk+Ci0gICAgPExJPkhpdCA8Qj5FbnRlcjwvQj4gdG8gY3JlYXRlIGEgbmV3IGxpbmUgYWZ0ZXIgdGhlIERPQ1RZUEUgZGVjbGFyYXRpb24uPC9MST4KLSAgICA8TEk+SGl0IDxCPkN0cmwrU3BhY2U8L0I+LlZlcmlmeSBvbmx5IDxCPkludm9pY2U8L0I+IGFuZCA8Qj5jb21tZW50PC9CPiBhcHBlYXIgaW4gdGhlIHByb3Bvc2FsIGxpc3QuICg8Qj5OT1RFPC9CPjogPEI+SW52b2ljZTwvQj4gaXMgdGhlIHJvb3QgZWxlbWVudCk8L0xJPgotICAgIDxMST5IaXQgPEI+RW50ZXI8L0I+IHRvIGFjY2VwdCA8Qj5JbnZvaWNlPC9CPiBhcyBhIHNlbGVjdGlvbi4gVmVyaWZ5IHRoZSBJbnZvaWNlIHN0YXJ0IGFuZCBlbmQgdGFncyBhcmUgaW5zZXJ0ZWQgaW50byB0aGUgU291cmNlIGFuZCB0aGUgY3Vyc29yIGFwcGVhcnMgYmV0d2VlbiB0aGVtLiBBbiBlbGVtZW50IGVudHJ5IHNob3VsZCBhcHBlYXIgZm9yIEludm9pY2UgaW4gdGhlIE91dGxpbmUgdmlldy4gKDxCPk5PVEU8L0I+OiBYTUwgaXMgY2FzZS1zZW5zaXRpdmUgc28gYmUgc3VyZSB5b3Ugc2VlIEludm9pY2UgYW5kIG5vdCBpbnZvaWNlIGV2ZXJ5d2hlcmUpLjwvTEk+Ci0gICAgPExJPkhpdCA8Qj5DdHJsK1NwYWNlPC9CPi4gVmVyaWZ5IHRoZSBmb2xsb3dpbmcgYXBwZWFycyBpbiB0aGUgcHJvcG9zYWwgbGlzdCAoaW4gdGhlIG9yZGVyIHNob3duKTogPEZPTlQgY29sb3I9IiNmZjAwMDAiPkl0ZW0gaXMgYXBwZWFyaW5nIGJlZm9yZSBIZWFkZXIuIFRoZSBkZWZhdWx0IGlzIG5vdCB0byBzb3J0IHRoZSBsaXN0IGFscGhhYmV0aWNhbGx5LiBUaGF0IG1lYW5zIHRoZSBsaXN0IHNob3VsZCBiZSBzb3J0ZWQgYmFzZWQgb24gdGhlIG9yZGVyIGluIHdoaWNoIHRoZSBjaGlsZCB0YWdzIGFyZSBkZWZpbmVkIGluIHRoZSBlbGVtZW50IGRlZmluaXRpb24gZm9yIEludm9pY2UgaW4gdGhlIERURC4gSW4gb3RoZXIgd29yZHMsIHVzZXJzIHNob3VsZCBzZWUgY2hpbGQgdGFncyBsaXN0ZWQgYWNjb3JkaW5nIHRvIHRoZWlyIHNlcXVlbmNpbmcgb3JkZXIgaW4gdGhlIERURCwgd2hpY2ggdGhlIERURCBFZGl0b3Igc2hvd3MuIFZpb2xhdGluZyB0aGUgc2VxdWVuY2luZyBvcmRlciBjYXVzZXMgYW4gWE1MIGZpbGUgdG8gYmVjb21lIG5vdCB2YWxpZC4gPEI+REVGRUNUOjwvQj4gMTc3NjY4PC9GT05UPgotICAgIDxVTD4KLSAgICAgICAgPExJPkhlYWRlcjwvTEk+Ci0gICAgICAgIDxMST5JdGVtPC9MST4KLSAgICAgICAgPExJPmNvbW1lbnQ8L0xJPgotICAgIDwvVUw+Ci0gICAgPC9MST4KLSAgICA8TEk+SGl0IDxCPkVudGVyPC9CPiB0byBhY2NlcHQgPEI+SGVhZGVyPC9CPiBhcyBhIHNlbGVjdGlvbi48L0xJPgotICAgIDxMST5WZXJpZnkgdGhlIFNvdXJjZSBub3cgbG9va3MgbGlrZSB0aGUgZm9sbG93aW5nIGFuZCB0aGUgY3Vyc29yIGFwcGVhcnMgYmVmb3JlIDxCPmludm9pY2VOdW1iZXI8L0I+OjxJTUcgYm9yZGVyPSIwIiBoZWlnaHQ9IjgzIiBzcmM9ImlkZW50aWZ5RFRELmpwZyIgd2lkdGg9IjQ4NSI+PC9MST4KLSAgICA8TEk+VmVyaWZ5IDxCPkhlYWRlcjwvQj4gYXBwZWFycyBuZXN0ZWQgdW5kZXIgPEI+SW52b2ljZTwvQj4gaW4gdGhlIE91dGxpbmUgdmlldy48L0xJPgotICA8TEk+Q2xvc2UgdGhpcyBmaWxlLCBhbmQgcmVzcG9uZCA8Qj5ZZXM8L0I+IHdoZW4gcHJvbXB0ZWQgdG8gc2F2ZSB0aGUgY2hhbmdlcy48L0xJPgotICA8TEk+UmVvcGVuIHRoZSBmaWxlIGFuZCB2ZXJpZnkgdGhlIGNoYW5nZXMgd2VyZSBzYXZlZC48L0xJPgotICA8TEk+Q2xvc2UgdGhlIGZpbGUuIFZlcmlmeSBubyBzYXZlIGNoYW5nZXMgcHJvbXB0IGFwcGVhcnMuPC9MST4KLTwvVUw+Ci08UD48Qj5DcmVhdGUgYW4gWE1MIEZpbGUgZnJvbSBhbiBpbXBvcnRlZCBEVEQ8L0I+PC9QPgotPFVMPgotICAgIDxMST5TZWxlY3QgdGhlIDxCPkZpbGUtJmd0O05ldy0mZ3Q7WE1MIEZpbGU8L0I+LjwvTEk+Ci0gICAgPExJPlZlcmlmeSB0aGUgQ3JlYXRlIGEgWE1MIEZpbGUgd2l6YXJkIGFwcGVhcnMuPC9MST4KLSAgICA8TEk+U2VsZWN0IHRvIDxCPkNyZWF0ZSBhIG5ldyBYTUwgZmlsZSBmcm9tIGEgRFREIGZpbGU8L0I+PC9MST4KLSAgICA8TEk+R28gdG8gdGhlIE5leHQgcGFnZQotICAgIDxVTD4KLSAgICAgICAgPExJPlNlbGVjdCA8Qj5YTUxUZXN0MjwvQj4gYXMgdGhlIGZvbGRlcjwvTEk+Ci0gICAgICAgIDxMST5TcGVjaWZ5IGEgRmlsZSBuYW1lIG9mIDxCPmZyb21Mb2NhbERURDwvQj48L0xJPgotICAgICAgICA8TEk+R28gdG8gdGhlIE5leHQgcGFnZTwvTEk+Ci0gICAgPC9VTD4KLSAgICA8L0xJPgotICAgIDxMST5TZWxlY3QgdGhlIDxCPkltcG9ydCBGaWxlPC9CPiBidXR0b24KLSAgICA8VUw+Ci0gICAgICAgIDxMST5Vc2UgdGhlIEJyb3dzZSBidXR0b24gdG8gZmluZCA8Qj50ZXN0Y2FzZS5kdGQ8L0I+PC9MST4KLSAgICAgICAgPExJPlNlbGVjdCA8Qj5YTUxUZXN0MjwvQj4gYXMgdGhlIGZvbGRlci4gPEZPTlQgY29sb3I9IiNmZjAwMDAiPldvdWxkIGJlIG5pY2UgaWYgdGhpcyB3ZXJlIGFscmVhZHkgZmlsbGVkIGluLiBPcGVuIGEgZGVmZWN0LjwvRk9OVD48L0xJPgotICAgICAgICA8TEk+U2VsZWN0IDxCPkZpbmlzaDwvQj4gdG8gY2xvc2UgdGhlIEltcG9ydCBGaWxlIHdpemFyZDwvTEk+Ci0gICAgPC9VTD4KLSAgICA8L0xJPgotICAgIDxMST5FeHBhbmQgPEI+WE1MdGVzdDI8L0I+IGFuZCB0aGVuIHNlbGVjdCA8Qj50ZXN0Y2FzZS5kdGQ8L0I+LiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+V2FzIGV4cGVjdGluZyB0byBzZWUgdGhlIGltcG9ydGVkIGZpbGUgc2VsZWN0ZWQgaW4gdGhlIFdvcmtiZW5jaCBmaWxlcyBsaXN0LCBidXQgaXQgd2Fzbid0LiBPcGVuIGEgZGVmZWN0LjwvRk9OVD48L0xJPgotICAgIDxMST5HbyB0byB0aGUgTmV4dCBwYWdlLjwvTEk+Ci0gICAgPExJPlNlbGVjdCA8Qj50ZXN0Y2FzZTwvQj4gYXMgdGhlIFJvb3QgRWxlbWVudC48L0xJPgotICAgIDxMST5BY2NlcHQgdGhlIGRlZmF1bHQgdG8gPEI+Q3JlYXRlIHJlcXVpcmVkIGNvbnRlbnQgb25seTwvQj4uPC9MST4KLSAgICA8TEk+VmVyaWZ5IDxCPnRlc3RjYXNlLmR0ZDwvQj4gYXBwZWFycyBhcyB0aGUgU3lzdGVtIElkLjwvTEk+Ci0gICAgPExJPlNlbGVjdCBGaW5pc2guIFZlcmlmeSA8Qj5mcm9tTG9jYWxEVEQueG1sPC9CPiBhcHBlYXJzIGluIHRoZSBYTUwgRWRpdG9yLiBWZXJpZnkgdGhlIFNvdXJjZSBwYWdlIGxvb2tzIGxpa2UgdGhlIGZvbGxvd2luZzogPElNRyBib3JkZXI9IjAiIGhlaWdodD0iMjkwIiBzcmM9ImltcG9ydERURC5qcGciIHdpZHRoPSI2NjAiPjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIE91dGxpbmUgdmlldyBhbmQgdGhlIGZvcm1hdHRpbmcgaW5kZW50YXRpb24gcmVmbGVjdCB0aGUgcHJvcGVyIGVsZW1lbnQvdGFnIGhpZXJhcmNoeS4gSGVyZSdzIHdoYXQgdGhlIE91dGxpbmUgdmlldyBzaG91bGQgbG9vayBsaWtlOjxJTUcgYm9yZGVyPSIwIiBoZWlnaHQ9IjI5NyIgc3JjPSJvdXRsaW5lMS5qcGciIHdpZHRoPSI2NTUiPjwvTEk+Ci0gIDxMST5WZXJpZnkgc2VsZWN0aW9uIHN5bmNocm9uaXphdGlvbiBiZXR3ZWVuIHRoZSBEZXNpZ24gcGFnZSwgU291cmNlIHBhZ2UsIE91dGxpbmUgdmlldywgCi0gICAgICAgIGFuZCBQcm9wZXJ0aWVzIHZpZXcuCi0gICAgPFVMPgotICAgICAgICA8TEk+RnJvbSB0aGUgU291cmNlIHBhZ2UsIGNsaWNrIHdpdGhpbiB0aGUgPEI+aGVhZGVyPC9CPiBzdGFydCB0YWcuIAotICAgICAgICAgICAgVmVyaWZ5IDxCPmhlYWRlcjwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIE91dGxpbmUgdmlldyBhbmQgaW4gdGhlIERlc2lnbiAKLSAgICAgICAgICAgIHBhZ2UgYW5kIHRoYXQgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIGFuZCBwcm9wZXJ0eSB2YWx1ZXMgYXBwZWFyIGluIHRoZSAKLSAgICAgICAgICAgIFByb3BlcnRpZXMgdmlldzoKLSAgICAgICAgPFRBQkxFIGJvcmRlcj0iMSI+Ci0gICAgICAgICAgICA8VEJPRFk+Ci0gICAgICAgICAgICAgICAgPFRSPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9IjEwMCI+PEI+UHJvcGVydHk8L0I+PC9URD4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSI3NiI+PEI+VmFsdWU8L0I+PC9URD4KLSAgICAgICAgICAgICAgICA8L1RSPgotICAgICAgICAgICAgICAgIDxUUj4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSIxMDAiPmNhdGVnb3J5PC9URD4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSI3NiI+d2VidG9vbDwvVEQ+Ci0gICAgICAgICAgICAgICAgPC9UUj4KLSAgICAgICAgICAgICAgICA8VFI+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iMTAwIj5udW1iZXI8L1REPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9Ijc2Ij5pZHZhbHVlMDwvVEQ+Ci0gICAgICAgICAgICAgICAgPC9UUj4KLSAgICAgICAgICAgICAgICA8VFI+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iMTAwIj5zdGF0ZTwvVEQ+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iNzYiPiZuYnNwOzwvVEQ+Ci0gICAgICAgICAgICAgICAgPC9UUj4KLSAgICAgICAgICAgICAgICA8VFI+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iMTAwIj5zdWJDYXRlZ29yeTwvVEQ+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iNzYiPkFjY2Vzc2FiaWxpdHk8L1REPgotICAgICAgICAgICAgICAgIDwvVFI+Ci0gICAgICAgICAgICAgICAgPFRSPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9IjEwMCI+c3ViU3ViQ2F0ZWdvcnk8L1REPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9Ijc2Ij4mbmJzcDs8L1REPgotICAgICAgICAgICAgICAgIDwvVFI+Ci0gICAgICAgICAgICA8L1RCT0RZPgotICAgICAgICA8L1RBQkxFPgotICAgICAgICA8L0xJPgotCTxMST5Gcm9tIHRoZSBPdXRsaW5lIHZpZXcsIHNlbGVjdCB0aGUgPEI+dGVzdEJ1Y2tldDwvQj4gdGFnLgotICAgICAgICAgICAgVmVyaWZ5IDxCPnRlc3RCdWNrZXQ8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBEZXNpZ24gcGFnZSBhbmQgdGhlIGN1cnJlbnQgbWFya2VyCi0gICAgICAgICAgICBpbiB0aGUgbGVmdGhhbmQgbWFyZ2luIG9mIHRoZSBTb3VyY2UgcGFnZSBpbmRpY2F0ZXMgdGhlIHJhbmdlIG9mIHRoZSAKLSAgICAgICAgICAgIDxCPnRlc3RCdWNrZXQ8L0I+IHRhZy4gVGhlIFByb3BlcnRpZXMgdmlldyBzaG91bGQgc2hvdyBhIHByb3BlcnR5IG9mIDxCPnR5cGU8L0I+Ci0gICAgICAgICAgICB3aXRoIGEgdmFsdWUgb2YgPEI+Q29tcG9uZW50VGVzdDwvQj4uCi0gICAgICAgIDwvTEk+Ci0gICAgPC9VTD4gICAKLSAgICA8L0xJPiAKLSAgICA8TEk+VmVyaWZ5IGVkaXQgc3luY2hyb25pemF0aW9uIGJldHdlZW4gdGhlIERlc2lnbiBwYWdlLCBTb3VyY2UgcGFnZSwgYW5kIAotICAgICAgICBQcm9wZXJ0aWVzIHZpZXcgKGZvY3VzIGhlcmUgaXMgb24gYWRkaW5nIGF0dHJpYnV0ZXMgYW5kIGF0dHJpYnV0ZSB2YWx1ZXMpLgotICAgIDxVTD4KLSAgICAgICAgPExJPkZyb20gdGhlIFNvdXJjZSBwYWdlLCB1c2UgY29udGVudCBhc3Npc3QgdG8gaW5zZXJ0IGFuIGF0dHJpYnV0ZSBhbmQgYXR0cmlidXRlIHZhbHVlCi0gICAgICAgICAgICBmb3IgdGhlIDxCPmhlYWRlcjwvQj4gc3RhcnQgdGFnLgotICAgICAgICAgICAgPFVMPgotICAgICAgICAgICAgPExJPlBvc2l0aW9uIHRoZSBjdXJzb3IgYWZ0ZXIgdGhlIDxCPmNhdGVnb3J5PC9CPiBhdHRyaWJ1dGUgaW4gdGhlIDxCPmhlYWRlcjwvQj4gc3RhcnQgdGFnLjwvTEk+Ci0gICAgICAgICAgICA8TEk+VHlwZSA8Qj5zcGFjZTwvQj4gYW5kIHRoZW4gaGl0IHByb21wdCBmb3IgY29udGVudCBhc3Npc3QuPC9MST4KLSAgICAgICAgICAgIDxMST5WZXJpZnkgb25seSA8Qj5zdGF0ZTwvQj4gYW5kIDxCPnN1YlN1YkNhdGVnb3J5PC9CPiBhcHBlYXIgaW4gdGhlIHByb3Bvc2FsIGxpc3QgKGNvbnRlbnQgYXNzaXN0IGlzIHNtYXJ0IGVub3VnaCBub3QgdG8gbGlzdCBhbnkgYXR0cmlidXRlcyB0aGF0IGFscmVhZHkgZXhpc3QgaW4gdGhlIHN0YXJ0IHRhZyBzaW5jZSBhdHRyaWJ1dGVzIGNhbiBvbmx5IGFwcGVhciBvbmNlLiA8Rk9OVCBjb2xvcj0iIzAwMDBmZiI+Q29vbCE8L0ZPTlQ+KS48L0xJPgotICAgICAgICAgICAgPExJPlNlbGVjdCA8Qj5zdGF0ZTwvQj4uPC9MST4gICAKLSAgICAgICAgICAgIDxMST5WZXJpZnkgPEI+c3RhdGU9IlVuZGVyQ29uc3RydWN0aW9uIjwvQj4gaXMgaW5zZXJ0ZWQgaW4gdGhlIFNvdXJjZSBwYWdlIChjb250ZW50IGFzc2lzdCBhdXRvbWF0aWNhbGx5IGluc2VydHMgYW55IGRlZmF1bHQgdmFsdWVzLiA8Rk9OVCBjb2xvcj0iIzAwMDBmZiI+Q29vbCE8L0ZPTlQ+KS4gVmVyaWZ5IHRoZSBEZXNpZ24gcGFnZSBhbmQgUHJvcGVydGllcyB2aWV3IHJlZmxlY3QgdGhpcyBjaGFuZ2UuPC9MST4gICAgICAgICAKLSAgICAgICAgICAgIDwvVUw+Ci0gICAgICAgIDwvTEk+Ci0gICAgICAgIDxMST5Gcm9tIHRoZSBQcm9wZXJ0aWVzIHZpZXcsIHVwZGF0ZSB0aGUgPEI+c3RhdGU8L0I+IGF0dHJpYnV0ZSB2YWx1ZSB0byAiVW5kZXJSZXZpZXciIAotICAgICAgICAgICAgKGEgcHVsbGRvd24gbGlzdCBvZiB2YWx1ZXMgc2hvdWxkIGJlIGF2YWlsYWJsZSkuIFZlcmlmeSB0aGUgY2hhbmdlIGlzIHJlZmxlY3RlZAotICAgICAgICAgICAgaW4gdGhlIFNvdXJjZSBhbmQgRGVzaWduIHBhZ2VzLgotICAgICAgICA8L0xJPgotICAgICAgICA8TEk+RnJvbSB0aGUgRGVzaWduIHBhZ2UsIGFkZCBhbiBhdHRyaWJ1dGUgYW5kIGF0dHJpYnV0ZSB2YWx1ZSB0byB0aGUgPEI+aGVhZGVyPC9CPiB0YWcuCi0gICAgICAgICAgICA8VUw+Ci0gICAgICAgICAgICA8TEk+QnJpbmcgdXAgdGhlIHBvcHVwIG1lbnUgZm9yIHRoZSA8Qj5oZWFkZXI8L0I+IHRhZy48L0xJPgotICAgICAgICAgICAgPExJPlNlbGVjdCA8Qj5BZGQgQXR0cmlidXRlLT5zdWJTdWJDYXRlZ29yeTwvQj4gZnJvbSB0aGUgcG9wdXAgbWVudSAoaXQncyBzbWFydAotICAgICAgICAgICAgICAgIGVub3VnaCB0byBrbm93IHdoaWNoIGF0dHJpYnV0ZXMgaGF2ZW4ndCBiZWVuIHNwZWNpZmllZCB5ZXQgLi4uIGxpa2UgY29udGVudCAKLSAgICAgICAgICAgICAgICBhc3Npc3QuIENvb2whKS48L0xJPgotICAgICAgICAgICAgPExJPlR5cGUgaW4gYSB2YWx1ZSBvZiA8Qj5LZXlib2FyZCBzdXBwb3J0PC9CPi48L0xJPgotICAgICAgICAgICAgPExJPlZlcmlmeSB0aGUgY2hhbmdlIGlzIHJlZmxlY3RlZCBpbiB0aGUgU291cmNlIHBhZ2UgYW5kIFByb3BlcnRpZXMgdmlldzwvTEk+Ci0gICAgICAgICAgICA8L1VMPgotICAgICAgICA8L0xJPgotICAgIDwvVUw+Ci0gICAgPC9MST4KLTwvVUw+Ci08UD48Qj5PcGVuIGFuIFhNTCBGaWxlIHRoYXQgcmVmZXJlbmNlcyBhIHJlbW90ZSBEVEQ8L0I+PC9QPgotPFVMPgotICAgIDxMST5PcGVuIHRoZSA8Qj5XaXJlbGVzcy54bWw8L0I+IGZpbGUuPC9MST4KLSAgICA8TEk+VmVyaWZ5IGl0IGxvb2tzIGxpa2UgdGhlIGZvbGxvd2luZyBpbiB0aGUgU291cmNlIHBhZ2U6PElNRyBib3JkZXI9IjAiIGhlaWdodD0iMjM5IiBzcmM9IndpcmVsZXNzLmpwZyIgd2lkdGg9IjY1NiI+PC9MST4KLSAgICA8TEk+VmVyaWZ5IHRoZSBPdXRsaW5lIHZpZXcgYW5kIHRoZSBmb3JtYXR0aW5nIGluZGVudGF0aW9uIHJlZmxlY3QgdGhlIHByb3BlciAKLSAgICAgICAgZWxlbWVudC90YWcgaGllcmFyY2h5LiBIZXJlJ3Mgd2hhdCB0aGUgT3V0bGluZSB2aWV3IHNob3VsZCBsb29rIGxpa2U6IDxJTUcgYm9yZGVyPSIwIiBoZWlnaHQ9IjE4OSIgc3JjPSJvdXRsaW5lMi5qcGciIHdpZHRoPSI2NTYiPjwvTEk+IAotICAgIDxMST5WZXJpZnkgY29udGVudCBhc3Npc3QgPEZPTlQgY29sb3I9IiNmZjAwMDAiPkRlZmVjdCAxNzYzNzkgKGluIHZlcmlmeSBzdGF0ZSwgYnV0IHN0aWxsIG5vdCB3b3JraW5nKTwvRk9OVD4uPC9MST4KLSAgICAgICAgPFVMPgotICAgICAgICAgICA8TEk+Q3JlYXRlIGEgbmV3IGxpbmUgYWZ0ZXIgdGhlIDxCPndtbDwvQj4gc3RhcnQgdGFnLjwvTEk+Ci0gICAgICAgICAgIDxMST5Qcm9tcHQgZm9yIGNvbnRlbnQgYXNzaXN0IG9uIHRoZSBuZXcgbGluZS48L0xJPgotICAgICAgICAgICA8TEk+VmVyaWZ5IHRoZSBmb2xsb3dpbmcgYXBwZWFyIGFzIHByb3Bvc2FscyAoaW4gdGhlIG9yZGVyIHNob3duKTogCi0gICAgICAgICAgICAgICA8VUw+Ci0gICAgICAgICAgICAgICAgICAgPExJPmhlYWQ8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST50ZW1wbGF0ZTwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPmNhcmQ8L0xJPgotICAgICAgICAgICAgICAgPC9VTD4KLSAgICAgICAgICAgPC9MST4KLSAgICAgICAgICAgPExJPkNyZWF0ZSBhIG5ldyBsaW5lIGFmdGVyIHRoZSA8Qj53bWw8L0I+IHN0YXJ0IHRhZy48L0xJPgotICAgICAgICAgICA8TEk+VHlwZSBhIHNwYWNlIGJlZm9yZSB0aGUgZW5kaW5nIGRlbGltaXRlciBvbiB0aGUgY2FyZCBzdGFydCB0YWcuPC9MST4KLSAgICAgICAgICAgPExJPlByb21wdCBmb3IgY29udGVudCBhc3Npc3Q8L0xJPgotICAgICAgICAgICA8TEk+VmVyaWZ5IHRoZSBmb2xsb3dpbmcgYXBwZWFyIGFzIHByb3Bvc2FscyAobm90IG5lY2Vzc2FyaWx5IGluIHRoZQotICAgICAgICAgICAgICAgb3JkZXIgc2hvd24pLiAKLSAgICAgICAgICAgICAgIDxVTD4KLSAgICAgICAgICAgICAgICAgICA8TEk+dGl0bGU8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST5uZXdjb250ZXh0PC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+b3JkZXJlZDwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPnhtbDpsYW5nPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+b25lbnRlcmJhY2t3YXJkPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+b250aW1lcjwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPmlkPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+Y2xhc3M8L0xJPgotICAgICAgICAgICAgICAgPC9VTD4KLSAgICAgICAgICAgPC9MST4KLSAgICAgICAgICAgPExJPlBvc2l0aW9uIHRoZSBjdXJzb3Igd2l0aGluIHRoZSA8Qj5tZXRob2Q8L0I+IGF0dHJpYnV0ZSB2YWx1ZSBpbiB0aGUgPEI+Z288L0I+IHN0YXJ0IHRhZy48L0xJPgotICAgICAgICAgICA8TEk+UHJvbXB0IGZvciBjb250ZW50IGFzc2lzdDwvTEk+Ci0gICAgICAgICAgIDxMST5WZXJpZnkgPEI+cG9zdDwvQj4gYW5kIDxCPmdldDwvQj4gYXBwZWFyIGFzIHByb3Bvc2Fscy48L0xJPgotICAgICAgICA8L1VMPgotICAgIDxMST5WZXJpZnkgc2VsZWN0aW9uIHN5bmNocm9uaXphdGlvbiBiZXR3ZWVuIHRoZSBEZXNpZ24gcGFnZSwgU291cmNlIHBhZ2UsIE91dGxpbmUgdmlldywgCi0gICAgICAgIGFuZCBQcm9wZXJ0aWVzIHZpZXcuCi0gICAgPFVMPgotICAgICAgICA8TEk+RnJvbSB0aGUgU291cmNlIHBhZ2UsIGNsaWNrIHdpdGhpbiB0aGUgPEI+Y2FyZDwvQj4gc3RhcnQgdGFnLiAKLSAgICAgICAgICAgIFZlcmlmeSA8Qj5jYXJkPC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgT3V0bGluZSB2aWV3IGFuZCBpbiB0aGUgRGVzaWduIAotICAgICAgICAgICAgcGFnZSBhbmQgdGhhdCB0aGUgY29udGVudCBhc3Npc3QgcHJvcG9zYWxzIGxpc3RlZCBhYm92ZSBmb3IgdGhlCi0gICAgICAgICAgICA8Qj5jYXJkPC9CPiB0YWcgYXBwZWFyIGFzIHByb3BlcnRpZXMgaW4gdGhlIFByb3BlcnRpZXMgdmlldy4gTm8gdmFsdWVzIHNob3VsZCBhcHBlYXIgZm9yIHRoZXNlIHByb3BlcnRpZXMuPC9MST4KLQk8TEk+RnJvbSB0aGUgT3V0bGluZSB2aWV3LCBzZWxlY3QgdGhlIDxCPnBvc3RmaWVsZDwvQj4gdGFnLgotICAgICAgICAgICAgVmVyaWZ5IDxCPnBvc3RmaWVsZDwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIERlc2lnbiBwYWdlIGFuZCB0aGUgY3VycmVudCBtYXJrZXIKLSAgICAgICAgICAgIGluIHRoZSBsZWZ0aGFuZCBtYXJnaW4gb2YgdGhlIFNvdXJjZSBwYWdlIGluZGljYXRlcyB0aGUgcmFuZ2Ugb2YgdGhlIAotICAgICAgICAgICAgPEI+cG9zdGZpZWxkPC9CPiB0YWcuIFRoZSBQcm9wZXJ0aWVzIHZpZXcgc2hvdWxkIHNob3cgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzLAotICAgICAgICAgICAgbm9uZSBvZiB3aGljaCBzaG91bGQgaGF2ZSBhIHZhbHVlOgotICAgICAgICAgICAgICAgPFVMPgotICAgICAgICAgICAgICAgICAgIDxMST5uYW1lPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+dmFsdWU8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST5pZDwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPmNsYXNzPC9MST4KLSAgICAgICAgICAgICAgIDwvVUw+Ci0gICAgICAgICAgIDwvTEk+Ci0gICAgPC9VTD4gICAKLSAgICA8L0xJPgotICAgIDxMST5WZXJpZnkgZWRpdCBzeW5jaHJvbml6YXRpb24gYmV0d2VlbiB0aGUgRGVzaWduIHBhZ2UsIFNvdXJjZSBwYWdlLCBPdXRsaW5lIHZpZXcsIGFuZCAKLSAgICAgICAgUHJvcGVydGllcyB2aWV3IChmb2N1cyBoZXJlIGlzIG9uIGFkZGluZyBlbGVtZW50cy90YWdzKS4KLSAgICA8VUw+Ci0gICAgICAgIDxMST5Gcm9tIHRoZSBTb3VyY2UgcGFnZSwgY29weSBhbmQgcGFzdGUgdGhlIDxCPmNhcmQ8L0I+IHRhZy4KLSAgICAgICAgICAgIDxVTD4KLSAgICAgICAgICAgIDxMST5Qb3NpdGlvbiB0aGUgY3Vyc29yIGluIHRoZSA8Qj5jYXJkPC9CPiBzdGFydCB0YWcuPC9MST4KLSAgICAgICAgICAgIDxMST5Ob3RpY2UgdGhlIHJhbmdlIG9mIHRoZSA8Qj5jYXJkPC9CPiB0YWcgaW4gdGhlIGxlZnRoYW5kIG1hcmdpbiBhcmVhLjwvTEk+Ci0gICAgICAgICAgICA8TEk+Q29weSB0aGlzIHJhbmdlIG9mIGxpbmVzIHVzaW5nIHRoZSA8Qj5FZGl0LT5Db3B5PC9CPiBwdWxsZG93biBtZW51IHNlbGVjdGlvbi48L0xJPgotICAgICAgICAgICAgPExJPlBhc3RlIGFmdGVyIHRoZSA8Qj5jYXJkPC9CPiBlbmQgdGFnIHVzaW5nIEN0cmwrVi48L0xJPgotICAgICAgICAgICAgPExJPlZlcmlmeSB0aGUgYXBwcm9wcmlhdGUgbGluZXMgd2VyZSBwYXN0ZWQgbiB0aGUgU291cmNlIHBhZ2UuCi0gICAgICAgICAgICAgICAgVmVyaWZ5IHRoZSBEZXNpZ24gcGFnZSwgT3V0bGluZSB2aWV3LCBhbmQgdGhlIFByb3BlcnRpZXMgCi0gICAgICAgICAgICAgICAgdmlldyByZWZsZWN0IHRoaXMgY2hhbmdlLjwvTEk+ICAgICAgICAgCi0gICAgICAgICAgICA8L1VMPgotICAgICAgICA8L0xJPgotICAgICAgICA8TEk+RnJvbSB0aGUgRGVzaWduIHBhZ2UsIGFkZCBhbm90aGVyIDxCPmNhcmQ8L0I+IHRhZy4KLSAgICAgICAgICAgIDxVTD4KLSAgICAgICAgICAgIDxMST5CcmluZyB1cCB0aGUgcG9wdXAgbWVudSBmb3IgdGhlIDxCPndtbDwvQj4gdGFnLjwvTEk+Ci0gICAgICAgICAgICA8TEk+U2VsZWN0IDxCPkFkZCBDaGlsZC0+Y2FyZDwvQj4gZnJvbSB0aGUgcG9wdXAgbWVudS48L0xJPgotICAgICAgICAgICAgPExJPlZlcmlmeSB0aGUgU291cmNlIHBhZ2UsIE91dGxpbmUgdmlldywgYW5kIHRoZSBQcm9wZXJ0aWVzCi0gICAgICAgICAgICAgICAgdmlldyByZWZsZWN0IHRoaXMgY2hhbmdlLiBOT1RFOiBpdCBzaG91bGQgaGF2ZSBnZW5lcmF0ZWQgb3V0Ci0gICAgICAgICAgICAgICAgdGhlIHNhbWUgdGhpbmcgYXMgdGhlIG9yaWdpbmFsIGNhcmQgdGFnLCB3aXRoIHRoZSBleGNlcHRpb24KLSAgICAgICAgICAgICAgICB0aGF0IGEgPEI+bWV0aG9kPC9CPiBhdHRyaWJ1dGUgc2hvdWxkIG5vdCBleGlzdCBpbiB0aGUgPEI+Z288L0I+IHN0YXJ0IHRhZy4gPC9MST4KLSAgICAgICAgICAgIDwvVUw+Ci0gICAgICAgIDwvTEk+Ci0gICAgPC9VTD4KLSAgICA8L0xJPiAKLTwvVUw+Ci08UD48Qj5DcmVhdGUgYW5kIFZhbGlkYXRlIGFuIFhNTCBGaWxlIGZyb20gYSBzY2hlbWE8L0I+PEJSPgotCi08UD4odGhlc2Ugc3RlcHMgYXJlIHRha2VuIGZyb20gdGhlICdEZXNpZ24nIHNtb2tlIHRlc3QsIGV4Y2VwdCB0aGUgU291cmNlIFBhZ2UgaXMgdGhlIGZvY3VzKTwvUD4KLTx1bD4KLTxsaT4KLVJpZ2h0IG1vdXNlIGJ1dHRvbiAyIG9uIHRoZSBQdXJjaGFzZU9yZGVyLnhzZCBhbmQgc2VsZWN0IDxiPkNyZWF0ZSBYTUwKLUZpbGU8L2I+LjwvbGk+Ci0KLTxsaT4KLUFjY2VwdCB0aGUgZGVmYXVsdCBmaWxlIG5hbWVzLjwvbGk+Ci0KLTxsaT4KLUluIHRoZSBTZWxlY3QgUm9vdCBFbGVtZW50IHBhZ2UsIGNob29zZSA8Yj5wdXJjaGFzZU9yZGVyPC9iPiBhcyByb290IGVsZW1lbnQuPC9saT4KLQotPGxpPgotQ2hvb3NlIDxiPkNyZWF0ZSByZXF1aXJlZCBhbmQgb3B0aW9uYWwgY29udGVudDwvYj4gdG8gY3JlYXRlIGEgbWluaW1hbAotZG9jdW1lbnQuPC9saT4KLQotPGxpPgotRW50ZXIgPGI+cG88L2I+IGFzIHRoZSBuYW1lc3BhY2UgcHJlZml4LjwvbGk+Ci0KLTxsaT5PbiBGaW5pc2gsIGEgUHVyY2hhc2VPcmRlci54bWwgaXMgY3JlYXRlZCBhbmQgdGhlIFhNTCBFZGl0b3IgaXMgb3BlbmVkLiAoU2VsZWN0IFNvdXJjZSBQYWdlIGlmIG5vdCBhbHJlYWR5IHRoZXJlLik8L2xpPgotCi08bGk+Ci1SdW4gVmFsaWRhdGUuIFRoZSBQdXJjaGFzZU9yZGVyLnhtbCBzaG91bGQgYmUgaW52YWxpZC48L2xpPgotCi08bGk+Ci1Eb3VibGUgY2xpY2sgb24gdGhlIGVycm9yIG1lc3NhZ2UuIEl0IHNob3VsZCBiZSBwb3NpdGlvbmVkIHRvIHRoZSBsaW5lCi1pbiBlcnJvciwgaS5lLiB0aGUgPGI+cGFydE51bTwvYj4gYXR0cmlidXRlLiBJdCBpcyBpbnZhbGlkIGJlY2F1c2UgdGhlCi12YWx1ZSBpcyBub3Qgc2V0IHRvIG1hdGNoIHRoZSBYTUwgc2NoZW1hIHBhdHRlcm4gZmFjZXQgImQzLVtBLVpdezJ9IiAoMwotZGlnaXRzIGZvbGxvd2VkIGJ5IDIgY2hhcmFjdGVycykuPC9saT4KLQotPGxpPkluIHRoZSBTb3VyY2UgVmlldywgbG9jYXRlIHRoZSA8Yj5wYXJ0TnVtPC9iPiBhdHRyaWJ1dGUgdW5kZXIgZWxlbWVudCBpdGVtLgotRW50ZXIgdGhlIHZhbHVlIDMzMy1BQi48L2xpPgotCi08bGk+Ci1SdW4gVmFsaWRhdGUuIFRoZSBQdXJjaGFzZU9yZGVyLnhtbCBkb2N1bWVudCBzaG91bGQgbm93IGJlIHZhbGlkLjwvbGk+Ci08L1VMPgotPFVMPgotICA8TEk+Ci0gIDxIUj48L0xJPgotICA8bGk+UGxhY2UgdGhlIGN1cnNvciBhZnRlciB0aGUgJmx0O2l0ZW1zJmd0OyB0YWcgYW5kIGJlc3VyZSAiaXRlbSIgaXMgCi0gIGxpc3RlZCBpbiB0aGUgY29udGVudCBhc3Npc3QgbGlzdC4gPC9saT4KLTxsaT5SZW5hbWUgdGhlIHB1cmNoYXNlT3JkZXIueHNkIHRvLCBzYXksIHB1cmNoYXNlT3JkZXJIT0xELnhzZDwvbGk+Ci08bGk+VmVyaWZ5IHRoYXQgY29udGVudCBhc3Npc3Qgc3RpbGwgZ2l2ZXMgeW91ICJpdGVtIiBhcyBhYm92ZS48L2xpPgotPGxpPk5vdyBzZWxlY3QgdGhlICJSZWxvYWQgRGVwZW5kYW5jaWVzIiBidXR0b24uPC9saT4KLTxsaT5WZXJpZnkgdGhhdCBub3cgY29udGVudCBhc3Npc3Qgbm8gbG9uZ2VyIGxpc3RzIGFueSBpdGVtcyBvdGhlciAKLXRoYXQgdGhlIG1hY3JvICJjb21tZW50Ii48L2xpPgotPGxpPlJlcGVhdCBtYWtpbmcgcHVyY2hhc2VPcmRlci54c2Qgd29ya2FibGUgYWdhaW4uPC9saT4KLTwvdWw+Ci08UD48L1A+PFA+PC9QPjxQPjwvUD48UD48L1A+PFA+PC9QPjwvUD4KLTxQPjxCPk9wZW4gYW4gWE1MIEZpbGUgZm9yIGEgc2hpcHBlZCBEVEQgY2F0YWxvZyBlbnRyeTwvQj48QlI+Ci08QlI+Ci1bcHV0IGluIG9wdGlvbmFsIHNlY3Rpb24gLi4gdGhpcyBpc24ndCBhIGN1c3RvbWVyIHNjZW5lcmlvXTxCUj4KLVRvIHZlcmlmeSB0aGF0IHNoaXBwZWQgRFREcyBhcmUgd29ya2luZzo8QlI+Ci08VUw+Ci08TEk+Ci1Vc2UgYSB3ZWIgcHJvamVjdCB3aXRoIGEgc3RhbmRhcmQgd2ViLnhtbCBmaWxlIGluIGl0LiBCZSBzdXJlIAotdGhlcmUgaXMgbm8gd2ViLWFwcF8yXzIuZHRkIGZpbGUgaW4gdGhlIGRpcmVjdG9yeS4gSW4gdGhlIHdlYi54bWwgZmlsZSAKLWl0c2VsZiwgbWFuZ2xlIHRoZSB3ZWItYXBwXzJfMi5kdGQgZmlsZW5hbWUgaW4gdGhlIHN5c3RlbSBpZCBhIGxpdHRsZSwgc3VjaCBhcyAKLWNoYW5nZSBpdCB0byB4ZWItYXBwXzJfMi5kdGQgdG8gYmUgc3VyZSBpdCBjYW4ndCBiZSBmb3VuZCB2aWEgdGhlCi1ub3JtYWwgaHR0cCBtZXRob2QgKFRoaXMgaXNuJ3QgcmVhbGx5IG5lY2Vzc2FyeSBmb3IgdGhlIGZ1bnRpb24gdG8gd29yaywKLWl0cyBqdXN0IHRvIGJlIHN1cmUgb25seSB0aGUgY2F0YWxvZyBmdW5jdGlvbiBpcyBpbiBlZmZlY3QpLgotPC9MST4KLTxMST4KLUdvIHRvIHRoZSBwcmVmZXJlbmNlcyBwYWdlLCBhbmQgb3BlbiB0aGUgWE1MIENhdGFsb2cuIFZlcmlmeSB0aGVyZSAKLWlzIGFuIGVudHJ5IGZvciAtLy9TdW4gTWljcm9zeXN0ZW1zLCBJbmMuLy9EVEQgV2ViIEFwcGxpY2F0aW9uIDIuMi8vRU4uCi08L0xJPgotPExJPgotT25jZSBhbGwgdGhlIHByZXAgd29yayBpcyBkb25lIChmaWxlcyBkZWxldGVkLCB0ZXh0IG1vZGlmaWVkKSwgeW91IHNob3VsZCAKLWV4aXQgYW5kIHJlc3RhcnQgRWNsaXBzZSB0byBiZSBzdXJlIHlvdSBoYXZlIGEgZnJlc2ggc3RhcnQuCi08L0xJPgotPExJPgotT3BlbiB0aGUgd2ViLnhtbCBmaWxlIGFuZCBiZSBzdXJlIHRoYXQgY29udGVudCBhc3Npc3Qgd29ya3MgZm9yIHRoYXQgZmlsZS4KLUZvciBleGFtcGxlLCByaWdodCBhZnRlciB0aGUgZW5kIG9mIHRoZSAmbHQ7L2Rpc3BsYXktbmFtZSZndDsgdGFnLCBjdHJsLXNwYWNlIAotc2hvdWxkIHByb3ZpZGUgYSBsb25nIGxpc3Qgb2YgZWxlbWVudHMsIHN0YXJ0aW5nIHdpdGggc2VydmxldCwgc2VydmxldC1tYXBwaW5nLCBldGMuCi1UaGlzIGluZGljYXRlcyB0aGUgc2hpcHBlZCBEVEQgZnVuY3Rpb24gaXMgd29ya2luZyBhbmQgY29uZmlndXJlZCAKLWNvcnJlY3RseSAoYXQgbGVhc3QgZm9yIHRoZSB3ZWIueG1sIGZpbGUpLgotPC9MST4KLTwvVUw+Ci08L1A+Ci08UD48Qj5DcmVhdGUgYW4gWE1MIEZpbGUgZnJvbSBhIG5ldyBEVEQgY2F0YWxvZyBlbnRyeTwvQj48QlI+PElNRyBib3JkZXI9IjAiIGhlaWdodD0iNjMiIHNyYz0idTAxMWFuaS5naWYiIHdpZHRoPSI2MyI+PC9QPgotCi08Yj5UaGUgZm9sbG93aW5nIGNvbWVzIGRpcmVjdGx5IGZyb20gdGhlICdEZXNpZ24nIFNtb2tlIFRlc3Q6IFhNTCBDYXRhbG9nIGZvciBYTUwgU2NoZW1hPC9iPgotPHVsPgotPGxpPgotUnVuIFZhbGlkYXRlIG9uIFB1cmNoYXNlT3JkZXIueG1sIHRvIG1ha2Ugc3VyZSBpdCBpcyB2YWxpZDwvbGk+Ci0KLTxsaT4KLUNyZWF0ZSBhIG5ldyBwcm9qZWN0LCBYTUxUZXN0MjwvbGk+Ci0KLTxsaT4KLU1vdmUgdGhlIFB1cmNoYXNlT3JkZXIueHNkIGludG8gWE1MVGVzdDIuPC9saT4KLQotPGxpPgotUnVuIFZhbGlkYXRlIG9uIFB1cmNoYXNlT3JkZXIueG1sLiBZb3Ugd2lsbCBub3RpY2UgdGhhdCBpdCBpcyBubyBsb25nZXIKLXZhbGlkLiBUaGUgZXJyb3IgbWVzc2FnZSBzaG91bGQgZ2l2ZSB5b3UgYSBoaW50IHRoYXQgdGhlIGZpbGUgUHVyY2hhc2VPcmRlci54c2QKLWNhbiBubyBsb25nZXIgYmUgZm91bmQuPC9saT4KLQotPGxpPgotT3BlbiB0aGUgV2luZG93LT5QcmVmZXJlbmNlcyBhbmQgc2VsZWN0IHRoZSBYTUwgQ2F0YWxvZy48L2xpPgotCi08bGk+Ci1FbnRlciB0aGUgcGFpciA8Yj5JZCA9IFB1cmNoYXNlT3JkZXIueHNkIFVyaSA9IGY6XGVjbGlwc2VcWE1MVGVzdDJcUHVyY2hhc2VPcmRlci54c2Q8L2I+PC9saT4KLQotPGJyPk9yIGFsdGVybmF0aXZlbHksIHlvdSBjYW4gdXNlIGEgcmVsYXRpdmUgcGF0aCB0byB0aGUgaW5zdGFsbCBkaXJlY3RvcnkKLW9mIHRoZSB3b3JrYmVuY2ggYXMgZm9sbG93czoKLTxicj48Yj5JZCA9IFB1cmNoYXNlT3JkZXIueHNkIFVyaSA9IC5cWE1MVGVzdDJcUHVyY2hhc2VPcmRlci54c2Q8L2I+Ci08bGk+Ci1DbGljayBvbiB0aGUgUmVsb2FkIGJ1dHRvbiB0byByZWxvYWQgdGhlIGNhdGFsb2cgc2V0dGluZ3MuPC9saT4KLQotPGxpPgotUnVuIFZhbGlkYXRlLiBUaGUgUHVyY2hhc2VPcmRlci54bWwgZG9jdW1lbnQgc2hvdWxkIG5vdyBiZSB2YWxpZC48L2xpPgotPC91bD4KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgICAgICAgICAgICAgICAgICBTYXZlL1ZhbGlkYXRlIHRlc3QgY2FzZXMKLSAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tPgotPEgyPjxGT05UIGNvbG9yPSIjMDAwMGZmIj5TYXZlL1ZhbGlkYXRlIHRlc3QgY2FzZXM8L0ZPTlQ+PC9IMj4KLTxQPjxCPlNhdmluZyBhbiBYTUwgRmlsZTwvQj48QlI+Ci0oTk9URTogdGhlIDxCPklkZW50aWZ5IGEgbG9jYWwgRFREPC9CPiB0ZXN0IGNhc2UgdGVzdHMgdGhlIHNhdmUgcHJvbXB0IG9uIGEgZmlsZSBjbG9zZS4pPC9QPgotPFVMPgotICA8TEk+SWYgYW55IGZpbGVzIGFyZSBvcGVuLCBzZWxlY3QgPEI+RmlsZS0mZ3Q7Q2xvc2UgQWxsPC9CPiAob3IgPEI+Q3RybCtTaGlmdCtGNDwvQj4pIHRvIGNsb3NlIHRoZW0uPC9MST4KLSAgPExJPk9wZW4gYW55IHhtbCBmaWxlIGluIHRoZSA8Qj5YTUxUZXN0MjwvQj4gcHJvamVjdC48L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBmb2xsb3dpbmcgKG5vLWNoYW5nZXMtbWFkZSBjb25kaXRpb24pOgotICA8VUw+Ci0gICAgPExJPjxCPkZpbGUtJmd0O1NhdmU8L0I+IGlzIGRpc2FibGVkLjwvTEk+Ci0gICAgPExJPjxCPkZpbGUtJmd0O1NhdmUgQWxsPC9CPiBpcyBkaXNhYmxlZC48L0xJPgotICAgIDxMST48Qj5GaWxlLSZndDtTYXZlIEFzPC9CPiBpcyBlbmFibGVkLjwvTEk+Ci0gICAgPExJPnRoZSA8Qj5TYXZlPC9CPiB0b29sYmFyIGJ1dHRvbiAoYSBkaXNrZXR0ZSkgaXMgZGlzYWJsZWQuPC9MST4KLSAgICA8TEk+dGhlIDxCPlNhdmUgQXM8L0I+IHRvb2xiYXIgYnV0dG9uIGlzIGVuYWJsZWQuPC9MST4KLSAgICA8TEk+PEI+U2F2ZTwvQj4gaXMgZGlzYWJsZWQgb24gdGhlIFNvdXJjZSBwb3B1cCBtZW51LiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+V291bGQgYmUgbmljZSBpZiB0aGUgRGVzaWduIHBvcHVwIG1lbnUgYWxzbyBoYWQgYSBTYXZlIHNlbGVjdGlvbi4gT3BlbiBhIHN1Z2dlc3Rpb24gZGVmZWN0LjwvRk9OVD48L0xJPgotICAgIDxMST5ubyA8Qj4qPC9CPiBhcHBlYXJzIGluIHRoZSBmaWxlIHRhYi48L0xJPgotICA8L1VMPjwvTEk+Ci0gIDxMST5NYWtlIGEgY2hhbmdlIGluIHRoZSBTb3VyY2UgcGFnZS48L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBmb2xsb3dpbmcgKGNoYW5nZXMtbWFkZSBjb25kaXRpb24pOgotICA8VUw+Ci0gICAgPExJPjxCPkZpbGUtJmd0O1NhdmU8L0I+IGlzIGVuYWJsZWQuPC9MST4KLSAgICA8TEk+PEI+RmlsZS0mZ3Q7U2F2ZSBBbGw8L0I+IGlzIGVuYWJsZWQ8L0xJPgotICAgIDxMST50aGUgPEI+U2F2ZTwvQj4gdG9vbGJhciBidXR0b24gKGEgZGlza2V0dGUpIGlzIGVuYWJsZWQuPC9MST4KLSAgICA8TEk+PEI+U2F2ZTwvQj4gaXMgZW5hYmxlZCBvbiB0aGUgU291cmNlIHBvcHVwIG1lbnUuPC9MST4KLSAgICA8TEk+YSA8Qj4qPC9CPiBhcHBlYXJzIGluIHRoZSBmaWxlIHRhYi48L0xJPgotICA8L1VMPjwvTEk+Ci0gIDxMST5IaXQgPEI+Q3RybCtTPC9CPi4gPC9MST4KLSAgPExJPlZlcmlmeSB0aGUgbm8tY2hhbmdlcy1tYWRlIGNvbmRpdGlvbnMgYXBwbHkuPC9MST4KLSAgPExJPk1ha2UgYSBjaGFuZ2UgaW4gdGhlIERlc2lnbiBwYWdlLjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIGNoYW5nZXMtbWFkZSBjb25kaXRpb25zIGFwcGx5LjwvTEk+Ci0gIDxMST5GaWxlLSZndDtTYXZlIEFsbDxCPjwvQj4uPC9MST4KLSAgPExJPlZlcmlmeSB0aGUgbm8tY2hhbmdlcy1tYWRlIGNvbmRpdGlvbnMgYXBwbHkuPC9MST4KLSAgPExJPk1ha2UgYSBjaGFuZ2UgaW4gdGhlIFByb3BlcnRpZXMgdmlldy48L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBjaGFuZ2VzLW1hZGUgY29uZGl0aW9ucyBhcHBseS48L0xJPgotICA8TEk+U2VsZWN0IDxCPlNhdmU8L0I+IGZyb20gdGhlIFNvdXJjZSBwb3B1cCBtZW51LjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIG5vLWNoYW5nZXMtbWFkZSBjb25kaXRpb25zIGFwcGx5LjwvTEk+Ci0gIDxMST5DbG9zZSBhbmQgdGhlbiByZW9wZW4gdGhlIGZpbGUuPC9MST4KLSAgPExJPlZlcmlmeSB0aGUgY2hhbmdlcyB0aGF0IHdlcmUgbWFkZSBpbiB0aGUgcHJldmlvdXMgc3RlcHMgYXBwZWFyIGluIHRoZSBEZXNpZ24gYW5kIFNvdXJjZSBwYWdlcy48L0xJPgotPC9VTD4KLTxQPjxCPlNhdmluZyBhbiBYTUwgRmlsZSBhY3Jvc3MgbXVsdGlwbGUgcGVyc3BlY3RpdmVzIChvcHRpb25hbCk8L0I+PC9QPgotPFVMPgotICA8TEk+T3BlbiBhbnkgeG1sIGZpbGUgaW4gdGhlIDxCPlhNTFRlc3QyPC9CPiBwcm9qZWN0LjwvTEk+Ci0gIDxMST5NYWtlIGEgY2hhbmdlIHRvIHRoZSBmaWxlLjwvTEk+Ci0gIDxMST5PcGVuIGFub3RoZXIgWE1MIFBlcnNwZWN0aXZlIGJ5OgotICA8VUw+Ci0gICAgPExJPjxCPnNlbGVjdGluZyBQZXJzcGVjdGl2ZS0mZ3Q7T3Blbi0mZ3Q7T3RoZXIuLi48L0I+PC9MST4KLSAgICA8TEk+d2hpbGUgaG9sZGluZyBkb3duIHRoZSA8Qj5TaGlmdDwvQj4ga2V5LCBzZWxlY3QgPEI+WE1MPC9CPi48L0xJPgotICA8L1VMPjwvTEk+Ci0gIDxMST5WZXJpZnkgYW5vdGhlciBYTUwgUGVyc3BlY3RpdmUgYnV0dG9uIGFwcGVhcnMgaW4gdGhlIGxlZnRoYW5kIHNpZGUgb2YgdGhlIFdvcmtiZW5jaCB0byByZXByZXNlbnQgdGhpcyBzZWNvbmQgcGVyc3BlY3RpdmUuPC9MST4KLSAgPExJPk9wZW4gdGhlIHNhbWUgeG1sIGZpbGUgYXMgaW4gdGhlIGZpcnN0IHN0ZXAgYWJvdmUuPC9MST4KLSAgPExJPlZlcmlmeSB0aGUgY2hhbmdlcy1tYWRlIGNvbmRpdGlvbnMgYXBwbHkgaW4gYm90aCBYTUwgUGVyc3BlY3RpdmVzIGFuZCB2ZXJpZnkgdGhhdCB0aGUgY2hhbmdlcyBtYWRlIHRvIHRoZSBmaWxlIGluIHRoZSBmaXJzdCBwZXJzcGVjdGl2ZSBhcHBlYXIgaW4gdGhlIHNhbWUgZmlsZSBpbiB0aGUgc2Vjb25kIHBlcnNwZWN0aXZlLiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+VGhlICogbmV2ZXIgYXBwZWFycyBpbiB0aGUgZmlsZSB0YWIgb2YgdGhlIHNlY29uZCBwZXJzcGVjdGl2ZSBldmVuIHdoZW4gbWFrZSBjaGFuZ2VzIHRvIHRoZSBmaWxlIGluIHRoZSBzZWNvbmQgcGVyc3BlY3RpdmUuIFRhbGsgdG8gRGF2aWQuPC9GT05UPjwvTEk+Ci0gIDxMST5NYWtlIHNvbWUgY2hhbmdlcyB0byB0aGUgZmlsZSBpbiB0aGUgc2Vjb25kIHBlcnNwZWN0aXZlLjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlc2UgY2hhbmdlcyBhcHBlYXIgaW4gdGhlIHNhbWUgZmlsZSBpbiB0aGUgZmlyc3QgcGVyc3BlY3RpdmUuPC9MST4KLSAgPExJPkNsb3NlIHRoZSBmaWxlIGluIHRoZSBzZWNvbmQgcGVyc3BlY3RpdmUgYW5kIHJlc3BvbmQgPEI+WWVzPC9CPiB0byB0aGUgc2F2ZSBjaGFuZ2VzIHByb21wdC48L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBuby1jaGFuZ2VzLW1hZGUgY29uZGl0aW9uIGFwcGxpZXMgaW4gdGhlIGZpcnN0IHBlcnNwZWN0aXZlLjwvTEk+Ci08L1VMPgotPFA+PEI+VmFsaWRhdGluZyBhIG5vbiB3ZWxsIGZvcm1lZCBYTUwgRmlsZSAobm8gRFREL1NjaGVtYSk8L0I+PEJSPgotKE5PVEU6IGl0J3MgaW1wb3J0YW50IHRoYXQgdGhlIGZvbGxvd2luZyBiZSB0eXBlZCBpbi4gVGhpcyB0ZXN0IGNhc2UgdHJpZXMgdG8gY292ZXIgc29tZSBvZiB0aGUgbW9yZSBjb21tb24gZXJyb3JzIHRoYXQgcmVuZGVyIGFuIFhNTCBmaWxlIGFzIG5vdCBiZWluZyB3ZWxsLWZvcm1lZC4gSXQgaXMgbm90IGludGVuZGVkIHRvIHZlcmlmeSB0aGF0IGFsbCBwb3NzaWJsZSBlcnJvcnMgYXJlIGJlaW5nIGRldGVjdGVkIGFuZCBncmFjZWZ1bGx5IGhhbmRsZWQuICk8L1A+Ci08VUw+Ci0gIDxMST5TZWxlY3QgdGhlIDxCPkNyZWF0ZSBhIG5ldyBYTUwgZmlsZTwvQj4gdG9vbGJhciBidXR0b24uPC9MST48TEk+QWNjZXB0IHRoZSBkZWZhdWx0IHRvIDxCPkNyZWF0ZSBhIG5ldyBYTUwgZmlsZTwvQj48L0xJPgotICA8TEk+R28gdG8gdGhlIE5leHQgcGFnZQotICAgIDxVTD4KLSAgICAgICAgPExJPlNlbGVjdCA8Qj5YTUxUZXN0MjwvQj4gYXMgdGhlIGZvbGRlcjwvTEk+Ci0gICAgICAgIDxMST5TcGVjaWZ5IGEgRmlsZSBuYW1lIG9mIDxCPk5vbldlbGxGb3JtZWQ8L0I+PC9MST4KLSAgICAgICAgPExJPlNlbGVjdCA8Qj5GaW5pc2g8L0I+PC9MST4KLSAgPC9VTD48L0xJPgotICA8TEk+UHJvbXB0IGZvciBjb250ZW50IGFzc2lzdC48L0xJPgotICA8TEk+U2VsZWN0IDxCPiZsdDs/eG1sIHZlcnNpb249JnF1b3Q7MS4wJnF1b3Q7IGVuY29kaW5nPSZxdW90O1VURi04JnF1b3Q7PyZndDsuPC9CPjwvTEk+Ci0gIDxMST5DcmVhdGUgYSBuZXcgbGluZSBhZnRlciB0aGUgWE1MIGRlY2xhcmF0aW9uLjwvTEk+Ci0gIDxMST5Qcm9tcHQgZm9yIGNvbnRlbnQgYXNzaXN0LjwvTEk+Ci0gIDxMST5TZWxlY3QgY29tbWVudC48L0xJPgotICA8TEk+RW1iZWQgbW9yZSB0aGFuIDIgY29uc2VjdXRpdmUgZGFzaGVzIGluIHRoZSBjb21tZW50LiAKLSAgICAgICAgPEZPTlQgY29sb3I9IiMwMDAwZmYiPihOT1RFOiBtb3JlIHRoYW4gMiBjb25zZWN1dGl2ZSBkYXNoZXMgY2FuIG5vdCBiZSBlbWJlZGRlZCB3aXRoaW4gYSBjb21tZW50KTwvRk9OVD48L0xJPgotICA8TEk+VHlwZSBpbiB0aGUgcmVtYWluaW5nIGxpbmVzIGFzIHNob3duIGJlbG93OiAKLSAgICAgICAgPEZPTlQgY29sb3I9IiNmZjAwMDAiPihJIGNhbid0IHNob3cgdGhlIGxpbmVzIHVudGlsIGRlZmVjdCAxNzc3NTUgaXMgZml4ZWQgLi4uIHVudGlsIHRoZW4sIGhlcmUncyB0aGUgdHlwZSBvZiB0aGluZ3MgdGhhdCBjYXVzZSAKLSAgICAgICAgYSBkb2N1bWVudCB0byBub3QgYmUgd2VsbC1mb3JtZWQpOjwvRk9OVD4KLSAgPFVMPgotICAgIDxMST5jcmVhdGUgYSBzdGFydCBhbmQgZW5kIHRhZyB0aGF0IGRvbid0IG1hdGNoIGluIHRoZWlyIGNhc2Ugc2Vuc2l0aXZpdHkgCi0gICAgICAgIChlLmcuLCAmbHQ7dGFnJmd0OyBhbmQgJmx0Oy9UYWcmZ3Q7KS4gPC9MST4KLSAgICA8TEk+Y3JlYXRlIGEgc3RhcnQgYW5kIGVuZCB0YWcgd2hlcmUgdGhlIHN0YXJ0IHRhZyBjb250YWlucyBhbiBhdHRyaWJ1dGUgdmFsdWUgdGhhdCBpcyBub3QgCi0gICAgICAgIGVuY2xvc2VkIGluIHF1b3Rlcy4KLSAgICAgICAgPEZPTlQgY29sb3I9IiMwMDAwZmYiPihOT1RFOiB0aGlzIGlzIHBlcm1pdHRlZCBpbiBIVE1MLCBidXQgbm90IFhNTCk8L0ZPTlQ+PC9MST4KLSAgICA8TEk+Y3JlYXRlIHRhZ3MgdGhhdCBhcmUgbm90IHByb3Blcmx5IG5lc3RlZC4KLSAgICAgICAgPEZPTlQgY29sb3I9IiMwMDAwZmYiPihOT1RFOiBhIGNoaWxkIHRhZyBtdXN0IGJlIGNvbXBsZXRlZCBiZWZvcmUgaXRzIHBhcmVudCB0YWcpPC9GT05UPjwvTEk+Ci0gICAgPExJPmNyZWF0ZSBhIHN0YXJ0IHRhZyB3aXRob3V0IGEgY29ycmVzb25kaW5nIGVuZCB0YWcuCi0gICAgICAgIDxGT05UIGNvbG9yPSIjMDAwMGZmIj4oTk9URTogYWxsIHN0YXJ0IHRhZ3MgbXVzdCBoYXZlIGEgY29ycmVzcG9uZGluZyBlbmQgdGFnIHVubGVzcyB0aGUgCi0gICAgICAgIHRhZyBpcyBhbiBlbXB0eSB0YWcsIGluIHdoaWNoIGNhc2UgdGhlIHNob3J0aGFuZCB2ZXJzaW9uIGNhbiBiZSB1c2VkICgmbHQ7c2hvcnRUYWcvJmd0OykpLjwvRk9OVD48L0xJPgotICAgIDxMST5kbyBub3QgcHJvdmlkZSBhbiBhdHRyaWJ1dGUgdmFsdWUgKD0mcXVvdDt2YWx1ZSZxdW90OykuCi0gICAgICAgIDxGT05UIGNvbG9yPSIjMDAwMGZmIj4oTk9URTogdGhpcyBpcyBwZXJtaXR0ZWQgaW4gSFRNTCBmb3IgdGhvc2UgYXR0cmlidXRlcyB0aGF0IGhhdmUgCi0gICAgICAgIG9ubHkgb25lIHZhbHVlLCBidXQgaXQncyBub3QgdmFsaWQgaW4gWE1MKTwvRk9OVD48L0xJPgotICAgICA8TEk+ZGVmaW5lIGFuIGF0dHJpYnV0ZSBtb3JlIHRoYW4gb25jZSBpbiBhIHN0YXJ0IHRhZy48L0xJPgotICA8L1VMPjwvTEk+Ci0gIDxMST5TYXZlIHRoZSBmaWxlLjwvTEk+Ci0gIDxMST5WZXJpZnkgZXJyb3JzIGFyZSBsaXN0ZWQgaW4gdGhlIFRhc2tzIHZpZXcgZm9yIHRoZSBhYm92ZSB2aW9sYXRpb25zIGFuZCB0aGF0IGVycm9yIG1hcmtlcnMgYXBwZWFyIG9uIHRoZSBhcHByb3ByaWF0ZSAKLSAgICAgICAgIGxpbmVzIGluIHRoZSBTb3VyY2UgcGFnZS4gPEZPTlQgY29sb3I9IiNmZjAwMDAiPkknbSBub3Qgc3VyZSBob3cgdGhlIERlc2lnbiBwYWdlIGhhbmRsZXMgYW55IG9mIHRoZXNlIHZpb2xhdGlvbnMgCi0gICAgICAgICBhbmQgd2hhdCB3aWxsIGFwcGVhciBpbiB0aGUgT3V0bGluZSBhbmQgUHJvcGVydGllcyB2aWV3LiBUYWxrIHRvIENyYWlnIGFuZCBEYXZpZC48L0ZPTlQ+PC9MST4KLSAgPExJPlJlb3BlbiB0aGUgZmlsZSBhbmQgdmVyaWZ5IGV2ZXJ5dGhpbmcgd2FzIHNhdmVkLjwvTEk+Ci08L1VMPgotCi0KLTxQPjxCPlZhbGlkYXRlIGFuIFhNTCBGaWxlIGJhc2VkIG9uIGEgRFREPC9CPjwvUD4KLTxVTD4KLTxMST5PcGVuIDxCPmZyb21TY3JhdGNoLnhtbDwvQj4uPC9MST4KLTxMST5EZWxldGUgYSBjaGFyYWN0ZXIgZnJvbSBvbmUgb2YgdGhlIHN0YXJ0IHRhZ3MgKG1pc3R5cGluZyBhIHRhZyBpcyBub3QgdW5jb21tb24pLjwvTEk+Ci08TEk+UHJvbXB0IGZvciBjb250ZW50IGFzc2lzdCB3aXRoaW4gdGhlIGJhZCB0YWcuIFZlcmlmeSBhIG1lc3NhZ2UgYXBwZWFycyBpbiB0aGUgc3RhdHVzIGFyZWEKLW9mIHRoZSBXb3JrYmVuY2ggaW5kaWNhdGluZyB0aGF0IHRoZSBiYWQgdGFnIGlzIGFuIHVua25vd24gdGFnLjwvTEk+Ci08TEk+U2VsZWN0IHRoZSA8Qj5WYWxpZGF0ZTwvQj4gdG9vbGJhciBidXR0b24uPC9MST4KLTxMST5WZXJpZnkgYW4gZXJyb3IgYXBwZWFycyBpbiB0aGUgVGFza3MgdmlldyBhbmQgYW4gZXJyb3IgbWFya2VyIGFwcGVhcnMgaW4gdGhlIFNvdXJjZSBwYWdlCi10byBmbGFnIHRoZSBpbnZhbGlkIHRhZy48L0xJPgotPExJPlNlbGVjdCA8Qj5FZGl0LT5VbmRvPC9CPiBmcm9tIHRoZSBTb3VyY2UgcGFnZS48L0xJPgotPExJPlZlcmlmeSB0aGUgYmFkIHRhZyBlcnJvciBubyBsb25nZXIgYXBwZWFycyBpbiB0aGUgVGFza3Mgdmlldy48L0xJPgotPExJPlJlbW92ZSB0aGUgPEI+SGVhZGVyPC9CPiBlbmQgdGFnIGZyb20gdGhlIFNvdXJjZSBwYWdlLjwvTEk+Ci08TEk+U2F2ZSB0aGUgZmlsZS48L0xJPgotPExJPlZlcmlmeSBhbiBlcnJvciBhcHBlYXJzIGluIHRoZSBUYXNrcyB2aWV3IGluZGljYXRpbmcgdGhhdCB0aGUgPEI+SGVhZGVyPC9CPiBlbmQgdGFnIGlzIG1pc3Npbmc8L0xJPgotPExJPkNsb3NlIHRoZSBmaWxlLCByZXNwb25kaW5nIDxCPlllczwvQj4gdG8gdGhlIHNhdmUgY2hhbmdlcyBwcm9tcHQuPC9MST4KLTxMST5Eb3VibGUtY2xpY2sgb24gdGhlIGVycm9yIGluIHRoZSBUYXNrcyB2aWV3LCBhbmQgdmVyaWZ5IDxCPmZyb21TY3JhdGNoLnhtbDwvQj4gb3BlbnMgdG8gdGhlCi1hcHByb3ByaWF0ZSBsaW5lIGluIHRoZSBTb3VyY2UgcGFnZSBvZiB0aGUgWE1MIEVkaXRvci48L0xJPgotPExJPkhlcmUncyBzb21lIG90aGVyIHZpb2xhdGlvbnMgdGhhdCBjYW4gYmUgYXR0ZW1wdGVkOgotPFVMPgotPExJPlNwZWNpZnkgYSBiYWQgYXR0cmlidXRlLjwvTEk+Ci08TEk+U3BlY2lmeSBhIGJhZCBhdHRyaWJ1dGUgdmFsdWUuPC9MST4KLTxMST5TcGVjaWZ5IGNoaWxkIHRhZ3Mgb3V0IG9mIHNlcXVlbmNpbmcgb3JkZXI8L0xJPgotPExJPlZpb2xhdGUgdGhlIG9jY3VycmVuY2UgaW5kaWNhdG9yIGZvciBhIHRhZyAoZS5nLiwgaWYgdGhlIERURCBzaG93cyA/LCB0aGVuIG9ubHkKLTAgb3IgMSBvY2N1cnJlbmNlcyBvZiB0aGUgdGFnIGlzIHBlcm1pdHRlZCkuCi08L1VMPjwvTEk+Ci08TEk+U2F2ZSB0aGUgZmlsZS48L0xJPgotPExJPlZlcmlmeSBlcnJvcnMgYXJlIGxpc3RlZCBpbiB0aGUgVGFza3MgdmlldyBmb3IgdGhlIGFib3ZlIHZpb2xhdGlvbnMgYW5kIHRoYXQgZXJyb3IgbWFya2VycyBhcHBlYXIgb24gdGhlIGFwcHJvcHJpYXRlIAotbGluZXMgaW4gdGhlIFNvdXJjZSBwYWdlLiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+SSdtIG5vdCBzdXJlIGhvdyB0aGUgRGVzaWduIHBhZ2UgaGFuZGxlcyBhbnkgb2YgdGhlc2UgdmlvbGF0aW9ucyAKLWFuZCB3aGF0IHdpbGwgYXBwZWFyIGluIHRoZSBPdXRsaW5lIGFuZCBQcm9wZXJ0aWVzIHZpZXcuIFRhbGsgdG8gQ3JhaWcgYW5kIERhdmlkLjwvRk9OVD48L0xJPgotPExJPlJlb3BlbiB0aGUgZmlsZSBhbmQgdmVyaWZ5IGV2ZXJ5dGhpbmcgd2FzIHNhdmVkLjwvTEk+Ci08L1VMPgotCi08IS0tICByZW1vdmVkIHNpbmNlIGRvbmUgZWxzZXdoZXJlIGFzIHBhcnQgb2Ygb3RoZXIgc2NlbmVyaW9zCi08UD48Qj5WYWxpZGF0ZSBhbiBYTUwgRmlsZSBiYXNlZCBvbiBhIFNjaGVtYTwvQj48QlI+Ci0tLT4KLTxJTUcgYm9yZGVyPSIwIiBoZWlnaHQ9IjYzIiBzcmM9InUwMTFhbmkuZ2lmIiB3aWR0aD0iNjMiPjwvUD4KLQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlIFNwZWNpZmljIHRlc3QgY2FzZXMKLSAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tPgotPEgyPjxCPjxGT05UIGNvbG9yPSIjMDAwMGZmIj5Tb3VyY2UgU3BlY2lmaWMgdGVzdCBjYXNlcyAob3B0aW9uYWwpPC9GT05UPjwvQj48L0gyPgotPFA+PEI+VXNpbmcgdGhlIEF1dG8gQ29tcGxldGlvbiBDb250ZW50IEFzc2lzdCBQcmVmZXJlbmNlPC9CPjxCUj4KLTxVTD4KLTxMST5PcGVuIGEgYW55IFhNTCBmaWxlIHRoYXQgaGFzIGVub3VnaCB0YWdzIHRvIHByb3ZpZGUgc3ludGF4IGhpZ2h0bGlnaHRpbmcuPC9MST4KLTxMST5XaGlsZSB0aGF0IGZpbGUgaXMgbGVmdCBvcGVuLCBnbyB0byB0aGUgUHJlZmVyZW5jZXMgcGFnZSwgc2VsZWN0Ci1YTUwgRWRpdG9yLCB0aGVuIFNvdXJjZSBTdHlsZXMuIDwvTEk+Ci08TEk+T24gdGhhdCBwYWdlLCB1c2UgdGhlIG1vdXNlIHRvICJzZWxlY3QiIGEgdGFnIG5hbWUuIFRoZSB0YWcgbmFtZSBpcyBub3QgbGl0ZXJhbGx5Ci1zZWxlY3RlZCwgYnV0IHdoZW4geW91IGNsaWNrIG9uIGFuIGVsZW1lbnQgaW4gdGhlIGV4YW1wbGUgdGV4dCwgdGhlIGxpc3QKLWFib3ZlIGl0IHdpbGwgZGlzcGxheSB0aGUgdHlwZSBvZiBlbGVtZW50IGl0IGlzLCBhbmQgd2hhdCBpdHMgY3VycmVudCBjb2xvcnMgYXJlLjwvTEk+Ci08TEk+Rm9yICJ0YWcgbmFtZSIsIHNlbGVjdCB0aGUgYm9sZCBjaGVjayBib3guIFRoZW4gcHJlc3MgQXBwbHksIGFuZCB5b3Ugc2hvdWxkCi1zZWUgdGhlIGNoYW5nZSB0YWtlIGVmZmVjdCBpbiB5b3VyIGFjdGl2ZSBlZGl0b3IuPC9MST4KLTxMST5TZWxlY3QgIkRlZmF1bHRzIiBhbmQgbWFrZSBzdXJlIHRoZSB0YWcgbmFtZXMgYXJlIHNldCBiYWNrIHRvIG5vdCBib2xkLjwvTEk+Ci08L1VMPgotPElNRyBib3JkZXI9IjAiIGhlaWdodD0iNjMiIHNyYz0idTAxMWFuaS5naWYiIHdpZHRoPSI2MyI+PC9QPgotPFA+PEI+RG91YmxlLUNsaWNraW5nIFdpdGhpbiB0aGUgU291cmNlPC9CPiA8QlI+Ci0oTk9URTogaWYgeW91IGNvbnRpbnVlIHRvIGRvdWJsZS1jbGljayBhdCBhIGdpdmVuIGN1cnNvciBwb3NpdGlvbiwgdGhlIHNlbGVjdGlvbiBhcmVhIHdpbGwgY29udGludWUgdG8gZXhwYW5kLiBXaGVuIHRoZSBtYXhpbXVtIHJlZ2lvbiBhcmVhIGhhcyBiZWVuIHJlYWNoZWQsIHRoZSBuZXh0IGRvdWJsZS1jbGljayB3aWxsIGNhdXNlIHRoZSBvcmlnaW5hbCBzZWxlY3Rpb24uIFNvLCB0aGUgc2VsZWN0aW9ucyB3aWxsIHdyYXAvY3ljbGUuIDxGT05UIGNvbG9yPSIjMDAwMGZmIj5Db29sITwvRk9OVD4pLjwvUD4KLTxVTD4KLSAgPExJPk9wZW4gPEI+Sm9iRGVzYy54bWw8L0I+LjwvTEk+Ci0gIDxMST5Eb3VibGUtY2xpY2tpbmcgd2l0aGluIHRhZyBjb250ZW50OgotICA8VUw+Ci0gICAgPExJPkRvdWJsZS1jbGljayB3aXRoaW4gPEI+TWlkZGxld2FyZTwvQj4gb24gbGluZSA3LjwvTEk+Ci0gICAgPExJPlZlcmlmeSA8Qj5NaWRkbGV3YXJlPC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgU291cmNlIGFuZCBEZXNpZ24gcGFnZXMgYW5kIDxCPkJ1c1R5cGU8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBPdXRsaW5lIHZpZXcuIDxGT05UIGNvbG9yPSIjZmYwMDAwIj5Ob3Qgc3VyZSB3aGF0IHRoZSBQcm9wZXJ0aWVzIHZpZXcgaXMgc3VwcG9zZWQgdG8gc2hvdy4gSXQgZ29lcyBibGFuay4gU2VlIGRlZmVjdCAxNzc3NTMuIEFsc28sIDxCPk1pZGRsZXdhcmU8L0I+IHdhc24ndCBzZWxlY3RlZCBpbiB0aGUgRGVzaWduIHBhZ2UgYXMgaGFkIGV4cGVjdGVkLiBUaGUgRGVzaWduIHBhZ2Ugb25seSBzZWVtcyB0byBzdGF5IGluIHN5bmMgYXQgdGhlIGVsZW1lbnQvdGFnIGxldmVsIGxpa2UgdGhlIE91dGxpbmUgdmlldy4gVGFsayB0byBDcmFpZyBhYm91dCB0aGlzLjwvRk9OVD48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2sgYWdhaW4gYXQgdGhlIHNhbWUgY3Vyc29yIHBvc2l0aW9uLjwvTEk+Ci0gICAgPExJPlZlcmlmeSA8Qj5BcHBsaWNhdGlvbiBhbmQgTWlkZGxld2FyZSBTb2Z0d2FyZTwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIFNvdXJjZSBhbmQgRGVzaWduIHBhZ2VzIGFuZCA8Qj5CdXNUeXBlPC9CPiByZW1haW5zIHRvIGJlIHRoZSBvbmx5IHRoaW5nIHNlbGVjdGVkIGluIHRoZSBPdXRsaW5lIHZpZXcuPC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNraW5nIGFnYWluIHdpbGwgY2F1c2UgY3ljbGluZyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzZWxlY3Rpb24uPC9MST4KLSAgPC9VTD48L0xJPgotICA8TEk+RG91YmxlLWNsaWNraW5nIHdpdGhpbiBhIHRhZyBuYW1lOgotICA8VUw+Ci0gICAgPExJPkRvdWJsZS1jbGljayB3aXRoaW4gPEI+SG93VG9BcHBseTwvQj4gb24gbGluZSA2MS48L0xJPgotICAgIDxMST5WZXJpZnkgPEI+SG93VG9BcHBseTwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIFNvdXJjZSBwYWdlLCBEZXNpZ24gcGFnZSwgYW5kIE91dGxpbmUgdmlldy4gCi0gICAgICAgIDxCPmNsYXNzPC9CPiwgPEI+ZGlzdHJpYnV0ZTwvQj4sIDxCPmlkPC9CPiwgYW5kIDxCPm5hbWU8L0I+IHNob3VsZCBhcHBlYXIgaW4gdGhlIAotICAgICAgICBQcm9wZXJ0aWVzIHZpZXcuIE9ubHkgPEI+ZGlzdHJpYnV0ZTwvQj4gc2hvdWxkIHNob3cgYSB2YWx1ZS48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2sgYWdhaW4gYXQgdGhlIHNhbWUgY3Vyc29yIHBvc2l0aW9uLjwvTEk+Ci0gICAgPExJPlZlcmlmeSB0aGUgd2hvbGUgPEI+SG93VG9BcHBseTwvQj4gc3RhcnQgdGFnIChpbmNsdWRpbmcgaXRzIGRlbGltaXRlcnMpIGlzIHNlbGVjdGVkIAotICAgICAgICBpbiB0aGUgU291cmNlIHBhZ2UuIDxCPkhvd1RvQXBwbHk8L0I+IHNob3VsZCByZW1haW4gc2VsZWN0ZWQgaW4KLSAgICAgICAgdGhlIERlc2lnbiBwYWdlIGFuZCBPdXRsaW5lIHZpZXcuIDxCPjxGT05UIGNvbG9yPSIjZmYwMDAwIj5Ib3dUb0FwcGx5PC9GT05UPjwvQj48Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+IGFuZCBhbGwgZGVzY2VuZGVudHMgYmVjb21lIHNlbGVjdGVkIGluIHRoZSBPdXRsaW5lIHZpZXcgKGRlZmVjdCAxNzc3NTIpLiBBbHNvLCB0aGUgUHJvcGVydGllcyB2aWV3IHNob3dzIG5vIHByb3BlcnRpZXMgKGRlZmVjdCAxNzc3NTMpLjwvRk9OVD48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2tpbmcgYWdhaW4gd2lsbCBjYXVzZSBjeWNsaW5nIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNlbGVjdGlvbi48L0xJPgotICA8L1VMPjwvTEk+Ci0gIDxMST5Eb3VibGUtY2xpY2tpbmcgd2l0aGluIGFuIGF0dHJpYnV0ZSBuYW1lOgotICA8VUw+Ci0gICAgPExJPlR5cGUgPEI+Q3RybCtFbmQ8L0I+IHRvIHBvc2l0aW9uIHRoZSBjdXJzb3IgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZS48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2sgd2l0aGluIDxCPmRpc3RyaWJ1dGU8L0I+IG9uIGxpbmUgNjEuIFZlcmlmeSA8Qj5kaXN0cmlidXRlPC9CPiBpcyBzZWxlY3RlZCAKLSAgICAgICAgaW4gdGhlIFNvdXJjZSBwYWdlIGFuZCA8Qj5Ib3dUb0FwcGx5PC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgRGVzaWduIHBhZ2UgYW5kIE91dGxpbmUgCi0gICAgICAgIHZpZXcuIDxCPmNsYXNzPC9CPiwgPEI+ZGlzdHJpYnV0ZTwvQj4sIDxCPmlkPC9CPiwgYW5kIDxCPm5hbWU8L0I+IHNob3VsZCBhcHBlYXIgaW4gCi0gICAgICAgIHRoZSBQcm9wZXJ0aWVzIHZpZXcuIE9ubHkgPEI+ZGlzdHJpYnV0ZTwvQj4gc2hvdWxkIHNob3cgYSB2YWx1ZS48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2sgYXQgdGhlIHNhbWUgY3Vyc29yIHBvc2l0aW9uLiBWZXJpZnkgPEI+ZGlzdHJpYnV0ZT0iaW50ZXJuYWwiPC9CPiBpcwotICAgICAgICBzZWxlY3RlZCBpbiB0aGUgU291cmNlLiBOb3RoaW5nIHNob3VsZCBjaGFuZ2UgaW4gdGhlIERlc2lnbiBwYWdlIG9yIHZpZXdzLjwvTEk+ICAgICAgICAgICAgICAgICAKLSAgICA8TEk+RG91YmxlLWNsaWNrIGF0IHRoZSBzYW1lIGN1cnNvciBwb3NpdGlvbi4gVmVyaWZ5IHRoZSB3aG9sZSA8Qj5Ib3dUb0FwcGx5PC9CPiBzdGFydCB0YWcgaXMgc2VsZWN0ZWQgaW4gdGhlIFNvdXJjZSBwYWdlIChpbmNsdWRpbmcgaXRzIGRlbGltaXRlcnMpLiBOb3RoaW5nIHNob3VsZCBjaGFuZ2UgaW4gdGhlIERlc2lnbiBwYWdlIG9yIHZpZXdzLjxCPjxGT05UIGNvbG9yPSIjZmYwMDAwIj5Ib3dUb0FwcGx5PC9GT05UPjwvQj48Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+IGFuZCBhbGwgZGVzY2VuZGVudHMgYmVjb21lIHNlbGVjdGVkIGluIHRoZSBPdXRsaW5lIHZpZXcgKGRlZmVjdCAxNzc3NTIpLiBBbHNvLCB0aGUgUHJvcGVydGllcyB2aWV3IHNob3dzIG5vIHByb3BlcnRpZXMgKGRlZmVjdCAxNzc3NTMpLjwvRk9OVD48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2tpbmcgYWdhaW4gd2lsbCBjYXVzZSBjeWNsaW5nIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNlbGVjdGlvbi48L0xJPgotICA8L1VMPjwvTEk+Ci0gPExJPkRvdWJsZS1jbGlja2luZyB3aXRoaW4gYW4gYXR0cmlidXRlIHZhbHVlOgotICA8VUw+Ci0gICAgPExJPlR5cGUgPEI+Q3RybCtIb21lPC9CPiB0byBwb3NpdGlvbiB0aGUgY3Vyc29yIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUuPC9MST4KLSAgICA8TEk+U2Nyb2xsIGRvd24gc3VjaCB0aGF0IGxpbmUgNjEgaXMgdmlzaWJsZS48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2sgd2l0aGluIDxCPmludGVybmFsPC9CPiBvbiBsaW5lIDYxLiBWZXJpZnkgPEI+aW50ZXJuYWw8L0I+IGlzIHNlbGVjdGVkIAotICAgICAgICBpbiB0aGUgU291cmNlIHBhZ2UgYW5kIDxCPkhvd1RvQXBwbHk8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBEZXNpZ24gcGFnZSBhbmQgT3V0bGluZSAKLSAgICAgICAgdmlldy4gPEI+Y2xhc3M8L0I+LCA8Qj5kaXN0cmlidXRlPC9CPiwgPEI+aWQ8L0I+LCBhbmQgPEI+bmFtZTwvQj4gc2hvdWxkIGFwcGVhciBpbiAKLSAgICAgICAgdGhlIFByb3BlcnRpZXMgdmlldy4gT25seSA8Qj5kaXN0cmlidXRlPC9CPiBzaG91bGQgc2hvdyBhIHZhbHVlLjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGljayBhdCB0aGUgc2FtZSBjdXJzb3IgcG9zaXRpb24uIFZlcmlmeSA8Qj4iaW50ZXJuYWwiPC9CPiBpcwotICAgICAgICBzZWxlY3RlZCBpbiB0aGUgU291cmNlLiBOb3RoaW5nIHNob3VsZCBjaGFuZ2UgaW4gdGhlIERlc2lnbiBwYWdlIG9yIHZpZXdzLjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGljayBhdCB0aGUgc2FtZSBjdXJzb3IgcG9zaXRpb24uIFZlcmlmeSA8Qj5kaXN0cmlidXRlPSJpbnRlcm5hbCI8L0I+IGlzCi0gICAgICAgIHNlbGVjdGVkIGluIHRoZSBTb3VyY2UuIE5vdGhpbmcgc2hvdWxkIGNoYW5nZSBpbiB0aGUgRGVzaWduIHBhZ2Ugb3Igdmlld3MuPC9MST4gICAgICAgICAgICAgICAgIAotICAgIDxMST5Eb3VibGUtY2xpY2sgYXQgdGhlIHNhbWUgY3Vyc29yIHBvc2l0aW9uLiBWZXJpZnkgdGhlIHdob2xlIDxCPkhvd1RvQXBwbHk8L0I+IHN0YXJ0IHRhZyBpcyBzZWxlY3RlZCBpbiB0aGUgU291cmNlIHBhZ2UgKGluY2x1ZGluZyBpdHMgZGVsaW1pdGVycykuIE5vdGhpbmcgc2hvdWxkIGNoYW5nZSBpbiB0aGUgRGVzaWduIHBhZ2Ugb3Igdmlld3MuIDxCPjxGT05UIGNvbG9yPSIjZmYwMDAwIj5Ib3dUb0FwcGx5PC9GT05UPjwvQj48Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+IGFuZCBhbGwgZGVzY2VuZGVudHMgYmVjb21lIHNlbGVjdGVkIGluIHRoZSBPdXRsaW5lIHZpZXcgKGRlZmVjdCAxNzc3NTIpLiBBbHNvLCB0aGUgUHJvcGVydGllcyB2aWV3IHNob3dzIG5vIHByb3BlcnRpZXMgKGRlZmVjdCAxNzc3NTMpLjwvRk9OVD48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2tpbmcgYWdhaW4gd2lsbCBjYXVzZSBjeWNsaW5nIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNlbGVjdGlvbi48L0xJPgotICA8L1VMPjwvTEk+Ci08L1VMPgotCi08UD48Qj5Gb3JtYXR0aW5nIGEgRmlsZSBDcmVhdGVkIGJ5IERpZmZlcmVudCBFZGl0b3JzPC9CPjxCUj4KLTx1bD4KLTxsaT4KLUltcG9ydCB0aGUgPGI+Sm9iUG9zdGluZy5kdGQ8L2I+IGFuZCA8Yj5Kb2JEZXNjLnhtbDwvYj48L2xpPgotCi08bGk+Ci1PcGVuIHRoZSBKb2JEZXNjLnhtbC4gQ2hlY2sgdGhlIHNvdXJjZSBmb3IgaW5kZW50YXRpb24gdG8gc2VlIGlmIGl0IHByZXNlcnZlcwotdGhlIHdoaXRlIHNwYWNlIGZyb20gdGhlIG9yaWdpbmFsIGRvY3VtZW50LjwvbGk+Ci0KLTxsaT4KLVRoZSBvcmlnbmFsIGRvY3VtZW50IHVzZXMgc3BhY2VzIGFuZCB0YWJzLCBzbyB0aGUgZm9ybWF0dGluZyB3aWxsIGFwcGVhciBhIGxpdHRsZSB3cm9uZy4KLUJ5IHVzaW5nIHRoZSByaWdodC9sZWZ0IGFycm93cywgdmVyaWZ5IHRoYXQgc29tZSBzcGFjZSBpcyBzcGFjZXMgYW5kIHNvbWUgc3BhY2UKLWlzIHRhYiBjaGFyYWN0ZXJzLjwvbGk+Ci08TEk+VXNlICdmb3JtYXQgZG9jdW1lbnQnIHRvIGJlIHN1cmUgaXQgZm9ybWF0cy4gPC9MST4KLTxMST5UaGUgZGVmYXVsdCBpcyB0byBmb3JtYXQgd2l0aCBzcGFjZXMgLi4uIHZlcmlmeSBvbmx5IHNwYWNlcyByZW1haW4gaW4gZmlsZSwgbm90IHRhYiBjaGFyYWN0ZXMuIAotKEp1c3QgYSBsaXR0bGUgbW92ZW1lbnQgd2l0aCB0aGUgYXJyb3cga2V5cyBzaG91bGQgc3VmZmljZS48L0xJPgotPExJPkdvIHRvIHRoZSBwcmVmZXJlbmNlIHBhZ2UgdG8gY2hhbmdlIHRoZSBmb3JtYXQgc2V0dGluZ3MgZm9yIHRoZSBYTUwgRWRpdG9yCi10byB1c2UgdGhlIHRhYiBjaGFyYWN0ZXIgaW5zdGVhZCBvZiA0IHNwYWNlcy4gV2hpbGUgdGhlcmUsIHZlcmlmeSB0aGF0IHRoZSBkaWFsb2cKLXdpbGwgbm90IGFsbG93IG90aGVyIHZhbHVlcyB0byBiZSBpbnRlcmVkIGV4Y2VwdCAid2hpdGVzcGFjZSIgLi4uJ1x0J3MgYW5kIGJsYW5rcy4KLTwvTEk+Ci08TEk+Rm9ybWF0IHRoZSBkb2N1bWVudCBhZ2FpbiBhbmQgYmUgc3VyZSB0aGlzIHRpbWUgdGFiIGNoYXJhY3RlcnMgd2VyZSB1c2VkLjwvTEk+Ci08L3VsPgotPElNRyBib3JkZXI9IjAiIGhlaWdodD0iNjMiIHNyYz0idTAxMWFuaS5naWYiIHdpZHRoPSI2MyI+PC9QPgotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgICAgICAgICAgICAgICAgICAgICAgT3RoZXIgdGVzdCBjYXNlcwotICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0+Ci08SDI+PEI+PEZPTlQgY29sb3I9IiMwMDAwZmYiPk90aGVyIHRlc3QgY2FzZXM8L0ZPTlQ+PC9CPjwvSDI+Ci08UD48Qj5Bc3NvY2lhdGUgdGhlIFhNTCBFZGl0b3IgdG8gYSBuZXcgZmlsZSB0eXBlPC9CPjwvUD4KLTxVTD4KLSAgPExJPldpbmRvdy0mZ3Q7UHJlZmVyZW5jZXM8Qj48L0I+LjwvTEk+Ci0gIDxMST5FeHBhbmQgPEI+V29ya2JlbmNoPC9CPi48L0xJPgotICA8TEk+U2VsZWN0IDxCPkZpbGUgRWRpdG9yczwvQj4uPC9MST4KLSAgPExJPlNlbGVjdCB0aGUgPEI+QWRkPC9CPiBidXR0b24gdG8gYWRkIGEgbmV3IGZpbGUgdHlwZS48L0xJPgotICA8TEk+U3BlY2lmeSBhIGZpbGUgdHlwZSBvZiA8Qj4qLnNldDwvQj4gYW5kIHRoZW4gY2xvc2UgdGhlIEFkZCBkaWFsb2cuPC9MST4KLSAgPExJPlZlcmlmeSA8Qj4qLnNldDwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIGxpc3Qgb2YgZmlsZSB0eXBlcy48L0xJPgotICA8TEk+U2VsZWN0IHRoZSA8Qj5BZGQ8L0I+IGJ1dHRvbiB0byBhc3NvY2lhdGUgdGhlIFhNTCBFZGl0b3IgdG8gdGhlIG5ldyBmaWxlIHR5cGUuPC9MST4KLSAgPExJPlNlbGVjdCA8Qj5YTUwgRWRpdG9yPC9CPiBmcm9tIHRoZSBsaXN0IG9mIGVkaXRvcnMuIFZlcmlmeSBpdCBhcHBlYXJzIHdpdGggaXRzIG93biBzcGVjaWFsIGljb24uIENsb3NlIHRoZSBkaWFsb2cuIDxGT05UIGNvbG9yPSIjZmYwMDAwIj5OT1RFOiB3YWl0aW5nIHRvIGhlYXIgYmFjayBmcm9tIE9USSBvbiBob3cgY2FuIHByZXZlbnQgMiBYTUwgRWRpdG9yIGVudHJpZXMgZnJvbSBhcHBlYXJpbmcgaW4gdGhlIGxpc3QuPC9GT05UPjwvTEk+Ci0gIDxMST5WZXJpZnkgPEI+WE1MIEVkaXRvcjwvQj4gYXBwZWFycyBhcyB0aGUgZGVmYXVsdCBlZGl0b3Igbm93IGZvciB0aGUgPEI+Ki5zZXQ8L0I+IGZpbGUgdHlwZS48L0xJPgotICA8TEk+T3BlbiA8Qj5nb3RjaGFUQ0JlYW5zLnNldDwvQj4gZnJvbSB0aGUgTmF2aWdhdG9yIHZpZXcuIFZlcmlmeSBpdCBvcGVucyB0byB0aGUgWE1MIEVkaXRvci48L0xJPgotPC9VTD4KLTxQPjxGT05UIGNvbG9yPSIjMDAwMGZmIj5USEUgRU5EITwvRk9OVD48L1A+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL011bHRpTm9uRGVmYXVsdC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9NdWx0aU5vbkRlZmF1bHQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjc3MjExMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL011bHRpTm9uRGVmYXVsdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotPEhFQUQ+Ci08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTYiPgotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08TUVUQSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9IklCTSBXZWJTcGhlcmUgU3R1ZGlvIj4KLTxUSVRMRT5JQk0gV2ViU3BoZXJlIFNhbXBsZXMgR2FsbGVyeTwvVElUTEU+Ci08L0hFQUQ+Ci08RlJBTUVTRVQgcm93cz0iNzUsKiI+Ci0JPEZSQU1FIG5hbWU9InRpdGxlIiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBmcmFtZWJvcmRlcj0iMCIgc3JjPSJNZW51L1RpdGxlLmh0bWwiIHNjcm9sbGluZz0iTk8iIG5vcmVzaXplPgotCTxGUkFNRVNFVCBjb2xzPSIxNjAsKiI+Ci0JCTxGUkFNRSBuYW1lPSJtZW51IiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBmcmFtZWJvcmRlcj0iMCIgc3JjPSJNZW51L01lbnUuaHRtbCIgc2Nyb2xsaW5nPSJhdXRvIiBub3Jlc2l6ZT4KLQkJPEZSQU1FIG5hbWU9Im1haW4iIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiIGZyYW1lYm9yZGVyPSIwIiBzcmM9Ik1lbnUvU2FtcGxlc0ludHJvLmh0bWwiIHNjcm9sbGluZz0iYXV0byIgbm9yZXNpemU+Ci0JPC9GUkFNRVNFVD4KLQk8Tk9GUkFNRVM+Ci0JPEJPRFk+Ci0JPFA+VG8gdmlldyB0aGlzIHBhZ2UsIHlvdSBuZWVkIGEgYnJvd3NlciB0aGF0IHN1cHBvcnRzIGZyYW1lcy48L1A+Ci0JPC9CT0RZPgotCTwvTk9GUkFNRVM+Ci08L0ZSQU1FU0VUPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9Ob0VuY29kaW5nLmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL05vRW5jb2RpbmcuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDcwZTRmZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL05vRW5jb2RpbmcuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLTxIRUFEPgotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Ci08TUVUQSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9IklCTSBXZWJTcGhlcmUgU3R1ZGlvIj4KLTxUSVRMRT5JQk0gV2ViU3BoZXJlIFNhbXBsZXMgR2FsbGVyeTwvVElUTEU+Ci08L0hFQUQ+Ci08RlJBTUVTRVQgcm93cz0iNzUsKiI+Ci0JPEZSQU1FIG5hbWU9InRpdGxlIiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBmcmFtZWJvcmRlcj0iMCIgc3JjPSJNZW51L1RpdGxlLmh0bWwiIHNjcm9sbGluZz0iTk8iIG5vcmVzaXplPgotCTxGUkFNRVNFVCBjb2xzPSIxNjAsKiI+Ci0JCTxGUkFNRSBuYW1lPSJtZW51IiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBmcmFtZWJvcmRlcj0iMCIgc3JjPSJNZW51L01lbnUuaHRtbCIgc2Nyb2xsaW5nPSJhdXRvIiBub3Jlc2l6ZT4KLQkJPEZSQU1FIG5hbWU9Im1haW4iIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiIGZyYW1lYm9yZGVyPSIwIiBzcmM9Ik1lbnUvU2FtcGxlc0ludHJvLmh0bWwiIHNjcm9sbGluZz0iYXV0byIgbm9yZXNpemU+Ci0JPC9GUkFNRVNFVD4KLQk8Tk9GUkFNRVM+Ci0JPEJPRFk+Ci0JPFA+VG8gdmlldyB0aGlzIHBhZ2UsIHlvdSBuZWVkIGEgYnJvd3NlciB0aGF0IHN1cHBvcnRzIGZyYW1lcy48L1A+Ci0JPC9CT0RZPgotCTwvTk9GUkFNRVM+Ci08L0ZSQU1FU0VUPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9Ob3JtYWxOb25EZWZhdWx0Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL05vcm1hbE5vbkRlZmF1bHQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmEzMGM5Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL05vcm1hbE5vbkRlZmF1bHQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTxIRUFEPgotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Ci08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08TUVUQSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9IklCTSBXZWJTcGhlcmUgU3R1ZGlvIj4KLTxUSVRMRT5JQk0gV2ViU3BoZXJlIFNhbXBsZXMgR2FsbGVyeTwvVElUTEU+Ci08L0hFQUQ+Ci08RlJBTUVTRVQgcm93cz0iNzUsKiI+Ci0JPEZSQU1FIG5hbWU9InRpdGxlIiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBmcmFtZWJvcmRlcj0iMCIgc3JjPSJNZW51L1RpdGxlLmh0bWwiIHNjcm9sbGluZz0iTk8iIG5vcmVzaXplPgotCTxGUkFNRVNFVCBjb2xzPSIxNjAsKiI+Ci0JCTxGUkFNRSBuYW1lPSJtZW51IiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBmcmFtZWJvcmRlcj0iMCIgc3JjPSJNZW51L01lbnUuaHRtbCIgc2Nyb2xsaW5nPSJhdXRvIiBub3Jlc2l6ZT4KLQkJPEZSQU1FIG5hbWU9Im1haW4iIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiIGZyYW1lYm9yZGVyPSIwIiBzcmM9Ik1lbnUvU2FtcGxlc0ludHJvLmh0bWwiIHNjcm9sbGluZz0iYXV0byIgbm9yZXNpemU+Ci0JPC9GUkFNRVNFVD4KLQk8Tk9GUkFNRVM+Ci0JPEJPRFk+Ci0JPFA+VG8gdmlldyB0aGlzIHBhZ2UsIHlvdSBuZWVkIGEgYnJvd3NlciB0aGF0IHN1cHBvcnRzIGZyYW1lcy48L1A+Ci0JPC9CT0RZPgotCTwvTk9GUkFNRVM+Ci08L0ZSQU1FU0VUPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9ub3F1b3Rlcy5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9ub3F1b3Rlcy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTRjZGU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvbm9xdW90ZXMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLTxIRUFEPgotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Ci08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9dGV4dC9odG1sOyBjaGFyc2V0PVVURi04PgotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktNiI+Ci08TUVUQSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9IklCTSBXZWJTcGhlcmUgU3R1ZGlvIj4KLTxUSVRMRT5JQk0gV2ViU3BoZXJlIFNhbXBsZXMgR2FsbGVyeTwvVElUTEU+Ci08L0hFQUQ+Ci08RlJBTUVTRVQgcm93cz0iNzUsKiI+Ci0JPEZSQU1FIG5hbWU9InRpdGxlIiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBmcmFtZWJvcmRlcj0iMCIgc3JjPSJNZW51L1RpdGxlLmh0bWwiIHNjcm9sbGluZz0iTk8iIG5vcmVzaXplPgotCTxGUkFNRVNFVCBjb2xzPSIxNjAsKiI+Ci0JCTxGUkFNRSBuYW1lPSJtZW51IiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBmcmFtZWJvcmRlcj0iMCIgc3JjPSJNZW51L01lbnUuaHRtbCIgc2Nyb2xsaW5nPSJhdXRvIiBub3Jlc2l6ZT4KLQkJPEZSQU1FIG5hbWU9Im1haW4iIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiIGZyYW1lYm9yZGVyPSIwIiBzcmM9Ik1lbnUvU2FtcGxlc0ludHJvLmh0bWwiIHNjcm9sbGluZz0iYXV0byIgbm9yZXNpemU+Ci0JPC9GUkFNRVNFVD4KLQk8Tk9GUkFNRVM+Ci0JPEJPRFk+Ci0JPFA+VG8gdmlldyB0aGlzIHBhZ2UsIHlvdSBuZWVkIGEgYnJvd3NlciB0aGF0IHN1cHBvcnRzIGZyYW1lcy48L1A+Ci0JPC9CT0RZPgotCTwvTk9GUkFNRVM+Ci08L0ZSQU1FU0VUPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9ub3F1b3Rlc1VURjE2bGUuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvbm9xdW90ZXNVVEYxNmxlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjYmQ1MTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9ub3F1b3Rlc1VURjE2bGUuaHRtbAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvdXRmMTZCT00uaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvdXRmMTZCT00uaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDhkNjJkZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL3V0ZjE2Qk9NLmh0bWwKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL3V0ZjE2YmUuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvdXRmMTZiZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYWZlNjliLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvdXRmMTZiZS5odG1sCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC91dGYxNmxlLmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL3V0ZjE2bGUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjRlZmI2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL3V0ZjE2bGUuaHRtbAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9FbXB0eUZpbGUuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL0VtcHR5RmlsZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL0VtcHR5RmlsZS5qc3AKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL0lsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL0lsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZmQwZTc1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9JbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktOD8+DQotPCVAcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBwYWdlRW5jb2Rpbmc9IklTTy04ODU5LTclPg0KLTx0ZXN0Pg0KLTwvdGVzdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTWFsZm9ybWVkTm9FbmNvZGluZy5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTWFsZm9ybWVkTm9FbmNvZGluZy5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2NWViMTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL01hbGZvcm1lZE5vRW5jb2RpbmcuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSIiPz4NCi08dGFnPg0KLUF1c3RyYWxp6w0KLTwvdGFnPg0KLQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9NYWxmb3JtZWROb0VuY29kaW5nWFNMLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9NYWxmb3JtZWROb0VuY29kaW5nWFNMLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGMzMzU5ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTWFsZm9ybWVkTm9FbmNvZGluZ1hTTC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IiI/Pg0KLTx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSINCi0gICAgdmVyc2lvbj0iMS4wIg0KLSAgICB4bWxuczp4YWxhbj0iaHR0cDovL3htbC5hcGFjaGUub3JnL3hzbHQiPg0KLTx4c2w6dmFyaWFibGUgbmFtZT0iYmFkRW5jb2RpbmciPg0KLUF1c3RyYWxp6w0KLTwveHNsOnZhcmlhYmxlPg0KLTwveHNsOnN0eWxlc2hlZXQ+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL05vRW5jb2RpbmdpblhNTERlY2wuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL05vRW5jb2RpbmdpblhNTERlY2wuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNWNlNzZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9Ob0VuY29kaW5naW5YTUxEZWNsLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+DQotPHRlc3Q+DQotPC90ZXN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9Ob3JtYWxOb25EZWZhdWx0LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9Ob3JtYWxOb25EZWZhdWx0LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWU4OWU2OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTm9ybWFsTm9uRGVmYXVsdC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249Ijk5IiBlbmNvZGluZz0iSVNPLTg4NTktOCI/Pg0KLTx0ZXN0Pg0KLTwvdGVzdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTm9ybWFsTm9uRGVmYXVsdFdpdGhYTUxEZWNsLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9Ob3JtYWxOb25EZWZhdWx0V2l0aFhNTERlY2wuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODYyNDhmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9Ob3JtYWxOb25EZWZhdWx0V2l0aFhNTERlY2wuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS04Ij8+DQotPCVAcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBwYWdldEVuY29kaW5nPSJJU08tODg1OS03IiU+DQotPHRlc3Q+DQotPC90ZXN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9Ob3JtYWxQYWdlQ2FzZU5vbkRlZmF1bHQuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL05vcm1hbFBhZ2VDYXNlTm9uRGVmYXVsdC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmMjdiYmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL05vcm1hbFBhZ2VDYXNlTm9uRGVmYXVsdC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLQ0KLTwlQHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgcGFnZUVuY29kaW5nPSJJU08tODg1OS03IiAlPg0KLTx0ZXN0Pg0KLTwvdGVzdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvU2VsQ29sQmVhblJvdzEyUmVzdWx0c0Zvcm0uanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL1NlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjgzN2VlNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvU2VsQ29sQmVhblJvdzEyUmVzdWx0c0Zvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPg0KLUkgZm91bmQgdGhpcyBjaGFuZ2UNCi0NCi08JUAgcGFnZQ0KLWltcG9ydD0iU2VsQ29sQmVhblJvdzEyVmlld0JlYW4iDQotIHBhZ2VFbmNvZGluZz0iU0hJRlRfSklTIg0KLSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUpVTksiDQotJT4NCi08SFRNTD4NCi08SEVBRD4NCi08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1NRVRBSlVOSyI+DQotPE1FVEEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJJQk0gV2ViU3BoZXJlIFN0dWRpbyI+DQotPFRJVExFPlJlc3VsdHMgcGFnZTwvVElUTEU+DQotDQotPCEtLVN0eWxlcy0tPg0KLTxTVFlMRSBUWVBFPSJ0ZXh0L2NzcyI+DQotPCEtLQ0KLUJPRFkgew0KLQliYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmICFpbXBvcnRhbnQ7DQotfQ0KLUgxIHsNCi0JY29sb3I6ICMwMDAwZmYgIWltcG9ydGFudDsNCi0JdGV4dC1hbGlnbjogY2VudGVyICFpbXBvcnRhbnQ7DQotfQ0KLVRIIHsNCi0JdGV4dC1hbGlnbjpsZWZ0ICFpbXBvcnRhbnQ7DQotCWNvbG9yOiAjMDAwMDAwICFpbXBvcnRhbnQ7DQotCXZlcnRpY2FsLWFsaWduOiB0b3AgIWltcG9ydGFudDsNCi19DQotVEQgew0KLQl0ZXh0LWFsaWduOmxlZnQgIWltcG9ydGFudDsNCi0JdmVydGljYWwtYWxpZ246IHRvcCAhaW1wb3J0YW50Ow0KLX0NCi1USC5yZXN1bHQgew0KLQliYWNrZ3JvdW5kLWNvbG9yOiAjOTk5OTk5ICFpbXBvcnRhbnQ7DQotfQ0KLVRELnJlc3VsdCB7DQotCWJhY2tncm91bmQtY29sb3I6ICNjY2NjY2M7DQotCXZlcnRpY2FsLWFsaWduOiB0b3AgIWltcG9ydGFudDsNCi19DQotLS0+DQotPC9TVFlMRT4NCi0NCi0NCi08IS0tU3R5bGUgU2hlZXQtLT4NCi08TElOSyBocmVmPSIvdC90aGVtZS9NYXN0ZXIuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj4NCi08L2hlYWQ+DQotPGJvZHk+DQotDQotPGpzcDp1c2VCZWFuIGlkPSJzZWxDb2xCZWFuUm93MTJCZWFuIiBzY29wZT0ic2Vzc2lvbiIgY2xhc3M9IlNlbENvbEJlYW5Sb3cxMlZpZXdCZWFuIiB0eXBlPSJTZWxDb2xCZWFuUm93MTJWaWV3QmVhbiIvPg0KLTwlDQotDQotDQotDQotDQotDQotDQotDQotDQotDQotDQotDQotDQotDQotDQotDQotJT4NCi0NCi08JQ0KLS8vRXhlY3V0ZSBCZWFuIE1ldGhvZHMNCi0NCi0NCi0lPg0KLQ0KLTwhLS1CYW5uZXItLT4NCi08SDE+UmVzdWx0cyBwYWdlPC9IMT4NCi0NCi08QlI+PEJSPg0KLQ0KLTwhLS0gUmVzdWx0IFRhYmxlIC0tPg0KLTxUQUJMRSBib3JkZXI9IjAiPg0KLTxUQk9EWT4NCi0JCQk8VFI+DQotCQkJPFRIPlRFU1QyX4uNi46LjzwvVEg+DQotCQkJPFREPg0KLQ0KLQk8JT1zZWxDb2xCZWFuUm93MTJCZWFuLmdldFRFU1QyX4uNi46LjygpPT0gbnVsbCA/ICJOVUxMIiA6IHNlbENvbEJlYW5Sb3cxMkJlYW4uZ2V0VEVTVDJfi42LjouPKCkudG9TdHJpbmcoKSU+DQotCQkJPC9URD4NCi0JCTwvVFI+DQotCQk8VFI+DQotCQkJPFRIPlRFU1QyX4+Kj4mPjzwvVEg+DQotCQkJPFREPg0KLQ0KLQk8JT1zZWxDb2xCZWFuUm93MTJCZWFuLmdldFRFU1QyX4+Kj4mPjygpPT0gbnVsbCA/ICJOVUxMIiA6IHNlbENvbEJlYW5Sb3cxMkJlYW4uZ2V0VEVTVDJfj4qPiY+PKCkudG9TdHJpbmcoKSU+DQotCQkJPC9URD4NCi0JCTwvVFI+DQotCQk8VFI+DQotCQkJPFRIPlRFU1QyX4mNiY6JjzwvVEg+DQotCQkJPFREPg0KLQ0KLQk8JT1zZWxDb2xCZWFuUm93MTJCZWFuLmdldFRFU1QyX4mNiY6JjygpPT0gbnVsbCA/ICJOVUxMIiA6IHNlbENvbEJlYW5Sb3cxMkJlYW4uZ2V0VEVTVDJfiY2JjomPKCkudG9TdHJpbmcoKSU+DQotCQkJPC9URD4NCi0JCTwvVFI+DQotCQk8VFI+DQotCQkJPFRIPlRFU1QyX41cjVqNXzwvVEg+DQotCQkJPFREPg0KLQ0KLQk8JT1zZWxDb2xCZWFuUm93MTJCZWFuLmdldFRFU1QyX41cjVqNXygpPT0gbnVsbCA/ICJOVUxMIiA6IHNlbENvbEJlYW5Sb3cxMkJlYW4uZ2V0VEVTVDJfjVyNWo1fKCkudG9TdHJpbmcoKSU+DQotCQkJPC9URD4NCi0JCTwvVFI+DQotCQk8VFI+DQotCQkJPFRIPlRFU1QyX46Njo6OjzwvVEg+DQotCQkJPFREPg0KLQ0KLQk8JT1zZWxDb2xCZWFuUm93MTJCZWFuLmdldFRFU1QyX46Njo6OjygpPT0gbnVsbCA/ICJOVUxMIiA6IHNlbENvbEJlYW5Sb3cxMkJlYW4uZ2V0VEVTVDJfjo2Ojo6PKCkudG9TdHJpbmcoKSU+DQotCQkJPC9URD4NCi0JCTwvVFI+DQotDQotPC9UQk9EWT4NCi08L1RBQkxFID4NCi08L2JvZHk+DQotPC9odG1sPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9VVEY4V2l0aDNCeXRlQk9NLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9VVEY4V2l0aDNCeXRlQk9NLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzlhMzljZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvVVRGOFdpdGgzQnl0ZUJPTS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLe+7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPHRlc3Q+DQotPC90ZXN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9XZWxsRm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvV2VsbEZvcm1lZE5vcm1hbE5vbkRlZmF1bHQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjI5NjUyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9XZWxsRm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTgiPz4NCi08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBwYWdlRW5jb2Rpbmc9IklTTy04ODU5LTciJT4NCi08dGVzdD4NCi08L3Rlc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL2luVmFsaWRFbmNvZGluZ1ZhbHVlLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9pblZhbGlkRW5jb2RpbmdWYWx1ZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkMDkyZTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL2luVmFsaWRFbmNvZGluZ1ZhbHVlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPg0KLTxIVE1MPg0KLTxIRUFEPg0KLTwlQCBwYWdlIA0KLWxhbmd1YWdlPSJqYXZhIg0KLWNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9YWJjIg0KLSU+DQotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPg0KLTxNRVRBIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iSUJNIFdlYlNwaGVyZSBTdHVkaW8iPg0KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPg0KLTxMSU5LIGhyZWY9Ii4uL3RoZW1lL01hc3Rlci5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPg0KLTxUSVRMRT5pblZhbGlkRW5jb2RpbmdWYWx1ZS5qc3A8L1RJVExFPg0KLTwvSEVBRD4NCi08Qk9EWT4NCi08UD5QbGFjZSBpblZhbGlkRW5jb2RpbmdWYWx1ZS5qc3AncyBjb250ZW50IGhlcmUuPC9QPg0KLTwvQk9EWT4NCi08L0hUTUw+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL2phdmFFbmNvZGluZ1ZhbHVlLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9qYXZhRW5jb2RpbmdWYWx1ZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5YzZkMTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL2phdmFFbmNvZGluZ1ZhbHVlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPg0KLTxIVE1MPg0KLTxIRUFEPg0KLTwlQCBwYWdlIA0KLWxhbmd1YWdlPSJqYXZhIiAgDQotY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1DcDEyNTIiDQotJT4NCi08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+DQotPE1FVEEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJJQk0gV2ViU3BoZXJlIFN0dWRpbyI+DQotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+DQotPExJTksgaHJlZj0iLi4vdGhlbWUvTWFzdGVyLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+DQotPFRJVExFPmluVmFsaWRFbmNvZGluZ1ZhbHVlLmpzcDwvVElUTEU+DQotPC9IRUFEPg0KLTxCT0RZPg0KLTxQPlBsYWNlIGluVmFsaWRFbmNvZGluZ1ZhbHVlLmpzcCdzIGNvbnRlbnQgaGVyZS48L1A+DQotPC9CT0RZPg0KLTwvSFRNTD4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9FbmNvZGluZy5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9FbmNvZGluZy5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0OWQwNGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL25vRW5jb2RpbmcuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+DQotPEhUTUw+DQotPEhFQUQ+DQotPCVAIHBhZ2UgDQotbGFuZ3VhZ2U9ImphdmEiDQotY29udGVudFR5cGU9InRleHQvaHRtbCINCi0lPg0KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4NCi08TUVUQSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9IklCTSBXZWJTcGhlcmUgU3R1ZGlvIj4NCi08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4NCi08TElOSyBocmVmPSIuLi90aGVtZS9NYXN0ZXIuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj4NCi08VElUTEU+bm9FbmNvZGluZy5qc3A8L1RJVExFPg0KLTwvSEVBRD4NCi08Qk9EWT4NCi08UD5QbGFjZSBub0VuY29kaW5nLmpzcCdzIGNvbnRlbnQgaGVyZS48L1A+DQotPC9CT0RZPg0KLTwvSFRNTD4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2UuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjQzMmZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2UuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08JUAgcGFnZQ0KLXBhZ2VFbmNvZGluZz0gIklTTy04ODU5LTIiDQotbGFuZ3VhZ2U9ImphdmEiDQotY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0zIg0KLSU+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZU5vRW5jb2RpbmcuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZU5vRW5jb2RpbmcuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NjU2OTAyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VOb0VuY29kaW5nLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPCVAIHBhZ2UgDQotbGFuZ3VhZ2U9ImphdmEiDQotJT4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlVXNpbmdDaGFyc2V0LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VVc2luZ0NoYXJzZXQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NGQ5MDhmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VVc2luZ0NoYXJzZXQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08JUAgcGFnZSANCi1sYW5ndWFnZT0iamF2YSINCi1jb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTMiDQotJT4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlVXNpbmdYTUxTeW50YXguanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZVVzaW5nWE1MU3ludGF4LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzg3NGEwOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlVXNpbmdYTUxTeW50YXguanNwCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08anNwOmRpcmVjdGl2ZS5wYWdlIA0KLXBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMiINCi1sYW5ndWFnZT0iamF2YSINCi1jb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTMiLz4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdEJyb2tlbkxpbmUuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RCcm9rZW5MaW5lLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODI2Nzk4MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdEJyb2tlbkxpbmUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiICANCi0NCi1lbmNvZGluZz0iSVNPLTg4NTktMyIgDQotDQotID8+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3REZWZhdWx0RW5jb2RpbmcuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3REZWZhdWx0RW5jb2RpbmcuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMWYyODdmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0RGVmYXVsdEVuY29kaW5nLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InRlc3RqdW5rIj8+DQotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+DQotPEhUTUw+DQotPEhFQUQ+DQotPCVAIHBhZ2UgDQotbGFuZ3VhZ2U9ImphdmEiDQotY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIg0KLSU+DQotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dGVzdGp1bmsiPg0KLTxNRVRBIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iSUJNIFdlYlNwaGVyZSBTdHVkaW8iPg0KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPg0KLTxMSU5LIGhyZWY9Ii4uL3RoZW1lL01hc3Rlci5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPg0KLTxUSVRMRT50ZXN0RGVmYXVsdEVuY29kaW5nLmpzcDwvVElUTEU+DQotPC9IRUFEPg0KLTxCT0RZPg0KLTxQPlBsYWNlIHRlc3REZWZhdWx0RW5jb2RpbmcuanNwJ3MgY29udGVudCBoZXJlLjwvUD4NCi08L0JPRFk+DQotPC9IVE1MPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0RGVmYXVsdEVuY29kaW5nV2l0aEp1bmsuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3REZWZhdWx0RW5jb2RpbmdXaXRoSnVuay5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkNDg2ODQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3REZWZhdWx0RW5jb2RpbmdXaXRoSnVuay5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ0ZXN0anVuayI/Pg0KLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPg0KLTxIVE1MPg0KLTxIRUFEPg0KLTwlQCBwYWdlIA0KLWxhbmd1YWdlPSJqYXZhIg0KLWNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSINCi0lPg0KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXRlc3RqdW5rIj4NCi08TUVUQSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9IklCTSBXZWJTcGhlcmUgU3R1ZGlvIj4NCi08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4NCi08TElOSyBocmVmPSIuLi90aGVtZS9NYXN0ZXIuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj4NCi08VElUTEU+dGVzdERlZmF1bHRFbmNvZGluZy5qc3A8L1RJVExFPg0KLTwvSEVBRD4NCi08Qk9EWT4NCi08UD5QbGFjZSB0ZXN0RGVmYXVsdEVuY29kaW5nLmpzcCdzIGNvbnRlbnQgaGVyZS48L1A+DQotPCUNCi1TeXN0ZW0ub3V0LnByaW50bG4oInRlc3QiKTsNCi0lPg0KLTwvQk9EWT4NCi08L0hUTUw+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RFeHRyYUp1bmsuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RFeHRyYUp1bmsuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTdmOTU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0RXh0cmFKdW5rLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiAgYWJjZD0iZWZjIg0KLQ0KLWVuY29kaW5nPSJJU08tODg1OS0xIiANCi0NCi0gPz4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdEV4dHJhVmFsaWRTdHVmZi5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdEV4dHJhVmFsaWRTdHVmZi5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3ZDBhM2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RFeHRyYVZhbGlkU3R1ZmYuanNwCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/Pg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0SWxsRm9ybWVkLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0SWxsRm9ybWVkLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjZiZjkwMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdElsbEZvcm1lZC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAgZW5jb2Rpbmc9VVRGLTgiIHN0YW5kYWxvbmU9InllcyI/Pg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0SWxsRm9ybWVkMi5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdElsbEZvcm1lZDIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzhlYzJiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0SWxsRm9ybWVkMi5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9VVRGLTggDQotPHRlc3Q+DQotPC90ZXN0Pg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0Tm9FbmNvZGluZ1ZhbHVlLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0Tm9FbmNvZGluZ1ZhbHVlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODNkMGMxOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdE5vRW5jb2RpbmdWYWx1ZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiICAgID8+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmUuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTAxNzRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0Tm9QYWdlRGlyZWN0aXZlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPHRlc3Q+DQotDQotPC90ZXN0Pg0KLQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0Tm9QYWdlRGlyZWN0aXZlQXRGaXJzdC5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdE5vUGFnZURpcmVjdGl2ZUF0Rmlyc3QuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OWEwYzNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0Tm9QYWdlRGlyZWN0aXZlQXRGaXJzdC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTx0ZXN0Pg0KLSA8JUAgcGFnZSANCi1wYWdlRW5jb2Rpbmc9IklTTy04ODU5LTIiDQotbGFuZ3VhZ2U9ImphdmEiDQotY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0zIg0KLSU+DQotPC90ZXN0Pg0KLQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0Tm9QYWdlRGlyZWN0aXZlSW5MYXJnZUZpbGUuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmVJbkxhcmdlRmlsZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczNDYzNmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmVJbkxhcmdlRmlsZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzNTYgKzAsMCBAQAotPHRlc3Q+DQotDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLTwvdGVzdD4NCi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0Tm9ybWFsQ2FzZS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdE5vcm1hbENhc2UuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTJjNDJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0Tm9ybWFsQ2FzZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0VVRGMTYuRnJvbU5vdGVwYWRqc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdFVURjE2LkZyb21Ob3RlcGFkanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NWI5ODUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0VVRGMTYuRnJvbU5vdGVwYWRqc3AKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdFVURjE2LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0VVRGMTYuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZDllODE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0VVRGMTYuanNwCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2Qk9NLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC91dGYxNkJPTS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4ZTI3MWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2Qk9NLmpzcAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyMi5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlcjIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0N2U2OTE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyMi5qc3AKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlckJFLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyQkUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkN2ZmZDZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyQkUuanNwCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2V2l0aEphcGFuZXNlQ2hhcnMuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2V2l0aEphcGFuZXNlQ2hhcnMuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZGJhOWJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC91dGYxNldpdGhKYXBhbmVzZUNoYXJzLmpzcAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC91dGYxNmJlLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC91dGYxNmJlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmI3MjM3OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdXRmMTZiZS5qc3AKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdXRmMTZsZS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdXRmMTZsZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4NzNjYmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2bGUuanNwCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2bGVfeG1sU3R5bGUuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2bGVfeG1sU3R5bGUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzcyZjJmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC91dGYxNmxlX3htbFN0eWxlLmpzcAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3JlZ3Jlc3Npb25UZXN0RmlsZXMvZGVmZWN0MjIzMzY1L1NlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3JlZ3Jlc3Npb25UZXN0RmlsZXMvZGVmZWN0MjIzMzY1L1NlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjgzN2VlNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9yZWdyZXNzaW9uVGVzdEZpbGVzL2RlZmVjdDIyMzM2NS9TZWxDb2xCZWFuUm93MTJSZXN1bHRzRm9ybS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMjIgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+DQotSSBmb3VuZCB0aGlzIGNoYW5nZQ0KLQ0KLTwlQCBwYWdlDQotaW1wb3J0PSJTZWxDb2xCZWFuUm93MTJWaWV3QmVhbiINCi0gcGFnZUVuY29kaW5nPSJTSElGVF9KSVMiDQotIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SlVOSyINCi0lPg0KLTxIVE1MPg0KLTxIRUFEPg0KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PU1FVEFKVU5LIj4NCi08TUVUQSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9IklCTSBXZWJTcGhlcmUgU3R1ZGlvIj4NCi08VElUTEU+UmVzdWx0cyBwYWdlPC9USVRMRT4NCi0NCi08IS0tU3R5bGVzLS0+DQotPFNUWUxFIFRZUEU9InRleHQvY3NzIj4NCi08IS0tDQotQk9EWSB7DQotCWJhY2tncm91bmQtY29sb3I6ICNmZmZmZmYgIWltcG9ydGFudDsNCi19DQotSDEgew0KLQljb2xvcjogIzAwMDBmZiAhaW1wb3J0YW50Ow0KLQl0ZXh0LWFsaWduOiBjZW50ZXIgIWltcG9ydGFudDsNCi19DQotVEggew0KLQl0ZXh0LWFsaWduOmxlZnQgIWltcG9ydGFudDsNCi0JY29sb3I6ICMwMDAwMDAgIWltcG9ydGFudDsNCi0JdmVydGljYWwtYWxpZ246IHRvcCAhaW1wb3J0YW50Ow0KLX0NCi1URCB7DQotCXRleHQtYWxpZ246bGVmdCAhaW1wb3J0YW50Ow0KLQl2ZXJ0aWNhbC1hbGlnbjogdG9wICFpbXBvcnRhbnQ7DQotfQ0KLVRILnJlc3VsdCB7DQotCWJhY2tncm91bmQtY29sb3I6ICM5OTk5OTkgIWltcG9ydGFudDsNCi19DQotVEQucmVzdWx0IHsNCi0JYmFja2dyb3VuZC1jb2xvcjogI2NjY2NjYzsNCi0JdmVydGljYWwtYWxpZ246IHRvcCAhaW1wb3J0YW50Ow0KLX0NCi0tLT4NCi08L1NUWUxFPg0KLQ0KLQ0KLTwhLS1TdHlsZSBTaGVldC0tPg0KLTxMSU5LIGhyZWY9Ii90L3RoZW1lL01hc3Rlci5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPg0KLTwvaGVhZD4NCi08Ym9keT4NCi0NCi08anNwOnVzZUJlYW4gaWQ9InNlbENvbEJlYW5Sb3cxMkJlYW4iIHNjb3BlPSJzZXNzaW9uIiBjbGFzcz0iU2VsQ29sQmVhblJvdzEyVmlld0JlYW4iIHR5cGU9IlNlbENvbEJlYW5Sb3cxMlZpZXdCZWFuIi8+DQotPCUNCi0NCi0NCi0NCi0NCi0NCi0NCi0NCi0NCi0NCi0NCi0NCi0NCi0NCi0NCi0NCi0lPg0KLQ0KLTwlDQotLy9FeGVjdXRlIEJlYW4gTWV0aG9kcw0KLQ0KLQ0KLSU+DQotDQotPCEtLUJhbm5lci0tPg0KLTxIMT5SZXN1bHRzIHBhZ2U8L0gxPg0KLQ0KLTxCUj48QlI+DQotDQotPCEtLSBSZXN1bHQgVGFibGUgLS0+DQotPFRBQkxFIGJvcmRlcj0iMCI+DQotPFRCT0RZPg0KLQkJCTxUUj4NCi0JCQk8VEg+VEVTVDJfi42LjouPPC9USD4NCi0JCQk8VEQ+DQotDQotCTwlPXNlbENvbEJlYW5Sb3cxMkJlYW4uZ2V0VEVTVDJfi42LjouPKCk9PSBudWxsID8gIk5VTEwiIDogc2VsQ29sQmVhblJvdzEyQmVhbi5nZXRURVNUMl+LjYuOi48oKS50b1N0cmluZygpJT4NCi0JCQk8L1REPg0KLQkJPC9UUj4NCi0JCTxUUj4NCi0JCQk8VEg+VEVTVDJfj4qPiY+PPC9USD4NCi0JCQk8VEQ+DQotDQotCTwlPXNlbENvbEJlYW5Sb3cxMkJlYW4uZ2V0VEVTVDJfj4qPiY+PKCk9PSBudWxsID8gIk5VTEwiIDogc2VsQ29sQmVhblJvdzEyQmVhbi5nZXRURVNUMl+Pio+Jj48oKS50b1N0cmluZygpJT4NCi0JCQk8L1REPg0KLQkJPC9UUj4NCi0JCTxUUj4NCi0JCQk8VEg+VEVTVDJfiY2JjomPPC9USD4NCi0JCQk8VEQ+DQotDQotCTwlPXNlbENvbEJlYW5Sb3cxMkJlYW4uZ2V0VEVTVDJfiY2JjomPKCk9PSBudWxsID8gIk5VTEwiIDogc2VsQ29sQmVhblJvdzEyQmVhbi5nZXRURVNUMl+JjYmOiY8oKS50b1N0cmluZygpJT4NCi0JCQk8L1REPg0KLQkJPC9UUj4NCi0JCTxUUj4NCi0JCQk8VEg+VEVTVDJfjVyNWo1fPC9USD4NCi0JCQk8VEQ+DQotDQotCTwlPXNlbENvbEJlYW5Sb3cxMkJlYW4uZ2V0VEVTVDJfjVyNWo1fKCk9PSBudWxsID8gIk5VTEwiIDogc2VsQ29sQmVhblJvdzEyQmVhbi5nZXRURVNUMl+NXI1ajV8oKS50b1N0cmluZygpJT4NCi0JCQk8L1REPg0KLQkJPC9UUj4NCi0JCTxUUj4NCi0JCQk8VEg+VEVTVDJfjo2Ojo6PPC9USD4NCi0JCQk8VEQ+DQotDQotCTwlPXNlbENvbEJlYW5Sb3cxMkJlYW4uZ2V0VEVTVDJfjo2Ojo6PKCk9PSBudWxsID8gIk5VTEwiIDogc2VsQ29sQmVhblJvdzEyQmVhbi5nZXRURVNUMl+OjY6Ojo8oKS50b1N0cmluZygpJT4NCi0JCQk8L1REPg0KLQkJPC9UUj4NCi0NCi08L1RCT0RZPg0KLTwvVEFCTEUgPg0KLTwvYm9keT4NCi08L2h0bWw+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjMzNjUvU2VsQ29sQmVhblJvdzEyUmVzdWx0c0Zvcm1CLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3JlZ3Jlc3Npb25UZXN0RmlsZXMvZGVmZWN0MjIzMzY1L1NlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtQi5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzYzg3MGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjMzNjUvU2VsQ29sQmVhblJvdzEyUmVzdWx0c0Zvcm1CLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDEyMSArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4NCi1JIGZvdW5kIHRoaXMgY2hhbmdlDQotDQotPCVAIHBhZ2UNCi1pbXBvcnQ9IlNlbENvbEJlYW5Sb3cxMlZpZXdCZWFuIg0KLSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVNISUZUX0pJUyIgcGFnZUVuY29kaW5nPSJTSElGVF9KSVMiDQotJT4NCi08SFRNTD4NCi08SEVBRD4NCi08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1NRVRBSlVOSyI+DQotPE1FVEEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJJQk0gV2ViU3BoZXJlIFN0dWRpbyI+DQotPFRJVExFPlJlc3VsdHMgcGFnZTwvVElUTEU+DQotDQotPCEtLVN0eWxlcy0tPg0KLTxTVFlMRSBUWVBFPSJ0ZXh0L2NzcyI+DQotPCEtLQ0KLUJPRFkgew0KLQliYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmICFpbXBvcnRhbnQ7DQotfQ0KLUgxIHsNCi0JY29sb3I6ICMwMDAwZmYgIWltcG9ydGFudDsNCi0JdGV4dC1hbGlnbjogY2VudGVyICFpbXBvcnRhbnQ7DQotfQ0KLVRIIHsNCi0JdGV4dC1hbGlnbjpsZWZ0ICFpbXBvcnRhbnQ7DQotCWNvbG9yOiAjMDAwMDAwICFpbXBvcnRhbnQ7DQotCXZlcnRpY2FsLWFsaWduOiB0b3AgIWltcG9ydGFudDsNCi19DQotVEQgew0KLQl0ZXh0LWFsaWduOmxlZnQgIWltcG9ydGFudDsNCi0JdmVydGljYWwtYWxpZ246IHRvcCAhaW1wb3J0YW50Ow0KLX0NCi1USC5yZXN1bHQgew0KLQliYWNrZ3JvdW5kLWNvbG9yOiAjOTk5OTk5ICFpbXBvcnRhbnQ7DQotfQ0KLVRELnJlc3VsdCB7DQotCWJhY2tncm91bmQtY29sb3I6ICNjY2NjY2M7DQotCXZlcnRpY2FsLWFsaWduOiB0b3AgIWltcG9ydGFudDsNCi19DQotLS0+DQotPC9TVFlMRT4NCi0NCi0NCi08IS0tU3R5bGUgU2hlZXQtLT4NCi08TElOSyBocmVmPSIvdC90aGVtZS9NYXN0ZXIuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj4NCi08L2hlYWQ+DQotPGJvZHk+DQotDQotPGpzcDp1c2VCZWFuIGlkPSJzZWxDb2xCZWFuUm93MTJCZWFuIiBzY29wZT0ic2Vzc2lvbiIgY2xhc3M9IlNlbENvbEJlYW5Sb3cxMlZpZXdCZWFuIiB0eXBlPSJTZWxDb2xCZWFuUm93MTJWaWV3QmVhbiIvPg0KLTwlDQotDQotDQotDQotDQotDQotDQotDQotDQotDQotDQotDQotDQotDQotDQotDQotJT4NCi0NCi08JQ0KLS8vRXhlY3V0ZSBCZWFuIE1ldGhvZHMNCi0NCi0NCi0lPg0KLQ0KLTwhLS1CYW5uZXItLT4NCi08SDE+UmVzdWx0cyBwYWdlPC9IMT4NCi0NCi08QlI+PEJSPg0KLQ0KLTwhLS0gUmVzdWx0IFRhYmxlIC0tPg0KLTxUQUJMRSBib3JkZXI9IjAiPg0KLTxUQk9EWT4NCi0JCQk8VFI+DQotCQkJPFRIPlRFU1QyX4uNi46LjzwvVEg+DQotCQkJPFREPg0KLQ0KLQk8JT1zZWxDb2xCZWFuUm93MTJCZWFuLmdldFRFU1QyX4uNi46LjygpPT0gbnVsbCA/ICJOVUxMIiA6IHNlbENvbEJlYW5Sb3cxMkJlYW4uZ2V0VEVTVDJfi42LjouPKCkudG9TdHJpbmcoKSU+DQotCQkJPC9URD4NCi0JCTwvVFI+DQotCQk8VFI+DQotCQkJPFRIPlRFU1QyX4+Kj4mPjzwvVEg+DQotCQkJPFREPg0KLQ0KLQk8JT1zZWxDb2xCZWFuUm93MTJCZWFuLmdldFRFU1QyX4+Kj4mPjygpPT0gbnVsbCA/ICJOVUxMIiA6IHNlbENvbEJlYW5Sb3cxMkJlYW4uZ2V0VEVTVDJfj4qPiY+PKCkudG9TdHJpbmcoKSU+DQotCQkJPC9URD4NCi0JCTwvVFI+DQotCQk8VFI+DQotCQkJPFRIPlRFU1QyX4mNiY6JjzwvVEg+DQotCQkJPFREPg0KLQ0KLQk8JT1zZWxDb2xCZWFuUm93MTJCZWFuLmdldFRFU1QyX4mNiY6JjygpPT0gbnVsbCA/ICJOVUxMIiA6IHNlbENvbEJlYW5Sb3cxMkJlYW4uZ2V0VEVTVDJfiY2JjomPKCkudG9TdHJpbmcoKSU+DQotCQkJPC9URD4NCi0JCTwvVFI+DQotCQk8VFI+DQotCQkJPFRIPlRFU1QyX41cjVqNXzwvVEg+DQotCQkJPFREPg0KLQ0KLQk8JT1zZWxDb2xCZWFuUm93MTJCZWFuLmdldFRFU1QyX41cjVqNXygpPT0gbnVsbCA/ICJOVUxMIiA6IHNlbENvbEJlYW5Sb3cxMkJlYW4uZ2V0VEVTVDJfjVyNWo1fKCkudG9TdHJpbmcoKSU+DQotCQkJPC9URD4NCi0JCTwvVFI+DQotCQk8VFI+DQotCQkJPFRIPlRFU1QyX46Njo6OjzwvVEg+DQotCQkJPFREPg0KLQ0KLQk8JT1zZWxDb2xCZWFuUm93MTJCZWFuLmdldFRFU1QyX46Njo6OjygpPT0gbnVsbCA/ICJOVUxMIiA6IHNlbENvbEJlYW5Sb3cxMkJlYW4uZ2V0VEVTVDJfjo2Ojo6PKCkudG9TdHJpbmcoKSU+DQotCQkJPC9URD4NCi0JCTwvVFI+DQotDQotPC9UQk9EWT4NCi08L1RBQkxFID4NCi08L2JvZHk+DQotPC9odG1sPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3JlZ3Jlc3Npb25UZXN0RmlsZXMvZGVmZWN0MjI0MjkzL3Rlc3RzaGlmdGppc1htbFN5bnRheC5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9yZWdyZXNzaW9uVGVzdEZpbGVzL2RlZmVjdDIyNDI5My90ZXN0c2hpZnRqaXNYbWxTeW50YXguanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjA1MWIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3JlZ3Jlc3Npb25UZXN0RmlsZXMvZGVmZWN0MjI0MjkzL3Rlc3RzaGlmdGppc1htbFN5bnRheC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08anNwOnJvb3QgeG1sbnM6anNwPSJodHRwOi8vamF2YS5zdW4uY29tL0pTUC9QYWdlIiB2ZXJzaW9uPSIxLjIiPg0KLTxqc3A6ZGlyZWN0aXZlLnBhZ2UgbGFuZ3VhZ2U9ImphdmEiDQotCWNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9U0hJRlRfSklTIiBwYWdlRW5jb2Rpbmc9IlNISUZUX0pJUyIgLz4NCi08anNwOnRleHQ+PCFbQ0RBVEFbIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlNISUZUX0pJUyIgPz4gXV0+PC9qc3A6dGV4dD4NCi08anNwOnRleHQ+PCFbQ0RBVEFbIDwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMTEvRFREL3hodG1sMTEuZHRkIj4gXV0+PC9qc3A6dGV4dD4NCi08aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+DQotPGhlYWQ+DQotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9U0hJRlRfSklTIiAvPg0KLTxtZXRhIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iSUJNIFdlYlNwaGVyZSBTdHVkaW8iIC8+DQotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyIgLz4NCi08bGluayBocmVmPSJ0aGVtZS9NYXN0ZXIuY3NzIiByZWw9InN0eWxlc2hlZXQiDQotCXR5cGU9InRleHQvY3NzIiAvPg0KLTx0aXRsZT50ZXN0c2hpZnRqaXMuanNwPC90aXRsZT4NCi08L2hlYWQ+DQotPGJvZHk+DQotPHA+UGxhY2UgdGVzdHNoaWZ0amlzLmpzcCdzIGNvbnRlbnQgaGVyZS48L3A+DQotPC9ib2R5Pg0KLTwvaHRtbD4NCi08L2pzcDpyb290Pg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3JlZ3Jlc3Npb25UZXN0RmlsZXMvZGVmZWN0MjI5NjY3L2F1ZGkuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjk2NjcvYXVkaS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxYjQ3YzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjk2NjcvYXVkaS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxOTQgKzAsMCBAQAotPCVAIHBhZ2UgbGFuZ3VhZ2U9ImphdmEiIHBhZ2VFbmNvZGluZz0iU2hpZnRfSklTIiBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVNoaWZ0X0pJUyIlPg0KLTwlQHRhZ2xpYiB1cmk9Ii9XRUItSU5GL3dlYnNpdGVkZXNpZ25lci50bGQiIHByZWZpeD0ic2l0ZWVkaXQiJT4NCi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4NCi08SFRNTD4NCi08SEVBRD4NCi08TUVUQSBuYW1lPSJHRU5FUkFUT1IiDQotCWNvbnRlbnQ9IklCTSBXZWJTcGhlcmUgU3R1ZGlvIEhvbWVwYWdlIEJ1aWxkZXIgVmVyc2lvbiA2LjUuMC4wIGZvciBXaW5kb3dzIj4NCi08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1TaGlmdF9KSVMiPg0KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPg0KLTxUSVRMRT5BdWRpIEE2jXeT/ILcgsU8L1RJVExFPg0KLTxMSU5LIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGUuY3NzIiB0eXBlPSJ0ZXh0L2NzcyI+DQotPExJTksgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaWQ9IndlYnNpdGVfc3R5bGUiDQotCWhyZWY9Ii9BdWRpL3NpdGUtY29tcC9zdHlsZS9zaXRlLmNzcyI+DQotPC9IRUFEPg0KLTxCT0RZIHRleHQ9IiM2NjY2OTkiIGxpbms9IiM2NjY2Y2MiIHZsaW5rPSIjOTk5OTk5IiBhbGluaz0iI2NjNjZmZiI+DQotPHNpdGVlZGl0OmxheW91dD4NCi0JPHNpdGVlZGl0OmxheW91dGFyZWEgaWQ9ImJvZHkiPg0KLQkJPEgxPkF1ZGkgQTaNd5P8gtyCxTwvSDE+DQotDQotCQk8RElWIGFsaWduPSJsZWZ0Ij4NCi0JCTxUQUJMRSB3aWR0aD0iNjQwIiBjZWxscGFkZGluZz0iNSIgY2VsbHNwYWNpbmc9IjAiPg0KLQkJCTxUQk9EWT4NCi0JCQkJPFRSPg0KLQkJCQkJPFREIGJnY29sb3I9IiMwMDAwY2MiIGhlaWdodD0iNSI+PEZPTlQgY29sb3I9IiNmZmZmZmYiPo13k/yC3ILFgsyMb4jcPC9GT05UPjwvVEQ+DQotCQkJCQk8VEQgYmdjb2xvcj0iIzAwMDBjYyI+PEZPTlQgY29sb3I9IiNmZmZmZmYiPjExjI48L0ZPTlQ+PC9URD4NCi0JCQkJCTxURCBiZ2NvbG9yPSIjMDAwMGNjIiB3aWR0aD0iNSI+PC9URD4NCi0JCQkJPC9UUj4NCi0JCQkJPFRSPg0KLQkJCQkJPFREIHdpZHRoPSIyMTYiIGJnY29sb3I9IiMwMDY2Y2MiIHZhbGlnbj0idG9wIiByb3dzcGFuPSIzIj48L1REPg0KLQkJCQkJPFREIHdpZHRoPSI0MjAiPg0KLQkJCQkJPFVMPg0KLQkJCQkJCTxMST4yMDAxlE4xMYyOjaCBQY6fivpNeSBDYXKC8Iyfk6KCtY5ugt+C6YFCPC9MST4NCi0JCQkJCQk8TEk+l52XUoLNLi4uDQotCQkJCQkJPE9MPg0KLQkJCQkJCQk8TEk+MjAwMpRONIyOgsU1lE6W2oLwjH2CpoLpkU+O1IJ1go+CjIKWgo+CyY3XgqmCoozMj+GCqpGKjp+CooLEgqKCvYFCPC9MST4NCi0JCQkJCQkJPExJPoNHg5ODV4OTgsyU8ZfNgrOCyYnklp2CqoLFgquCyIKtgsiCwYLEgquCvYFCPC9MST4NCi0JCQkJCQk8L09MPg0KLQkJCQkJCTwvTEk+DQotCQkJCQkJPExJPojIibqCzI7Uju2CqozzleKCxoLIgsGCvYFCDQotCQkJCQkJPE9MPg0KLQkJCQkJCQk8TEk+Vk9MVk8gVjcwPC9MST4NCi0JCQkJCQkJPExJPkJXTSAzMjVpIHRvdXJpbmc8L0xJPg0KLQkJCQkJCQk8TEk+VlcgUGFzc2FydCBWNiA0IE1vdGlvbjwvTEk+DQotCQkJCQkJCTxMST5NZXJjZWRlcy1CZW56IEMgQ2xhc3MgV2Fnb248L0xJPg0KLQkJCQkJCQk8TEk+QXVkaSBBNCBBdmFudDwvTEk+DQotCQkJCQkJPC9PTD4NCi0JCQkJCQk8QlI+DQotCQkJCQkJgruCpIFCIIKxgsyOnpNfgsU8Qj6CYIJVgs2KrpFTgsiDWINSgVuDdopPPC9CPoLFgqCCwYK9gUI8L0xJPg0KLQkJCQkJPC9VTD4NCi0JCQkJCTwvVEQ+DQotCQkJCQk8VEQgYmdjb2xvcj0iIzAwNjZjYyI+PC9URD4NCi0JCQkJPC9UUj4NCi0JCQkJPFRSPg0KLQkJCQkJPFREIGJnY29sb3I9IiMwMDY2Y2MiIHdpZHRoPSI1IiBoZWlnaHQ9IjUiPjwvVEQ+DQotCQkJCQk8VEQgYmdjb2xvcj0iIzAwNjZjYyI+PC9URD4NCi0JCQkJPC9UUj4NCi0JCQkJPFRSPg0KLQkJCQkJPFREIHdpZHRoPSI0MjAiPoKxgrGCqYLngUGIyIm6gsyXnZdSgqqO5YLFgUGM85XijtSCqo1pgueC6oK9gUI8QlI+DQotCQkJCQmBaYKggq2C3ILFguCOhILGjciCzIzCkGyTSY7lis+CyYLmguiC3IK3gUKBag0KLQkJCQkJPFVMPg0KLQkJCQkJCTxMST5WT0xWTyBWNzAgLSCDZoNVg0ODk4KqWILFg3uDY4FCPC9MST4NCi0JCQkJCQk8TEk+QldNIDMyNWkgdG91cmluZyAtIJKGk3KUvJJbgsiDVINDg1mBQYpYkoZCV02CvoLngq+CxYN7g2OBQjwvTEk+DQotCQkJCQkJPExJPkMgQ2xhc3MgLSCJv4ppgsmMqY2Hgu2CyIKig0eDk4NXg5OBQZPgkZWCxYN7g2OBQjwvTEk+DQotCQkJCQkJPExJPlBhc3NhcnQgLSCJv4ppgs2Wo5fNk0mCvoKqk+CKT5GVg2aDVYNDg5OCxYN7g2OBQjwvTEk+DQotCQkJCQk8L1VMPg0KLQkJCQkJgruCpIFCgrGCsYLFPEI+jmOCwYK9gsyCzUE0IEF2YW50PC9CPoLFgrWCvYFCIDxCUj4NCi0JCQkJCUE0IDMuMCBxdWF0dHJvIHNwb3J0c4LJjo6P5oK1gUGCxoLEguCLQ4LJk/yCwYLEgrWC3IKigtyCtYK9gUI8QlI+DQotCQkJCQmCtYKpgrWUrZSEl1yS6ILNMjAwMpROMoyOgsaCzIKxgsaCxYFBgruCsYLcgsWR0oLGgqSCxojqk3iCzYyIgt+C3IK1gr2BQjxCUj4NCi0JCQkJCTxCUj4NCi0JCQkJCZdCiOqBQYtDgsmCyILBgsSCooK9gsyCzY66k+CCzINUg0ODWYLGg2eDiYOTg06XZZfKgqpWNzCCyZTkgteCqYLIguiPrIKzgq2CyILpgsaCooKkk1+CxYK1gr2BQjwvVEQ+DQotCQkJCQk8VEQgYmdjb2xvcj0iIzAwNjZjYyI+PC9URD4NCi0JCQkJPC9UUj4NCi0JCQkJPFRSPg0KLQkJCQkJPFREIGJnY29sb3I9IiMwMDY2Y2MiPjwvVEQ+DQotCQkJCQk8VEQgYmdjb2xvcj0iIzAwNjZjYyI+PEZPTlQgY29sb3I9IiNmZmZmZmYiPjEyjI6Sho97PC9GT05UPjwvVEQ+DQotCQkJCQk8VEQgYmdjb2xvcj0iIzAwNjZjYyI+PC9URD4NCi0JCQkJPC9UUj4NCi0JCQkJPFRSPg0KLQkJCQkJPFREIGJnY29sb3I9IiMwMDY2Y2MiPjwvVEQ+DQotCQkJCQk8VEQ+PEJSPg0KLQkJCQkJMoyOgtyCxZHSgsaCpILGjnaCwYLEgqKC6Y/zkdSCxYFBQTSCzJLHicGP7pXxgvCTvoLmgqSCxo52gqKDZoNCgVuDiYFbgsmXp4K/ivGC6ILBgr2CxoKxguuBQZJTk5aCzIlji8aCzJX7gqqVc43dgsWTWJK3gsaYYoLwgrWC3IK1gr2BQjxCUj4NCi0JCQkJCTxCUj4NCi0JCQkJCYK7grGCxYFBVk9MVk+CqYLngsyP5oLoireCpoFBicaRsI1ckKyBaTSQbIFqgvCNbIKmgumCxkE2gqqCqIqpgt+CxoLMgrGCxoFCIDxCPom/immNt4LgkZWU9ZOZgvCNbIKmgumCxkE0IEF2YW50DQotCQkJCQkzLjAgcXVhdHRybyBzdXBvcnSCxkE2IEF2YW50IDMuMCBxdWF0cnJvgsyNt4KqgtmCxoLxgseCyIKiPC9CPoLGgsyCsYLGgUI8QlI+DQotCQkJCQk8QlI+DQotCQkJCQmNWILJibqO5oLog0yDg4OTg3mBW4OTkoaCxYFBkbyKQ4pPg4GBW4NKgVuCqYLngsyO5pHWgqaCzI/qjYeBQY24kuiKeoF7PEI+glKCT5aciX48L0I+g3uBW4Npg1iCxoLIguiBQYLGgsGCxILggqiUg4Kik76KtIKqj2+C3IK3gUI8QlI+DQotCQkJCQk8QlI+DQotCQkJCQmCu4K1gsSBQZROk+CUW47UicKUXILIivOWXZBGgWmDVoOLg2+BW4OMg0ODToOBg16DioNig06BaoLMgmCCVYKqMZHkjd2MyYKqgqCC6YLGgsyCsYLGgUI8QlI+DQotCQkJCQk8QlI+DQotCQkJCQmCxYFBjIuLx4KxgsyYYoLJj+aCwYLEKI/mgrmC54LqgsSBSIFqgUE8Qj48Rk9OVCBjb2xvcj0iI2NjMzNmZiI+QTYgMy4wIEF2YW50IHF1YXR0cm8NCi0JCQkJCTIwMDIgTW9kZWw8L0ZPTlQ+PC9CPoLwjXeT/IyIkuiCtYLcgrWCvYFCPEJSPg0KLQkJCQkJPEJSPg0KLQkJCQkJPC9URD4NCi0JCQkJCTxURCBiZ2NvbG9yPSIjMDA2NmNjIj48L1REPg0KLQkJCQk8L1RSPg0KLQkJCQk8VFI+DQotCQkJCQk8VEQgYmdjb2xvcj0iIzAwMDBjYyI+PEZPTlQgY29sb3I9IiNmZmZmZmYiPo13k/yMiJLogUmBSTwvRk9OVD48L1REPg0KLQkJCQkJPFREIGJnY29sb3I9IiMwMDAwY2MiPjxGT05UIGNvbG9yPSIjZmZmZmZmIj6Nd5P8jIiS6ILMl52XUoLwgtyCxoLfgumCxoFBPC9GT05UPoFBPC9URD4NCi0JCQkJCTxURCBiZ2NvbG9yPSIjMDAwMGNjIj48L1REPg0KLQkJCQk8L1RSPg0KLQkJCQk8VFI+DQotCQkJCQk8VEQgd2lkdGg9IjIxNiIgYmdjb2xvcj0iIzAwNjZjYyIgdmFsaWduPSJ0b3AiPjwvVEQ+DQotCQkJCQk8VEQgd2lkdGg9IjQyMCI+DQotCQkJCQk8VUw+DQotCQkJCQkJPExJPpG8gsyM85XijtSCxpTkinKCtYLEgUGDe4Nmg0KCqILmgtGO1JPgi/OK1ILMg2aDVYNDg5OC8JHlgqKCyYtDgsmT/ILBgr2BQjwvTEk+DQotCQkJCQkJPExJPoJgglOCxYLNgnWCVoJPgsmU5ILXjtST4INYg3mBW4NYgqqLt4KtgsiCwYLEgrWC3IKkgUI8L0xJPg0KLQkJCQkJCTxMST6DToNBg2eDjYFFg1aDWINlg4CBaXNraYKqju+WoYLIgsyCxYLigs2C6HNub3cgZHJpdmWCyYLNNFdEgqqXfoK1gq2CxC4uLik8L0xJPg0KLQkJCQkJCTxMST6SbIj4gquCxpPBlcqJuo7mguiDTIODg5ODeYFbg5OShoK+gsGCvY6WgUaBfIFqPC9MST4NCi0JCQkJCTwvVUw+DQotCQkJCQk8L1REPg0KLQkJCQkJPFREIGJnY29sb3I9IiMwMDY2Y2MiPjwvVEQ+DQotCQkJCTwvVFI+DQotCQkJCTxUUj4NCi0JCQkJCTxURCBiZ2NvbG9yPSIjMDAwMGNjIiB2YWxpZ249InRvcCIgY29sc3Bhbj0iMiI+PEZPTlQNCi0JCQkJCQljb2xvcj0iI2ZmZmZmZiI+jXeT/IK1gr2DgoNmg4sggqiC5oLRIJLHicGDSYN2g1aDh4OTPC9GT05UPjwvVEQ+DQotCQkJCQk8VEQgYmdjb2xvcj0iIzAwMDBjYyI+PC9URD4NCi0JCQkJPC9UUj4NCi0JCQkJPFRSPg0KLQkJCQkJPFREIGJnY29sb3I9IiMwMDY2Y2MiIHZhbGlnbj0idG9wIj48L1REPg0KLQkJCQkJPFREPg0KLQkJCQkJPFVMPg0KLQkJCQkJCTxMST6DgoNmg4sNCi0JCQkJCQk8VUw+DQotCQkJCQkJCTxMST48Qj48Rk9OVCBjb2xvcj0iI2NjMzNmZiI+QTYgMy4wIEF2YW50IHF1YXR0cm8gMjAwMiBNb2RlbDwvRk9OVD48L0I+DQotCQkJCQkJCTwvTEk+DQotCQkJCQkJCTxMST6P2oK1gq2CzYJggpWChIKJgsyDSYN0g0KDVoODg4uDeYFbg1eC8IKyl5eCrYK+grOCooFCKCA8QQ0KLQkJCQkJCQkJaHJlZj0iaHR0cDovL3d3dy5hdWRpLmNvLmpwL21vZGVscy9pbmRleC5odG1sIj5odHRwOi8vd3d3LmF1ZGkuY28uanAvbW9kZWxzL2luZGV4Lmh0bWw8L0E+DQotCQkJCQkJCSk8L0xJPg0KLQkJCQkJCTwvVUw+DQotCQkJCQkJPC9MST4NCi0JCQkJCQk8TEk+g3uDZoNCgUWDSoOJgVsNCi0JCQkJCQk8VUw+DQotCQkJCQkJCTxMST6DVoOLg2+BW4OMg0ODToOBg16DioNig048L0xJPg0KLQkJCQkJCTwvVUw+DQotCQkJCQkJPC9MST4NCi0JCQkJCQk8TEk+kseJwYNJg3aDVoOHg5MNCi0JCQkJCQk8VUw+DQotCQkJCQkJCTxMST6Di4Fbg3SDQYOTg2WDaZdwg0GDk4NPg4uDWIN5gVuDVIFbIIFpi0CKQo6ukpOO1I/ql5iXcILMgr2C34FqPC9MST4NCi0JCQkJCQkJPExJPoOJg1GDYoNXg2eDjINDICiDWINMgVuUwoFFg3WBW4NjgUGOcYufgsyW7IuFk7mL74LwkM+C3Y2egt6CvYLfgsyTRI+cgq+XcIFqPC9MST4NCi0JCQkJCQkJPExJPoNvg5ODcIFblduM7Jdwg4mDb4FbIIFpjciCzJd2ll2CxS4uLi4uKTwvTEk+DQotCQkJCQkJCTxMST6DWINeg2KDaIOMg1iBRYNeg0ODhCAtIIN1g4qDV4NYg2eDkyCDdYOKg1WDYoNOPC9MST4NCi0JCQkJCQk8L1VMPg0KLQkJCQkJCTwvTEk+DQotCQkJCQk8L1VMPg0KLQkJCQkJPC9URD4NCi0JCQkJCTxURCBiZ2NvbG9yPSIjMDA2NmNjIj48L1REPg0KLQkJCQk8L1RSPg0KLQkJCQk8VFI+DQotCQkJCQk8VEQgYmdjb2xvcj0iIzAwMDBjYyI+PEZPTlQgY29sb3I9IiNmZmZmZmYiPjFzdCCDQ4OTg3aDjINig1aDh4OTPC9GT05UPjwvVEQ+DQotCQkJCQk8VEQgYmdjb2xvcj0iIzAwMDBjYyI+PC9URD4NCi0JCQkJCTxURCBiZ2NvbG9yPSIjMDAwMGNjIiBoZWlnaHQ9IjUiPjwvVEQ+DQotCQkJCTwvVFI+DQotCQkJCTxUUj4NCi0JCQkJCTxURCBiZ2NvbG9yPSIjMDA2NmNjIiB2YWxpZ249InRvcCI+PElNRyBzcmM9ImltYWdlMjExLmpwZyINCi0JCQkJCQlib3JkZXI9IjAiIHdpZHRoPSIxOTUiIGhlaWdodD0iMTMwIj48L1REPg0KLQkJCQkJPFREPo13k/yMiJLogqmC54FBlE6WloLMjVGCvYK+grWCoo6eivqCxYK1gr2CqjKPVIrUgsaPrYK1gsSUW47UgUI8QlI+DQotCQkJCQkzk/qM44LJlWOP6oLJgnKCi4KJgsmNc4Ktl1yS6ILFgrWCvYLMgsWBQYNYg16DYoNog4yDWJGVkoWCtYLEguCC54KigtyCtYK9gUI8QlI+DQotCQkJCQk8VUw+DQotCQkJCQkJPExJPjxGT05UIGNvbG9yPSIjZmYwMGZmIj48Rk9OVCBjb2xvcj0iI2ZmMDBmZiI+PEI+UHJvcy48L0I+PC9GT05UPjwvRk9OVD4NCi0JCQkJCQk8VUw+DQotCQkJCQkJCTxMST6DWIOAgVuDWYLIg0eDk4NXg5OBQjwvTEk+DQotCQkJCQkJCTxMST6IwJLogrWCvZGWguiBaZRbjtSCtYLEM5P6jOOCzINYg22BW4FFg2iDiYNDg3WCzYLGgsSC4In1k0uCxYK1gr2BaoFCPC9MST4NCi0JCQkJCQkJPExJPo/jjr+CxY1MgqKOupPggUI8L0xJPg0KLQkJCQkJCQk8TEk+jnaCwYK9guaC6ILgiKuCrYLIgqKUUpTvgWmNgpGsgvCK3ILfgUGMu43dlb2LzzYuNUttL0yBQoFqPC9MST4NCi0JCQkJCQkJPExJPopYkoaCxYKggtyC6JOvgraO1ILwjKmCqYKvgsiCooFGgXyBajwvTEk+DQotCQkJCQkJPC9VTD4NCi0JCQkJCQk8L0xJPg0KLQkJCQkJCTxMST48Qj48Rk9OVCBjb2xvcj0iIzAwMDAzMyI+Q29ucy48L0ZPTlQ+PC9CPg0KLQkJCQkJCTxVTD4NCi0JCQkJCQkJPExJPpVXj4CTi43agsyCbYKBgpaCiYLJg3KBW4NSg5OCqpV0gqKCxIKigsiCooFCPEJSPg0KLQkJCQkJCQmBaY9hkdiP7pXxgqqCdYJogmKCcoK+gq+CxYLNlXOPXJWqgUKIyJFPjoSXcIK1gsSCooK9g3CDQ4NJg2qDQY7QIIp5g2mDcoLNl8eCqYLBgr2BQoFqPC9MST4NCi0JCQkJCQkJPExJPojZj+2CyIKtgueCopK8gq6NlYKtg4qDQYKqiZiC6oLpgUIgg2eDiYOTg06C8IpKgq+C6YLGjuiCqpBegsGNlYFCPC9MST4NCi0JCQkJCQkJPExJPoK/guWCwYLGgtOC7YLTgu2CtYK9kauJ8YLogUI8L0xJPg0KLQkJCQkJCQk8TEk+gnWCVoJPgsaU5ILXgUGMuILBgsSCtYLcgsGCvYNng4mDk4NOl2WXyoFCPC9MST4NCi0JCQkJCQk8L1VMPg0KLQkJCQkJCTwvTEk+DQotCQkJCQk8L1VMPg0KLQkJCQkJPC9URD4NCi0JCQkJCTxURCBiZ2NvbG9yPSIjMDA2NmNjIj48L1REPg0KLQkJCQk8L1RSPg0KLQkJCQk8VFI+DQotCQkJCQk8VEQgYmdjb2xvcj0iIzAwMDBjYyI+PEZPTlQgY29sb3I9IiNmZmZmZmYiPoJQg5aMjoOMg3yBW4NngsmRsYKtLi4uLi4uLi48L0ZPTlQ+PEENCi0JCQkJCQlocmVmPSJhdWRpXzFtb250aC5odG1sIj48SU1HIHNyYz0iYjAxNmxpcy5naWYiIHdpZHRoPSIxNiINCi0JCQkJCQloZWlnaHQ9IjE2IiBib3JkZXI9IjAiPjwvQT48L1REPg0KLQkJCQkJPFREIGJnY29sb3I9IiMwMDAwY2MiPjwvVEQ+DQotCQkJCQk8VEQgYmdjb2xvcj0iIzAwMDBjYyIgaGVpZ2h0PSI1Ij48L1REPg0KLQkJCQk8L1RSPg0KLQkJCTwvVEJPRFk+DQotCQk8L1RBQkxFPg0KLQkJPC9ESVY+DQotCTwvc2l0ZWVkaXQ6bGF5b3V0YXJlYT4NCi08L3NpdGVlZGl0OmxheW91dD4NCi08L0JPRFk+DQotPC9IVE1MPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC9FbXB0eUZpbGUueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL0VtcHR5RmlsZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL0VtcHR5RmlsZS54bWwKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL0lsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL0lsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODA2OTJiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC9JbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMT8+Ci08dGVzdD4KLTwvdGVzdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvTWFsZm9ybWVkTm9FbmNvZGluZy54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvTWFsZm9ybWVkTm9FbmNvZGluZy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4YTFiY2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL01hbGZvcm1lZE5vRW5jb2RpbmcueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSIiPz4KLTx0YWc+Ci1BdXN0cmFsaesKLTwvdGFnPgotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvTWFsZm9ybWVkTm9FbmNvZGluZy54c2wgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvTWFsZm9ybWVkTm9FbmNvZGluZy54c2wKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkNjY0ODIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL01hbGZvcm1lZE5vRW5jb2RpbmcueHNsCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSIiPz4KLTx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKLSAgICB2ZXJzaW9uPSIxLjAiCi0gICAgeG1sbnM6eGFsYW49Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94c2x0Ij4KLTx4c2w6dmFyaWFibGUgbmFtZT0iYmFkRW5jb2RpbmciPgotQXVzdHJhbGnrCi08L3hzbDp2YXJpYWJsZT4KLTwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvTm9FbmNvZGluZy54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvTm9FbmNvZGluZy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyZDhhZmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL05vRW5jb2RpbmcueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTx0ZXN0PgotPC90ZXN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC9Ob3JtYWxOb25EZWZhdWx0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC9Ob3JtYWxOb25EZWZhdWx0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTJlYzk4Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvTm9ybWFsTm9uRGVmYXVsdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTEiPz4KLTx0ZXN0PgotPC90ZXN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC9VVEYxNkxFQXRTdGFydE9mTGFyZ2VGaWxlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC9VVEYxNkxFQXRTdGFydE9mTGFyZ2VGaWxlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVlYzUzOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvVVRGMTZMRUF0U3RhcnRPZkxhcmdlRmlsZS54bWwKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvVVRGOFdpdGgzQnl0ZUJPTS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvVVRGOFdpdGgzQnl0ZUJPTS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5ODExMmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL1VURjhXaXRoM0J5dGVCT00ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi3vu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHRlc3Q+Ci08L3Rlc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL2V1Y2pwLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC9ldWNqcC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzNTliZDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL2V1Y2pwLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IkVVQy1KUCI/PgotPFBlcnNvbj4KLQk8QWRkcmVzcz4KLQkJPENpdHk+wufPwjwvQ2l0eT4KLQkJPFN0YXRlPr/AxuDA7jwvU3RhdGU+Ci0JCTxaaXA+TTFDIDVDMjwvWmlwPgotCQk8Q291bnRyeT7G/MvcPC9Db3VudHJ5PgotCTwvQWRkcmVzcz4KLQk8TmFtZT4KLQkJPEZpcnN0PrDsz7o8L0ZpcnN0PgotCQk8TGFzdD7O68zaPC9MYXN0PgotCTwvTmFtZT4KLTwvUGVyc29uPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC9zaGlmdGppcy54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvc2hpZnRqaXMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOTRiY2Y4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC9zaGlmdGppcy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJTaGlmdF9KSVMiPz4KLTxQZXJzb24+Ci0JPEFkZHJlc3M+Ci0JCTxDaXR5PpHlmGE8L0NpdHk+Ci0JCTxTdGF0ZT6QX5PekOw8L1N0YXRlPgotCQk8WmlwPk0xQyA1QzI8L1ppcD4KLQkJPENvdW50cnk+k/qWezwvQ291bnRyeT4KLQk8L0FkZHJlc3M+Ci0JPE5hbWU+Ci0JCTxGaXJzdD6I6phZPC9GaXJzdD4KLQkJPExhc3Q+l+mW2DwvTGFzdD4KLQk8L05hbWU+Ci08L1BlcnNvbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdEV4dHJhSnVuay54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdEV4dHJhSnVuay54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1MDk1ZTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3RFeHRyYUp1bmsueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiICBhYmNkPSJlZmMiCi0KLWVuY29kaW5nPSJJU08tODg1OS0xIiAKLQotID8+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdEV4dHJhVmFsaWRTdHVmZi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdEV4dHJhVmFsaWRTdHVmZi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkNWMxZmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3RFeHRyYVZhbGlkU3R1ZmYueG1sCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3RJbGxGb3JtZWQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3RJbGxGb3JtZWQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjExYTMxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC90ZXN0SWxsRm9ybWVkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCBlbmNvZGluZz1VVEYtOCIgc3RhbmRhbG9uZT0ieWVzIj8+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZDIueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3RJbGxGb3JtZWQyLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmY0MjJmZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZDIueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPVVURi04IAotPHRlc3Q+Ci08L3Rlc3Q+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZDMueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3RJbGxGb3JtZWQzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjFlYWUwMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZDMueG1sCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTggc3RhbmRhbG9uZT0ieWVzIj8+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZDQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3RJbGxGb3JtZWQ0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzkwYzY1ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZDQueG1sCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTg/PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3RNdWx0aUxpbmUueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3RNdWx0aUxpbmUueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMjYzZmMyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC90ZXN0TXVsdGlMaW5lLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiAgCi0KLWVuY29kaW5nPSJJU08tODg1OS0xIiAKLQotID8+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdE5vRW5jb2RpbmdWYWx1ZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdE5vRW5jb2RpbmdWYWx1ZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwYjhlOTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3ROb0VuY29kaW5nVmFsdWUueG1sCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiAgICA/PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3ROb1hNTERlY2wueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3ROb1hNTERlY2wueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OWFhMjdlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC90ZXN0Tm9YTUxEZWNsLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPHRlc3Q+Ci0KLTwvdGVzdD4KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3ROb1hNTERlY2xBdEZpcnN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC90ZXN0Tm9YTUxEZWNsQXRGaXJzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlNjU0OWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3ROb1hNTERlY2xBdEZpcnN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPHRlc3Q+Ci0gPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Ci08L3Rlc3Q+Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC90ZXN0Tm9YTUxEZWNsSW5MYXJnZUZpbGUueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3ROb1hNTERlY2xJbkxhcmdlRmlsZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhNWZjNTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3ROb1hNTERlY2xJbkxhcmdlRmlsZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNTYgKzAsMCBAQAotPHRlc3Q+Ci0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykKLTwvdGVzdD4KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3ROb3JtYWxDYXNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC90ZXN0Tm9ybWFsQ2FzZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3NWRiYWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3ROb3JtYWxDYXNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3RVVEYxNi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdFVURjE2LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGQ5ZTgxNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdFVURjE2LnhtbAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC90ZXN0V1NCZWZvcmVYTUxEZWNsLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC90ZXN0V1NCZWZvcmVYTUxEZWNsLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDM5ZDRkMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdFdTQmVmb3JlWE1MRGVjbC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLQotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Ci08L3Rlc3Q+Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC90ZXN0V1NCZWZvcmVYTUxEZWNsMi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdFdTQmVmb3JlWE1MRGVjbDIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzA1YjRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC90ZXN0V1NCZWZvcmVYTUxEZWNsMi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSAgICAgICAgICA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KLTwvdGVzdD4KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3RXU0JlZm9yZVhNTERlY2wzLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC90ZXN0V1NCZWZvcmVYTUxEZWNsMy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4YjhkMDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3RXU0JlZm9yZVhNTERlY2wzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotCQotCSAgICAgIAkJICAgIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgotPC90ZXN0PgotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlcjIueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXIyLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDdlNjkxNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlcjIueG1sCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXJCRS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlckJFLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDdmZmQ2ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlckJFLnhtbAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC91dGYxNldpdGhKYXBhbmVzZUNoYXJzLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC91dGYxNldpdGhKYXBhbmVzZUNoYXJzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGY2ZTM3Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdXRmMTZXaXRoSmFwYW5lc2VDaGFycy54bWwKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdXRmMTZiZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdXRmMTZiZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjOGNkZjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3V0ZjE2YmUueG1sCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3V0ZjE2YmVNYWxmb3JtZWQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3V0ZjE2YmVNYWxmb3JtZWQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NWI1MzBlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC91dGYxNmJlTWFsZm9ybWVkLnhtbAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC91dGYxNmxlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC91dGYxNmxlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Q5YmEzZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdXRmMTZsZS54bWwKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdXRmMTZsZU1hbGZvcm1lZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdXRmMTZsZU1hbGZvcm1lZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjZWZjZDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3V0ZjE2bGVNYWxmb3JtZWQueG1sCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMmJkYzE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjQiLz4KLQk8Y2xhc3NwYXRoZW50cnkgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIiBraW5kPSJjb24iPgotCQk8YWNjZXNzcnVsZXM+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJvcmcvZWNsaXBzZS93c3QvKioiLz4KLQkJPC9hY2Nlc3NydWxlcz4KLQk8L2NsYXNzcGF0aGVudHJ5PgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjN2NjZGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1iaW4KLQotYnVpbGQueG1sCi10ZW1wLmZvbGRlcgoteG1sdWl0ZXN0cy5qYXIKLWphdmFDb21waWxlci54bWx1aXRlc3RzLmphci5hcmdzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2YzZTY4Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0czwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPjwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZmE1YzkxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozMiBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWVuY29kaW5nLzxwcm9qZWN0Pj1JU08tODg1OS0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlYzU3NTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jTW9uIEFwciAxNyAwMTo0ODozOSBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWxpbmUuc2VwYXJhdG9yPVxyXG4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmN2JhYzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0jU2F0IEF1ZyAxOSAxNjozMTo0MyBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuY2xlYW5PdXRwdXRGb2xkZXI9Y2xlYW4KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuZHVwbGljYXRlUmVzb3VyY2VUYXNrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuaW52YWxpZENsYXNzcGF0aD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIucmVzb3VyY2VDb3B5RXhjbHVzaW9uRmlsdGVyPSoubGF1bmNoCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jaXJjdWxhckNsYXNzcGF0aD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLmV4Y2x1c2lvblBhdHRlcm5zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aC5tdWx0aXBsZU91dHB1dExvY2F0aW9ucz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuMgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRvYy5jb21tZW50LnN1cHBvcnQ9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIubWF4UHJvYmxlbVBlclVuaXQ9MTAwCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvYz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzRGVwcmVjYXRlZFJlZj1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc05vdFZpc2libGVSZWY9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXByaXZhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHM9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNPdmVycmlkaW5nPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c1Zpc2liaWxpdHk9cHVibGljCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFncz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzT3ZlcnJpZGluZz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHJpdmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnNhZmVUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExhYmVsPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS4zCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5pbmNvbXBhdGlibGVKREtMZXZlbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGxldGVDbGFzc3BhdGg9ZXJyb3IKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzAxYzdhZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLSNNb24gQXByIDE3IDAxOjQ4OjM5IEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotaW50ZXJuYWwuZGVmYXVsdC5jb21wbGlhbmNlPWRlZmF1bHQKLW9yZy5lY2xpcHNlLmpkdC51aS50ZXh0LmN1c3RvbV9jb2RlX3RlbXBsYXRlcz08P3htbCB2ZXJzaW9uXD0iMS4wIiBlbmNvZGluZ1w9IlVURi04Ij8+XHJcbjx0ZW1wbGF0ZXMvPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU5MzY4Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMDQgMDM6MzY6MzIgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5lbmFibGUucHJvamVjdC5yZWZhY3RvcmluZy5oaXN0b3J5PWZhbHNlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjNTIyYmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotI01vbiBBcHIgMTcgMDI6MDE6MzMgRURUIDIwMDYKLWNvbXBpbGVycy5pbmNvbXBhdGlibGUtZW52aXJvbm1lbnQ9MAotY29tcGlsZXJzLnAuYnVpbGQ9MAotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0xCi1jb21waWxlcnMucC5pbGxlZ2FsLWF0dC12YWx1ZT0wCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0wCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMucC51bnVzZWQtZWxlbWVudC1vci1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnVzZS1wcm9qZWN0PXRydWUKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmJlY2QxMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lLjAKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHM7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4zMDAucXVhbGlmaWVyCi1CdW5kbGUtQ2xhc3NQYXRoOiB4bWx1aXRlc3RzLmphcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy5YTUxVSVRlc3RzUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLnZhbGlkYXRpb247eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLAotIG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMuYnJlYWtwb2ludHMsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy52aWV3ZXIKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS51aSwKLSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LAotIG9yZy5lY2xpcHNlLndzdC54bWwudWksCi0gb3JnLmVjbGlwc2Uud3N0LnNzZS51aSwKLSBvcmcuZWNsaXBzZS51aS53b3JrYmVuY2gudGV4dGVkaXRvciwKLSBvcmcuZWNsaXBzZS51aS5pZGUsCi0gb3JnLmp1bml0O2J1bmRsZS12ZXJzaW9uPSJbMy44LjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUsCi0gb3JnLmVjbGlwc2UudWkudmlld3MsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAotIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZSwKLSBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbiwKLSBjb20uaWJtLmljdQotRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9hYm91dC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTk5ZGYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUsIDIwMDg8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZDUwMjUzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLWJpbi5pbmNsdWRlcyA9IHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgdGVzdC54bWwsXAotICAgICAgICAgICAgICAgeG1sdWl0ZXN0cy5qYXIsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgdGVzdHJlc291cmNlcy8sXAotICAgICAgICAgICAgICAgaWNvbnMvCi1qYXJzLmNvbXBpbGUub3JkZXIgPSB4bWx1aXRlc3RzLmphcgotc291cmNlLnhtbHVpdGVzdHMuamFyID0gc3JjLwotb3V0cHV0LnhtbHVpdGVzdHMuamFyID0gYmluLwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9pY29ucy9icmtwX29iai5naWYgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL2ljb25zL2Jya3Bfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTgzMWZlNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL2ljb25zL2Jya3Bfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvaWNvbnMvc291cmNlRWRpdG9yLmdpZiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvaWNvbnMvc291cmNlRWRpdG9yLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzVlYmRiOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL2ljb25zL3NvdXJjZUVkaXRvci5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjA1M2RkNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotcHJvdmlkZXJOYW1lPUVjbGlwc2Uub3JnCi0KLUJ1bmRsZS1OYW1lLjAgPSBYTUwgVUkgVGVzdHMKLXZpZXcubmFtZS4wID0gRW1iZWRkZWQgWE1MIFN0cnVjdHVyZWQgVGV4dCBWaWV3ZXIKLQotY29udGVudFR5cGVUZXN0WE1MOTkuY3Q9VGVzdCBYTUwgc3ViLWNvbnRlbnQtdHlwZQotY29udGVudFR5cGVUZXN0WE1MOTkuZWRpdG9yPVRlc3QgWE1MIHN1Yi1jb250ZW50LXR5cGUgZWRpdG9yCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3BsdWdpbi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3ZjM5ZjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLTxwbHVnaW4+Ci0KLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS52aWV3cyI+Ci0KLQkJPHZpZXcKLQkJCW5hbWU9IiV2aWV3Lm5hbWUuMCIKLQkJCWljb249IiRubCQvaWNvbnMvc291cmNlRWRpdG9yLmdpZiIKLQkJCWNhdGVnb3J5PSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzIgotCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMudmlld2VyLlZpZXdlclRlc3RYTUwiCi0JCQlpZD0ib3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy52aWV3ZXIuVmlld2VyVGVzdFhNTCI+Ci0JCTwvdmlldz4KLQk8L2V4dGVuc2lvbj4KLQotCTwhLS0gdGVzdCBmb3IgYnJlYWtwb2ludCBlcnJvciBoYW5kbGluZyAtLT4KLQkJPGV4dGVuc2lvbgotCQlwb2ludD0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS5icmVha3BvaW50Ij4KLQkJPGJyZWFrcG9pbnRDb250cmlidXRpb24KLQkJaWQ9Im9yZy5lY2xpcHNlLndzdC54bWwudWkucHJvdmlkZXJzLnRlc3QiPgotCQk8cHJvdmlkZXIKLQkJY29udGVudFR5cGVzPSJvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUueG1sc291cmNlLG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS54bWwiCi0JCWNsYXNzPSJvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLmJyZWFrcG9pbnRzLkJyZWFrcG9pbnRFcnJvclByb3ZpZGVyIgotCQlpZD0ib3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy5icmVha3BvaW50cy5CcmVha3BvaW50RXJyb3JQcm92aWRlciI+Ci0JCTwvcHJvdmlkZXI+Ci0JCTwvYnJlYWtwb2ludENvbnRyaWJ1dGlvbj4KLQkJPC9leHRlbnNpb24+Ci0KLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmV4dGVuZGVkRWRpdG9yQWN0aW9ucyI+Ci0JCTxlZGl0b3JDb250cmlidXRpb24KLQkJCXRhcmdldElEPSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLlN0cnVjdHVyZWRUZXh0RWRpdG9yIgotCQkJaWQ9Im9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMuYWN0aW9ucyI+Ci0JCQk8YWN0aW9uCi0JCQkJcG9wdXBtZW51UGF0aD0iZ3JvdXAuZWRpdG9yIgotCQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLmJyZWFrcG9pbnRzLkVuYWJsZVdhcm5pbmdBY3Rpb24iCi0JCQkJbWVudWJhclBhdGg9ImVkaXQvTWVudUFkZGl0aW9ucyIKLQkJCQlpY29uPSJpY29ucy9icmtwX29iai5naWYiCi0JCQkJaWQ9Im9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMuYnJlYWtwb2ludHMuRW5hYmxlV2FybmluZ0FjdGlvbiI+Ci0JCQk8L2FjdGlvbj4KLQkJPC9lZGl0b3JDb250cmlidXRpb24+Ci0JPC9leHRlbnNpb24+Ci0JPGV4dGVuc2lvbgotICAgICAgIGlkPSJ4bWwudWkudGVzdHMxIgotICAgICAgIG5hbWU9IiVCdW5kbGUtTmFtZS4wIgotICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5lZGl0b3JzIj4KLQkJPGVkaXRvcgotICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy5UZXN0U291cmNlVmFsaWRhdGlvbkZyYW1ld29yayRUZXN0U3RydWN0dXJlZFRleHRFZGl0b3IiCi0gICAgICAgIGNvbnRyaWJ1dG9yQ2xhc3M9Im9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwuYWN0aW9ucy5BY3Rpb25Db250cmlidXRvclhNTCIKLSAgICAgICAgZGVmYXVsdD0iZmFsc2UiCi0gICAgICAgIGZpbGVuYW1lcz0iKi54bWw5OSIKLSAgICAgICAgaWNvbj0iaWNvbnMvc291cmNlRWRpdG9yLmdpZiIKLSAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMuVGVzdFNvdXJjZVZhbGlkYXRpb25GcmFtZXdvcmskVGVzdFN0cnVjdHVyZWRUZXh0RWRpdG9yIgotICAgICAgICBuYW1lPSIlY29udGVudFR5cGVUZXN0WE1MOTkuZWRpdG9yIgotICAgICAgICBzeW1ib2xpY0ZvbnROYW1lPSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRleHRmb250Ij4KLQkJPC9lZGl0b3I+Ci0JPC9leHRlbnNpb24+Ci0gICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLmNvcmUuY29udGVudHR5cGUuY29udGVudFR5cGVzIj4KLSAgICAgICAgPGNvbnRlbnQtdHlwZQotCQkJZmlsZS1leHRlbnNpb25zPSJ4bWw5OSIKLQkJCXByaW9yaXR5PSJsb3ciCi0JCQluYW1lPSIlY29udGVudFR5cGVUZXN0WE1MOTkuY3QiCi0JCQlpZD0ieG1sOTlzb3VyY2UiCi0JCQliYXNlLXR5cGU9Im9yZy5lY2xpcHNlLmNvcmUucnVudGltZS54bWwiPgotCQk8L2NvbnRlbnQtdHlwZT4KLQk8L2V4dGVuc2lvbj4KLTwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS9iYXNpY1hIVE1MLmpwZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvYmFzaWNYSFRNTC5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyY2JlZTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS9iYXNpY1hIVE1MLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvY29udjJYSFRNTC5qcGcgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL2NvbnYyWEhUTUwuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjVjNmIxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvY29udjJYSFRNTC5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL2lkZW50aWZ5RFRELmpwZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvaWRlbnRpZnlEVEQuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1M2M4NjRkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvaWRlbnRpZnlEVEQuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS9pbXBvcnREVEQuanBnIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS9pbXBvcnREVEQuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODE1ZDZiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvaW1wb3J0RFRELmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2Uvb3V0bGluZTEuanBnIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS9vdXRsaW5lMS5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5ZDIxYjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS9vdXRsaW5lMS5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL291dGxpbmUyLmpwZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2Uvb3V0bGluZTIuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjQ1M2Y3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2Uvb3V0bGluZTIuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS9zZXR1cEZpbGVzL1dpcmVsZXNzLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2Uvc2V0dXBGaWxlcy9XaXJlbGVzcy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2ZTZhM2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS9zZXR1cEZpbGVzL1dpcmVsZXNzLnhtbAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2Uvc3RyaWN0WEhUTUwuanBnIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS9zdHJpY3RYSFRNTC5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0Y2QwZWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS9zdHJpY3RYSFRNTC5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3RlbXBlcnJvcl9zbW9rZXRlc3RfZmlsZXMvSm9iRGVzY0VSUk9SLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvdGVtcGVycm9yX3Ntb2tldGVzdF9maWxlcy9Kb2JEZXNjRVJST1IueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvdGVtcGVycm9yX3Ntb2tldGVzdF9maWxlcy9Kb2JEZXNjRVJST1IueG1sCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvdGVtcGVycm9yX3Ntb2tldGVzdF9pbWFnZXMvRUpCVGFza3NfYWZ0ZXJfcGFzdGUuanBnIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS90ZW1wZXJyb3Jfc21va2V0ZXN0X2ltYWdlcy9FSkJUYXNrc19hZnRlcl9wYXN0ZS5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0YmY1NDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS90ZW1wZXJyb3Jfc21va2V0ZXN0X2ltYWdlcy9FSkJUYXNrc19hZnRlcl9wYXN0ZS5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3RlbXBlcnJvcl9zbW9rZXRlc3RfaW1hZ2VzL0VKQlRhc2tzX2JlZm9yZV9wYXN0ZS5qcGcgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3RlbXBlcnJvcl9zbW9rZXRlc3RfaW1hZ2VzL0VKQlRhc2tzX2JlZm9yZV9wYXN0ZS5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1ZjFlYjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS90ZW1wZXJyb3Jfc21va2V0ZXN0X2ltYWdlcy9FSkJUYXNrc19iZWZvcmVfcGFzdGUuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS90ZW1wZXJyb3Jfc21va2V0ZXN0X2ltYWdlcy9pbnZhbGlkX2R0ZC5qcGcgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3RlbXBlcnJvcl9zbW9rZXRlc3RfaW1hZ2VzL2ludmFsaWRfZHRkLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDAwYmIwMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3RlbXBlcnJvcl9zbW9rZXRlc3RfaW1hZ2VzL2ludmFsaWRfZHRkLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvdGVtcGVycm9yX3Ntb2tldGVzdF9pbWFnZXMvc2NoZW1hX211bHRpX2Vycm9yLmpwZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvdGVtcGVycm9yX3Ntb2tldGVzdF9pbWFnZXMvc2NoZW1hX211bHRpX2Vycm9yLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2VhMDM2Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3RlbXBlcnJvcl9zbW9rZXRlc3RfaW1hZ2VzL3NjaGVtYV9tdWx0aV9lcnJvci5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3RlbXBlcnJvcl9zbW9rZXRlc3RfaW1hZ2VzL3NjaGVtYV91bmtub3duX2VsZW1lbnQuanBnIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS90ZW1wZXJyb3Jfc21va2V0ZXN0X2ltYWdlcy9zY2hlbWFfdW5rbm93bl9lbGVtZW50LmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQzYWNjOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3RlbXBlcnJvcl9zbW9rZXRlc3RfaW1hZ2VzL3NjaGVtYV91bmtub3duX2VsZW1lbnQuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS90ZW1wZXJyb3Jfc21va2V0ZXN0X2ltYWdlcy93X2RvY3R5cGUuanBnIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS90ZW1wZXJyb3Jfc21va2V0ZXN0X2ltYWdlcy93X2RvY3R5cGUuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTI4ODY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvdGVtcGVycm9yX3Ntb2tldGVzdF9pbWFnZXMvd19kb2N0eXBlLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvdGVtcGVycm9yX3Ntb2tldGVzdF9pbWFnZXMvd291dF9kb2N0eXBlLmpwZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvdGVtcGVycm9yX3Ntb2tldGVzdF9pbWFnZXMvd291dF9kb2N0eXBlLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDYzNzIyMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3RlbXBlcnJvcl9zbW9rZXRlc3RfaW1hZ2VzL3dvdXRfZG9jdHlwZS5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3RlbXBlcnJvcl9zbW9rZXRlc3RfaW1hZ2VzL3dyb25nX2R0ZC5qcGcgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3RlbXBlcnJvcl9zbW9rZXRlc3RfaW1hZ2VzL3dyb25nX2R0ZC5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzZDI0MWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS90ZW1wZXJyb3Jfc21va2V0ZXN0X2ltYWdlcy93cm9uZ19kdGQuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS91MDExYW5pLmdpZiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvdTAxMWFuaS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwNjNhZmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS91MDExYW5pLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2Uvd2lyZWxlc3MuanBnIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS93aXJlbGVzcy5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwZmNjYWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS93aXJlbGVzcy5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL2ludGVybmFsL3ZhbGlkYXRpb24vVGVzdERlbGVnYXRpbmdTb3VyY2VWYWxpZGF0b3JGb3JYTUwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvaW50ZXJuYWwvdmFsaWRhdGlvbi9UZXN0RGVsZWdhdGluZ1NvdXJjZVZhbGlkYXRvckZvclhNTC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNDIxNWFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvaW50ZXJuYWwvdmFsaWRhdGlvbi9UZXN0RGVsZWdhdGluZ1NvdXJjZVZhbGlkYXRvckZvclhNTC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTU4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC52YWxpZGF0aW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0RGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5jb3JlLlZhbGlkYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwub3BlcmF0aW9ucy5Xb3JrYmVuY2hDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLnByb3Zpc2lvbmFsLmNvcmUuSU1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwucHJvdmlzaW9uYWwuY29yZS5JUmVwb3J0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwucHJvdmlzaW9uYWwuY29yZS5JVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMuWE1MVUlUZXN0c1BsdWdpbjsKLQotLyoqCi0gKiBUZXN0IHRoZSBYTUwgZGVsZWdhdGluZyBzb3VyY2UgdmFsaWRhdG9yLgotICoKLSAqLwotcHVibGljIGNsYXNzIFRlc3REZWxlZ2F0aW5nU291cmNlVmFsaWRhdG9yRm9yWE1MIGV4dGVuZHMgVGVzdENhc2UgCi17Ci0JRGVsZWdhdGluZ1NvdXJjZVZhbGlkYXRvckZvclhNTCBzb3VyY2VWYWxpZGF0b3IgPSBuZXcgRGVsZWdhdGluZ1NvdXJjZVZhbGlkYXRvckZvclhNTCgpOwotCQotCS8qKgotCSAqIFRlc3QgdGhhdCBmaWxlcyB0aGF0IGNvbnRhaW4gbm9uLThiaXQgY2hhcnMgYXJlIHZhbGlkYXRlZAotCSAqIGNvcnJlY3RseS4gaS5lLiBEbyBub3QgcHJvZHVjZSBpbmNvcnJlY3QgdmFsaWRhdGlvbiBtZXNzYWdlcy4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9uOEJpdENoYXJzKCkKLQl7Ci0JCVN0cmluZyBwcm9qTmFtZSA9ICJQcm9qZWN0IjsKLQkJU3RyaW5nIGZpbGVOYW1lMSA9ICJpbnRlcm5hdGlvbmFsLWluc3RhbmNlLnhtbCI7Ci0JCVN0cmluZyBmaWxlTmFtZTIgPSAiaW50ZXJuYXRpb25hbC54c2QiOwotCQkKLQkJSVByb2plY3REZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5uZXdQcm9qZWN0RGVzY3JpcHRpb24ocHJvak5hbWUpOwotCi0JCUlQcm9qZWN0IHByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QocHJvak5hbWUpOwotCQl0cnkgewotCQkJcHJvamVjdC5jcmVhdGUoZGVzY3JpcHRpb24sIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJcHJvamVjdC5vcGVuKG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQl9Ci0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJCi0JCUlGaWxlIGZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgocHJvak5hbWUgKyAiLyIgKyBmaWxlTmFtZTEpKTsKLQkJaWYgKGZpbGUgIT0gbnVsbCAmJiAhZmlsZS5leGlzdHMoKSkgewotCQkJdHJ5IHsKLQkJCQlmaWxlLmNyZWF0ZShGaWxlTG9jYXRvci5vcGVuU3RyZWFtKFhNTFVJVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLCBuZXcgUGF0aCgiL3Rlc3RyZXNvdXJjZXMvTm9uOEJpdENoYXJzL2ludGVybmF0aW9uYWwtaW5zdGFuY2UueG1sIiksIGZhbHNlKSwgdHJ1ZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQl9Ci0JCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfQotCQl9Ci0JCWZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgocHJvak5hbWUgKyAiLyIgKyBmaWxlTmFtZTIpKTsKLQkJaWYgKGZpbGUgIT0gbnVsbCAmJiAhZmlsZS5leGlzdHMoKSkgewotCQkJdHJ5IHsKLQkJCQlmaWxlLmNyZWF0ZShGaWxlTG9jYXRvci5vcGVuU3RyZWFtKFhNTFVJVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLCBuZXcgUGF0aCgiL3Rlc3RyZXNvdXJjZXMvTm9uOEJpdENoYXJzL2ludGVybmF0aW9uYWwueHNkIiksIGZhbHNlKSwgdHJ1ZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQl9Ci0JCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfQotCQl9Ci0JCVdvcmtiZW5jaENvbnRleHQgY29udGV4dCA9IG5ldyBXb3JrYmVuY2hDb250ZXh0KCk7Ci0JCUxpc3QgZmlsZUxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCWZpbGVMaXN0LmFkZCgiLyIgKyBwcm9qTmFtZSArICIvIiArIGZpbGVOYW1lMSk7Ci0JCWNvbnRleHQuc2V0VmFsaWRhdGlvbkZpbGVVUklzKGZpbGVMaXN0KTsKLQkJVGVzdFJlcG9ydGVyIHJlcG9ydGVyID0gbmV3IFRlc3RSZXBvcnRlcigpOwotCQl0cnl7Ci0JCQlzb3VyY2VWYWxpZGF0b3IudmFsaWRhdGUoY29udGV4dCwgcmVwb3J0ZXIpOwotCQl9Ci0JCWNhdGNoKFZhbGlkYXRpb25FeGNlcHRpb24gZSl7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCQotCQlhc3NlcnRGYWxzZSgiTWVzc2FnZXMgd2VyZSByZXBvcnRlZCBvbiB2YWxpZCBmaWxlIDEuIiwgcmVwb3J0ZXIuaXNNZXNzYWdlUmVwb3J0ZWQoKSk7Ci0JCQotCQlXb3JrYmVuY2hDb250ZXh0IGNvbnRleHQyID0gbmV3IFdvcmtiZW5jaENvbnRleHQoKTsKLQkJTGlzdCBmaWxlTGlzdDIgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCWZpbGVMaXN0Mi5hZGQoIi8iICsgcHJvak5hbWUgKyAiLyIgKyBmaWxlTmFtZTIpOwotCQljb250ZXh0Mi5zZXRWYWxpZGF0aW9uRmlsZVVSSXMoZmlsZUxpc3QyKTsKLQkJVGVzdFJlcG9ydGVyIHJlcG9ydGVyMiA9IG5ldyBUZXN0UmVwb3J0ZXIoKTsKLQkJdHJ5ewotCQkJc291cmNlVmFsaWRhdG9yLnZhbGlkYXRlKGNvbnRleHQyLCByZXBvcnRlcjIpOwotCQl9Ci0JCWNhdGNoKFZhbGlkYXRpb25FeGNlcHRpb24gZSl7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCQotCQlhc3NlcnRGYWxzZSgiTWVzc2FnZXMgd2VyZSByZXBvcnRlZCBvbiB2YWxpZCBmaWxlIDIuIiwgcmVwb3J0ZXIyLmlzTWVzc2FnZVJlcG9ydGVkKCkpOwotCX0KLQkKLQlwcml2YXRlIGNsYXNzIFRlc3RSZXBvcnRlciBpbXBsZW1lbnRzIElSZXBvcnRlcgotCXsKLQkJcHJvdGVjdGVkIGJvb2xlYW4gbWVzc2FnZVJlcG9ydGVkID0gZmFsc2U7Ci0JCQotCQlwdWJsaWMgVGVzdFJlcG9ydGVyKCl7Ci0JCQkKLQkJfQotCQkKLQkJcHVibGljIHZvaWQgYWRkTWVzc2FnZShJVmFsaWRhdG9yIG9yaWdpbiwgSU1lc3NhZ2UgbWVzc2FnZSkgewotCQkJbWVzc2FnZVJlcG9ydGVkID0gdHJ1ZTsKLQkJCQotCQl9Ci0JCQotCQlwdWJsaWMgYm9vbGVhbiBpc01lc3NhZ2VSZXBvcnRlZCgpCi0JCXsKLQkJCXJldHVybiBtZXNzYWdlUmVwb3J0ZWQ7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBkaXNwbGF5U3VidGFzayhJVmFsaWRhdG9yIHZhbGlkYXRvciwgSU1lc3NhZ2UgbWVzc2FnZSkgewotCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCQkJCi0JCX0KLQotCQlwdWJsaWMgTGlzdCBnZXRNZXNzYWdlcygpIHsKLQkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQkJCXJldHVybiBudWxsOwotCQl9Ci0KLQkJcHVibGljIGJvb2xlYW4gaXNDYW5jZWxsZWQoKSB7Ci0JCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCByZW1vdmVBbGxNZXNzYWdlcyhJVmFsaWRhdG9yIG9yaWdpbiwgT2JqZWN0IG9iamVjdCkgewotCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCQkJCi0JCX0KLQotCQlwdWJsaWMgdm9pZCByZW1vdmVBbGxNZXNzYWdlcyhJVmFsaWRhdG9yIG9yaWdpbikgewotCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCQkJCi0JCX0KLQotCQlwdWJsaWMgdm9pZCByZW1vdmVNZXNzYWdlU3Vic2V0KElWYWxpZGF0b3IgdmFsaWRhdG9yLCBPYmplY3Qgb2JqLCBTdHJpbmcgZ3JvdXBOYW1lKSB7Ci0JCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0JCQkKLQkJfQotCQkKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL2ludGVybmFsL3ZhbGlkYXRpb24vVGVzdE1hcmt1cFZhbGlkYXRvci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS9pbnRlcm5hbC92YWxpZGF0aW9uL1Rlc3RNYXJrdXBWYWxpZGF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGNlNjA5ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL2ludGVybmFsL3ZhbGlkYXRpb24vVGVzdE1hcmt1cFZhbGlkYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC52YWxpZGF0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5SZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnJlY29uY2lsZS52YWxpZGF0b3IuSW5jcmVtZW50YWxSZXBvcnRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5wcm92aXNpb25hbC5jb3JlLklSZXBvcnRlcjsKLQotLyoqCi0gKiBUZXN0cyBNYXJrdXBWYWxpZGF0b3IKLSAqLwotcHVibGljIGNsYXNzIFRlc3RNYXJrdXBWYWxpZGF0b3IgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJpdmF0ZSBNYXJrdXBWYWxpZGF0b3IgZlZhbGlkYXRvcjsKLQlwcml2YXRlIElSZXBvcnRlciBmUmVwb3J0ZXI7Ci0JcHJpdmF0ZSBJU3RydWN0dXJlZERvY3VtZW50IGZEb2N1bWVudDsKLQotCS8qKgotCSAqIFZhbGlkYXRlcyBkb2N1bWVudAotCSAqIAotCSAqIEBwYXJhbSBjb250ZW50cwotCSAqICAgICAgICAgICAgY29udGVudHMgdG8gc2V0IGluIGRvY3VtZW50Ci0JICogQHJldHVybiB0cnVlIGlmIHRoZXJlIHdhcyBhIHZhbGlkYXRpb24gZXJyb3IgZmFsc2Ugb3RoZXJ3aXNlCi0JICovCi0JcHJpdmF0ZSBib29sZWFuIHZhbGlkYXRlRXJyb3IoU3RyaW5nIGNvbnRlbnRzKSB7Ci0JCWZEb2N1bWVudC5zZXQoY29udGVudHMpOwotCQlmVmFsaWRhdG9yLnZhbGlkYXRlKG5ldyBSZWdpb24oMCwgZkRvY3VtZW50LmdldExlbmd0aCgpKSwgbnVsbCwgZlJlcG9ydGVyKTsKLQkJcmV0dXJuIGZSZXBvcnRlci5nZXRNZXNzYWdlcygpLmlzRW1wdHkoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyBqdXN0IGNyZWF0ZSBvbmNlCi0JCWlmIChmVmFsaWRhdG9yID09IG51bGwpCi0JCQlmVmFsaWRhdG9yID0gbmV3IE1hcmt1cFZhbGlkYXRvcigpOwotCQlpZiAoZlJlcG9ydGVyID09IG51bGwpCi0JCQlmUmVwb3J0ZXIgPSBuZXcgSW5jcmVtZW50YWxSZXBvcnRlcihudWxsKTsKLQkJaWYgKGZEb2N1bWVudCA9PSBudWxsKQotCQkJZkRvY3VtZW50ID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5jcmVhdGVTdHJ1Y3R1cmVkRG9jdW1lbnRGb3IoIm9uZmlyZS54bWwiLCAiIiwgbnVsbCk7Ci0KLQkJZlZhbGlkYXRvci5jb25uZWN0KGZEb2N1bWVudCk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZlZhbGlkYXRvci5kaXNjb25uZWN0KGZEb2N1bWVudCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEF0dHJpYnV0ZXNJbkVuZFRhZygpIHsKLQkJLy8gdGVzdCBmb3IgZXJyb3IKLQkJYXNzZXJ0VHJ1ZSgiU2hvdWxkIGdldCBhdHRyaWJ1dGVzIGluIGVuZCB0YWcgZXJyb3IiLCAhdmFsaWRhdGVFcnJvcigiPHN0b3A+PC9zdG9wIGRyb3A9XCJyb2xsXCI+IikpOwotCi0JCS8vIHRlc3QgZm9yIG5vIGVycm9yCi0JCWFzc2VydFRydWUoIlNob3VsZCBub3QgZ2V0IGF0dHJpYnV0ZXMgaW4gZW5kIHRhZyBlcnJvciIsIHZhbGlkYXRlRXJyb3IoIjxzdG9wPjwvc3RvcD4iKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENsb3NpbmdCcmFja2V0KCkgewotCQkvLyB0ZXN0IGZvciBlcnJvcgotCQlhc3NlcnRUcnVlKCJTaG91bGQgZ2V0IGNsb3NpbmcgYnJhY2tldCBlcnJvciIsICF2YWxpZGF0ZUVycm9yKCI8c3RvcCA8L3N0b3A+IikpOwotCi0JCS8vIHRlc3QgZm9yIG5vIGVycm9yCi0JCWFzc2VydFRydWUoIlNob3VsZCBub3QgZ2V0IGNsb3NpbmcgYnJhY2tldCBlcnJvciIsIHZhbGlkYXRlRXJyb3IoIjxzdG9wPjwvc3RvcD4iKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEVtcHR5VGFnKCkgewotCQkvLyB0ZXN0IGZvciBlcnJvcgotCQlhc3NlcnRUcnVlKCJTaG91bGQgZ2V0IGVtcHR5IHRhZyBlcnJvciIsICF2YWxpZGF0ZUVycm9yKCI8PiIpKTsKLQotCQkvLyB0ZXN0IGZvciBubyBlcnJvcgotCQlhc3NlcnRUcnVlKCJTaG91bGQgbm90IGdldCBlbXB0eSB0YWcgZXJyb3IiLCB2YWxpZGF0ZUVycm9yKCI8c3RvcD48L3N0b3A+IikpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RBdHRyaWJ1dGVWYWx1ZSgpIHsKLQkJLy8gdGVzdCBmb3IgZXJyb3IKLQkJYXNzZXJ0VHJ1ZSgiU2hvdWxkIGdldCBhdHRyaWJ1dGUgaGFzIG5vIHZhbHVlIGVycm9yIiwgIXZhbGlkYXRlRXJyb3IoIjxzdG9wIGRyb3A+PC9zdG9wPiIpKTsKLQkJYXNzZXJ0VHJ1ZSgiU2hvdWxkIGdldCBhdHRyaWJ1dGUgbWlzc2luZyB2YWx1ZSBlcnJvciIsICF2YWxpZGF0ZUVycm9yKCI8c3RvcCBkcm9wPT48L3N0b3A+IikpOwotCi0JCS8vIHRlc3QgZm9yIG5vIGVycm9yCi0JCWFzc2VydFRydWUoIlNob3VsZCBub3QgZ2V0IGF0dHJpYnV0ZSBtaXNzaW5nIHZhbHVlIGVycm9yIiwgdmFsaWRhdGVFcnJvcigiPHN0b3AgZHJvcD1cInJvbGxcIj48L3N0b3A+IikpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTcGFjZUJlZm9yZU5hbWUoKSB7Ci0JCS8vIHRlc3QgZm9yIGVycm9yCi0JCWFzc2VydFRydWUoIlNob3VsZCBnZXQgdGFnIGhhcyBzcGFjZSBiZWZvcmUgbmFtZSBlcnJvciIsICF2YWxpZGF0ZUVycm9yKCI8ICAgIHN0b3A+PC9zdG9wPiIpKTsKLQotCQkvLyB0ZXN0IGZvciBubyBlcnJvcgotCQlhc3NlcnRUcnVlKCJTaG91bGQgbm90IGdldCB0YWcgaGFzIHNwYWNlIGJlZm9yZSBuYW1lIGVycm9yIiwgdmFsaWRhdGVFcnJvcigiPHN0b3A+PC9zdG9wPiIpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UXVvdGVzRm9yQXR0cmlidXRlVmFsdWVzKCkgewotCQkvLyB0ZXN0IGZvciBlcnJvcgotCQlhc3NlcnRUcnVlKCJTaG91bGQgZ2V0IG1pc3NpbmcgZW5kIHF1b3RlIGVycm9yIiwgIXZhbGlkYXRlRXJyb3IoIjxzdG9wIGRyb3A9XCI+PC9zdG9wPiIpKTsKLQkJYXNzZXJ0VHJ1ZSgiU2hvdWxkIGdldCBtaXNzaW5nIGVuZCBxdW90ZSBlcnJvciIsICF2YWxpZGF0ZUVycm9yKCI8c3RvcCBkcm9wPVwicm9sbD48L3N0b3A+IikpOwotCQlhc3NlcnRUcnVlKCJTaG91bGQgZ2V0IG1pc3NpbmcgZW5kIHF1b3RlIGVycm9yIiwgIXZhbGlkYXRlRXJyb3IoIjxzdG9wIGRyb3A9XCc+PC9zdG9wPiIpKTsKLQkJYXNzZXJ0VHJ1ZSgiU2hvdWxkIGdldCBtaXNzaW5nIHF1b3RlcyBlcnJvciIsICF2YWxpZGF0ZUVycm9yKCI8c3RvcCBkcm9wPXJvbGw+PC9zdG9wPiIpKTsKLQotCQkvLyB0ZXN0IGZvciBubyBlcnJvcgotCQlhc3NlcnRUcnVlKCJTaG91bGQgbm90IGdldCBtaXNzaW5nIGVuZCBxdW90ZSBlcnJvciIsIHZhbGlkYXRlRXJyb3IoIjxzdG9wIGRyb3A9XCJcIj48L3N0b3A+IikpOwotCQlhc3NlcnRUcnVlKCJTaG91bGQgbm90IGdldCBtaXNzaW5nIGVuZCBxdW90ZSBlcnJvciIsIHZhbGlkYXRlRXJyb3IoIjxzdG9wIGRyb3A9XCJyb2xsXCI+PC9zdG9wPiIpKTsKLQkJYXNzZXJ0VHJ1ZSgiU2hvdWxkIG5vdCBnZXQgbWlzc2luZyBlbmQgcXVvdGUgZXJyb3IiLCB2YWxpZGF0ZUVycm9yKCI8c3RvcCBkcm9wPVwnXCc+PC9zdG9wPiIpKTsKLQkJYXNzZXJ0VHJ1ZSgiU2hvdWxkIG5vdCBnZXQgbWlzc2luZyBxdW90ZXMgZXJyb3IiLCB2YWxpZGF0ZUVycm9yKCI8c3RvcCBkcm9wPVwncm9sbFwnPjwvc3RvcD4iKSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9Mb2dnZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvTG9nZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4NzFlM2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9Mb2dnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0czsKLQotaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuU3RyaW5nVG9rZW5pemVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLQotLyoqCi0gKiBTbWFsbCBjb252ZW5pZW5jZSBjbGFzcyB0byBsb2cgbWVzc2FnZXMgdG8gcGx1Z2luJ3MgbG9nIGZpbGUgYW5kIGFsc28sIGlmIGRlc2lyZWQsCi0gKiB0aGUgY29uc29sZS4gVGhpcyBjbGFzcyBzaG91bGQgb25seSBiZSB1c2VkIGJ5IGNsYXNzZXMgaW4gdGhpcyBwbHVnaW4uIE90aGVyCi0gKiBwbHVnaW5zIHNob3VsZCBtYWtlIHRoZWlyIG93biBjb3B5LCB3aXRoIGFwcHJvcHJpYXRlIElELgotICovCi1wdWJsaWMgY2xhc3MgTG9nZ2VyIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRSQUNFRklMVEVSX0xPQ0FUSU9OID0gIi9kZWJ1Zy90cmFjZWZpbHRlciI7IC8vJE5PTi1OTFMtMSQKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9LID0gSVN0YXR1cy5PSzsgLy8gMAotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElORk8gPSBJU3RhdHVzLklORk87IC8vIDEKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXQVJOSU5HID0gSVN0YXR1cy5XQVJOSU5HOyAvLyAyCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVJST1IgPSBJU3RhdHVzLkVSUk9SOyAvLyA0Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPS19ERUJVRyA9IDIwMCArIE9LOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElORk9fREVCVUcgPSAyMDAgKyBJTkZPOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdBUk5JTkdfREVCVUcgPSAyMDAgKyBXQVJOSU5HOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SX0RFQlVHID0gMjAwICsgRVJST1I7Ci0KLQkvKioKLQkgKiBBZGRzIG1lc3NhZ2UgdG8gbG9nLgotCSAqIEBwYXJhbSBsZXZlbCBzZXZlcml0eSBsZXZlbCBvZiB0aGUgbWVzc2FnZSAoT0ssIElORk8sIFdBUk5JTkcsIEVSUk9SLCBPS19ERUJVRywgSU5GT19ERUJVRywgV0FSTklOR19ERUJVRywgRVJST1JfREVCVUcpCi0JICogQHBhcmFtIG1lc3NhZ2UgdGV4dCB0byBhZGQgdG8gdGhlIGxvZwotCSAqIEBwYXJhbSBleGNlcHRpb24gZXhjZXB0aW9uIHRocm93bgotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgdm9pZCBfbG9nKGludCBsZXZlbCwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJaWYgKGxldmVsID09IE9LX0RFQlVHIHx8IGxldmVsID09IElORk9fREVCVUcgfHwgbGV2ZWwgPT0gV0FSTklOR19ERUJVRyB8fCBsZXZlbCA9PSBFUlJPUl9ERUJVRykgewotCQkJaWYgKCFpc0RlYnVnZ2luZygpKQotCQkJCXJldHVybjsKLQkJfQotCi0JCWludCBzZXZlcml0eSA9IElTdGF0dXMuT0s7Ci0JCXN3aXRjaCAobGV2ZWwpIHsKLQkJCWNhc2UgSU5GT19ERUJVRyA6Ci0JCQljYXNlIElORk8gOgotCQkJCXNldmVyaXR5ID0gSVN0YXR1cy5JTkZPOwotCQkJCWJyZWFrOwotCQkJY2FzZSBXQVJOSU5HX0RFQlVHIDoKLQkJCWNhc2UgV0FSTklORyA6Ci0JCQkJc2V2ZXJpdHkgPSBJU3RhdHVzLldBUk5JTkc7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEVSUk9SX0RFQlVHIDoKLQkJCWNhc2UgRVJST1IgOgotCQkJCXNldmVyaXR5ID0gSVN0YXR1cy5FUlJPUjsKLQkJfQotCQltZXNzYWdlID0gKG1lc3NhZ2UgIT0gbnVsbCkgPyBtZXNzYWdlIDogIm51bGwiOyAvLyROT04tTkxTLTEkCi0JCVN0YXR1cyBzdGF0dXNPYmogPSBuZXcgU3RhdHVzKHNldmVyaXR5LCBQTFVHSU5fSUQsIHNldmVyaXR5LCBtZXNzYWdlLCBleGNlcHRpb24pOwotCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKFBMVUdJTl9JRCk7Ci0JCWlmIChidW5kbGUgIT0gbnVsbCkgCi0JCQlQbGF0Zm9ybS5nZXRMb2coYnVuZGxlKS5sb2coc3RhdHVzT2JqKTsKLQl9Ci0KLQkvKioKLQkgKiBQcmludHMgbWVzc2FnZSB0byBsb2cgaWYgY2F0ZWdvcnkgbWF0Y2hlcyAvZGVidWcvdHJhY2VmaWx0ZXIgb3B0aW9uLgotCSAqIEBwYXJhbSBtZXNzYWdlIHRleHQgdG8gcHJpbnQKLQkgKiBAcGFyYW0gY2F0ZWdvcnkgY2F0ZWdvcnkgb2YgdGhlIG1lc3NhZ2UsIHRvIGJlIGNvbXBhcmVkIHdpdGggL2RlYnVnL3RyYWNlZmlsdGVyCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyB2b2lkIF90cmFjZShTdHJpbmcgY2F0ZWdvcnksIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCWlmIChpc1RyYWNpbmcoY2F0ZWdvcnkpKSB7Ci0JCQltZXNzYWdlID0gKG1lc3NhZ2UgIT0gbnVsbCkgPyBtZXNzYWdlIDogIm51bGwiOyAvLyROT04tTkxTLTEkCi0JCQlTdGF0dXMgc3RhdHVzT2JqID0gbmV3IFN0YXR1cyhJU3RhdHVzLk9LLCBQTFVHSU5fSUQsIElTdGF0dXMuT0ssIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKFBMVUdJTl9JRCk7Ci0JCQlpZiAoYnVuZGxlICE9IG51bGwpIAotCQkJCVBsYXRmb3JtLmdldExvZyhidW5kbGUpLmxvZyhzdGF0dXNPYmopOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQHJldHVybiB0cnVlIGlmIHRoZSBwbGF0Zm9ybSBpcyBkZWJ1Z2dpbmcKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNEZWJ1Z2dpbmcoKSB7Ci0JCXJldHVybiBQbGF0Zm9ybS5pbkRlYnVnTW9kZSgpOwotCX0KLQotCS8qKgotCSAqIERldGVybWluZXMgaWYgY3VycmVudGx5IHRyYWNpbmcgYSBjYXRlZ29yeQotCSAqIEBwYXJhbSBjYXRlZ29yeQotCSAqIEByZXR1cm4gdHJ1ZSBpZiB0cmFjaW5nIGNhdGVnb3J5LCBmYWxzZSBvdGhlcndpc2UKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNUcmFjaW5nKFN0cmluZyBjYXRlZ29yeSkgewotCQlpZiAoIWlzRGVidWdnaW5nKCkpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJU3RyaW5nIHRyYWNlRmlsdGVyID0gUGxhdGZvcm0uZ2V0RGVidWdPcHRpb24oUExVR0lOX0lECi0JCQkJKyBUUkFDRUZJTFRFUl9MT0NBVElPTik7Ci0JCWlmICh0cmFjZUZpbHRlciAhPSBudWxsKSB7Ci0JCQlTdHJpbmdUb2tlbml6ZXIgdG9rZW5pemVyID0gbmV3IFN0cmluZ1Rva2VuaXplcih0cmFjZUZpbHRlciwgIiwiKTsgLy8kTk9OLU5MUy0xJAotCQkJd2hpbGUgKHRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpIHsKLQkJCQlTdHJpbmcgY2F0ID0gdG9rZW5pemVyLm5leHRUb2tlbigpLnRyaW0oKTsKLQkJCQlpZiAoY2F0ZWdvcnkuZXF1YWxzKGNhdCkpIHsKLQkJCQkJcmV0dXJuIHRydWU7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nKGludCBsZXZlbCwgU3RyaW5nIG1lc3NhZ2UpIHsKLQkJX2xvZyhsZXZlbCwgbWVzc2FnZSwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZyhpbnQgbGV2ZWwsIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV9sb2cobGV2ZWwsIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZ0V4Y2VwdGlvbihTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfbG9nKEVSUk9SLCBtZXNzYWdlLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFeGNlcHRpb24oVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfbG9nKEVSUk9SLCBleGNlcHRpb24uZ2V0TWVzc2FnZSgpLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCB0cmFjZUV4Y2VwdGlvbihTdHJpbmcgY2F0ZWdvcnksIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV90cmFjZShjYXRlZ29yeSwgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgdHJhY2VFeGNlcHRpb24oU3RyaW5nIGNhdGVnb3J5LCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV90cmFjZShjYXRlZ29yeSwgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgdHJhY2UoU3RyaW5nIGNhdGVnb3J5LCBTdHJpbmcgbWVzc2FnZSkgewotCQlfdHJhY2UoY2F0ZWdvcnksIG1lc3NhZ2UsIG51bGwpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvVGVzdEVkaXRvckNvbmZpZ3VyYXRpb25YTUwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvVGVzdEVkaXRvckNvbmZpZ3VyYXRpb25YTUwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODc3NmY3Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL1Rlc3RFZGl0b3JDb25maWd1cmF0aW9uWE1MLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICBKZW5zIEx1a293c2tpL0lubm9vcHJhY3QgLSBpbml0aWFsIHJlbmFtaW5nL3Jlc3RydWN0dXJpbmcKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5FeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9yWE1MOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXh0LklYTUxQYXJ0aXRpb25zOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkuU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uWE1MOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwuZG91YmxlY2xpY2suWE1MRG91YmxlQ2xpY2tTdHJhdGVneTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLnRhZ2luZm8uWE1MVGFnSW5mb0hvdmVyUHJvY2Vzc29yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkudmlld3MuY29udGVudG91dGxpbmUuWE1MQ29udGVudE91dGxpbmVDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkudmlld3MucHJvcGVydGllcy5YTUxQcm9wZXJ0eVNoZWV0Q29uZmlndXJhdGlvbjsKLQotLyoqCi0gKiBUZXN0cyByZXRyaWV2aW5nIGVkaXRvciBjb250cmlidXRpb25zIGZvciB4bWwgY29udGVudCB0eXBlCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0RWRpdG9yQ29uZmlndXJhdGlvblhNTCBleHRlbmRzIFRlc3RDYXNlIHsKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0U291cmNlVmlld2VyQ29uZmlndXJhdGlvbigpIHsKLQkJT2JqZWN0IG8gPSBFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLmdldEluc3RhbmNlKCkuZ2V0Q29uZmlndXJhdGlvbihFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLlNPVVJDRVZJRVdFUkNPTkZJR1VSQVRJT04sIENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwpOwotCQlhc3NlcnROb3ROdWxsKCJubyBzb3VyY2Ugdmlld2VyIGNvbmZpZ3VyYXRpb24gZm9yICIgKyBDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MLCBvKTsKLQkJLy8gY2hlY2sgZm9yIG92ZXItcXVhbGlmaWVkIHN1YmNsYXNzZXMKLQkJYXNzZXJ0RXF1YWxzKCJ1bmV4cGVjdGVkIHNvdXJjZSB2aWV3ZXIgY29uZmlndXJhdGlvbiBmb3IgIiArIENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwsIG8uZ2V0Q2xhc3MoKSwgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0Q29udGVudE91dGxpbmVWaWV3ZXJDb25maWd1cmF0aW9uKCkgewotCQlPYmplY3QgbyA9IEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuZ2V0SW5zdGFuY2UoKS5nZXRDb25maWd1cmF0aW9uKEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuQ09OVEVOVE9VVExJTkVDT05GSUdVUkFUSU9OLCBDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MKTsKLQkJYXNzZXJ0Tm90TnVsbCgibm8gY29udGVudCBvdXRsaW5lIHZpZXdlciBjb25maWd1cmF0aW9uIGZvciAiICsgQ29udGVudFR5cGVJZEZvclhNTC5Db250ZW50VHlwZUlEX1hNTCwgbyk7Ci0JCS8vIGNoZWNrIGZvciBvdmVyLXF1YWxpZmllZCBzdWJjbGFzc2VzCi0JCWFzc2VydEVxdWFscygidW5leHBlY3RlZCBjb250ZW50IG91dGxpbmUgdmlld2VyIGNvbmZpZ3VyYXRpb24gZm9yICIgKyBDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MLCBvLmdldENsYXNzKCksIFhNTENvbnRlbnRPdXRsaW5lQ29uZmlndXJhdGlvbi5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldFByb3BlcnR5U2hlZXRDb25maWd1cmF0aW9uKCkgewotCQlPYmplY3QgbyA9IEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuZ2V0SW5zdGFuY2UoKS5nZXRDb25maWd1cmF0aW9uKEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuUFJPUEVSVFlTSEVFVENPTkZJR1VSQVRJT04sIENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwpOwotCQlhc3NlcnROb3ROdWxsKCJubyBwcm9wZXJ0eSBzaGVldCBjb25maWd1cmF0aW9uIGZvciAiICsgQ29udGVudFR5cGVJZEZvclhNTC5Db250ZW50VHlwZUlEX1hNTCwgbyk7Ci0JCS8vIGNoZWNrIGZvciBvdmVyLXF1YWxpZmllZCBzdWJjbGFzc2VzCi0JCWFzc2VydEVxdWFscygidW5leHBlY3RlZCBwcm9wZXJ0eSBzaGVldCBjb25maWd1cmF0aW9uIGZvciAiICsgQ29udGVudFR5cGVJZEZvclhNTC5Db250ZW50VHlwZUlEX1hNTCwgby5nZXRDbGFzcygpLCBYTUxQcm9wZXJ0eVNoZWV0Q29uZmlndXJhdGlvbi5jbGFzcyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RHZXREb2N1bWVudGF0aW9uVGV4dEhvdmVyKCkgewotCQlPYmplY3RbXSBob3ZlcnMgPSBFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLmdldEluc3RhbmNlKCkuZ2V0Q29uZmlndXJhdGlvbnMoRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlci5ET0NVTUVOVEFUSU9OVEVYVEhPVkVSLCBJWE1MUGFydGl0aW9ucy5YTUxfREVGQVVMVCkudG9BcnJheSgpOwotCQlhc3NlcnRUcnVlKCJubyBkb2N1bWVudGF0aW9uIHRleHQgaG92ZXIgZm9yICIgKyBJWE1MUGFydGl0aW9ucy5YTUxfREVGQVVMVCwgaG92ZXJzLmxlbmd0aCA+IDApOwotLy8JCS8vIGNoZWNrIGZvciBvdmVyLXF1YWxpZmllZCBzdWJjbGFzc2VzCi0vLwkJYXNzZXJ0RXF1YWxzKCJ1bmV4cGVjdGVkIGRvY3VtZW50YXRpb24gdGV4dCBob3ZlciBmb3IgIiArIElYTUxQYXJ0aXRpb25zLlhNTF9ERUZBVUxULCBvLmdldENsYXNzKCksIFhNTFRhZ0luZm9Ib3ZlclByb2Nlc3Nvci5jbGFzcyk7Ci0JCUNsYXNzIHJlcXVpcmVkID0gWE1MVGFnSW5mb0hvdmVyUHJvY2Vzc29yLmNsYXNzOwotCQlib29sZWFuIHJlcXVpcmVkRm91bmQgPSBmYWxzZTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBob3ZlcnMubGVuZ3RoOyBpKyspIHsKLQkJCWlmKHJlcXVpcmVkLmVxdWFscyhob3ZlcnNbaV0uZ2V0Q2xhc3MoKSkpCi0JCQkJcmVxdWlyZWRGb3VuZCA9IHRydWU7Ci0JCX0KLQkJYXNzZXJ0VHJ1ZShyZXF1aXJlZC5nZXROYW1lKCkgKyAiIG5vdCBsb2FkZWQiLCByZXF1aXJlZEZvdW5kKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEdldERvdWJsZUNsaWNrU3RyYXRlZ3koKSB7Ci0JCU9iamVjdCBvID0gRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlci5nZXRJbnN0YW5jZSgpLmdldENvbmZpZ3VyYXRpb24oRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlci5ET1VCTEVDTElDS1NUUkFURUdZLCBJWE1MUGFydGl0aW9ucy5YTUxfREVGQVVMVCk7Ci0JCWFzc2VydE5vdE51bGwoIm5vIGRvdWJsZWNsaWNrIHN0cmF0ZWd5IGZvciAiICsgSVhNTFBhcnRpdGlvbnMuWE1MX0RFRkFVTFQsIG8pOwotCQkvLyBjaGVjayBmb3Igb3Zlci1xdWFsaWZpZWQgc3ViY2xhc3NlcwotCQlhc3NlcnRFcXVhbHMoInVuZXhwZWN0ZWQgZG91YmxlY2xpY2sgc3RyYXRlZ3kgZm9yICIgKyBJWE1MUGFydGl0aW9ucy5YTUxfREVGQVVMVCwgby5nZXRDbGFzcygpLCBYTUxEb3VibGVDbGlja1N0cmF0ZWd5LmNsYXNzKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL1Rlc3ROZXdYTUxHZW5lcmF0b3IuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvVGVzdE5ld1hNTEdlbmVyYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NTcwNDE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvVGVzdE5ld1hNTEdlbmVyYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwudXRpbC5ET01Db250ZW50QnVpbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLndpemFyZHMuTmV3WE1MR2VuZXJhdG9yOwotCi1wdWJsaWMgY2xhc3MgVGVzdE5ld1hNTEdlbmVyYXRvciBleHRlbmRzIFRlc3RDYXNlIHsKLQkKLQlzdGF0aWMgU3RyaW5nIFBMVUdJTl9BQlNPTFVURV9QQVRIOwotCQotCXN0YXRpYyBmaW5hbCBTdHJpbmcgU0NIRU1BXzEgPSAiU2NoZW1hMSI7IC8vJE5PTi1OTFMtMSQKLQlzdGF0aWMgZmluYWwgU3RyaW5nIFNDSEVNQV8yID0gIlNjaGVtYTIiOyAvLyROT04tTkxTLTEkCi0Jc3RhdGljIGZpbmFsIFN0cmluZyBST09UX0VMRU1FTlRfMSA9ICJHb2xmQ291bnRyeUNsdWIiOyAvLyROT04tTkxTLTEkCi0Jc3RhdGljIGZpbmFsIFN0cmluZyBST09UX0VMRU1FTlRfMiA9ICJCaWxsSW5mbyI7IC8vJE5PTi1OTFMtMSQKLQkKLQkvKioKLQkgKiBTZXRzIHVwIHRoZSB0ZXN0LgotCSAqLwotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnNldFVwKCk7CQotCX0KLQkKLQkvKioKLQkgKiBUZXN0IGdlbmVyYXRpb24gd2l0aCBubyBvcHRpb25zIHNlbGVjdGVkLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3ROWEdfYmFyZSgpIHsKLQkJcnVuT25lVGVzdCgwLCBST09UX0VMRU1FTlRfMSwgU0NIRU1BXzEpOwotCX0KLQkKLQkvKioKLQkgKiBUZXN0IGdlbmVyYXRpb24gd2l0aCBvcHRpb25hbCBhdHRyaWJ1dGVzIGluY2x1ZGVkLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3ROWEdfb3B0QXR0cigpIHsKLQkJcnVuT25lVGVzdChET01Db250ZW50QnVpbGRlci5CVUlMRF9PUFRJT05BTF9BVFRSSUJVVEVTLCBST09UX0VMRU1FTlRfMSwgU0NIRU1BXzEpOwotCX0KLQkKLQkvKioKLQkgKiBUZXN0IGdlbmVyYXRpb24gd2l0aCBvcHRpb25hbCBlbGVtZW50cyBpbmNsdWRlZC4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0TlhHX29wdEVsZW0oKSB7Ci0JCXJ1bk9uZVRlc3QoRE9NQ29udGVudEJ1aWxkZXIuQlVJTERfT1BUSU9OQUxfRUxFTUVOVFMsIFJPT1RfRUxFTUVOVF8xLCBTQ0hFTUFfMSk7Ci0JfQotCQotCS8qKgotCSAqIFRlc3QgZ2VuZXJhdGlvbiB3aXRoIGVsZW1lbnRzIHNldCB0byBpbml0aWFsIGZpcnN0IHZhbHVlLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3ROWEdfb3B0Rmlyc3QoKSB7Ci0JCXJ1bk9uZVRlc3QoRE9NQ29udGVudEJ1aWxkZXIuQlVJTERfRklSU1RfQ0hPSUNFIHwgRE9NQ29udGVudEJ1aWxkZXIuQlVJTERfRklSU1RfU1VCU1RJVFVUSU9OLCBST09UX0VMRU1FTlRfMSwgU0NIRU1BXzEpOwotCX0KLQkKLQkvKioKLQkgKiBUZXN0IGdlbmVyYXRpb24gd2l0aCB0ZXh0IG5vZGVzLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3ROWEdfb3B0VGV4dE5vZGVzKCkgewotCQlydW5PbmVUZXN0KERPTUNvbnRlbnRCdWlsZGVyLkJVSUxEX1RFWFRfTk9ERVMsIFJPT1RfRUxFTUVOVF8xLCBTQ0hFTUFfMSk7Ci0JfQotCQotCS8qKgotCSAqIFRlc3QgZ2VuZXJhdGlvbiB3aXRoIGFsbCBvcHRpb25zIHNlbGVjdGVkLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3ROWEdfYWxsKCkgewotCQlydW5PbmVUZXN0KERPTUNvbnRlbnRCdWlsZGVyLkJVSUxEX09QVElPTkFMX0FUVFJJQlVURVMgfCBET01Db250ZW50QnVpbGRlci5CVUlMRF9PUFRJT05BTF9FTEVNRU5UUyB8IAotCQkJCSAgRE9NQ29udGVudEJ1aWxkZXIuQlVJTERfRklSU1RfQ0hPSUNFIHwgRE9NQ29udGVudEJ1aWxkZXIuQlVJTERfRklSU1RfU1VCU1RJVFVUSU9OIHwgRE9NQ29udGVudEJ1aWxkZXIuQlVJTERfVEVYVF9OT0RFUywgUk9PVF9FTEVNRU5UXzEsIFNDSEVNQV8xKTsKLQl9Ci0JCi0JLyoqCi0JICogVGVzdCBnZW5lcmF0aW9uIHdpdGggYSBzZXBhcmF0ZSBzY2hlbWEgaW4gd2hpY2ggbmFtZXNwYWNlcyBtdXN0IGJlIHF1YWxpZmllZC4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0TlhHX25zUXVhbGlmaWVkKCl7Ci0JCXJ1bk9uZVRlc3QoRE9NQ29udGVudEJ1aWxkZXIuQlVJTERfT1BUSU9OQUxfQVRUUklCVVRFUyB8IERPTUNvbnRlbnRCdWlsZGVyLkJVSUxEX09QVElPTkFMX0VMRU1FTlRTIHwgCi0JCQkJICBET01Db250ZW50QnVpbGRlci5CVUlMRF9GSVJTVF9DSE9JQ0UgfCBET01Db250ZW50QnVpbGRlci5CVUlMRF9GSVJTVF9TVUJTVElUVVRJT04gfCBET01Db250ZW50QnVpbGRlci5CVUlMRF9URVhUX05PREVTLCBST09UX0VMRU1FTlRfMiwgU0NIRU1BXzIpOwotCX0KLQkKLQkvKioKLQkgKiBSdW5zIGEgZ2VuZXJpYyBnZW5lcmF0ZSArIGNvbXBhcmlzb24gdGVzdC4KLQkgKiBAcGFyYW0gYnVpbGRQb2xpY3kgSW50ZWdlciByZXByZXNlbnRpbmcgdGhlIGJ1aWxkIHBvbGljeSBmb3IgdGhpcyBnZW5lcmF0aW9uLgotCSAqIEBwYXJhbSByb290RWxlbWVudCBEZXNpcmVkIHJvb3QgZWxlbWVudC4KLQkgKiBAcGFyYW0geHNkVXJpIFVSSSBvZiB0aGUgZGVzaXJlZCBYTUwgc2NoZW1hLgotCSAqLwotCXByaXZhdGUgdm9pZCBydW5PbmVUZXN0KGludCBidWlsZFBvbGljeSwgU3RyaW5nIHJvb3RFbGVtZW50LCBTdHJpbmcgeHNkVXJpRmlsZSkgewotCSAgdHJ5IHsKLQkJICAvLyBnZW5lcmljIHNldHVwCi0JCSAgUExVR0lOX0FCU09MVVRFX1BBVEggPSBYTUxVSVRlc3RzUGx1Z2luLmdldEluc3RhbGxVUkwoKTsKLQkJICBTdHJpbmcgdXJpID0gImZpbGU6Ly8vIiArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInRlc3RyZXNvdXJjZXMvIiArIHhzZFVyaUZpbGUgKyAiLnhzZCI7IC8vJE5PTi1OTFMtMyQKLQkJICBTdHJpbmdbXSBlcnJvckluZm8gPSBuZXcgU3RyaW5nWzJdOwotCQkgIENNRG9jdW1lbnQgY21kID0gTmV3WE1MR2VuZXJhdG9yLmNyZWF0ZUNNRG9jdW1lbnQodXJpLCBlcnJvckluZm8pOwotCQkgIE5ld1hNTEdlbmVyYXRvciBnZW5lcmF0b3IgPSBuZXcgTmV3WE1MR2VuZXJhdG9yKHVyaSwgY21kKTsKLQkJCSAgCi0JCSAgU3RyaW5nIGlkID0geHNkVXJpRmlsZSArICItIiArIHJvb3RFbGVtZW50ICsgIi0iICsgYnVpbGRQb2xpY3k7Ci0JCSAgCi0JCSAgU3RyaW5nIGZpbGVOYW1lUmVzdWx0ID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyAidGVzdHJlc291cmNlcy9UZXN0ZWQtIiArIGlkICsgIi54bWwiOyAvLyROT04tTkxTLTIkCi0JCSAgRmlsZSBuRmlsZSA9IG5ldyBGaWxlKGZpbGVOYW1lUmVzdWx0KTsKLQkJICBpZiAoIW5GaWxlLmV4aXN0cygpKSB7Ci0JCQkgIG5GaWxlLmNyZWF0ZU5ld0ZpbGUoKTsKLQkJICB9Ci0JCSAgCi0JCSAgU3RyaW5nIGZpbGVOYW1lQ29tcGFyZSA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInRlc3RyZXNvdXJjZXMvQ29tcGFyZS0iICsgaWQgKyAiLnhtbCI7IC8vJE5PTi1OTFMtMiQKLQkJICAKLQkJICBnZW5lcmF0b3Iuc2V0QnVpbGRQb2xpY3koYnVpbGRQb2xpY3kpOwotCQkgIGdlbmVyYXRvci5zZXRSb290RWxlbWVudE5hbWUocm9vdEVsZW1lbnQpOwotCQkgIGdlbmVyYXRvci5zZXREZWZhdWx0U3lzdGVtSWQoeHNkVXJpRmlsZSArICIueHNkIik7IC8vJE5PTi1OTFMtMSQKLQkJICBnZW5lcmF0b3IuY3JlYXRlTmFtZXNwYWNlSW5mb0xpc3QoKTsKLQkJICBnZW5lcmF0b3IuY3JlYXRlWE1MRG9jdW1lbnQoZmlsZU5hbWVSZXN1bHQpOwotCQkgIAotCQkgIFhNTERpZmYgZGlmZmVyID0gbmV3IFhNTERpZmYoKTsKLQkJICBhc3NlcnRUcnVlKCJUaGUgWE1MIGZpbGVzIGFyZSBub3QgaWRlbnRpY2FsLiIsIGRpZmZlci5kaWZmKGZpbGVOYW1lQ29tcGFyZSwgZmlsZU5hbWVSZXN1bHQsICJYTUwiKSk7IC8vJE5PTi1OTFMtMiQKLQkJICAKLQkJICAvLyBpZiB3ZSd2ZSBtYWRlIGl0IHRoaXMgZmFyLCBkZWxldGUgdGhlIG91dHB1dCBmaWxlCi0JCSAgcmVtb3ZlKG5GaWxlKTsKLQkgIH0KLQkgIGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JICB9IAkgIAkJCi0JfQotCQotCS8qKgotCSAqIEBwYXJhbSBmaWxlCi0JICovCi0JcHJpdmF0ZSB2b2lkIHJlbW92ZShGaWxlIGZpbGUpIHsKLQkJaWYoZmlsZS5pc0RpcmVjdG9yeSgpKSB7Ci0JCQlGaWxlW10gY2hpbGRyZW4gPSBmaWxlLmxpc3RGaWxlcygpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykgewotCQkJCXJlbW92ZShjaGlsZHJlbltpXSk7Ci0JCQl9Ci0JCX0KLQkJZmlsZS5kZWxldGUoKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL1Rlc3RPcGVuRWRpdG9yWE1MLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL1Rlc3RPcGVuRWRpdG9yWE1MLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0N2E4OTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9UZXN0T3BlbkVkaXRvclhNTC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzOwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0RGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50RXh0ZW5zaW9uNDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaWRlLklERTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLlN0cnVjdHVyZWRUZXh0RWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwudGFibGV0cmVlLlhNTE11bHRpUGFnZUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLS8qKgotICogVGVzdCBtaXNjIGVkaXRvciBmdW5jdGlvbnMgd2l0aCBhbiBvcGVuIHhtbCBlZGl0b3IuCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0T3BlbkVkaXRvclhNTCBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBQUk9KRUNUX05BTUUgPSAiVGVzdE9wZW5FZGl0b3JYTUwiOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIEZJTEVfTkFNRSA9ICJ0ZXN0U3RydWN0dXJlZFRleHRFZGl0b3JYTUwueG1sIjsKLQotCXByaXZhdGUgc3RhdGljIElFZGl0b3JQYXJ0IGZFZGl0b3I7Ci0JcHJpdmF0ZSBzdGF0aWMgSUZpbGUgZkZpbGU7Ci0JcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBmSXNTZXR1cCA9IGZhbHNlOwotCi0JcHVibGljIFRlc3RPcGVuRWRpdG9yWE1MKCkgewotCQlzdXBlcigiVGVzdFN0cnVjdHVyZWRUZXh0RWRpdG9yWE1MIik7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLy8gb25seSBjcmVhdGUgcHJvamVjdCBhbmQgZmlsZSBvbmNlCi0JCWlmICghZklzU2V0dXApIHsKLQkJCS8vIGNyZWF0ZSBwcm9qZWN0Ci0JCQljcmVhdGVQcm9qZWN0KFBST0pFQ1RfTkFNRSk7Ci0JCQlmRmlsZSA9IGdldE9yQ3JlYXRlRmlsZShQUk9KRUNUX05BTUUgKyAiLyIgKyBGSUxFX05BTUUpOwotCQkJZklzU2V0dXAgPSB0cnVlOwotCQl9Ci0KLQkJYXNzZXJ0VHJ1ZSgiSW5wdXQgZmlsZSBub3QgYWNjZXNzaWJsZTogIiArIGZGaWxlLmdldEZ1bGxQYXRoKCksIGZGaWxlLmlzQWNjZXNzaWJsZSgpKTsKLQotCQkvLyBlZGl0b3IgaXMgb3BlbmVkIGVhY2ggdGltZQotCQlpZiAoZklzU2V0dXAgJiYgZkVkaXRvciA9PSBudWxsKSB7Ci0JCQlJV29ya2JlbmNoV2luZG93IHdvcmtiZW5jaFdpbmRvdyA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCk7Ci0JCQlJV29ya2JlbmNoUGFnZSBwYWdlID0gd29ya2JlbmNoV2luZG93LmdldEFjdGl2ZVBhZ2UoKTsKLQkJCWZFZGl0b3IgPSBJREUub3BlbkVkaXRvcihwYWdlLCBmRmlsZSwgdHJ1ZSwgdHJ1ZSk7Ci0JCQlhc3NlcnRUcnVlKCJVbmFibGUgdG8gb3BlbiBzdHJ1Y3R1cmVkIHRleHQgZWRpdG9yICIgKyBmRWRpdG9yLCAoZkVkaXRvciBpbnN0YW5jZW9mIFhNTE11bHRpUGFnZUVkaXRvclBhcnQpIHx8IChmRWRpdG9yIGluc3RhbmNlb2YgU3RydWN0dXJlZFRleHRFZGl0b3IpKTsKLQkJfQotCX0KLQotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vIGVkaXRvciBpcyBjbG9zZWQgZWFjaCB0aW1lCi0JCWlmIChmRWRpdG9yICE9IG51bGwpIHsKLQkJCUlXb3JrYmVuY2hXaW5kb3cgd29ya2JlbmNoV2luZG93ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKTsKLQkJCUlXb3JrYmVuY2hQYWdlIHBhZ2UgPSB3b3JrYmVuY2hXaW5kb3cuZ2V0QWN0aXZlUGFnZSgpOwotCQkJcGFnZS5jbG9zZUVkaXRvcihmRWRpdG9yLCBmYWxzZSk7Ci0JCQlhc3NlcnRUcnVlKCJVbmFibGUgdG8gY2xvc2UgZWRpdG9yIiwgdHJ1ZSk7Ci0JCQlmRWRpdG9yID0gbnVsbDsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBjcmVhdGVQcm9qZWN0KFN0cmluZyBwcm9qTmFtZSkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlJUHJvamVjdERlc2NyaXB0aW9uIGRlc2NyaXB0aW9uID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLm5ld1Byb2plY3REZXNjcmlwdGlvbihwcm9qTmFtZSk7Ci0KLQkJSVByb2plY3QgcHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChwcm9qTmFtZSk7Ci0KLQkJcHJvamVjdC5jcmVhdGUoZGVzY3JpcHRpb24sIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQlwcm9qZWN0Lm9wZW4obmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JfQotCi0JcHJpdmF0ZSBJRmlsZSBnZXRPckNyZWF0ZUZpbGUoU3RyaW5nIGZpbGVQYXRoKSB7Ci0JCUlGaWxlIGJsYW5rRmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShuZXcgUGF0aChmaWxlUGF0aCkpOwotCQlpZiAoYmxhbmtGaWxlICE9IG51bGwgJiYgIWJsYW5rRmlsZS5leGlzdHMoKSkgewotCQkJdHJ5IHsKLQkJCQlibGFua0ZpbGUuY3JlYXRlKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShuZXcgYnl0ZVswXSksIHRydWUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJfQotCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGJsYW5rRmlsZTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0IHNldHRpbmcgdGV4dCBpbiBkb2N1bWVudCBvZiBvcGVuIGVkaXRvci4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0U2V0RG9jdW1lbnQoKSB7Ci0JCUlEb2N1bWVudCBkb2N1bWVudCA9IChJRG9jdW1lbnQpIGZFZGl0b3IuZ2V0QWRhcHRlcihJRG9jdW1lbnQuY2xhc3MpOwotCQl0cnkgewotCQkJZG9jdW1lbnQuc2V0KCI8aGVsbG8+PC9oZWxsbz4iKTsKLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCWFzc2VydFRydWUoIlVuYWJsZSB0byBzZXQgdGV4dCBpbiBlZGl0b3I6ICIgKyBlLCBmYWxzZSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBUZXN0IHN0cnVjdHVyZWQgZG9jdW1lbnQgaXMgcmVsb2FkZWQgb24gcmVzb3VyY2UgY2hhbmdlCi0JICogCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEJ1ZzE1MTA2OSgpIHsKLQkJSURvY3VtZW50IGRvYyA9IChJRG9jdW1lbnQpIGZFZGl0b3IuZ2V0QWRhcHRlcihJRG9jdW1lbnQuY2xhc3MpOwotCQlkb2Muc2V0KCI8aHRtbD48Ym9keT48aDE+VGl0bGU8L2gxPjwvYm9keT48L2h0bWw+Iik7Ci0JCS8vIHNldCBoMSB0byByZWFkb25seQotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQltb2RlbCA9IChJRE9NTW9kZWwpIG1vZGVsTWFuYWdlci5nZXRFeGlzdGluZ01vZGVsRm9yRWRpdChkb2MpOwotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQlOb2RlTGlzdCBubCA9IG1vZGVsLmdldERvY3VtZW50KCkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImgxIik7Ci0JCQkJSURPTUVsZW1lbnQgaDEgPSAoSURPTUVsZW1lbnQpIG5sLml0ZW0oMCk7Ci0JCQkJaDEuc2V0RWRpdGFibGUoZmFsc2UsIHRydWUpOwotCQkJfQotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpCi0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCQlTdHJpbmcgbmV3Q29udGVudCA9ICJuZXcgY29udGVudCI7Ci0JCSgoSURvY3VtZW50RXh0ZW5zaW9uNCkgZG9jKS5zZXQobmV3Q29udGVudCwgZkZpbGUuZ2V0TW9kaWZpY2F0aW9uU3RhbXAoKSk7Ci0JCWFzc2VydEVxdWFscygiU2V0IGNvbnRlbnRzIGluIGRvY3VtZW50IHdpdGggcmVhZCBvbmx5IHJlZ2lvbnMgZmFpbGVkIiwgbmV3Q29udGVudCwgZG9jLmdldCgpKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL1Rlc3RQcm9wZXJ0eVNoZWV0Q29uZmlndXJhdGlvbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9UZXN0UHJvcGVydHlTaGVldENvbmZpZ3VyYXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTM3MTc0MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL1Rlc3RQcm9wZXJ0eVNoZWV0Q29uZmlndXJhdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTYxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0czsKLQotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkJhZExvY2F0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuVGV4dFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaWRlLklERTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLklUZXh0RWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuSVByb3BlcnR5U2hlZXRQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuSVByb3BlcnR5U291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLnByb3BlcnRpZXMuSVByb3BlcnR5U291cmNlUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5TdHJ1Y3R1cmVkVGV4dEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnByb3BlcnRpZXMuQ29uZmlndXJhYmxlUHJvcGVydHlTaGVldFBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS52aWV3cy5wcm9wZXJ0aWVzLklQcm9wZXJ0eVNvdXJjZUV4dGVuc2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnZpZXdzLnByb3BlcnRpZXMuUHJvcGVydHlTaGVldENvbmZpZ3VyYXRpb247Ci0KLXB1YmxpYyBjbGFzcyBUZXN0UHJvcGVydHlTaGVldENvbmZpZ3VyYXRpb24gZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgUFJPSkVDVF9OQU1FID0gIlRlc3RQcm9wZXJ0eVNoZWV0Q29uZmlndXJhdGlvbiI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgRklMRV9OQU1FID0gInRlc3RQcm9wZXJ0eVNoZWV0Q29uZmlndXJhdGlvbi54bWwiOwotCi0JcHJpdmF0ZSBzdGF0aWMgU3RydWN0dXJlZFRleHRFZGl0b3IgZkVkaXRvcjsKLQlwcml2YXRlIHN0YXRpYyBJRWRpdG9yUGFydCBmTWFpbkVkaXRvcjsKLQlwcml2YXRlIHN0YXRpYyBJRmlsZSBmRmlsZTsKLQlwcml2YXRlIHN0YXRpYyBib29sZWFuIGZJc1NldHVwID0gZmFsc2U7Ci0KLQlwdWJsaWMgVGVzdFByb3BlcnR5U2hlZXRDb25maWd1cmF0aW9uKCkgewotCQlzdXBlcigiVGVzdFByb3BlcnR5U2hlZXRDb25maWd1cmF0aW9uIik7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJaWYgKCFmSXNTZXR1cCkgewotCQkJLy8gY3JlYXRlIHByb2plY3QKLQkJCWNyZWF0ZVByb2plY3QoUFJPSkVDVF9OQU1FKTsKLQkJCWZGaWxlID0gZ2V0T3JDcmVhdGVGaWxlKFBST0pFQ1RfTkFNRSArICIvIiArIEZJTEVfTkFNRSk7Ci0JCQlmSXNTZXR1cCA9IHRydWU7Ci0JCX0KLQkJLy8gZWRpdG9yIGlzIG9wZW5lZCBlYWNoIHRpbWUKLQkJaWYgKGZJc1NldHVwICYmIGZNYWluRWRpdG9yID09IG51bGwpIHsKLQkJCUlXb3JrYmVuY2hXaW5kb3cgd29ya2JlbmNoV2luZG93ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKTsKLQkJCUlXb3JrYmVuY2hQYWdlIHBhZ2UgPSB3b3JrYmVuY2hXaW5kb3cuZ2V0QWN0aXZlUGFnZSgpOwotCQkJZk1haW5FZGl0b3IgPSBJREUub3BlbkVkaXRvcihwYWdlLCBmRmlsZSwgdHJ1ZSwgdHJ1ZSk7Ci0JCQlpZiAoZk1haW5FZGl0b3IgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkVGV4dEVkaXRvcikKLQkJCQlmRWRpdG9yID0gKFN0cnVjdHVyZWRUZXh0RWRpdG9yKSBmTWFpbkVkaXRvcjsKLQkJCWVsc2UgaWYgKGZNYWluRWRpdG9yICE9IG51bGwpIHsKLQkJCQlPYmplY3QgYWRhcHRlciA9IGZNYWluRWRpdG9yLmdldEFkYXB0ZXIoSVRleHRFZGl0b3IuY2xhc3MpOwotCQkJCWlmIChhZGFwdGVyIGluc3RhbmNlb2YgU3RydWN0dXJlZFRleHRFZGl0b3IpCi0JCQkJCWZFZGl0b3IgPSAoU3RydWN0dXJlZFRleHRFZGl0b3IpIGFkYXB0ZXI7Ci0JCQl9Ci0JCQlpZiAoZkVkaXRvciA9PSBudWxsKQotCQkJCWFzc2VydFRydWUoIlVuYWJsZSB0byBvcGVuIHN0cnVjdHVyZWQgdGV4dCBlZGl0b3IgIiArICgoZk1haW5FZGl0b3IgIT0gbnVsbCkgPyBmTWFpbkVkaXRvci5nZXRDbGFzcygpLmdldE5hbWUoKSA6ICIiKSwgZmFsc2UpOwotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLy8gZWRpdG9yIGlzIGNsb3NlZCBlYWNoIHRpbWUKLQkJaWYgKGZNYWluRWRpdG9yICE9IG51bGwpIHsKLQkJCUlXb3JrYmVuY2hXaW5kb3cgd29ya2JlbmNoV2luZG93ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKTsKLQkJCUlXb3JrYmVuY2hQYWdlIHBhZ2UgPSB3b3JrYmVuY2hXaW5kb3cuZ2V0QWN0aXZlUGFnZSgpOwotCQkJcGFnZS5jbG9zZUVkaXRvcihmTWFpbkVkaXRvciwgZmFsc2UpOwotCQkJYXNzZXJ0VHJ1ZSgiVW5hYmxlIHRvIGNsb3NlIGVkaXRvciIsIHRydWUpOwotCQkJZk1haW5FZGl0b3IgPSBudWxsOwotCQkJZkVkaXRvciA9IG51bGw7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgY3JlYXRlUHJvamVjdChTdHJpbmcgcHJvak5hbWUpIHsKLQkJSVByb2plY3REZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5uZXdQcm9qZWN0RGVzY3JpcHRpb24ocHJvak5hbWUpOwotCi0JCUlQcm9qZWN0IHByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QocHJvak5hbWUpOwotCQl0cnkgewotCQkJcHJvamVjdC5jcmVhdGUoZGVzY3JpcHRpb24sIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJcHJvamVjdC5vcGVuKG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQl9Ci0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIElGaWxlIGdldE9yQ3JlYXRlRmlsZShTdHJpbmcgZmlsZVBhdGgpIHsKLQkJSUZpbGUgYmxhbmtGaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKGZpbGVQYXRoKSk7Ci0JCWlmIChibGFua0ZpbGUgIT0gbnVsbCAmJiAhYmxhbmtGaWxlLmV4aXN0cygpKSB7Ci0JCQl0cnkgewotCQkJCWJsYW5rRmlsZS5jcmVhdGUobmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKG5ldyBieXRlWzBdKSwgdHJ1ZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQl9Ci0JCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gYmxhbmtGaWxlOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RQcm9wZXJ0eVNvdXJjZVJlbW92YWwoKSB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlJRG9jdW1lbnQgZG9jdW1lbnQgPSAoSURvY3VtZW50KSBmRWRpdG9yLmdldEFkYXB0ZXIoSURvY3VtZW50LmNsYXNzKTsKLQkJLy8gc2V0IHVwIHRoZSBlZGl0b3IgZG9jdW1lbnQKLQkJZG9jdW1lbnQucmVwbGFjZSgwLCAwLCAiPHRlc3Q+PG15cHJvcGVydHkgcHJvcHM9XCJ5ZXNcIiAvPjwvdGVzdD4iKTsKLQotCQkvLyBzZXQgY3VycmVudCBzZWxlY3Rpb24gaW4gZWRpdG9yCi0JCUlTZWxlY3Rpb24gc2V0U2VsZWN0aW9uID0gbmV3IFRleHRTZWxlY3Rpb24oOSwgMCk7Ci0JCWZFZGl0b3IuZ2V0U2VsZWN0aW9uUHJvdmlkZXIoKS5zZXRTZWxlY3Rpb24oc2V0U2VsZWN0aW9uKTsKLQotCQkvLyBnZXQgY3VycmVudCBzZWxlY3Rpb24gaW4gZWRpdG9yCi0JCU9iamVjdCBpdGVtID0gbnVsbDsKLQkJSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBmRWRpdG9yLmdldFNlbGVjdGlvblByb3ZpZGVyKCkuZ2V0U2VsZWN0aW9uKCk7Ci0JCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgewotCQkJaXRlbSA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHNlbGVjdGlvbikuZ2V0Rmlyc3RFbGVtZW50KCk7Ci0KLQkJCUlQcm9wZXJ0eVNoZWV0UGFnZSBwcm9wZXJ0eVNoZWV0ID0gKElQcm9wZXJ0eVNoZWV0UGFnZSkgZkVkaXRvci5nZXRBZGFwdGVyKElQcm9wZXJ0eVNoZWV0UGFnZS5jbGFzcyk7Ci0JCQlhc3NlcnRUcnVlKCJObyBDb25maWd1cmFibGVQcm9wZXJ0eVNoZWV0UGFnZSBmb3VuZCIsIHByb3BlcnR5U2hlZXQgaW5zdGFuY2VvZiBDb25maWd1cmFibGVQcm9wZXJ0eVNoZWV0UGFnZSk7Ci0JCQlpZiAocHJvcGVydHlTaGVldCBpbnN0YW5jZW9mIENvbmZpZ3VyYWJsZVByb3BlcnR5U2hlZXRQYWdlKSB7Ci0JCQkJQ29uZmlndXJhYmxlUHJvcGVydHlTaGVldFBhZ2UgY3BzID0gKENvbmZpZ3VyYWJsZVByb3BlcnR5U2hlZXRQYWdlKSBwcm9wZXJ0eVNoZWV0OwotCQkJCVByb3BlcnR5U2hlZXRDb25maWd1cmF0aW9uIGNvbmZpZyA9IGNwcy5nZXRDb25maWd1cmF0aW9uKCk7Ci0JCQkJYXNzZXJ0Tm90TnVsbCgiTm8gcHJvcGVydHkgc2hlZXQgY29uZmlndXJhdGlvbiBmb3VuZCIsIGNvbmZpZyk7Ci0KLQkJCQlJUHJvcGVydHlTb3VyY2VQcm92aWRlciBwcm92aWRlciA9IGNvbmZpZy5nZXRQcm9wZXJ0eVNvdXJjZVByb3ZpZGVyKGNwcyk7Ci0JCQkJYXNzZXJ0Tm90TnVsbCgiTm8gcHJvcGVydHkgc2hlZXQgcHJvdmlkZXIgZm91bmQiLCBwcm92aWRlcik7Ci0KLQkJCQlJUHJvcGVydHlTb3VyY2Ugc291cmNlID0gcHJvdmlkZXIuZ2V0UHJvcGVydHlTb3VyY2UoaXRlbSk7Ci0JCQkJaWYgKHNvdXJjZSBpbnN0YW5jZW9mIElQcm9wZXJ0eVNvdXJjZUV4dGVuc2lvbikgewotCQkJCQlib29sZWFuIGNhblJlbW92ZSA9ICgoSVByb3BlcnR5U291cmNlRXh0ZW5zaW9uKSBzb3VyY2UpLmlzUHJvcGVydHlSZW1vdmFibGUoInByb3BzIik7Ci0JCQkJCWFzc2VydFRydWUoIkN1cnJlbnQgcHJvcGVydHkgY2Fubm90IGJlIHJlbW92ZWQiLCBjYW5SZW1vdmUpOwotCQkJCQlpZiAoY2FuUmVtb3ZlKSB7Ci0JCQkJCQkoKElQcm9wZXJ0eVNvdXJjZUV4dGVuc2lvbikgc291cmNlKS5yZW1vdmVQcm9wZXJ0eSgicHJvcHMiKTsKLQkJCQkJCWFzc2VydFRydWUoIkN1cnJlbnQgcHJvcGVydHkgY2Fubm90IGJlIHJlbW92ZWQiLCB0cnVlKTsKLQkJCQkJCS8vIGZvcmNlIHJldHVybiBoZXJlLCB0byBhdm9pZCBsYXN0IGZhbGwgdGhyb3VnaAotCQkJCQkJLy8gZmFpbGluZyBhc3NlcnQKLQkJCQkJCXJldHVybjsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCQkvLyBpZiB3ZSBnZXQgdG8gaGVyZSwgYWx3YXlzIGZhaWwsIHNpbmNlIHNvbWV0aGluZyB3ZW50IHdyb25nLgotCQlhc3NlcnRUcnVlKCJ0ZXN0UHJvcGVydHlTb3VyY2VSZW1vdmFsIHRlc3QgZGlkIG5vdCB0YWtlIGV4cGVjdGVkIHBhdGgiLCBmYWxzZSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9UZXN0UmVjb25jaWxlclhNTC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9UZXN0UmVjb25jaWxlclhNTC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OWZjM2JiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvVGVzdFJlY29uY2lsZXJYTUwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHM7Ci0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0RGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuSVByZWZlcmVuY2VTdG9yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkJhZExvY2F0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuc291cmNlLkFubm90YXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5zb3VyY2UuSUFubm90YXRpb25Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaWRlLklERTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLkRlZmF1bHRNYXJrZXJBbm5vdGF0aW9uQWNjZXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IuSVRleHRFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5TdHJ1Y3R1cmVkVGV4dEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLlNTRVVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwucHJvdmlzaW9uYWwucHJlZmVyZW5jZXMuQ29tbW9uRWRpdG9yUHJlZmVyZW5jZU5hbWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwudGFibGV0cmVlLlhNTE11bHRpUGFnZUVkaXRvclBhcnQ7Ci0KLS8qKgotICogVGVzdHMgcmVjb25jaWxlciBpbiBhbiBvcGVuIGVkaXRvci4KLSAqLwotcHVibGljIGNsYXNzIFRlc3RSZWNvbmNpbGVyWE1MIGV4dGVuZHMgVGVzdENhc2UgewotCXByaXZhdGUgZmluYWwgU3RyaW5nIFBST0pFQ1RfTkFNRSA9ICJUZXN0UmVjb25jaWxlclhNTCI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgRklMRV9OQU1FID0gIlRlc3RSZWNvbmNpbGVyWE1MZmlsZS54bWwiOwotCWZpbmFsIHByaXZhdGUgU3RyaW5nIEFOTk9UQVRJT05fRVJST1IgPSAib3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZW1wLmVycm9yIjsgLy8kTk9OLU5MUy0xJAotCWZpbmFsIHByaXZhdGUgU3RyaW5nIEFOTk9UQVRJT05fV0FSTklORyA9ICJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlbXAud2FybmluZyI7IC8vJE5PTi1OTFMtMSQKLQotCXByaXZhdGUgc3RhdGljIElFZGl0b3JQYXJ0IGZFZGl0b3I7Ci0JcHJpdmF0ZSBzdGF0aWMgSUZpbGUgZkZpbGU7Ci0JcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBmSXNTZXR1cCA9IGZhbHNlOwotCi0JcHJpdmF0ZSBib29sZWFuIGZSZWNvbmNpbGVyUHJlZjsKLQotCXB1YmxpYyBUZXN0UmVjb25jaWxlclhNTCgpIHsKLQkJc3VwZXIoIlRlc3RSZWNvbmNpbGVyWE1MIik7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLy8gb25seSBjcmVhdGUgcHJvamVjdCBhbmQgZmlsZSBvbmNlCi0JCWlmICghZklzU2V0dXApIHsKLQkJCS8vIGNyZWF0ZSBwcm9qZWN0Ci0JCQljcmVhdGVQcm9qZWN0KFBST0pFQ1RfTkFNRSk7Ci0JCQlmRmlsZSA9IGdldE9yQ3JlYXRlRmlsZShQUk9KRUNUX05BTUUgKyAiLyIgKyBGSUxFX05BTUUpOwotCQkJZklzU2V0dXAgPSB0cnVlOwotCQl9Ci0KLQkJLy8gZWRpdG9yIGlzIG9wZW5lZCBlYWNoIHRpbWUKLQkJaWYgKGZJc1NldHVwICYmIGZFZGl0b3IgPT0gbnVsbCkgewotCQkJSVdvcmtiZW5jaFdpbmRvdyB3b3JrYmVuY2hXaW5kb3cgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpOwotCQkJSVdvcmtiZW5jaFBhZ2UgcGFnZSA9IHdvcmtiZW5jaFdpbmRvdy5nZXRBY3RpdmVQYWdlKCk7Ci0JCQlmRWRpdG9yID0gSURFLm9wZW5FZGl0b3IocGFnZSwgZkZpbGUsIHRydWUsIHRydWUpOwotCQkJaWYgKCEoKGZFZGl0b3IgaW5zdGFuY2VvZiBYTUxNdWx0aVBhZ2VFZGl0b3JQYXJ0KSB8fCAoZkVkaXRvciBpbnN0YW5jZW9mIFN0cnVjdHVyZWRUZXh0RWRpdG9yKSkpCi0JCQkJYXNzZXJ0VHJ1ZSgiVW5hYmxlIHRvIG9wZW4gc3RydWN0dXJlZCB0ZXh0IGVkaXRvciIsIGZhbHNlKTsKLQkJfQotCi0JCS8vIHR1cm4gb24gcmVjb25jaWxpbmcKLQkJSVByZWZlcmVuY2VTdG9yZSBzdG9yZSA9IFNTRVVJUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKTsKLQkJZlJlY29uY2lsZXJQcmVmID0gc3RvcmUuZ2V0Qm9vbGVhbihDb21tb25FZGl0b3JQcmVmZXJlbmNlTmFtZXMuRVZBTFVBVEVfVEVNUE9SQVJZX1BST0JMRU1TKTsKLQkJaWYgKCFmUmVjb25jaWxlclByZWYpCi0JCQlzdG9yZS5zZXRWYWx1ZShDb21tb25FZGl0b3JQcmVmZXJlbmNlTmFtZXMuRVZBTFVBVEVfVEVNUE9SQVJZX1BST0JMRU1TLCB0cnVlKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyByZXN0b3JlIHJlY29uY2lsaW5nIHByZWZlcmVuY2UKLQkJSVByZWZlcmVuY2VTdG9yZSBzdG9yZSA9IFNTRVVJUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKTsKLQkJc3RvcmUuc2V0VmFsdWUoQ29tbW9uRWRpdG9yUHJlZmVyZW5jZU5hbWVzLkVWQUxVQVRFX1RFTVBPUkFSWV9QUk9CTEVNUywgZlJlY29uY2lsZXJQcmVmKTsKLQotCQkvLyBlZGl0b3IgaXMgY2xvc2VkIGVhY2ggdGltZQotCQlpZiAoZkVkaXRvciAhPSBudWxsKSB7Ci0JCQlJV29ya2JlbmNoV2luZG93IHdvcmtiZW5jaFdpbmRvdyA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCk7Ci0JCQlJV29ya2JlbmNoUGFnZSBwYWdlID0gd29ya2JlbmNoV2luZG93LmdldEFjdGl2ZVBhZ2UoKTsKLQkJCXBhZ2UuY2xvc2VFZGl0b3IoZkVkaXRvciwgZmFsc2UpOwotCQkJYXNzZXJ0VHJ1ZSgiVW5hYmxlIHRvIGNsb3NlIGVkaXRvciIsIHRydWUpOwotCQkJZkVkaXRvciA9IG51bGw7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgY3JlYXRlUHJvamVjdChTdHJpbmcgcHJvak5hbWUpIHsKLQkJSVByb2plY3REZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5uZXdQcm9qZWN0RGVzY3JpcHRpb24ocHJvak5hbWUpOwotCi0JCUlQcm9qZWN0IHByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QocHJvak5hbWUpOwotCQl0cnkgewotCQkJcHJvamVjdC5jcmVhdGUoZGVzY3JpcHRpb24sIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJcHJvamVjdC5vcGVuKG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQl9Ci0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIElGaWxlIGdldE9yQ3JlYXRlRmlsZShTdHJpbmcgZmlsZVBhdGgpIHsKLQkJSUZpbGUgYmxhbmtGaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKGZpbGVQYXRoKSk7Ci0JCWlmIChibGFua0ZpbGUgIT0gbnVsbCAmJiAhYmxhbmtGaWxlLmV4aXN0cygpKSB7Ci0JCQl0cnkgewotCQkJCWJsYW5rRmlsZS5jcmVhdGUobmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKG5ldyBieXRlWzBdKSwgdHJ1ZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQl9Ci0JCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gYmxhbmtGaWxlOwotCX0KLQotCS8qKgotCSAqIFRlc3RzIHJlY29uY2lsZXIgYnkgdmVyaWZ5aW5nIG5vIGVycm9ycy93YXJuaW5ncyBmb3VuZCB3aXRoIHdlbGwtZm9ybWVkCi0JICogeG1sLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RXZWxsRm9ybWVkKCkgewotCQlJRG9jdW1lbnQgZG9jID0gKElEb2N1bWVudCkgZkVkaXRvci5nZXRBZGFwdGVyKElEb2N1bWVudC5jbGFzcyk7Ci0JCWRvYy5zZXQoIjxodG1sPjxib2R5PjxoMT5UaXRsZTwvaDE+PC9ib2R5PjwvaHRtbD4iKTsKLQkJSVRleHRFZGl0b3IgdGV4dEVkaXRvciA9IChJVGV4dEVkaXRvcikgZkVkaXRvci5nZXRBZGFwdGVyKElUZXh0RWRpdG9yLmNsYXNzKTsKLQkJSUFubm90YXRpb25Nb2RlbCBhbm5vTW9kZWwgPSB0ZXh0RWRpdG9yLmdldERvY3VtZW50UHJvdmlkZXIoKS5nZXRBbm5vdGF0aW9uTW9kZWwoZkVkaXRvci5nZXRFZGl0b3JJbnB1dCgpKTsKLQkJRGVmYXVsdE1hcmtlckFubm90YXRpb25BY2Nlc3MgYW5ub3RhdGlvbkFjY2VzcyA9IG5ldyBEZWZhdWx0TWFya2VyQW5ub3RhdGlvbkFjY2VzcygpOwotCi0JCS8vIHZlcmlmeSB3ZWxsLWZvcm1lZCB4bWwKLQkJdHJ5IHsKLQkJCVRocmVhZC5zbGVlcCg1MDAwKTsKLQkJCUl0ZXJhdG9yIGl0ZXIgPSBhbm5vTW9kZWwuZ2V0QW5ub3RhdGlvbkl0ZXJhdG9yKCk7Ci0JCQkvLyBtYWtlIHN1cmUgdGhlIG9ubHkgcHJvYmxlbSB3ZSBmaW5kIGlzIHRoZSBsYWNrIG9mIGEgc3BlY2lmaWVkIGdyYW1tYXIKLQkJCXdoaWxlIChpdGVyLmhhc05leHQoKSkgewotCQkJCUFubm90YXRpb24gYW5ubyA9IChBbm5vdGF0aW9uKSBpdGVyLm5leHQoKTsKLQkJCQlTdHJpbmcgYW5ub1R5cGUgPSBhbm5vLmdldFR5cGUoKTsKLQkJCQlpZiAoKGFubm90YXRpb25BY2Nlc3MuaXNTdWJ0eXBlKGFubm9UeXBlLCBBTk5PVEFUSU9OX0VSUk9SKSkgfHwgKGFubm90YXRpb25BY2Nlc3MuaXNTdWJ0eXBlKGFubm9UeXBlLCBBTk5PVEFUSU9OX1dBUk5JTkcpKSkgewotCQkJCQlhc3NlcnRUcnVlKCJ0ZXN0UmVjb25jaWxlcjogVW5leHBlY3RlZCBpbml0aWFsIGFubm90YXRpb25zIiArIGFubm8uZ2V0VGV4dCgpLCBhbm5vLmdldFRleHQoKS5pbmRleE9mKCJObyBncmFtbWFyIGNvbnN0cmFpbnRzIikgPiAtMSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogVGVzdHMgcmVjb25jaWxlciBieSB2ZXJpZnlpbmcgZXJyb3Ivd2FybmluZyBmb3VuZCB3aXRoIGlsbC1mb3JtZWQgeG1sLgotCSAqIChtaXNzaW5nIGNsb3NlIGJyYWNrZXQpCi0JICovCi0JcHVibGljIHZvaWQgdGVzdElsbEZvcm1lZE5vQ2xvc2VCcmFja2V0KCkgewotCQlJRG9jdW1lbnQgZG9jID0gKElEb2N1bWVudCkgZkVkaXRvci5nZXRBZGFwdGVyKElEb2N1bWVudC5jbGFzcyk7Ci0JCWRvYy5zZXQoIjxodG1sPjxib2R5PjxoMT5UaXRsZTwvaDE+PC9ib2R5PjwvaHRtbD4iKTsKLQkJSVRleHRFZGl0b3IgdGV4dEVkaXRvciA9IChJVGV4dEVkaXRvcikgZkVkaXRvci5nZXRBZGFwdGVyKElUZXh0RWRpdG9yLmNsYXNzKTsKLQkJSUFubm90YXRpb25Nb2RlbCBhbm5vTW9kZWwgPSB0ZXh0RWRpdG9yLmdldERvY3VtZW50UHJvdmlkZXIoKS5nZXRBbm5vdGF0aW9uTW9kZWwoZkVkaXRvci5nZXRFZGl0b3JJbnB1dCgpKTsKLQkJRGVmYXVsdE1hcmtlckFubm90YXRpb25BY2Nlc3MgYW5ub3RhdGlvbkFjY2VzcyA9IG5ldyBEZWZhdWx0TWFya2VyQW5ub3RhdGlvbkFjY2VzcygpOwotCi0JCS8vIHZlcmlmeSBpbGwtZm9ybWVkIHhtbAotCQl0cnkgewotCQkJZG9jLnJlcGxhY2UoNiwgNiwgIjxib2R5ICIpOwotCQkJVGhyZWFkLnNsZWVwKDUwMDApOwotCQkJYm9vbGVhbiBlcnJvckZvdW5kID0gZmFsc2U7Ci0JCQlJdGVyYXRvciBpdGVyID0gYW5ub01vZGVsLmdldEFubm90YXRpb25JdGVyYXRvcigpOwotCQkJd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSB7Ci0JCQkJQW5ub3RhdGlvbiBhbm5vID0gKEFubm90YXRpb24pIGl0ZXIubmV4dCgpOwotCQkJCVN0cmluZyBhbm5vVHlwZSA9IGFubm8uZ2V0VHlwZSgpOwotCQkJCWlmICgoYW5ub3RhdGlvbkFjY2Vzcy5pc1N1YnR5cGUoYW5ub1R5cGUsIEFOTk9UQVRJT05fRVJST1IpKSB8fCAoYW5ub3RhdGlvbkFjY2Vzcy5pc1N1YnR5cGUoYW5ub1R5cGUsIEFOTk9UQVRJT05fV0FSTklORykpKSB7Ci0JCQkJCWVycm9yRm91bmQgPSB0cnVlOwotCQkJCX0KLQkJCX0KLQkJCWFzc2VydFRydWUoInRlc3RSZWNvbmNpbGVyOiBEaWQgbm90IGZpbmQgZXhwZWN0ZWQgZXJyb3JzIGluOiAiICsgZG9jLmdldCgpLCBlcnJvckZvdW5kKTsKLQkJfQotCQljYXRjaCAoQmFkTG9jYXRpb25FeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQljYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFRlc3RzIHJlY29uY2lsZXIgYnkgdmVyaWZ5aW5nIGVycm9yL3dhcm5pbmcgZm91bmQgd2l0aCBpbGwtZm9ybWVkIHhtbC4KLQkgKiAobWlzc2luZyBhdHRyaWJ1dGUgdmFsdWUpCi0JICovCi0JcHVibGljIHZvaWQgdGVzdElsbEZvcm1lZE5vQXR0clZhbHVlKCkgewotCQlJRG9jdW1lbnQgZG9jID0gKElEb2N1bWVudCkgZkVkaXRvci5nZXRBZGFwdGVyKElEb2N1bWVudC5jbGFzcyk7Ci0JCWRvYy5zZXQoIjxodG1sPjxib2R5PjxoMT5UaXRsZTwvaDE+PC9ib2R5PjwvaHRtbD4iKTsKLQkJSVRleHRFZGl0b3IgdGV4dEVkaXRvciA9IChJVGV4dEVkaXRvcikgZkVkaXRvci5nZXRBZGFwdGVyKElUZXh0RWRpdG9yLmNsYXNzKTsKLQkJSUFubm90YXRpb25Nb2RlbCBhbm5vTW9kZWwgPSB0ZXh0RWRpdG9yLmdldERvY3VtZW50UHJvdmlkZXIoKS5nZXRBbm5vdGF0aW9uTW9kZWwoZkVkaXRvci5nZXRFZGl0b3JJbnB1dCgpKTsKLQkJRGVmYXVsdE1hcmtlckFubm90YXRpb25BY2Nlc3MgYW5ub3RhdGlvbkFjY2VzcyA9IG5ldyBEZWZhdWx0TWFya2VyQW5ub3RhdGlvbkFjY2VzcygpOwotCi0JCS8vIHZlcmlmeSBpbGwtZm9ybWVkIHhtbAotCQl0cnkgewotCQkJZG9jLnJlcGxhY2UoNiwgNiwgIjxib2R5IGhlbGxvPiIpOwotCQkJVGhyZWFkLnNsZWVwKDUwMDApOwotCQkJYm9vbGVhbiBlcnJvckZvdW5kID0gZmFsc2U7Ci0JCQlJdGVyYXRvciBpdGVyID0gYW5ub01vZGVsLmdldEFubm90YXRpb25JdGVyYXRvcigpOwotCQkJd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSB7Ci0JCQkJQW5ub3RhdGlvbiBhbm5vID0gKEFubm90YXRpb24pIGl0ZXIubmV4dCgpOwotCQkJCVN0cmluZyBhbm5vVHlwZSA9IGFubm8uZ2V0VHlwZSgpOwotCQkJCWlmICgoYW5ub3RhdGlvbkFjY2Vzcy5pc1N1YnR5cGUoYW5ub1R5cGUsIEFOTk9UQVRJT05fRVJST1IpKSB8fCAoYW5ub3RhdGlvbkFjY2Vzcy5pc1N1YnR5cGUoYW5ub1R5cGUsIEFOTk9UQVRJT05fV0FSTklORykpKSB7Ci0JCQkJCWVycm9yRm91bmQgPSB0cnVlOwotCQkJCX0KLQkJCX0KLQkJCWFzc2VydFRydWUoInRlc3RSZWNvbmNpbGVyOiBEaWQgbm90IGZpbmQgZXhwZWN0ZWQgZXJyb3JzIGluOiAiICsgZG9jLmdldCgpLCBlcnJvckZvdW5kKTsKLQkJfQotCQljYXRjaCAoQmFkTG9jYXRpb25FeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQljYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvVGVzdFNvdXJjZVZhbGlkYXRpb25GcmFtZXdvcmsuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvVGVzdFNvdXJjZVZhbGlkYXRpb25GcmFtZXdvcmsuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWU3OGU2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL1Rlc3RTb3VyY2VWYWxpZGF0aW9uRnJhbWV3b3JrLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyODUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzOwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5GaWVsZDsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2Q7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3REZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuY29udGVudC5JQ29udGVudERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5jb250ZW50LklDb250ZW50VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLklQcmVmZXJlbmNlU3RvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5yZWNvbmNpbGVyLklSZWNvbmNpbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuc291cmNlLlNvdXJjZVZpZXdlckNvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmlkZS5JREU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5JVGV4dEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLlN0cnVjdHVyZWRUZXh0RWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuU1NFVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5wcm92aXNpb25hbC5wcmVmZXJlbmNlcy5Db21tb25FZGl0b3JQcmVmZXJlbmNlTmFtZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5yZWNvbmNpbGUuRG9jdW1lbnRSZWdpb25Qcm9jZXNzb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5yZWNvbmNpbGUudmFsaWRhdG9yLlZhbGlkYXRvck1ldGFEYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwucmVjb25jaWxlLnZhbGlkYXRvci5WYWxpZGF0b3JTdHJhdGVneTsKLQotLyoqCi0gKiBUZXN0cyByZWNvbmNpbGVyIGluIGFuIG9wZW4gZWRpdG9yLiBUaGUgbG9jYXRpb24gb2YgdGhpcyBjbGFzcyBpcyBhd2t3YXJkCi0gKiBpbiB0aGF0IGl0IHJlZmVycyB0byBjb250ZW50IHR5cGVzIGRlY2xhcmVkIGluIHBsdWdpbnMgdGhhdCBhcmVuJ3QgcmVxdWlyZWQKLSAqIHRvIGJlIHByZXNlbnQuCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0U291cmNlVmFsaWRhdGlvbkZyYW1ld29yayBleHRlbmRzIFRlc3RDYXNlIHsKLQkvKioKLQkgKiBUSElTIFNVQkNMQVNTIElTIEZPUiBURVNUSU5HIE9OTFkKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGNsYXNzIFRlc3RTdHJ1Y3R1cmVkVGV4dEVkaXRvciBleHRlbmRzIFN0cnVjdHVyZWRUZXh0RWRpdG9yIHsKLQkJcHVibGljIFNvdXJjZVZpZXdlckNvbmZpZ3VyYXRpb24gdGV4dFZpZXdlckNvbmZpZ3VyYXRpb24gPSBudWxsOwotCi0JCXByb3RlY3RlZCB2b2lkIHNldFNvdXJjZVZpZXdlckNvbmZpZ3VyYXRpb24oU291cmNlVmlld2VyQ29uZmlndXJhdGlvbiBjb25maWcpIHsKLQkJCXN1cGVyLnNldFNvdXJjZVZpZXdlckNvbmZpZ3VyYXRpb24oY29uZmlnKTsKLQkJCXRleHRWaWV3ZXJDb25maWd1cmF0aW9uID0gY29uZmlnOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBST0pFQ1RfTkFNRSA9ICJUZXN0U291cmNlVmFsaWRhdGlvbkZyYW1ld29yayI7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0VQQVJBVE9SID0gU3RyaW5nLnZhbHVlT2YoSVBhdGguU0VQQVJBVE9SKTsKLQotCXByaXZhdGUgYm9vbGVhbiBmUHJldmlvdXNSZWNvbmNpbGVyUHJlZjsKLQotCXB1YmxpYyBUZXN0U291cmNlVmFsaWRhdGlvbkZyYW1ld29yaygpIHsKLQkJc3VwZXIoIlRlc3RTb3VyY2VWYWxpZGF0aW9uRnJhbWV3b3JrIik7Ci0JfQotCi0JcHJpdmF0ZSBJRmlsZSBlbnN1cmVGaWxlSXNBY2Nlc3NpYmxlKFN0cmluZyBmaWxlUGF0aCwgYnl0ZVtdIGNvbnRlbnRzKSB7Ci0JCUlGaWxlIGJsYW5rRmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShuZXcgUGF0aChmaWxlUGF0aCkpOwotCQlpZiAoYmxhbmtGaWxlICE9IG51bGwgJiYgIWJsYW5rRmlsZS5pc0FjY2Vzc2libGUoKSkgewotCQkJdHJ5IHsKLQkJCQlieXRlW10gYnl0ZXMgPSBjb250ZW50czsKLQkJCQlpZiAoYnl0ZXMgPT0gbnVsbCkgewotCQkJCQlieXRlcyA9IG5ldyBieXRlWzBdOwotCQkJCX0KLQkJCQlibGFua0ZpbGUuY3JlYXRlKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShieXRlcyksIHRydWUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJfQotCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGJsYW5rRmlsZTsKLQl9Ci0KLQlwcml2YXRlIElDb250ZW50VHlwZVtdIGRldGVjdENvbnRlbnRUeXBlcyhTdHJpbmcgZmlsZU5hbWUpIHsKLQkJSUNvbnRlbnRUeXBlW10gdHlwZXMgPSBudWxsOwotCQlJRmlsZSBmaWxlID0gZW5zdXJlRmlsZUlzQWNjZXNzaWJsZShQUk9KRUNUX05BTUUgKyBTRVBBUkFUT1IgKyBmaWxlTmFtZSwgbnVsbCk7Ci0KLQkJdHlwZXMgPSBQbGF0Zm9ybS5nZXRDb250ZW50VHlwZU1hbmFnZXIoKS5maW5kQ29udGVudFR5cGVzRm9yKGZpbGUuZ2V0TmFtZSgpKTsKLQkJaWYgKHR5cGVzLmxlbmd0aCA9PSAwKSB7Ci0JCQlJQ29udGVudERlc2NyaXB0aW9uIGQgPSBudWxsOwotCQkJdHJ5IHsKLQkJCQkvLyBvcHRpbWl6ZWQgZGVzY3JpcHRpb24gbG9va3VwLCBtaWdodCBub3Qgc3VjY2VlZAotCQkJCWQgPSBmaWxlLmdldENvbnRlbnREZXNjcmlwdGlvbigpOwotCQkJCWlmIChkICE9IG51bGwpIHsKLQkJCQkJdHlwZXMgPSBuZXcgSUNvbnRlbnRUeXBlW117ZC5nZXRDb250ZW50VHlwZSgpfTsKLQkJCQl9Ci0JCQl9Ci0JCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQkJLyoKLQkJCQkgKiBzaG91bGQgbm90IGJlIHBvc3NpYmxlIGdpdmVuIHRoZSBhY2Nlc3NpYmxlIGFuZCBmaWxlIHR5cGUKLQkJCQkgKiBjaGVjayBhYm92ZQotCQkJCSAqLwotCQkJfQotCQl9Ci0JCWlmICh0eXBlcyA9PSBudWxsKSB7Ci0JCQl0eXBlcyA9IFBsYXRmb3JtLmdldENvbnRlbnRUeXBlTWFuYWdlcigpLmZpbmRDb250ZW50VHlwZXNGb3IoZmlsZS5nZXROYW1lKCkpOwotCQl9Ci0JCXJldHVybiB0eXBlczsKLQl9Ci0KLQlwcml2YXRlIFN0cmluZ1tdIGRldGVjdENvbnRlbnRUeXBlSURzKFN0cmluZyBmaWxlTmFtZSkgewotCQlJQ29udGVudFR5cGVbXSB0eXBlcyA9IGRldGVjdENvbnRlbnRUeXBlcyhmaWxlTmFtZSk7Ci0JCVN0cmluZ1tdIGlkcyA9IG5ldyBTdHJpbmdbdHlwZXMubGVuZ3RoXTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlcy5sZW5ndGg7IGkrKykgewotCQkJaWRzW2ldID0gdHlwZXNbaV0uZ2V0SWQoKTsKLQkJfQotCQlyZXR1cm4gaWRzOwotCX0KLQotCXByaXZhdGUgYm9vbGVhbiBpZGVudGljYWxDb250ZW50cyhPYmplY3QgbzFbXSwgT2JqZWN0IG8yW10pIHsKLQkJaWYgKG8xLmxlbmd0aCA9PSAwICYmIG8yLmxlbmd0aCA9PSAwKQotCQkJcmV0dXJuIHRydWU7Ci0KLQkJT2JqZWN0W10gYXJyYXkxID0gbmV3IE9iamVjdFtvMS5sZW5ndGhdOwotCQlPYmplY3RbXSBhcnJheTIgPSBuZXcgT2JqZWN0W28yLmxlbmd0aF07Ci0JCVN5c3RlbS5hcnJheWNvcHkobzEsIDAsIGFycmF5MSwgMCwgbzEubGVuZ3RoKTsKLQkJU3lzdGVtLmFycmF5Y29weShvMiwgMCwgYXJyYXkyLCAwLCBvMi5sZW5ndGgpOwotCQlBcnJheXMuc29ydChhcnJheTEpOwotCQlBcnJheXMuc29ydChhcnJheTIpOwotCQlyZXR1cm4gQXJyYXlzLmVxdWFscyhhcnJheTEsIGFycmF5Mik7Ci0JfQotCi0KLQlwcml2YXRlIHZvaWQgZW5zdXJlUHJvamVjdElzQWNjZXNzaWJsZShTdHJpbmcgcHJvak5hbWUpIHsKLQkJSVByb2plY3REZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5uZXdQcm9qZWN0RGVzY3JpcHRpb24ocHJvak5hbWUpOwotCi0JCUlQcm9qZWN0IHByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QocHJvak5hbWUpOwotCQl0cnkgewotCQkJaWYgKCFwcm9qZWN0LmV4aXN0cygpKQotCQkJCXByb2plY3QuY3JlYXRlKGRlc2NyaXB0aW9uLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCWlmICghcHJvamVjdC5pc0FjY2Vzc2libGUoKSkKLQkJCQlwcm9qZWN0Lm9wZW4obmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCX0KLQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCX0KLQotCXByaXZhdGUgTGlzdCBnZXRTb3VyY2VWYWxpZGF0b3JJRHMoU3RyaW5nIGZpbGVOYW1lKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJTGlzdCB2YWxpZGF0b3JJZHMgPSBuZXcgQXJyYXlMaXN0KDEpOwotCQlJV29ya2JlbmNoV2luZG93IHdvcmtiZW5jaFdpbmRvdyA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCk7Ci0JCUlXb3JrYmVuY2hQYWdlIHBhZ2UgPSB3b3JrYmVuY2hXaW5kb3cuZ2V0QWN0aXZlUGFnZSgpOwotCi0JCUlGaWxlIGZpbGUgPSBlbnN1cmVGaWxlSXNBY2Nlc3NpYmxlKFBST0pFQ1RfTkFNRSArIFNFUEFSQVRPUiArIGZpbGVOYW1lLCBudWxsKTsKLQkJSUVkaXRvclBhcnQgZWRpdG9yID0gSURFLm9wZW5FZGl0b3IocGFnZSwgZmlsZSwgVGVzdFN0cnVjdHVyZWRUZXh0RWRpdG9yLmNsYXNzLmdldE5hbWUoKSwgdHJ1ZSk7Ci0KLQkJSVRleHRFZGl0b3IgdGV4dEVkaXRvciA9IChJVGV4dEVkaXRvcikgZWRpdG9yLmdldEFkYXB0ZXIoSVRleHRFZGl0b3IuY2xhc3MpOwotCQlUZXN0U3RydWN0dXJlZFRleHRFZGl0b3IgdGVzdFRleHRFZGl0b3IgPSAoVGVzdFN0cnVjdHVyZWRUZXh0RWRpdG9yKSB0ZXh0RWRpdG9yOwotCQlJUmVjb25jaWxlciByZWNvbmNpbGVyID0gdGVzdFRleHRFZGl0b3IudGV4dFZpZXdlckNvbmZpZ3VyYXRpb24uZ2V0UmVjb25jaWxlcih0ZXN0VGV4dEVkaXRvci5nZXRUZXh0Vmlld2VyKCkpOwotCi0JCWFzc2VydE5vdE51bGwocmVjb25jaWxlcik7Ci0JCWFzc2VydFRydWUoInVuZXhwZWN0ZWQgSVJlY29uY2lsZXIgaW1wbGVtZW50YXRpb246ICIgKyByZWNvbmNpbGVyLmdldENsYXNzKCksIHJlY29uY2lsZXIgaW5zdGFuY2VvZiBEb2N1bWVudFJlZ2lvblByb2Nlc3Nvcik7Ci0KLQkJQ2xhc3MgcmVjb25jaWxlckNsYXNzID0gcmVjb25jaWxlci5nZXRDbGFzcygpOwotCQlNZXRob2QgbWV0aG9kID0gbnVsbDsKLQkJd2hpbGUgKHJlY29uY2lsZXJDbGFzcyAhPSBPYmplY3QuY2xhc3MgJiYgbWV0aG9kID09IG51bGwpIHsKLQkJCU1ldGhvZFtdIG1ldGhvZHMgPSByZWNvbmNpbGVyQ2xhc3MuZ2V0RGVjbGFyZWRNZXRob2RzKCk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IG1ldGhvZHMubGVuZ3RoOyBpKyspIHsKLQkJCQlpZiAobWV0aG9kc1tpXS5nZXROYW1lKCkuZXF1YWxzKCJnZXRWYWxpZGF0b3JTdHJhdGVneSIpKSB7Ci0JCQkJCW1ldGhvZCA9IG1ldGhvZHNbaV07Ci0JCQkJfQotCQkJfQotCQkJcmVjb25jaWxlckNsYXNzID0gcmVjb25jaWxlckNsYXNzLmdldFN1cGVyY2xhc3MoKTsKLQkJfQotCi0JCWFzc2VydE5vdE51bGwoIm5vIGdldFZhbGlkYXRvclN0cmF0ZWd5IG1ldGhvZCBmb3VuZCBvbiAiICsgcmVjb25jaWxlci5nZXRDbGFzcygpLCBtZXRob2QpOwotCQltZXRob2Quc2V0QWNjZXNzaWJsZSh0cnVlKTsKLQkJVmFsaWRhdG9yU3RyYXRlZ3kgc3RyYXRlZ3kgPSAoVmFsaWRhdG9yU3RyYXRlZ3kpIG1ldGhvZC5pbnZva2UocmVjb25jaWxlciwgbmV3IE9iamVjdFswXSk7Ci0JCWFzc2VydE5vdE51bGwoc3RyYXRlZ3kpOwotCQlGaWVsZCBmTWV0YURhdGEgPSBzdHJhdGVneS5nZXRDbGFzcygpLmdldERlY2xhcmVkRmllbGQoImZNZXRhRGF0YSIpOwotCQlhc3NlcnROb3ROdWxsKCJ2YWxpZGF0b3IgbWV0YWRhdGEgZmllbGQgXCJmTWV0YURhdGFcIiBub3QgZm91bmQgb24gc3RyYXRlZ3kgIiArIHN0cmF0ZWd5LmdldENsYXNzKCksIGZNZXRhRGF0YSk7Ci0JCWZNZXRhRGF0YS5zZXRBY2Nlc3NpYmxlKHRydWUpOwotCQlMaXN0IG1ldGFkYXRhID0gKExpc3QpIGZNZXRhRGF0YS5nZXQoc3RyYXRlZ3kpOwotCQlhc3NlcnROb3ROdWxsKG1ldGFkYXRhKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBtZXRhZGF0YS5zaXplKCk7IGkrKykgewotCQkJdmFsaWRhdG9ySWRzLmFkZCgoKFZhbGlkYXRvck1ldGFEYXRhKSBtZXRhZGF0YS5nZXQoaSkpLmdldFZhbGlkYXRvcklkKCkpOwotCQl9Ci0KLQkJcGFnZS5jbG9zZUVkaXRvcihlZGl0b3IsIGZhbHNlKTsKLQotCQlyZXR1cm4gdmFsaWRhdG9ySWRzOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWVuc3VyZVByb2plY3RJc0FjY2Vzc2libGUoUFJPSkVDVF9OQU1FKTsKLQotCQkvLyB0dXJuIG9uIHJlY29uY2lsaW5nCi0JCUlQcmVmZXJlbmNlU3RvcmUgc3RvcmUgPSBTU0VVSVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCk7Ci0JCWZQcmV2aW91c1JlY29uY2lsZXJQcmVmID0gc3RvcmUuZ2V0Qm9vbGVhbihDb21tb25FZGl0b3JQcmVmZXJlbmNlTmFtZXMuRVZBTFVBVEVfVEVNUE9SQVJZX1BST0JMRU1TKTsKLQkJaWYgKCFmUHJldmlvdXNSZWNvbmNpbGVyUHJlZikgewotCQkJc3RvcmUuc2V0VmFsdWUoQ29tbW9uRWRpdG9yUHJlZmVyZW5jZU5hbWVzLkVWQUxVQVRFX1RFTVBPUkFSWV9QUk9CTEVNUywgdHJ1ZSk7Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyByZXN0b3JlIHJlY29uY2lsaW5nIHByZWZlcmVuY2UKLQkJSVByZWZlcmVuY2VTdG9yZSBzdG9yZSA9IFNTRVVJUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKTsKLQkJc3RvcmUuc2V0VmFsdWUoQ29tbW9uRWRpdG9yUHJlZmVyZW5jZU5hbWVzLkVWQUxVQVRFX1RFTVBPUkFSWV9QUk9CTEVNUywgZlByZXZpb3VzUmVjb25jaWxlclByZWYpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VWYWxpZGF0aW9uRW5hYmxlbWVudFdpdGhJbmhlcml0ZWRWYWxpZGF0b3JzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCU9iamVjdFtdIHhtbFZhbGlkYXRvcklEcyA9IGdldFNvdXJjZVZhbGlkYXRvcklEcygidGVzdFZhbGlkYXRvckNvbmZpZ3VyYXRpb25zLnhtbCIpLnRvQXJyYXkoKTsKLQkJYXNzZXJ0VHJ1ZSgiTm8gWE1MIHNvdXJjZSB2YWxpZGF0b3JzIGZvdW5kIiwgeG1sVmFsaWRhdG9ySURzLmxlbmd0aCA+IDApOwotCQlPYmplY3RbXSB4bWw5OVZhbGlkYXRvcklEcyA9IGdldFNvdXJjZVZhbGlkYXRvcklEcygidGVzdFZhbGlkYXRvckNvbmZpZ3VyYXRpb25zLnhtbDk5IikudG9BcnJheSgpOwotCQlhc3NlcnRUcnVlKCJObyBYTUw5OSBzb3VyY2UgdmFsaWRhdG9ycyBmb3VuZCIsIHhtbDk5VmFsaWRhdG9ySURzLmxlbmd0aCA+IDApOwotCi0JCUFycmF5cy5zb3J0KHhtbFZhbGlkYXRvcklEcyk7Ci0JCUFycmF5cy5zb3J0KHhtbDk5VmFsaWRhdG9ySURzKTsKLQotCQlhc3NlcnRFcXVhbHMoInZhbGlkYXRvciBsaXN0cyBzaG91bGQgYmUgdGhlIHNhbWUgbGVuZ3RoIiwgeG1sVmFsaWRhdG9ySURzLmxlbmd0aCwgeG1sOTlWYWxpZGF0b3JJRHMubGVuZ3RoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCB4bWxWYWxpZGF0b3JJRHMubGVuZ3RoOyBpKyspIHsKLQkJCWFzc2VydEVxdWFscygidmFsaWRhdG9yIElEcyBzaG91bGQgYmUgdGhlIHNhbWUgWyIgKyBpICsgIl0iLCB4bWxWYWxpZGF0b3JJRHNbaV0sIHhtbDk5VmFsaWRhdG9ySURzW2ldKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VWYWxpZGF0aW9uRW5hYmxlbWVudFdpdGhVbmlxdWVWYWxpZGF0b3JzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVN0cmluZ1tdIHhtbENvbnRlbnRUeXBlcyA9IGRldGVjdENvbnRlbnRUeXBlSURzKCJ0ZXN0VmFsaWRhdG9yQ29uZmlndXJhdGlvbnMueG1sIik7Ci0JCVN0cmluZ1tdIHhzZENvbnRlbnRUeXBlcyA9IGRldGVjdENvbnRlbnRUeXBlSURzKCJ0ZXN0VmFsaWRhdG9yQ29uZmlndXJhdGlvbnMueHNkIik7Ci0KLQkJLyoKLQkJICogSWYgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBkb2VzIG5vdCBpbmNsdWRlIGEgZGlzdGluY3QgWFNECi0JCSAqIGNvbnRlbnQgdHlwZSwgc2tpcCB0aGUgcmVzdAotCQkgKi8KLQkJaWYgKCFpZGVudGljYWxDb250ZW50cyh4bWxDb250ZW50VHlwZXMsIHhzZENvbnRlbnRUeXBlcykpIHsKLQkJCUxpc3QgeG1sVmFsaWRhdG9ySURzID0gZ2V0U291cmNlVmFsaWRhdG9ySURzKCJ0ZXN0VmFsaWRhdG9yQ29uZmlndXJhdGlvbnMueG1sIik7Ci0JCQlhc3NlcnRUcnVlKCJObyBYTUwgc291cmNlIHZhbGlkYXRvcnMgZm91bmQiLCAheG1sVmFsaWRhdG9ySURzLmlzRW1wdHkoKSk7Ci0JCQlMaXN0IHhzZFZhbGlkYXRvcklEcyA9IGdldFNvdXJjZVZhbGlkYXRvcklEcygidGVzdFZhbGlkYXRvckNvbmZpZ3VyYXRpb25zLnhzZCIpOwotCQkJYXNzZXJ0VHJ1ZSgiTm8gWFNEIHNvdXJjZSB2YWxpZGF0b3JzIGZvdW5kIiwgIXhzZFZhbGlkYXRvcklEcy5pc0VtcHR5KCkpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCB4bWxWYWxpZGF0b3JJRHMuc2l6ZSgpOyBpKyspIHsKLQkJCQlhc3NlcnRUcnVlKCJYTUwgVmFsaWRhdG9yIGZvdW5kIG9uIFhTRCBpbnB1dCIsICF4c2RWYWxpZGF0b3JJRHMuY29udGFpbnMoeG1sVmFsaWRhdG9ySURzLmdldChpKSkpOwotCQkJfQotCQl9Ci0JCWVsc2UgewotCQkJU3RyaW5nIG1lc3NhZ2UgPSAiTm8gZGlzdGluY3QgWFNEIGNvbnRlbnQgdHlwZSBmb3VuZCB3aGlsZSBydW5uaW5nICIgKyBnZXRDbGFzcygpLmdldE5hbWUoKTsKLQkJCVN5c3RlbS5lcnIucHJpbnRsbihtZXNzYWdlKTsKLQkJCUxvZ2dlci5sb2coTG9nZ2VyLldBUk5JTkcsIG1lc3NhZ2UpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZVZhbGlkYXRpb25FbmFibGVtZW50V2l0aFVucmVsYXRlZENvbnRlbnRUeXBlcygpIHRocm93cyBFeGNlcHRpb24gewotCQlTdHJpbmdbXSBkdGRDb250ZW50VHlwZXMgPSBkZXRlY3RDb250ZW50VHlwZUlEcygidGVzdFZhbGlkYXRvckNvbmZpZ3VyYXRpb25zLmR0ZCIpOwotCQlTdHJpbmdbXSBqc3BDb250ZW50VHlwZXMgPSBkZXRlY3RDb250ZW50VHlwZUlEcygidGVzdFZhbGlkYXRvckNvbmZpZ3VyYXRpb25zLmpzcCIpOwotCQlpZiAoZHRkQ29udGVudFR5cGVzLmxlbmd0aCA9PSAwKSB7Ci0JCQlTdHJpbmcgbWVzc2FnZSA9ICJObyBEVEQgY29udGVudCB0eXBlIGZvdW5kIHdoaWxlIHJ1bm5pbmcgIiArIGdldENsYXNzKCkuZ2V0TmFtZSgpOwotCQkJU3lzdGVtLmVyci5wcmludGxuKG1lc3NhZ2UpOwotCQkJTG9nZ2VyLmxvZyhMb2dnZXIuV0FSTklORywgbWVzc2FnZSk7Ci0JCX0KLQkJaWYgKGpzcENvbnRlbnRUeXBlcy5sZW5ndGggPT0gMCkgewotCQkJU3RyaW5nIG1lc3NhZ2UgPSAiTm8gSlNQIGNvbnRlbnQgdHlwZSBmb3VuZCB3aGlsZSBydW5uaW5nICIgKyBnZXRDbGFzcygpLmdldE5hbWUoKTsKLQkJCVN5c3RlbS5lcnIucHJpbnRsbihtZXNzYWdlKTsKLQkJCUxvZ2dlci5sb2coTG9nZ2VyLldBUk5JTkcsIG1lc3NhZ2UpOwotCQl9Ci0KLQotCQlpZiAoZHRkQ29udGVudFR5cGVzLmxlbmd0aCA+IDAgJiYganNwQ29udGVudFR5cGVzLmxlbmd0aCA+IDAgJiYgIWlkZW50aWNhbENvbnRlbnRzKGR0ZENvbnRlbnRUeXBlcywganNwQ29udGVudFR5cGVzKSkgewotCQkJTGlzdCBkdGRWYWxpZGF0b3JJRHMgPSBnZXRTb3VyY2VWYWxpZGF0b3JJRHMoInRlc3RWYWxpZGF0b3JDb25maWd1cmF0aW9ucy5kdGQiKTsKLQkJCWFzc2VydFRydWUoIk5vIERURCBzb3VyY2UgdmFsaWRhdG9ycyBmb3VuZCIsICFkdGRWYWxpZGF0b3JJRHMuaXNFbXB0eSgpKTsKLQkJCUxpc3QganNwVmFsaWRhdG9ySURzID0gZ2V0U291cmNlVmFsaWRhdG9ySURzKCJ0ZXN0VmFsaWRhdG9yQ29uZmlndXJhdGlvbnMuanNwIik7Ci0JCQlhc3NlcnRUcnVlKCJObyBKU1Agc291cmNlIHZhbGlkYXRvcnMgZm91bmQiLCAhanNwVmFsaWRhdG9ySURzLmlzRW1wdHkoKSk7Ci0JCQlpbnQgZHRkVmFsaWRhdG9yQ291bnQgPSBkdGRWYWxpZGF0b3JJRHMuc2l6ZSgpOwotCQkJZHRkVmFsaWRhdG9ySURzLnJlbW92ZUFsbChqc3BWYWxpZGF0b3JJRHMpOwotCQkJYXNzZXJ0RXF1YWxzKCJ2YWxpZGF0b3JzIGZvdW5kIHJ1bm5pbmcgb24gYm90aCBDU1MgYW5kIERURCIsIGR0ZFZhbGlkYXRvckNvdW50LCBkdGRWYWxpZGF0b3JJRHMuc2l6ZSgpKTsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvVmVyaWZ5RWRpdG9yUGx1Z2luLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL1ZlcmlmeUVkaXRvclBsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMTVlNDExLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvVmVyaWZ5RWRpdG9yUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC5YTUxVSVBsdWdpbjsKLQotcHVibGljIGNsYXNzIFZlcmlmeUVkaXRvclBsdWdpbiBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXB1YmxpYyB2b2lkIHRlc3RQbHVnaW5FeGlzdHMoKSB7Ci0JCS8vIFRPRE86IHNlZSBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9ODE1MjcKLQkJYXNzZXJ0VHJ1ZSh0cnVlKTsKLQkJUGx1Z2luIHBsdWdpbiA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlwbHVnaW4gPSBYTUxVSVBsdWdpbi5nZXRJbnN0YW5jZSgpOwotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJcGx1Z2luID0gbnVsbDsKLQkJfQotCQlhc3NlcnROb3ROdWxsKCJ4bWwgZWRpdG9yIHBsdWdpbiBjb3VsZCBub3QgYmUgaW5zdGFudGlhdGVkIiwgcGx1Z2luKTsKLQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvWE1MRGlmZi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9YTUxEaWZmLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhNGU0ODUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9YTUxEaWZmLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotCi1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyOwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlckZhY3Rvcnk7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTmFtZWROb2RlTWFwOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci1pbXBvcnQgb3JnLnhtbC5zYXguU0FYRXhjZXB0aW9uOwotCi0vKioKLSAqIEBhdXRob3IgS2lodXAgQm9vCi0gKi8KLXB1YmxpYyBjbGFzcyBYTUxEaWZmCi17Ci0gIHByaXZhdGUgTGlzdCBlcnJvck1lc3NhZ2VzID0gbmV3IEFycmF5TGlzdCgpOwotICBwcml2YXRlIGJvb2xlYW4gRElGRl9FTEVNRU5UX05PREVfT05MWSA9IGZhbHNlOwotICBwcml2YXRlIFN0cmluZyBmaWxlVHlwZSA9ICIiOwotICBwdWJsaWMgYm9vbGVhbiBkaWZmKFN0cmluZyBmaWxlMSwgU3RyaW5nIGZpbGUyLCBTdHJpbmcgZmlsZVR5cGUpIHRocm93cyBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uLCBTQVhFeGNlcHRpb24sIElPRXhjZXB0aW9uCi0gIHsKLSAgICByZXR1cm4gZGlmZihmaWxlMSxmaWxlMiwgZmlsZVR5cGUsIGZhbHNlKTsKLSAgfQotICAKLSAgcHVibGljIGJvb2xlYW4gZGlmZihTdHJpbmcgZmlsZTEsIFN0cmluZyBmaWxlMiwgU3RyaW5nIGZpbGVUeXBlLCBib29sZWFuIGVsZW1lbnRPbmx5KSB0aHJvd3MgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiwgU0FYRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbgotICB7Ci0gICAgRG9jdW1lbnQgZG9jMSA9IGdldERvY3VtZW50KGZpbGUxKTsKLSAgICBEb2N1bWVudCBkb2MyID0gZ2V0RG9jdW1lbnQoZmlsZTIpOwotICAJRElGRl9FTEVNRU5UX05PREVfT05MWSA9IGVsZW1lbnRPbmx5OwotICAgIHJldHVybiBkaWZmKGRvYzEsZG9jMiwgZmlsZVR5cGUpOwotICB9Ci0gIAotICBwdWJsaWMgYm9vbGVhbiBkaWZmKERvY3VtZW50IGRvYzEsIERvY3VtZW50IGRvYzIsIFN0cmluZyBmaWxlVHlwZSkKLSAgewotICAgIEVsZW1lbnQgcm9vdDEgPSBkb2MxLmdldERvY3VtZW50RWxlbWVudCgpOwotICAgIEVsZW1lbnQgcm9vdDIgPSBkb2MyLmdldERvY3VtZW50RWxlbWVudCgpOwotCXRoaXMuZmlsZVR5cGUgPSBmaWxlVHlwZTsKLSAgICByZXR1cm4gY29tcGFyZU5vZGVzKHJvb3QxLHJvb3QyKTsKLSAgfQotICAKLSAgcHJpdmF0ZSBEb2N1bWVudCBnZXREb2N1bWVudChTdHJpbmcgdXJpKSB0aHJvd3MgUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiwgU0FYRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbgotICB7Ci0gICAgRG9jdW1lbnRCdWlsZGVyIGJ1aWxkZXIgPSBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCkubmV3RG9jdW1lbnRCdWlsZGVyKCk7Ci0gICAgRG9jdW1lbnQgZG9jID0gYnVpbGRlci5wYXJzZSh1cmkpOwotICAgIHJldHVybiBkb2M7Ci0gIH0KLSAgCi0gIHByaXZhdGUgYm9vbGVhbiBjb21wYXJlTm9kZXMoTm9kZSBub2RlMSwgTm9kZSBub2RlMikKLSAgewotICAJaWYgKERJRkZfRUxFTUVOVF9OT0RFX09OTFkpCi0gIAl7Ci0gICAgICAvLyBDb21wYXJlIG9ubHkgZWxlbWVudCBub2RlcyBpbiB0aGUgY2hpbGRyZW4uCi0gICAgICBmaWx0ZXJOb25FbGVtZW50Tm9kZXMobm9kZTEpOwotICAgICAgZmlsdGVyTm9uRWxlbWVudE5vZGVzKG5vZGUyKTsKLSAgCX0KLSAgCQotICAgIGlmIChub2RlMS5nZXROb2RlVHlwZSgpICE9IG5vZGUyLmdldE5vZGVUeXBlKCkKLSAgICAgICAgfHwgbm9kZTEuZ2V0Tm9kZU5hbWUoKSAhPSBub2RlMi5nZXROb2RlTmFtZSgpKQotICAgIHsKLSAgICAJZXJyb3JNZXNzYWdlcy5hZGQodGhpcy5maWxlVHlwZSArICI6IFR5cGUgb3IgbmFtZSBkaWZmZXJlbnQ6ICIgKyBub2RlMS5nZXROb2RlTmFtZSgpICsgIiAiICsgbm9kZTIuZ2V0Tm9kZU5hbWUoKSArICIuIik7Ci0gICAgICBwcmludGxuKCJOb2RlIHR5cGUgb3Igbm9kZSBuYW1lIGlzIGRpZmZlcmVudDoiKTsKLSAgICAgIHByaW50bG4oIk5vZGUgMTogIiArIG5vZGUxLmdldE5vZGVOYW1lKCkpOwotICAgICAgcHJpbnRsbigiTm9kZSAyOiAiICsgbm9kZTIuZ2V0Tm9kZU5hbWUoKSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIGlmICghY29tcGFyZUF0dHJpYnV0ZXMobm9kZTEsbm9kZTIpKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIE5vZGVMaXN0IG5vZGVMaXN0MSA9IG5vZGUxLmdldENoaWxkTm9kZXMoKTsKLSAgICBOb2RlTGlzdCBub2RlTGlzdDIgPSBub2RlMi5nZXRDaGlsZE5vZGVzKCk7Ci0gICAgaWYgKG5vZGVMaXN0MS5nZXRMZW5ndGgoKSAhPSBub2RlTGlzdDIuZ2V0TGVuZ3RoKCkpCi0gICAgewotICAgIAllcnJvck1lc3NhZ2VzLmFkZCh0aGlzLmZpbGVUeXBlICsgIjogTnVtYmVyIG9mIGNoaWxkcmVuIGRpZmZlcmVudDogIiArIG5vZGUxLmdldE5vZGVOYW1lKCkgKyAiLiIpOwotICAgICAgcHJpbnRsbigiVGhlIG51bWJlciBvZiBjaGlsZHJlbiBkaWZmZXJlbnQ6Iik7Ci0gICAgICAvL3ByaW50bG4oIk5vZGUgMTogIiArIG5vZGVMaXN0MS5nZXRMZW5ndGgoKSk7Ci0gICAgICAvL3ByaW50bG4oIk5vZGUgMjogIiArIG5vZGVMaXN0Mi5nZXRMZW5ndGgoKSk7Ci0gICAgICBwcmludGxuKCJOb2RlIDE6ICIgKyBub2RlMS5nZXROb2RlTmFtZSgpKTsKLSAgICAgIHByaW50bG4oIk5vZGUgMjogIiArIG5vZGUyLmdldE5vZGVOYW1lKCkpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBib29sZWFuIHJlc3VsdCA9IHRydWU7Ci0gICAgaW50IGxlbmd0aCA9IG5vZGVMaXN0MS5nZXRMZW5ndGgoKTsKLSAgICBmb3IgKGludCBpPTA7IGk8bGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgcmVzdWx0ID0gY29tcGFyZU5vZGVzKG5vZGVMaXN0MS5pdGVtKGkpLG5vZGVMaXN0Mi5pdGVtKGkpKTsKLSAgICAgIGlmICghcmVzdWx0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAJcmV0dXJuIHRydWU7Ci0gIH0KLSAgCi0gIHByaXZhdGUgdm9pZCBmaWx0ZXJOb25FbGVtZW50Tm9kZXMoTm9kZSBub2RlKQotICB7Ci0gICAgTm9kZSBmaXJzdENoaWxkID0gbm9kZS5nZXRGaXJzdENoaWxkKCk7Ci0gICAgd2hpbGUgKGZpcnN0Q2hpbGQuZ2V0Tm9kZVR5cGUoKSAhPSBOb2RlLkVMRU1FTlRfTk9ERSkKLSAgICB7Ci0gICAgICBub2RlLnJlbW92ZUNoaWxkKGZpcnN0Q2hpbGQpOwotICAgICAgZmlyc3RDaGlsZCA9IG5vZGUuZ2V0Rmlyc3RDaGlsZCgpOwotICAgIH0KLSAgICAKLSAgICBOb2RlIHNpYmxpbmcgPSBmaXJzdENoaWxkLmdldE5leHRTaWJsaW5nKCk7Ci0gICAgTm9kZSBkZWxldGVNZSA9IG51bGw7Ci0gICAgd2hpbGUgKHNpYmxpbmcgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpZiAoc2libGluZy5nZXROb2RlVHlwZSgpICE9IE5vZGUuRUxFTUVOVF9OT0RFKQotICAgICAgewotICAgICAgCWRlbGV0ZU1lID0gc2libGluZzsKLSAgICAgIAlzaWJsaW5nID0gc2libGluZy5nZXROZXh0U2libGluZygpOwotICAgICAgICBub2RlLnJlbW92ZUNoaWxkKGRlbGV0ZU1lKTsKLSAgICAgIH0KLSAgICAgIAotICAgIH0KLSAgfQotICAKLSAgcHJpdmF0ZSBib29sZWFuIGNvbXBhcmVBdHRyaWJ1dGVzKE5vZGUgbm9kZTEsIE5vZGUgbm9kZTIpCi0gIHsKLSAgICBOYW1lZE5vZGVNYXAgbm9kZU1hcDEgPSBub2RlMS5nZXRBdHRyaWJ1dGVzKCk7Ci0gICAgTmFtZWROb2RlTWFwIG5vZGVNYXAyID0gbm9kZTIuZ2V0QXR0cmlidXRlcygpOwotICAgIAotICAgIGlmIChub2RlTWFwMSA9PSBudWxsIHx8IG5vZGVNYXAyID09IG51bGwpCi0gICAgewotICAgICAgaWYgKG5vZGVNYXAxID09IG51bGwgJiYgbm9kZU1hcDIgPT0gbnVsbCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBlbHNlCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG5vZGVNYXAxLmdldExlbmd0aCgpICE9IG5vZGVNYXAyLmdldExlbmd0aCgpKQotICAgIHsKLSAgICAJZXJyb3JNZXNzYWdlcy5hZGQodGhpcy5maWxlVHlwZSArICI6IE51bWJlciBvZiBhdHRyaWJ1dGVzIGRpZmZlcmVudDogIiArIG5vZGUxLmdldE5vZGVOYW1lKCkgKyAiLiIpOwotICAgIAlwcmludGxuKCJUaGUgbnVtYmVyIG9mIGF0dHJpYnV0ZXMgaXMgZGlmZmVyZW50OiIpOwotICAgICAgICBwcmludGxuKCJOb2RlIDE6ICIgKyBub2RlMS5nZXROb2RlTmFtZSgpKTsKLSAgICAgICAgcHJpbnRsbigiTm9kZSAyOiAiICsgbm9kZTIuZ2V0Tm9kZU5hbWUoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgTm9kZSBhdHRyTm9kZTEgPSBudWxsOwotICAgIE5vZGUgYXR0ck5vZGUyID0gbnVsbDsKLSAgICBpbnQgbGVuZ3RoID0gbm9kZU1hcDEuZ2V0TGVuZ3RoKCk7Ci0gICAgZm9yIChpbnQgaT0wOyBpPGxlbmd0aDsgaSsrKQotICAgIHsKLSAgICAgIGF0dHJOb2RlMSA9IG5vZGVNYXAxLml0ZW0oaSk7Ci0gICAgICBhdHRyTm9kZTIgPSBub2RlTWFwMi5nZXROYW1lZEl0ZW0oYXR0ck5vZGUxLmdldE5vZGVOYW1lKCkpOwotICAgICAgaWYgKGF0dHJOb2RlMiA9PSBudWxsKQotICAgICAgewotICAgICAgCWVycm9yTWVzc2FnZXMuYWRkKHRoaXMuZmlsZVR5cGUgKyAiOiBBdHRyaWJ1dGUgbm90IGZvdW5kOiAiICsgbm9kZTEuZ2V0Tm9kZU5hbWUoKSArICIuIik7Ci0gICAgCXByaW50bG4oIlRoZSBhdHRyaWJ1dGUgaXMgbm90IGZvdW5kIGluIE5vZGUgMjogIiArIGF0dHJOb2RlMS5nZXROb2RlTmFtZSgpKTsKLSAgICAgICAgcHJpbnRsbigiTm9kZSAxOiAiICsgbm9kZTEuZ2V0Tm9kZU5hbWUoKSk7Ci0gICAgICAgIHByaW50bG4oIk5vZGUgMjogIiArIG5vZGUyLmdldE5vZGVOYW1lKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmICghYXR0ck5vZGUxLmdldE5vZGVWYWx1ZSgpLmVxdWFscyhhdHRyTm9kZTIuZ2V0Tm9kZVZhbHVlKCkpKQotICAgICAgewotICAgICAgCWVycm9yTWVzc2FnZXMuYWRkKHRoaXMuZmlsZVR5cGUgKyAiOiBBdHRyaWJ1dGUgdmFsdWVzIGRpZmZlcmVudDogIiArIGF0dHJOb2RlMS5nZXROb2RlVmFsdWUoKSArICIgIiArIGF0dHJOb2RlMi5nZXROb2RlVmFsdWUoKSArICIuIik7Ci0gICAgCXByaW50bG4oIlRoZSBhdHRyaWJ1dGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQ6Iik7Ci0gICAgICAgIHByaW50bG4oIk5vZGUgMTogIiArIG5vZGUxLmdldE5vZGVOYW1lKCkgKyAiLCIgKyBhdHRyTm9kZTEuZ2V0Tm9kZVZhbHVlKCkpOwotICAgICAgICBwcmludGxuKCJOb2RlIDI6ICIgKyBub2RlMi5nZXROb2RlTmFtZSgpICsgIiwiICsgYXR0ck5vZGUyLmdldE5vZGVWYWx1ZSgpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAgICAgIAotICAgICAgfQotICAgIH0KLSAgCXJldHVybiB0cnVlOwotICB9Ci0gIAotICBwcml2YXRlIHZvaWQgcHJpbnRsbihTdHJpbmcgcykKLSAgewotICAgIC8vb3V0LnByaW50bG4ocyk7Ci0gIH0KLQotCS8qKgotCSAqIEByZXR1cm4gUmV0dXJucyB0aGUgZXJyb3JNZXNzYWdlcy4KLQkgKi8KLQlwdWJsaWMgTGlzdCBnZXRFcnJvck1lc3NhZ2VzKCkKLQl7Ci0JCXJldHVybiBlcnJvck1lc3NhZ2VzOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvWE1MVUlQcmVmZXJlbmNlc1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvWE1MVUlQcmVmZXJlbmNlc1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTBlYWU0ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL1hNTFVJUHJlZmVyZW5jZXNUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5JUHJlZmVyZW5jZVN0b3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwuWE1MVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5YTUxVSVByZWZlcmVuY2VOYW1lczsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVFeGNlcHRpb247Ci0KLS8qKgotICogVGhlIHB1cnBvc2Ugb2YgdGhpcyB0ZXN0IGlzIHRvIHZlcmlmeSB0aGUgdmFsaWRpdHkgb2YgdGhlIFhNTCBTb3VyY2UgZWRpdG9yCi0gKiBwcmVmZXJlbmNlcy4gVGVzdHMgaW5jbHVkZSBzZXR0aW5nL2dldHRpbmcgcHJlZmVyZW5jZXMuCi0gKiAKLSAqIE5PVEU6IFRoaXMgdGVzdCBzaG91bGQgYmUgcHJlZm9ybWVkIG9uIGEgY2xlYW4gd29ya3NwYWNlLiBJZiBwZXJmb3JtZWQgb24KLSAqIGFuIGV4aXN0aW5nIHdvcmtzcGFjZSwgdGhpcyB0ZXN0IHdpbGwgbWFuaXB1bGF0ZSBwcmVmZXJlbmNlcyBpbiB0aGUKLSAqIHdvcmtzcGFjZSwgdGhvdWdoIGF0dGVtcHRzIHdpbGwgYmUgbWFkZSB0byByZXN0b3JlIG9yaWdpbmFsIHZhbHVlcyBhZnRlcgotICogdGVzdGluZy4KLSAqLwotcHVibGljIGNsYXNzIFhNTFVJUHJlZmVyZW5jZXNUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCS8qKgotCSAqIFRlc3RzIGV4aXN0YW5jZSBvZiBwcmVmZXJlbmNlIHZhbHVlcyB3aGVuIGdldHRpbmcgcHJlZmVyZW5jZSB2YWx1ZXMKLQkgKiB0aHJvdWdoIFBsYXRmb3JtLmdldFByZWZlcmVuY2VzU2VydmljZSgpCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEJ1bmRsZUdldFByZWZlcmVuY2VzKCkgewotCQlmaW5hbCBTdHJpbmcgYnVuZGxlTmFtZSA9ICJvcmcuZWNsaXBzZS53c3QueG1sLnVpIjsKLQotCQkvLyBuZWVkIHRvIHN0YXJ0IHVwIGJ1bmRsZSBmb3IgZGVmYXVsdCB2YWx1ZXMgdG8gYmUgbG9hZGVkCi0JCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoYnVuZGxlTmFtZSk7Ci0JCXRyeSB7Ci0JCQlpZiAoYnVuZGxlICE9IG51bGwpCi0JCQkJYnVuZGxlLnN0YXJ0KCk7Ci0JCQllbHNlCi0JCQkJZmFpbCgiR2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIGJlY2F1c2UgY291bGQgbm90IGZpbmQgYnVuZGxlOiAiICsgYnVuZGxlTmFtZSk7Ci0JCX0gY2F0Y2ggKEJ1bmRsZUV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCJHZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgYmVjYXVzZSBvZiBleGNlcHRpb24gc3RhcnRpbmcgYnVuZGxlOiAiICsgYnVuZGxlTmFtZSArICIgZXhjZXB0aW9uOiAiICsgZSk7Ci0JCX0KLQotCQlidW5kbGVHZXRQcmVmZXJlbmNlKGJ1bmRsZU5hbWUsIFhNTFVJUHJlZmVyZW5jZU5hbWVzLkFVVE9fUFJPUE9TRSk7Ci0JCWJ1bmRsZUdldFByZWZlcmVuY2UoYnVuZGxlTmFtZSwgWE1MVUlQcmVmZXJlbmNlTmFtZXMuQVVUT19QUk9QT1NFX0NPREUpOwotCQlidW5kbGVHZXRQcmVmZXJlbmNlKGJ1bmRsZU5hbWUsIFhNTFVJUHJlZmVyZW5jZU5hbWVzLlVTRV9JTkZFUlJFRF9HUkFNTUFSKTsKLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIGJ1bmRsZUdldFByZWZlcmVuY2UoU3RyaW5nIGJ1bmRsZU5hbWUsIFN0cmluZyBwcmVmS2V5KSB7Ci0JCVN0cmluZyBkZWZhdWx0VmFsdWUgPSBMb25nLnRvU3RyaW5nKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpKTsJLy8gcmFuZG9tIHN0cmluZwotCQkKLQkJU3RyaW5nIHZhbHVlID0gUGxhdGZvcm0uZ2V0UHJlZmVyZW5jZXNTZXJ2aWNlKCkuZ2V0U3RyaW5nKGJ1bmRsZU5hbWUsIHByZWZLZXksIGRlZmF1bHRWYWx1ZSwgbnVsbCk7Ci0JCWFzc2VydE5vdFNhbWUoIkdldCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCB1c2luZyBQbGF0Zm9ybS5nZXRQcmVmZXJlbmNlc1NlcnZpY2UuIEtleTogIitwcmVmS2V5LCBkZWZhdWx0VmFsdWUsIHZhbHVlKTsJCQotCX0KLQotCS8qKgotCSAqIFRlc3RzIGRlZmF1bHQgdmFsdWVzIG9mIHByZWZlcmVuY2VzLgotCSAqIAotCSAqIE5PVEU6IEV4cGVjdGVkIGRlZmF1bHQgdmFsdWVzIGFyZSBoYXJkLWNvZGVkLCBzbyBpZiBkZWZhdWx0IHZhbHVlcyBkbwotCSAqIGdldCBjaGFuZ2VkLCBhc3NlcnRpb25zIG5lZWQgdG8gYmUgdXBkYXRlZCBhcyB3ZWxsCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFBsdWdpbkdldERlZmF1bHRQcmVmZXJlbmNlcygpIHsKLQkJSVByZWZlcmVuY2VTdG9yZSBzdG9yZSA9IFhNTFVJUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKTsKLQkJCi0JCXBsdWdpbkdldERlZmF1bHRQcmVmZXJlbmNlKHN0b3JlLCBYTUxVSVByZWZlcmVuY2VOYW1lcy5BVVRPX1BST1BPU0UsIEJvb2xlYW4udG9TdHJpbmcodHJ1ZSkpOwotCQlwbHVnaW5HZXREZWZhdWx0UHJlZmVyZW5jZShzdG9yZSwgWE1MVUlQcmVmZXJlbmNlTmFtZXMuQVVUT19QUk9QT1NFX0NPREUsICI8PToiKTsKLQkJcGx1Z2luR2V0RGVmYXVsdFByZWZlcmVuY2Uoc3RvcmUsIFhNTFVJUHJlZmVyZW5jZU5hbWVzLlVTRV9JTkZFUlJFRF9HUkFNTUFSLCBCb29sZWFuLnRvU3RyaW5nKHRydWUpKTsKLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIHBsdWdpbkdldERlZmF1bHRQcmVmZXJlbmNlKElQcmVmZXJlbmNlU3RvcmUgc3RvcmUsIFN0cmluZyBwcmVmS2V5LCBTdHJpbmcgZXhwZWN0ZWQpIHsKLQkJU3RyaW5nIGRlZmF1bHRWYWx1ZSA9IHN0b3JlLmdldERlZmF1bHRTdHJpbmcocHJlZktleSk7Ci0JCWFzc2VydEVxdWFscygiR2V0IGRlZmF1bHQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgdXNpbmcgcGx1Z2luLmdldFByZWZlcmVuY2VTdG9yZS4gS2V5OiAiK3ByZWZLZXksIGV4cGVjdGVkLCBkZWZhdWx0VmFsdWUpOwotCX0KLQotCS8qKgotCSAqIFRlc3RzIHNldHRpbmcgcHJlZmVyZW5jZSB2YWx1ZXMgYnkgc2V0dGluZyBwcmVmZXJlbmNlIHZhbHVlIHRvIGJlIGEKLQkgKiBjZXJ0YWluIHZhbHVlLCB0aGVuIGdldHRpbmcgdGhlIHByZWZlcmVuY2UgdmFsdWUgdG8gdmVyaWZ5IGl0IHdhcyBzZXQuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFBsdWdpblNldFByZWZlcmVuY2VzKCkgewotCQlJUHJlZmVyZW5jZVN0b3JlIHN0b3JlID0gWE1MVUlQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpOwotCQkKLQkJcGx1Z2luU2V0UHJlZmVyZW5jZUJvb2xlYW4oc3RvcmUsIFhNTFVJUHJlZmVyZW5jZU5hbWVzLkFVVE9fUFJPUE9TRSk7Ci0JCXBsdWdpblNldFByZWZlcmVuY2VTdHJpbmcoc3RvcmUsIFhNTFVJUHJlZmVyZW5jZU5hbWVzLkFVVE9fUFJPUE9TRV9DT0RFKTsKLQkJcGx1Z2luU2V0UHJlZmVyZW5jZUJvb2xlYW4oc3RvcmUsIFhNTFVJUHJlZmVyZW5jZU5hbWVzLlVTRV9JTkZFUlJFRF9HUkFNTUFSKTsKLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIHBsdWdpblNldFByZWZlcmVuY2VCb29sZWFuKElQcmVmZXJlbmNlU3RvcmUgc3RvcmUsIFN0cmluZyBwcmVmS2V5KSB7Ci0JCWJvb2xlYW4gb3JpZ2luYWxWYWx1ZSA9IHN0b3JlLmdldEJvb2xlYW4ocHJlZktleSk7Ci0JCWJvb2xlYW4gZXhwZWN0ZWRWYWx1ZSA9ICFvcmlnaW5hbFZhbHVlOwotCQlzdG9yZS5zZXRWYWx1ZShwcmVmS2V5LCBleHBlY3RlZFZhbHVlKTsKLQkJYm9vbGVhbiBmb3VuZFZhbHVlID0gc3RvcmUuZ2V0Qm9vbGVhbihwcmVmS2V5KTsKLQkJYXNzZXJ0RXF1YWxzKCJTZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgdXNpbmcgcGx1Z2luLmdldFByZWZlcmVuY2VTdG9yZS4gS2V5OiAiK3ByZWZLZXkrIiAgZXhwZWN0ZWQ6ICIgKyBleHBlY3RlZFZhbHVlICsgIiBmb3VuZDogIiArIGZvdW5kVmFsdWUsIGV4cGVjdGVkVmFsdWUsIGZvdW5kVmFsdWUpOwotCi0JCS8vIGF0dGVtcHQgdG8gcmVzdG9yZSBvcmlnaW5hbCBwcmVmZXJlbmNlIHZhbHVlCi0JCXN0b3JlLnNldFZhbHVlKHByZWZLZXksIG9yaWdpbmFsVmFsdWUpOwotCX0KLQkKLQlwcml2YXRlIHZvaWQgcGx1Z2luU2V0UHJlZmVyZW5jZVN0cmluZyhJUHJlZmVyZW5jZVN0b3JlIHN0b3JlLCBTdHJpbmcgcHJlZktleSkgewkJCi0JCVN0cmluZyBvcmlnaW5hbFZhbHVlID0gc3RvcmUuZ2V0U3RyaW5nKHByZWZLZXkpOwotCQlTdHJpbmcgZXhwZWN0ZWRWYWx1ZSA9IExvbmcudG9TdHJpbmcoU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkpOwkvLyByYW5kb20gc3RyaW5nCi0JCXN0b3JlLnNldFZhbHVlKHByZWZLZXksIGV4cGVjdGVkVmFsdWUpOwotCQlTdHJpbmcgZm91bmRWYWx1ZSA9IHN0b3JlLmdldFN0cmluZyhwcmVmS2V5KTsKLQkJYXNzZXJ0RXF1YWxzKCJTZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgdXNpbmcgcGx1Z2luLmdldFByZWZlcmVuY2VTdG9yZS4gS2V5OiAiK3ByZWZLZXkrIiAgZXhwZWN0ZWQ6ICIgKyBleHBlY3RlZFZhbHVlICsgIiBmb3VuZDogIiArIGZvdW5kVmFsdWUsIGV4cGVjdGVkVmFsdWUsIGZvdW5kVmFsdWUpOwotCi0JCS8vIGF0dGVtcHQgdG8gcmVzdG9yZSBvcmlnaW5hbCBwcmVmZXJlbmNlIHZhbHVlCi0JCXN0b3JlLnNldFZhbHVlKHByZWZLZXksIG9yaWdpbmFsVmFsdWUpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvWE1MVUlUZXN0U3VpdGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvWE1MVUlUZXN0U3VpdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjY5NDFjOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL1hNTFVJVGVzdFN1aXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0czsKLQotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwudmFsaWRhdGlvbi5UZXN0RGVsZWdhdGluZ1NvdXJjZVZhbGlkYXRvckZvclhNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLnZhbGlkYXRpb24uVGVzdE1hcmt1cFZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLnZpZXdlci5UZXN0Vmlld2VyQ29uZmlndXJhdGlvblhNTDsKLQotCi1wdWJsaWMgY2xhc3MgWE1MVUlUZXN0U3VpdGUgZXh0ZW5kcyBUZXN0U3VpdGUgewotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBYTUxVSVRlc3RTdWl0ZSgpOwotCX0KLQotCXB1YmxpYyBYTUxVSVRlc3RTdWl0ZSgpIHsKLQkJc3VwZXIoIlhNTCBVSSBUZXN0IFN1aXRlIik7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShWZXJpZnlFZGl0b3JQbHVnaW4uY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFhNTFVJUHJlZmVyZW5jZXNUZXN0LmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0Vmlld2VyQ29uZmlndXJhdGlvblhNTC5jbGFzcykpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdEVkaXRvckNvbmZpZ3VyYXRpb25YTUwuY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RPcGVuRWRpdG9yWE1MLmNsYXNzKSk7Ci0JCWFkZFRlc3QoKG5ldyBUZXN0U3VpdGUoVGVzdFByb3BlcnR5U2hlZXRDb25maWd1cmF0aW9uLmNsYXNzKSkpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdE5ld1hNTEdlbmVyYXRvci5jbGFzcykpOwotCQlhZGRUZXN0U3VpdGUoVGVzdERlbGVnYXRpbmdTb3VyY2VWYWxpZGF0b3JGb3JYTUwuY2xhc3MpOwotCQlhZGRUZXN0U3VpdGUoVGVzdE1hcmt1cFZhbGlkYXRvci5jbGFzcyk7Ci0JCWFkZFRlc3RTdWl0ZShUZXN0UmVjb25jaWxlclhNTC5jbGFzcyk7Ci0JCWFkZFRlc3RTdWl0ZShUZXN0U291cmNlVmFsaWRhdGlvbkZyYW1ld29yay5jbGFzcyk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9YTUxVSVRlc3RzUGx1Z2luLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL1hNTFVJVGVzdHNQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGEwM2FlZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL1hNTFVJVGVzdHNQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0czsKLQotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7Ci0KLS8qKgotICogVGhlIG1haW4gcGx1Z2luIGNsYXNzIHRvIGJlIHVzZWQgaW4gdGhlIGRlc2t0b3AuCi0gKi8KLXB1YmxpYyBjbGFzcyBYTUxVSVRlc3RzUGx1Z2luIGV4dGVuZHMgQWJzdHJhY3RVSVBsdWdpbiB7Ci0JLy9UaGUgc2hhcmVkIGluc3RhbmNlLgotCXByaXZhdGUgc3RhdGljIFhNTFVJVGVzdHNQbHVnaW4gcGx1Z2luOwotCXByb3RlY3RlZCBzdGF0aWMgQnVuZGxlIHBsdWdpbkJ1bmRsZTsKLQotCS8qKgotCSAqIFRoZSBjb25zdHJ1Y3Rvci4KLQkgKi8KLQlwdWJsaWMgWE1MVUlUZXN0c1BsdWdpbigpIHsKLQkJc3VwZXIoKTsKLQkJcGx1Z2luID0gdGhpczsKLQl9Ci0KLQkvKioKLQkgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdXBvbiBwbHVnLWluIGFjdGl2YXRpb24KLQkgKi8KLQlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zdGFydChjb250ZXh0KTsKLQkJcGx1Z2luQnVuZGxlID0gY29udGV4dC5nZXRCdW5kbGUoKTsKLQl9Ci0KLQkvKioKLQkgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB0aGUgcGx1Zy1pbiBpcyBzdG9wcGVkCi0JICovCi0JcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlwbHVnaW5CdW5kbGUgPSBudWxsOwotCQlzdXBlci5zdG9wKGNvbnRleHQpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFhNTFVJVGVzdHNQbHVnaW4gZ2V0RGVmYXVsdCgpIHsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzdHJpbmcgZnJvbSB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLAotCSAqIG9yICdrZXknIGlmIG5vdCBmb3VuZC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRSZXNvdXJjZVN0cmluZyhTdHJpbmcga2V5KSB7Ci0JCXJldHVybiBrZXk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLAotCSAqLwotCXB1YmxpYyBSZXNvdXJjZUJ1bmRsZSBnZXRSZXNvdXJjZUJ1bmRsZSgpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCQotICAgIC8qKgotICAgICAqIEdldCB0aGUgaW5zdGFsbCBVUkwgb2YgdGhpcyBwbHVnaW4uCi0gICAgICogCi0gICAgICogQHJldHVybiB0aGUgaW5zdGFsbCB1cmwgb2YgdGhpcyBwbHVnaW4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRJbnN0YWxsVVJMKCkKLSAgICB7Ci0JICAgIHRyeQotCSAgICB7Ci0JICAgIAlyZXR1cm4gRmlsZUxvY2F0b3IucmVzb2x2ZShwbHVnaW5CdW5kbGUuZ2V0RW50cnkoIi8iKSkuZ2V0RmlsZSgpOyAvLyROT04tTkxTLTEkCi0JICAgIH0KLQkgICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0JICAgIHsKLQkgICAgCXJldHVybiBudWxsOwotCSAgICB9Ci0JICB9Ci0KLQl9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9icmVha3BvaW50cy9CcmVha3BvaW50RXJyb3JQcm92aWRlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9icmVha3BvaW50cy9CcmVha3BvaW50RXJyb3JQcm92aWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MWM3YmJmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvYnJlYWtwb2ludHMvQnJlYWtwb2ludEVycm9yUHJvdmlkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLmJyZWFrcG9pbnRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXh0ZW5zaW9ucy5JU291cmNlRWRpdGluZ1RleHRUb29sczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnByb3Zpc2lvbmFsLmV4dGVuc2lvbnMuYnJlYWtwb2ludC5JQnJlYWtwb2ludFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMuWE1MVUlUZXN0c1BsdWdpbjsKLQotCi1wdWJsaWMgY2xhc3MgQnJlYWtwb2ludEVycm9yUHJvdmlkZXIgaW1wbGVtZW50cyBJQnJlYWtwb2ludFByb3ZpZGVyIHsKLQotCUlTb3VyY2VFZGl0aW5nVGV4dFRvb2xzIGZUb29sOwotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmV4dGVuc2lvbnMuYnJlYWtwb2ludC5JQnJlYWtwb2ludFByb3ZpZGVyI2FkZEJyZWFrcG9pbnQob3JnLnczYy5kb20uRG9jdW1lbnQsCi0JICogICAgICBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudCwgb3JnLmVjbGlwc2UudWkuSUVkaXRvcklucHV0LAotCSAqICAgICAgb3JnLnczYy5kb20uTm9kZSwgaW50LCBpbnQpCi0JICovCi0JcHVibGljIElTdGF0dXMgYWRkQnJlYWtwb2ludChJRG9jdW1lbnQgaWRvYywgSUVkaXRvcklucHV0IGlucHV0LCBpbnQgbGluZU51bWJlciwgaW50IG9mZnNldCkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlYTUxVSVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKS5zZXREZWZhdWx0KCJicmVhay1lcnJvciIsIGZhbHNlKTsKLQkJYm9vbGVhbiBlbmFibGUgPSBYTUxVSVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKS5nZXRCb29sZWFuKCJicmVhay1lcnJvciIpOwotCQlpZiAoZW5hYmxlKQotCQkJcmV0dXJuIG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgWE1MVUlUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCksIElTdGF0dXMuRVJST1IsICJUZXN0IEVycm9yISIsIG51bGwpOwotCQlyZXR1cm4gbmV3IFN0YXR1cyhJU3RhdHVzLk9LLCBYTUxVSVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRTeW1ib2xpY05hbWUoKSwgSVN0YXR1cy5PSywgIiIsIG51bGwpOwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5leHRlbnNpb25zLmJyZWFrcG9pbnQuSUJyZWFrcG9pbnRQcm92aWRlciNnZXRSZXNvdXJjZShvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQpCi0JICovCi0JcHVibGljIElSZXNvdXJjZSBnZXRSZXNvdXJjZShJRWRpdG9ySW5wdXQgaW5wdXQpIHsKLQkJSVJlc291cmNlIHJlcyA9IChJUmVzb3VyY2UpIGlucHV0LmdldEFkYXB0ZXIoSUZpbGUuY2xhc3MpOwotCQlpZiAocmVzID09IG51bGwpCi0JCQlyZXMgPSAoSVJlc291cmNlKSBpbnB1dC5nZXRBZGFwdGVyKElSZXNvdXJjZS5jbGFzcyk7Ci0JCXJldHVybiByZXM7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmV4dGVuc2lvbnMuYnJlYWtwb2ludC5JQnJlYWtwb2ludFByb3ZpZGVyI3NldFNvdXJjZUVkaXRpbmdUZXh0VG9vbHMob3JnLmVjbGlwc2Uud3N0LnNzZS51aS5leHRlbnNpb25zLmJyZWFrcG9pbnQuU291cmNlRWRpdGluZ1RleHRUb29scykKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRTb3VyY2VFZGl0aW5nVGV4dFRvb2xzKElTb3VyY2VFZGl0aW5nVGV4dFRvb2xzIHRvb2wpIHsKLQkJZlRvb2wgPSB0b29sOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvYnJlYWtwb2ludHMvRW5hYmxlV2FybmluZ0FjdGlvbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9icmVha3BvaW50cy9FbmFibGVXYXJuaW5nQWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2YTdmNjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9icmVha3BvaW50cy9FbmFibGVXYXJuaW5nQWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMuYnJlYWtwb2ludHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLklFeHRlbmRlZEVkaXRvckFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLklFeHRlbmRlZFNpbXBsZUVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLlhNTFVJVGVzdHNQbHVnaW47Ci0KLQotcHVibGljIGNsYXNzIEVuYWJsZVdhcm5pbmdBY3Rpb24gZXh0ZW5kcyBBY3Rpb24gaW1wbGVtZW50cyBJRXh0ZW5kZWRFZGl0b3JBY3Rpb24gewotCUlFeHRlbmRlZFNpbXBsZUVkaXRvciBhY3RpdmVFZGl0b3I7Ci0KLQlwdWJsaWMgRW5hYmxlV2FybmluZ0FjdGlvbigpIHsKLQkJc3VwZXIoKTsKLQkJWE1MVUlUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCkuc2V0RGVmYXVsdCgiYnJlYWstZXJyb3IiLCBmYWxzZSk7Ci0JCWJvb2xlYW4gZW5hYmxlZCA9IFhNTFVJVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpLmdldEJvb2xlYW4oImJyZWFrLWVycm9yIik7Ci0JCWlmKGVuYWJsZWQpCi0JCQlzZXRUZXh0KCJEaXNhYmxlIEJyZWFrcG9pbnQgRXJyb3JzIik7Ci0JCWVsc2UKLQkJCXNldFRleHQoIkVuYWJsZSBCcmVha3BvaW50IEVycm9ycyIpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSB0ZXh0Ci0JICovCi0JcHVibGljIEVuYWJsZVdhcm5pbmdBY3Rpb24oU3RyaW5nIHRleHQpIHsKLQkJWE1MVUlUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCkuc2V0RGVmYXVsdCgiYnJlYWstZXJyb3IiLCBmYWxzZSk7Ci0JCWJvb2xlYW4gZW5hYmxlZCA9IFhNTFVJVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpLmdldEJvb2xlYW4oImJyZWFrLWVycm9yIik7Ci0JCWlmKGVuYWJsZWQpCi0JCQlzZXRUZXh0KCJEaXNhYmxlIEJyZWFrcG9pbnQgRXJyb3JzIik7Ci0JCWVsc2UKLQkJCXNldFRleHQoIkVuYWJsZSBCcmVha3BvaW50IEVycm9ycyIpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSB0ZXh0Ci0JICogQHBhcmFtIGltYWdlCi0JICovCi0JcHVibGljIEVuYWJsZVdhcm5pbmdBY3Rpb24oU3RyaW5nIHRleHQsIEltYWdlRGVzY3JpcHRvciBpbWFnZSkgewotCQlYTUxVSVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKS5zZXREZWZhdWx0KCJicmVhay1lcnJvciIsIGZhbHNlKTsKLQkJYm9vbGVhbiBlbmFibGVkID0gWE1MVUlUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCkuZ2V0Qm9vbGVhbigiYnJlYWstZXJyb3IiKTsKLQkJaWYoZW5hYmxlZCkKLQkJCXNldFRleHQoIkRpc2FibGUgQnJlYWtwb2ludCBFcnJvcnMiKTsKLQkJZWxzZQotCQkJc2V0VGV4dCgiRW5hYmxlIEJyZWFrcG9pbnQgRXJyb3JzIik7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIHRleHQKLQkgKiBAcGFyYW0gc3R5bGUKLQkgKi8KLQlwdWJsaWMgRW5hYmxlV2FybmluZ0FjdGlvbihTdHJpbmcgdGV4dCwgaW50IHN0eWxlKSB7Ci0JCVhNTFVJVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpLnNldERlZmF1bHQoImJyZWFrLWVycm9yIiwgZmFsc2UpOwotCQlib29sZWFuIGVuYWJsZWQgPSBYTUxVSVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKS5nZXRCb29sZWFuKCJicmVhay1lcnJvciIpOwotCQlpZihlbmFibGVkKQotCQkJc2V0VGV4dCgiRGlzYWJsZSBCcmVha3BvaW50IEVycm9ycyIpOwotCQllbHNlCi0JCQlzZXRUZXh0KCJFbmFibGUgQnJlYWtwb2ludCBFcnJvcnMiKTsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5zc2UudWkuZXh0ZW5zaW9uLklFeHRlbmRlZEVkaXRvckFjdGlvbiNpc1Zpc2libGUoKQotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzVmlzaWJsZSgpIHsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbiNydW4oKQotCSAqLwotCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJc3VwZXIucnVuKCk7Ci0JCVhNTFVJVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpLnNldERlZmF1bHQoImJyZWFrLWVycm9yIiwgZmFsc2UpOwotCQlib29sZWFuIHZhbHVlID0gWE1MVUlUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCkuZ2V0Qm9vbGVhbigiYnJlYWstZXJyb3IiKTsKLQkJWE1MVUlUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCkuc2V0VmFsdWUoImJyZWFrLWVycm9yIiwgIXZhbHVlKTsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5zc2UudWkuZXh0ZW5zaW9uLklFeHRlbmRlZEVkaXRvckFjdGlvbiNzZXRBY3RpdmVFeHRlbmRlZEVkaXRvcihvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmV4dGVuc2lvbi5JRXh0ZW5kZWRTaW1wbGVFZGl0b3IpCi0JICovCi0JcHVibGljIHZvaWQgc2V0QWN0aXZlRXh0ZW5kZWRFZGl0b3IoSUV4dGVuZGVkU2ltcGxlRWRpdG9yIHRhcmdldEVkaXRvcikgewotCQlhY3RpdmVFZGl0b3IgPSB0YXJnZXRFZGl0b3I7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLklVcGRhdGUjdXBkYXRlKCkKLQkgKi8KLQlwdWJsaWMgdm9pZCB1cGRhdGUoKSB7Ci0JCVhNTFVJVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpLnNldERlZmF1bHQoImJyZWFrLWVycm9yIiwgZmFsc2UpOwotCQlib29sZWFuIGVuYWJsZWQgPSBYTUxVSVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKS5nZXRCb29sZWFuKCJicmVhay1lcnJvciIpOwotCQlpZihlbmFibGVkKQotCQkJc2V0VGV4dCgiRGlzYWJsZSBCcmVha3BvaW50IEVycm9ycyIpOwotCQllbHNlCi0JCQlzZXRUZXh0KCJFbmFibGUgQnJlYWtwb2ludCBFcnJvcnMiKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL3ZpZXdlci9UZXN0Vmlld2VyQ29uZmlndXJhdGlvblhNTC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy92aWV3ZXIvVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25YTUwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2ZhODliZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL3ZpZXdlci9UZXN0Vmlld2VyQ29uZmlndXJhdGlvblhNTC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjUyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy52aWV3ZXI7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklBdXRvRWRpdFN0cmF0ZWd5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSUluZm9ybWF0aW9uQ29udHJvbENyZWF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVGV4dERvdWJsZUNsaWNrU3RyYXRlZ3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVGV4dEhvdmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuY29udGVudGFzc2lzdC5JQ29udGVudEFzc2lzdGFudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmZvcm1hdHRlci5JQ29udGVudEZvcm1hdHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0Lmh5cGVybGluay5JSHlwZXJsaW5rRGV0ZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5pbmZvcm1hdGlvbi5JSW5mb3JtYXRpb25QcmVzZW50ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5yZWNvbmNpbGVyLklSZWNvbmNpbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuc291cmNlLklBbm5vdGF0aW9uSG92ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXh0LklTdHJ1Y3R1cmVkUGFydGl0aW9uczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLlN0cnVjdHVyZWRUZXh0Vmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwucHJvdmlzaW9uYWwuc3R5bGUuTGluZVN0eWxlUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRleHQuSVhNTFBhcnRpdGlvbnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25YTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy5Mb2dnZXI7Ci0KLS8qKgotICogQGF1dGhvciBwYXZlcnkKLSAqLwotcHVibGljIGNsYXNzIFRlc3RWaWV3ZXJDb25maWd1cmF0aW9uWE1MIGV4dGVuZHMgVGVzdENhc2UgewotICAgIAotCXByaXZhdGUgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uWE1MIGZDb25maWcgPSBudWxsOwotCXByaXZhdGUgYm9vbGVhbiBmRGlzcGxheUV4aXN0cyA9IHRydWU7Ci0JcHJpdmF0ZSBTdHJ1Y3R1cmVkVGV4dFZpZXdlciBmVmlld2VyID0gbnVsbDsKLQlwcml2YXRlIGJvb2xlYW4gaXNTZXR1cCA9IGZhbHNlOwotCQotICAgIHB1YmxpYyBUZXN0Vmlld2VyQ29uZmlndXJhdGlvblhNTCgpIHsKLSAgICAgICAgc3VwZXIoIlRlc3RWaWV3ZXJDb25maWd1cmF0aW9uWE1MIik7Ci0gICAgfQotICAgIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCQotICAgIAlzdXBlci5zZXRVcCgpOwotCQlpZighdGhpcy5pc1NldHVwKXsKLQkJCXNldFVwVmlld2VyQ29uZmlndXJhdGlvbigpOwotCQkJdGhpcy5pc1NldHVwID0gdHJ1ZTsKLQkJfQotICAgIH0KLQkKLQlwcml2YXRlIHZvaWQgc2V0VXBWaWV3ZXJDb25maWd1cmF0aW9uKCkgewotCQkKLQkJLy8gc29tZSB0ZXN0IGVudmlyb25tZW50cyBtaWdodCBub3QgaGF2ZSBhICJyZWFsIiBkaXNwbGF5Ci0JCWlmKERpc3BsYXkuZ2V0Q3VycmVudCgpICE9IG51bGwpIHsKLQkJCQotCQkJU2hlbGwgc2hlbGwgPSBudWxsOwotCQkJQ29tcG9zaXRlIHBhcmVudCA9IG51bGw7Ci0JCQkKLQkJCWlmKFBsYXRmb3JtVUkuaXNXb3JrYmVuY2hSdW5uaW5nKCkpIHsKLQkJCQlzaGVsbCA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0U2hlbGwoKTsKLQkJCX0KLQkJCWVsc2UgewkKLQkJCQlzaGVsbCA9IG5ldyBTaGVsbChEaXNwbGF5LmdldEN1cnJlbnQoKSk7Ci0JCQl9Ci0JCQlwYXJlbnQgPSBuZXcgQ29tcG9zaXRlKHNoZWxsLCBTV1QuTk9ORSk7Ci0JCQkKLQkJCS8vIGR1bW15IHZpZXdlcgotCQkJZlZpZXdlciA9IG5ldyBTdHJ1Y3R1cmVkVGV4dFZpZXdlcihwYXJlbnQsIG51bGwsIG51bGwsIGZhbHNlLCBTV1QuTk9ORSk7Ci0JCQlmQ29uZmlnID0gbmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvblhNTCgpOwotCQl9Ci0JCWVsc2UgewotCQkJZkRpc3BsYXlFeGlzdHMgPSBmYWxzZTsKLQkJCUxvZ2dlci5sb2coTG9nZ2VyLklORk8sICJSZW1lbWJlciwgdmlld2VyIGNvbmZpZ3VyYXRpb24gdGVzdHMgYXJlIG5vdCBydW4gYmVjYXVzZSB3b3JrYmVuY2ggaXMgbm90IG9wZW4gKG5vcm1hbCBvbiBidWlsZCBtYWNoaW5lKSIpOwotCQl9Ci0JfQotICAgIAotCS8qKgotCSAqIE5vdCBuZWNlc3NhcnkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0QW5ub3RhdGlvbkhvdmVyKCkgewotCQkKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQlJQW5ub3RhdGlvbkhvdmVyIGhvdmVyID0gZkNvbmZpZy5nZXRBbm5vdGF0aW9uSG92ZXIoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoIkFubm90YXRpb25Ib3ZlciBpcyBudWxsIiwgaG92ZXIpOwotICAgIH0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0QXV0b0VkaXRTdHJhdGVnaWVzKCkgewotCQkKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQkKLQkJSUF1dG9FZGl0U3RyYXRlZ3lbXSBzdHJhdGVnaWVzID0gZkNvbmZpZy5nZXRBdXRvRWRpdFN0cmF0ZWdpZXMoZlZpZXdlciwgSVhNTFBhcnRpdGlvbnMuWE1MX0RFRkFVTFQpOwotCQlhc3NlcnROb3ROdWxsKHN0cmF0ZWdpZXMpOwotCQlhc3NlcnRUcnVlKCJ0aGVyZSBhcmUgbm8gYXV0byBlZGl0IHN0cmF0ZWdpZXMiLCBzdHJhdGVnaWVzLmxlbmd0aCA+IDApOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0Q29uZmlndXJlZENvbnRlbnRUeXBlcygpIHsKLQkJCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJU3RyaW5nW10gY29uZmlndXJlZENvbnRlbnRUeXBlcyA9IGZDb25maWcuZ2V0Q29uZmlndXJlZENvbnRlbnRUeXBlcyhmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbChjb25maWd1cmVkQ29udGVudFR5cGVzKTsKLQkJYXNzZXJ0VHJ1ZSgidGhlcmUgYXJlIG5vIGNvbmZpZ3VyZWQgY29udGVudCB0eXBlcyIsIGNvbmZpZ3VyZWRDb250ZW50VHlwZXMubGVuZ3RoID4gMCk7Ci0JfQotCQotCS8qKgotCSAqIE5vdCBuZWNlc3NhcnkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0Q29udGVudEFzc2lzdGFudCgpIHsKLQkJCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJSUNvbnRlbnRBc3Npc3RhbnQgY2EgPSBmQ29uZmlnLmdldENvbnRlbnRBc3Npc3RhbnQoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoInRoZXJlIGlzIG5vIGNvbnRlbnQgYXNzaXN0YW50IiwgY2EpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0Q29udGVudEZvcm1hdHRlcigpIHsKLQkJCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJSUNvbnRlbnRGb3JtYXR0ZXIgY2YgPSBmQ29uZmlnLmdldENvbnRlbnRGb3JtYXR0ZXIoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoInRoZXJlIGlzIG5vIGNvbnRlbnQgZm9ybWF0dGVyIiwgY2YpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0RG91YmxlQ2xpY2tTdHJhdGVneSgpIHsKLQkJCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJU3RyaW5nW10gY29udGVudFR5cGVzID0gZkNvbmZpZy5nZXRDb25maWd1cmVkQ29udGVudFR5cGVzKGZWaWV3ZXIpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbnRlbnRUeXBlcy5sZW5ndGg7IGkrKykgewotCQkJSVRleHREb3VibGVDbGlja1N0cmF0ZWd5IHN0cmF0ZWd5ID0gZkNvbmZpZy5nZXREb3VibGVDbGlja1N0cmF0ZWd5KGZWaWV3ZXIsIGNvbnRlbnRUeXBlc1tpXSk7Ci0JCQlpZihzdHJhdGVneSAhPSBudWxsKSB7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQl9Ci0JCWFzc2VydFRydWUoInRoZXJlIGFyZSBubyBjb25maWd1cmVkIGRvdWJsZSBjbGljayBzdHJhdGVnaWVzIiwgZmFsc2UpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0SHlwZXJsaW5rRGV0ZWN0b3JzKCkgewotCQkKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQlJSHlwZXJsaW5rRGV0ZWN0b3JbXSBkZXRlY3RvcnMgPSBmQ29uZmlnLmdldEh5cGVybGlua0RldGVjdG9ycyhmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgidGhlcmUgYXJlIG5vIGh5cGVybGluayBkZXRlY3RvcnMiLCBkZXRlY3RvcnMpOwotCQlhc3NlcnRUcnVlKCJ0aGVyZSBhcmUgbm8gaHlwZXJsaW5rIGRldGVjdG9ycyIsIGRldGVjdG9ycy5sZW5ndGggPiAwKTsKLQl9Ci0JCi0gICAgcHVibGljIHZvaWQgdGVzdEdldEluZGVudFByZWZpeGVzKCkgewotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCVN0cmluZ1tdIGNvbnRlbnRUeXBlcyA9IGZDb25maWcuZ2V0Q29uZmlndXJlZENvbnRlbnRUeXBlcyhmVmlld2VyKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjb250ZW50VHlwZXMubGVuZ3RoOyBpKyspIHsKLQkJCVN0cmluZyBwcmVmaXhlc1tdID0gZkNvbmZpZy5nZXRJbmRlbnRQcmVmaXhlcyhmVmlld2VyLCBjb250ZW50VHlwZXNbaV0pOwotCQkJaWYocHJlZml4ZXMgIT0gbnVsbCkgewotCQkJCXJldHVybjsKLQkJCX0KLQkJfQotCQlhc3NlcnRUcnVlKCJ0aGVyZSBhcmUgbm8gY29uZmlndXJlZCBpbmRlbnQgcHJlZml4ZXMiLCBmYWxzZSk7Ci0JfQotICAgIAotCS8qKgotCSAqIE5vdCBuZWNlc3NhcnkKLQkgKi8KLSAgICBwdWJsaWMgdm9pZCB0ZXN0R2V0SW5mb3JtYXRpb25Db250cm9sQ3JlYXRvcigpIHsKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQlJSW5mb3JtYXRpb25Db250cm9sQ3JlYXRvciBpbmZvQ3JlYXRvciA9IGZDb25maWcuZ2V0SW5mb3JtYXRpb25Db250cm9sQ3JlYXRvcihmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgiSW5mb3JtYXRpb25Db250cm9sQ3JlYXRvciBpcyBudWxsIiwgaW5mb0NyZWF0b3IpOwotICAgIH0KLQkKLQkvKioKLQkgKiBOb3QgbmVjZXNzYXJ5Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldEluZm9ybWF0aW9uUHJlc2VudGVyKCkgewotCQkKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQlJSW5mb3JtYXRpb25QcmVzZW50ZXIgcHJlc2VudGVyID0gZkNvbmZpZy5nZXRJbmZvcm1hdGlvblByZXNlbnRlcihmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgiSW5mb3JtYXRpb25QcmVzZW50ZXIgaXMgbnVsbCIsIHByZXNlbnRlcik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RHZXRMaW5lU3R5bGVQcm92aWRlcnMoKSB7Ci0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJU3RyaW5nW10gY29udGVudFR5cGVzID0gZkNvbmZpZy5nZXRDb25maWd1cmVkQ29udGVudFR5cGVzKGZWaWV3ZXIpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbnRlbnRUeXBlcy5sZW5ndGg7IGkrKykgewotCQkJTGluZVN0eWxlUHJvdmlkZXIgcHJvdmlkZXJzW10gPSBmQ29uZmlnLmdldExpbmVTdHlsZVByb3ZpZGVycyhmVmlld2VyLCBjb250ZW50VHlwZXNbaV0pOwotCQkJaWYocHJvdmlkZXJzICE9IG51bGwpIHsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSgidGhlcmUgYXJlIG5vIGNvbmZpZ3VyZWQgbGluZSBzdHlsZSBwcm92aWRlcnMiLCBmYWxzZSk7Ci0JfQotCQotCS8qKgotCSAqIE5vdCBuZWNlc3NhcnkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0UmVjb25jaWxlcigpIHsKLQkJCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJSVJlY29uY2lsZXIgciA9IGZDb25maWcuZ2V0UmVjb25jaWxlcihmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgiUmVjb25jaWxlciBpcyBudWxsIiwgcik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RHZXRUZXh0SG92ZXIoKSB7Ci0JCQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQotCQlTdHJpbmdbXSBob3ZlclBhcnRpdGlvbnMgPSBuZXcgU3RyaW5nW117SVN0cnVjdHVyZWRQYXJ0aXRpb25zLkRFRkFVTFRfUEFSVElUSU9OLCBJWE1MUGFydGl0aW9ucy5YTUxfREVGQVVMVH07Ci0JCQotCQlmb3IgKGludCBpID0gMDsgaSA8IGhvdmVyUGFydGl0aW9ucy5sZW5ndGg7IGkrKykgewotCQkJSVRleHRIb3ZlciBob3ZlciA9IGZDb25maWcuZ2V0VGV4dEhvdmVyKGZWaWV3ZXIsIGhvdmVyUGFydGl0aW9uc1tpXSwgU1dULk5PTkUpOwotCQkJYXNzZXJ0Tm90TnVsbCgiaG92ZXIgd2FzIG51bGwgZm9yIHBhcnRpdGlvbjogIiArIGhvdmVyUGFydGl0aW9uc1tpXSwgaG92ZXIpOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy92aWV3ZXIvVmlld2VyVGVzdFhNTC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy92aWV3ZXIvVmlld2VyVGVzdFhNTC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMzk4MzQ1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvdmlld2VyL1ZpZXdlclRlc3RYTUwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUwMCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy52aWV3ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQ29udHJpYnV0aW9uTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU2VwYXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkpGYWNlUmVzb3VyY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkJ1c3lJbmRpY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JTWVtZW50bzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JVmlld1NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5WaWV3UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLklUZXh0RWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLklDb250ZW50T3V0bGluZVBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLkluZGV4ZWRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5TdHJ1Y3R1cmVkVGV4dEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLlN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLlN0cnVjdHVyZWRUZXh0Vmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9yWE1MOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkuU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uWE1MOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci0KLQotcHVibGljIGNsYXNzIFZpZXdlclRlc3RYTUwgZXh0ZW5kcyBWaWV3UGFydCB7Ci0JLyoqCi0JICogU2V0cyB0aGUgdmlld2VyJ3MgaGlnaGxpZ2h0aW5nIHRleHQgcmFuZ2UgdG8gdGhlIHRleHQgcmFuZ2UgaW5kaWNhdGVkCi0JICogYnkgdGhlIHNlbGVjdGVkIE5vZGVzLgotCSAqLwotCXByb3RlY3RlZCBjbGFzcyBOb2RlUmFuZ2VTZWxlY3Rpb25MaXN0ZW5lciBpbXBsZW1lbnRzIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgewotCQlwdWJsaWMgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKFNlbGVjdGlvbkNoYW5nZWRFdmVudCBldmVudCkgewotCQkJaWYgKCFldmVudC5nZXRTZWxlY3Rpb24oKS5pc0VtcHR5KCkgJiYgZXZlbnQuZ2V0U2VsZWN0aW9uKCkgaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgewotCQkJCUlTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbiA9IChJU3RydWN0dXJlZFNlbGVjdGlvbikgZXZlbnQuZ2V0U2VsZWN0aW9uKCk7Ci0JCQkJSW5kZXhlZFJlZ2lvbiBzdGFydE5vZGUgPSAoSW5kZXhlZFJlZ2lvbikgc2VsZWN0aW9uLmdldEZpcnN0RWxlbWVudCgpOwotCQkJCUluZGV4ZWRSZWdpb24gZW5kTm9kZSA9IChJbmRleGVkUmVnaW9uKSBzZWxlY3Rpb24udG9BcnJheSgpW3NlbGVjdGlvbi5zaXplKCkgLSAxXTsKLQotCQkJCWlmIChzdGFydE5vZGUgaW5zdGFuY2VvZiBBdHRyKQotCQkJCQlzdGFydE5vZGUgPSAoSW5kZXhlZFJlZ2lvbikgKChBdHRyKSBzdGFydE5vZGUpLmdldE93bmVyRWxlbWVudCgpOwotCQkJCWlmIChlbmROb2RlIGluc3RhbmNlb2YgQXR0cikKLQkJCQkJZW5kTm9kZSA9IChJbmRleGVkUmVnaW9uKSAoKEF0dHIpIGVuZE5vZGUpLmdldE93bmVyRWxlbWVudCgpOwotCi0JCQkJaW50IHN0YXJ0ID0gc3RhcnROb2RlLmdldFN0YXJ0T2Zmc2V0KCk7Ci0JCQkJaW50IGVuZCA9IGVuZE5vZGUuZ2V0RW5kT2Zmc2V0KCk7Ci0KLQkJCQlmU291cmNlVmlld2VyLnJlc2V0VmlzaWJsZVJlZ2lvbigpOwotCQkJCWZTb3VyY2VWaWV3ZXIuc2V0VmlzaWJsZVJlZ2lvbihzdGFydCwgZW5kIC0gc3RhcnQpOwotCQkJCWZTb3VyY2VWaWV3ZXIuc2V0U2VsZWN0ZWRSYW5nZShzdGFydCwgMCk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlmU291cmNlVmlld2VyLnJlc2V0VmlzaWJsZVJlZ2lvbigpOwotCQkJfQotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIGNsYXNzIE51bWJlcklucHV0RGlhbG9nIGV4dGVuZHMgRGlhbG9nIHsKLQkJcHVibGljIFRleHQgbGVuZ3RoOwotCi0JCWludCBsZW5ndGhWYWx1ZTsKLQkJcHVibGljIFRleHQgc3RhcnQ7Ci0JCWludCBzdGFydFZhbHVlOwotCi0JCXB1YmxpYyBOdW1iZXJJbnB1dERpYWxvZyhTaGVsbCBzaGVsbCkgewotCQkJc3VwZXIoc2hlbGwpOwotCQl9Ci0KLQkJcHJvdGVjdGVkIENvbnRyb2wgY3JlYXRlRGlhbG9nQXJlYShDb21wb3NpdGUgcGFyZW50KSB7Ci0JCQlDb21wb3NpdGUgY29tcG9zaXRlID0gKENvbXBvc2l0ZSkgc3VwZXIuY3JlYXRlRGlhbG9nQXJlYShwYXJlbnQpOwotCQkJQ29tcG9zaXRlIGNvbnRhaW5lciA9IG5ldyBDb21wb3NpdGUoY29tcG9zaXRlLCBTV1QuTlVMTCk7Ci0JCQljb250YWluZXIuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKSk7Ci0JCQljb250YWluZXIuc2V0TGF5b3V0KG5ldyBHcmlkTGF5b3V0KDIsIHRydWUpKTsKLQkJCXNldFNoZWxsU3R5bGUoZ2V0U2hlbGwoKS5nZXRTdHlsZSgpIHwgU1dULlJFU0laRSk7Ci0KLQkJCUxhYmVsIGxhYmVsID0gbmV3IExhYmVsKGNvbnRhaW5lciwgU1dULk5VTEwpOwotCQkJbGFiZWwuc2V0VGV4dCgiU3RhcnQiKTsKLQkJCWxhYmVsLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCkpOwotCi0JCQlsYWJlbCA9IG5ldyBMYWJlbChjb250YWluZXIsIFNXVC5OVUxMKTsKLQkJCWxhYmVsLnNldFRleHQoIkxlbmd0aCIpOwotCQkJbGFiZWwuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKSk7Ci0KLQkJCXN0YXJ0ID0gbmV3IFRleHQoY29udGFpbmVyLCBTV1QuQk9SREVSKTsKLQkJCXN0YXJ0VmFsdWUgPSBmU291cmNlVmlld2VyLmdldFZpc2libGVSZWdpb24oKS5nZXRPZmZzZXQoKTsKLQkJCXN0YXJ0LnNldFRleHQoIiIgKyBzdGFydFZhbHVlKTsKLQkJCXN0YXJ0LnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCkpOwotCi0JCQlsZW5ndGggPSBuZXcgVGV4dChjb250YWluZXIsIFNXVC5CT1JERVIpOwotCQkJbGVuZ3RoVmFsdWUgPSBmU291cmNlVmlld2VyLmdldFZpc2libGVSZWdpb24oKS5nZXRMZW5ndGgoKTsKLQkJCWxlbmd0aC5zZXRUZXh0KCIiICsgbGVuZ3RoVmFsdWUpOwotCQkJbGVuZ3RoLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCkpOwotCi0JCQkvLyBzdGFydC5hZGRNb2RpZnlMaXN0ZW5lcihuZXcgTW9kaWZ5TGlzdGVuZXIoKSB7Ci0JCQkvLyBwdWJsaWMgdm9pZCBtb2RpZnlUZXh0KE1vZGlmeUV2ZW50IGUpIHsKLQkJCS8vIGlmIChlLndpZGdldCA9PSBzdGFydCkgewotCQkJLy8gdHJ5IHsKLQkJCS8vIHN0YXJ0VmFsdWUgPSBJbnRlZ2VyLmRlY29kZShzdGFydC5nZXRUZXh0KCkpLmludFZhbHVlKCk7Ci0JCQkvLyB9Ci0JCQkvLyBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUyKSB7Ci0JCQkvLyBzdGFydFZhbHVlID0gMDsKLQkJCS8vIH0KLQkJCS8vIH0KLQkJCS8vIH0KLQkJCS8vIH0pOwotCQkJLy8gbGVuZ3RoLmFkZE1vZGlmeUxpc3RlbmVyKG5ldyBNb2RpZnlMaXN0ZW5lcigpIHsKLQkJCS8vIHB1YmxpYyB2b2lkIG1vZGlmeVRleHQoTW9kaWZ5RXZlbnQgZSkgewotCQkJLy8gaWYgKGUud2lkZ2V0ID09IGxlbmd0aCkgewotCQkJLy8gdHJ5IHsKLQkJCS8vIGxlbmd0aFZhbHVlID0gSW50ZWdlci5kZWNvZGUobGVuZ3RoLmdldFRleHQoKSkuaW50VmFsdWUoKTsKLQkJCS8vIH0KLQkJCS8vIGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZTIpIHsKLQkJCS8vIGxlbmd0aFZhbHVlID0gMDsKLQkJCS8vIH0KLQkJCS8vIH0KLQkJCS8vIH0KLQkJCS8vIH0pOwotCi0JCQlyZXR1cm4gY29tcG9zaXRlOwotCQl9Ci0KLQkJLyoKLQkJICogKG5vbi1KYXZhZG9jKQotCQkgKiAKLQkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZyNva1ByZXNzZWQoKQotCQkgKi8KLQkJcHJvdGVjdGVkIHZvaWQgb2tQcmVzc2VkKCkgewotCQkJdHJ5IHsKLQkJCQlzdGFydFZhbHVlID0gSW50ZWdlci5kZWNvZGUoc3RhcnQuZ2V0VGV4dCgpKS5pbnRWYWx1ZSgpOwotCQkJfQotCQkJY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlMikgewotCQkJCXN0YXJ0VmFsdWUgPSAwOwotCQkJfQotCQkJdHJ5IHsKLQkJCQlsZW5ndGhWYWx1ZSA9IEludGVnZXIuZGVjb2RlKGxlbmd0aC5nZXRUZXh0KCkpLmludFZhbHVlKCk7Ci0JCQl9Ci0JCQljYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUyKSB7Ci0JCQkJbGVuZ3RoVmFsdWUgPSAwOwotCQkJfQotCQkJc3VwZXIub2tQcmVzc2VkKCk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIGZpbmFsIFN0cmluZyBERUZBVUxUX1ZJRVdFUl9DT05URU5UUyA9ICI8P3htbCB2ZXJzaW9uPVwiMS4wXCI/PlxuPCFET0NUWVBFIHRhZ2xpYiBQVUJMSUMgXCItLy9TdW4gTWljcm9zeXN0ZW1zLCBJbmMuLy9EVEQgSlNQIFRhZyBMaWJyYXJ5IDEuMS8vRU5cIiBcImh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS9kdGRzL3dlYi1qc3B0YWdsaWJyYXJ5XzFfMS5kdGRcIj5cbiI7Ci0JcHJpdmF0ZSBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb24gZkNvbmZpZyA9IG51bGw7Ci0JcHJpdmF0ZSBJQ29udGVudE91dGxpbmVQYWdlIGZDb250ZW50T3V0bGluZVBhZ2UgPSBudWxsOwotCXByaXZhdGUgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciBmSGlnaGxpZ2h0UmFuZ2VMaXN0ZW5lciA9IG51bGw7Ci0KLQlwcml2YXRlIFN0cnVjdHVyZWRUZXh0Vmlld2VyIGZTb3VyY2VWaWV3ZXIgPSBudWxsOwotCi0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgU1NFX0VESVRPUl9GT05UID0gIm9yZy5lY2xpcHNlLndzdC5zc2UudWkudGV4dGZvbnQiOwotCi0JcHJvdGVjdGVkIHZvaWQgYWRkQWN0aW9ucyhJQ29udHJpYnV0aW9uTWFuYWdlciBtZ3IpIHsKLQkJaWYgKG1nciAhPSBudWxsKSB7Ci0JCQltZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQkJCQlyZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJCQlyZXR1cm4gIk5ldyBYTUwiOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJc3VwZXIucnVuKCk7Ci0JCQkJCUJ1c3lJbmRpY2F0b3Iuc2hvd1doaWxlKGdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKSwgbmV3IFJ1bm5hYmxlKCkgewotCQkJCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQkJCXNldHVwVmlld2VyRm9yTmV3KCk7Ci0JCQkJCQkJZlNvdXJjZVZpZXdlci5zZXRFZGl0YWJsZSh0cnVlKTsKLQkJCQkJCX0KLQkJCQkJfSk7Ci0JCQkJfQotCQkJfSk7Ci0JCQltZ3IuYWRkKG5ldyBTZXBhcmF0b3IoKSk7Ci0JCQltZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQkJCQlyZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJCQlyZXR1cm4gIkNoYW5nZSBWaXNpYmlsaXR5IjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlOdW1iZXJJbnB1dERpYWxvZyBkbGcgPSBuZXcgTnVtYmVySW5wdXREaWFsb2coZlNvdXJjZVZpZXdlci5nZXRDb250cm9sKCkuZ2V0U2hlbGwoKSk7Ci0JCQkJCWludCBwcm9jZWVkID0gZGxnLm9wZW4oKTsKLQkJCQkJaWYgKHByb2NlZWQgPT0gV2luZG93LkNBTkNFTCkKLQkJCQkJCXJldHVybjsKLQkJCQkJZlNvdXJjZVZpZXdlci5yZXNldFZpc2libGVSZWdpb24oKTsKLQkJCQkJZlNvdXJjZVZpZXdlci5zZXRWaXNpYmxlUmVnaW9uKGRsZy5zdGFydFZhbHVlLCBkbGcubGVuZ3RoVmFsdWUpOwotCQkJCX0KLQkJCX0pOwotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJTaG93IEFsbCI7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlzdXBlci5ydW4oKTsKLQkJCQkJZlNvdXJjZVZpZXdlci5yZXNldFZpc2libGVSZWdpb24oKTsKLQkJCQl9Ci0JCQl9KTsKLQkJCW1nci5hZGQobmV3IFNlcGFyYXRvcigpKTsKLQkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkJCXJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkJCXJldHVybiAiQ2hhbmdlIFZpc2liaWxpdHkgaW4gRWRpdG9yIjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlTdHJ1Y3R1cmVkVGV4dFZpZXdlciBzb3VyY2VWaWV3ZXIgPSBudWxsOwotCQkJCQlJRWRpdG9yUGFydCBwYXJ0ID0gZ2V0Vmlld1NpdGUoKS5nZXRXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCk7Ci0JCQkJCWlmIChwYXJ0ICE9IG51bGwgJiYgcGFydCBpbnN0YW5jZW9mIFN0cnVjdHVyZWRUZXh0RWRpdG9yKSB7Ci0JCQkJCQlzb3VyY2VWaWV3ZXIgPSAoKFN0cnVjdHVyZWRUZXh0RWRpdG9yKSBwYXJ0KS5nZXRUZXh0Vmlld2VyKCk7Ci0JCQkJCX0KLQkJCQkJaWYgKHNvdXJjZVZpZXdlciAhPSBudWxsKSB7Ci0JCQkJCQlOdW1iZXJJbnB1dERpYWxvZyBkbGcgPSBuZXcgTnVtYmVySW5wdXREaWFsb2coc291cmNlVmlld2VyLmdldENvbnRyb2woKS5nZXRTaGVsbCgpKTsKLQkJCQkJCWludCBwcm9jZWVkID0gZGxnLm9wZW4oKTsKLQkJCQkJCWlmIChwcm9jZWVkID09IFdpbmRvdy5DQU5DRUwpCi0JCQkJCQkJcmV0dXJuOwotCQkJCQkJc291cmNlVmlld2VyLnJlc2V0VmlzaWJsZVJlZ2lvbigpOwotCQkJCQkJc291cmNlVmlld2VyLnNldFZpc2libGVSZWdpb24oZGxnLnN0YXJ0VmFsdWUsIGRsZy5sZW5ndGhWYWx1ZSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9KTsKLQkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkJCXJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkJCXJldHVybiAiU2hvdyBBbGwgaW4gRWRpdG9yIjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlTdHJ1Y3R1cmVkVGV4dFZpZXdlciBzb3VyY2VWaWV3ZXIgPSBudWxsOwotCQkJCQlJRWRpdG9yUGFydCBwYXJ0ID0gZ2V0Vmlld1NpdGUoKS5nZXRXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCk7Ci0JCQkJCWlmIChwYXJ0ICE9IG51bGwgJiYgcGFydCBpbnN0YW5jZW9mIFN0cnVjdHVyZWRUZXh0RWRpdG9yKSB7Ci0JCQkJCQlzb3VyY2VWaWV3ZXIgPSAoKFN0cnVjdHVyZWRUZXh0RWRpdG9yKSBwYXJ0KS5nZXRUZXh0Vmlld2VyKCk7Ci0JCQkJCX0KLQkJCQkJaWYgKHNvdXJjZVZpZXdlciAhPSBudWxsKSB7Ci0JCQkJCQlzb3VyY2VWaWV3ZXIucmVzZXRWaXNpYmxlUmVnaW9uKCk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9KTsKLQkJCW1nci5hZGQobmV3IFNlcGFyYXRvcigpKTsKLQkJCS8vIG5vIGxvbmdlciBhYmxlIHRvIHNldCBpbnB1dCB0byBOVUxMCi0JCQkvLyBtZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkvLyBwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkvLyByZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCS8vIH0KLQkJCS8vCi0JCQkvLyBwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJLy8gcmV0dXJuICJTZXQgSW5wdXQgdG8gTlVMTCI7Ci0JCQkvLyB9Ci0JCQkvLyBwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkvLyBzdXBlci5ydW4oKTsKLQkJCS8vIHZpZXdlci5zZXRJbnB1dChudWxsKTsKLQkJCS8vIH0KLQkJCS8vIH0pOwotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJUYWtlIElucHV0IGZyb20gQWN0aXZlIEVkaXRvciI7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlzdXBlci5ydW4oKTsKLQkJCQkJSVRleHRFZGl0b3IgdGV4dEVkaXRvciA9IGdldEFjdGl2ZUVkaXRvcigpOwotCQkJCQlpZiAodGV4dEVkaXRvciAhPSBudWxsKSB7Ci0JCQkJCQlzZXR1cFZpZXdlckZvckVkaXRvcih0ZXh0RWRpdG9yKTsKLQkJCQkJCWZTb3VyY2VWaWV3ZXIuc2V0RWRpdGFibGUodHJ1ZSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9KTsKLQkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkJCXJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkJCXJldHVybiAiVGFrZSBJbnB1dCBhbmQgRm9sbG93IFNlbGVjdGlvbiI7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlzdXBlci5ydW4oKTsKLQkJCQkJZm9sbG93U2VsZWN0aW9uKCk7Ci0JCQkJCWZTb3VyY2VWaWV3ZXIuc2V0RWRpdGFibGUodHJ1ZSk7Ci0JCQkJfQotCQkJfSk7Ci0JCQltZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQkJCQlyZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJCQlyZXR1cm4gIlRha2UgSW5wdXQgYW5kIEZvbGxvdyBTZWxlY3Rpb24gQXMgUmVhZE9ubHkiOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJc3VwZXIucnVuKCk7Ci0JCQkJCWZvbGxvd1NlbGVjdGlvbigpOwotCQkJCQlmU291cmNlVmlld2VyLnNldEVkaXRhYmxlKGZhbHNlKTsKLQkJCQl9Ci0JCQl9KTsKLQkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkJCXJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkJCXJldHVybiAiU3RvcCBGb2xsb3dpbmcgU2VsZWN0aW9uIjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlzdG9wRm9sbG93U2VsZWN0aW9uKCk7Ci0JCQkJfQotCQkJfSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0I2NyZWF0ZVBhcnRDb250cm9sKENvbXBvc2l0ZSkKLQkgKi8KLQlwdWJsaWMgdm9pZCBjcmVhdGVQYXJ0Q29udHJvbChDb21wb3NpdGUgcGFyZW50KSB7Ci0JCUlDb250cmlidXRpb25NYW5hZ2VyIG1nciA9IGdldFZpZXdTaXRlKCkuZ2V0QWN0aW9uQmFycygpLmdldE1lbnVNYW5hZ2VyKCk7Ci0JCWFkZEFjdGlvbnMobWdyKTsKLQotCQkvLyBjcmVhdGUgc291cmNlIHZpZXdlciAmIGl0cyBjb250ZW50IHR5cGUtc3BlY2lmaWMgdmlld2VyCi0JCS8vIGNvbmZpZ3VyYXRpb24KLQkJZlNvdXJjZVZpZXdlciA9IG5ldyBTdHJ1Y3R1cmVkVGV4dFZpZXdlcihwYXJlbnQsIG51bGwsIG51bGwsIGZhbHNlLCBTV1QuTk9ORSk7Ci0JCWZDb25maWcgPSBuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uWE1MKCk7Ci0KLQkJLy8gc2V0IHVwIHRoZSB2aWV3ZXIgd2l0aCBhIGRvY3VtZW50ICYgdmlld2VyIGNvbmZpZwotCQlzZXR1cFZpZXdlckZvck5ldygpOwotCi0JCXNldHVwVmlld2VyUHJlZmVyZW5jZXMoKTsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0I2Rpc3Bvc2UoKQotCSAqLwotCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7Ci0JCXN0b3BGb2xsb3dTZWxlY3Rpb24oKTsKLQkJZlNvdXJjZVZpZXdlci51bmNvbmZpZ3VyZSgpOwotCX0KLQotCS8qKgotCSAqIEhvb2tzIHVwIHRoZSB2aWV3ZXIgdG8gZm9sbG93IHRoZSBzZWxlY3Rpb24gbWFkZSBpbiB0aGUgYWN0aXZlIGVkaXRvcgotCSAqLwotCXByaXZhdGUgdm9pZCBmb2xsb3dTZWxlY3Rpb24oKSB7Ci0JCUlUZXh0RWRpdG9yIGVkaXRvciA9IGdldEFjdGl2ZUVkaXRvcigpOwotCQlpZiAoZWRpdG9yICE9IG51bGwpIHsKLQkJCXNldHVwVmlld2VyRm9yRWRpdG9yKGVkaXRvcik7Ci0JCQlpZiAoZkhpZ2hsaWdodFJhbmdlTGlzdGVuZXIgPT0gbnVsbCkKLQkJCQlmSGlnaGxpZ2h0UmFuZ2VMaXN0ZW5lciA9IG5ldyBOb2RlUmFuZ2VTZWxlY3Rpb25MaXN0ZW5lcigpOwotCi0JCQlmQ29udGVudE91dGxpbmVQYWdlID0gKChJQ29udGVudE91dGxpbmVQYWdlKSBlZGl0b3IuZ2V0QWRhcHRlcihJQ29udGVudE91dGxpbmVQYWdlLmNsYXNzKSk7Ci0JCQlpZiAoZkNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7Ci0JCQkJZkNvbnRlbnRPdXRsaW5lUGFnZS5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoZkhpZ2hsaWdodFJhbmdlTGlzdGVuZXIpOwotCi0JCQkJaWYgKCFmQ29udGVudE91dGxpbmVQYWdlLmdldFNlbGVjdGlvbigpLmlzRW1wdHkoKSAmJiBmQ29udGVudE91dGxpbmVQYWdlLmdldFNlbGVjdGlvbigpIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKLQkJCQkJZlNvdXJjZVZpZXdlci5yZXNldFZpc2libGVSZWdpb24oKTsKLQotCQkJCQlPYmplY3RbXSBub2RlcyA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIGZDb250ZW50T3V0bGluZVBhZ2UuZ2V0U2VsZWN0aW9uKCkpLnRvQXJyYXkoKTsKLQkJCQkJSW5kZXhlZFJlZ2lvbiBzdGFydE5vZGUgPSAoSW5kZXhlZFJlZ2lvbikgbm9kZXNbMF07Ci0JCQkJCUluZGV4ZWRSZWdpb24gZW5kTm9kZSA9IChJbmRleGVkUmVnaW9uKSBub2Rlc1tub2Rlcy5sZW5ndGggLSAxXTsKLQotCQkJCQlpZiAoc3RhcnROb2RlIGluc3RhbmNlb2YgQXR0cikKLQkJCQkJCXN0YXJ0Tm9kZSA9IChJbmRleGVkUmVnaW9uKSAoKEF0dHIpIHN0YXJ0Tm9kZSkuZ2V0T3duZXJFbGVtZW50KCk7Ci0JCQkJCWlmIChlbmROb2RlIGluc3RhbmNlb2YgQXR0cikKLQkJCQkJCWVuZE5vZGUgPSAoSW5kZXhlZFJlZ2lvbikgKChBdHRyKSBlbmROb2RlKS5nZXRPd25lckVsZW1lbnQoKTsKLQotCQkJCQlpbnQgc3RhcnQgPSBzdGFydE5vZGUuZ2V0U3RhcnRPZmZzZXQoKTsKLQkJCQkJaW50IGVuZCA9IGVuZE5vZGUuZ2V0RW5kT2Zmc2V0KCk7Ci0KLQkJCQkJZlNvdXJjZVZpZXdlci5zZXRWaXNpYmxlUmVnaW9uKHN0YXJ0LCBlbmQgLSBzdGFydCk7Ci0JCQkJCWZTb3VyY2VWaWV3ZXIuc2V0U2VsZWN0ZWRSYW5nZShzdGFydCwgMCk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgY3VycmVudCBhY3RpdmUgdGV4dCBlZGl0b3IgaWYgcG9zc2libGUKLQkgKiAKLQkgKiBAcmV0dXJuIElUZXh0RWRpdG9yCi0JICovCi0JcHJpdmF0ZSBJVGV4dEVkaXRvciBnZXRBY3RpdmVFZGl0b3IoKSB7Ci0JCUlUZXh0RWRpdG9yIGVkaXRvciA9IG51bGw7Ci0JCUlFZGl0b3JQYXJ0IGVkaXRvclBhcnQgPSBnZXRTaXRlKCkuZ2V0V29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpOwotCQlpZiAoZWRpdG9yUGFydCBpbnN0YW5jZW9mIElUZXh0RWRpdG9yKQotCQkJZWRpdG9yID0gKElUZXh0RWRpdG9yKSBlZGl0b3JQYXJ0OwotCQlpZiAoZWRpdG9yID09IG51bGwgJiYgZWRpdG9yUGFydCAhPSBudWxsKQotCQkJZWRpdG9yID0gKElUZXh0RWRpdG9yKSBlZGl0b3JQYXJ0LmdldEFkYXB0ZXIoSVRleHRFZGl0b3IuY2xhc3MpOwotCQlyZXR1cm4gZWRpdG9yOwotCX0KLQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVZpZXdQYXJ0I2luaXQoSVZpZXdTaXRlLCBJTWVtZW50bykKLQkgKi8KLQlwdWJsaWMgdm9pZCBpbml0KElWaWV3U2l0ZSBzaXRlLCBJTWVtZW50byBtZW1lbnRvKSB0aHJvd3MgUGFydEluaXRFeGNlcHRpb24gewotCQlzdXBlci5pbml0KHNpdGUsIG1lbWVudG8pOwotCX0KLQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQjc2V0Rm9jdXMoKQotCSAqLwotCXB1YmxpYyB2b2lkIHNldEZvY3VzKCkgewotCQlpZiAoZlNvdXJjZVZpZXdlci5nZXRDb250cm9sKCkgIT0gbnVsbCAmJiAhZlNvdXJjZVZpZXdlci5nZXRDb250cm9sKCkuaXNEaXNwb3NlZCgpKQotCQkJZlNvdXJjZVZpZXdlci5nZXRDb250cm9sKCkuc2V0Rm9jdXMoKTsKLQl9Ci0KLQkvKioKLQkgKiBTZXRzIHVwIHRoZSB2aWV3ZXIgd2l0aCB0aGUgc2FtZSBkb2N1bWVudC9pbnB1dCBhcyB0aGUgZ2l2ZW4gZWRpdG9yCi0JICogCi0JICogQHBhcmFtIElUZXh0RWRpdG9yCi0JICogICAgICAgICAgICBlZGl0b3IgLSB0aGUgZWRpdG9yIHRvIHVzZSAqY2Fubm90IHRvIGJlIG51bGwqCi0JICovCi0JcHJpdmF0ZSB2b2lkIHNldHVwVmlld2VyRm9yRWRpdG9yKElUZXh0RWRpdG9yIGVkaXRvcikgewotCQlzdG9wRm9sbG93U2VsZWN0aW9uKCk7IC8vIGlmIHdhcyBmb2xsb3dpbmcgc2VsZWN0aW9uLCBzdG9wCi0JCUlEb2N1bWVudCBkb2MgPSBlZGl0b3IuZ2V0RG9jdW1lbnRQcm92aWRlcigpLmdldERvY3VtZW50KGVkaXRvci5nZXRFZGl0b3JJbnB1dCgpKTsKLQkJZlNvdXJjZVZpZXdlci5zZXREb2N1bWVudChkb2MpOwotCi0JCS8vIG5lZWQgdG8gcmVjb25maWd1cmUgYWZ0ZXIgc2V0IGRvY3VtZW50IGp1c3Qgc28gaGlnaGxpZ2h0ZXIgd29ya3MKLQkJZlNvdXJjZVZpZXdlci5jb25maWd1cmUobmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvblhNTCgpKTsKLQl9Ci0KLQkvKioKLQkgKiBTZXQgdXAgc291cmNlIHZpZXdlciB3aXRoIGEgbmV3IGRvY3VtZW50ICYgY29uZmlndXJlIGl0Ci0JICovCi0JcHJpdmF0ZSB2b2lkIHNldHVwVmlld2VyRm9yTmV3KCkgewotCQlzdG9wRm9sbG93U2VsZWN0aW9uKCk7IC8vIGlmIHdhcyBmb2xsb3dpbmcgc2VsZWN0aW9uLCBzdG9wCi0KLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCi0JCUlEb2N1bWVudCBkb2MgPSBtb2RlbE1hbmFnZXIuY3JlYXRlU3RydWN0dXJlZERvY3VtZW50Rm9yKENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwpOwotCQlkb2Muc2V0KERFRkFVTFRfVklFV0VSX0NPTlRFTlRTKTsKLQotCQlmU291cmNlVmlld2VyLnNldERvY3VtZW50KGRvYyk7Ci0JCS8vIG5lZWQgdG8gcmVjb25maWd1cmUgYWZ0ZXIgc2V0IGRvY3VtZW50IGp1c3Qgc28gaGlnaGxpZ2h0ZXIgd29ya3MKLQkJZlNvdXJjZVZpZXdlci5jb25maWd1cmUoZkNvbmZpZyk7Ci0JfQotCi0JLyoqCi0JICogU2V0IHVwIHNvdXJjZSB2aWV3ZXIgd2l0aCBhbnkgYWRkaXRpb25hbCBwcmVmZXJlbmNlcyBpdCBzaG91bGQgaGF2ZSBFeDoKLQkgKiBmb250LCB0YWIgd2lkdGgKLQkgKi8KLQlwcml2YXRlIHZvaWQgc2V0dXBWaWV3ZXJQcmVmZXJlbmNlcygpIHsKLQkJZlNvdXJjZVZpZXdlci5nZXRUZXh0V2lkZ2V0KCkuc2V0Rm9udChKRmFjZVJlc291cmNlcy5nZXRGb250KFNTRV9FRElUT1JfRk9OVCkpOwotCX0KLQotCS8qKgotCSAqIENlYXNlIGZvbGxvd2luZyB0aGUgc2VsZWN0aW9uIG1hZGUgaW4gdGhlIGVkaXRvcgotCSAqLwotCXByaXZhdGUgdm9pZCBzdG9wRm9sbG93U2VsZWN0aW9uKCkgewotCQlpZiAoZkNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7Ci0JCQlmQ29udGVudE91dGxpbmVQYWdlLnJlbW92ZVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihmSGlnaGxpZ2h0UmFuZ2VMaXN0ZW5lcik7Ci0JCQlmU291cmNlVmlld2VyLnJlc2V0VmlzaWJsZVJlZ2lvbigpOwotCQkJZkNvbnRlbnRPdXRsaW5lUGFnZSA9IG51bGw7Ci0JCX0KLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOTI4ZTM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLQotPHByb2plY3QKLSAgICBuYW1lPSJ0ZXN0c3VpdGUiCi0gICAgZGVmYXVsdD0icnVuIgotICAgIGJhc2VkaXI9Ii4iPgotICAgIAotICAgIDwhLS0gVGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGlzIHNjcmlwdCAtLT4KLSAgICA8IS0tICR7ZWNsaXBzZS1ob21lfSAgIC0tPgotICAgIDwhLS0gJHtidWlsZERpcmVjdG9yeX0gIC0tPgotICAgIDwhLS0gJHtidWlsZExhYmVsfSAgICAgICAgLS0+Ci0KLSAgICA8IS0tIHNob3VsZCBiZSBsaXR0bGUgbmVlZCB0byBjaGFuZ2Ugd2hhdCdzIGFib3ZlICAtLT4KLQk8cHJvcGVydHkKLQkJbmFtZT0icGx1Z2luLW5hbWUiCi0JCXZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJjbGFzc25hbWUiCi0gICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLlhNTFVJVGVzdFN1aXRlIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJ0ZXN0VHlwZSIKLSAgICAgICAgdmFsdWU9InVpLXRlc3QiIC8+Ci0KLSAgICA8IS0tIHNob3VsZCBiZSBsaXR0bGUgbmVlZCB0byBjaGFuZ2Ugd2hhdCdzIGJlbG93IC0tPgotCi0gICAgPGVjaG8gbWVzc2FnZT0iYmFzZWRpcjogJHtiYXNlZGlyfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJlY2xpcHNlLWhvbWU6ICR7ZWNsaXBzZS1ob21lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJidWlsZERpcmVjdG9yeTogJHtidWlsZERpcmVjdG9yeX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0icGx1Z2luLW5hbWU6ICR7cGx1Z2luLW5hbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImNsYXNzbmFtZTogJHtjbGFzc25hbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9InRlc3RUeXBlICR7dGVzdFR5cGV9IiAvPgotCi0KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0ibGlicmFyeS1maWxlIgotICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2UudGVzdF8zLjEuMC9saWJyYXJ5LnhtbCIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0id29ya3NwYWNlIgotICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L2p1bml0d29ya3NwYWNlcy8ke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgCi0gICAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPgotICAgIDwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+Ci0gICAgPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+Ci0gICAgPHRhcmdldCBuYW1lPSJpbml0Ij4KLSAgICAgICAgPHRzdGFtcCAvPgotICAgICAgICA8ZGVsZXRlPgotICAgICAgICAgICAgPGZpbGVzZXQKLSAgICAgICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSIKLSAgICAgICAgICAgICAgICBpbmNsdWRlcz0iJHtwbHVnaW4tbmFtZX0uKnhtbCIgLz4KLSAgICAgICAgPC9kZWxldGU+Ci0gICAgICAgIDwhLS0gbWFrZSBkaXJlY3RvcnksIGluIGNhc2UgcGF0aCBkb2Vzbid0IGV4aXN0IHlldCAtLT4KLSAgICAgICAgPG1rZGlyIGRpcj0iJHt3b3Jrc3BhY2V9IiAvPgotICAgICAgICA8IS0tICBidXQgZGVsZXRlIHRvIG1ha2Ugc3VyZSBmcmVzaCBjb250ZW50cy0tPgotICAgICAgICA8ZGVsZXRlCi0gICAgICAgICAgICBkaXI9IiR7d29ya3NwYWNlfSIKLSAgICAgICAgICAgIHF1aWV0PSJ0cnVlIiAvPgotCi0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGRlZmluZXMgdGhlIHRlc3RzIHRoYXQgbmVlZCB0byBiZSBydW4uIC0tPgotICAgIDx0YXJnZXQgbmFtZT0ic3VpdGUiPgotCi0gICAgICAgIDxhbnQKLSAgICAgICAgICAgIHRhcmdldD0iJHt0ZXN0VHlwZX0iCi0gICAgICAgICAgICBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iCi0gICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJkYXRhLWRpciIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHt3b3Jrc3BhY2V9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0icGx1Z2luLW5hbWUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iY2xhc3NuYW1lIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke2NsYXNzbmFtZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJwbHVnaW4tcGF0aCIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgIDwvYW50PgotCi0gICAgICAgIDxjb3B5Ci0gICAgICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiCi0gICAgICAgICAgICBmaWxlPSIke3dvcmtzcGFjZX0vLm1ldGFkYXRhLy5sb2ciCi0gICAgICAgICAgICB0b2ZpbGU9IiR7YnVpbGREaXJlY3Rvcnl9LyR7YnVpbGRMYWJlbH0vdGVzdFJlc3VsdHMvY29uc29sZWxvZ3MvJHtwbHVnaW4tbmFtZX0uY29uc29sZWxvZy50eHQiIC8+Ci0KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgotICAgIDwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4KLSAgICA8IS0tIGRlbGV0ZSB0ZW1wb3JhcnkgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZC4gLS0+Ci0gICAgPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KLSAgICAgICAgPCEtLSB1c3VhbGx5IG5vIG5lZWQgdG8gZGVsZXRlIHdvcmtzcGFjZSB1bnRpbCBuZXh0IHJ1biwgYW5kIGxlYXZpbmcgaXQgYWxsb3dzIGluc3BlY3Rpb24gLS0+Ci0gICAgICAgIDwhLS0gPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiIC8+IC0tPgotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSB0ZXN0IHN1aXRlLiBBbnkgYWN0aW9ucyB0aGF0IG5lZWQgdG8gaGFwcGVuIC0tPgotICAgIDwhLS0gYWZ0ZXIgYWxsIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuIHNob3VsZCBnbyBoZXJlLiAtLT4KLSAgICA8dGFyZ2V0Ci0gICAgICAgIG5hbWU9InJ1biIKLSAgICAgICAgZGVwZW5kcz0iaW5pdCxzdWl0ZSxjbGVhbnVwIj4KLSAgICAgICAgPGFudAotICAgICAgICAgICAgdGFyZ2V0PSJjb2xsZWN0IgotICAgICAgICAgICAgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iaW5jbHVkZXMiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Lip4bWwiIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJvdXRwdXQtZmlsZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0ueG1sIiAvPgotICAgICAgICA8L2FudD4KLSAgICA8L3RhcmdldD4KLQotPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9Db21wYXJlLVNjaGVtYTEtR29sZkNvdW50cnlDbHViLTAueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL0NvbXBhcmUtU2NoZW1hMS1Hb2xmQ291bnRyeUNsdWItMC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkYjE1MGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL0NvbXBhcmUtU2NoZW1hMS1Hb2xmQ291bnRyeUNsdWItMC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHRuczpHb2xmQ291bnRyeUNsdWIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0dvbGZDb3VudHJ5Q2x1YiIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0dvbGZDb3VudHJ5Q2x1YiBTY2hlbWExLnhzZCAiPgotICA8R29sZkNvdXJzZT4KLSAgICA8TmFtZT48L05hbWU+Ci0gICAgPFlhcmRhZ2U+PC9ZYXJkYWdlPgotICAgIDxQYXI+PC9QYXI+Ci0gICAgPEhhbmRpY2FwPjwvSGFuZGljYXA+Ci0gICAgPFNsb3BlPjwvU2xvcGU+Ci0gIDwvR29sZkNvdXJzZT4KLSAgPE1lbWJlci8+Ci0gIDxFbXBsb3llZT4KLSAgICA8Rmlyc3ROYW1lPjwvRmlyc3ROYW1lPgotICAgIDxMYXN0TmFtZT48L0xhc3ROYW1lPgotICAgIDxFbXBsb3llZU51bWJlcj48L0VtcGxveWVlTnVtYmVyPgotICA8L0VtcGxveWVlPgotICA8UHJvU2hvcD4KLSAgICA8R29sZkNsdWI+Ci0gICAgICA8TWFudWZhY3R1cmVyTmFtZT48L01hbnVmYWN0dXJlck5hbWU+Ci0gICAgICA8UXVhbnRpdHk+PC9RdWFudGl0eT4KLSAgICAgIDxDbHViS2luZD48L0NsdWJLaW5kPgotICAgICAgPExvZnQ+PC9Mb2Z0PgotICAgICAgPFNoYWZ0PjwvU2hhZnQ+Ci0gICAgPC9Hb2xmQ2x1Yj4KLSAgICA8Qm94T2ZCYWxscz4KLSAgICAgIDxNYW51ZmFjdHVyZXJOYW1lPjwvTWFudWZhY3R1cmVyTmFtZT4KLSAgICAgIDxRdWFudGl0eT48L1F1YW50aXR5PgotICAgICAgPFByb2R1Y3REZXRhaWxzPjwvUHJvZHVjdERldGFpbHM+Ci0gICAgPC9Cb3hPZkJhbGxzPgotICA8L1Byb1Nob3A+Ci08L3RuczpHb2xmQ291bnRyeUNsdWI+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvQ29tcGFyZS1TY2hlbWExLUdvbGZDb3VudHJ5Q2x1Yi0xLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9Db21wYXJlLVNjaGVtYTEtR29sZkNvdW50cnlDbHViLTEueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NTlmNDVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9Db21wYXJlLVNjaGVtYTEtR29sZkNvdW50cnlDbHViLTEueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx0bnM6R29sZkNvdW50cnlDbHViIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Hb2xmQ291bnRyeUNsdWIiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Hb2xmQ291bnRyeUNsdWIgU2NoZW1hMS54c2QgIj4KLSAgPEdvbGZDb3Vyc2UgTnVtYmVyT2ZIb2xlcz0iMTgiPgotICAgIDxOYW1lPjwvTmFtZT4KLSAgICA8WWFyZGFnZT48L1lhcmRhZ2U+Ci0gICAgPFBhcj48L1Bhcj4KLSAgICA8SGFuZGljYXA+PC9IYW5kaWNhcD4KLSAgICA8U2xvcGU+PC9TbG9wZT4KLSAgPC9Hb2xmQ291cnNlPgotICA8TWVtYmVyIGhhbmRpY2FwPSIwIi8+Ci0gIDxFbXBsb3llZT4KLSAgICA8Rmlyc3ROYW1lPjwvRmlyc3ROYW1lPgotICAgIDxMYXN0TmFtZT48L0xhc3ROYW1lPgotICAgIDxFbXBsb3llZU51bWJlcj48L0VtcGxveWVlTnVtYmVyPgotICA8L0VtcGxveWVlPgotICA8UHJvU2hvcD4KLSAgICA8R29sZkNsdWI+Ci0gICAgICA8TWFudWZhY3R1cmVyTmFtZT48L01hbnVmYWN0dXJlck5hbWU+Ci0gICAgICA8UXVhbnRpdHk+PC9RdWFudGl0eT4KLSAgICAgIDxDbHViS2luZD48L0NsdWJLaW5kPgotICAgICAgPExvZnQ+PC9Mb2Z0PgotICAgICAgPFNoYWZ0PjwvU2hhZnQ+Ci0gICAgPC9Hb2xmQ2x1Yj4KLSAgICA8Qm94T2ZCYWxscz4KLSAgICAgIDxNYW51ZmFjdHVyZXJOYW1lPjwvTWFudWZhY3R1cmVyTmFtZT4KLSAgICAgIDxRdWFudGl0eT48L1F1YW50aXR5PgotICAgICAgPFByb2R1Y3REZXRhaWxzPjwvUHJvZHVjdERldGFpbHM+Ci0gICAgPC9Cb3hPZkJhbGxzPgotICA8L1Byb1Nob3A+Ci08L3RuczpHb2xmQ291bnRyeUNsdWI+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvQ29tcGFyZS1TY2hlbWExLUdvbGZDb3VudHJ5Q2x1Yi0yLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9Db21wYXJlLVNjaGVtYTEtR29sZkNvdW50cnlDbHViLTIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjEyMDczLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9Db21wYXJlLVNjaGVtYTEtR29sZkNvdW50cnlDbHViLTIueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx0bnM6R29sZkNvdW50cnlDbHViIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Hb2xmQ291bnRyeUNsdWIiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Hb2xmQ291bnRyeUNsdWIgU2NoZW1hMS54c2QgIj4KLSAgPEdvbGZDb3Vyc2U+Ci0gICAgPE5hbWU+PC9OYW1lPgotICAgIDxZYXJkYWdlPjwvWWFyZGFnZT4KLSAgICA8UGFyPjwvUGFyPgotICAgIDxIYW5kaWNhcD48L0hhbmRpY2FwPgotICAgIDxTbG9wZT48L1Nsb3BlPgotICA8L0dvbGZDb3Vyc2U+Ci0gIDxNZW1iZXIvPgotICA8RW1wbG95ZWU+Ci0gICAgPEZpcnN0TmFtZT48L0ZpcnN0TmFtZT4KLSAgICA8TWlkZGxlTmFtZT48L01pZGRsZU5hbWU+Ci0gICAgPExhc3ROYW1lPjwvTGFzdE5hbWU+Ci0gICAgPEVtcGxveWVlTnVtYmVyPjwvRW1wbG95ZWVOdW1iZXI+Ci0gIDwvRW1wbG95ZWU+Ci0gIDxQcm9TaG9wPgotICAgIDxHb2xmQ2x1Yj4KLSAgICAgIDxNYW51ZmFjdHVyZXJOYW1lPjwvTWFudWZhY3R1cmVyTmFtZT4KLSAgICAgIDxRdWFudGl0eT48L1F1YW50aXR5PgotICAgICAgPENsdWJLaW5kPjwvQ2x1YktpbmQ+Ci0gICAgICA8TG9mdD48L0xvZnQ+Ci0gICAgICA8U2hhZnQ+PC9TaGFmdD4KLSAgICA8L0dvbGZDbHViPgotICAgIDxCb3hPZkJhbGxzPgotICAgICAgPE1hbnVmYWN0dXJlck5hbWU+PC9NYW51ZmFjdHVyZXJOYW1lPgotICAgICAgPFF1YW50aXR5PjwvUXVhbnRpdHk+Ci0gICAgICA8UHJvZHVjdERldGFpbHM+PC9Qcm9kdWN0RGV0YWlscz4KLSAgICA8L0JveE9mQmFsbHM+Ci0gIDwvUHJvU2hvcD4KLTwvdG5zOkdvbGZDb3VudHJ5Q2x1Yj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9Db21wYXJlLVNjaGVtYTEtR29sZkNvdW50cnlDbHViLTIwLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9Db21wYXJlLVNjaGVtYTEtR29sZkNvdW50cnlDbHViLTIwLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTNlYTg5ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvQ29tcGFyZS1TY2hlbWExLUdvbGZDb3VudHJ5Q2x1Yi0yMC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHRuczpHb2xmQ291bnRyeUNsdWIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0dvbGZDb3VudHJ5Q2x1YiIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0dvbGZDb3VudHJ5Q2x1YiBTY2hlbWExLnhzZCAiPgotICA8R29sZkNvdXJzZT4KLSAgICA8TmFtZT48L05hbWU+Ci0gICAgPFlhcmRhZ2U+PC9ZYXJkYWdlPgotICAgIDxQYXI+PC9QYXI+Ci0gICAgPEhhbmRpY2FwPjwvSGFuZGljYXA+Ci0gICAgPFNsb3BlPjwvU2xvcGU+Ci0gIDwvR29sZkNvdXJzZT4KLSAgPE1lbWJlcj4KLSAgICA8UmVzdHJpY3RlZE1lbWJlcj4KLSAgICAgIDxGaXJzdE5hbWU+PC9GaXJzdE5hbWU+Ci0gICAgICA8TGFzdE5hbWU+PC9MYXN0TmFtZT4KLSAgICAgIDxNZW1iZXJzaGlwRXhwaXJ5PjwvTWVtYmVyc2hpcEV4cGlyeT4KLSAgICAgIDxMaW1pdGVkUGxheT48L0xpbWl0ZWRQbGF5PgotICAgIDwvUmVzdHJpY3RlZE1lbWJlcj4KLSAgPC9NZW1iZXI+Ci0gIDxFbXBsb3llZT4KLSAgICA8Rmlyc3ROYW1lPjwvRmlyc3ROYW1lPgotICAgIDxMYXN0TmFtZT48L0xhc3ROYW1lPgotICAgIDxFbXBsb3llZU51bWJlcj48L0VtcGxveWVlTnVtYmVyPgotICA8L0VtcGxveWVlPgotICA8UHJvU2hvcD4KLSAgICA8R29sZkNsdWI+Ci0gICAgICA8TWFudWZhY3R1cmVyTmFtZT48L01hbnVmYWN0dXJlck5hbWU+Ci0gICAgICA8UXVhbnRpdHk+PC9RdWFudGl0eT4KLSAgICAgIDxDbHViS2luZD48L0NsdWJLaW5kPgotICAgICAgPExvZnQ+PC9Mb2Z0PgotICAgICAgPFNoYWZ0PjwvU2hhZnQ+Ci0gICAgPC9Hb2xmQ2x1Yj4KLSAgICA8Qm94T2ZCYWxscz4KLSAgICAgIDxNYW51ZmFjdHVyZXJOYW1lPjwvTWFudWZhY3R1cmVyTmFtZT4KLSAgICAgIDxRdWFudGl0eT48L1F1YW50aXR5PgotICAgICAgPFByb2R1Y3REZXRhaWxzPjwvUHJvZHVjdERldGFpbHM+Ci0gICAgPC9Cb3hPZkJhbGxzPgotICA8L1Byb1Nob3A+Ci08L3RuczpHb2xmQ291bnRyeUNsdWI+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvQ29tcGFyZS1TY2hlbWExLUdvbGZDb3VudHJ5Q2x1Yi0zMS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvQ29tcGFyZS1TY2hlbWExLUdvbGZDb3VudHJ5Q2x1Yi0zMS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3YzJhZGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL0NvbXBhcmUtU2NoZW1hMS1Hb2xmQ291bnRyeUNsdWItMzEueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx0bnM6R29sZkNvdW50cnlDbHViIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Hb2xmQ291bnRyeUNsdWIiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Hb2xmQ291bnRyeUNsdWIgU2NoZW1hMS54c2QgIj4KLSAgPEdvbGZDb3Vyc2UgTnVtYmVyT2ZIb2xlcz0iMTgiPgotICAgIDxOYW1lPk5hbWU8L05hbWU+Ci0gICAgPFlhcmRhZ2U+MTwvWWFyZGFnZT4KLSAgICA8UGFyPjE8L1Bhcj4KLSAgICA8SGFuZGljYXA+MC4wPC9IYW5kaWNhcD4KLSAgICA8U2xvcGU+U2xvcGU8L1Nsb3BlPgotICA8L0dvbGZDb3Vyc2U+Ci0gIDxNZW1iZXIgaGFuZGljYXA9IjAiPgotICAgIDxSZXN0cmljdGVkTWVtYmVyPgotICAgICAgPEZpcnN0TmFtZT5GaXJzdE5hbWU8L0ZpcnN0TmFtZT4KLSAgICAgIDxNaWRkbGVOYW1lPk1pZGRsZU5hbWU8L01pZGRsZU5hbWU+Ci0gICAgICA8TGFzdE5hbWU+TGFzdE5hbWU8L0xhc3ROYW1lPgotICAgICAgPE1lbWJlcnNoaXBFeHBpcnk+MjAwMS0wMS0wMTwvTWVtYmVyc2hpcEV4cGlyeT4KLSAgICAgIDxMaW1pdGVkUGxheT5XZWVrZGF5IE9ubHk8L0xpbWl0ZWRQbGF5PgotICAgIDwvUmVzdHJpY3RlZE1lbWJlcj4KLSAgPC9NZW1iZXI+Ci0gIDxFbXBsb3llZT4KLSAgICA8Rmlyc3ROYW1lPkZpcnN0TmFtZTwvRmlyc3ROYW1lPgotICAgIDxNaWRkbGVOYW1lPk1pZGRsZU5hbWU8L01pZGRsZU5hbWU+Ci0gICAgPExhc3ROYW1lPkxhc3ROYW1lPC9MYXN0TmFtZT4KLSAgICA8RW1wbG95ZWVOdW1iZXI+RW1wbG95ZWVOdW1iZXI8L0VtcGxveWVlTnVtYmVyPgotICA8L0VtcGxveWVlPgotICA8UHJvU2hvcD4KLSAgICA8R29sZkNsdWI+Ci0gICAgICA8TWFudWZhY3R1cmVyTmFtZT5NYW51ZmFjdHVyZXJOYW1lPC9NYW51ZmFjdHVyZXJOYW1lPgotICAgICAgPFF1YW50aXR5PjE8L1F1YW50aXR5PgotICAgICAgPENsdWJLaW5kPkRyaXZlcjwvQ2x1YktpbmQ+Ci0gICAgICA8TG9mdD5Mb2Z0PC9Mb2Z0PgotICAgICAgPFNoYWZ0PlJlZ3VsYXI8L1NoYWZ0PgotICAgIDwvR29sZkNsdWI+Ci0gICAgPEJveE9mQmFsbHM+Ci0gICAgICA8TWFudWZhY3R1cmVyTmFtZT5NYW51ZmFjdHVyZXJOYW1lPC9NYW51ZmFjdHVyZXJOYW1lPgotICAgICAgPFF1YW50aXR5PjE8L1F1YW50aXR5PgotICAgICAgPFByb2R1Y3REZXRhaWxzPlByb2R1Y3REZXRhaWxzPC9Qcm9kdWN0RGV0YWlscz4KLSAgICA8L0JveE9mQmFsbHM+Ci0gIDwvUHJvU2hvcD4KLTwvdG5zOkdvbGZDb3VudHJ5Q2x1Yj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9Db21wYXJlLVNjaGVtYTEtR29sZkNvdW50cnlDbHViLTgueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL0NvbXBhcmUtU2NoZW1hMS1Hb2xmQ291bnRyeUNsdWItOC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmNWRkZjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL0NvbXBhcmUtU2NoZW1hMS1Hb2xmQ291bnRyeUNsdWItOC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHRuczpHb2xmQ291bnRyeUNsdWIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0dvbGZDb3VudHJ5Q2x1YiIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0dvbGZDb3VudHJ5Q2x1YiBTY2hlbWExLnhzZCAiPgotICA8R29sZkNvdXJzZT4KLSAgICA8TmFtZT5OYW1lPC9OYW1lPgotICAgIDxZYXJkYWdlPjE8L1lhcmRhZ2U+Ci0gICAgPFBhcj4xPC9QYXI+Ci0gICAgPEhhbmRpY2FwPjAuMDwvSGFuZGljYXA+Ci0gICAgPFNsb3BlPlNsb3BlPC9TbG9wZT4KLSAgPC9Hb2xmQ291cnNlPgotICA8TWVtYmVyLz4KLSAgPEVtcGxveWVlPgotICAgIDxGaXJzdE5hbWU+Rmlyc3ROYW1lPC9GaXJzdE5hbWU+Ci0gICAgPExhc3ROYW1lPkxhc3ROYW1lPC9MYXN0TmFtZT4KLSAgICA8RW1wbG95ZWVOdW1iZXI+RW1wbG95ZWVOdW1iZXI8L0VtcGxveWVlTnVtYmVyPgotICA8L0VtcGxveWVlPgotICA8UHJvU2hvcD4KLSAgICA8R29sZkNsdWI+Ci0gICAgICA8TWFudWZhY3R1cmVyTmFtZT5NYW51ZmFjdHVyZXJOYW1lPC9NYW51ZmFjdHVyZXJOYW1lPgotICAgICAgPFF1YW50aXR5PjE8L1F1YW50aXR5PgotICAgICAgPENsdWJLaW5kPkRyaXZlcjwvQ2x1YktpbmQ+Ci0gICAgICA8TG9mdD5Mb2Z0PC9Mb2Z0PgotICAgICAgPFNoYWZ0PlJlZ3VsYXI8L1NoYWZ0PgotICAgIDwvR29sZkNsdWI+Ci0gICAgPEJveE9mQmFsbHM+Ci0gICAgICA8TWFudWZhY3R1cmVyTmFtZT5NYW51ZmFjdHVyZXJOYW1lPC9NYW51ZmFjdHVyZXJOYW1lPgotICAgICAgPFF1YW50aXR5PjE8L1F1YW50aXR5PgotICAgICAgPFByb2R1Y3REZXRhaWxzPlByb2R1Y3REZXRhaWxzPC9Qcm9kdWN0RGV0YWlscz4KLSAgICA8L0JveE9mQmFsbHM+Ci0gIDwvUHJvU2hvcD4KLTwvdG5zOkdvbGZDb3VudHJ5Q2x1Yj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9Db21wYXJlLVNjaGVtYTItQmlsbEluZm8tMzEueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL0NvbXBhcmUtU2NoZW1hMi1CaWxsSW5mby0zMS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmYTI4NzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL0NvbXBhcmUtU2NoZW1hMi1CaWxsSW5mby0zMS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08dG5zOkJpbGxJbmZvIGFjY291bnRUeXBlPSIiIGFtbW91bnQ9IjAuMCIgZGF0ZT0iMjAwMS0wMS0wMSIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL1Bob25lQmFua2luZyIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL1Bob25lQmFua2luZyBTY2hlbWEyLnhzZCAiPgotICA8dG5zOnBheWVlIGFjY291bnRDb2RlPSIiIG5hbWU9IiIvPgotPC90bnM6QmlsbEluZm8+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvTm9uOEJpdENoYXJzL2ludGVybmF0aW9uYWwtaW5zdGFuY2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL05vbjhCaXRDaGFycy9pbnRlcm5hdGlvbmFsLWluc3RhbmNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGYzMGJkOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvTm9uOEJpdENoYXJzL2ludGVybmF0aW9uYWwtaW5zdGFuY2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxtdWx0aS1yb290IHhzaTpub05hbWVzcGFjZVNjaGVtYUxvY2F0aW9uPSJpbnRlcm5hdGlvbmFsLnhzZCIgeG1sbnM9IiIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSI+Ci0JPHJvb3Q+VGhlIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSBsYXp5IGRvZzwvcm9vdD4KLQk867+M66as7ISx67aEPuu5oOuluCDqsIjsg4kg7Jes7Jqw64qUIOqyjOycvOuluCDqsJzsl5Ag6rCV7ZWY7ZWc64ukPC/rv4zrpqzshLHrtoQ+Ci0JPOagueWFg+e0oD7ov5nlj6rlv6vmo5XoibLni5Dni7jot7Pov4fmh5Lmg7Dni5c8L+agueWFg+e0oD4KLQk8cm9vdD7ov5nlj6rlv6vmo5XoibLni5Dni7jot7Pov4fmh5Lmg7Dni5c8L3Jvb3Q+Ci0JPOu/jOumrOyEseu2hD5UaGUgcXVpY2sgYnJvd24gZm94IGp1bXBzIG92ZXIgdGhlIGxhenkgZG9nPC/rv4zrpqzshLHrtoQ+Ci0JPOu/jOumrOyEseu2hD5UaGUgcXVpY2sgYnJvd24gZm94IGp1bXBzIG92ZXIgdGhlIGxhenkgZG9nPC/rv4zrpqzshLHrtoQ+Ci0JPOagueWFg+e0oD7ruaDrpbgg6rCI7IOJIOyXrOyasOuKlCDqsozsnLzrpbgg6rCc7JeQIOqwle2VmO2VnOuLpDwv5qC55YWD57SgPgotPC9tdWx0aS1yb290PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL05vbjhCaXRDaGFycy9pbnRlcm5hdGlvbmFsLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9Ob244Qml0Q2hhcnMvaW50ZXJuYXRpb25hbC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3ZDEzY2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL05vbjhCaXRDaGFycy9pbnRlcm5hdGlvbmFsLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOnhtbD0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIj4KLQotCTwhLS08eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIgc2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMDMveG1sLnhzZCIvPi0tPgotCi0JPHhzZDplbGVtZW50IG5hbWU9Im11bHRpLXJvb3QiPgotCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0JCQkJPHhzZDplbGVtZW50IHJlZj0icm9vdCIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPHhzZDplbGVtZW50IHJlZj0i67+M66as7ISx67aEIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQk8eHNkOmVsZW1lbnQgcmVmPSLmoLnlhYPntKAiIG1pbk9jY3Vycz0iMCIvPgotCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0icm9vdCIgdHlwZT0icHJvc2UiIC8+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0i67+M66as7ISx67aEIiB0eXBlPSJwcm9zZSIvPgotCi0JPHhzZDplbGVtZW50IG5hbWU9IuagueWFg+e0oCIgdHlwZT0icHJvc2UiIC8+Ci0KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0icHJvc2UiPgotCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotCQkJPHhzZDpwYXR0ZXJuIHZhbHVlPSJUaGUgcXVpY2sgYnJvd24gZm94IGp1bXBzIG92ZXIgdGhlIGxhenkgZG9nIi8+Ci0JCQk8eHNkOnBhdHRlcm4gdmFsdWU9Iui/meWPquW/q+ajleiJsueLkOeLuOi3s+i/h+aHkuaDsOeLlyIvPgotCQkJPHhzZDpwYXR0ZXJuIHZhbHVlPSLruaDrpbgg6rCI7IOJIOyXrOyasOuKlCDqsozsnLzrpbgg6rCc7JeQIOqwle2VmO2VnOuLpCIvPgotCQk8L3hzZDpyZXN0cmljdGlvbj4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCi08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1NjaGVtYTEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1NjaGVtYTEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZTkxMTM4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9TY2hlbWExLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE2MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Hb2xmQ291bnRyeUNsdWIiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Hb2xmQ291bnRyeUNsdWIiPgotCi0gIDxlbGVtZW50IG5hbWU9IkdvbGZDb3VudHJ5Q2x1YiI+Ci0gICAgPGNvbXBsZXhUeXBlPgotICAgICAgPHNlcXVlbmNlPgotICAgICAgICA8ZWxlbWVudCBuYW1lPSJHb2xmQ291cnNlIiB0eXBlPSJ0bnM6R29sZkNvdXJzZVR5cGUiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBtaW5PY2N1cnM9IjEiPjwvZWxlbWVudD4KLSAgICAgICAgPGVsZW1lbnQgbmFtZT0iTWVtYmVyIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbWluT2NjdXJzPSIxIj4KLSAgICAgICAgICA8Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8Y2hvaWNlPgotICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJSZXN0cmljdGVkTWVtYmVyIiB0eXBlPSJ0bnM6UmVzdHJpY3RlZE1lbWJlclR5cGUiPjwvZWxlbWVudD4KLSAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iUmVndWxhck1lbWJlciIgdHlwZT0idG5zOlJlZ3VsYXJNZW1iZXJUeXBlIj48L2VsZW1lbnQ+Ci0gICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9IkV4Y2x1c2l2ZU1lbWJlciIgdHlwZT0idG5zOkV4Y2x1c2l2ZU1lbWJlclR5cGUiPgotICAgICAgICAgICAgICAgIDxhbm5vdGF0aW9uPgotICAgICAgICAgICAgICAgICAgPGRvY3VtZW50YXRpb24+TGlmZS10aW1lIG1lbWJlcjwvZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICAgICAgICAgIDwvZWxlbWVudD4KLSAgICAgICAgICAgIDwvY2hvaWNlPgotICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJoYW5kaWNhcCIgdHlwZT0ibm9uTmVnYXRpdmVJbnRlZ2VyIj48L2F0dHJpYnV0ZT4KLSAgICAgICAgICA8L2NvbXBsZXhUeXBlPgotICAgICAgICA8L2VsZW1lbnQ+Ci0gICAgICAgIDxlbGVtZW50IG5hbWU9IkVtcGxveWVlIiB0eXBlPSJ0bnM6RW1wbG95ZWVUeXBlIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbWluT2NjdXJzPSIxIj48L2VsZW1lbnQ+Ci0gICAgICAgIDxlbGVtZW50IG5hbWU9IlByb1Nob3AiPgotICAgICAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iR29sZkNsdWIiIHR5cGU9InRuczpHb2xmQ2x1YlR5cGUiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBtaW5PY2N1cnM9IjEiPjwvZWxlbWVudD4KLSAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iQm94T2ZCYWxscyIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG1pbk9jY3Vycz0iMSIgdHlwZT0idG5zOkJveE9mQmFsbHNUeXBlIj48L2VsZW1lbnQ+Ci0gICAgICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgICAgIDwvY29tcGxleFR5cGU+Ci0gICAgICAgIDwvZWxlbWVudD4KLSAgICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLSAgPC9lbGVtZW50PgotCi0gIDxjb21wbGV4VHlwZSBuYW1lPSJSZWd1bGFyTWVtYmVyVHlwZSI+Ci0gICAgPGNvbXBsZXhDb250ZW50PgotICAgICAgPGV4dGVuc2lvbiBiYXNlPSJ0bnM6UGVyc29uVHlwZSI+Ci0gICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJNZW1iZXJzaGlwRXhwaXJ5IiB0eXBlPSJkYXRlIj48L2VsZW1lbnQ+Ci0gICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICA8L2V4dGVuc2lvbj4KLSAgICA8L2NvbXBsZXhDb250ZW50PgotICA8L2NvbXBsZXhUeXBlPgotCi0gIDxjb21wbGV4VHlwZSBuYW1lPSJHb2xmQ2x1YlR5cGUiPgotICAgIDxjb21wbGV4Q29udGVudD4KLQotICAgICAgPGV4dGVuc2lvbiBiYXNlPSJ0bnM6R29sZk1hbnVmYWN0dXJlclR5cGUiPgotICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgPGVsZW1lbnQgbmFtZT0iQ2x1YktpbmQiIHR5cGU9InRuczpDbHViS2luZFR5cGUiPjwvZWxlbWVudD4KLSAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJMb2Z0IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD4KLSAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJTaGFmdCIgdHlwZT0idG5zOlNoYWZ0VHlwZSI+PC9lbGVtZW50PgotICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgPC9leHRlbnNpb24+Ci0gICAgPC9jb21wbGV4Q29udGVudD4KLSAgPC9jb21wbGV4VHlwZT4KLQotICA8c2ltcGxlVHlwZSBuYW1lPSJDbHViS2luZFR5cGUiPgotICAgIDxyZXN0cmljdGlvbiBiYXNlPSJzdHJpbmciPgotICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSJEcml2ZXIiPjwvZW51bWVyYXRpb24+Ci0gICAgICA8ZW51bWVyYXRpb24gdmFsdWU9Ildvb2QiPjwvZW51bWVyYXRpb24+Ci0gICAgICA8ZW51bWVyYXRpb24gdmFsdWU9Iklyb24iPjwvZW51bWVyYXRpb24+Ci0gICAgICA8ZW51bWVyYXRpb24gdmFsdWU9IldlZGdlIj48L2VudW1lcmF0aW9uPgotICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSJQdXR0ZXIiPjwvZW51bWVyYXRpb24+Ci0gICAgPC9yZXN0cmljdGlvbj4KLSAgPC9zaW1wbGVUeXBlPgotCi0gIDxzaW1wbGVUeXBlIG5hbWU9IlNoYWZ0VHlwZSI+Ci0gICAgPHJlc3RyaWN0aW9uIGJhc2U9InN0cmluZyI+Ci0gICAgICA8ZW51bWVyYXRpb24gdmFsdWU9IlJlZ3VsYXIiPjwvZW51bWVyYXRpb24+Ci0gICAgICA8ZW51bWVyYXRpb24gdmFsdWU9IlN0aWZmIj48L2VudW1lcmF0aW9uPgotICAgIDwvcmVzdHJpY3Rpb24+Ci0gIDwvc2ltcGxlVHlwZT4KLQotICA8ZWxlbWVudCBuYW1lPSJHb2xmQ2x1YiIgdHlwZT0idG5zOkdvbGZDbHViVHlwZSI+PC9lbGVtZW50PgotCi0gIDxjb21wbGV4VHlwZSBuYW1lPSJQZXJzb25UeXBlIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJGaXJzdE5hbWUiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PgotICAgICAgPGVsZW1lbnQgbmFtZT0iTWlkZGxlTmFtZSIgdHlwZT0ic3RyaW5nIiBtYXhPY2N1cnM9IjEiIG1pbk9jY3Vycz0iMCI+PC9lbGVtZW50PgotICAgICAgPGVsZW1lbnQgbmFtZT0iTGFzdE5hbWUiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PgotICAgIDwvc2VxdWVuY2U+Ci0gIDwvY29tcGxleFR5cGU+Ci0KLSAgPGNvbXBsZXhUeXBlIG5hbWU9IkVtcGxveWVlVHlwZSI+Ci0gICAgPGNvbXBsZXhDb250ZW50PgotICAgICAgPGV4dGVuc2lvbiBiYXNlPSJ0bnM6UGVyc29uVHlwZSI+Ci0gICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJFbXBsb3llZU51bWJlciIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+Ci0gICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICA8L2V4dGVuc2lvbj4KLSAgICA8L2NvbXBsZXhDb250ZW50PgotICA8L2NvbXBsZXhUeXBlPgotCi0gIDxjb21wbGV4VHlwZSBuYW1lPSJHb2xmQ291cnNlVHlwZSI+Ci0gICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0iTmFtZSIgdHlwZT0ic3RyaW5nIj4KLSAgICAgICAgPGFubm90YXRpb24+Ci0gICAgICAgICAgPGRvY3VtZW50YXRpb24+TmFtZSBvZiB0aGUgY291cnNlPC9kb2N1bWVudGF0aW9uPgotICAgICAgICA8L2Fubm90YXRpb24+Ci0gICAgICA8L2VsZW1lbnQ+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJZYXJkYWdlIiB0eXBlPSJwb3NpdGl2ZUludGVnZXIiPjwvZWxlbWVudD4KLSAgICAgIDxlbGVtZW50IG5hbWU9IlBhciIgdHlwZT0icG9zaXRpdmVJbnRlZ2VyIj48L2VsZW1lbnQ+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJIYW5kaWNhcCI+Ci0gICAgICAgIDxzaW1wbGVUeXBlPgotICAgICAgICAgIDxyZXN0cmljdGlvbiBiYXNlPSJmbG9hdCI+Ci0gICAgICAgICAgICA8bWluSW5jbHVzaXZlIHZhbHVlPSIwIj48L21pbkluY2x1c2l2ZT4KLSAgICAgICAgICA8L3Jlc3RyaWN0aW9uPgotICAgICAgICA8L3NpbXBsZVR5cGU+Ci0gICAgICA8L2VsZW1lbnQ+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJTbG9wZSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgICA8YXR0cmlidXRlIG5hbWU9Ik51bWJlck9mSG9sZXMiIHR5cGU9InBvc2l0aXZlSW50ZWdlciIgZml4ZWQ9IjE4Ij48L2F0dHJpYnV0ZT4KLSAgPC9jb21wbGV4VHlwZT4KLQotICA8Y29tcGxleFR5cGUgbmFtZT0iR29sZk1hbnVmYWN0dXJlclR5cGUiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Ik1hbnVmYWN0dXJlck5hbWUiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PgotICAgICAgPGVsZW1lbnQgbmFtZT0iUXVhbnRpdHkiIHR5cGU9InBvc2l0aXZlSW50ZWdlciI+PC9lbGVtZW50PgotICAgIDwvc2VxdWVuY2U+Ci0gIDwvY29tcGxleFR5cGU+Ci0KLSAgPGNvbXBsZXhUeXBlIG5hbWU9IkJveE9mQmFsbHNUeXBlIj4KLSAgICA8Y29tcGxleENvbnRlbnQ+Ci0gICAgICA8ZXh0ZW5zaW9uIGJhc2U9InRuczpHb2xmTWFudWZhY3R1cmVyVHlwZSI+Ci0gICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJQcm9kdWN0RGV0YWlscyIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+Ci0gICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICA8L2V4dGVuc2lvbj4KLSAgICA8L2NvbXBsZXhDb250ZW50PgotICA8L2NvbXBsZXhUeXBlPgotCi0gIDxjb21wbGV4VHlwZSBuYW1lPSJFeGNsdXNpdmVNZW1iZXJUeXBlIj4KLSAgICA8Y29tcGxleENvbnRlbnQ+Ci0gICAgICA8ZXh0ZW5zaW9uIGJhc2U9InRuczpQZXJzb25UeXBlIj4KLSAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgIDxlbGVtZW50IG5hbWU9IlZhbGV0UGFya2luZ0lEIiB0eXBlPSJwb3NpdGl2ZUludGVnZXIiPjwvZWxlbWVudD4KLSAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJMb2NrZXJOdW1iZXIiIHR5cGU9InBvc2l0aXZlSW50ZWdlciI+PC9lbGVtZW50PgotICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgPC9leHRlbnNpb24+Ci0gICAgPC9jb21wbGV4Q29udGVudD4KLSAgPC9jb21wbGV4VHlwZT4KLQotICA8Y29tcGxleFR5cGUgbmFtZT0iUmVzdHJpY3RlZE1lbWJlclR5cGUiPgotICAgIDxjb21wbGV4Q29udGVudD4KLSAgICAgIDxleHRlbnNpb24gYmFzZT0idG5zOlBlcnNvblR5cGUiPgotICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgPGVsZW1lbnQgbmFtZT0iTWVtYmVyc2hpcEV4cGlyeSIgdHlwZT0iZGF0ZSI+PC9lbGVtZW50PgotICAgICAgICAgIDxlbGVtZW50IG5hbWU9IkxpbWl0ZWRQbGF5IiB0eXBlPSJ0bnM6TGltaXRlZFBsYXlUeXBlIj48L2VsZW1lbnQ+Ci0gICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICA8L2V4dGVuc2lvbj4KLSAgICA8L2NvbXBsZXhDb250ZW50PgotICA8L2NvbXBsZXhUeXBlPgotCi0gIDxzaW1wbGVUeXBlIG5hbWU9IkxpbWl0ZWRQbGF5VHlwZSI+Ci0gICAgPHJlc3RyaWN0aW9uIGJhc2U9InN0cmluZyI+Ci0gICAgICA8ZW51bWVyYXRpb24gdmFsdWU9IldlZWtkYXkgT25seSI+PC9lbnVtZXJhdGlvbj4KLSAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0iV2Vla2VuZCBPbmx5Ij48L2VudW1lcmF0aW9uPgotICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSJBbnl0aW1lIGFmdGVyIHR3aWxpZ2h0Ij48L2VudW1lcmF0aW9uPgotICAgIDwvcmVzdHJpY3Rpb24+Ci0gIDwvc2ltcGxlVHlwZT4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1NjaGVtYTIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1NjaGVtYTIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMTU4Mzk4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9TY2hlbWEyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL1Bob25lQmFua2luZyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL1Bob25lQmFua2luZyIgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgotCi0gICAgPGVsZW1lbnQgbmFtZT0iQWNjb3VudEluZm8iIHR5cGU9InRuczpBY2NvdW50VHlwZSI+PC9lbGVtZW50PgotICAgIAotICAgIDxlbGVtZW50IG5hbWU9IlBheWVlIiB0eXBlPSJ0bnM6UGF5ZWUiPjwvZWxlbWVudD4KLSAgICAKLSAgICA8ZWxlbWVudCBuYW1lPSJQYXllZUxpc3QiIHR5cGU9InRuczpQYXllZUxpc3QiPjwvZWxlbWVudD4KLSAgICAKLSAgICA8Y29tcGxleFR5cGUgbmFtZT0iUGF5ZWVMaXN0Ij4KLSAgICAJPHNlcXVlbmNlPgotICAgIAkJPGVsZW1lbnQgbmFtZT0icGF5ZWUiIHR5cGU9InRuczpQYXllZSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG1pbk9jY3Vycz0iMCI+PC9lbGVtZW50PgotICAgIAk8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0KLSAgICA8Y29tcGxleFR5cGUgbmFtZT0iUGF5ZWUiPgotICAgIAk8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InN0cmluZyI+PC9hdHRyaWJ1dGU+Ci0gICAgCTxhdHRyaWJ1dGUgbmFtZT0iYWNjb3VudENvZGUiIHR5cGU9InN0cmluZyI+PC9hdHRyaWJ1dGU+Ci0gICAgPC9jb21wbGV4VHlwZT4KLQotICAgIDxlbGVtZW50IG5hbWU9IkFjY291bnRTdW1tYXJ5IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD4KLQotICAgIDxlbGVtZW50IG5hbWU9IkNvbXBsZXRpb25Db2RlIiB0eXBlPSJ0bnM6Q29tcGxldGlvbkNvZGUiPjwvZWxlbWVudD4KLSAgICAKLSAgICA8ZWxlbWVudCBuYW1lPSJWZXJpZmljYXRpb25Db2RlIiB0eXBlPSJ0bnM6VmVyaWZpY2F0aW9uQ29kZSI+PC9lbGVtZW50PgotICAgIAotICAgIDxlbGVtZW50IG5hbWU9IkJpbGxJbmZvIiB0eXBlPSJ0bnM6QmlsbEluZm8iPjwvZWxlbWVudD4KLSAgICAKLSAgICA8Y29tcGxleFR5cGUgbmFtZT0iQWNjb3VudFR5cGUiPgotICAgIAk8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InN0cmluZyI+PC9hdHRyaWJ1dGU+Ci0gICAgCTxhdHRyaWJ1dGUgbmFtZT0iYWNjb3VudElkIiB0eXBlPSJzdHJpbmciPjwvYXR0cmlidXRlPgotICAgIDwvY29tcGxleFR5cGU+Ci0KLSAgICA8Y29tcGxleFR5cGUgbmFtZT0iVmVyaWZpY2F0aW9uQ29kZSI+Ci0gICAgCTxhdHRyaWJ1dGUgbmFtZT0iY29tcGxldGVkIiB0eXBlPSJib29sZWFuIj48L2F0dHJpYnV0ZT4KLSAgICAJPGF0dHJpYnV0ZSBuYW1lPSJjb2RlIiB0eXBlPSJzdHJpbmciPjwvYXR0cmlidXRlPgotICAgIDwvY29tcGxleFR5cGU+Ci0KLSAgICA8Y29tcGxleFR5cGUgbmFtZT0iQ29tcGxldGlvbkNvZGUiPgotICAgIAk8YXR0cmlidXRlIG5hbWU9ImNvbXBsZXRlZCIgdHlwZT0iYm9vbGVhbiI+PC9hdHRyaWJ1dGU+Ci0gICAgPC9jb21wbGV4VHlwZT4KLQotICAgIDxjb21wbGV4VHlwZSBuYW1lPSJCaWxsSW5mbyI+Ci0gICAgCTxzZXF1ZW5jZT4KLSAgICAJCTxlbGVtZW50IG5hbWU9InBheWVlIiB0eXBlPSJ0bnM6UGF5ZWUiPjwvZWxlbWVudD4KLSAgICAJPC9zZXF1ZW5jZT4KLSAgICAJPGF0dHJpYnV0ZSBuYW1lPSJhbW1vdW50IiB0eXBlPSJkb3VibGUiPjwvYXR0cmlidXRlPgotICAgIAk8YXR0cmlidXRlIG5hbWU9ImFjY291bnRUeXBlIiB0eXBlPSJzdHJpbmciPjwvYXR0cmlidXRlPgotICAgIAk8YXR0cmlidXRlIG5hbWU9ImRhdGUiIHR5cGU9ImRhdGUiPjwvYXR0cmlidXRlPgotICAgIDwvY29tcGxleFR5cGU+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2YzYwMjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMvIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNCIvPgotCTxjbGFzc3BhdGhlbnRyeSBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiIGtpbmQ9ImNvbiI+Ci0JCTxhY2Nlc3NydWxlcz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49Im9yZy9lY2xpcHNlL3dzdC8qKiIvPgotCQk8L2FjY2Vzc3J1bGVzPgotCTwvY2xhc3NwYXRoZW50cnk+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy8uY3ZzaWdub3JlIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyZTk0YTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLWJpbgotdGVtcC5mb2xkZXIKLWJ1aWxkLnhtbAotdmFsaWRhdGV4bWx0ZXN0cy5qYXIKLWphdmFDb21waWxlci52YWxpZGF0ZXhtbHRlc3RzLmphci5hcmdzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExMjU2MmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZmE1YzkxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjMyIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotZW5jb2RpbmcvPHByb2plY3Q+PUlTTy04ODU5LTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlYzU3NTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNNb24gQXByIDE3IDAxOjQ4OjM5IEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotbGluZS5zZXBhcmF0b3I9XHJcbgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmN2JhYzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLSNTYXQgQXVnIDE5IDE2OjMxOjQzIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5jbGVhbk91dHB1dEZvbGRlcj1jbGVhbgotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5kdXBsaWNhdGVSZXNvdXJjZVRhc2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5pbnZhbGlkQ2xhc3NwYXRoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5yZXNvdXJjZUNvcHlFeGNsdXNpb25GaWx0ZXI9Ki5sYXVuY2gKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNpcmN1bGFyQ2xhc3NwYXRoPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGguZXhjbHVzaW9uUGF0dGVybnM9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLm11bHRpcGxlT3V0cHV0TG9jYXRpb25zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZG9jLmNvbW1lbnQuc3VwcG9ydD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5tYXhQcm9ibGVtUGVyVW5pdD0xMDAKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NEZXByZWNhdGVkUmVmPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzTm90VmlzaWJsZVJlZj1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHJpdmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c092ZXJyaWRpbmc9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wdWJsaWMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wcml2YXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuc2FmZVR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGF0aWJsZUpES0xldmVsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wbGV0ZUNsYXNzcGF0aD1lcnJvcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzAxYzdhZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotI01vbiBBcHIgMTcgMDE6NDg6MzkgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1pbnRlcm5hbC5kZWZhdWx0LmNvbXBsaWFuY2U9ZGVmYXVsdAotb3JnLmVjbGlwc2UuamR0LnVpLnRleHQuY3VzdG9tX2NvZGVfdGVtcGxhdGVzPTw/eG1sIHZlcnNpb25cPSIxLjAiIGVuY29kaW5nXD0iVVRGLTgiPz5cclxuPHRlbXBsYXRlcy8+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU5MzY4Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozMiBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLmVuYWJsZS5wcm9qZWN0LnJlZmFjdG9yaW5nLmhpc3Rvcnk9ZmFsc2UKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjNTIyYmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0jTW9uIEFwciAxNyAwMjowMTozMyBFRFQgMjAwNgotY29tcGlsZXJzLmluY29tcGF0aWJsZS1lbnZpcm9ubWVudD0wCi1jb21waWxlcnMucC5idWlsZD0wCi1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLmlsbGVnYWwtYXR0LXZhbHVlPTAKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0wCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0wCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy5wLnVudXNlZC1lbGVtZW50LW9yLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzI5NGVmYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUuMAotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzCi1CdW5kbGUtVmVyc2lvbjogMS4wLjUwMC5xdWFsaWZpZXIKLUJ1bmRsZS1DbGFzc1BhdGg6IHZhbGlkYXRleG1sdGVzdHMuamFyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMuaW50ZXJuYWwuWE1MVmFsaWRhdG9yVGVzdHNQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yLjAKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZWNsaXBzZTt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVycm9yY3VzdG9taXphdGlvbjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbDt4LWludGVybmFsOj10cnVlCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmp1bml0O2J1bmRsZS12ZXJzaW9uPSJbMy44LjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLAotIG9yZy5lY2xpcHNlLndzdC54bWwudWksCi0gb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24sCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51cmlyZXNvbHZlcgotQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL2Fib3V0Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE5OWRmMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPkp1bmUsIDIwMDg8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzBiMGIxNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLWJpbi5pbmNsdWRlcyA9IHRlc3QueG1sLFwKLSAgICAgICAgICAgICAgIHRlc3RyZXNvdXJjZXMvLFwKLSAgICAgICAgICAgICAgIHZhbGlkYXRleG1sdGVzdHMuamFyLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzCi1zb3VyY2UudmFsaWRhdGV4bWx0ZXN0cy5qYXIgPSBzcmMvCi1iaW4uZXhjbHVkZXMgPSB0ZXN0cmVzb3VyY2VzLy5jdnNpZ25vcmUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9wbHVnaW4ucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODNmYWFmNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIHByb3BlcnRpZXMgZmlsZSBmb3Igb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzCi1CdW5kbGUtVmVuZG9yLjAgPSBFY2xpcHNlCi1CdW5kbGUtTmFtZS4wID0gWE1MIFZhbGlkYXRvciBUZXN0cyBQbHVnLWluClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9YTUxWYWxpZGF0aW9uQ29uZmlndXJhdGlvblRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vWE1MVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb25UZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmM2UwNTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9YTUxWYWxpZGF0aW9uQ29uZmlndXJhdGlvblRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLS8qKgotICogVGVzdCB0aGUgWE1MVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24gY2xhc3MuCi0gKi8KLXB1YmxpYyBjbGFzcyBYTUxWYWxpZGF0aW9uQ29uZmlndXJhdGlvblRlc3QgZXh0ZW5kcyBUZXN0Q2FzZQotewotICBYTUxWYWxpZGF0aW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uOwotCQotICAvKioKLSAgICogQ3JlYXRlIGEgdGVzdHMgc3VpdGUgZnJvbSB0aGlzIHRlc3QgY2xhc3MuCi0gICAqIAotICAgKiBAcmV0dXJuIEEgdGVzdCBzdWl0ZSBjb250YWluaW5nIHRoaXMgdGVzdCBjbGFzcy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IFRlc3RTdWl0ZShYTUxWYWxpZGF0aW9uQ29uZmlndXJhdGlvblRlc3QuY2xhc3MpOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiAKLSAgewotCXN1cGVyLnNldFVwKCk7Ci0JY29uZmlndXJhdGlvbiA9IG5ldyBYTUxWYWxpZGF0aW9uQ29uZmlndXJhdGlvbigpOwotICB9Ci0KLQotICBwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gCi0gIHsKLQljb25maWd1cmF0aW9uID0gbnVsbDsKLQlzdXBlci50ZWFyRG93bigpOwotICB9Ci0KLQotICAvKioKLSAgICogVGVzdCB0aGUgZGVmYXVsdCBzZXR0aW5nIG9mIHRoZSBXQVJOX05PX0dSQU1NQVIgZmVhdHVyZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RTZXRXYXJuTm9HcmFtbWFyRmVhdHVyZURlZmF1bHQoKQotICB7Ci0JdHJ5Ci0JewotCQlhc3NlcnRGYWxzZSgiVGhlIFdBUk5fTk9fR1JBTU1BUiBmZWF0dXJlIGlzIG5vdCBzZXQgYnkgZGVmYXVsdCB0byBmYWxzZS4iLCBjb25maWd1cmF0aW9uLmdldEZlYXR1cmUoWE1MVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24uV0FSTl9OT19HUkFNTUFSKSk7Ci0JfQotCWNhdGNoKEV4Y2VwdGlvbiBlKQotCXsKLQkgIGZhaWwoIlVuYWJsZSB0byBzZXQgcmVhZCB0aGUgV0FSTl9OT19HUkFNTUFSIGZlYXR1cmU6ICIgKyBlKTsKLQl9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IHNldHRpbmcgdGhlIFdBUk5fTk9fR1JBTU1BUiBmZWF0dXJlIHRvIHRydWUuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0U2V0V2Fybk5vR3JhbW1hckZlYXR1cmVUcnVlKCkKLSAgewotCXRyeQotCXsKLQkgIGNvbmZpZ3VyYXRpb24uc2V0RmVhdHVyZShYTUxWYWxpZGF0aW9uQ29uZmlndXJhdGlvbi5XQVJOX05PX0dSQU1NQVIsIHRydWUpOwotCSAgYXNzZXJ0VHJ1ZSgiVGhlIFdBUk5fTk9fR1JBTU1BUiBmZWF0dXJlIGlzIG5vdCBzZXQgdG8gdHJ1ZS4iLCBjb25maWd1cmF0aW9uLmdldEZlYXR1cmUoWE1MVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24uV0FSTl9OT19HUkFNTUFSKSk7Ci0JfQotCWNhdGNoKEV4Y2VwdGlvbiBlKQotCXsKLQkgIGZhaWwoIlVuYWJsZSB0byBzZXQgV0FSTl9OT19HUkFNTUFSIHRvIHRydWU6ICIgKyBlKTsKLQl9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IHNldHRpbmcgdGhlIFdBUk5fTk9fR1JBTU1BUiBmZWF0dXJlIHRvIGZhbHNlLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFNldFdhcm5Ob0dyYW1tYXJGZWF0dXJlRmFsc2UoKQotICB7Ci0JdHJ5Ci0JewotCSAgY29uZmlndXJhdGlvbi5zZXRGZWF0dXJlKFhNTFZhbGlkYXRpb25Db25maWd1cmF0aW9uLldBUk5fTk9fR1JBTU1BUiwgZmFsc2UpOwotCSAgYXNzZXJ0RmFsc2UoIlRoZSBXQVJOX05PX0dSQU1NQVIgZmVhdHVyZSBpcyBub3Qgc2V0IHRvIGZhbHNlLiIsIGNvbmZpZ3VyYXRpb24uZ2V0RmVhdHVyZShYTUxWYWxpZGF0aW9uQ29uZmlndXJhdGlvbi5XQVJOX05PX0dSQU1NQVIpKTsKLQl9Ci0JY2F0Y2goRXhjZXB0aW9uIGUpCi0JewotCSAgZmFpbCgiVW5hYmxlIHRvIHNldCBXQVJOX05PX0dSQU1NQVIgdG8gZmFsc2U6ICIgKyBlKTsKLQl9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IHNldHRpbmcgYSBmZWF0dXJlIHRoYXQgZG9lc24ndCBleGlzdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RTZXROb3RFeGlzdGFudEZlYXR1cmUoKQotICB7Ci0JdHJ5Ci0JewotCSAgY29uZmlndXJhdGlvbi5zZXRGZWF0dXJlKCJOT05fRVhJU1RBTlRfRkVBVFVSRSIsIGZhbHNlKTsKLQkgIGZhaWwoIlNldHRpbmcgYSBub24gZXhpc3RhbnQgZmVhdHVyZSBkaWQgbm90IHByb2R1Y2UgYW4gZXhjZXB0aW9uLiIpOwotCX0KLQljYXRjaChFeGNlcHRpb24gZSkKLQl7Ci0JICAvLyBUaGUgdGVzdCBzdWNjZWVkcyBpZiB0aGUgZXhjZXB0aW9uIGlzIGNhdWdodC4KLQl9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IGdldHRpbmcgYSBmZWF0dXJlIHRoYXQgZG9lc24ndCBleGlzdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RHZXROb3RFeGlzdGFudEZlYXR1cmUoKQotICB7Ci0JdHJ5Ci0JewotCSAgY29uZmlndXJhdGlvbi5nZXRGZWF0dXJlKCJOT05fRVhJU1RBTlRfRkVBVFVSRSIpOwotCSAgZmFpbCgiR2V0dGluZyBhIG5vbiBleGlzdGFudCBmZWF0dXJlIGRpZCBub3QgcHJvZHVjZSBhbiBleGNlcHRpb24uIik7Ci0JfQotCWNhdGNoKEV4Y2VwdGlvbiBlKQotCXsKLQkgIC8vIFRoZSB0ZXN0IHN1Y2NlZWRzIGlmIHRoZSBleGNlcHRpb24gaXMgY2F1Z2h0LgotCX0KLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgdGhlIGRlZmF1bHQgc2V0dGluZyBvZiB0aGUgV0FSTl9OT19HUkFNTUFSIGZlYXR1cmUuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW5kaWNhdGVOb0dyYW1tYXJGZWF0dXJlRGVmYXVsdCgpCi0gIHsKLQl0cnkKLQl7Ci0JCWFzc2VydEVxdWFscygiVGhlIElORElDQVRFX05PX0dSQU1NQVIgZmVhdHVyZSBpcyBub3Qgc2V0IGJ5IGRlZmF1bHQgdG8gSWdub3JlLiIsIDEsIGNvbmZpZ3VyYXRpb24uZ2V0SW50RmVhdHVyZShYTUxWYWxpZGF0aW9uQ29uZmlndXJhdGlvbi5JTkRJQ0FURV9OT19HUkFNTUFSKSk7Ci0JfQotCWNhdGNoKEV4Y2VwdGlvbiBlKQotCXsKLQkgIGZhaWwoIlVuYWJsZSB0byBzZXQgcmVhZCB0aGUgV0FSTl9OT19HUkFNTUFSIGZlYXR1cmU6ICIgKyBlKTsKLQl9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9WYWxpZGF0b3JUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2VjbGlwc2UvVmFsaWRhdG9yVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjU5NzE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9WYWxpZGF0b3JUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwuY29yZS5NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5YTUxDb3JlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5YTUxDb3JlUHJlZmVyZW5jZU5hbWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuVmFsaWRhdGlvbk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5WYWxpZGF0aW9uUmVwb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbC5YTUxWYWxpZGF0b3JUZXN0c1BsdWdpbjsKLQotcHVibGljIGNsYXNzIFZhbGlkYXRvclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSAKLXsKLSAgVmFsaWRhdG9yV3JhcHBlciB2YWxpZGF0b3IgPSBuZXcgVmFsaWRhdG9yV3JhcHBlcigpOwotICAKLSAgLyoqCi0gICAqIENyZWF0ZSBhIHRlc3RzIHN1aXRlIGZyb20gdGhpcyB0ZXN0IGNsYXNzLgotICAgKiAKLSAgICogQHJldHVybiBBIHRlc3Qgc3VpdGUgY29udGFpbmluZyB0aGlzIHRlc3QgY2xhc3MuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoVmFsaWRhdG9yVGVzdC5jbGFzcyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IHRoZSBhZGRJbmZvVG9NZXNzYWdlIG1ldGhvZC4gVGhlIGZvbGxvd2luZyB0ZXN0cyBhcmUgcGVyZm9ybWVkOjxici8+Ci0gICAqIDEuIFdoZW4gdGhlIHZhbGlkYXRpb24gbWVzc2FnZSBjb250YWlucyBhIG51bGwga2V5IG5vdGhpbmcgaXMgYWRkZWQgdG8gdGhlIG1lc3NhZ2UuPGJyLz4KLSAgICogMi4gV2hlbiB0aGUgbWVzc2FnZSBjb250YWlucyB0aGUga2V5ICJFTlRJUkVfRUxFTUVOVCIgdGhlIHRocmVlIGF0dHJpYnV0ZXMgYXJlIGFkZGVkCi0gICAqIHRvIHRoZSBtZXRob2QgYW5kIHRoZSBTUVVJR0dMRV9OQU1FX09SX1ZBTFVFX0FUVFJJQlVURSBpcyBudWxsLjxici8+Ci0gICAqIDMuIFdoZW4gdGhlIG1lc3NhZ2UgY29udGFpbnMgdGhlIGtleSAiRW50aXR5Tm90RGVjbGFyZWQiIHRoZSB0aHJlZSBhdHRyaWJ1dGVzIGFyZSBzZXQuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0QWRkSW5mb1RvTWVzc2FnZSgpCi0gIHsKLSAgICAvLyBUaGVzZSBzdHJpbmdzIGFyZSBjb21tb24gYWRkaXRpb24gaW5mb3JtYXRpb24gdHlwZXMuCi0JU3RyaW5nIENPTFVNTl9OVU1CRVJfQVRUUklCVVRFID0gImNvbHVtbk51bWJlciI7IC8vJE5PTi1OTFMtMSQKLQlTdHJpbmcgU1FVSUdHTEVfU0VMRUNUSU9OX1NUUkFURUdZX0FUVFJJQlVURSA9ICJzcXVpZ2dsZVNlbGVjdGlvblN0cmF0ZWd5IjsgLy8kTk9OLU5MUy0xJAotCVN0cmluZyBTUVVJR0dMRV9OQU1FX09SX1ZBTFVFX0FUVFJJQlVURSA9ICJzcXVpZ2dsZU5hbWVPclZhbHVlIjsgLy8kTk9OLU5MUy0xJAotCQotCS8vIFRlc3QgdGhhdCB0aGUgbWVzc2FnZSBkb2VzIG5vdCBjb250YWluIHRoZSBhdHRyaWJ1dGVzIHdoZW4gdGhlIG1ldGhvZCBpcyBjYWxsZWQKLQkvLyB3aXRoIGEgbnVsbCBrZXkuCi0JVmFsaWRhdGlvbk1lc3NhZ2UgdmFsaWRhdGlvbk1lc3NhZ2UgPSBuZXcgVmFsaWRhdGlvbk1lc3NhZ2UoIiIsIDEsIDEsICIiKTsKLQlNZXNzYWdlIG1lc3NhZ2UgPSBuZXcgTWVzc2FnZSgpOwotCXZhbGlkYXRvci5hZGRJbmZvVG9NZXNzYWdlKHZhbGlkYXRpb25NZXNzYWdlLCBtZXNzYWdlKTsKLQlhc3NlcnROdWxsKCJDT0xVTU5fTlVNQkVSX0FUVFJJQlVURSB3YXMgbm90IG51bGwgZm9yIGEgVmFsaWRhdGlvbk1lc3NhZ2Ugd2l0aCBhIG51bGwga2V5LiBDT0xVTU5fTlVNQkVSX0FUVFJJQlVURSA9ICIgKyBtZXNzYWdlLmdldEF0dHJpYnV0ZShDT0xVTU5fTlVNQkVSX0FUVFJJQlVURSksIG1lc3NhZ2UuZ2V0QXR0cmlidXRlKENPTFVNTl9OVU1CRVJfQVRUUklCVVRFKSk7Ci0JYXNzZXJ0TnVsbCgiU1FVSUdHTEVfU0VMRUNUSU9OX1NUUkFURUdZX0FUVFJJQlVURSB3YXMgbm90IG51bGwgZm9yIGEgVmFsaWRhdGlvbk1lc3NhZ2Ugd2l0aCBhIG51bGwga2V5LiBTUVVJR0dMRV9TRUxFQ1RJT05fU1RSQVRFR1lfQVRUUklCVVRFID0gIiArIG1lc3NhZ2UuZ2V0QXR0cmlidXRlKFNRVUlHR0xFX1NFTEVDVElPTl9TVFJBVEVHWV9BVFRSSUJVVEUpLCBtZXNzYWdlLmdldEF0dHJpYnV0ZShTUVVJR0dMRV9TRUxFQ1RJT05fU1RSQVRFR1lfQVRUUklCVVRFKSk7Ci0JYXNzZXJ0TnVsbCgiU1FVSUdHTEVfTkFNRV9PUl9WQUxVRV9BVFRSSUJVVEUgd2FzIG5vdCBudWxsIGZvciBhIFZhbGlkYXRpb25NZXNzYWdlIHdpdGggYSBudWxsIGtleS4gU1FVSUdHTEVfTkFNRV9PUl9WQUxVRV9BVFRSSUJVVEUgPSAiICsgbWVzc2FnZS5nZXRBdHRyaWJ1dGUoU1FVSUdHTEVfTkFNRV9PUl9WQUxVRV9BVFRSSUJVVEUpLCBtZXNzYWdlLmdldEF0dHJpYnV0ZShTUVVJR0dMRV9OQU1FX09SX1ZBTFVFX0FUVFJJQlVURSkpOwotCQotCS8vIFRlc3QgdGhhdCB0aGUgbWVzc2FnZSBjb250YWlucyB0aGUgdGhyZWUgYXR0cmlidXRlcyB3aGVuIHRoZSBrZXkgaXMgc2V0IHRvICJFbGVtZW50VW50ZXJtaW5hdGVkIi4KLQlWYWxpZGF0aW9uTWVzc2FnZSB2YWxpZGF0aW9uTWVzc2FnZTIgPSBuZXcgVmFsaWRhdGlvbk1lc3NhZ2UoIiIsIDEsIDEsICIiLCAiRWxlbWVudFVudGVybWluYXRlZCIsIG51bGwpOwotCU1lc3NhZ2UgbWVzc2FnZTIgPSBuZXcgTWVzc2FnZSgpOwotCXZhbGlkYXRvci5hZGRJbmZvVG9NZXNzYWdlKHZhbGlkYXRpb25NZXNzYWdlMiwgbWVzc2FnZTIpOwotCWFzc2VydEVxdWFscygiQ09MVU1OX05VTUJFUl9BVFRSSUJVVEUgd2FzIGNvcnJlY3RseSBzZXQgdG8gMSBmb3IgYSBWYWxpZGF0aW9uTWVzc2FnZSB3aXRoIHRoZSBrZXkgRU5USVJFX0VMRU1FTlQuIENPTFVNTl9OVU1CRVJfQVRUUklCVVRFID0gIiArIG1lc3NhZ2UyLmdldEF0dHJpYnV0ZShDT0xVTU5fTlVNQkVSX0FUVFJJQlVURSksIG5ldyBJbnRlZ2VyKDEpLCBtZXNzYWdlMi5nZXRBdHRyaWJ1dGUoQ09MVU1OX05VTUJFUl9BVFRSSUJVVEUpKTsKLQlhc3NlcnRFcXVhbHMoIlNRVUlHR0xFX1NFTEVDVElPTl9TVFJBVEVHWV9BVFRSSUJVVEUgd2FzIG5vdCBFTlRJUkVfRUxFTUVOVC4gU1FVSUdHTEVfU0VMRUNUSU9OX1NUUkFURUdZX0FUVFJJQlVURSA9ICIgKyBtZXNzYWdlMi5nZXRBdHRyaWJ1dGUoU1FVSUdHTEVfU0VMRUNUSU9OX1NUUkFURUdZX0FUVFJJQlVURSksICJFTlRJUkVfRUxFTUVOVCIsIG1lc3NhZ2UyLmdldEF0dHJpYnV0ZShTUVVJR0dMRV9TRUxFQ1RJT05fU1RSQVRFR1lfQVRUUklCVVRFKSk7Ci0JYXNzZXJ0TnVsbCgiU1FVSUdHTEVfTkFNRV9PUl9WQUxVRV9BVFRSSUJVVEUgd2FzIG5vdCBudWxsIGZvciBhIFZhbGlkYXRpb25NZXNzYWdlIHdpdGggdGhlIGtleSBFTlRJUkVfRUxFTUVOVC4gU1FVSUdHTEVfTkFNRV9PUl9WQUxVRV9BVFRSSUJVVEUgPSAiICsgbWVzc2FnZTIuZ2V0QXR0cmlidXRlKFNRVUlHR0xFX05BTUVfT1JfVkFMVUVfQVRUUklCVVRFKSwgbWVzc2FnZTIuZ2V0QXR0cmlidXRlKFNRVUlHR0xFX05BTUVfT1JfVkFMVUVfQVRUUklCVVRFKSk7Ci0JCi0gICAgLy8gVGVzdCB0aGF0IHRoZSBtZXNzYWdlIGNvbnRhaW5zIHRoZSB0aHJlZSBhdHRyaWJ1dGVzIHdoZW4gdGhlIGtleSBpcyBzZXQgdG8gIkVudGl0eU5vdERlY2xhcmVkIi4KLQlWYWxpZGF0aW9uTWVzc2FnZSB2YWxpZGF0aW9uTWVzc2FnZTMgPSBuZXcgVmFsaWRhdGlvbk1lc3NhZ2UoIiIsIDEsIDEsICIiLCAiRW50aXR5Tm90RGVjbGFyZWQiLCBuZXcgT2JqZWN0W117Ik15TmFtZSJ9KTsKLQlNZXNzYWdlIG1lc3NhZ2UzID0gbmV3IE1lc3NhZ2UoKTsKLQl2YWxpZGF0b3IuYWRkSW5mb1RvTWVzc2FnZSh2YWxpZGF0aW9uTWVzc2FnZTMsIG1lc3NhZ2UzKTsKLQlhc3NlcnRFcXVhbHMoIkNPTFVNTl9OVU1CRVJfQVRUUklCVVRFIHdhcyBjb3JyZWN0bHkgc2V0IHRvIDEgZm9yIGEgVmFsaWRhdGlvbk1lc3NhZ2Ugd2l0aCB0aGUga2V5IEVudGl0eU5vdERlY2xhcmVkLiBDT0xVTU5fTlVNQkVSX0FUVFJJQlVURSA9ICIgKyBtZXNzYWdlMy5nZXRBdHRyaWJ1dGUoQ09MVU1OX05VTUJFUl9BVFRSSUJVVEUpLCBuZXcgSW50ZWdlcigxKSwgbWVzc2FnZTMuZ2V0QXR0cmlidXRlKENPTFVNTl9OVU1CRVJfQVRUUklCVVRFKSk7Ci0JYXNzZXJ0RXF1YWxzKCJTUVVJR0dMRV9TRUxFQ1RJT05fU1RSQVRFR1lfQVRUUklCVVRFIHdhcyBub3QgVEVYVF9FTlRJVFlfUkVGRVJFTkNFLiBTUVVJR0dMRV9TRUxFQ1RJT05fU1RSQVRFR1lfQVRUUklCVVRFID0gIiArIG1lc3NhZ2UzLmdldEF0dHJpYnV0ZShTUVVJR0dMRV9TRUxFQ1RJT05fU1RSQVRFR1lfQVRUUklCVVRFKSwgIlRFWFRfRU5USVRZX1JFRkVSRU5DRSIsIG1lc3NhZ2UzLmdldEF0dHJpYnV0ZShTUVVJR0dMRV9TRUxFQ1RJT05fU1RSQVRFR1lfQVRUUklCVVRFKSk7Ci0JYXNzZXJ0RXF1YWxzKCJTUVVJR0dMRV9OQU1FX09SX1ZBTFVFX0FUVFJJQlVURSB3YXMgbm90IHNldCB0byBNeU5hbWUgZm9yIGEgVmFsaWRhdGlvbk1lc3NhZ2Ugd2l0aCB0aGUga2V5IEVudGl0eU5vdERlY2xhcmVkLiBTUVVJR0dMRV9OQU1FX09SX1ZBTFVFX0FUVFJJQlVURSA9ICIgKyBtZXNzYWdlMy5nZXRBdHRyaWJ1dGUoU1FVSUdHTEVfTkFNRV9PUl9WQUxVRV9BVFRSSUJVVEUpLCAiTXlOYW1lIiwgbWVzc2FnZTMuZ2V0QXR0cmlidXRlKFNRVUlHR0xFX05BTUVfT1JfVkFMVUVfQVRUUklCVVRFKSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IHRoZSB2YWxpZGF0ZSBtZXRob2QuIFRlc3RzIHRvIGJlIHBlcmZvcm1lZDo8YnIvPgotICAgKiAxLiBUZXN0IHRoYXQgdmFsaWRhdGluZyBhIHZhbGlkIGZpbGUgZnJvbSBhIFVSSSBvciBhbiBpbnB1dCBzdHJlYW0gcHJvZHVjZXMgdGhlIHNhbWUgcmVzdWx0Ljxici8+Ci0gICAqIDIuIFRlc3QgdGhhdCB2YWxpZGF0aW5nIGFuIGludmFsaWQgZmlsZSBmcm9tIGEgVVJJIG9yIGFuIGlucHV0IHN0cmVhbSBwcm9kdWNlcyB0aGUgc2FtZSByZXN1bHQuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0VmFsaWRhdGUoKQotICB7Ci0JdHJ5Ci0JewotCSAgLy8gVGVzdCB0aGF0IHZhbGlkYXRpbmcgYSB2YWxpZCBmaWxlIGZyb20gYSBVUkkgYW5kIGFuIGlucHV0IHN0cmVhbSBwcm9kdWNlcyB0aGUgc2FtZSByZXN1bHQuCi0JICBTdHJpbmcgUExVR0lOX0FCU09MVVRFX1BBVEggPSBYTUxWYWxpZGF0b3JUZXN0c1BsdWdpbi5nZXRQbHVnaW5Mb2NhdGlvbigpLnRvU3RyaW5nKCkgKyAiLyI7Ci0JICBTdHJpbmcgdXJpID0gImZpbGU6Ly8vIiArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInRlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9QdWJsaWNhdGlvbkNhdGFsb2d1ZS9DYXRhbG9ndWUueG1sIjsKLQkgIFZhbGlkYXRpb25SZXBvcnQgcmVwb3J0MSA9IHZhbGlkYXRvci52YWxpZGF0ZSh1cmksIG51bGwsIG51bGwpOwotCSAgVmFsaWRhdGlvblJlcG9ydCByZXBvcnQyID0gbnVsbDsKLQkgIElucHV0U3RyZWFtIGlzID0gbnVsbDsKLQkgIHRyeQotCSAgewotCSAgICBpcyA9IG5ldyBVUkwodXJpKS5vcGVuU3RyZWFtKCk7Ci0JICAgIHJlcG9ydDIgPSB2YWxpZGF0b3IudmFsaWRhdGUodXJpLCBpcywgbnVsbCk7Ci0JICB9Ci0JICBjYXRjaChFeGNlcHRpb24gZSkKLQkgIHsKLQkJZmFpbCgiQSBwcm9ibGVtIG9jY3VycmVkIHdoaWxlIHZhbGlkYXRpbmcgYSB2YWxpZCBmaWxlIHdpdGggYW4gaW5wdXRzdHJlYW06ICIgKyBlKTsKLQkgIH0KLQkgIGZpbmFsbHkKLQkgIHsKLQkJaWYoaXMgIT0gbnVsbCkKLQkJewotCQkgIHRyeQotCQkgIHsKLQkJICAgIGlzLmNsb3NlKCk7Ci0JCSAgfQotCQkgIGNhdGNoKElPRXhjZXB0aW9uIGUpCi0JCSAgewotCQkJLy8gRG8gbm90aGluZy4KLQkJICB9Ci0JCX0KLQkgIH0KLQkgIGFzc2VydFRydWUoIlZhbGlkYXRpb24gdXNpbmcgYSBVUkkgZGlkIG5vdCBwcm9kdWN0IGEgdmFsaWQgdmFsaWRhdGlvbiByZXN1bHQuIiwgcmVwb3J0MS5pc1ZhbGlkKCkpOwotCSAgYXNzZXJ0RXF1YWxzKCJWYWxpZGF0aW9uIHVzaW5nIFVSSSBhbmQgdXNpbmcgaW5wdXRzdHJlYW0gb2YgdGhlIHNhbWUgZmlsZSBwcm9kdWNlcyBkaWZmZXJlbnQgbnVtYmVycyBvZiBlcnJvcnMuIiwgcmVwb3J0MS5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKS5sZW5ndGgsIHJlcG9ydDIuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKCkubGVuZ3RoKTsKLQkgIAotICAgICAgLy8gVGVzdCB0aGF0IHZhbGlkYXRpbmcgYW4gaW52YWxpZCBmaWxlIGZyb20gYSBVUkkgYW5kIGFuIGlucHV0IHN0cmVhbSBwcm9kdWNlcyB0aGUgc2FtZSByZXN1bHQuCi0JICB1cmkgPSAiZmlsZTovLy8iICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyAidGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhJbnZhbGlkLnhtbCI7Ci0JICByZXBvcnQxID0gdmFsaWRhdG9yLnZhbGlkYXRlKHVyaSwgbnVsbCwgbnVsbCk7Ci0JICByZXBvcnQyID0gbnVsbDsKLQkgIGlzID0gbnVsbDsKLQkgIHRyeQotCSAgewotCSAgICBpcyA9IG5ldyBVUkwodXJpKS5vcGVuU3RyZWFtKCk7Ci0JICAgIHJlcG9ydDIgPSB2YWxpZGF0b3IudmFsaWRhdGUodXJpLCBpcywgbnVsbCk7Ci0JICB9Ci0JICBjYXRjaChFeGNlcHRpb24gZSkKLQkgIHsKLQkJZmFpbCgiQSBwcm9ibGVtIG9jY3VycmVkIHdoaWxlIHZhbGlkYXRpbmcgYW4gaW52YWxpZCBmaWxlIHdpdGggYW4gaW5wdXRzdHJlYW06ICIgKyBlKTsKLQkgIH0KLQkgIGZpbmFsbHkKLQkgIHsKLQkJaWYoaXMgIT0gbnVsbCkKLQkJewotCQkgIHRyeQotCQkgIHsKLQkJICAgIGlzLmNsb3NlKCk7Ci0JCSAgfQotCQkgIGNhdGNoKElPRXhjZXB0aW9uIGUpCi0JCSAgewotCQkJLy8gRG8gbm90aGluZy4KLQkJICB9Ci0JCX0KLQkgIH0KLQkgIGFzc2VydEZhbHNlKCJWYWxpZGF0aW9uIHVzaW5nIGEgVVJJIGRpZCBub3QgcHJvZHVjdCBhbiBpbnZhbGlkIHZhbGlkYXRpb24gcmVzdWx0LiIsIHJlcG9ydDEuaXNWYWxpZCgpKTsKLQkgIGFzc2VydEVxdWFscygiVmFsaWRhdGlvbiB1c2luZyBVUkkgYW5kIHVzaW5nIGlucHV0c3RyZWFtIG9mIHRoZSBzYW1lIGZpbGUgcHJvZHVjZXMgZGlmZmVyZW50IG51bWJlcnMgb2YgZXJyb3JzLiIsIHJlcG9ydDEuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKCkubGVuZ3RoLCByZXBvcnQyLmdldFZhbGlkYXRpb25NZXNzYWdlcygpLmxlbmd0aCk7Ci0JfQotCWNhdGNoKEV4Y2VwdGlvbiBlKQotCXsKLQkgIGZhaWwoIlVuYWJsZSB0byBsb2NhdGUgcGx1Zy1pbiBsb2NhdGlvbjogIiArIGUpOwotCX0KLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgdGhhdCB0aGUgd2FybiBubyBncmFtbWFyIHByZWZlcmVuY2UgaXMgcmVhZCBmcm9tIHRoZSBYTUwgY29yZSBwcmVmZXJlbmNlcy4KLSAgICogVGhlcmUgYXJlIHRocmVlIHRlc3RzIHRvIHBlcmZvcm0uCi0gICAqIDEuIFRlc3QgdGhhdCB0aGUgZGVmYXVsdCBwcmVmZXJlbmNlIGlzIGVuYWJsZWQuCi0gICAqIDIuIFRlc3QgdGhhdCBzZXR0aW5nIHRoZSBwcmVmZXJlbmNlIHRvIGRpc2FibGVkIHdvcmtzLgotICAgKiAzLiBUZXN0IHRoYXQgc2V0dGluZyB0aGUgcHJlZmVyZW5jZSB0byBlbmFibGVkIHdvcmtzLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFdhcm5Ob0dyYW1tYXJQcmVmZXJlbmNlKCkKLSAgewotCS8vIFRlc3QgdGhhdCB0aGUgZGVmYXVsdCBwcmVmZXJlbmNlIGlzIGRpc2FibGVkLgotCXZhbGlkYXRvci5zZXR1cFZhbGlkYXRpb24obnVsbCk7Ci0JYXNzZXJ0Tm90U2FtZSgiVGhlIGRlZmF1bHQgd2FybiBubyBncmFtbWFyIHByZWZlcmVuY2UgaXMgbm90IGVuYWJsZWQuIiwgbmV3IEludGVnZXIoMCksIG5ldyBJbnRlZ2VyKHZhbGlkYXRvci5nZXRJbmRpY2F0ZU5vR3JhbW1hclByZWZlcmVuY2UoKSkpOwotCQotCS8vIFRlc3QgdGhhdCB0aGUgcHJlZmVyZW5jZSBpcyByZWFkIHdoZW4gZGlzYWJsZWQuCi0JWE1MQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKS5zZXRWYWx1ZShYTUxDb3JlUHJlZmVyZW5jZU5hbWVzLklORElDQVRFX05PX0dSQU1NQVIsIDApOwotCXZhbGlkYXRvci5zZXR1cFZhbGlkYXRpb24obnVsbCk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgd2FybiBubyBncmFtbWFyIHByZWZlcmVuY2UgaXMgbm90IGlnbm9yZSB3aGVuIHRoZSBwcmVmZXJlbmNlIGlzIHNldCB0byBpZ25vcmUuIiwgMCwgdmFsaWRhdG9yLmdldEluZGljYXRlTm9HcmFtbWFyUHJlZmVyZW5jZSgpKTsKLQotCS8vIFRlc3QgdGhhdCB0aGUgcHJlZmVyZW5jZSBpcyByZWFkIHdoZW4gZW5hYmxlZC4KLQlYTUxDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpLnNldFZhbHVlKFhNTENvcmVQcmVmZXJlbmNlTmFtZXMuSU5ESUNBVEVfTk9fR1JBTU1BUiwgMik7Ci0JdmFsaWRhdG9yLnNldHVwVmFsaWRhdGlvbihudWxsKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSB3YXJuIG5vIGdyYW1tYXIgcHJlZmVyZW5jZSBpcyBub3QgZXJyb3Igd2hlbiB0aGUgcHJlZmVyZW5jZSBpcyBzZXQgdG8gZXJyb3IuIiwgMiwgdmFsaWRhdG9yLmdldEluZGljYXRlTm9HcmFtbWFyUHJlZmVyZW5jZSgpKTsKLQkKLSAgfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2VjbGlwc2UvVmFsaWRhdG9yV3JhcHBlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lY2xpcHNlL1ZhbGlkYXRvcldyYXBwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQ3NmNjZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2VjbGlwc2UvVmFsaWRhdG9yV3JhcHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwucHJvdmlzaW9uYWwuY29yZS5JTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLk5lc3RlZFZhbGlkYXRvckNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5WYWxpZGF0aW9uTWVzc2FnZTsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIGV4dGVuZHMgdmFsaWRhdG9yIHRvIGV4cG9zZSB0aGUgcHJvdGVjdGVkIG1ldGhvZHMKLSAqIGZvciB0ZXN0aW5nLgotICovCi1wdWJsaWMgY2xhc3MgVmFsaWRhdG9yV3JhcHBlciBleHRlbmRzIFZhbGlkYXRvciAKLXsKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2UuVmFsaWRhdG9yI2FkZEluZm9Ub01lc3NhZ2Uob3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5WYWxpZGF0aW9uTWVzc2FnZSwgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwucHJvdmlzaW9uYWwuY29yZS5JTWVzc2FnZSkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGFkZEluZm9Ub01lc3NhZ2UoVmFsaWRhdGlvbk1lc3NhZ2UgdmFsaWRhdGlvbk1lc3NhZ2UsIElNZXNzYWdlIG1lc3NhZ2UpIAotICB7Ci0Jc3VwZXIuYWRkSW5mb1RvTWVzc2FnZSh2YWxpZGF0aW9uTWVzc2FnZSwgbWVzc2FnZSk7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlLlZhbGlkYXRvciNzZXR1cFZhbGlkYXRpb24ob3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5OZXN0ZWRWYWxpZGF0b3JDb250ZXh0KQotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0dXBWYWxpZGF0aW9uKE5lc3RlZFZhbGlkYXRvckNvbnRleHQgY29udGV4dCkgCi0gIHsKLQlzdXBlci5zZXR1cFZhbGlkYXRpb24oY29udGV4dCk7Ci0gIH0KLQotLyoqCi0gICAqIEV4cG9ydCB0aGUgd2FybiBubyBncmFtbWFyIHByZWZlcmVuY2UgZm9yIHRlc3RpbmcuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSB3YXJuIG5vIGdyYW1tYXIgcHJlZmVyZW5jZS4KLSAgICovCi0gIHB1YmxpYyBpbnQgZ2V0SW5kaWNhdGVOb0dyYW1tYXJQcmVmZXJlbmNlKCkKLSAgewotCXJldHVybiBpbmRpY2F0ZU5vR3JhbW1hcjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lY2xpcHNlL1hNTE1lc3NhZ2VJbmZvSGVscGVyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lY2xpcHNlL1hNTE1lc3NhZ2VJbmZvSGVscGVyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZGJmM2NiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9YTUxNZXNzYWdlSW5mb0hlbHBlclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZWNsaXBzZTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi0vKioKLSAqIFRlc3QgY2FzZSB0byB0ZXN0IHRoZSBYTUxNZXNzYWdlSW5mb0hlbHBlciBjbGFzcy4KLSAqLwotcHVibGljIGNsYXNzIFhNTE1lc3NhZ2VJbmZvSGVscGVyVGVzdCBleHRlbmRzIFRlc3RDYXNlIAotewotICBwcml2YXRlIFhNTE1lc3NhZ2VJbmZvSGVscGVyIGhlbHBlciA9IG5ldyBYTUxNZXNzYWdlSW5mb0hlbHBlcigpOwotICAKLSAgLyoqCi0gICAqIENyZWF0ZSBhIHRlc3RzIHN1aXRlIGZyb20gdGhpcyB0ZXN0IGNsYXNzLgotICAgKiAKLSAgICogQHJldHVybiBBIHRlc3Qgc3VpdGUgY29udGFpbmluZyB0aGlzIHRlc3QgY2xhc3MuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoWE1MTWVzc2FnZUluZm9IZWxwZXJUZXN0LmNsYXNzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgdGhhdCB0aGUgY3JlYXRlTWVzc2FnZUluZm8gbWV0aG9kIHJldHVybnMgeyIiLCBudWxsfSB3aGVuCi0gICAqIGdpdmVuIGEgbm9uLWV4aXN0YW50IGtleSBhbmQgbnVsbCBtZXNzYWdlIGFyZ3VtZW50cy4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3ROb3RFeGlzdGFudEtleUFuZE51bGxNZXNzYWdlQXJndW1lbnRzKCkKLSAgewotCVN0cmluZ1tdIG1lc3NhZ2VJbmZvID0gaGVscGVyLmNyZWF0ZU1lc3NhZ2VJbmZvKCJOT05fRVhJU1RBTlRfS0VZIiwgbnVsbCk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgc2VsZWN0aW9uIHN0cmF0ZWd5IHJldHVybmVkIHdhcyBub3QgYW4gZW1wdHkgc3RyaW5nLiIsICIiLCBtZXNzYWdlSW5mb1swXSk7Ci0JYXNzZXJ0TnVsbCgiVGhlIG5hbWVPclZhbHVlIHJldHVybmVkIHdhcyBub3QgbnVsbC4iLCBtZXNzYWdlSW5mb1sxXSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IHRoYXQgdGhlIGNyZWF0ZU1lc3NhZ2VJbmZvIG1ldGhvZCByZXR1cm5zIHsiIiwgbnVsbH0gd2hlbgotICAgKiBnaXZlbiBhIG5vbi1leGlzdGFudCBrZXkgYW5kIG51bGwgbWVzc2FnZSBhcmd1bWVudHMuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0TnVsbEtleUFuZE1lc3NhZ2VBcmd1bWVudHMoKQotICB7Ci0JU3RyaW5nW10gbWVzc2FnZUluZm8gPSBoZWxwZXIuY3JlYXRlTWVzc2FnZUluZm8obnVsbCwgbnVsbCk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgc2VsZWN0aW9uIHN0cmF0ZWd5IHJldHVybmVkIHdhcyBub3QgYW4gZW1wdHkgc3RyaW5nLiIsICIiLCBtZXNzYWdlSW5mb1swXSk7Ci0JYXNzZXJ0TnVsbCgiVGhlIG5hbWVPclZhbHVlIHJldHVybmVkIHdhcyBub3QgbnVsbC4iLCBtZXNzYWdlSW5mb1sxXSk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lY2xpcHNlL1hNTFZhbGlkYXRvclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9YTUxWYWxpZGF0b3JUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwMDU1YzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lY2xpcHNlL1hNTFZhbGlkYXRvclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZWNsaXBzZTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi0vKioKLSAqIFRlc3QgdGhlIEVjbGlwc2Ugc3BlY2lmaWMgWE1MIHZhbGlkYXRvci4KLSAqLwotcHVibGljIGNsYXNzIFhNTFZhbGlkYXRvclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSAKLXsKLSAgLyoqCi0gICAqIENyZWF0ZSBhIHRlc3RzIHN1aXRlIGZyb20gdGhpcyB0ZXN0IGNsYXNzLgotICAgKiAKLSAgICogQHJldHVybiBBIHRlc3Qgc3VpdGUgY29udGFpbmluZyB0aGlzIHRlc3QgY2xhc3MuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoWE1MVmFsaWRhdG9yVGVzdC5jbGFzcyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IHRvIGVuc3VyZSB0aGUgVVJJIHJlc29sdmVyIGlzIG5vdCBudWxsIGluIHRoZSBFY2xpcHNlCi0gICAqIHNwZWNpZmljIFhNTCB2YWxpZGF0b3IuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0VVJJUmVzb2x2ZXJJc1JlZ2lzdGVyZWQoKQotICB7Ci0JWE1MVmFsaWRhdG9yV3JhcHBlciB2YWxpZGF0b3IgPSBuZXcgWE1MVmFsaWRhdG9yV3JhcHBlcigpOwotCWFzc2VydE5vdE51bGwoIlRoZSBVUkkgcmVzb2x2ZXIgaXMgbnVsbC4iLCB2YWxpZGF0b3IuZ2V0VVJJUmVzb2x2ZXIoKSk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lY2xpcHNlL1hNTFZhbGlkYXRvcldyYXBwZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9YTUxWYWxpZGF0b3JXcmFwcGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlMWEwOTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lY2xpcHNlL1hNTFZhbGlkYXRvcldyYXBwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZWNsaXBzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXIuaW50ZXJuYWwucHJvdmlzaW9uYWwuVVJJUmVzb2x2ZXI7Ci0KLS8qKgotICogV3JhcHBlciBmb3IgdGhlIEVjbGlwc2UgWE1MIHZhbGlkYXRvciBjbGFzcyB0byBhbGxvdyBmb3IgdGVzdGluZy4KLSAqLwotcHVibGljIGNsYXNzIFhNTFZhbGlkYXRvcldyYXBwZXIgZXh0ZW5kcyBYTUxWYWxpZGF0b3IgCi17Ci0gIC8qKgotICAgKiBDb25zdHJ1Y3Rvci4KLSAgICovCi0gIHB1YmxpYyBYTUxWYWxpZGF0b3JXcmFwcGVyKCkKLSAgewotCXN1cGVyKCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBHZXQgdGhlIFVSSSByZXNvbHZlciByZWdpc3RlcmVkIG9uIHRoZSBYTUwgdmFsaWRhdG9yLgotICAgKiAKLSAgICogQHJldHVybiBUaGUgVVJJIHJlc29sdmVyIHJlZ2lzdGVyZWQgb24gdGhlIFhNTCB2YWxpZGF0b3IuCi0gICAqLwotICBwdWJsaWMgVVJJUmVzb2x2ZXIgZ2V0VVJJUmVzb2x2ZXIoKQotICB7Ci0JcmV0dXJuIHVyaVJlc29sdmVyOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2Vycm9yY3VzdG9taXphdGlvbi9FcnJvckN1c3RvbWl6YXRpb25NYW5hZ2VyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lcnJvcmN1c3RvbWl6YXRpb24vRXJyb3JDdXN0b21pemF0aW9uTWFuYWdlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGI0NWQxZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2Vycm9yY3VzdG9taXphdGlvbi9FcnJvckN1c3RvbWl6YXRpb25NYW5hZ2VyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZXJyb3JjdXN0b21pemF0aW9uOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLlhNTFZhbGlkYXRpb25Db25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLlhNTFZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLlZhbGlkYXRpb25JbmZvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuVmFsaWRhdGlvbk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZXJyb3JjdXN0b21pemF0aW9uLkVycm9yQ3VzdG9taXphdGlvbk1hbmFnZXIuRXJyb3JNZXNzYWdlSW5mb3JtYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLmludGVybmFsLlhNTFZhbGlkYXRvclRlc3RzUGx1Z2luOwotCi0vKioKLSAqIFRlc3QgdGhlIEVycm9yQ3VzdG9taXphdGlvbk1hbmFnZXIgY2xhc3MuCi0gKi8KLXB1YmxpYyBjbGFzcyBFcnJvckN1c3RvbWl6YXRpb25NYW5hZ2VyVGVzdCBleHRlbmRzIFRlc3RDYXNlIAotewotCQotICAvKioKLSAgICogVGVzdCB0aGUgc3RhcnRFbGVtZW50IG1ldGhvZCB3aXRoIHRoZSBmb2xsb3dpbmcgdGVzdHM6Ci0gICAqIDEuIFRlc3QgdGhhdCB0aGUgcm9vdCBlbGVtZW50IGlzIHByb3Blcmx5IHB1c2hlZCB0byB0aGUgc3RhY2suCi0gICAqIDIuIFRlc3QgdGhhdCBhIHN1YnNlcXVlbnQgZWxlbWVudCBpcyBwcm9wZXJseSBwdXNoZWQgdG8gdGhlIHN0YWNrIGFuZAotICAgKiAgICByZWdpc3RlcmVkIGFzIGEgY2hpbGQgZWxlbWVudC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RTdGFydEVsZW1lbnQoKQotICB7Ci0JLy8gMS4gVGVzdCB0aGF0IHRoZSByb290IGVsZW1lbnQgaXMgcHJvcGVybHkgcHVzaGVkIHRvIHRoZSBzdGFjay4KLQlTdHJpbmcgbmFtZXNwYWNlMSA9ICJodHRwOi8vbmFtZXNwYWNlMSI7Ci0JU3RyaW5nIGxvY2FsbmFtZTEgPSAibG9jYWxuYW1lIjsKLQlFcnJvckN1c3RvbWl6YXRpb25NYW5hZ2VyV3JhcHBlciBtYW5hZ2VyID0gbmV3IEVycm9yQ3VzdG9taXphdGlvbk1hbmFnZXJXcmFwcGVyKCk7Ci0JYXNzZXJ0RXF1YWxzKCIxLiBUaGUgZWxlbWVudCBpbmZvcm1hdGlvbiBzdGFjayBpcyBub3QgZW1wdHkgdG8gc3RhcnQuIiwgMCwgbWFuYWdlci5nZXRFbGVtZW50SW5mb3JtYXRpb25TdGFjaygpLnNpemUoKSk7Ci0JbWFuYWdlci5zdGFydEVsZW1lbnQobmFtZXNwYWNlMSwgbG9jYWxuYW1lMSk7Ci0JRWxlbWVudEluZm9ybWF0aW9uIGVsZW1JbmZvID0gKEVsZW1lbnRJbmZvcm1hdGlvbiltYW5hZ2VyLmdldEVsZW1lbnRJbmZvcm1hdGlvblN0YWNrKCkucG9wKCk7Ci0JYXNzZXJ0RXF1YWxzKCIxLiBUaGUgZWxlbWVudCBpbmZvcm1hdGlvbiBzdGFjayBpcyBub3QgZW1wdHkgdG8gYWZ0ZXIgcG9wcGluZyB0aGUgdG9wIGVsZW1lbnQuIiwgMCwgbWFuYWdlci5nZXRFbGVtZW50SW5mb3JtYXRpb25TdGFjaygpLnNpemUoKSk7Ci0JYXNzZXJ0RXF1YWxzKCIxLiBUaGUgbmFtZXNwYWNlIHNwZWNpZmllZCBvbiB0aGUgZWxlbWVudCBpbmZvcm1hdGlvbiBpcyBub3QgaHR0cDovL25hbWVzcGFjZTEgaXQgaXMgIiArIGVsZW1JbmZvLmdldE5hbWVzcGFjZSgpLCBuYW1lc3BhY2UxLCBlbGVtSW5mby5nZXROYW1lc3BhY2UoKSk7Ci0JYXNzZXJ0RXF1YWxzKCIxLiBUaGUgbG9jYWwgbmFtZSBzcGVjaWZpZWQgb24gdGhlIGVsZW1lbnQgaW5mb3JtYXRpb24gaXMgbm90IGxvY2FsbmFtZSBpdCBpcyAiICsgZWxlbUluZm8uZ2V0TG9jYWxuYW1lKCksIGxvY2FsbmFtZTEsIGVsZW1JbmZvLmdldExvY2FsbmFtZSgpKTsKLQkKLQkvLyAyLiBUZXN0IHRoYXQgYSBzdWJzZXF1ZW50IGVsZW1lbnQgaXMgcHJvcGVybHkgcHVzaGVkIHRvIHRoZSBzdGFjayBhbmQgcmVnaXN0ZXJlZCBhcyBhIGNoaWxkIGVsZW1lbnQuCi0JU3RyaW5nIGxvY2FsbmFtZTIgPSAibG9jYWxuYW1lMiI7Ci0gICAgRXJyb3JDdXN0b21pemF0aW9uTWFuYWdlcldyYXBwZXIgbWFuYWdlcjIgPSBuZXcgRXJyb3JDdXN0b21pemF0aW9uTWFuYWdlcldyYXBwZXIoKTsKLQlhc3NlcnRFcXVhbHMoIjIuIFRoZSBlbGVtZW50IGluZm9ybWF0aW9uIHN0YWNrIGlzIG5vdCBlbXB0eSB0byBzdGFydC4iLCAwLCBtYW5hZ2VyMi5nZXRFbGVtZW50SW5mb3JtYXRpb25TdGFjaygpLnNpemUoKSk7Ci0JbWFuYWdlcjIuc3RhcnRFbGVtZW50KG5hbWVzcGFjZTEsIGxvY2FsbmFtZTEpOwotCW1hbmFnZXIyLnN0YXJ0RWxlbWVudChuYW1lc3BhY2UxLCBsb2NhbG5hbWUyKTsKLQlhc3NlcnRFcXVhbHMoIjIuIFRoZSBlbGVtZW50IGluZm9ybWF0aW9uIHN0YWNrIGRvZXMgbm90IGNvbnRhaW4gMiBlbGVtZW50cy4iLCAyLCBtYW5hZ2VyMi5nZXRFbGVtZW50SW5mb3JtYXRpb25TdGFjaygpLnNpemUoKSk7Ci0JRWxlbWVudEluZm9ybWF0aW9uIGVsZW1JbmZvMiA9IChFbGVtZW50SW5mb3JtYXRpb24pbWFuYWdlcjIuZ2V0RWxlbWVudEluZm9ybWF0aW9uU3RhY2soKS5wb3AoKTsKLQlhc3NlcnRFcXVhbHMoIjIuIFRoZSBlbGVtZW50IGluZm9ybWF0aW9uIHN0YWNrIGRvZXMgbm90IGNvbnRhaW4gMSBlbGVtZW50IGFmdGVyIHBvcHBpbmcgdGhlIHRvcCBlbGVtZW50LiIsIDEsIG1hbmFnZXIyLmdldEVsZW1lbnRJbmZvcm1hdGlvblN0YWNrKCkuc2l6ZSgpKTsKLQlhc3NlcnRFcXVhbHMoIjIuIFRoZSBuYW1lc3BhY2Ugc3BlY2lmaWVkIG9uIHRoZSBlbGVtZW50IGluZm9ybWF0aW9uIGNoaWxkIGlzIG5vdCBodHRwOi8vbmFtZXNwYWNlMSBpdCBpcyAiICsgZWxlbUluZm8yLmdldE5hbWVzcGFjZSgpLCBuYW1lc3BhY2UxLCBlbGVtSW5mbzIuZ2V0TmFtZXNwYWNlKCkpOwotCWFzc2VydEVxdWFscygiMi4gVGhlIGxvY2FsIG5hbWUgc3BlY2lmaWVkIG9uIHRoZSBlbGVtZW50IGluZm9ybWF0aW9uIGNoaWxkIGlzIG5vdCBsb2NhbG5hbWUyIGl0IGlzICIgKyBlbGVtSW5mbzIuZ2V0TG9jYWxuYW1lKCksIGxvY2FsbmFtZTIsIGVsZW1JbmZvMi5nZXRMb2NhbG5hbWUoKSk7Ci0JRWxlbWVudEluZm9ybWF0aW9uIGVsZW1JbmZvMyA9IChFbGVtZW50SW5mb3JtYXRpb24pbWFuYWdlcjIuZ2V0RWxlbWVudEluZm9ybWF0aW9uU3RhY2soKS5wb3AoKTsKLQlhc3NlcnRFcXVhbHMoIjIuIFRoZSBlbGVtZW50IGluZm9ybWF0aW9uIHN0YWNrIGRvZXMgbm90IGNvbnRhaW4gMCBlbGVtZW50cyBhZnRlciBwb3BwaW5nIHRoZSB0b3AgZWxlbWVudC4iLCAwLCBtYW5hZ2VyMi5nZXRFbGVtZW50SW5mb3JtYXRpb25TdGFjaygpLnNpemUoKSk7Ci0JYXNzZXJ0RXF1YWxzKCIyLiBUaGUgbmFtZXNwYWNlIHNwZWNpZmllZCBvbiB0aGUgZWxlbWVudCBpbmZvcm1hdGlvbiBpcyBub3QgaHR0cDovL25hbWVzcGFjZTEgaXQgaXMgIiArIGVsZW1JbmZvMy5nZXROYW1lc3BhY2UoKSwgbmFtZXNwYWNlMSwgZWxlbUluZm8zLmdldE5hbWVzcGFjZSgpKTsKLQlhc3NlcnRFcXVhbHMoIjIuIFRoZSBsb2NhbCBuYW1lIHNwZWNpZmllZCBvbiB0aGUgZWxlbWVudCBpbmZvcm1hdGlvbiBpcyBub3QgbG9jYWxuYW1lIGl0IGlzICIgKyBlbGVtSW5mbzMuZ2V0TG9jYWxuYW1lKCksIGxvY2FsbmFtZTEsIGVsZW1JbmZvMy5nZXRMb2NhbG5hbWUoKSk7Ci0JYXNzZXJ0RXF1YWxzKCIyLiBUaGUgZWxlbWVudCBpbmZvcm1hdGlvbiBkb2VzIG5vdCBjb250YWluIDEgY2hpbGQgZWxlbWVudCBpdCBjb250YWlucyAiICsgZWxlbUluZm8zLmdldENoaWxkcmVuKCkuc2l6ZSgpLCAxLCBlbGVtSW5mbzMuZ2V0Q2hpbGRyZW4oKS5zaXplKCkpOwotCUVsZW1lbnRJbmZvcm1hdGlvbiBlbGVtSW5mbzQgPSAoRWxlbWVudEluZm9ybWF0aW9uKWVsZW1JbmZvMy5nZXRDaGlsZHJlbigpLmdldCgwKTsKLQlhc3NlcnRFcXVhbHMoIjIuIFRoZSBuYW1lc3BhY2Ugc3BlY2lmaWVkIG9uIHRoZSBlbGVtZW50IGluZm9ybWF0aW9uJ3MgY2hpbGQgaXMgbm90IGh0dHA6Ly9uYW1lc3BhY2UxIGl0IGlzICIgKyBlbGVtSW5mbzQuZ2V0TmFtZXNwYWNlKCksIG5hbWVzcGFjZTEsIGVsZW1JbmZvNC5nZXROYW1lc3BhY2UoKSk7Ci0JYXNzZXJ0RXF1YWxzKCIyLiBUaGUgbG9jYWwgbmFtZSBzcGVjaWZpZWQgb24gdGhlIGVsZW1lbnQgaW5mb3JtYXRpb24ncyBjaGlsZCBpcyBub3QgbG9jYWxuYW1lMiBpdCBpcyAiICsgZWxlbUluZm80LmdldExvY2FsbmFtZSgpLCBsb2NhbG5hbWUyLCBlbGVtSW5mbzQuZ2V0TG9jYWxuYW1lKCkpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCB0aGUgZW5kRWxlbWVudCBtZXRob2Qgd2l0aCB0aGUgZm9sbG93aW5nIHRlc3RzOgotICAgKiAxLiBDaGVjayB0aGF0IHRoZSBsYXN0IGVsZW1lbnQgb24gdGhlIHN0YWNrIGlzIHN1Y2Nlc3NmdWxseSBwb3BwZWQuCi0gICAqIDIuIFRlc3QgdGhhdCBhbiBlbGVtZW50IGluIGEgc2FtcGxlIG5hbWVzcGFjZSBwcm9kdWNlcyB0aGUgZXhwZWN0ZWQgbWVzc2FnZS4KLSAgICogMy4gVGVzdCB0aGF0IGFuIGVsZW1lbnQgbm90IGluIGEgc2FtcGxlIG5hbWVzcGFjZSByZXRhaW5zIGl0cyB2YWx1ZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RFbmRFbGVtZW50KCkKLSAgewotCS8vIDEuIENoZWNrIHRoYXQgdGhlIGxhc3QgZWxlbWVudCBvbiB0aGUgc3RhY2sgaXMgc3VjY2Vzc2Z1bGx5IHBvcHBlZC4KLQlTdHJpbmcgbmFtZXNwYWNlMSA9ICJodHRwOi8vbmFtZXNwYWNlMSI7Ci0gICAgU3RyaW5nIGxvY2FsbmFtZTEgPSAibG9jYWxuYW1lIjsKLQlFcnJvckN1c3RvbWl6YXRpb25NYW5hZ2VyV3JhcHBlciBtYW5hZ2VyID0gbmV3IEVycm9yQ3VzdG9taXphdGlvbk1hbmFnZXJXcmFwcGVyKCk7Ci0JbWFuYWdlci5nZXRFbGVtZW50SW5mb3JtYXRpb25TdGFjaygpLnB1c2gobmV3IEVsZW1lbnRJbmZvcm1hdGlvbihuYW1lc3BhY2UxLCBsb2NhbG5hbWUxKSk7Ci0JbWFuYWdlci5lbmRFbGVtZW50KG5hbWVzcGFjZTEsIGxvY2FsbmFtZTEpOwotCWFzc2VydEVxdWFscygiMS4gVGhlIHN0YWNrIHN0aWxsIGNvbnRhaW5zIGFuIGVsZW1lbnQuIiwgMCwgbWFuYWdlci5nZXRFbGVtZW50SW5mb3JtYXRpb25TdGFjaygpLnNpemUoKSk7Ci0JCi0JLy8gMi4gVGVzdCB0aGF0IGFuIGVsZW1lbnQgaW4gYSBzYW1wbGUgbmFtZXNwYWNlIHByb2R1Y2VzIHRoZSBleHBlY3RlZCBtZXNzYWdlLgotCVN0cmluZyBuYW1lc3BhY2UyID0gIlhNTFZhbGlkYXRpb25UZXN0U2FtcGxlTmFtZXNwYWNlIjsKLQlFcnJvckN1c3RvbWl6YXRpb25SZWdpc3RyeS5nZXRJbnN0YW5jZSgpLmFkZEVycm9yTWVzc2FnZUN1c3RvbWl6ZXIobmFtZXNwYWNlMiwgbmV3IFNhbXBsZUVycm9yTWVzc2FnZUN1c3RvbWl6ZXIoKSk7Ci0JRXJyb3JDdXN0b21pemF0aW9uTWFuYWdlcldyYXBwZXIgbWFuYWdlcjIgPSBuZXcgRXJyb3JDdXN0b21pemF0aW9uTWFuYWdlcldyYXBwZXIoKTsKLQltYW5hZ2VyMi5nZXRFbGVtZW50SW5mb3JtYXRpb25TdGFjaygpLnB1c2gobmV3IEVsZW1lbnRJbmZvcm1hdGlvbihuYW1lc3BhY2UyLCBsb2NhbG5hbWUxKSk7Ci0JRXJyb3JNZXNzYWdlSW5mb3JtYXRpb24gZW1pID0gbWFuYWdlcjIubmV3IEVycm9yTWVzc2FnZUluZm9ybWF0aW9uKCk7Ci0JZW1pLm1lc3NhZ2UgPSBuZXcgVmFsaWRhdGlvbk1lc3NhZ2UoIlNhbXBsZU1lc3NhZ2UiLCAxLCAyLCBuYW1lc3BhY2UyKTsKLQltYW5hZ2VyMi5zZXRNZXNzYWdlRm9yQ29uc2lkZXJhdGlvbihlbWkpOwotCW1hbmFnZXIyLmVuZEVsZW1lbnQobmFtZXNwYWNlMiwgbG9jYWxuYW1lMSk7Ci0JYXNzZXJ0RXF1YWxzKCIyLiBUaGUgbWVzc2FnZSB3YXMgbm90IGN1c3RvbWl6ZWQgdG8gQUFBQS4gVGhlIG1lc3NhZ2UgaXMgIiArIGVtaS5tZXNzYWdlLmdldE1lc3NhZ2UoKSwgIkFBQUEiLCBlbWkubWVzc2FnZS5nZXRNZXNzYWdlKCkpOwotCQotCS8vIDMuIFRlc3QgdGhhdCBhbiBlbGVtZW50IG5vdCBpbiBhIHNhbXBsZSBuYW1lc3BhY2UgcmV0YWlucyBpdHMgdmFsdWUuCi0JU3RyaW5nIG5hbWVzcGFjZTMgPSAiWE1MVmFsaWRhdGlvblRlc3RTYW1wbGVOYW1lc3BhY2UzIjsKLQlFcnJvckN1c3RvbWl6YXRpb25NYW5hZ2VyV3JhcHBlciBtYW5hZ2VyMyA9IG5ldyBFcnJvckN1c3RvbWl6YXRpb25NYW5hZ2VyV3JhcHBlcigpOwotCW1hbmFnZXIzLmdldEVsZW1lbnRJbmZvcm1hdGlvblN0YWNrKCkucHVzaChuZXcgRWxlbWVudEluZm9ybWF0aW9uKG5hbWVzcGFjZTMsIGxvY2FsbmFtZTEpKTsKLQlFcnJvck1lc3NhZ2VJbmZvcm1hdGlvbiBlbWkyID0gbWFuYWdlcjMubmV3IEVycm9yTWVzc2FnZUluZm9ybWF0aW9uKCk7Ci0JZW1pMi5tZXNzYWdlID0gbmV3IFZhbGlkYXRpb25NZXNzYWdlKCJTYW1wbGVNZXNzYWdlIiwgMSwgMiwgbmFtZXNwYWNlMyk7Ci0JbWFuYWdlcjMuc2V0TWVzc2FnZUZvckNvbnNpZGVyYXRpb24oZW1pMik7Ci0JbWFuYWdlcjMuZW5kRWxlbWVudChuYW1lc3BhY2UzLCBsb2NhbG5hbWUxKTsKLQlhc3NlcnRFcXVhbHMoIjMuIFRoZSBtZXNzYWdlIGRpZCBub3QgcmV0YWluIGl0cyB2YWx1ZSBvZiBTYW1wbGVNZXNzYWdlLiBUaGUgbWVzc2FnZSBpcyAiICsgZW1pMi5tZXNzYWdlLmdldE1lc3NhZ2UoKSwgIlNhbXBsZU1lc3NhZ2UiLCBlbWkyLm1lc3NhZ2UuZ2V0TWVzc2FnZSgpKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgdGhlIGNvbnNpZGVyUmVwb3J0ZWRFcnJvciBtZXRob2Qgd2l0aCB0aGUgZm9sbG93aW5nIHRlc3RzOgotICAgKiAxLiBDaGVjayB0aGF0IHRoZSBtZXNzYWdlRm9yQ29uc2lkZXJhdGlvbiBpcyBub3Qgc2V0IGlmIHRoZXJlIGFyZSBubyBjdXJyZW50Ci0gICAqICAgIHZhbGlkYXRpb24gbWVzc2FnZXMuCi0gICAqIDIuIENoZWNrIHRoYXQgdGhlIG1lc3NhZ2VGb3JDb25zaWRlcmF0aW9uIGlzIHNldCBjb3JyZWN0bHkgaWYgdGhlcmUgaXMgYQotICAgKiAgICB2YWxpZGF0aW9uIG1lc3NhZ2UuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0Q29uc2lkZXJSZXBvcnRlZEVycm9yKCkKLSAgewotCS8vIDEuIENoZWNrIHRoYXQgdGhlIG1lc3NhZ2VGb3JDb25zaWRlcmF0aW9uIGlzIG5vdCBzZXQgaWYgdGhlcmUgYXJlIG5vIGN1cnJlbnQgdmFsaWRhdGlvbiBtZXNzYWdlcy4KLQlTdHJpbmcgbmFtZXNwYWNlMSA9ICJodHRwOi8vbmFtZXNwYWNlMSI7Ci0JRXJyb3JDdXN0b21pemF0aW9uTWFuYWdlcldyYXBwZXIgbWFuYWdlciA9IG5ldyBFcnJvckN1c3RvbWl6YXRpb25NYW5hZ2VyV3JhcHBlcigpOwotCVZhbGlkYXRpb25JbmZvIHZhbGluZm8gPSBuZXcgVmFsaWRhdGlvbkluZm8obmFtZXNwYWNlMSk7Ci0JbWFuYWdlci5jb25zaWRlclJlcG9ydGVkRXJyb3IodmFsaW5mbywgImtleSIsIG51bGwpOwotCWFzc2VydE51bGwoIjEuIFRoZSBtZXNzYWdlRm9yQ29uc2lkZXJhdGlvbiBpcyBub3QgbnVsbCB3aGVuIG5vIHZhbGlkYXRpb24gbWVzc2FnZXMgZXhpc3QuIiwgbWFuYWdlci5nZXRNZXNzYWdlRm9yQ29uc2lkZXJhdGlvbigpKTsKLQkKLQkvLyAyLiBDaGVjayB0aGF0IHRoZSBtZXNzYWdlRm9yQ29uc2lkZXJhdGlvbiBpcyBzZXQgY29ycmVjdGx5IGlmIHRoZXJlIGlzIGEgdmFsaWRhdGlvbiBtZXNzYWdlLgotCUVycm9yQ3VzdG9taXphdGlvbk1hbmFnZXJXcmFwcGVyIG1hbmFnZXIyID0gbmV3IEVycm9yQ3VzdG9taXphdGlvbk1hbmFnZXJXcmFwcGVyKCk7Ci0JVmFsaWRhdGlvbkluZm8gdmFsaW5mbzIgPSBuZXcgVmFsaWRhdGlvbkluZm8obmFtZXNwYWNlMSk7Ci0JdmFsaW5mbzIuYWRkRXJyb3IoIm1lc3NhZ2UiLCAxLCAxLCBuYW1lc3BhY2UxKTsKLQltYW5hZ2VyMi5jb25zaWRlclJlcG9ydGVkRXJyb3IodmFsaW5mbzIsICJrZXkiLCBudWxsKTsKLQlhc3NlcnROb3ROdWxsKCIyLiBUaGUgbWVzc2FnZUZvckNvbnNpZGVyYXRpb24gaXMgbnVsbCB3aGVuIGEgdmFsaWRhdGlvbiBtZXNzYWdlIGV4aXN0cy4iLCBtYW5hZ2VyMi5nZXRNZXNzYWdlRm9yQ29uc2lkZXJhdGlvbigpKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgdGhhdCBhbiBlcnJvciBjdXN0b21pemVyIGlzIG9ubHkgY2FsbGVkIGZvciB0aGUKLSAgICogY29ycmVjdCBlbGVtZW50LgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEVycm9yUmVwb3J0ZWRPbkNvcnJlY3RFbGVtZW50KCkKLSAgewotCSAgSUVycm9yTWVzc2FnZUN1c3RvbWl6ZXIgdGVzdEN1c3RvbWl6ZXIgPSBuZXcgSUVycm9yTWVzc2FnZUN1c3RvbWl6ZXIoKQotCSAgewotCQkgIHB1YmxpYyBTdHJpbmcgY3VzdG9taXplTWVzc2FnZShFbGVtZW50SW5mb3JtYXRpb24gZWxlbWVudEluZm8sIFN0cmluZyBrZXksIE9iamVjdFtdIGFyZ3VtZW50cykKLQkJICB7Ci0JCQkgIGlmKGVsZW1lbnRJbmZvLmdldExvY2FsbmFtZSgpLmVxdWFscygiY2hpbGQxIikpCi0JCQkgIHsKLQkJCQkgIGZhaWwoIkFuIGVycm9yIHdhcyByZXBvcnRlZCBmb3IgdGhlIGNoaWxkMSBlbGVtZW50LiIpOwotCQkJICB9Ci0JCQkgIHJldHVybiBudWxsOwotCQkgIH0KLQkgIH07Ci0JICBFcnJvckN1c3RvbWl6YXRpb25SZWdpc3RyeSByZWdpc3RyeSA9IEVycm9yQ3VzdG9taXphdGlvblJlZ2lzdHJ5LmdldEluc3RhbmNlKCk7Ci0JICByZWdpc3RyeS5hZGRFcnJvck1lc3NhZ2VDdXN0b21pemVyKCJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3NpbXBsZW5lc3RlZCIsIHRlc3RDdXN0b21pemVyKTsKLQkgIHRyeQotCSAgewotCQkgIFN0cmluZyBQTFVHSU5fQUJTT0xVVEVfUEFUSCA9IFhNTFZhbGlkYXRvclRlc3RzUGx1Z2luLmdldFBsdWdpbkxvY2F0aW9uKCkudG9TdHJpbmcoKSArICIvIjsKLQkJICBTdHJpbmcgdXJpID0gImZpbGU6Ly8vIiArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInRlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9DdXN0b21FcnJvclJlcG9ydGVkT25Db3JyZWN0RWxlbWVudC9zaW1wbGVuZXN0ZWQueG1sIjsKLQkJICAKLQkJICBYTUxWYWxpZGF0b3IgdmFsaWRhdG9yID0gbmV3IFhNTFZhbGlkYXRvcigpOwotCQkgIHZhbGlkYXRvci52YWxpZGF0ZSh1cmksIG51bGwsIG5ldyBYTUxWYWxpZGF0aW9uQ29uZmlndXJhdGlvbigpKTsKLQkJICB2YWxpZGF0b3IudmFsaWRhdGUodXJpLCBudWxsLCBuZXcgWE1MVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24oKSk7Ci0JICB9Ci0JICBjYXRjaChJT0V4Y2VwdGlvbiBlKQotCSAgewotCQkgIGZhaWwoIkFuIGV4Y2VwdGlvbiBvY2N1cnJlZCB3aGlsZSBydW5uaW5nIHRoZSB0ZXN0OiIgKyBlKTsKLQkgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lcnJvcmN1c3RvbWl6YXRpb24vRXJyb3JDdXN0b21pemF0aW9uTWFuYWdlcldyYXBwZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZXJyb3JjdXN0b21pemF0aW9uL0Vycm9yQ3VzdG9taXphdGlvbk1hbmFnZXJXcmFwcGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4MjAyYmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lcnJvcmN1c3RvbWl6YXRpb24vRXJyb3JDdXN0b21pemF0aW9uTWFuYWdlcldyYXBwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZXJyb3JjdXN0b21pemF0aW9uOwotCi1pbXBvcnQgamF2YS51dGlsLlN0YWNrOwotCi0vKioKLSAqIEEgd3JhcHBlciBmb3IgY2xhc3MgRXJyb3JDdXN0b21pemF0aW9uTWFuYWdlciB0byBmYWNpbGl0YXRlIHRlc3RpbmcuCi0gKi8KLXB1YmxpYyBjbGFzcyBFcnJvckN1c3RvbWl6YXRpb25NYW5hZ2VyV3JhcHBlciBleHRlbmRzIEVycm9yQ3VzdG9taXphdGlvbk1hbmFnZXIgCi17Ci0gIC8qKgotICAgKiBHZXQgdGhlIGVsZW1lbnQgaW5mb3JtYXRpb24gc3RhY2suCi0gICAqIAotICAgKiBAcmV0dXJuCi0gICAqIAkJVGhlIGVsZW1lbnQgaW5mb3JtYXRpb24gc3RhY2suCi0gICAqLwotICBwdWJsaWMgU3RhY2sgZ2V0RWxlbWVudEluZm9ybWF0aW9uU3RhY2soKQotICB7Ci0JcmV0dXJuIGVsZW1lbnRJbmZvcm1hdGlvblN0YWNrOwotICB9Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSBjdXJyZW50IG1lc3NhZ2UgZm9yIGNvbnNpZGVyYXRpb24uCi0gICAqIAotICAgKiBAcmV0dXJuCi0gICAqIAkJVGhlIGN1cnJlbnQgbWVzc2FnZSBmb3IgY29uc2lkZXJhdGlvbi4KLSAgICovCi0gIHB1YmxpYyBFcnJvck1lc3NhZ2VJbmZvcm1hdGlvbiBnZXRNZXNzYWdlRm9yQ29uc2lkZXJhdGlvbigpCi0gIHsKLQlyZXR1cm4gbWVzc2FnZUZvckNvbnNpZGVyYXRpb247Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBTZXQgdGhlIGN1cnJlbnQgbWVzc2FnZSBmb3IgY29uc2lkZXJhdGlvbi4KLSAgICogCi0gICAqIEBwYXJhbSBtZXNzYWdlCi0gICAqIAkJVGhlIGN1cnJlbnQgbWVzc2FnZSBmb3IgY29uc2lkZXJhdGlvbi4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE1lc3NhZ2VGb3JDb25zaWRlcmF0aW9uKEVycm9yTWVzc2FnZUluZm9ybWF0aW9uIG1lc3NhZ2UpCi0gIHsKLQltZXNzYWdlRm9yQ29uc2lkZXJhdGlvbiA9IG1lc3NhZ2U7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZXJyb3JjdXN0b21pemF0aW9uL0Vycm9yQ3VzdG9taXphdGlvblJlZ2lzdHJ5VGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lcnJvcmN1c3RvbWl6YXRpb24vRXJyb3JDdXN0b21pemF0aW9uUmVnaXN0cnlUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiMDM0MTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lcnJvcmN1c3RvbWl6YXRpb24vRXJyb3JDdXN0b21pemF0aW9uUmVnaXN0cnlUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lcnJvcmN1c3RvbWl6YXRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLS8qKgotICogVGVzdHMgZm9yIHRoZSBFcnJvckN1c3RvbWl6YXRpb25SZWdpc3RyeSBjbGFzcy4KLSAqLwotcHVibGljIGNsYXNzIEVycm9yQ3VzdG9taXphdGlvblJlZ2lzdHJ5VGVzdCBleHRlbmRzIFRlc3RDYXNlIAotewotICBwcml2YXRlIEVycm9yQ3VzdG9taXphdGlvblJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gbnVsbDsKLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIAotICB7Ci0JcmVnaXN0cnkgPSBuZXcgRXJyb3JDdXN0b21pemF0aW9uUmVnaXN0cnlXcmFwcGVyKCk7Ci0gICAgc3VwZXIuc2V0VXAoKTsKLSAgfQotCi0gIC8qKgotICAgKiBUZXN0IHRoZSBBZGRFcnJvck1lc3NhZ2VDdXN0b21pemVyVG9SZWdpc3RyeSBtZXRob2Qgd2l0aCB0aGUgZm9sbG93aW5nIHRlc3RzOgotICAgKiAxLiBUZXN0IHRoYXQgYWRkaW5nIGFuIGVycm9yIGN1c3RvbWl6ZXIgZm9yIGEgbmFtZXNwYWNlIGlzIHN1Y2Nlc3NmdWwuCi0gICAqIDIuIFRlc3QgdGhhdCBhZGRpbmcgdHdvIGVycm9yIGN1c3RvbWl6ZXJzIGZvciBhIG5hbWVzcGFjZSByZXR1cm5zIGJvdGggY3VzdG9taXplcnMuCi0gICAqIDMuIFRlc3QgdGhhdCBhZGRpbmcgYW4gZW50cnkgd2l0aCBhIG51bGwgbmFtZXNwYWNlIGFkZHMgdGhlIGVudHJ5IGZvciB0aGUgZW1wdHkgc3RyaW5nCi0gICAqICAgIG5hbWVzcGFjZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RBZGRFcnJvck1lc3NhZ2VDdXN0b21pemVyVG9SZWdpc3RyeSgpCi0gIHsKLSAgICAvLyAxLiBUZXN0IHRoYXQgYWRkaW5nIGFuIGVycm9yIGN1c3RvbWl6ZXIgZm9yIGEgbmFtZXNwYWNlIGlzIHN1Y2Nlc3NmdWwuCi0JU3RyaW5nIG5hbWVzcGFjZTEgPSAiaHR0cDovL25hbWVzcGFjZTEiOwotCUlFcnJvck1lc3NhZ2VDdXN0b21pemVyIGN1c3RvbWl6ZXIgPSBuZXcgSUVycm9yTWVzc2FnZUN1c3RvbWl6ZXIoKXsKLSAgICAgIHB1YmxpYyBTdHJpbmcgY3VzdG9taXplTWVzc2FnZShFbGVtZW50SW5mb3JtYXRpb24gZWxlbWVudEluZm8sIFN0cmluZyBlcnJvcktleSwgT2JqZWN0W10gYXJndW1lbnRzKSAKLSAgICAgIHsKLSAgICAgICAgLy8gVGhpcyBzdHViIGZvciB0ZXN0aW5nIGRvZXMgbm90IHJlcXVpcmUgYW4gaW1wbGVtZW50YXRpb24uCi0JCXJldHVybiBudWxsOwotICAgICAgfQotICAgIH07Ci0gICAgcmVnaXN0cnkuYWRkRXJyb3JNZXNzYWdlQ3VzdG9taXplcihuYW1lc3BhY2UxLCBjdXN0b21pemVyKTsKLSAgICBJRXJyb3JNZXNzYWdlQ3VzdG9taXplcltdIHJlZ2lzdGVyZWRDdXN0b21pemVycyA9IHJlZ2lzdHJ5LmdldEN1c3RvbWl6ZXJzKG5hbWVzcGFjZTEpOwotICAgIGFzc2VydEVxdWFscygiMS4gVGhlcmUgc2hvdWxkIG9ubHkgYmUgMSBjdXN0b21pemVyIHJlZ2lzdGVyZWQgZm9yIHRoZSBuYW1lc3BhY2UgYnV0IHRoZXJlIGFyZSAiICsgcmVnaXN0ZXJlZEN1c3RvbWl6ZXJzLmxlbmd0aCwgMSwgcmVnaXN0ZXJlZEN1c3RvbWl6ZXJzLmxlbmd0aCk7Ci0gICAgYXNzZXJ0RXF1YWxzKCIxLiBUaGUgSUVycm9yTWVzc2FnZUN1c3RvbWl6ZXIgcmV0dXJuZWQgaXMgbm90IHRoZSBzYW1lIG9uZSByZWdpc3RlcmVkLiIsIGN1c3RvbWl6ZXIsIHJlZ2lzdGVyZWRDdXN0b21pemVyc1swXSk7Ci0gICAgCi0gICAgLy8gMi4gVGVzdCB0aGF0IGFkZGluZyB0d28gZXJyb3IgY3VzdG9taXplcnMgZm9yIGEgbmFtZXNwYWNlIHJldHVybnMgYm90aCBjdXN0b21pemVycy4KLQlJRXJyb3JNZXNzYWdlQ3VzdG9taXplciBjdXN0b21pemVyMiA9IG5ldyBJRXJyb3JNZXNzYWdlQ3VzdG9taXplcigpewotICAgICAgcHVibGljIFN0cmluZyBjdXN0b21pemVNZXNzYWdlKEVsZW1lbnRJbmZvcm1hdGlvbiBlbGVtZW50SW5mbywgU3RyaW5nIGVycm9yS2V5LCBPYmplY3RbXSBhcmd1bWVudHMpIAotICAgICAgewotICAgICAgICAvLyBUaGlzIHN0dWIgZm9yIHRlc3RpbmcgZG9lcyBub3QgcmVxdWlyZSBhbiBpbXBsZW1lbnRhdGlvbi4KLQkJcmV0dXJuIG51bGw7Ci0gICAgICB9Ci0gICAgfTsKLSAgICByZWdpc3RyeS5hZGRFcnJvck1lc3NhZ2VDdXN0b21pemVyKG5hbWVzcGFjZTEsIGN1c3RvbWl6ZXIyKTsKLSAgICByZWdpc3RlcmVkQ3VzdG9taXplcnMgPSByZWdpc3RyeS5nZXRDdXN0b21pemVycyhuYW1lc3BhY2UxKTsKLSAgICBhc3NlcnRFcXVhbHMoIjIuIFRoZXJlIHNob3VsZCBiZSAyIGN1c3RvbWl6ZXJzIHJlZ2lzdGVyZWQgZm9yIHRoZSBuYW1lc3BhY2UgYnV0IHRoZXJlIGFyZSAiICsgcmVnaXN0ZXJlZEN1c3RvbWl6ZXJzLmxlbmd0aCwgMiwgcmVnaXN0ZXJlZEN1c3RvbWl6ZXJzLmxlbmd0aCk7Ci0gICAgYXNzZXJ0RXF1YWxzKCIyLiBUaGUgZmlyc3QgSUVycm9yTWVzc2FnZUN1c3RvbWl6ZXIgcmV0dXJuZWQgaXMgbm90IHRoZSBzYW1lIG9uZSByZWdpc3RlcmVkLiIsIGN1c3RvbWl6ZXIsIHJlZ2lzdGVyZWRDdXN0b21pemVyc1swXSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCIyLiBUaGUgc2Vjb25kIElFcnJvck1lc3NhZ2VDdXN0b21pemVyIHJldHVybmVkIGlzIG5vdCB0aGUgc2FtZSBvbmUgcmVnaXN0ZXJlZC4iLCBjdXN0b21pemVyMiwgcmVnaXN0ZXJlZEN1c3RvbWl6ZXJzWzFdKTsKLSAgICAKLSAgICAvLyAzLiBUZXN0IHRoYXQgYWRkaW5nIGFuIGVudHJ5IHdpdGggYSBudWxsIG5hbWVzcGFjZSBhZGRzIHRoZSBlbnRyeSBmb3IgdGhlIGVtcHR5IHN0cmluZyBuYW1lc3BhY2UuCi0gICAgcmVnaXN0cnkuYWRkRXJyb3JNZXNzYWdlQ3VzdG9taXplcihudWxsLCBjdXN0b21pemVyKTsKLSAgICByZWdpc3RlcmVkQ3VzdG9taXplcnMgPSByZWdpc3RyeS5nZXRDdXN0b21pemVycygiIik7Ci0gICAgYXNzZXJ0RXF1YWxzKCIzLiBUaGVyZSBzaG91bGQgYmUgMSBjdXN0b21pemVycyByZWdpc3RlcmVkIGZvciB0aGUgbmFtZXNwYWNlIGJ1dCB0aGVyZSBhcmUgIiArIHJlZ2lzdGVyZWRDdXN0b21pemVycy5sZW5ndGgsIDEsIHJlZ2lzdGVyZWRDdXN0b21pemVycy5sZW5ndGgpOwotICAgIGFzc2VydEVxdWFscygiMy4gVGhlIElFcnJvck1lc3NhZ2VDdXN0b21pemVyIHJldHVybmVkIGlzIG5vdCB0aGUgc2FtZSBvbmUgcmVnaXN0ZXJlZC4iLCBjdXN0b21pemVyLCByZWdpc3RlcmVkQ3VzdG9taXplcnNbMF0pOwotICB9Ci0JCi0gIC8qKgotICAgKiBUZXN0IHRoZSBnZXRDdXN0b21pemVycyBtZXRob2Qgd2l0aCB0aGUgZm9sbG93aW5nIHRlc3RzOgotICAgKiAxLiBUZXN0IHRoYXQgcmVxdWVzdGluZyBhbiBlcnJvciBjdXN0b21pemVyIGFycmF5IGZvciBhIG5hbWVzcGFjZSB0aGF0IGhhcyBub3QgYmVlbgotICAgKiAgICByZWdpc3RlcmVkIHByb2R1Y2VzIGFuIGVtcHR5IGFycmF5LgotICAgKiAyLiBUZXN0IHRoYXQgcmVxdWVzdGluZyBhbiBlcnJvciBjdXN0b21pemVyIGFycmF5IGZvciB0aGUgbnVsbCBuYW1lc3BhY2UgcmV0dXJucyB0aGUKLSAgICogICAgb25lIHJlZ2lzdGVyZWQgY3VzdG9taXplci4KLSAgICogMy4gVGVzdCB0aGF0IHJlcXVlc3RpbmcgYW4gZXJyb3IgY3VzdG9taXplciBhcnJheSBmb3IgdGhlIGVtcHR5IHN0cmluZyBuYW1lc3BhY2UgcmV0dXJucwotICAgKiAgICB0aGUgb25lIHJlZ2lzdGVyZWQgY3VzdG9taXplci4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RHZXRDdXN0b21pemVycygpCi0gIHsKLQkvLyAxLiBUZXN0IHRoYXQgcmVxdWVzdGluZyBhbiBlcnJvciBjdXN0b21pemVyIGxpc3QgZm9yIGEgbmFtZXNwYWNlIHRoYXQgaGFzIG5vdCBiZWVuCi0JLy8gcmVnaXN0ZXJlZCBwcm9kdWNlcyBhbiBlbXB0eSBsaXN0LgotCUlFcnJvck1lc3NhZ2VDdXN0b21pemVyW10gY3VzdG9taXplcnMgPSByZWdpc3RyeS5nZXRDdXN0b21pemVycygiaHR0cDovL25vbnJlZ2lzdGVyZWRuYW1lc3BhY2UiKTsKLQlhc3NlcnRFcXVhbHMoIjEuIFRoZSBhcnJheSBvZiBjdXN0b21pemVycyBmb3IgYW4gdW5yZWdpc3RlcmVkIG5hbWVzcGFjZSBpcyBub3QgZW1wdHkuIiwgMCwgY3VzdG9taXplcnMubGVuZ3RoKTsKLQkKLQkvLyAyLiBUZXN0IHRoYXQgcmVxdWVzdGluZyBhbiBlcnJvciBjdXN0b21pemVyIGFycmF5IGZvciB0aGUgbnVsbCBuYW1lc3BhY2UgcmV0dXJucyB0aGUKLQkvLyBvbmUgcmVnaXN0ZXJlZCBjdXN0b21pemVyLgotCUlFcnJvck1lc3NhZ2VDdXN0b21pemVyIGN1c3RvbWl6ZXIgPSBuZXcgSUVycm9yTWVzc2FnZUN1c3RvbWl6ZXIoKXsKLQkgIHB1YmxpYyBTdHJpbmcgY3VzdG9taXplTWVzc2FnZShFbGVtZW50SW5mb3JtYXRpb24gZWxlbWVudEluZm8sIFN0cmluZyBlcnJvcktleSwgT2JqZWN0W10gYXJndW1lbnRzKSAKLQkgIHsKLQkgICAgLy8gVGhpcyBzdHViIGZvciB0ZXN0aW5nIGRvZXMgbm90IHJlcXVpcmUgYW4gaW1wbGVtZW50YXRpb24uCi0gICAgICAgIHJldHVybiBudWxsOwotCSAgfQotCX07Ci0JcmVnaXN0cnkuYWRkRXJyb3JNZXNzYWdlQ3VzdG9taXplcihudWxsLCBjdXN0b21pemVyKTsKLQljdXN0b21pemVycyA9IHJlZ2lzdHJ5LmdldEN1c3RvbWl6ZXJzKG51bGwpOwotCWFzc2VydEVxdWFscygiMi4gVGhlIGFycmF5IG9mIGN1c3RvbWl6ZXJzIGZvciBhIHJlZ2lzdGVyZWQgY3VzdG9taXplciBmb3IgdGhlIG51bGwgbmFtZXNwYWNlIGRvZXMgbm90IGNvbnRhaW4gMSBjdXN0b21pemVyLiIsIDEsIGN1c3RvbWl6ZXJzLmxlbmd0aCk7Ci0JYXNzZXJ0RXF1YWxzKCIyLiBUaGUgY3VzdG9taXplciBmb3IgdGhlIG51bGwgbmFtZXNwYWNlIHdhcyBub3Qgc3VjY2Vzc2Z1bGx5IHJldHVybmVkLiIsIGN1c3RvbWl6ZXIsIGN1c3RvbWl6ZXJzWzBdKTsKLQkKLQkvLyAzLiBUZXN0IHRoYXQgcmVxdWVzdGluZyBhbiBlcnJvciBjdXN0b21pemVyIGFycmF5IGZvciB0aGUgZW1wdHkgc3RyaW5nIG5hbWVzcGFjZSByZXR1cm5zCi0JLy8gICAgdGhlIG9uZSByZWdpc3RlcmVkIGN1c3RvbWl6ZXIgZm9yIHRoZSBudWxsIG5hbWVzcGFjZS4KLQljdXN0b21pemVycyA9IHJlZ2lzdHJ5LmdldEN1c3RvbWl6ZXJzKCIiKTsKLQlhc3NlcnRFcXVhbHMoIjMuIFRoZSBhcnJheSBvZiBjdXN0b21pemVycyBmb3IgYSByZWdpc3RlcmVkIGN1c3RvbWl6ZXIgZm9yIHRoZSBudWxsIG5hbWVzcGFjZSBkb2VzIG5vdCBjb250YWluIDEgY3VzdG9taXplciBmb3IgdGhlIGVtcHR5IHN0cmluZyBuYW1lc3BhY2UuIiwgMSwgY3VzdG9taXplcnMubGVuZ3RoKTsKLQlhc3NlcnRFcXVhbHMoIjMuIFRoZSBjdXN0b21pemVyIGZvciB0aGUgZW1wdHkgc3RyaW5nIG5hbWVzcGFjZSB3YXMgbm90IHN1Y2Nlc3NmdWxseSByZXR1cm5lZC4iLCBjdXN0b21pemVyLCBjdXN0b21pemVyc1swXSk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lcnJvcmN1c3RvbWl6YXRpb24vRXJyb3JDdXN0b21pemF0aW9uUmVnaXN0cnlXcmFwcGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2Vycm9yY3VzdG9taXphdGlvbi9FcnJvckN1c3RvbWl6YXRpb25SZWdpc3RyeVdyYXBwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmUwMmQ3My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2Vycm9yY3VzdG9taXphdGlvbi9FcnJvckN1c3RvbWl6YXRpb25SZWdpc3RyeVdyYXBwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZXJyb3JjdXN0b21pemF0aW9uOwotCi0vKioKLSAqIEEgd3JhcHBlciBmb3IgdGhlIEVycm9yQ3VzdG9taXphdGlvblJlZ2lzdHJ5IGNsYXNzIHRvIGFsbG93IGZvciB0ZXN0aW5nLgotICovCi1wdWJsaWMgY2xhc3MgRXJyb3JDdXN0b21pemF0aW9uUmVnaXN0cnlXcmFwcGVyIGV4dGVuZHMgRXJyb3JDdXN0b21pemF0aW9uUmVnaXN0cnkgCi17Ci0gIC8qKgotICAgKiBQdWJsaWMgY29uc3RydWN0b3IuCi0gICAqLwotICBwdWJsaWMgRXJyb3JDdXN0b21pemF0aW9uUmVnaXN0cnlXcmFwcGVyKCkKLSAgewotCXN1cGVyKCk7Ci0gIH0KLSAgCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2Vycm9yY3VzdG9taXphdGlvbi9FcnJvck1lc3NhZ2VDdXN0b21pemVyRGVsZWdhdGVUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2Vycm9yY3VzdG9taXphdGlvbi9FcnJvck1lc3NhZ2VDdXN0b21pemVyRGVsZWdhdGVUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0ZjdlNDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lcnJvcmN1c3RvbWl6YXRpb24vRXJyb3JNZXNzYWdlQ3VzdG9taXplckRlbGVnYXRlVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lcnJvcmN1c3RvbWl6YXRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMuaW50ZXJuYWwuWE1MVmFsaWRhdG9yVGVzdHNQbHVnaW47Ci0KLS8qKgotICogVGVzdCB0aGUgRXJyb3JNZXNzYWdlQ3VzdG9taXplckRlbGVnYXRlIGNsYXNzLgotICovCi1wdWJsaWMgY2xhc3MgRXJyb3JNZXNzYWdlQ3VzdG9taXplckRlbGVnYXRlVGVzdCBleHRlbmRzIFRlc3RDYXNlIAotewotICAvKioKLSAgICogVGVzdCB0aGUgbG9hZEN1c3RvbWl6ZXIgbWV0aG9kIHdpdGggdGhlIGZvbGxvd2luZyB0ZXN0czoKLSAgICogMS4gVGVzdCB0aGF0IGEgdmFsaWQgYnVuZGxlIGEgY2xhc3Mgc3VjY2VlZHMuCi0gICAqIDIuIFRlc3QgdGhhdCBhbiBpbnZhbGlkIGNsYXNzIGZhaWxzIGFuZCBrZWVwcyB0aGUgY3VzdG9taXplciBzZXQgdG8gbnVsbC4KLSAgICogMy4gVGVzdCB0aGF0IGEgbnVsbCBidW5kbGUgZmFpbHMgYW5kIGtlZXBzIHRoZSBjdXN0b21pemVyIHNldCB0byBudWxsLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdExvYWRDdXN0b21pemVyKCkKLSAgewotCS8vIDEuIFRlc3QgdGhhdCBhIHZhbGlkIGJ1bmRsZSBhIGNsYXNzIHN1Y2NlZWRzLgotCUVycm9yTWVzc2FnZUN1c3RvbWl6ZXJEZWxlZ2F0ZVdyYXBwZXIgZGVsZWdhdGUgPSBuZXcgRXJyb3JNZXNzYWdlQ3VzdG9taXplckRlbGVnYXRlV3JhcHBlcihYTUxWYWxpZGF0b3JUZXN0c1BsdWdpbi5nZXRQbHVnaW4oKS5nZXRCdW5kbGUoKSwgIm9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVycm9yY3VzdG9taXphdGlvbi5TYW1wbGVFcnJvck1lc3NhZ2VDdXN0b21pemVyIik7Ci0JZGVsZWdhdGUubG9hZEN1c3RvbWl6ZXIoKTsKLQlhc3NlcnROb3ROdWxsKCIxLiBUaGUgY3VzdG9taXplciBsb2FkZWQgd2FzIG51bGwgZm9yIGEgdmFsaWQgY3VzdG9taXplciBhbmQgYnVuZGxlLiIsIGRlbGVnYXRlLmdldEN1c3RvbWl6ZXIoKSk7Ci0JCi0JLy8gMi4gVGVzdCB0aGF0IGFuIGludmFsaWQgY2xhc3MgZmFpbHMgYW5kIGtlZXBzIHRoZSBjdXN0b21pemVyIHNldCB0byBudWxsLgotCUVycm9yTWVzc2FnZUN1c3RvbWl6ZXJEZWxlZ2F0ZVdyYXBwZXIgZGVsZWdhdGUyID0gbmV3IEVycm9yTWVzc2FnZUN1c3RvbWl6ZXJEZWxlZ2F0ZVdyYXBwZXIoWE1MVmFsaWRhdG9yVGVzdHNQbHVnaW4uZ2V0UGx1Z2luKCkuZ2V0QnVuZGxlKCksICJvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lcnJvcmN1c3RvbWl6YXRpb24uTm9uZXhpc3RhbnRFcnJvck1lc3NhZ2VDdXN0b21pemVyIik7Ci0JZGVsZWdhdGUyLmxvYWRDdXN0b21pemVyKCk7Ci0JYXNzZXJ0TnVsbCgiMi4gVGhlIGN1c3RvbWl6ZXIgbG9hZGVkIHdhcyBub3QgbnVsbCBmb3IgYW4gaW52YWxpZCBjdXN0b21pemVyIGNsYXNzLiIsIGRlbGVnYXRlMi5nZXRDdXN0b21pemVyKCkpOwotCQotCS8vIDMuIFRlc3QgdGhhdCBhIG51bGwgYnVuZGxlIGZhaWxzIGFuZCBrZWVwcyB0aGUgY3VzdG9taXplciBzZXQgdG8gbnVsbC4KLQlFcnJvck1lc3NhZ2VDdXN0b21pemVyRGVsZWdhdGVXcmFwcGVyIGRlbGVnYXRlMyA9IG5ldyBFcnJvck1lc3NhZ2VDdXN0b21pemVyRGVsZWdhdGVXcmFwcGVyKG51bGwsICJvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lcnJvcmN1c3RvbWl6YXRpb24uU2FtcGxlRXJyb3JNZXNzYWdlQ3VzdG9taXplciIpOwotCWRlbGVnYXRlMy5sb2FkQ3VzdG9taXplcigpOwotCWFzc2VydE51bGwoIjMuIFRoZSBjdXN0b21pemVyIGxvYWRlZCB3YXMgbm90IG51bGwgZm9yIGEgbnVsbCBidW5kbGUuIiwgZGVsZWdhdGUzLmdldEN1c3RvbWl6ZXIoKSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IHRoZSBjdXN0b21pemVNZXNzYWdlIG1ldGhvZCB3aXRoIHRoZSBmb2xsb3dpbmcgdGVzdHM6Ci0gICAqIDEuIFRlc3QgdGhhdCB0aGUgbWVzc2FnZSByZXR1cm5lZCBpcyBjb3JyZWN0IGZvciBhIHZhbGlkIGN1c3RvbWl6ZXIuCi0gICAqIDIuIFRlc3QgdGhhdCB0aGUgbWVzc2FnZSByZXR1cm5lZCBpcyBudWxsIGZvciBhbiBpbnZhbGlkIGN1c3RvbWl6ZXIgY2xhc3MuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0Q3VzdG9taXplTWVzc2FnZSgpCi0gIHsKLSAgICAvLyAxLiBUZXN0IHRoYXQgdGhlIG1lc3NhZ2UgcmV0dXJuZWQgaXMgY29ycmVjdCBmb3IgYSB2YWxpZCBjdXN0b21pemVyLgotICAgIEVycm9yTWVzc2FnZUN1c3RvbWl6ZXJEZWxlZ2F0ZVdyYXBwZXIgZGVsZWdhdGUgPSBuZXcgRXJyb3JNZXNzYWdlQ3VzdG9taXplckRlbGVnYXRlV3JhcHBlcihYTUxWYWxpZGF0b3JUZXN0c1BsdWdpbi5nZXRQbHVnaW4oKS5nZXRCdW5kbGUoKSwgIm9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVycm9yY3VzdG9taXphdGlvbi5TYW1wbGVFcnJvck1lc3NhZ2VDdXN0b21pemVyIik7Ci0gICAgU3RyaW5nIG1lc3NhZ2UgPSBkZWxlZ2F0ZS5jdXN0b21pemVNZXNzYWdlKG51bGwsIG51bGwsIG51bGwpOwotCWFzc2VydEVxdWFscygiMS4gVGhlIG1lc3NhZ2UgcmV0dXJuZWQgd2FzIG5vdCBBQUFBLiIsICJBQUFBIiwgbWVzc2FnZSk7Ci0JCi0JLy8gMi4gVGVzdCB0aGF0IHRoZSBtZXNzYWdlIHJldHVybmVkIGlzIG51bGwgZm9yIGFuIGludmFsaWQgY3VzdG9taXplciBjbGFzcy4KLQlFcnJvck1lc3NhZ2VDdXN0b21pemVyRGVsZWdhdGVXcmFwcGVyIGRlbGVnYXRlMiA9IG5ldyBFcnJvck1lc3NhZ2VDdXN0b21pemVyRGVsZWdhdGVXcmFwcGVyKFhNTFZhbGlkYXRvclRlc3RzUGx1Z2luLmdldFBsdWdpbigpLmdldEJ1bmRsZSgpLCAib3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZXJyb3JjdXN0b21pemF0aW9uLk5vbmV4aXN0YW50RXJyb3JNZXNzYWdlQ3VzdG9taXplciIpOwotCW1lc3NhZ2UgPSBkZWxlZ2F0ZTIuY3VzdG9taXplTWVzc2FnZShudWxsLCBudWxsLCBudWxsKTsKLQlhc3NlcnROdWxsKCIyLiBUaGUgbWVzc2FnZSByZXR1cm5lZCB3YXMgbm90IG51bGwgZm9yIGFuIGludmFsaWQgY3VzdG9taXplci4iLCBtZXNzYWdlKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lcnJvcmN1c3RvbWl6YXRpb24vRXJyb3JNZXNzYWdlQ3VzdG9taXplckRlbGVnYXRlV3JhcHBlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lcnJvcmN1c3RvbWl6YXRpb24vRXJyb3JNZXNzYWdlQ3VzdG9taXplckRlbGVnYXRlV3JhcHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjg3MTYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZXJyb3JjdXN0b21pemF0aW9uL0Vycm9yTWVzc2FnZUN1c3RvbWl6ZXJEZWxlZ2F0ZVdyYXBwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZXJyb3JjdXN0b21pemF0aW9uOwotCi1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLQotLyoqCi0gKiBBIHdyYXBwZXIgb2YgdGhlIGNsYXNzIEVycm9yTWVzc2FnZUN1c3RvbWl6ZXJEZWxlZ2F0ZSB0byBmYWNpbGl0YXRlIHRlc3RpbmcuCi0gKi8KLXB1YmxpYyBjbGFzcyBFcnJvck1lc3NhZ2VDdXN0b21pemVyRGVsZWdhdGVXcmFwcGVyIGV4dGVuZHMgRXJyb3JNZXNzYWdlQ3VzdG9taXplckRlbGVnYXRlIAotewotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqLwotICBwdWJsaWMgRXJyb3JNZXNzYWdlQ3VzdG9taXplckRlbGVnYXRlV3JhcHBlcihCdW5kbGUgYnVuZGxlLCBTdHJpbmcgY2xhc3NuYW1lKQotICB7Ci0Jc3VwZXIoYnVuZGxlLCBjbGFzc25hbWUpOwotICB9Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZXJyb3JjdXN0b21pemF0aW9uLkVycm9yTWVzc2FnZUN1c3RvbWl6ZXJEZWxlZ2F0ZSNsb2FkQ3VzdG9taXplcigpCi0gICAqLwotICBwdWJsaWMgdm9pZCBsb2FkQ3VzdG9taXplcigpCi0gIHsKLQlzdXBlci5sb2FkQ3VzdG9taXplcigpOwotICB9Ci0gIAotICBwdWJsaWMgSUVycm9yTWVzc2FnZUN1c3RvbWl6ZXIgZ2V0Q3VzdG9taXplcigpCi0gIHsKLQlyZXR1cm4gY3VzdG9taXplcjsKLSAgfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2Vycm9yY3VzdG9taXphdGlvbi9TYW1wbGVFcnJvck1lc3NhZ2VDdXN0b21pemVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2Vycm9yY3VzdG9taXphdGlvbi9TYW1wbGVFcnJvck1lc3NhZ2VDdXN0b21pemVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiNjE4MjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lcnJvcmN1c3RvbWl6YXRpb24vU2FtcGxlRXJyb3JNZXNzYWdlQ3VzdG9taXplci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lcnJvcmN1c3RvbWl6YXRpb247Ci0KLS8qKgotICogQSBzYW1wbGUgZXJyb3IgbWVzc2FnZSBjdXN0b21pemVyIGZvciB0ZXN0aW5nLiBUaGlzIGN1c3RvbWl6ZXIgaGFzIGEgc2ltcGxlCi0gKiBpbXBsZW1lbnRhdGlvbiB0aGF0IHNpbXBsZSByZXR1cm5zIHRoZSBzdHJpbmcgIkFBQUEiLgotICovCi1wdWJsaWMgY2xhc3MgU2FtcGxlRXJyb3JNZXNzYWdlQ3VzdG9taXplciBpbXBsZW1lbnRzIElFcnJvck1lc3NhZ2VDdXN0b21pemVyIHsKLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVycm9yY3VzdG9taXphdGlvbi5JRXJyb3JNZXNzYWdlQ3VzdG9taXplciNjdXN0b21pemVNZXNzYWdlKG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVycm9yY3VzdG9taXphdGlvbi5FbGVtZW50SW5mb3JtYXRpb24sIGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5PYmplY3RbXSkKLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGN1c3RvbWl6ZU1lc3NhZ2UoRWxlbWVudEluZm9ybWF0aW9uIGVsZW1lbnRJbmZvLAotCQkJU3RyaW5nIGVycm9yS2V5LCBPYmplY3RbXSBhcmd1bWVudHMpIHsKLQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCQlyZXR1cm4gIkFBQUEiOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvQWxsWE1MVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL0FsbFhNTFRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5ODBmZjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvQWxsWE1MVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMuaW50ZXJuYWw7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5YTUxWYWxpZGF0aW9uQ29uZmlndXJhdGlvblRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZWNsaXBzZS5WYWxpZGF0b3JUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2UuWE1MTWVzc2FnZUluZm9IZWxwZXJUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2UuWE1MVmFsaWRhdG9yVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lcnJvcmN1c3RvbWl6YXRpb24uRXJyb3JDdXN0b21pemF0aW9uTWFuYWdlclRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZXJyb3JjdXN0b21pemF0aW9uLkVycm9yQ3VzdG9taXphdGlvblJlZ2lzdHJ5VGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lcnJvcmN1c3RvbWl6YXRpb24uRXJyb3JNZXNzYWdlQ3VzdG9taXplckRlbGVnYXRlVGVzdDsKLQotLyoqCi0gKiBUaGUgcm9vdCB0ZXN0IHN1aXRlIHRoYXQgY29udGFpbnMgYWxsIG90aGVyIFhNTCB2YWxpZGF0b3IgdGVzdCBzdWl0ZXMuCi0gKi8KLXB1YmxpYyBjbGFzcyBBbGxYTUxUZXN0cyBleHRlbmRzIGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGUKLXsKLSAgLyoqCi0gICAqIENyZWF0ZSB0aGlzIHRlc3Qgc3VpdGUuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoaXMgdGVzdCBzdWl0ZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IEFsbFhNTFRlc3RzKCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvcgotICAgKi8KLSAgcHVibGljIEFsbFhNTFRlc3RzKCkKLSAgewotICAgIHN1cGVyKCJYTUxWYWxpZGF0aW9uVGVzdFN1aXRlIik7Ci0gICAgYWRkVGVzdChYTUxWYWxpZGF0aW9uQ29uZmlndXJhdGlvblRlc3Quc3VpdGUoKSk7Ci0gICAgYWRkVGVzdChWYWxpZGF0b3JUZXN0LnN1aXRlKCkpOwotICAgIGFkZFRlc3QoWE1MTWVzc2FnZUluZm9IZWxwZXJUZXN0LnN1aXRlKCkpOwotICAgIGFkZFRlc3QoWE1MVmFsaWRhdG9yVGVzdC5zdWl0ZSgpKTsKLSAgICBhZGRUZXN0KFhNTEV4YW1wbGVzVGVzdC5zdWl0ZSgpKTsKLSAgICBhZGRUZXN0KEJ1Z0ZpeGVzVGVzdC5zdWl0ZSgpKTsKLSAgICBhZGRUZXN0KFBhdGhzVGVzdC5zdWl0ZSgpKTsKLSAgICBhZGRUZXN0U3VpdGUoRXJyb3JDdXN0b21pemF0aW9uTWFuYWdlclRlc3QuY2xhc3MpOwotICAgIGFkZFRlc3RTdWl0ZShFcnJvck1lc3NhZ2VDdXN0b21pemVyRGVsZWdhdGVUZXN0LmNsYXNzKTsKLSAgICBhZGRUZXN0U3VpdGUoRXJyb3JDdXN0b21pemF0aW9uUmVnaXN0cnlUZXN0LmNsYXNzKTsKLSAgICBhZGRUZXN0U3VpdGUoTGluZU51bWJlckFkanVzdG1lbnRzVGVzdC5jbGFzcyk7Ci0gICAgYWRkVGVzdFN1aXRlKFhJbmNsdWRlVGVzdC5jbGFzcyk7Ci0gICAgYWRkVGVzdFN1aXRlKEhvbm91ckFsbFNjaGVtYUxvY2F0aW9uc1Rlc3QuY2xhc3MpOwotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvQmFzZVRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9CYXNlVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzZkMzM3OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9CYXNlVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5YTUxWYWxpZGF0aW9uQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLlZhbGlkYXRpb25NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuVmFsaWRhdGlvblJlcG9ydDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlLlhNTFZhbGlkYXRvcjsKLQotCi0vKioKLSAqIEJhc2UgdGVzdCBjYXNlIGNsYXNzIHdoaWNoIHByb3ZpZGVzIG1ldGhvZHMgdG8gCi0gKiAtIGNyZWF0ZSBsb2dzCi0gKiAtIHJlYWQgZnJvbSBsb2dzCi0gKiAtIHJ1biBsb2cgY29tcGFyaXNvbiB0ZXN0cwotICovCi1wdWJsaWMgY2xhc3MgQmFzZVRlc3RDYXNlIGV4dGVuZHMgVGVzdENhc2UKLXsKLSAgcHJvdGVjdGVkIFN0cmluZyBGSUxFX1BST1RPQ09MID0gImZpbGU6Ly8vIjsgCi0gIHByb3RlY3RlZCBTdHJpbmcgUExVR0lOX0FCU09MVVRFX1BBVEg7Ci0gIHByb3RlY3RlZCBTdHJpbmcgU0FNUExFU19ESVIgPSAidGVzdHJlc291cmNlcy9zYW1wbGVzLyI7Ci0gIHByb3RlY3RlZCBYTUxWYWxpZGF0b3IgdmFsaWRhdG9yID0gWE1MVmFsaWRhdG9yLmdldEluc3RhbmNlKCk7Ci0gIHByb3RlY3RlZCBYTUxWYWxpZGF0aW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uOwotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBJT0V4Y2VwdGlvbgotICB7Ci0gICAgUExVR0lOX0FCU09MVVRFX1BBVEggPSBYTUxWYWxpZGF0b3JUZXN0c1BsdWdpbi5nZXRQbHVnaW5Mb2NhdGlvbigpLnRvU3RyaW5nKCkgKyAiLyI7Ci0gICAgY29uZmlndXJhdGlvbiA9IG5ldyBYTUxWYWxpZGF0aW9uQ29uZmlndXJhdGlvbigpOwotICAgIHRyeQotICAgIHsKLSAgICAgIGNvbmZpZ3VyYXRpb24uc2V0RmVhdHVyZShYTUxWYWxpZGF0aW9uQ29uZmlndXJhdGlvbi5XQVJOX05PX0dSQU1NQVIsIGZhbHNlKTsKLQkgIGNvbmZpZ3VyYXRpb24uc2V0RmVhdHVyZShYTUxWYWxpZGF0aW9uQ29uZmlndXJhdGlvbi5JTkRJQ0FURV9OT19HUkFNTUFSLCAwKTsKLSAgICB9Ci0gICAgY2F0Y2goRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZmFpbCgiVW5hYmxlIHRvIHNldCB0aGUgZmVhdHVyZSBvbiB0aGUgWE1MIHZhbGlkYXRpb24gY29uZmlndXJhdGlvbi4iKTsKLSAgICB9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBSdW4gYSB2YWxpZGF0b3IgdGVzdC4gVGhlIHRlc3Qgd2lsbCBydW4gdGhlIHZhbGlkYXRvciwgYW5kIGNvbXBhcmUgdGhlIHZhbGlkYXRpb24gcmVzdWx0IHdpdGgKLSAgICogdGhlIGluZm9ybWF0aW9uIHNwZWNpZmllZC4KLSAgICogCi0gICAqIEBwYXJhbSB0ZXN0ZmlsZSBUaGUgZmlsZSB0byBydW4gdGhlIHZhbGlkYXRvciB0ZXN0IG9uLgotICAgKiBAcGFyYW0ga2V5cyBUaGUgbGlzdCBvZiBhbGxvd3MgbWVzc2FnZSBrZXlzLgotICAgKiBAcGFyYW0gbnVtRXJyb3JzIFRoZSBudW1iZXIgb2YgZXhwZWN0ZWQgZXJyb3JzLgotICAgKiBAcGFyYW0gbnVtV2FybmluZ3MgVGhlIG51bWJlciBvZiBleHBlY3RlZCB3YXJuaW5ncy4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHJ1blRlc3QoU3RyaW5nIHRlc3RmaWxlLCBMaXN0IGtleXMsIGludCBudW1FcnJvcnMsIGludCBudW1XYXJuaW5ncykKLSAgewotICAgIFZhbGlkYXRpb25SZXBvcnQgdmFscmVwb3J0ID0gdmFsaWRhdG9yLnZhbGlkYXRlKHRlc3RmaWxlLCBudWxsLCBjb25maWd1cmF0aW9uKTsKLQkKLQlWYWxpZGF0aW9uTWVzc2FnZVtdIHZhbG1lc3NhZ2VzID0gdmFscmVwb3J0LmdldFZhbGlkYXRpb25NZXNzYWdlcygpOwotICAgIGludCBudW1tZXNzYWdlcyA9IHZhbG1lc3NhZ2VzLmxlbmd0aDsKLQkKLQlpbnQgZXJyb3JDb3VudCA9IDA7Ci0JaW50IHdhcm5pbmdDb3VudCA9IDA7Ci0KLSAgICBmb3IoaW50IGkgPSAwOyBpIDwgbnVtbWVzc2FnZXM7IGkrKykKLSAgICB7Ci0gICAgICBWYWxpZGF0aW9uTWVzc2FnZSB2YWxtZXMgPSB2YWxtZXNzYWdlc1tpXTsKLQkgIFN0cmluZyBrZXkgPSB2YWxtZXMuZ2V0S2V5KCk7Ci0JICBhc3NlcnRUcnVlKCJUaGUgbWVzc2FnZSBrZXkgIiArIGtleSArICIgaXMgbm90IGNvcnJlY3QuIiwga2V5cy5jb250YWlucyhrZXkpKTsKLSAgICAgIGlmKHZhbG1lcy5nZXRTZXZlcml0eSgpID09IFZhbGlkYXRpb25NZXNzYWdlLlNFVl9MT1cpCi0gICAgICB7Ci0gICAgICAgIHdhcm5pbmdDb3VudCsrOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBlcnJvckNvdW50Kys7Ci0gICAgICB9Ci0gICAgfQotICAgIGFzc2VydEVxdWFscyhlcnJvckNvdW50ICsgIiBlcnJvcnMgd2VyZSByZXBvcnRlZCBidXQgIiArIG51bUVycm9ycyArICIgZXJyb3JzIHdlcmUgZXhwZWN0ZWQuIiwgbnVtRXJyb3JzLCBlcnJvckNvdW50KTsKLQlhc3NlcnRFcXVhbHMod2FybmluZ0NvdW50ICsgIiB3YXJuaW5ncyB3ZXJlIHJlcG9ydGVkIGJ1dCAiICsgbnVtV2FybmluZ3MgKyAiIHdhcm5pbmdzIHdlcmUgZXhwZWN0ZWQuIiwgbnVtV2FybmluZ3MsIHdhcm5pbmdDb3VudCk7Ci0gIH0KLSAgCi0gIAotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvQnVnRml4ZXNUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9CdWdGaXhlc1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDAwNmQ4Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9CdWdGaXhlc1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uWE1MVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb247Ci0vKioKLSAqIFRlc3QgY2xhc3MgZm9yIHRoZSBYTUwgdmFsaWRhdG9yIHRvIHRlc3QgYnVnIGZpeGVzLgotICovCi1wdWJsaWMgY2xhc3MgQnVnRml4ZXNUZXN0IGV4dGVuZHMgQmFzZVRlc3RDYXNlCi17IAotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVHRklYRVNfRElSID0gImJ1Z2ZpeGVzLyI7Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhIHRlc3RzIHN1aXRlIGZyb20gdGhpcyB0ZXN0IGNsYXNzLgotICAgKiAKLSAgICogQHJldHVybiBBIHRlc3Qgc3VpdGUgY29udGFpbmluZyB0aGlzIHRlc3QgY2xhc3MuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoQnVnRml4ZXNUZXN0LmNsYXNzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL2J1Z2ZpeGVzL1Jvb3ROb05TQ2hpbGROUy9Sb290Tm9OU0NoaWxkTlMueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFJvb3ROb05TQ2hpbGROUygpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJSb290Tm9OU0NoaWxkTlMiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgQlVHRklYRVNfRElSICsgIlJvb3ROb05TQ2hpbGROUy8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL2J1Z2ZpeGVzL0VtcHR5RmlsZS9FbXB0eS54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0RW1wdHkoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiRW1wdHkiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgQlVHRklYRVNfRElSICsgIkVtcHR5RmlsZS8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL2J1Z2ZpeGVzL1ZhbGlkYXRlV2l0aERURC9WYWxpZGF0ZVdpdGhEVERWYWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0VmFsaWRhdGVXaXRoRFREVmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiVmFsaWRhdGVXaXRoRFREVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgQlVHRklYRVNfRElSICsgIlZhbGlkYXRlV2l0aERURC8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL2J1Z2ZpeGVzL1ZhbGlkYXRlV2l0aERURC9WYWxpZGF0ZVdpdGhEVERJbnZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RWYWxpZGF0ZVdpdGhEVERJbnZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIlZhbGlkYXRlV2l0aERUREludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgQlVHRklYRVNfRElSICsgIlZhbGlkYXRlV2l0aERURC8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWtleXMuYWRkKCJNU0dfQ09OVEVOVF9JTlZBTElEIik7Ci0JaW50IG51bUVycm9ycyA9IDE7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvYnVnZml4ZXMvTm90V2VsbEZvcm1lZC9Ob3RXZWxsRm9ybWVkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3ROb3RXZWxsRm9ybWVkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIk5vdFdlbGxGb3JtZWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgQlVHRklYRVNfRElSICsgIk5vdFdlbGxGb3JtZWQvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlrZXlzLmFkZCgiRVRhZ1JlcXVpcmVkIik7Ci0JaW50IG51bUVycm9ycyA9IDE7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvYnVnZml4ZXMvQ2Fubm90TG9jYXRlRFREL0ludmFsaWRIb3N0LnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbnZhbGlkSG9zdCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJJbnZhbGlkSG9zdCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiQ2Fubm90TG9jYXRlRFRELyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0Ja2V5cy5hZGQoIkZJTEVfTk9UX0ZPVU5EIik7Ci0JaW50IG51bUVycm9ycyA9IDA7Ci0JaW50IG51bVdhcm5pbmdzID0gMTsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvYnVnZml4ZXMvQ2Fubm90TG9jYXRlRFREL0ludmFsaWRMb2NhdGlvbi54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW52YWxpZExvY2F0aW9uKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIkludmFsaWRMb2NhdGlvbiI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiQ2Fubm90TG9jYXRlRFRELyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0Ja2V5cy5hZGQoIkZJTEVfTk9UX0ZPVU5EIik7Ci0JaW50IG51bUVycm9ycyA9IDA7Ci0JaW50IG51bVdhcm5pbmdzID0gMTsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvYnVnZml4ZXMvTm9HcmFtbWFyL05vR3JhbW1hci54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0Tm9HcmFtbWFyKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIk5vR3JhbW1hciI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiTm9HcmFtbWFyLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0Ja2V5cy5hZGQoIk5PX0dSQU1NQVJfRk9VTkQiKTsKLQlpbnQgbnVtRXJyb3JzID0gMDsKLQlpbnQgbnVtV2FybmluZ3MgPSAxOwotCi0JdHJ5Ci0JewotCSAgY29uZmlndXJhdGlvbi5zZXRGZWF0dXJlKFhNTFZhbGlkYXRpb25Db25maWd1cmF0aW9uLldBUk5fTk9fR1JBTU1BUiwgdHJ1ZSk7Ci0JICBjb25maWd1cmF0aW9uLnNldEZlYXR1cmUoWE1MVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24uSU5ESUNBVEVfTk9fR1JBTU1BUiwgMSk7Ci0JfQotCWNhdGNoKEV4Y2VwdGlvbiBlKQotCXsKLQkgIGZhaWwoIlVuYWJsZSB0byBzZXQgY29uZmlndXJhdGlvbiBXQVJOX05PX0dSQU1NQVIuIik7Ci0JfQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotCXRyeQotCXsKLQkgIGNvbmZpZ3VyYXRpb24uc2V0RmVhdHVyZShYTUxWYWxpZGF0aW9uQ29uZmlndXJhdGlvbi5XQVJOX05PX0dSQU1NQVIsIGZhbHNlKTsKLQkgIGNvbmZpZ3VyYXRpb24uc2V0RmVhdHVyZShYTUxWYWxpZGF0aW9uQ29uZmlndXJhdGlvbi5JTkRJQ0FURV9OT19HUkFNTUFSLCAwKTsKLQl9Ci0JY2F0Y2goRXhjZXB0aW9uIGUpCi0JewotCSAgZmFpbCgiVW5hYmxlIHRvIHNldCBjb25maWd1cmF0aW9uIFdBUk5fTk9fR1JBTU1BUi4iKTsKLQl9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9idWdmaXhlcy9Ob05hbWVzcGFjZVNjaGVtYS9Ob05hbWVzcGFjZVNjaGVtYS54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0Tm9OYW1lc3BhY2VTY2hlbWEoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiTm9OYW1lc3BhY2VTY2hlbWEiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgQlVHRklYRVNfRElSICsgIk5vTmFtZXNwYWNlU2NoZW1hLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0Ja2V5cy5hZGQoImN2Yy1jb21wbGV4LXR5cGUuMi40LmIiKTsKLQlpbnQgbnVtRXJyb3JzID0gMTsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL0hvbm91ckFsbFNjaGVtYUxvY2F0aW9uc1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL0hvbm91ckFsbFNjaGVtYUxvY2F0aW9uc1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjllNmI4Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9Ib25vdXJBbGxTY2hlbWFMb2NhdGlvbnNUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMuaW50ZXJuYWw7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5YTUxWYWxpZGF0aW9uQ29uZmlndXJhdGlvbjsKLQotCi0vKioKLSAqIFRlc3RzIHRoZSAiaG9ub3VyIGFsbCBzY2hlbWEgbG9jYXRpb25zIiBmZWF0dXJlLiAKLSAqLwotcHVibGljIGNsYXNzIEhvbm91ckFsbFNjaGVtYUxvY2F0aW9uc1Rlc3QgZXh0ZW5kcyBCYXNlVGVzdENhc2UKLXsKLSAgcHVibGljIHZvaWQgdGVzdEhvbm91cnNBbGxTY2hlbWFMb2NhdGlvbnMoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgY29uZmlndXJhdGlvbi5zZXRGZWF0dXJlKFhNTFZhbGlkYXRpb25Db25maWd1cmF0aW9uLkhPTk9VUl9BTExfU0NIRU1BX0xPQ0FUSU9OUywgdHJ1ZSk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBmYWlsKCk7Ci0gICAgfQotCi0gICAgU3RyaW5nIHRlc3RGaWxlID0gZ2V0VGVzdEZpbGUoKTsKLSAgICBMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgaW50IG51bUVycm9ycyA9IDA7Ci0gICAgaW50IG51bVdhcm5pbmdzID0gMDsKLQotICAgIHJ1blRlc3QodGVzdEZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdENhblR1cm5PZmZIb25vdXJBbGxTY2hlbWFMb2NhdGlvbnMoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgY29uZmlndXJhdGlvbi5zZXRGZWF0dXJlKFhNTFZhbGlkYXRpb25Db25maWd1cmF0aW9uLkhPTk9VUl9BTExfU0NIRU1BX0xPQ0FUSU9OUywgZmFsc2UpOwotICAgIH0KLSAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZmFpbCgpOwotICAgIH0KLQotICAgIFN0cmluZyB0ZXN0RmlsZSA9IGdldFRlc3RGaWxlKCk7Ci0gICAgTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGtleXMuYWRkKG51bGwpOwotICAgIGtleXMuYWRkKCJjdmMtY29tcGxleC10eXBlLjIuNC5kIik7IC8vJE5PTi1OTFMtMSQKLSAgICBpbnQgbnVtRXJyb3JzID0gMjsKLSAgICBpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0gICAgcnVuVGVzdCh0ZXN0RmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLQotICBwcml2YXRlIFN0cmluZyBnZXRUZXN0RmlsZSgpCi0gIHsKLSAgICByZXR1cm4gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyAiWE1MRXhhbXBsZXMvSG9ub3VyQWxsU2NoZW1hTG9jYXRpb25zL0EtaW5zdGFuY2UueG1sIjsgLy8kTk9OLU5MUy0xJAotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9MaW5lTnVtYmVyQWRqdXN0bWVudHNUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9MaW5lTnVtYmVyQWRqdXN0bWVudHNUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxYjY1MDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvTGluZU51bWJlckFkanVzdG1lbnRzVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5WYWxpZGF0aW9uTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLlZhbGlkYXRpb25SZXBvcnQ7Ci0KLS8qKgotICogQSB0ZXN0IGNsYXNzIHRvIHRlc3QgdGhlIGxpbmUgbnVtYmVyIGFkanVzdG1lbnRzIG1hZGUgaW4gdGhlIFhNTCB2YWxpZGF0b3IuCi0gKi8KLXB1YmxpYyBjbGFzcyBMaW5lTnVtYmVyQWRqdXN0bWVudHNUZXN0IGV4dGVuZHMgQmFzZVRlc3RDYXNlCi17Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIExJTkVfTlVNQkVSX0FESlVTVE1FTlRTX0RJUiA9ICJMaW5lTnVtYmVyQWRqdXN0bWVudHMvIjsKLQkKLQkvKioKLQkgKiBSdW4gYSB2YWxpZGF0b3IgdGVzdC4gVGhlIHRlc3Qgd2lsbCBydW4gdGhlIHZhbGlkYXRvciwgYW5kIGNvbXBhcmUgdGhlIHZhbGlkYXRpb24gcmVzdWx0IHdpdGgKLQkgKiB0aGUgaW5mb3JtYXRpb24gc3BlY2lmaWVkLgotCSAqIAotCSAqIEBwYXJhbSB0ZXN0ZmlsZSAKLQkgKiAJCQlUaGUgZmlsZSB0byBydW4gdGhlIHZhbGlkYXRvciB0ZXN0IG9uLgotCSAqIEBwYXJhbSBrZXkgCi0JICogCQkJVGhlIG1lc3NhZ2Uga2V5LgotCSAqIEBwYXJhbSBudW1FcnJvcnMgCi0JICogCQkJVGhlIG51bWJlciBvZiBleHBlY3RlZCBlcnJvcnMuCi0JICogQHBhcmFtIG51bVdhcm5pbmdzIAotCSAqIAkJCVRoZSBudW1iZXIgb2YgZXhwZWN0ZWQgd2FybmluZ3MuCi0JICogQHBhcmFtIGxpbmVubwotCSAqIAkJCVRoZSBsaW5lIG51bWJlciB0aGUgbWVzc2FnZSBzaG91bGQgYmUgbG9jYXRlZCBvbi4KLQkgKiBAcGFyYW0gY29sdW1ubm8KLQkgKiAJCQlUaGUgY29sdW1uIG51bWJlciB0aGUgbWVzc2FnZSBzaG91bGQgYmUgbG9jYXRlZCBvbi4KLQkgKi8KLQlwdWJsaWMgdm9pZCBydW5UZXN0KFN0cmluZyB0ZXN0ZmlsZSwgU3RyaW5nIGtleSwgaW50IG51bUVycm9ycywgaW50IG51bVdhcm5pbmdzLCBpbnQgbGluZW5vLCBpbnQgY29sdW1ubm8pCi0JewotCSAgVmFsaWRhdGlvblJlcG9ydCB2YWxyZXBvcnQgPSB2YWxpZGF0b3IudmFsaWRhdGUodGVzdGZpbGUsIG51bGwsIGNvbmZpZ3VyYXRpb24pOwotCQkKLSAgICAgIFZhbGlkYXRpb25NZXNzYWdlW10gdmFsbWVzc2FnZXMgPSB2YWxyZXBvcnQuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKCk7Ci0JICBpbnQgbnVtbWVzc2FnZXMgPSB2YWxtZXNzYWdlcy5sZW5ndGg7Ci0JCQotICAgICAgaW50IGVycm9yQ291bnQgPSAwOwotCSAgaW50IHdhcm5pbmdDb3VudCA9IDA7Ci0KLQkgIGZvcihpbnQgaSA9IDA7IGkgPCBudW1tZXNzYWdlczsgaSsrKQotCSAgewotCSAgICBWYWxpZGF0aW9uTWVzc2FnZSB2YWxtZXMgPSB2YWxtZXNzYWdlc1tpXTsKLQkJU3RyaW5nIG1lc3NrZXkgPSB2YWxtZXMuZ2V0S2V5KCk7Ci0JCWFzc2VydFRydWUoIlRoZSBtZXNzYWdlIGtleSAiICsga2V5ICsgIiBpcyBub3QgY29ycmVjdC4iLCBrZXkuZXF1YWxzKG1lc3NrZXkpKTsKLQkJYXNzZXJ0RXF1YWxzKCJUaGUgbGluZSBudW1iZXIgaXMgaW5jb3JyZWN0LiIsIGxpbmVubywgdmFsbWVzLmdldExpbmVOdW1iZXIoKSk7Ci0JCWFzc2VydEVxdWFscygiVGhlIGNvbHVtbiBudW1iZXIgaXMgaW5jb3JyZWN0LiIsIGNvbHVtbm5vLCB2YWxtZXMuZ2V0Q29sdW1uTnVtYmVyKCkpOwotCSAgICBpZih2YWxtZXMuZ2V0U2V2ZXJpdHkoKSA9PSBWYWxpZGF0aW9uTWVzc2FnZS5TRVZfTE9XKQotCSAgICB7Ci0JICAgICAgd2FybmluZ0NvdW50Kys7Ci0JICAgIH0KLQkgICAgZWxzZQotCSAgICB7Ci0JICAgICAgZXJyb3JDb3VudCsrOwotCSAgICB9Ci0JICB9Ci0JICBhc3NlcnRFcXVhbHMoZXJyb3JDb3VudCArICIgZXJyb3JzIHdlcmUgcmVwb3J0ZWQgYnV0ICIgKyBudW1FcnJvcnMgKyAiIGVycm9ycyB3ZXJlIGV4cGVjdGVkLiIsIG51bUVycm9ycywgZXJyb3JDb3VudCk7Ci0gICAgICBhc3NlcnRFcXVhbHMod2FybmluZ0NvdW50ICsgIiB3YXJuaW5ncyB3ZXJlIHJlcG9ydGVkIGJ1dCAiICsgbnVtV2FybmluZ3MgKyAiIHdhcm5pbmdzIHdlcmUgZXhwZWN0ZWQuIiwgbnVtV2FybmluZ3MsIHdhcm5pbmdDb3VudCk7Ci0JfQotCQotCS8qKgotCSAqIFRlc3QgL0xpbmVOdW1iZXJBZGp1c3RtZW50cy9jdmMtY29tcGxleC10eXBlLjIuMy9jdmMtY29tcGxleC10eXBlLjIuMy54bWwuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdGN2Y2NvbXBsZXh0eXBlMjMoKQotCXsKLQkgIFN0cmluZyB0ZXN0bmFtZSA9ICJjdmMtY29tcGxleC10eXBlLjIuMyI7Ci0JICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIExJTkVfTlVNQkVSX0FESlVTVE1FTlRTX0RJUiArICJjdmMtY29tcGxleC10eXBlLjIuMy8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0gICAgICBTdHJpbmcga2V5ID0gImN2Yy1jb21wbGV4LXR5cGUuMi4zIjsKLQkgIGludCBsaW5lbm8gPSAyOwotCSAgaW50IGNvbHVtbm5vID0gMTg3OwotCSAgaW50IG51bUVycm9ycyA9IDE7Ci0JICBpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JICBydW5UZXN0KHRlc3RmaWxlLCBrZXksIG51bUVycm9ycywgbnVtV2FybmluZ3MsIGxpbmVubywgY29sdW1ubm8pOwotCX0KLQkKLQkvKioKLQkgKiBUZXN0IC9MaW5lTnVtYmVyQWRqdXN0bWVudHMvY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYi9jdmMtY29tcGxleC10eXBlLjIuNC5iLnhtbC4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Y3ZjY29tcGxleHR5cGUyNGIoKQotCXsKLQkgIFN0cmluZyB0ZXN0bmFtZSA9ICJjdmMtY29tcGxleC10eXBlLjIuNC5iIjsKLQkgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgTElORV9OVU1CRVJfQURKVVNUTUVOVFNfRElSICsgImN2Yy1jb21wbGV4LXR5cGUuMi40LmIvIiArIHRlc3RuYW1lICsgIi54bWwiOwotICAgICAgU3RyaW5nIGtleSA9ICJjdmMtY29tcGxleC10eXBlLjIuNC5iIjsKLQkgIGludCBsaW5lbm8gPSAyOwotCSAgaW50IGNvbHVtbm5vID0gMTg3OwotCSAgaW50IG51bUVycm9ycyA9IDE7Ci0JICBpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JICBydW5UZXN0KHRlc3RmaWxlLCBrZXksIG51bUVycm9ycywgbnVtV2FybmluZ3MsIGxpbmVubywgY29sdW1ubm8pOwotCX0KLQkKLQkvKioKLQkgKiBUZXN0IC9MaW5lTnVtYmVyQWRqdXN0bWVudHMvTVNHX0NPTlRFTlRfSU5DT01QTEVURS9NU0dfQ09OVEVOVF9JTkNPTVBMRVRFLnhtbC4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0TXNnQ29udGVudEluY29tcGxldGUoKQotCXsKLQkgIFN0cmluZyB0ZXN0bmFtZSA9ICJNU0dfQ09OVEVOVF9JTkNPTVBMRVRFIjsKLQkgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgTElORV9OVU1CRVJfQURKVVNUTUVOVFNfRElSICsgIk1TR19DT05URU5UX0lOQ09NUExFVEUvIiArIHRlc3RuYW1lICsgIi54bWwiOwotICAgICAgU3RyaW5nIGtleSA9ICJNU0dfQ09OVEVOVF9JTkNPTVBMRVRFIjsKLQkgIGludCBsaW5lbm8gPSA2OwotCSAgaW50IGNvbHVtbm5vID0gNzsKLQkgIGludCBudW1FcnJvcnMgPSAxOwotCSAgaW50IG51bVdhcm5pbmdzID0gMDsKLQotCSAgcnVuVGVzdCh0ZXN0ZmlsZSwga2V5LCBudW1FcnJvcnMsIG51bVdhcm5pbmdzLCBsaW5lbm8sIGNvbHVtbm5vKTsKLQl9Ci0JCi0JLyoqCi0JICogVGVzdCAvTGluZU51bWJlckFkanVzdG1lbnRzL01TR19DT05URU5UX0lOVkFMSUQvTVNHX0NPTlRFTlRfSU5WQUxJRC54bWwuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE1zZ0NvbnRlbnRJbnZhbGlkKCkKLQl7Ci0JICBTdHJpbmcgdGVzdG5hbWUgPSAiTVNHX0NPTlRFTlRfSU5WQUxJRCI7Ci0JICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIExJTkVfTlVNQkVSX0FESlVTVE1FTlRTX0RJUiArICJNU0dfQ09OVEVOVF9JTlZBTElELyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLSAgICAgIFN0cmluZyBrZXkgPSAiTVNHX0NPTlRFTlRfSU5WQUxJRCI7Ci0JICBpbnQgbGluZW5vID0gNjsKLQkgIGludCBjb2x1bW5ubyA9IDc7Ci0JICBpbnQgbnVtRXJyb3JzID0gMTsKLQkgIGludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQkgIHJ1blRlc3QodGVzdGZpbGUsIGtleSwgbnVtRXJyb3JzLCBudW1XYXJuaW5ncywgbGluZW5vLCBjb2x1bW5ubyk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvUGF0aHNUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9QYXRoc1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjIzOTBjMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9QYXRoc1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYxNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMuaW50ZXJuYWw7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0vKioKLSAqIFRlc3QgY2xhc3MgZm9yIHRoZSBYTUwgdmFsaWRhdG9yIHRvIHRlc3QgYnVnIGZpeGVzLgotICogCi0gKiBAYXV0aG9yIExhd3JlbmNlIE1hbmRlbCwgSUJNCi0gKi8KLXB1YmxpYyBjbGFzcyBQYXRoc1Rlc3QgZXh0ZW5kcyBCYXNlVGVzdENhc2UKLXsgCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQQVRIU19ESVIgPSAiUGF0aHMvIjsKLQotICAvKioKLSAgICogQ3JlYXRlIGEgdGVzdHMgc3VpdGUgZnJvbSB0aGlzIHRlc3QgY2xhc3MuCi0gICAqIAotICAgKiBAcmV0dXJuIEEgdGVzdCBzdWl0ZSBjb250YWluaW5nIHRoaXMgdGVzdCBjbGFzcy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IFRlc3RTdWl0ZShQYXRoc1Rlc3QuY2xhc3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvU3BhY2UgSW5QYXRoL1NwYWNlSW5QYXRoVmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFNwYWNlSW5QYXRoVmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiU3BhY2VJblBhdGhWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2UgSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JaW50IG51bUVycm9ycyA9IDA7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvU3BhY2UgSW5QYXRoL1NwYWNlSW5QYXRoSW52YWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0U3BhY2VJblBhdGhJbnZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIlNwYWNlSW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2UgSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0Ja2V5cy5hZGQoIk1hcmt1cEVudGl0eU1pc21hdGNoIik7Ci0JaW50IG51bUVycm9ycyA9IDE7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvQ2xvc2VCcmFja2V0KUluUGF0aC9DbG9zZUJyYWNrZXRJblBhdGhWYWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0Q2xvc2VCcmFja2V0SW5QYXRoVmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiQ2xvc2VCcmFja2V0SW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldClJblBhdGgvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlpbnQgbnVtRXJyb3JzID0gMDsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9DbG9zZUJyYWNrZXQpSW5QYXRoL0Nsb3NlQnJhY2tldEluUGF0aEludmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdENsb3NlQnJhY2tldEluUGF0aEludmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiQ2xvc2VCcmFja2V0SW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0KUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWtleXMuYWRkKCJNYXJrdXBFbnRpdHlNaXNtYXRjaCIpOwotCWludCBudW1FcnJvcnMgPSAxOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0KUluRmlsZW5hbWVWYWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0Q2xvc2VCcmFja2V0SW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIkNsb3NlQnJhY2tldClJbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlpbnQgbnVtRXJyb3JzID0gMDsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0Nsb3NlQnJhY2tldClJbkZpbGVuYW1lSW52YWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0Q2xvc2VCcmFja2V0SW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiQ2xvc2VCcmFja2V0KUluRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0Ja2V5cy5hZGQoIk1hcmt1cEVudGl0eU1pc21hdGNoIik7Ci0JaW50IG51bUVycm9ycyA9IDE7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aFZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3REYXNoSW5QYXRoVmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiRGFzaEluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoLUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhJbnZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3REYXNoSW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJEYXNoSW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaC1JblBhdGgvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlrZXlzLmFkZCgiTWFya3VwRW50aXR5TWlzbWF0Y2giKTsKLQlpbnQgbnVtRXJyb3JzID0gMTsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9EYXNoSW5GaWxlbmFtZS9EYXNoLUluRmlsZW5hbWVWYWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0RGFzaEluRmlsZW5hbWVWYWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJEYXNoLUluRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlpbnQgbnVtRXJyb3JzID0gMDsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9EYXNoSW5GaWxlbmFtZS9EYXNoLUluRmlsZW5hbWVJbnZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3REYXNoSW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiRGFzaC1JbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlrZXlzLmFkZCgiTWFya3VwRW50aXR5TWlzbWF0Y2giKTsKLQlpbnQgbnVtRXJyb3JzID0gMTsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9FeGNsYW1hdGlvbiFJblBhdGgvRXhjbGFtYXRpb25JblBhdGhWYWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0RXhjbGFtYXRpb25JblBhdGhWYWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJFeGNsYW1hdGlvbkluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbiFJblBhdGgvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlpbnQgbnVtRXJyb3JzID0gMDsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9FeGNsYW1hdGlvbiFJblBhdGgvRXhjbGFtYXRpb25JblBhdGhJbnZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RFeGNsYW1hdGlvbkluUGF0aEludmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiRXhjbGFtYXRpb25JblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbiFJblBhdGgvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlrZXlzLmFkZCgiTWFya3VwRW50aXR5TWlzbWF0Y2giKTsKLQlpbnQgbnVtRXJyb3JzID0gMTsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvRXhjbGFtYXRpb24hSW5GaWxlbmFtZVZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RFeGNsYW1hdGlvbkluRmlsZW5hbWVWYWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJFeGNsYW1hdGlvbiFJbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9FeGNsYW1hdGlvbiFJbkZpbGVuYW1lSW52YWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0RXhjbGFtYXRpb25JbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJFeGNsYW1hdGlvbiFJbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb25JbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0Ja2V5cy5hZGQoIk1hcmt1cEVudGl0eU1pc21hdGNoIik7Ci0JaW50IG51bUVycm9ycyA9IDE7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvT3BlbkJyYWNrZXQoSW5QYXRoL09wZW5CcmFja2V0SW5QYXRoVmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdE9wZW5CcmFja2V0SW5QYXRoVmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiT3BlbkJyYWNrZXRJblBhdGhWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiT3BlbkJyYWNrZXQoSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JaW50IG51bUVycm9ycyA9IDA7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvT3BlbkJyYWNrZXQoSW5QYXRoL09wZW5CcmFja2V0SW5QYXRoSW52YWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0T3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIk9wZW5CcmFja2V0SW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiT3BlbkJyYWNrZXQoSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0Ja2V5cy5hZGQoIk1hcmt1cEVudGl0eU1pc21hdGNoIik7Ci0JaW50IG51bUVycm9ycyA9IDE7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL09wZW5CcmFja2V0KEluRmlsZW5hbWVWYWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0T3BlbkJyYWNrZXRJbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiT3BlbkJyYWNrZXQoSW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlpbnQgbnVtRXJyb3JzID0gMDsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvT3BlbkJyYWNrZXQoSW5GaWxlbmFtZUludmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdE9wZW5CcmFja2V0SW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiT3BlbkJyYWNrZXQoSW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWtleXMuYWRkKCJNYXJrdXBFbnRpdHlNaXNtYXRjaCIpOwotCWludCBudW1FcnJvcnMgPSAxOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1BlcmlvZC5JblBhdGgvUGVyaW9kSW5QYXRoVmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFBlcmlvZEJyYWNrZXRJblBhdGhWYWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJQZXJpb2RJblBhdGhWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiUGVyaW9kLkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1BlcmlvZC5JblBhdGgvUGVyaW9kSW5QYXRoSW52YWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UGVyaW9kQnJhY2tldEluUGF0aEludmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiUGVyaW9kSW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiUGVyaW9kLkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWtleXMuYWRkKCJNYXJrdXBFbnRpdHlNaXNtYXRjaCIpOwotCWludCBudW1FcnJvcnMgPSAxOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvUGVyaW9kLkluRmlsZW5hbWVWYWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UGVyaW9kQnJhY2tldEluRmlsZW5hbWVWYWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJQZXJpb2QuSW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2RJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JaW50IG51bUVycm9ycyA9IDA7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9QZXJpb2QuSW5GaWxlbmFtZUludmFsaWQueG1sLgotICAgKi8gCi0gIHB1YmxpYyB2b2lkIHRlc3RQZXJpb2RCcmFja2V0SW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiUGVyaW9kLkluRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2RJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0Ja2V5cy5hZGQoIk1hcmt1cEVudGl0eU1pc21hdGNoIik7Ci0JaW50IG51bUVycm9ycyA9IDE7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvUXVvdGUnSW5QYXRoL1F1b3RlSW5QYXRoVmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFF1b3RlSW5QYXRoVmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiUXVvdGVJblBhdGhWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGUnSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JaW50IG51bUVycm9ycyA9IDA7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvUXVvdGUnSW5QYXRoL1F1b3RlSW5QYXRoSW52YWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UXVvdGVJblBhdGhJbnZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIlF1b3RlSW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGUnSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0Ja2V5cy5hZGQoIk1hcmt1cEVudGl0eU1pc21hdGNoIik7Ci0JaW50IG51bUVycm9ycyA9IDE7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL1F1b3RlJ0luRmlsZW5hbWVWYWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UXVvdGVJbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiUXVvdGUnSW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlpbnQgbnVtRXJyb3JzID0gMDsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9RdW90ZUluRmlsZW5hbWUvUXVvdGUnSW5GaWxlbmFtZUludmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFF1b3RlSW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiUXVvdGUnSW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWtleXMuYWRkKCJNYXJrdXBFbnRpdHlNaXNtYXRjaCIpOwotCWludCBudW1FcnJvcnMgPSAxOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9TcGFjZSBJbkZpbGVuYW1lVmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFNwYWNlSW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIlNwYWNlIEluRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2VJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JaW50IG51bUVycm9ycyA9IDA7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL1NwYWNlIEluRmlsZW5hbWVJbnZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RTcGFjZUluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIlNwYWNlIEluRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJTcGFjZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlrZXlzLmFkZCgiTWFya3VwRW50aXR5TWlzbWF0Y2giKTsKLQlpbnQgbnVtRXJyb3JzID0gMTsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9UaWxkZX5JblBhdGgvVGlsZGVJblBhdGhWYWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0VGlsZGVJblBhdGhWYWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJUaWxkZUluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZX5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlpbnQgbnVtRXJyb3JzID0gMDsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9UaWxkZX5JblBhdGgvVGlsZGVJblBhdGhJbnZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RUaWxkZUluUGF0aEludmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiVGlsZGVJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZX5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlrZXlzLmFkZCgiTWFya3VwRW50aXR5TWlzbWF0Y2giKTsKLQlpbnQgbnVtRXJyb3JzID0gMTsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9UaWxkZUluRmlsZW5hbWUvVGlsZGV+SW5GaWxlbmFtZVZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RUaWxkZUluRmlsZW5hbWVWYWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJUaWxkZX5JbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9UaWxkZX5JbkZpbGVuYW1lSW52YWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0VGlsZGVJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJUaWxkZX5JbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0Ja2V5cy5hZGQoIk1hcmt1cEVudGl0eU1pc21hdGNoIik7Ci0JaW50IG51bUVycm9ycyA9IDE7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvVW5kZXJzY29yZUluUGF0aFZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RVbmRlcnNjb3JlSW5QYXRoVmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiVW5kZXJzY29yZUluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlX0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL1VuZGVyc2NvcmVJblBhdGhJbnZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RVbmRlcnNjb3JlSW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJVbmRlcnNjb3JlSW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZV9JblBhdGgvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlrZXlzLmFkZCgiTWFya3VwRW50aXR5TWlzbWF0Y2giKTsKLQlpbnQgbnVtRXJyb3JzID0gMTsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9VbmRlcnNjb3JlX0luRmlsZW5hbWVWYWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0VW5kZXJzY29yZUluRmlsZW5hbWVWYWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJVbmRlcnNjb3JlX0luRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlpbnQgbnVtRXJyb3JzID0gMDsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9VbmRlcnNjb3JlX0luRmlsZW5hbWVJbnZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RVbmRlcnNjb3JlSW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiVW5kZXJzY29yZV9JbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlrZXlzLmFkZCgiTWFya3VwRW50aXR5TWlzbWF0Y2giKTsKLQlpbnQgbnVtRXJyb3JzID0gMTsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhWYWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0QW5nbGVIYXRJblBhdGhWYWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJBbmdsZUhhdEluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdF5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlpbnQgbnVtRXJyb3JzID0gMDsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhJbnZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RBbmdsZUhhdEluUGF0aEludmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiQW5nbGVIYXRJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdF5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlrZXlzLmFkZCgiTWFya3VwRW50aXR5TWlzbWF0Y2giKTsKLQlpbnQgbnVtRXJyb3JzID0gMTsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvQW5nbGVIYXReSW5GaWxlbmFtZVZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RBbmdsZUhhdEluRmlsZW5hbWVWYWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJBbmdsZUhhdF5JbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkFuZ2xlSGF0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9BbmdsZUhhdF5JbkZpbGVuYW1lSW52YWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0QW5nbGVIYXRJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJBbmdsZUhhdF5JbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0Ja2V5cy5hZGQoIk1hcmt1cEVudGl0eU1pc21hdGNoIik7Ci0JaW50IG51bUVycm9ycyA9IDE7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9YSW5jbHVkZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL1hJbmNsdWRlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MTlhYjU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL1hJbmNsdWRlVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLmludGVybmFsOwotCi0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uWE1MVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb247Ci0KLQotLyoqCi0gKiBUZXN0cyB0aGUgWEluY2x1ZGUgZmVhdHVyZS4gCi0gKi8KLXB1YmxpYyBjbGFzcyBYSW5jbHVkZVRlc3QgZXh0ZW5kcyBCYXNlVGVzdENhc2UKLXsKLSAgcHVibGljIHZvaWQgdGVzdFN1cHBvcnRzWEluY2x1ZGUoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgY29uZmlndXJhdGlvbi5zZXRGZWF0dXJlKFhNTFZhbGlkYXRpb25Db25maWd1cmF0aW9uLlVTRV9YSU5DTFVERSwgdHJ1ZSk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBmYWlsKCk7Ci0gICAgfQotCi0gICAgU3RyaW5nIHRlc3RGaWxlID0gZ2V0VGVzdEZpbGUoKTsKLSAgICBMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgaW50IG51bUVycm9ycyA9IDA7Ci0gICAgaW50IG51bVdhcm5pbmdzID0gMDsKLQotICAgIHJ1blRlc3QodGVzdEZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdENhblR1cm5PZmZYSW5jbHVkZSgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBjb25maWd1cmF0aW9uLnNldEZlYXR1cmUoWE1MVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24uVVNFX1hJTkNMVURFLCBmYWxzZSk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBmYWlsKCk7Ci0gICAgfQotCi0gICAgU3RyaW5nIHRlc3RGaWxlID0gZ2V0VGVzdEZpbGUoKTsKLSAgICBMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAga2V5cy5hZGQoImN2Yy1jb21wbGV4LXR5cGUuMi40LmEiKTsKLSAgICBpbnQgbnVtRXJyb3JzID0gMTsKLSAgICBpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0gICAgcnVuVGVzdCh0ZXN0RmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLQotICBwcml2YXRlIFN0cmluZyBnZXRUZXN0RmlsZSgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArICJYTUxFeGFtcGxlcy9YSW5jbHVkZS9tYXN0ZXIueG1sIjsKLSAgICByZXR1cm4gdGVzdGZpbGU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL1hNTEV4YW1wbGVzVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvWE1MRXhhbXBsZXNUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1MTFmNjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvWE1MRXhhbXBsZXNUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLmludGVybmFsOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotLyoqCi0gKiBUZXN0IGNsYXNzIGZvciB0aGUgWE1MIHZhbGlkYXRvciB0byB0ZXN0IHRoZSBYTUxQcm9qZWN0LgotICogCi0gKiBAYXV0aG9yIExhd3JlbmNlIE1hbmRlbCwgSUJNCi0gKi8KLXB1YmxpYyBjbGFzcyBYTUxFeGFtcGxlc1Rlc3QgZXh0ZW5kcyBCYXNlVGVzdENhc2UKLXsgCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYTUxFeGFtcGxlc19ESVIgPSAiWE1MRXhhbXBsZXMvIjsKLSAgLyoqCi0gICAqIENyZWF0ZSBhIHRlc3RzIHN1aXRlIGZyb20gdGhpcyB0ZXN0IGNsYXNzLgotICAgKiAKLSAgICogQHJldHVybiBBIHRlc3Qgc3VpdGUgY29udGFpbmluZyB0aGlzIHRlc3QgY2xhc3MuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoWE1MRXhhbXBsZXNUZXN0LmNsYXNzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1hNTEV4YW1wbGVzL0ludm9pY2UvSW52b2ljZS54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW52b2ljZSgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJJbnZvaWNlIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFhNTEV4YW1wbGVzX0RJUiArICJJbnZvaWNlLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JaW50IG51bUVycm9ycyA9IDA7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvWE1MRXhhbXBsZXMvSW52b2ljZVJlbW90ZS9JbnZvaWNlLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbnZvaWNlUmVtb3RlKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIkludm9pY2UiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgWE1MRXhhbXBsZXNfRElSICsgIkludm9pY2VSZW1vdGUvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlpbnQgbnVtRXJyb3JzID0gMDsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0gIAotICAKLSAgLyoqCi0gICAqIFRlc3QgL1hNTEV4YW1wbGVzL0ludm9pY2VSZW1vdGUvSW52b2ljZS54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW52b2ljZVJlbW90ZUluZGlyZWN0KCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIkludm9pY2VJbmRpcmVjdCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBYTUxFeGFtcGxlc19ESVIgKyAiSW52b2ljZVJlbW90ZS8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfSAgICAKLSAgCi0gIC8qKgotICAgKiBUZXN0IC9YTUxFeGFtcGxlcy9JbnZvaWNlSW52YWxpZC9JbnZvaWNlLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbnZvaWNlSW52YWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJJbnZvaWNlIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFhNTEV4YW1wbGVzX0RJUiArICJJbnZvaWNlSW52YWxpZC8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWtleXMuYWRkKCJGSUxFX05PVF9GT1VORCIpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDE7Ci0gICAgCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9YTUxFeGFtcGxlcy9QdWJsaWNhdGlvbkNhdGFsb2d1ZS9DYXRhbG9ndWUueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdENhdGFsb2d1ZSgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJDYXRhbG9ndWUiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgWE1MRXhhbXBsZXNfRElSICsgIlB1YmxpY2F0aW9uQ2F0YWxvZ3VlLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JaW50IG51bUVycm9ycyA9IDA7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvWE1MRXhhbXBsZXMvUHVibGljYXRpb25DYXRhbG9ndWVJbnZhbGlkL0NhdGFsb2d1ZS54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0Q2F0YWxvZ3VlSW52YWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJDYXRhbG9ndWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFhNTEV4YW1wbGVzX0RJUiArICJQdWJsaWNhdGlvbkNhdGFsb2d1ZUludmFsaWQvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlrZXlzLmFkZCgiRklMRV9OT1RfRk9VTkQiKTsKLQlpbnQgbnVtRXJyb3JzID0gMDsKLQlpbnQgbnVtV2FybmluZ3MgPSAxOwotICAgIAotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvWE1MRXhhbXBsZXMvajJlZS93ZWIueG1sLgotICAgKi8KLSAgLyoqCi0gIHB1YmxpYyB2b2lkIHRlc3RXZWIoKQotICB7Ci0JICAKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJ3ZWIiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgWE1MRXhhbXBsZXNfRElSICsgImoyZWUvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlpbnQgbnVtRXJyb3JzID0gMDsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgKi8KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL1hNTFZhbGlkYXRvclRlc3RzUGx1Z2luLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9YTUxWYWxpZGF0b3JUZXN0c1BsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NmVlMzFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL1hNTFZhbGlkYXRvclRlc3RzUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLQotLyoqCi0gKiBUaGUgcGx1Z2luIGNsYXNzIGZvciB0aGlzIHRlc3QgcGx1Z2luLgotICovCi1wdWJsaWMgY2xhc3MgWE1MVmFsaWRhdG9yVGVzdHNQbHVnaW4gZXh0ZW5kcyBQbHVnaW4gewotCXByaXZhdGUgc3RhdGljIFhNTFZhbGlkYXRvclRlc3RzUGx1Z2luIHBsdWdpbiA9IG51bGw7Ci0KLQlwdWJsaWMgWE1MVmFsaWRhdG9yVGVzdHNQbHVnaW4oKSB7Ci0JCXBsdWdpbiA9IHRoaXM7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UGx1Z2luTG9jYXRpb24oKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZSA9IEZpbGVMb2NhdG9yLnJlc29sdmUocGx1Z2luLmdldEJ1bmRsZSgpLmdldEVudHJ5KCIvIikpLmdldEZpbGUoKTsKLQkJcmV0dXJuIG5ldyBQYXRoKGZpbGUpLnJlbW92ZVRyYWlsaW5nU2VwYXJhdG9yKCkudG9TdHJpbmcoKTsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBYTUxWYWxpZGF0b3JUZXN0c1BsdWdpbiBnZXRQbHVnaW4oKQotCXsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlYTMzMTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci0KLTxwcm9qZWN0Ci0gICAgbmFtZT0idGVzdHN1aXRlIgotICAgIGRlZmF1bHQ9InJ1biIKLSAgICBiYXNlZGlyPSIuIj4KLSAgICAKLSAgICA8IS0tIFRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyBzaG91bGQgYmUgcGFzc2VkIGludG8gdGhpcyBzY3JpcHQgLS0+Ci0gICAgPCEtLSAke2VjbGlwc2UtaG9tZX0gICAtLT4KLSAgICA8IS0tICR7YnVpbGREaXJlY3Rvcnl9ICAtLT4KLSAgICA8IS0tICR7YnVpbGRMYWJlbH0gICAgICAgIC0tPgotCi0gICAgPCEtLSBzaG91bGQgYmUgbGl0dGxlIG5lZWQgdG8gY2hhbmdlIHdoYXQncyBhYm92ZSAgLS0+Ci0gICAgCi0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9InBsdWdpbi1uYW1lIgotICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJjbGFzc25hbWUiCi0gICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMuaW50ZXJuYWwuQWxsWE1MVGVzdHMiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9InRlc3RUeXBlIgotICAgICAgICB2YWx1ZT0iY29yZS10ZXN0IiAvPgotCi0gICAgPCEtLSBzaG91bGQgYmUgbGl0dGxlIG5lZWQgdG8gY2hhbmdlIHdoYXQncyBiZWxvdyAtLT4KLQotICAgIDxlY2hvIG1lc3NhZ2U9ImJhc2VkaXI6ICR7YmFzZWRpcn0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iZWNsaXBzZS1ob21lOiAke2VjbGlwc2UtaG9tZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iYnVpbGREaXJlY3Rvcnk6ICR7YnVpbGREaXJlY3Rvcnl9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9InBsdWdpbi1uYW1lOiAke3BsdWdpbi1uYW1lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJjbGFzc25hbWU6ICR7Y2xhc3NuYW1lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJ0ZXN0VHlwZSAke3Rlc3RUeXBlfSIgLz4KLQotCi0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9ImxpYnJhcnktZmlsZSIKLSAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4xLjAvbGlicmFyeS54bWwiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9IndvcmtzcGFjZSIKLSAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9qdW5pdHdvcmtzcGFjZXMvJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgIAotICAgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4KLSAgICA8IS0tIGFsbCB0ZXN0cyB0aGF0IGFyZSB0byBiZSBydW4uIEluaXRpYWxpemF0aW9uIGZvciBpbmRpdmlkdWFsIHRlc3RzIC0tPgotICAgIDwhLS0gc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIC0tPgotICAgIDx0YXJnZXQgbmFtZT0iaW5pdCI+Ci0gICAgICAgIDx0c3RhbXAgLz4KLSAgICAgICAgPGRlbGV0ZT4KLSAgICAgICAgICAgIDxmaWxlc2V0Ci0gICAgICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iCi0gICAgICAgICAgICAgICAgaW5jbHVkZXM9IiR7cGx1Z2luLW5hbWV9Lip4bWwiIC8+Ci0gICAgICAgIDwvZGVsZXRlPgotICAgICAgICA8IS0tIG1ha2UgZGlyZWN0b3J5LCBpbiBjYXNlIHBhdGggZG9lc24ndCBleGlzdCB5ZXQgLS0+Ci0gICAgICAgIDxta2RpciBkaXI9IiR7d29ya3NwYWNlfSIgLz4KLSAgICAgICAgPCEtLSAgYnV0IGRlbGV0ZSB0byBtYWtlIHN1cmUgZnJlc2ggY29udGVudHMtLT4KLSAgICAgICAgPGRlbGV0ZQotICAgICAgICAgICAgZGlyPSIke3dvcmtzcGFjZX0iCi0gICAgICAgICAgICBxdWlldD0idHJ1ZSIgLz4KLQotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9InN1aXRlIj4KLQotICAgICAgICA8YW50Ci0gICAgICAgICAgICB0YXJnZXQ9IiR7dGVzdFR5cGV9IgotICAgICAgICAgICAgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iZGF0YS1kaXIiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7d29ya3NwYWNlfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9InBsdWdpbi1uYW1lIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImNsYXNzbmFtZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtjbGFzc25hbWV9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0icGx1Z2luLXBhdGgiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICA8L2FudD4KLQotICAgICAgICA8Y29weQotICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIgotICAgICAgICAgICAgZmlsZT0iJHt3b3Jrc3BhY2V9Ly5tZXRhZGF0YS8ubG9nIgotICAgICAgICAgICAgdG9maWxlPSIke2J1aWxkRGlyZWN0b3J5fS8ke2J1aWxkTGFiZWx9L3Rlc3RSZXN1bHRzL2NvbnNvbGVsb2dzLyR7cGx1Z2luLW5hbWV9LmNvbnNvbGVsb2cudHh0IiAvPgotCi0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGNvZGUgdG8gY2xlYW51cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBhZnRlciAtLT4KLSAgICA8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+Ci0gICAgPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgotICAgIDx0YXJnZXQgbmFtZT0iY2xlYW51cCI+Ci0gICAgICAgIDwhLS0gdXN1YWxseSBubyBuZWVkIHRvIGRlbGV0ZSB3b3Jrc3BhY2UgdW50aWwgbmV4dCBydW4sIGFuZCBsZWF2aW5nIGl0IGFsbG93cyBpbnNwZWN0aW9uIC0tPgotICAgICAgICA8IS0tIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIiAvPiAtLT4KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4KLSAgICA8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+Ci0gICAgPHRhcmdldAotICAgICAgICBuYW1lPSJydW4iCi0gICAgICAgIGRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+Ci0gICAgICAgIDxhbnQKLSAgICAgICAgICAgIHRhcmdldD0iY29sbGVjdCIKLSAgICAgICAgICAgIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLSAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImluY2x1ZGVzIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfS4qeG1sIiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0ib3V0cHV0LWZpbGUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIgLz4KLSAgICAgICAgPC9hbnQ+Ci0gICAgPC90YXJnZXQ+Ci0KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy8uY3ZzaWdub3JlIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmI1MzU3NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotZ2VuZXJhdGVkUmVzdWx0cwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9MaW5lTnVtYmVyQWRqdXN0bWVudHMvTVNHX0NPTlRFTlRfSU5DT01QTEVURS9NU0dfQ09OVEVOVF9JTkNPTVBMRVRFLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvTGluZU51bWJlckFkanVzdG1lbnRzL01TR19DT05URU5UX0lOQ09NUExFVEUvTVNHX0NPTlRFTlRfSU5DT01QTEVURS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5ODVjOWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9MaW5lTnVtYmVyQWRqdXN0bWVudHMvTVNHX0NPTlRFTlRfSU5DT01QTEVURS9NU0dfQ09OVEVOVF9JTkNPTVBMRVRFLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSByb290IFsKLTwhRUxFTUVOVCByb290IChjaGlsZCspPgotPCFFTEVNRU5UIGNoaWxkICgjUENEQVRBKT4KLV0+Ci08cm9vdD4KLTwvcm9vdD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvTGluZU51bWJlckFkanVzdG1lbnRzL01TR19DT05URU5UX0lOVkFMSUQvTVNHX0NPTlRFTlRfSU5WQUxJRC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0xpbmVOdW1iZXJBZGp1c3RtZW50cy9NU0dfQ09OVEVOVF9JTlZBTElEL01TR19DT05URU5UX0lOVkFMSUQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTFiZDUyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvTGluZU51bWJlckFkanVzdG1lbnRzL01TR19DT05URU5UX0lOVkFMSUQvTVNHX0NPTlRFTlRfSU5WQUxJRC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgcm9vdCBbCi08IUVMRU1FTlQgcm9vdCAoY2hpbGQrKT4KLTwhRUxFTUVOVCBjaGlsZCAoI1BDREFUQSk+Ci1dPgotPHJvb3Q+Ci1hYWFhCi08L3Jvb3Q+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0xpbmVOdW1iZXJBZGp1c3RtZW50cy9jdmMtY29tcGxleC10eXBlLjIuMy9Ob0NoaWxkcmVuLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvTGluZU51bWJlckFkanVzdG1lbnRzL2N2Yy1jb21wbGV4LXR5cGUuMi4zL05vQ2hpbGRyZW4ueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTBmNGQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvTGluZU51bWJlckFkanVzdG1lbnRzL2N2Yy1jb21wbGV4LXR5cGUuMi4zL05vQ2hpbGRyZW4ueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTm9DaGlsZHJlbiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL05vQ2hpbGRyZW4iPgotCi0gICAgPGVsZW1lbnQgbmFtZT0iTXlFbGVtZW50IiB0eXBlPSJ0bnM6TmV3WFNEQ29tcGxleFR5cGUiPjwvZWxlbWVudD4KLQotICAgIDxjb21wbGV4VHlwZSBuYW1lPSJOZXdYU0RDb21wbGV4VHlwZSI+Ci0gICAgCTxzZXF1ZW5jZT4KLSAgICAJCTxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciIG1heE9jY3Vycz0idW5ib3VuZGVkIiBtaW5PY2N1cnM9IjAiPjwvZWxlbWVudD4KLSAgICAJPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9MaW5lTnVtYmVyQWRqdXN0bWVudHMvY3ZjLWNvbXBsZXgtdHlwZS4yLjMvY3ZjLWNvbXBsZXgtdHlwZS4yLjMueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9MaW5lTnVtYmVyQWRqdXN0bWVudHMvY3ZjLWNvbXBsZXgtdHlwZS4yLjMvY3ZjLWNvbXBsZXgtdHlwZS4yLjMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODA1ZWNmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvTGluZU51bWJlckFkanVzdG1lbnRzL2N2Yy1jb21wbGV4LXR5cGUuMi4zL2N2Yy1jb21wbGV4LXR5cGUuMi4zLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx0bnM6TXlFbGVtZW50IHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Ob0NoaWxkcmVuIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTm9DaGlsZHJlbiBOb0NoaWxkcmVuLnhzZCAiPgotYWFhYWEKLTwvdG5zOk15RWxlbWVudD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvTGluZU51bWJlckFkanVzdG1lbnRzL2N2Yy1jb21wbGV4LXR5cGUuMi40LmIvTm9DaGlsZHJlbi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0xpbmVOdW1iZXJBZGp1c3RtZW50cy9jdmMtY29tcGxleC10eXBlLjIuNC5iL05vQ2hpbGRyZW4ueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjAxYTA5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvTGluZU51bWJlckFkanVzdG1lbnRzL2N2Yy1jb21wbGV4LXR5cGUuMi40LmIvTm9DaGlsZHJlbi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Ob0NoaWxkcmVuIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTm9DaGlsZHJlbiI+Ci0KLSAgICA8ZWxlbWVudCBuYW1lPSJNeUVsZW1lbnQiIHR5cGU9InRuczpOZXdYU0RDb21wbGV4VHlwZSI+PC9lbGVtZW50PgotCi0gICAgPGNvbXBsZXhUeXBlIG5hbWU9Ik5ld1hTRENvbXBsZXhUeXBlIj4KLSAgICAJPHNlcXVlbmNlPgotICAgIAkJPGVsZW1lbnQgbmFtZT0iTmV3RWxlbWVudDEiIHR5cGU9InN0cmluZyIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG1pbk9jY3Vycz0iMSI+PC9lbGVtZW50PgotICAgIAk8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0xpbmVOdW1iZXJBZGp1c3RtZW50cy9jdmMtY29tcGxleC10eXBlLjIuNC5iL2N2Yy1jb21wbGV4LXR5cGUuMi40LmIueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9MaW5lTnVtYmVyQWRqdXN0bWVudHMvY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYi9jdmMtY29tcGxleC10eXBlLjIuNC5iLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2JiZWRiNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0xpbmVOdW1iZXJBZGp1c3RtZW50cy9jdmMtY29tcGxleC10eXBlLjIuNC5iL2N2Yy1jb21wbGV4LXR5cGUuMi40LmIueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHRuczpNeUVsZW1lbnQgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL05vQ2hpbGRyZW4iIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Ob0NoaWxkcmVuIE5vQ2hpbGRyZW4ueHNkICI+Ci0gIAotPC90bnM6TXlFbGVtZW50PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvQW5nbGVIYXReSW5GaWxlbmFtZUludmFsaWQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvQW5nbGVIYXReSW5GaWxlbmFtZUludmFsaWQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWY2NjQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVJbnZhbGlkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVWYWxpZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9BbmdsZUhhdF5JbkZpbGVuYW1lVmFsaWQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjM1Y2IxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVWYWxpZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdC8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhJbnZhbGlkLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoSW52YWxpZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllZjY2NDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhJbnZhbGlkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoVmFsaWQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhWYWxpZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmMzVjYjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhWYWxpZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdC8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9DbG9zZUJyYWNrZXRJblBhdGhJbnZhbGlkLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0Nsb3NlQnJhY2tldEluUGF0aEludmFsaWQueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVmNjY0Ni4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0Nsb3NlQnJhY2tldEluUGF0aEludmFsaWQueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvQ2xvc2VCcmFja2V0SW5QYXRoVmFsaWQueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvQ2xvc2VCcmFja2V0SW5QYXRoVmFsaWQueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmYzNWNiMS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0Nsb3NlQnJhY2tldEluUGF0aFZhbGlkLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdC8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9DbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZUludmFsaWQueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVJbnZhbGlkLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllZjY2NDYuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9DbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZUludmFsaWQueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVWYWxpZC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9DbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZVZhbGlkLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmMzVjYjEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9DbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZVZhbGlkLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdC8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoLUluUGF0aC9EYXNoSW5QYXRoSW52YWxpZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhJbnZhbGlkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVmNjY0Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhJbnZhbGlkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aFZhbGlkLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aFZhbGlkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmYzNWNiMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhWYWxpZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdC8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoSW5GaWxlbmFtZS9EYXNoLUluRmlsZW5hbWVJbnZhbGlkLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lSW52YWxpZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllZjY2NDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoSW5GaWxlbmFtZS9EYXNoLUluRmlsZW5hbWVJbnZhbGlkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lVmFsaWQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoSW5GaWxlbmFtZS9EYXNoLUluRmlsZW5hbWVWYWxpZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmMzVjYjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoSW5GaWxlbmFtZS9EYXNoLUluRmlsZW5hbWVWYWxpZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdC8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0V4Y2xhbWF0aW9uSW5QYXRoSW52YWxpZC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0V4Y2xhbWF0aW9uSW5QYXRoSW52YWxpZC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWY2NjQ2Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aEludmFsaWQueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aFZhbGlkLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvRXhjbGFtYXRpb25JblBhdGhWYWxpZC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjM1Y2IxLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aFZhbGlkLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdC8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVJbnZhbGlkLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvRXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZUludmFsaWQueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVmNjY0Ni4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvRXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZUludmFsaWQueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9FeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lVmFsaWQueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9FeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lVmFsaWQueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmYzNWNiMS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvRXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZVZhbGlkLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdC8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL09wZW5CcmFja2V0SW5QYXRoSW52YWxpZC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL09wZW5CcmFja2V0SW5QYXRoSW52YWxpZC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWY2NjQ2Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9PcGVuQnJhY2tldEluUGF0aEludmFsaWQueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9PcGVuQnJhY2tldEluUGF0aFZhbGlkLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvT3BlbkJyYWNrZXRJblBhdGhWYWxpZC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjM1Y2IxLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9PcGVuQnJhY2tldEluUGF0aFZhbGlkLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdC8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL09wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVJbnZhbGlkLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvT3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZUludmFsaWQueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVmNjY0Ni4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvT3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZUludmFsaWQueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lVmFsaWQueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lVmFsaWQueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmYzNWNiMS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvT3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZVZhbGlkLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdC8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2QuSW5QYXRoL1BlcmlvZEluUGF0aEludmFsaWQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2QuSW5QYXRoL1BlcmlvZEluUGF0aEludmFsaWQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWY2NjQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kLkluUGF0aC9QZXJpb2RJblBhdGhJbnZhbGlkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kLkluUGF0aC9QZXJpb2RJblBhdGhWYWxpZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZC5JblBhdGgvUGVyaW9kSW5QYXRoVmFsaWQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjM1Y2IxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kLkluUGF0aC9QZXJpb2RJblBhdGhWYWxpZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdC8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL1BlcmlvZC5JbkZpbGVuYW1lSW52YWxpZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvUGVyaW9kLkluRmlsZW5hbWVJbnZhbGlkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVmNjY0Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvUGVyaW9kLkluRmlsZW5hbWVJbnZhbGlkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9QZXJpb2QuSW5GaWxlbmFtZVZhbGlkLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9QZXJpb2QuSW5GaWxlbmFtZVZhbGlkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmYzNWNiMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvUGVyaW9kLkluRmlsZW5hbWVWYWxpZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdC8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL1F1b3RlSW5QYXRoSW52YWxpZC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL1F1b3RlSW5QYXRoSW52YWxpZC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWY2NjQ2Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9RdW90ZUluUGF0aEludmFsaWQueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9RdW90ZUluUGF0aFZhbGlkLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZVwwNDdJblBhdGgvUXVvdGVJblBhdGhWYWxpZC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjM1Y2IxLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9RdW90ZUluUGF0aFZhbGlkLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdC8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL1F1b3RlXDA0N0luRmlsZW5hbWVJbnZhbGlkLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZUluRmlsZW5hbWUvUXVvdGVcMDQ3SW5GaWxlbmFtZUludmFsaWQueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVmNjY0Ni4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZUluRmlsZW5hbWUvUXVvdGVcMDQ3SW5GaWxlbmFtZUludmFsaWQueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZVwwNDdJbkZpbGVuYW1lVmFsaWQueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZVwwNDdJbkZpbGVuYW1lVmFsaWQueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmYzNWNiMS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZUluRmlsZW5hbWUvUXVvdGVcMDQ3SW5GaWxlbmFtZVZhbGlkLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdC8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZSBJblBhdGgvU3BhY2VJblBhdGhJbnZhbGlkLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2UgSW5QYXRoL1NwYWNlSW5QYXRoSW52YWxpZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllZjY2NDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZSBJblBhdGgvU3BhY2VJblBhdGhJbnZhbGlkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2UgSW5QYXRoL1NwYWNlSW5QYXRoVmFsaWQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZSBJblBhdGgvU3BhY2VJblBhdGhWYWxpZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmMzVjYjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZSBJblBhdGgvU3BhY2VJblBhdGhWYWxpZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdC8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZUluRmlsZW5hbWUvU3BhY2UgSW5GaWxlbmFtZUludmFsaWQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZUluRmlsZW5hbWUvU3BhY2UgSW5GaWxlbmFtZUludmFsaWQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWY2NjQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL1NwYWNlIEluRmlsZW5hbWVJbnZhbGlkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL1NwYWNlIEluRmlsZW5hbWVWYWxpZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9TcGFjZSBJbkZpbGVuYW1lVmFsaWQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjM1Y2IxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL1NwYWNlIEluRmlsZW5hbWVWYWxpZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdC8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZUluRmlsZW5hbWUvVGlsZGV+SW5GaWxlbmFtZUludmFsaWQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZUluRmlsZW5hbWUvVGlsZGV+SW5GaWxlbmFtZUludmFsaWQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWY2NjQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVJbnZhbGlkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVWYWxpZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9UaWxkZX5JbkZpbGVuYW1lVmFsaWQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjM1Y2IxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVWYWxpZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdC8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZX5JblBhdGgvVGlsZGVJblBhdGhJbnZhbGlkLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGV+SW5QYXRoL1RpbGRlSW5QYXRoSW52YWxpZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllZjY2NDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZX5JblBhdGgvVGlsZGVJblBhdGhJbnZhbGlkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGV+SW5QYXRoL1RpbGRlSW5QYXRoVmFsaWQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZX5JblBhdGgvVGlsZGVJblBhdGhWYWxpZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmMzVjYjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZX5JblBhdGgvVGlsZGVJblBhdGhWYWxpZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdC8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9VbmRlcnNjb3JlX0luRmlsZW5hbWVJbnZhbGlkLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvVW5kZXJzY29yZV9JbkZpbGVuYW1lSW52YWxpZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllZjY2NDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9VbmRlcnNjb3JlX0luRmlsZW5hbWVJbnZhbGlkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvVW5kZXJzY29yZV9JbkZpbGVuYW1lVmFsaWQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9VbmRlcnNjb3JlX0luRmlsZW5hbWVWYWxpZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmMzVjYjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9VbmRlcnNjb3JlX0luRmlsZW5hbWVWYWxpZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdC8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9VbmRlcnNjb3JlSW5QYXRoSW52YWxpZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL1VuZGVyc2NvcmVJblBhdGhJbnZhbGlkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVmNjY0Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL1VuZGVyc2NvcmVJblBhdGhJbnZhbGlkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvVW5kZXJzY29yZUluUGF0aFZhbGlkLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvVW5kZXJzY29yZUluUGF0aFZhbGlkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmYzNWNiMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL1VuZGVyc2NvcmVJblBhdGhWYWxpZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdC8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9Ib25vdXJBbGxTY2hlbWFMb2NhdGlvbnMvQS1pbnN0YW5jZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL0hvbm91ckFsbFNjaGVtYUxvY2F0aW9ucy9BLWluc3RhbmNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGFhNzM5NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL0hvbm91ckFsbFNjaGVtYUxvY2F0aW9ucy9BLWluc3RhbmNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxuc0E6QSB4bWxuczpuc0E9InVybjpuc0EiIHhtbG5zOnA9InVybjpuc0IiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0idXJuOm5zQSBBLnhzZCAiPgotICA8cDpCMT5wOkIxPC9wOkIxPgotICA8cDpCMj5wOkIyPC9wOkIyPgotPC9uc0E6QT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvSG9ub3VyQWxsU2NoZW1hTG9jYXRpb25zL0EueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9Ib25vdXJBbGxTY2hlbWFMb2NhdGlvbnMvQS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhNDNlNzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9Ib25vdXJBbGxTY2hlbWFMb2NhdGlvbnMvQS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9InVybjpuc0EiIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6bnNCPSJ1cm46bnNCIiB4bWxuczpuc0E9InVybjpuc0EiPgotCi0gICAgPGltcG9ydCBuYW1lc3BhY2U9InVybjpuc0IiIHNjaGVtYUxvY2F0aW9uPSJCMS54c2QiLz4KLQk8aW1wb3J0IG5hbWVzcGFjZT0idXJuOm5zQiIgc2NoZW1hTG9jYXRpb249IkIyLnhzZCIvPgotCTxlbGVtZW50IG5hbWU9IkEiPgotCQk8Y29tcGxleFR5cGU+Ci0JCQk8c2VxdWVuY2U+Ci0JCQkJPGVsZW1lbnQgcmVmPSJuc0I6QjEiPjwvZWxlbWVudD4KLQkJCQk8ZWxlbWVudCByZWY9Im5zQjpCMiI+PC9lbGVtZW50PgotCQkJPC9zZXF1ZW5jZT4KLQkJPC9jb21wbGV4VHlwZT4KLQk8L2VsZW1lbnQ+Ci08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL0hvbm91ckFsbFNjaGVtYUxvY2F0aW9ucy9CMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL0hvbm91ckFsbFNjaGVtYUxvY2F0aW9ucy9CMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4YTg1YTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9Ib25vdXJBbGxTY2hlbWFMb2NhdGlvbnMvQjEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9InVybjpuc0IiIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotICAgIDxlbGVtZW50IG5hbWU9IkIxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD4KLTwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvSG9ub3VyQWxsU2NoZW1hTG9jYXRpb25zL0IyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvSG9ub3VyQWxsU2NoZW1hTG9jYXRpb25zL0IyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzRlY2UwMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL0hvbm91ckFsbFNjaGVtYUxvY2F0aW9ucy9CMi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0idXJuOm5zQiIgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0gICAgPGVsZW1lbnQgbmFtZT0iQjIiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PgotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9JbnZvaWNlL0ludm9pY2UuZHRkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9JbnZvaWNlL0ludm9pY2UuZHRkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzM3YmE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvSW52b2ljZS9JbnZvaWNlLmR0ZAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IUVMRU1FTlQgSW52b2ljZSAoSGVhZGVyLEl0ZW0rKT4KLTwhRUxFTUVOVCBIZWFkZXIgKERhdGUsQmlsbFRvKT4KLTwhQVRUTElTVCBIZWFkZXIKLSBpbnZvaWNlTnVtYmVyIENEQVRBICNSRVFVSVJFRAotPgotPCFFTEVNRU5UIEl0ZW0gKGRlc2NyaXB0aW9uKik+Ci08IUFUVExJU1QgSXRlbQotIHByaWNlIENEQVRBICNSRVFVSVJFRAotIGRpc2NvdW50IChwcm9tb3Rpb24gfCByZWd1bGFyKSAicmVndWxhciIKLT4KLTwhRUxFTUVOVCBEYXRlICgoTW9udGgsRGF5LFllYXIpfChEYXksTW9udGgsWWVhcikpPgotPCFFTEVNRU5UIEJpbGxUbyAoQWRkcmVzcyk+Ci08IUFUVExJU1QgQmlsbFRvCi0gY3VzdE51bWJlciBJRCAjUkVRVUlSRUQKLSBuYW1lIENEQVRBICNJTVBMSUVECi0gcGhvbmUgQ0RBVEEgI0lNUExJRUQKLT4KLTwhRUxFTUVOVCBkZXNjcmlwdGlvbiAoI1BDREFUQSk+Ci08IUVMRU1FTlQgQWRkcmVzcyAoc3RyZWV0MSxzdHJlZXQyPyxjaXR5LChzdGF0ZXxwcm92aW5jZSksemlwLGNvdW50cnk/KT4KLTwhRUxFTUVOVCBzdHJlZXQxICgjUENEQVRBKT4KLTwhRUxFTUVOVCBzdHJlZXQyICgjUENEQVRBKT4KLTwhRUxFTUVOVCBjaXR5ICgjUENEQVRBKT4KLTwhRUxFTUVOVCBzdGF0ZSAoI1BDREFUQSk+Ci08IUVMRU1FTlQgcHJvdmluY2UgKCNQQ0RBVEEpPgotPCFFTEVNRU5UIHppcCAoI1BDREFUQSk+Ci08IUVMRU1FTlQgY291bnRyeSAoI1BDREFUQSk+Ci08IUVMRU1FTlQgTW9udGggKCNQQ0RBVEEpPgotPCFFTEVNRU5UIERheSAoI1BDREFUQSk+Ci08IUVMRU1FTlQgWWVhciAoI1BDREFUQSk+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL0ludm9pY2UvSW52b2ljZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL0ludm9pY2UvSW52b2ljZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3OWFmMjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9JbnZvaWNlL0ludm9pY2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBJbnZvaWNlIFBVQkxJQyAiSW52b2ljZUlkIiAiSW52b2ljZS5kdGQiID4KLTxJbnZvaWNlPgotICA8SGVhZGVyIGludm9pY2VOdW1iZXI9IjEyMzQ1Ij4KLSAgICA8RGF0ZT4KLSAgICAgIDxNb250aD5KdWx5PC9Nb250aD4KLSAgICAgIDxEYXk+MTU8L0RheT4KLSAgICAgIDxZZWFyPjIwMDE8L1llYXI+Ci0gICAgPC9EYXRlPgotICAgIDxCaWxsVG8gY3VzdE51bWJlcj0iWDU3MzkiIG5hbWU9Ik1pbHRvbiBNY0dvbyIgcGhvbmU9IjQxNi00NDgtNDQxNCI+Ci0gICAgICA8QWRkcmVzcz4KLSAgICAgICAgPHN0cmVldDE+SUJNPC9zdHJlZXQxPgotICAgICAgICA8c3RyZWV0Mj4xMTUwIEVnbGludG9uIEF2ZSBFYXN0PC9zdHJlZXQyPgotICAgICAgICA8Y2l0eT5Ub3JvbnRvPC9jaXR5PgotICAgICAgICA8c3RhdGU+T250YXJpbzwvc3RhdGU+Ci0gICAgICAgIDx6aXA+TTNDIDFINzwvemlwPgotICAgICAgICA8Y291bnRyeT5DYW5hZGE8L2NvdW50cnk+Ci0gICAgICA8L0FkZHJlc3M+Ci0gICAgPC9CaWxsVG8+Ci0gIDwvSGVhZGVyPgotICA8SXRlbSBkaXNjb3VudD0icHJvbW90aW9uIiBwcmljZT0iNTciPgotICAgIDxkZXNjcmlwdGlvbj5oaWdoIHNwZWVkIDNEIGdyYXBoaWNzIGNhcmQ8L2Rlc2NyaXB0aW9uPgotICA8L0l0ZW0+Ci08L0ludm9pY2U+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL0ludm9pY2VJbnZhbGlkL0ludm9pY2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9JbnZvaWNlSW52YWxpZC9JbnZvaWNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjc5YWYyNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL0ludm9pY2VJbnZhbGlkL0ludm9pY2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBJbnZvaWNlIFBVQkxJQyAiSW52b2ljZUlkIiAiSW52b2ljZS5kdGQiID4KLTxJbnZvaWNlPgotICA8SGVhZGVyIGludm9pY2VOdW1iZXI9IjEyMzQ1Ij4KLSAgICA8RGF0ZT4KLSAgICAgIDxNb250aD5KdWx5PC9Nb250aD4KLSAgICAgIDxEYXk+MTU8L0RheT4KLSAgICAgIDxZZWFyPjIwMDE8L1llYXI+Ci0gICAgPC9EYXRlPgotICAgIDxCaWxsVG8gY3VzdE51bWJlcj0iWDU3MzkiIG5hbWU9Ik1pbHRvbiBNY0dvbyIgcGhvbmU9IjQxNi00NDgtNDQxNCI+Ci0gICAgICA8QWRkcmVzcz4KLSAgICAgICAgPHN0cmVldDE+SUJNPC9zdHJlZXQxPgotICAgICAgICA8c3RyZWV0Mj4xMTUwIEVnbGludG9uIEF2ZSBFYXN0PC9zdHJlZXQyPgotICAgICAgICA8Y2l0eT5Ub3JvbnRvPC9jaXR5PgotICAgICAgICA8c3RhdGU+T250YXJpbzwvc3RhdGU+Ci0gICAgICAgIDx6aXA+TTNDIDFINzwvemlwPgotICAgICAgICA8Y291bnRyeT5DYW5hZGE8L2NvdW50cnk+Ci0gICAgICA8L0FkZHJlc3M+Ci0gICAgPC9CaWxsVG8+Ci0gIDwvSGVhZGVyPgotICA8SXRlbSBkaXNjb3VudD0icHJvbW90aW9uIiBwcmljZT0iNTciPgotICAgIDxkZXNjcmlwdGlvbj5oaWdoIHNwZWVkIDNEIGdyYXBoaWNzIGNhcmQ8L2Rlc2NyaXB0aW9uPgotICA8L0l0ZW0+Ci08L0ludm9pY2U+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL0ludm9pY2VSZW1vdGUvSW52b2ljZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL0ludm9pY2VSZW1vdGUvSW52b2ljZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1YmEzZWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9JbnZvaWNlUmVtb3RlL0ludm9pY2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBJbnZvaWNlIFBVQkxJQyAiSW52b2ljZUlkIiAiaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy93c3QvY29tcG9uZW50cy94c2QvdGVzdHMvZHRkLXJlZmVyZW5jZXMvSW52b2ljZS5kdGQiPgotPEludm9pY2U+Ci0gIDxIZWFkZXIgaW52b2ljZU51bWJlcj0iMTIzNDUiPgotICAgIDxEYXRlPgotICAgICAgPE1vbnRoPkp1bHk8L01vbnRoPgotICAgICAgPERheT4xNTwvRGF5PgotICAgICAgPFllYXI+MjAwMTwvWWVhcj4KLSAgICA8L0RhdGU+Ci0gICAgPEJpbGxUbyBjdXN0TnVtYmVyPSJYNTczOSIgbmFtZT0iTWlsdG9uIE1jR29vIiBwaG9uZT0iNDE2LTQ0OC00NDE0Ij4KLSAgICAgIDxBZGRyZXNzPgotICAgICAgICA8c3RyZWV0MT5JQk08L3N0cmVldDE+Ci0gICAgICAgIDxzdHJlZXQyPjExNTAgRWdsaW50b24gQXZlIEVhc3Q8L3N0cmVldDI+Ci0gICAgICAgIDxjaXR5PlRvcm9udG88L2NpdHk+Ci0gICAgICAgIDxzdGF0ZT5PbnRhcmlvPC9zdGF0ZT4KLSAgICAgICAgPHppcD5NM0MgMUg3PC96aXA+Ci0gICAgICAgIDxjb3VudHJ5PkNhbmFkYTwvY291bnRyeT4KLSAgICAgIDwvQWRkcmVzcz4KLSAgICA8L0JpbGxUbz4KLSAgPC9IZWFkZXI+Ci0gIDxJdGVtIGRpc2NvdW50PSJwcm9tb3Rpb24iIHByaWNlPSI1NyI+Ci0gICAgPGRlc2NyaXB0aW9uPmhpZ2ggc3BlZWQgM0QgZ3JhcGhpY3MgY2FyZDwvZGVzY3JpcHRpb24+Ci0gIDwvSXRlbT4KLTwvSW52b2ljZT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvSW52b2ljZVJlbW90ZS9JbnZvaWNlSW5kaXJlY3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9JbnZvaWNlUmVtb3RlL0ludm9pY2VJbmRpcmVjdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5ZTk4NzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9JbnZvaWNlUmVtb3RlL0ludm9pY2VJbmRpcmVjdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIEludm9pY2UgUFVCTElDICJJbnZvaWNlSWQiICJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL3dzdC9jb21wb25lbnRzL3hzZC90ZXN0cy9kdGQtcmVmZXJlbmNlcy9JbmRpcmVjdEludm9pY2UuZHRkIj4KLTxJbnZvaWNlPgotICA8SGVhZGVyIGludm9pY2VOdW1iZXI9IjEyMzQ1Ij4KLSAgICA8RGF0ZT4KLSAgICAgIDxNb250aD5KdWx5PC9Nb250aD4KLSAgICAgIDxEYXk+MTU8L0RheT4KLSAgICAgIDxZZWFyPjIwMDE8L1llYXI+Ci0gICAgPC9EYXRlPgotICAgIDxCaWxsVG8gY3VzdE51bWJlcj0iWDU3MzkiIG5hbWU9Ik1pbHRvbiBNY0dvbyIgcGhvbmU9IjQxNi00NDgtNDQxNCI+Ci0gICAgICA8QWRkcmVzcz4KLSAgICAgICAgPHN0cmVldDE+SUJNPC9zdHJlZXQxPgotICAgICAgICA8c3RyZWV0Mj4xMTUwIEVnbGludG9uIEF2ZSBFYXN0PC9zdHJlZXQyPgotICAgICAgICA8Y2l0eT5Ub3JvbnRvPC9jaXR5PgotICAgICAgICA8c3RhdGU+T250YXJpbzwvc3RhdGU+Ci0gICAgICAgIDx6aXA+TTNDIDFINzwvemlwPgotICAgICAgICA8Y291bnRyeT5DYW5hZGE8L2NvdW50cnk+Ci0gICAgICA8L0FkZHJlc3M+Ci0gICAgPC9CaWxsVG8+Ci0gIDwvSGVhZGVyPgotICA8SXRlbSBkaXNjb3VudD0icHJvbW90aW9uIiBwcmljZT0iNTciPgotICAgIDxkZXNjcmlwdGlvbj5oaWdoIHNwZWVkIDNEIGdyYXBoaWNzIGNhcmQ8L2Rlc2NyaXB0aW9uPgotICA8L0l0ZW0+Ci08L0ludm9pY2U+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL1B1YmxpY2F0aW9uQ2F0YWxvZ3VlL0NhdGFsb2d1ZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL1B1YmxpY2F0aW9uQ2F0YWxvZ3VlL0NhdGFsb2d1ZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3NDk4NzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9QdWJsaWNhdGlvbkNhdGFsb2d1ZS9DYXRhbG9ndWUueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjOkNhdGFsb2d1ZSB4bWxuczpjPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL0NhdGFsb2d1ZSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL0NhdGFsb2d1ZSBDYXRhbG9ndWUueHNkICI+Ci0JPGM6Qm9vaz4KLQkJPHRpdGxlPlByb2Zlc3Npb25hbCBYTUwgU2NoZW1hPC90aXRsZT4KLQkJPGRhdGU+MjAwMTwvZGF0ZT4KLQkJPGlzYm4+MS04NjEwMDUtNDctNDwvaXNibj4KLQkJPHB1Ymxpc2hlcj5Xcm94IFByZXNzPC9wdWJsaXNoZXI+Ci0JPC9jOkJvb2s+Ci0JPGM6TWFnYXppbmU+Ci0JCTx0aXRsZT5XZWJTcGhlcmUgRGV2ZWxvcGVyJ3MgSm91cm5hbDwvdGl0bGU+Ci0JCTxkYXRlPjIwMDE8L2RhdGU+Ci0JPC9jOk1hZ2F6aW5lPgotCTxjOkJvb2s+Ci0JCTx0aXRsZT5KYXZhIGFuZCBYU0xUPC90aXRsZT4KLQkJPGRhdGU+MjAwMTwvZGF0ZT4KLQkJPGlzYm4+MC01OTYtMDAxNDMtNjwvaXNibj4KLQkJPHB1Ymxpc2hlcj5PJ1JlaWxseTwvcHVibGlzaGVyPgotCTwvYzpCb29rPgotPC9jOkNhdGFsb2d1ZT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvUHVibGljYXRpb25DYXRhbG9ndWUvQ2F0YWxvZ3VlLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvUHVibGljYXRpb25DYXRhbG9ndWUvQ2F0YWxvZ3VlLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDRmZjlmZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL1B1YmxpY2F0aW9uQ2F0YWxvZ3VlL0NhdGFsb2d1ZS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvQ2F0YWxvZ3VlIiB4bWxuczpjPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL0NhdGFsb2d1ZSI+Ci0KLQk8Y29tcGxleFR5cGUgbmFtZT0iUHVibGljYXRpb25UeXBlIj4KLQkJPHNlcXVlbmNlPgotCQkJPGVsZW1lbnQgbmFtZT0idGl0bGUiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PgotCQkJPGVsZW1lbnQgbmFtZT0iYXV0aG9yIiB0eXBlPSJzdHJpbmciIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPjwvZWxlbWVudD4KLQkJCTxlbGVtZW50IG5hbWU9ImRhdGUiIHR5cGU9ImdZZWFyIj48L2VsZW1lbnQ+Ci0JCTwvc2VxdWVuY2U+Ci0JPC9jb21wbGV4VHlwZT4KLQkKLQk8Y29tcGxleFR5cGUgbmFtZT0iQm9va1R5cGUiPgotCQk8Y29tcGxleENvbnRlbnQ+Ci0JCQk8ZXh0ZW5zaW9uIGJhc2U9ImM6UHVibGljYXRpb25UeXBlIj4KLQkJCSAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9ImlzYm4iIHR5cGU9InN0cmluZyIgLz4KLQkJCQkJPGVsZW1lbnQgbmFtZT0icHVibGlzaGVyIiB0eXBlPSJzdHJpbmciLz4KLSAgICAgICAgICAgICAgICA8L3NlcXVlbmNlPgotCQkJPC9leHRlbnNpb24+Ci0JCTwvY29tcGxleENvbnRlbnQ+Ci0JPC9jb21wbGV4VHlwZT4KLQkKLQk8Y29tcGxleFR5cGUgbmFtZT0iTWFnYXppbmVUeXBlIj4KLQkJPGNvbXBsZXhDb250ZW50PgkJCQotCQkJPHJlc3RyaWN0aW9uIGJhc2U9ImM6UHVibGljYXRpb25UeXBlIj4KLQkJCQk8c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InRpdGxlIiB0eXBlPSJzdHJpbmciIC8+Ci0JCQkJCTxlbGVtZW50IG5hbWU9ImF1dGhvciIgdHlwZT0ic3RyaW5nIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0iMCIvPgotCQkJCQk8ZWxlbWVudCBuYW1lPSJkYXRlIiB0eXBlPSJnWWVhciI+PC9lbGVtZW50PgotCQkJCTwvc2VxdWVuY2U+Ci0JCQk8L3Jlc3RyaWN0aW9uPgotCQk8L2NvbXBsZXhDb250ZW50PgotCTwvY29tcGxleFR5cGU+Ci0JCi0JPGVsZW1lbnQgbmFtZT0iUHVibGljYXRpb24iIHR5cGU9ImM6UHVibGljYXRpb25UeXBlIiBhYnN0cmFjdD0idHJ1ZSI+PC9lbGVtZW50PgotCQotCTxlbGVtZW50IG5hbWU9IkJvb2siIHR5cGU9ImM6Qm9va1R5cGUiIHN1YnN0aXR1dGlvbkdyb3VwPSJjOlB1YmxpY2F0aW9uIj48L2VsZW1lbnQ+Ci0KLQk8ZWxlbWVudCBuYW1lPSJNYWdhemluZSIgdHlwZT0iYzpNYWdhemluZVR5cGUiIHN1YnN0aXR1dGlvbkdyb3VwPSJjOlB1YmxpY2F0aW9uIj48L2VsZW1lbnQ+Ci0JCi0JPGVsZW1lbnQgbmFtZT0iQ2F0YWxvZ3VlIj4KLQkJPGNvbXBsZXhUeXBlPgotCQkJPHNlcXVlbmNlPgotCQkJCTxlbGVtZW50IHJlZj0iYzpQdWJsaWNhdGlvbiIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPjwvZWxlbWVudD4KLQkJCTwvc2VxdWVuY2U+Ci0JCTwvY29tcGxleFR5cGU+Ci0JPC9lbGVtZW50PgotCQotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9QdWJsaWNhdGlvbkNhdGFsb2d1ZUludmFsaWQvQ2F0YWxvZ3VlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvUHVibGljYXRpb25DYXRhbG9ndWVJbnZhbGlkL0NhdGFsb2d1ZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3NDk4NzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9QdWJsaWNhdGlvbkNhdGFsb2d1ZUludmFsaWQvQ2F0YWxvZ3VlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08YzpDYXRhbG9ndWUgeG1sbnM6Yz0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9DYXRhbG9ndWUiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9DYXRhbG9ndWUgQ2F0YWxvZ3VlLnhzZCAiPgotCTxjOkJvb2s+Ci0JCTx0aXRsZT5Qcm9mZXNzaW9uYWwgWE1MIFNjaGVtYTwvdGl0bGU+Ci0JCTxkYXRlPjIwMDE8L2RhdGU+Ci0JCTxpc2JuPjEtODYxMDA1LTQ3LTQ8L2lzYm4+Ci0JCTxwdWJsaXNoZXI+V3JveCBQcmVzczwvcHVibGlzaGVyPgotCTwvYzpCb29rPgotCTxjOk1hZ2F6aW5lPgotCQk8dGl0bGU+V2ViU3BoZXJlIERldmVsb3BlcidzIEpvdXJuYWw8L3RpdGxlPgotCQk8ZGF0ZT4yMDAxPC9kYXRlPgotCTwvYzpNYWdhemluZT4KLQk8YzpCb29rPgotCQk8dGl0bGU+SmF2YSBhbmQgWFNMVDwvdGl0bGU+Ci0JCTxkYXRlPjIwMDE8L2RhdGU+Ci0JCTxpc2JuPjAtNTk2LTAwMTQzLTY8L2lzYm4+Ci0JCTxwdWJsaXNoZXI+TydSZWlsbHk8L3B1Ymxpc2hlcj4KLQk8L2M6Qm9vaz4KLTwvYzpDYXRhbG9ndWU+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL1hJbmNsdWRlL2JvZHkueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9YSW5jbHVkZS9ib2R5LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGM4NTczMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL1hJbmNsdWRlL2JvZHkueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGJvZHkgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLSAgeHNpOm5vTmFtZXNwYWNlU2NoZW1hTG9jYXRpb249Im1hc3Rlci54c2QiLz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL1hJbmNsdWRlL21hc3Rlci54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL1hJbmNsdWRlL21hc3Rlci54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmYmFlNzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9YSW5jbHVkZS9tYXN0ZXIueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPG1hc3RlciB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6bm9OYW1lc3BhY2VTY2hlbWFMb2NhdGlvbj0ibWFzdGVyLnhzZCI+Ci0gIDwhLS0gPGJvZHkvPiAtLT4KLSAgPHhpOmluY2x1ZGUgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWEluY2x1ZGUiIGhyZWY9ImJvZHkueG1sIi8+Ci08L21hc3Rlcj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvWEluY2x1ZGUvbWFzdGVyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvWEluY2x1ZGUvbWFzdGVyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDM0ZjU3YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL1hJbmNsdWRlL21hc3Rlci54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzOnNjaGVtYSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotCi0gIDx4czplbGVtZW50IG5hbWU9Im1hc3RlciI+Ci0gICAgPHhzOmNvbXBsZXhUeXBlPgotICAgICAgPHhzOnNlcXVlbmNlPgotICAgICAgICA8eHM6ZWxlbWVudCByZWY9ImJvZHkiIC8+Ci0gICAgICA8L3hzOnNlcXVlbmNlPgotICAgIDwveHM6Y29tcGxleFR5cGU+Ci0gIDwveHM6ZWxlbWVudD4KLSAgPHhzOmVsZW1lbnQgbmFtZT0iYm9keSIvPgotPC94czpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9qMmVlL3dlYi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL2oyZWUvd2ViLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGM2MGE0MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL2oyZWUvd2ViLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d2ViLWFwcCBpZD0iV2ViQXBwX0lEIiB2ZXJzaW9uPSIyLjQiIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiPgotICAgIDxkaXNwbGF5LW5hbWU+bW9kdWxlPC9kaXNwbGF5LW5hbWU+Ci0gICAgPHdlbGNvbWUtZmlsZS1saXN0PgotICAgICAgICA8d2VsY29tZS1maWxlPmluZGV4Lmh0bWw8L3dlbGNvbWUtZmlsZT4KLSAgICAgICAgPHdlbGNvbWUtZmlsZT5pbmRleC5odG08L3dlbGNvbWUtZmlsZT4KLSAgICAgICAgPHdlbGNvbWUtZmlsZT5pbmRleC5qc3A8L3dlbGNvbWUtZmlsZT4KLSAgICAgICAgPHdlbGNvbWUtZmlsZT5kZWZhdWx0Lmh0bWw8L3dlbGNvbWUtZmlsZT4KLSAgICAgICAgPHdlbGNvbWUtZmlsZT5kZWZhdWx0Lmh0bTwvd2VsY29tZS1maWxlPgotICAgICAgICA8d2VsY29tZS1maWxlPmRlZmF1bHQuanNwPC93ZWxjb21lLWZpbGU+Ci0gICAgPC93ZWxjb21lLWZpbGUtbGlzdD4KLTwvd2ViLWFwcD4KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9DYW5ub3RMb2NhdGVEVEQvSW52YWxpZEhvc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9DYW5ub3RMb2NhdGVEVEQvSW52YWxpZEhvc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOWU4ZGI2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvQ2Fubm90TG9jYXRlRFREL0ludmFsaWRIb3N0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBleGFtcGxlIFBVQkxJQyAiUHVibGljIElkZW50aWZpZXIiICJodHRwOi8vd3d3LmVjbGlwc2UuYmxhaC9ub24tZXhpc3RlbnQtZHRkLmR0ZCI+Ci08ZXhhbXBsZS8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9DYW5ub3RMb2NhdGVEVEQvSW52YWxpZExvY2F0aW9uLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvQ2Fubm90TG9jYXRlRFREL0ludmFsaWRMb2NhdGlvbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyMWI4YmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9DYW5ub3RMb2NhdGVEVEQvSW52YWxpZExvY2F0aW9uLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBleGFtcGxlIFBVQkxJQyAiUHVibGljIElkZW50aWZpZXIiICJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL25vbi1leGlzdGVudC1kdGQuZHRkIj4KLTxleGFtcGxlLz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL0N1c3RvbUVycm9yUmVwb3J0ZWRPbkNvcnJlY3RFbGVtZW50L3NpbXBsZW5lc3RlZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL0N1c3RvbUVycm9yUmVwb3J0ZWRPbkNvcnJlY3RFbGVtZW50L3NpbXBsZW5lc3RlZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjZTdiYTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9DdXN0b21FcnJvclJlcG9ydGVkT25Db3JyZWN0RWxlbWVudC9zaW1wbGVuZXN0ZWQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3QgeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2ltcGxlbmVzdGVkIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2ltcGxlbmVzdGVkIHNpbXBsZW5lc3RlZC54c2QgIj4KLSAgPGNoaWxkMT5jaGlsZDE8L2NoaWxkMT4KLTwvcm9vdD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvQ3VzdG9tRXJyb3JSZXBvcnRlZE9uQ29ycmVjdEVsZW1lbnQvc2ltcGxlbmVzdGVkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvQ3VzdG9tRXJyb3JSZXBvcnRlZE9uQ29ycmVjdEVsZW1lbnQvc2ltcGxlbmVzdGVkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmNmNWFkMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL0N1c3RvbUVycm9yUmVwb3J0ZWRPbkNvcnJlY3RFbGVtZW50L3NpbXBsZW5lc3RlZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zaW1wbGVuZXN0ZWQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zaW1wbGVuZXN0ZWQiPgotCi0gICAgPGVsZW1lbnQgbmFtZT0icm9vdCI+Ci0gICAgCTxjb21wbGV4VHlwZT4KLSAgICAJCTxzZXF1ZW5jZT4KLQotICAgIAkJCTxlbGVtZW50IHJlZj0idG5zOmNoaWxkMSI+PC9lbGVtZW50PgotICAgIAkJCTxlbGVtZW50IHJlZj0idG5zOmNoaWxkMiI+PC9lbGVtZW50PgotICAgIAkJPC9zZXF1ZW5jZT4KLSAgICAJPC9jb21wbGV4VHlwZT4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQgbmFtZT0iY2hpbGQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD4KLSAgICA8ZWxlbWVudCBuYW1lPSJjaGlsZDIiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PgotICAgIAotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL0VtcHR5RmlsZS9FbXB0eS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL0VtcHR5RmlsZS9FbXB0eS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9FbXB0eUZpbGUvRW1wdHkueG1sCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvTm9HcmFtbWFyL05vR3JhbW1hci54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL05vR3JhbW1hci9Ob0dyYW1tYXIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwODljODg2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvTm9HcmFtbWFyL05vR3JhbW1hci54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdD4KLQk8Y2hpbGQ+Ci0JCTxjaGlsZDIvPgotCTwvY2hpbGQ+Ci08L3Jvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9Ob05hbWVzcGFjZVNjaGVtYS9Ob05hbWVzcGFjZVNjaGVtYS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL05vTmFtZXNwYWNlU2NoZW1hL05vTmFtZXNwYWNlU2NoZW1hLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDBmMTlhMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL05vTmFtZXNwYWNlU2NoZW1hL05vTmFtZXNwYWNlU2NoZW1hLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290IHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpub05hbWVzcGFjZVNjaGVtYUxvY2F0aW9uPSJOb05hbWVzcGFjZVNjaGVtYS54c2QiPgotICA8Y2hpbGQxPmNoaWxkMTwvY2hpbGQxPgotPC9yb290PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9Ob05hbWVzcGFjZVNjaGVtYS9Ob05hbWVzcGFjZVNjaGVtYS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL05vTmFtZXNwYWNlU2NoZW1hL05vTmFtZXNwYWNlU2NoZW1hLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTJiMGYyNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL05vTmFtZXNwYWNlU2NoZW1hL05vTmFtZXNwYWNlU2NoZW1hLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0icm9vdCIgdHlwZT0iUm9vdFR5cGUiPjwveHNkOmVsZW1lbnQ+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJSb290VHlwZSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iY2hpbGQxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImNoaWxkMiIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9Ob3RXZWxsRm9ybWVkL05vdFdlbGxGb3JtZWQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9Ob3RXZWxsRm9ybWVkL05vdFdlbGxGb3JtZWQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDk5YjJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvTm90V2VsbEZvcm1lZC9Ob3RXZWxsRm9ybWVkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290PgotICA8bm9jbG9zaW5ndGFnPgotPC9yb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvUm9vdE5vTlNDaGlsZE5TL1Jvb3ROb05TQ2hpbGROUy54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL1Jvb3ROb05TQ2hpbGROUy9Sb290Tm9OU0NoaWxkTlMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNGU0NGVmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvUm9vdE5vTlNDaGlsZE5TL1Jvb3ROb05TQ2hpbGROUy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04JyA/PgotPHJvb3Q+Ci0gIDx0ZXN0OnRlc3QgeG1sbnM6dGVzdD0iaHR0cDovL3Rlc3Qub3JnL3Rlc3QiPgotICA8L3Rlc3Q6dGVzdD4KLTwvcm9vdD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvVmFsaWRhdGVXaXRoRFREL1ZhbGlkYXRlV2l0aERUREludmFsaWQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9WYWxpZGF0ZVdpdGhEVEQvVmFsaWRhdGVXaXRoRFRESW52YWxpZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwNGQwYTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9WYWxpZGF0ZVdpdGhEVEQvVmFsaWRhdGVXaXRoRFRESW52YWxpZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9Imlzby04ODU5LTEiPz4KLTwhRE9DVFlQRSBzaW1wbGUgU1lTVEVNICJzaW1wbGUuZHRkIj4KLQotPHNpbXBsZSB2ZXJzaW9uPSIyLjAiIHhtbG5zPSJodHRwOi8vd3d3LnNpbXBsZS5jb20vc2ltcGxlIj4KLSA8ZHVtbXk+IDwvZHVtbXk+Ci08L3NpbXBsZT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvVmFsaWRhdGVXaXRoRFREL1ZhbGlkYXRlV2l0aERURFZhbGlkLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvVmFsaWRhdGVXaXRoRFREL1ZhbGlkYXRlV2l0aERURFZhbGlkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTk5NWQ4Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL1ZhbGlkYXRlV2l0aERURC9WYWxpZGF0ZVdpdGhEVERWYWxpZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9Imlzby04ODU5LTEiPz4KLTwhRE9DVFlQRSBzaW1wbGUgU1lTVEVNICJzaW1wbGUuZHRkIj4KLQotPHNpbXBsZSB2ZXJzaW9uPSIyLjAiIHhtbG5zPSJodHRwOi8vd3d3LnNpbXBsZS5jb20vc2ltcGxlIj4KLSAgPHNpbXBsZTE+Ci0gICAgPHNpbXBsZTIvPgotICA8L3NpbXBsZTE+Ci08L3NpbXBsZT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvVmFsaWRhdGVXaXRoRFREL3NpbXBsZS5kdGQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL1ZhbGlkYXRlV2l0aERURC9zaW1wbGUuZHRkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODQ5Yjk3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvVmFsaWRhdGVXaXRoRFREL3NpbXBsZS5kdGQKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTwhRUxFTUVOVCBzaW1wbGUgKHNpbXBsZTEpPgotPCFBVFRMSVNUIHNpbXBsZSAKLSAgICAgICAgICAgdmVyc2lvbiBDREFUQSAjUkVRVUlSRUQKLSAgICAgICAgICAgeG1sbnMgQ0RBVEEgI0ZJWEVEICdodHRwOi8vd3d3LnNpbXBsZS5jb20vc2ltcGxlJyAKLSAgICAgICAgICAgPgotPCFFTEVNRU5UIHNpbXBsZTEgKHNpbXBsZTIpPgotPCFFTEVNRU5UIHNpbXBsZTIgRU1QVFk+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjNlNjFmZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSjJTRS0xLjUiLz4KLQk8Y2xhc3NwYXRoZW50cnkgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIiBraW5kPSJjb24iPgotCQk8YWNjZXNzcnVsZXM+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJvcmcvZWNsaXBzZS93c3QvKioiLz4KLQkJPC9hY2Nlc3NydWxlcz4KLQk8L2NsYXNzcGF0aGVudHJ5PgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0MjViMDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNWJkYWI4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLSNXZWQgSmFuIDA5IDE2OjQ1OjAzIEVTVCAyMDA4Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTlhMWZlNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUuMAotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzCi1CdW5kbGUtVmVyc2lvbjogMS4wLjEwMS5xdWFsaWZpZXIKLUJ1bmRsZS1DbGFzc1BhdGg6IHhzZGNvcmV0ZXN0cy5qYXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy5pbnRlcm5hbC5YU0RDb3JlVGVzdHNQbHVnaW4KLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWU7YnVuZGxlLXZlcnNpb249IlszLjQuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzO2J1bmRsZS12ZXJzaW9uPSJbMy40LjAsNC4wLjApIiwKLSBvcmcuanVuaXQ7YnVuZGxlLXZlcnNpb249IlszLjguMiw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC54c2QuY29yZTtidW5kbGUtdmVyc2lvbj0iWzEuMS4zMDAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmU7YnVuZGxlLXZlcnNpb249IlsxLjEuMzAwLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2UueHNkO2J1bmRsZS12ZXJzaW9uPSJbMi40LjAsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVyaXJlc29sdmVyO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjMwMSwyLjAuMCkiCi1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKLUJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5Ci1CdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvci4wCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzLmludGVybmFsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMvYWJvdXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTk5ZGYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSwgMjAwODwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZmQ5YTQyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi1iaW4uaW5jbHVkZXMgPSBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgeHNkY29yZXRlc3RzLmphcixcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIHRlc3RyZXNvdXJjZXMvLFwKLSAgICAgICAgICAgICAgIHRlc3QueG1sCi1zb3VyY2UueHNkY29yZXRlc3RzLmphciA9IHNyYy8KLW91dHB1dC54c2Rjb3JldGVzdHMuamFyID0gYmluLwotc3JjLmluY2x1ZGVzID0gYnVpbGQucHJvcGVydGllcwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZDJjZDMxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIHByb3BlcnRpZXMgZmlsZSBmb3Igb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzCi1CdW5kbGUtVmVuZG9yLjAgPSBFY2xpcHNlCi1CdW5kbGUtTmFtZS4wID0gWFNEIENvcmUgVGVzdHMgUGx1Z2luClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL2NvcmUvdGVzdHMvaW50ZXJuYWwvQWxsWFNEQ29yZVRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvY29yZS90ZXN0cy9pbnRlcm5hbC9BbGxYU0RDb3JlVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmI5YTJiMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvY29yZS90ZXN0cy9pbnRlcm5hbC9BbGxYU0RDb3JlVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzLmludGVybmFsOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotLyoqCi0gKiBUaGUgcm9vdCB0ZXN0IHN1aXRlIHRoYXQgY29udGFpbnMgYWxsIG90aGVyIFhTRCBDb3JlIHRlc3Qgc3VpdGVzLgotICovCi1wdWJsaWMgY2xhc3MgQWxsWFNEQ29yZVRlc3RzIGV4dGVuZHMganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZQotewotICAvKioKLSAgICogQ3JlYXRlIHRoaXMgdGVzdCBzdWl0ZS4KLSAgICogCi0gICAqIEByZXR1cm4gVGhpcyB0ZXN0IHN1aXRlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIHJldHVybiBuZXcgQWxsWFNEQ29yZVRlc3RzKCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvcgotICAgKi8KLSAgcHVibGljIEFsbFhTRENvcmVUZXN0cygpCi0gIHsKLSAgICBzdXBlcigiQWxsWFNEQ29yZVRlc3RzIik7Ci0gICAgYWRkVGVzdChCdWdGaXhlc1Rlc3Quc3VpdGUoKSk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvY29yZS90ZXN0cy9pbnRlcm5hbC9CYXNlVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC9jb3JlL3Rlc3RzL2ludGVybmFsL0Jhc2VUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NWZiMWE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC9jb3JlL3Rlc3RzL2ludGVybmFsL0Jhc2VUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVyaXJlc29sdmVyLmludGVybmFsLnByb3Zpc2lvbmFsLlVSSVJlc29sdmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXIuaW50ZXJuYWwucHJvdmlzaW9uYWwuVVJJUmVzb2x2ZXJQbHVnaW47Ci0KLS8qKgotICogQmFzZSB0ZXN0IGNhc2UgY2xhc3Mgd2hpY2ggcHJvdmlkZXMgbWV0aG9kcyB0byAKLSAqIC0gY3JlYXRlIGxvZ3MKLSAqIC0gcmVhZCBmcm9tIGxvZ3MKLSAqIC0gcnVuIGxvZyBjb21wYXJpc29uIHRlc3RzCi0gKi8KLXB1YmxpYyBjbGFzcyBCYXNlVGVzdENhc2UgZXh0ZW5kcyBUZXN0Q2FzZQotewotICBwcm90ZWN0ZWQgU3RyaW5nIEZJTEVfUFJPVE9DT0wgPSAiZmlsZTovLy8iOyAKLSAgcHJvdGVjdGVkIFN0cmluZyBQTFVHSU5fQUJTT0xVVEVfUEFUSDsKLSAgcHJvdGVjdGVkIFN0cmluZyBTQU1QTEVTX0RJUiA9ICJ0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvIjsKLSAgcHJvdGVjdGVkIFN0cmluZyBHRU5FUkFURURfUkVTVUxUU19ESVIgPSAidGVzdHJlc291cmNlcy9nZW5lcmF0ZWRSZXN1bHRzLyI7Ci0gIHByb3RlY3RlZCBTdHJpbmcgSURFQUxfUkVTVUxUU19ESVIgPSAidGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvIjsKLSAgcHJvdGVjdGVkIFN0cmluZyBMT0dfRklMRV9MT0NBVElPTiA9ICJyZXN1bHRzLmxvZyI7Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHNldFVwKCkKLSAgewotICAgIFBMVUdJTl9BQlNPTFVURV9QQVRIID0gWFNEQ29yZVRlc3RzUGx1Z2luLmdldEluc3RhbGxVUkwoKTsKLSAgfQotICAKLSAgcHJvdGVjdGVkIFN0cmluZyBsb2NhdGVGaWxlVXNpbmdDYXRhbG9nKFN0cmluZyBuYW1lc3BhY2VVUkkpCi0gIHsKLSAgICBVUklSZXNvbHZlciByZXNvbHZlciA9IFVSSVJlc29sdmVyUGx1Z2luLmNyZWF0ZVJlc29sdmVyKCk7Ci0gICAgU3RyaW5nIHJlc3VsdCA9IHJlc29sdmVyLnJlc29sdmUoIiIsIG5hbWVzcGFjZVVSSSwgIiIpOwotICAgIFN0cmluZyByZXNvbHZlZFVSSSA9IHJlc29sdmVyLnJlc29sdmVQaHlzaWNhbExvY2F0aW9uKCIiLCBuYW1lc3BhY2VVUkksIHJlc3VsdCk7Ci0gICAgaWYgKHJlc29sdmVkVVJJID09IG51bGwgfHwgcmVzb2x2ZWRVUkkubGVuZ3RoKCkgPT0gMCkKLSAgICB7Ci0gICAgICByZXR1cm4gbmFtZXNwYWNlVVJJOwotICAgIH0KLSAgICByZXR1cm4gcmVzb2x2ZWRVUkk7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL2NvcmUvdGVzdHMvaW50ZXJuYWwvQnVnRml4ZXNUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvY29yZS90ZXN0cy9pbnRlcm5hbC9CdWdGaXhlc1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJiNzdiNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvY29yZS90ZXN0cy9pbnRlcm5hbC9CdWdGaXhlc1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQzNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIERhdmlkIENhcnZlciAtIFNUQVIgLSBidWcgMTU3MjU0IAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTUF0dHJpYnV0ZURlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01EYXRhVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTUVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNTmFtZWROb2RlTWFwOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01Ob2RlTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLmNvbnRlbnRtb2RlbC5pbnRlcm5hbC5DTURvY3VtZW50RmFjdG9yeVhTRDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLmNvbnRlbnRtb2RlbC5pbnRlcm5hbC5YU0RJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QuY29udGVudG1vZGVsLmludGVybmFsLlhTREltcGwuRG9jdW1lbnRhdGlvbkltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC5jb250ZW50bW9kZWwuaW50ZXJuYWwuWFNESW1wbC5YU0RFbGVtZW50RGVjbGFyYXRpb25BZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QuY29udGVudG1vZGVsLmludGVybmFsLlhTREltcGwuWFNETW9kZWxHcm91cEFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RUeXBlRGVmaW5pdGlvbjsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotCi0vKioKLSAqIFRlc3QgY2xhc3MgZm9yIGJ1ZyBmaXhlcy4KLSAqLwotcHVibGljIGNsYXNzIEJ1Z0ZpeGVzVGVzdCBleHRlbmRzIEJhc2VUZXN0Q2FzZQotewotICBwcm90ZWN0ZWQgU3RyaW5nIEJVR0ZJWEVTX0RJUiA9ICJCdWdGaXhlcy8iOwotICAKLSAgLyoqCi0gICAqIENyZWF0ZSBhIHRlc3RzIHN1aXRlIGZyb20gdGhpcyB0ZXN0IGNsYXNzLgotICAgKiAKLSAgICogQHJldHVybiBBIHRlc3Qgc3VpdGUgY29udGFpbmluZyB0aGlzIHRlc3QgY2xhc3MuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoQnVnRml4ZXNUZXN0LmNsYXNzKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpCi0gIHsKLSAgICBzdXBlci5zZXRVcCgpOwotICB9Ci0gIAotICAvLyBBZGQgdGVzdHMgaGVyZQotICAKLSAgQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCi0gIHB1YmxpYyB2b2lkIHRlc3RYU0lUeXBlKCkKLSAgewotICAgIFN0cmluZyBzb2FwU2NoZW1hVVJJID0gbG9jYXRlRmlsZVVzaW5nQ2F0YWxvZygiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIpOwotCi0gICAgQ01Eb2N1bWVudEZhY3RvcnlYU0QgZmFjdG9yeSA9IG5ldyBDTURvY3VtZW50RmFjdG9yeVhTRCgpOwotICAgIGFzc2VydE5vdE51bGwoIkFzc2VydCBmYWN0b3J5IGlzIG5vdCBudWxsIiwgZmFjdG9yeSk7Ci0gICAgCi0gICAgQ01Eb2N1bWVudCBjbURvY3VtZW50ID0gZmFjdG9yeS5jcmVhdGVDTURvY3VtZW50KHNvYXBTY2hlbWFVUkkpOwotICAgIGFzc2VydE5vdE51bGwoIkFzc2VydCBDTURvY3VtZW50IGlzIG5vdCBudWxsIiwgY21Eb2N1bWVudCk7Ci0gICAgICAgIAotICAgIENNTmFtZWROb2RlTWFwIGVsZW1lbnRzID0gY21Eb2N1bWVudC5nZXRFbGVtZW50cygpOwotICAgIAotICAgIGJvb2xlYW4gZm91bmREZXNpcmVkRWxlbWVudCA9IGZhbHNlOwotICAgIGZvciAoSXRlcmF0b3I8Q01FbGVtZW50RGVjbGFyYXRpb24+IGkgPSBlbGVtZW50cy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQotICAgIHsKLSAgICAgIENNRWxlbWVudERlY2xhcmF0aW9uIGVsZW1lbnQgPSBpLm5leHQoKTsKLSAgICAgIGlmICgiYmluZGluZyIuZXF1YWxzKGVsZW1lbnQuZ2V0RWxlbWVudE5hbWUoKSkpCi0gICAgICB7Ci0gICAgICAgIGZvdW5kRGVzaXJlZEVsZW1lbnQgPSB0cnVlOwotICAgICAgICAKLSAgICAgICAgQ01OYW1lZE5vZGVNYXAgYXR0cmlidXRlcyA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlcygpOwotICAgICAgICBhc3NlcnROb3ROdWxsKGF0dHJpYnV0ZXMpOyAgLy8gVGhyZWUgYXR0cmlidXRlczogcmVxdWlyZWQsIHRyYW5zcG9ydCBhbmQgc3R5bGUKLSAgICAgICAgYXNzZXJ0VHJ1ZShhdHRyaWJ1dGVzLmdldExlbmd0aCgpID09IDMpOyAgLy8gSWYgdGhlIHhzaTp0eXBlIHdhcyBwcmVzZW50LCBpdCB3b3VsZCBiZSA0IGF0dHJpYnV0ZXMKLSAgICAgICAgCi0gICAgICAgIENNTm9kZSBhdHRyTm9kZSA9IG51bGw7Ci0gICAgICAgIAotICAgICAgICBhdHRyTm9kZSA9IGF0dHJpYnV0ZXMuZ2V0TmFtZWRJdGVtKCJyZXF1aXJlZCIpOwotICAgICAgICBhc3NlcnROb3ROdWxsKGF0dHJOb2RlKTsKLSAgICAgICAgYXR0ck5vZGUgPSBhdHRyaWJ1dGVzLmdldE5hbWVkSXRlbSgidHJhbnNwb3J0Iik7Ci0gICAgICAgIGFzc2VydE5vdE51bGwoYXR0ck5vZGUpOwotICAgICAgICBhdHRyTm9kZSA9IGF0dHJpYnV0ZXMuZ2V0TmFtZWRJdGVtKCJzdHlsZSIpOwotICAgICAgICBhc3NlcnROb3ROdWxsKGF0dHJOb2RlKTsKLSAgICAgICAgYXR0ck5vZGUgPSBhdHRyaWJ1dGVzLmdldE5hbWVkSXRlbSgidHlwZSIpOyAgLy8gU2hvdWxkIGJlIG51bGwhCi0gICAgICAgIGFzc2VydE51bGwoYXR0ck5vZGUpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgYXNzZXJ0VHJ1ZShmb3VuZERlc2lyZWRFbGVtZW50KTsgLy8gaWYgd2UgZGlkbid0IGV2ZW4gZmluZCB0aGUgYmluZGluZyBlbGVtZW50LCB0aGVuIHNvbWV0aGluZyB0ZXJyaWJsZSB3ZW50IHdyb25nCi0gIH0KLSAgCi0gIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQotICBwdWJsaWMgdm9pZCB0ZXN0U3RhY2tPdmVyZmxvdygpCi0gIHsKLSAgICBTdHJpbmcgdnhtbFNjaGVtYVVSSSA9IGxvY2F0ZUZpbGVVc2luZ0NhdGFsb2coImh0dHA6Ly93d3cudzMub3JnL1RSL3ZvaWNleG1sMjAvdnhtbC54c2QiKTsKLSAgICAKLSAgICAvLyBTZWUgYnVnIDIwNjEzOAotICAgIAotICAgIC8vIFR3byB3YXlzIHRvIHRlc3QgdGhpcy4KLSAgICAvLyBGaXJzdCB3YXkuIENhbGwgZmluZFR5cGVzRGVyaXZlZEZyb20gZnJvbSBYU0RJbXBsLgotICAgIAotICAgIFhTRFNjaGVtYSB4c2RTY2hlbWEgPSBYU0RJbXBsLmJ1aWxkWFNETW9kZWwodnhtbFNjaGVtYVVSSSk7Ci0gICAgYXNzZXJ0Tm90TnVsbCh4c2RTY2hlbWEpOwotICAgIGJvb2xlYW4gZm91bmREZXNpcmVkVHlwZSA9IGZhbHNlOwotICAgIGZvciAoSXRlcmF0b3I8WFNEVHlwZURlZmluaXRpb24+IHR5cGVzID0geHNkU2NoZW1hLmdldFR5cGVEZWZpbml0aW9ucygpLml0ZXJhdG9yKCk7IHR5cGVzLmhhc05leHQoKTsgKQotICAgIHsKLSAgICAgIFhTRFR5cGVEZWZpbml0aW9uIHR5cGUgPSB0eXBlcy5uZXh0KCk7Ci0gICAgICBpZiAodHlwZSBpbnN0YW5jZW9mIFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbikKLSAgICAgIHsKLSAgICAgICAgWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uIGNvbXBsZXhUeXBlID0gKFhTRENvbXBsZXhUeXBlRGVmaW5pdGlvbikgdHlwZTsKLSAgICAgICAgaWYgKCJiYXNpYy5ldmVudC5oYW5kbGVyIi5lcXVhbHMoY29tcGxleFR5cGUuZ2V0TmFtZSgpKSkKLSAgICAgICAgewotICAgICAgICAgIGZvdW5kRGVzaXJlZFR5cGUgPSB0cnVlOwotICAgICAgICAgIExpc3Q8WFNEVHlwZURlZmluaXRpb24+IGxpc3QgPSBYU0RJbXBsLmZpbmRUeXBlc0Rlcml2ZWRGcm9tKGNvbXBsZXhUeXBlKTsKLSAgICAgICAgICBpbnQgc2l6ZSA9IGxpc3Quc2l6ZSgpOwotICAgICAgICAgIC8vIGFzc2VydFRydWUoc2l6ZSA9PSAxKTsgIC8vIGlmIHdlIGdvdCBzb21ldGhpbmcgYmFjaywgdGhlbiBncmVhdCwgdGhlcmUgd2FzIG5vIG91dCBvZiBzdGFjayBlcnJvcgotICAgICAgICAgIGFzc2VydFRydWUoc2l6ZSA+PSAwKTsKLSAgICAgICAgICAvLyBCZWNhdXNlIG9mIGJ1ZyAyMDMwNDgsIHRoZXJlIGlzIGEgY2hhbmdlIGluIGJlaGF2aW91ciB0byByZWRlZmluZWQgdHlwZXMuICAKLSAgICAgICAgICAvLyBUaGUgY29tcGxleCB0eXBlIG5hbWVkIHNwZWFrZXIgaXMgbm8gbG9uZ2VyIGNpcmN1bGFyLiAgIEluIHRlcm1zIG9mIHRoaXMganVuaXQsIHRoZSB2YWx1ZSByZXR1cm5lZCBpcyBub3QgcmVsZXZhbnQKLSAgICAgICAgICAvLyBzaW5jZSB3ZSBqdXN0IHdhbnQgc29tZSBsZW5ndGggYmFjayAoaS5lLiB0aGVyZSB3YXMgbm8gY3Jhc2ggZnJvbSBhIHN0YWNrIG92ZXJmbG93KS4KLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBhc3NlcnRUcnVlKGZvdW5kRGVzaXJlZFR5cGUpOyAgLy8gaWYgd2UgZGlkbid0IGV2ZW4gZmluZCB0aGUgY29tcGxleCB0eXBlLCB0aGVuIHNvbWV0aGluZyB0ZXJyaWJsZSB3ZW50IHdyb25nCi0gICAgCi0gICAgLy8gU2Vjb25kIHdheSB0byB0ZXN0IHZpYSBjb250ZW50IG1vZGVsCi0gICAgCi0gICAgQ01Eb2N1bWVudEZhY3RvcnlYU0QgZmFjdG9yeSA9IG5ldyBDTURvY3VtZW50RmFjdG9yeVhTRCgpOwotICAgIGFzc2VydE5vdE51bGwoIkFzc2VydCBmYWN0b3J5IGlzIG5vdCBudWxsIiwgZmFjdG9yeSk7Ci0gICAgCi0gICAgQ01Eb2N1bWVudCBjbURvY3VtZW50ID0gZmFjdG9yeS5jcmVhdGVDTURvY3VtZW50KHZ4bWxTY2hlbWFVUkkpOwotICAgIGFzc2VydE5vdE51bGwoIkFzc2VydCBDTURvY3VtZW50IGlzIG5vdCBudWxsIiwgY21Eb2N1bWVudCk7Ci0gICAgICAgIAotICAgIENNTmFtZWROb2RlTWFwIGVsZW1lbnRzID0gY21Eb2N1bWVudC5nZXRFbGVtZW50cygpOwotICAgIAotICAgIGJvb2xlYW4gZm91bmREZXNpcmVkRWxlbWVudCA9IGZhbHNlOwotICAgIGZvciAoSXRlcmF0b3I8Q01FbGVtZW50RGVjbGFyYXRpb24+IGkgPSBlbGVtZW50cy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQotICAgIHsKLSAgICAgIENNRWxlbWVudERlY2xhcmF0aW9uIGVsZW1lbnQgPSBpLm5leHQoKTsKLSAgICAgIGlmICgibm9pbnB1dCIuZXF1YWxzKGVsZW1lbnQuZ2V0RWxlbWVudE5hbWUoKSkpCi0gICAgICB7Ci0gICAgICAgIENNTmFtZWROb2RlTWFwIGF0dHJpYnV0ZXMgPSBlbGVtZW50LmdldEF0dHJpYnV0ZXMoKTsKLSAgICAgICAgYXNzZXJ0Tm90TnVsbChhdHRyaWJ1dGVzKTsKLSAgICAgICAgLy8gYXNzZXJ0VHJ1ZShhdHRyaWJ1dGVzLmdldExlbmd0aCgpID09IDMpOyAgLy8gaWYgd2UgZ290IHNvbWV0aGluZyBiYWNrLCB0aGVuIGdyZWF0LCB0aGVyZSB3YXMgbm8gb3V0IG9mIHN0YWNrIGVycm9yCi0gICAgICAgIC8vIEJlY2F1c2Ugb2YgYnVnIDIwMzA0OCwgdGhlcmUgaXMgYSBjaGFuZ2UgaW4gYmVoYXZpb3VyIHRvIHJlZGVmaW5lZCB0eXBlcy4gIAotICAgICAgICAvLyBUaGUgY29tcGxleCB0eXBlIG5hbWVkIHNwZWFrZXIgaXMgbm8gbG9uZ2VyIGNpcmN1bGFyLiAgIEluIHRlcm1zIG9mIHRoaXMganVuaXQsIHRoZSB2YWx1ZSByZXR1cm5lZCBpcyBub3QgcmVsZXZhbnQKLSAgICAgICAgLy8gc2luY2Ugd2UganVzdCB3YW50IHNvbWUgbGVuZ3RoIGJhY2sgKGkuZS4gdGhlcmUgd2FzIG5vIGNyYXNoIGZyb20gYSBzdGFjayBvdmVyZmxvdykuCi0gICAgICAgIGFzc2VydFRydWUoYXR0cmlidXRlcy5nZXRMZW5ndGgoKSA+PSAwKTsKLSAgICAgICAgZm91bmREZXNpcmVkRWxlbWVudCA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICBhc3NlcnRUcnVlKGZvdW5kRGVzaXJlZEVsZW1lbnQpOyAgLy8gaWYgd2UgZGlkbid0IGV2ZW4gZmluZCB0aGUgbm9pbnB1dCBlbGVtZW50LCB0aGVuIHNvbWV0aGluZyB0ZXJyaWJsZSB3ZW50IHdyb25nCi0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHRlc3RYU0RUeXBlV2hpdGVzcGFjZUZhY2V0cygpIHsKLQkgIC8vIEJ1ZyBbMTk0Njk4XSAtIFRlc3QgdGhhdCB0aGUgY29ycmVjdCB3aGl0ZXNwYWNlIGZhY2V0cyBhcmUgYXBwbGllZCB0byB0aGUgdHlwZXMKLQkgIFN0cmluZyBYU0RfRklMRV9OQU1FID0gIlhTRFdoaXRlc3BhY2UueHNkIjsKLQkgIFN0cmluZyBmaWxlVVJJID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBYU0RfRklMRV9OQU1FOwotCSAgQ01Eb2N1bWVudEZhY3RvcnlYU0QgZmFjdG9yeSA9IG5ldyBDTURvY3VtZW50RmFjdG9yeVhTRCgpOwotCSAgYXNzZXJ0Tm90TnVsbCgiQXNzZXJ0IGZhY3RvcnkgaXMgbm90IG51bGwiLCBmYWN0b3J5KTsKLQkgIENNRG9jdW1lbnQgY21Eb2N1bWVudCA9IGZhY3RvcnkuY3JlYXRlQ01Eb2N1bWVudChmaWxlVVJJKTsKLQkgIGFzc2VydE5vdE51bGwoIkFzc2VydCBDTURvY3VtZW50IGlzIG5vdCBudWxsIiwgY21Eb2N1bWVudCk7Ci0JICBDTUVsZW1lbnREZWNsYXJhdGlvbiBlbGVtRGVjbCA9IChDTUVsZW1lbnREZWNsYXJhdGlvbiljbURvY3VtZW50LmdldEVsZW1lbnRzKCkuaXRlbSgwKTsKLQkgIGFzc2VydEVxdWFscygidGVzdCIsIGVsZW1EZWNsLmdldE5vZGVOYW1lKCkpOwotCSAgYXNzZXJ0VHJ1ZShlbGVtRGVjbC5nZXRDb250ZW50KCkgaW5zdGFuY2VvZiBYU0RNb2RlbEdyb3VwQWRhcHRlcik7Ci0JICBYU0RNb2RlbEdyb3VwQWRhcHRlciBncm91cCA9IChYU0RNb2RlbEdyb3VwQWRhcHRlcikgZWxlbURlY2wuZ2V0Q29udGVudCgpOwotCSAgQ01Ob2RlTGlzdCBsaXN0ID0gZ3JvdXAuZ2V0Q2hpbGROb2RlcygpOwotCSAgWFNERWxlbWVudERlY2xhcmF0aW9uQWRhcHRlciBhZGFwdGVyID0gbnVsbDsKLQkgIAotCSAgU3RyaW5nIG5vZGVOYW1lID0gbnVsbCwgZXhwZWN0ZWQgPSBudWxsOwotCSAgQ01EYXRhVHlwZSB0eXBlID0gbnVsbDsKLQkgIC8vIEl0ZXJhdGUgb3ZlciB0aGUgY2hpbGQgbm9kZXMgb2YgdGhlIGVsZW1lbnQsIGV4YW1pbmluZyB0aGUgd2hpdGVzcGFjZSBmYWNldHMgKi8KLQkgIGZvcihpbnQgaSA9IDA7IGkgPCBsaXN0LmdldExlbmd0aCgpOyBpKyspIHsKLQkJICBhZGFwdGVyID0gKFhTREVsZW1lbnREZWNsYXJhdGlvbkFkYXB0ZXIpIGxpc3QuaXRlbShpKTsKLQotCQkgIG5vZGVOYW1lID0gYWRhcHRlci5nZXROb2RlTmFtZSgpOwotCQkgIGFzc2VydE5vdE51bGwobm9kZU5hbWUpOwotCQkgIGFzc2VydFRydWUobm9kZU5hbWUuY29udGFpbnMoIi0iKSk7Ci0JCSAgdHlwZSA9IGFkYXB0ZXIuZ2V0RGF0YVR5cGUoKTsKLQkJICBhc3NlcnROb3ROdWxsKHR5cGUpOwotCQkgIAotCQkgIGV4cGVjdGVkID0gbm9kZU5hbWUuc3Vic3RyaW5nKG5vZGVOYW1lLmluZGV4T2YoJy0nKSArIDEpOwotCQkgIGFzc2VydEVxdWFscyhleHBlY3RlZCwgdHlwZS5nZXRQcm9wZXJ0eShYU0RJbXBsLlBST1BFUlRZX1dISVRFU1BBQ0VfRkFDRVQpKTsKLQkgIH0KLSAgfQotICAKLSAgcHVibGljIHZvaWQgdGVzdFhTSVR5cGVWc1R5cGVBdHRyKCkgCi0gIHsKLSAgICAgIAotICAgIC8vIFNlZSBidWcgMjI1NDQ3LCAyMjU4MTkKLSAgCi0gICAgLy8gTG9hZCB0aGUgWFNEIGZpbGUKLSAgICBTdHJpbmcgWFNEX0ZJTEVfTkFNRSA9ICJYU0lUeXBlVGVzdC54c2QiOwotICAgIFN0cmluZyBmaWxlVVJJID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBYU0RfRklMRV9OQU1FOwotICAgIENNRG9jdW1lbnRGYWN0b3J5WFNEIGZhY3RvcnkgPSBuZXcgQ01Eb2N1bWVudEZhY3RvcnlYU0QoKTsKLSAgICBhc3NlcnROb3ROdWxsKCJBc3NlcnQgZmFjdG9yeSBpcyBub3QgbnVsbCIsIGZhY3RvcnkpOwotICAgIENNRG9jdW1lbnQgY21Eb2N1bWVudCA9IGZhY3RvcnkuY3JlYXRlQ01Eb2N1bWVudChmaWxlVVJJKTsKLSAgICBhc3NlcnROb3ROdWxsKCJBc3NlcnQgQ01Eb2N1bWVudCBpcyBub3QgbnVsbCIsIGNtRG9jdW1lbnQpOwotICAKLSAgICAvLyBDaGVjayBhbmQgb2J0YWluIHRoZSB0d28gZ2xvYmFsIGVsZW1lbnRzIChlbGVtZW50QSBhbmQgZWxlbWVudEIpCi0gICAgQ01OYW1lZE5vZGVNYXAgZWxlbWVudHMgPSBjbURvY3VtZW50LmdldEVsZW1lbnRzKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKGVsZW1lbnRzLmdldExlbmd0aCgpLCAyKTsKLSAgICBDTUVsZW1lbnREZWNsYXJhdGlvbiBjbUVsZW1lbnREZWNsYXJhdGlvbiA9IChDTUVsZW1lbnREZWNsYXJhdGlvbillbGVtZW50cy5pdGVtKDApOwotICAgIENNRWxlbWVudERlY2xhcmF0aW9uIGNtRWxlbWVudERlY2xhcmF0aW9uQSA9IG51bGw7Ci0gICAgQ01FbGVtZW50RGVjbGFyYXRpb24gY21FbGVtZW50RGVjbGFyYXRpb25CID0gbnVsbDsKLSAgICBpZiAoImVsZW1lbnRBIi5lcXVhbHMoY21FbGVtZW50RGVjbGFyYXRpb24uZ2V0RWxlbWVudE5hbWUoKSkpCi0gICAgewotICAgICAgY21FbGVtZW50RGVjbGFyYXRpb25BID0gY21FbGVtZW50RGVjbGFyYXRpb247Ci0gICAgICBjbUVsZW1lbnREZWNsYXJhdGlvbkIgPSAoQ01FbGVtZW50RGVjbGFyYXRpb24pZWxlbWVudHMuaXRlbSgxKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGNtRWxlbWVudERlY2xhcmF0aW9uQiA9IGNtRWxlbWVudERlY2xhcmF0aW9uOwotICAgICAgY21FbGVtZW50RGVjbGFyYXRpb25BID0gKENNRWxlbWVudERlY2xhcmF0aW9uKWVsZW1lbnRzLml0ZW0oMSk7Ci0gICAgfQotICAKLSAgICAvLyBlbGVtZW50QSBoYXMgYSAidHlwZSIgYXR0cmlidXRlIHdpdGggIlgiIGVudW1lcmF0ZWQgdmFsdWUsIG1ha2Ugc3VyZSBpdCBhcHBlYXJzIGluIHRoZSBtb2RlbAotICAgIENNTmFtZWROb2RlTWFwIGF0dHJpYnV0ZXNBID0gY21FbGVtZW50RGVjbGFyYXRpb25BLmdldEF0dHJpYnV0ZXMoKTsKLSAgICBhc3NlcnRFcXVhbHMoYXR0cmlidXRlc0EuZ2V0TGVuZ3RoKCksIDEpOwotICAgIENNQXR0cmlidXRlRGVjbGFyYXRpb24gY21BdHRyaWJ1dGVEZWNsYXJhdGlvbkEgPSAoQ01BdHRyaWJ1dGVEZWNsYXJhdGlvbilhdHRyaWJ1dGVzQS5pdGVtKDApOwotICAgIGFzc2VydEVxdWFscygidHlwZSIsIGNtQXR0cmlidXRlRGVjbGFyYXRpb25BLmdldEF0dHJOYW1lKCkpOwotICAgIENNRGF0YVR5cGUgYXR0clR5cGVBID0gY21BdHRyaWJ1dGVEZWNsYXJhdGlvbkEuZ2V0QXR0clR5cGUoKTsKLSAgICBTdHJpbmdbXSBlbnVtZXJhdGVkVmFsdWVzQSA9IGF0dHJUeXBlQS5nZXRFbnVtZXJhdGVkVmFsdWVzKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIGVudW1lcmF0ZWRWYWx1ZXNBLmxlbmd0aCk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJYIiwgZW51bWVyYXRlZFZhbHVlc0FbMF0pOwotICAKLSAgICAvLyBlbGVtZW50QiBkb2VzIG5vdCBoYXZlIGEgInR5cGUiIGF0dHJpYnV0ZSwgbWFrZSBzdXJlIHRoZSB4c2k6dHlwZSBhcHBlYXJzIGluIHRoZSBtb2RlbAotICAgIENNTmFtZWROb2RlTWFwIGF0dHJpYnV0ZXNCID0gY21FbGVtZW50RGVjbGFyYXRpb25CLmdldEF0dHJpYnV0ZXMoKTsKLSAgICBhc3NlcnRFcXVhbHMoYXR0cmlidXRlc0IuZ2V0TGVuZ3RoKCksIDEpOwotICAgIENNQXR0cmlidXRlRGVjbGFyYXRpb24gY21BdHRyaWJ1dGVEZWNsYXJhdGlvbkIgPSAoQ01BdHRyaWJ1dGVEZWNsYXJhdGlvbilhdHRyaWJ1dGVzQi5pdGVtKDApOwotICAgIGFzc2VydEVxdWFscygidHlwZSIsIGNtQXR0cmlidXRlRGVjbGFyYXRpb25CLmdldEF0dHJOYW1lKCkpOwotICAgIENNRGF0YVR5cGUgYXR0clR5cGVCID0gY21BdHRyaWJ1dGVEZWNsYXJhdGlvbkIuZ2V0QXR0clR5cGUoKTsKLSAgICBhc3NlcnRFcXVhbHMoInR5cGVOYW1lcyIsIGF0dHJUeXBlQi5nZXREYXRhVHlwZU5hbWUoKSk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHRlc3RFbnVtZXJhdGlvbnNJbkNvbXBsZXhUeXBlc1dpdGhTaW1wbGVDb250ZW50KCkKLSAgewotICAgIC8vIFNlZSBidWcgMjE1NTE0Ci0KLSAgICAvLyBPYnRhaW4gdGhlIFdlYiBBcHBsaWNhdGlvbiBzY2hlbWEKLSAgICBTdHJpbmcgdnhtbFNjaGVtYVVSSSA9IGxvY2F0ZUZpbGVVc2luZ0NhdGFsb2coImh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZS93ZWItYXBwXzJfNS54c2QiKTsKLSAgICBYU0RTY2hlbWEgeHNkU2NoZW1hID0gWFNESW1wbC5idWlsZFhTRE1vZGVsKHZ4bWxTY2hlbWFVUkkpOwotICAgIGFzc2VydE5vdE51bGwoeHNkU2NoZW1hKTsKLQotICAgIC8vIFRoZSB0eXBlIHRyYW5zcG9ydC1ndWFyYW50ZWVUeXBlIGlzIGRlZmluZWQgYXMgYSBjb21wbGV4IHR5cGUgd2l0aCBzaW1wbGUgdHlwZSBjb250ZW50Ci0gICAgLy8gSXQgaGFzIDMgZW51bWVyYXRlZCB2YWx1ZXMKLSAgICBTdHJpbmcgdHlwZU5hbWUgPSAidHJhbnNwb3J0LWd1YXJhbnRlZVR5cGUiOwotICAgIGZvciAoSXRlcmF0b3I8WFNEVHlwZURlZmluaXRpb24+IHR5cGVzID0geHNkU2NoZW1hLmdldFR5cGVEZWZpbml0aW9ucygpLml0ZXJhdG9yKCk7IHR5cGVzLmhhc05leHQoKTspCi0gICAgewotICAgICAgWFNEVHlwZURlZmluaXRpb24gdHlwZSA9IHR5cGVzLm5leHQoKTsKLSAgICAgIGlmICh0eXBlIGluc3RhbmNlb2YgWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKQotICAgICAgewotICAgICAgICBYU0RDb21wbGV4VHlwZURlZmluaXRpb24gY29tcGxleFR5cGUgPSAoWFNEQ29tcGxleFR5cGVEZWZpbml0aW9uKXR5cGU7Ci0gICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoY29tcGxleFR5cGUuZ2V0TmFtZSgpKSkKLSAgICAgICAgewotICAgICAgICAgIFN0cmluZ1tdIGVudW1lcmF0ZWRWYWx1ZXNGb3JUeXBlID0gWFNESW1wbC5nZXRFbnVtZXJhdGVkVmFsdWVzRm9yVHlwZShjb21wbGV4VHlwZSk7Ci0gICAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIDMgZW51bWVyYXRlZCB2YWx1ZXMgYXJlIHJldHVybmVkCi0gICAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIGVudW1lcmF0ZWRWYWx1ZXNGb3JUeXBlLmxlbmd0aCk7Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0R2xvYmFsRWxlbWVudERvY3VtZW50YXRpb24oKQotICB7Ci0gICAgLy8gU2VlIGJ1ZyAxNTcyNTQKLQotCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoIm9yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cyIpOwotCVVSTCB1cmwgPSBidW5kbGUuZ2V0RW50cnkoIi90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvZG9jdW1lbnRhdGlvbi9nbG9iYWxyZWZ0ZXN0LnhzZCIpOwotICAgIAotCUNNRG9jdW1lbnQgZG9jdW1lbnQgPSBYU0RJbXBsLmJ1aWxkQ01Eb2N1bWVudCh1cmwudG9FeHRlcm5hbEZvcm0oKSk7Ci0JYXNzZXJ0Tm90TnVsbCgiQ29udGVudCBtb2RlbCBsb2FkZWQgTnVsbCIsIGRvY3VtZW50KTsKLSAgICAKLSAgICBDTU5hbWVkTm9kZU1hcCBlbGVtZW50cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzKCk7Ci0gICAgCi0gICAgQ01FbGVtZW50RGVjbGFyYXRpb24gbm9kZSA9ICAoQ01FbGVtZW50RGVjbGFyYXRpb24pZWxlbWVudHMuZ2V0TmFtZWRJdGVtKCJyb290VGVzdCIpOwotCWFzc2VydE5vdE51bGwoIk1pc3Npbmcgcm9vdEVsZW1lbnQiLCBub2RlKTsKLQotICAgIENNRWxlbWVudERlY2xhcmF0aW9uIHRlc3RFbGVtZW50ID0gKENNRWxlbWVudERlY2xhcmF0aW9uKW5vZGUuZ2V0TG9jYWxFbGVtZW50cygpLmdldE5hbWVkSXRlbSgidGVzdCIpOwotCWFzc2VydE5vdE51bGwoIk1pc3NpbmcgdGVzdCBlbGVtZW50IiwgdGVzdEVsZW1lbnQpOwotCi0gICAgQ01Ob2RlTGlzdCBkb2N1bWVudGF0aW9uID0gKENNTm9kZUxpc3QpdGVzdEVsZW1lbnQuZ2V0UHJvcGVydHkoImRvY3VtZW50YXRpb24iKTsKLSAgICBpZiAoZG9jdW1lbnRhdGlvbi5nZXRMZW5ndGgoKSA9PSAwKSB7Ci0gICAgCWZhaWwoInRlc3QgZ2xvYmFsIGVsZW1lbnQgbWlzc2luZyBkb2N1bWVudGF0aW9uLiIpOwotICAgIH0KLSAgICBmb3IgKGludCBjbnQgPSAwOyBjbnQgPCBkb2N1bWVudGF0aW9uLmdldExlbmd0aCgpOyBjbnQrKykgewotICAgIAlEb2N1bWVudGF0aW9uSW1wbCBkb2MgPSAoRG9jdW1lbnRhdGlvbkltcGwpIGRvY3VtZW50YXRpb24uaXRlbShjbnQpOwotICAgIAlhc3NlcnRFcXVhbHMoIlRlc3QgZ2xvYmFsIGVsZW1lbnQgbWlzc2luZyBkb2N1bWVudGF0aW9uLiIsICJUaGlzIHNvbWUgZ2xvYmFsIGRvY3VtZW50YXRpb24iLCBkb2MuZ2V0VmFsdWUoKSk7Ci0gICAgfQotICAgIAotICAgIHRlc3RFbGVtZW50ID0gKENNRWxlbWVudERlY2xhcmF0aW9uKW5vZGUuZ2V0TG9jYWxFbGVtZW50cygpLmdldE5hbWVkSXRlbSgidGVzdEVsZW1lbnQiKTsKLSAgICBkb2N1bWVudGF0aW9uID0gKENNTm9kZUxpc3QpdGVzdEVsZW1lbnQuZ2V0UHJvcGVydHkoImRvY3VtZW50YXRpb24iKTsKLSAgICBpZiAoZG9jdW1lbnRhdGlvbi5nZXRMZW5ndGgoKSA9PSAwKSB7Ci0gICAgCWZhaWwoInRlc3RFbGVtZW50IGxvY2FsIGVsZW1lbnQgbWlzc2luZyBkb2N1bWVudGF0aW9uLiIpOwotICAgIH0KLSAgICBmb3IgKGludCBjbnQgPSAwOyBjbnQgPCBkb2N1bWVudGF0aW9uLmdldExlbmd0aCgpOyBjbnQrKykgewotICAgIAlEb2N1bWVudGF0aW9uSW1wbCBkb2MgPSAoRG9jdW1lbnRhdGlvbkltcGwpIGRvY3VtZW50YXRpb24uaXRlbShjbnQpOwotICAgIAlhc3NlcnRFcXVhbHMoInRlc3RFbGVtZW50IGRvY3VtZW50YXRpb24gd3JvbmcuIiwgIlRoaXMgaXMgYW4gb3ZlcnJpZGUiLCBkb2MuZ2V0VmFsdWUoKSk7Ci0gICAgfSAgICAKLSAgfSAgCi0KLSAgcHVibGljIHZvaWQgdGVzdEdsb2JhbEF0cnJpYnV0ZURvY3VtZW50YXRpb24oKQotICB7Ci0gICAgLy8gU2VlIGJ1ZyAxNTcyNTQKLQotCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoIm9yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cyIpOwotCVVSTCB1cmwgPSBidW5kbGUuZ2V0RW50cnkoIi90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvZG9jdW1lbnRhdGlvbi9UZXN0QXR0cmlidXRlUmVmcy54c2QiKTsKLSAgICAKLQlDTURvY3VtZW50IGRvY3VtZW50ID0gWFNESW1wbC5idWlsZENNRG9jdW1lbnQodXJsLnRvRXh0ZXJuYWxGb3JtKCkpOwotCWFzc2VydE5vdE51bGwoIkNvbnRlbnQgbW9kZWwgbG9hZGVkIE51bGwiLCBkb2N1bWVudCk7Ci0gICAgCi0gICAgQ01OYW1lZE5vZGVNYXAgZWxlbWVudHMgPSBkb2N1bWVudC5nZXRFbGVtZW50cygpOwotICAgIAotICAgIENNRWxlbWVudERlY2xhcmF0aW9uIG5vZGUgPSAgKENNRWxlbWVudERlY2xhcmF0aW9uKWVsZW1lbnRzLmdldE5hbWVkSXRlbSgib2JqZWN0Iik7Ci0JYXNzZXJ0Tm90TnVsbCgiTWlzc2luZyBvYmplY3QgZWxlbWVudCIsIG5vZGUpOwotCQotCUNNTmFtZWROb2RlTWFwIGF0dHJpYnV0ZXMgPSAgbm9kZS5nZXRBdHRyaWJ1dGVzKCk7Ci0JdGVzdEdsb2JhbEF0dHIxRG9jdW1lbnRhdGlvbihhdHRyaWJ1dGVzKTsKLQl0ZXN0R2xvYmFsQXR0cjJEb2N1bWVudGF0aW9uKGF0dHJpYnV0ZXMpOwotCXRlc3RHbG9iYWxBdHRyM0RvY3VtZW50YXRpb24oYXR0cmlidXRlcyk7Ci0JdGVzdEdsb2JhbEF0dHI0RG9jdW1lbnRhdGlvbihhdHRyaWJ1dGVzKTsKLQl0ZXN0TG9jYWxBdHRyRG9jdW1lbnRhdGlvbihhdHRyaWJ1dGVzKTsKLQkKLSB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0Rm9yQnVnMTc2NDIwKCkgewotCSAgLy8gT2J0YWluIHRoZSBtb2RlbCBmcm9tIC90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvdGVzdFNjaGVtYUZvckJ1ZzE3NjQyMC54c2QKLQkgIEJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoIm9yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cyIpOwotCSAgVVJMIHVybCA9IGJ1bmRsZS5nZXRFbnRyeSgiL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy90ZXN0U2NoZW1hRm9yQnVnMTc2NDIwLnhzZCIpOwotCSAgQ01Eb2N1bWVudCBkb2N1bWVudCA9IFhTREltcGwuYnVpbGRDTURvY3VtZW50KHVybC50b0V4dGVybmFsRm9ybSgpKTsKLQkgIGFzc2VydE5vdE51bGwoIkNvbnRlbnQgbW9kZWwgbG9hZGVkIE51bGwiLCBkb2N1bWVudCk7Ci0JICAKLQkgIC8vIE9idGFpbiB0aGUgZW51bWVyYXRlZCB2YWx1ZXMgb2YgdGhlIHJvb3QgZWxlbWVudAotCSAgQ01Ob2RlIGNtTm9kZSA9IGRvY3VtZW50LmdldEVsZW1lbnRzKCkuaXRlbSgwKTsKLQkgIFN0cmluZ1tdIGVudW1lcmF0ZWRWYWx1ZXMgPSAoKENNRWxlbWVudERlY2xhcmF0aW9uKWNtTm9kZSkuZ2V0RGF0YVR5cGUoKS5nZXRFbnVtZXJhdGVkVmFsdWVzKCk7Ci0KLQkgIC8vIFZlcmlmeSB0aGF0IGFsbCAxMiBlbnVtZXJhdGVkIHZhbHVlcyBhcmUgaW5jbHVkZWQKLQkgIGFzc2VydEVxdWFscygxMiwgZW51bWVyYXRlZFZhbHVlcy5sZW5ndGgpOwotICB9Ci0gIAotCXByaXZhdGUgdm9pZCB0ZXN0TG9jYWxBdHRyRG9jdW1lbnRhdGlvbihDTU5hbWVkTm9kZU1hcCBhdHRyaWJ1dGVzKSB7Ci0JCUNNQXR0cmlidXRlRGVjbGFyYXRpb24gYXR0cmlidXRlID0gKENNQXR0cmlidXRlRGVjbGFyYXRpb24pIGF0dHJpYnV0ZXMuZ2V0TmFtZWRJdGVtKCJsb2NhbEF0dHIiKTsKLQkJYXNzZXJ0Tm90TnVsbCgiTWlzc2luZyBsb2NhbEF0dHIgYXR0cmlidXRlLiIpOwotCQkKLQkJQ01Ob2RlTGlzdCBkb2N1bWVudGF0aW9uID0gKENNTm9kZUxpc3QpYXR0cmlidXRlLmdldFByb3BlcnR5KCJkb2N1bWVudGF0aW9uIik7Ci0JCWlmIChkb2N1bWVudGF0aW9uLmdldExlbmd0aCgpID09IDApIHsKLQkJCWZhaWwoIlVuYWJsZSB0byBmaW5kIGRvY3VtZW50YXRpb24gZm9yIGxvY2FsQXR0ciIpOwotCQl9Ci0JCWFzc2VydEVxdWFscygiV3JvbmcgbnVtYmVyIG9mIGRvY3VtZW50YXRpb24gYW5ub3RhdGlvbnMuIiwgMiwgZG9jdW1lbnRhdGlvbi5nZXRMZW5ndGgoKSk7Ci0JCWFzc2VydEVxdWFscygiSW5jb3JyZWN0IGFubm90YXRpb24gZm9yIGxvY2FsQXR0cjoiLAotCQkJCQkgIlBBU1MhIE11bHRpcGxlIGRvY3VtZW50YXRpb24gZWxlbWVudHMgZm9yIGxvY2FsIGF0dHJpYnV0ZSBwYXJ0IDEiLAotCQkJCQkgKChEb2N1bWVudGF0aW9uSW1wbClkb2N1bWVudGF0aW9uLml0ZW0oMCkpLmdldFZhbHVlKCkudHJpbSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJJbmNvcnJlY3QgYW5ub3RhdGlvbiBmb3IgbG9jYWxBdHRyOiIsCi0JCQkJCSAiUEFTUyEgTXVsdGlwbGUgZG9jdW1lbnRhdGlvbiBlbGVtZW50cyBmb3IgbG9jYWwgYXR0cmlidXRlIHBhcnQgMiIsCi0JCQkJICAgICAoKERvY3VtZW50YXRpb25JbXBsKWRvY3VtZW50YXRpb24uaXRlbSgxKSkuZ2V0VmFsdWUoKS50cmltKCkpOwotCX0KLQotCi0JcHJpdmF0ZSB2b2lkIHRlc3RHbG9iYWxBdHRyMURvY3VtZW50YXRpb24oQ01OYW1lZE5vZGVNYXAgYXR0cmlidXRlcykgewotCQlDTUF0dHJpYnV0ZURlY2xhcmF0aW9uIGF0dHJpYnV0ZSA9IChDTUF0dHJpYnV0ZURlY2xhcmF0aW9uKSBhdHRyaWJ1dGVzLmdldE5hbWVkSXRlbSgiZ2xvYmFsQXR0cjEiKTsKLQkJYXNzZXJ0Tm90TnVsbCgiTWlzc2luZyBnbG9iYWxBdHRyMSBhdHRyaWJ1dGUuIik7Ci0JCQotCQlDTU5vZGVMaXN0IGRvY3VtZW50YXRpb24gPSAoQ01Ob2RlTGlzdClhdHRyaWJ1dGUuZ2V0UHJvcGVydHkoImRvY3VtZW50YXRpb24iKTsKLQkJaWYgKGRvY3VtZW50YXRpb24uZ2V0TGVuZ3RoKCkgPT0gMCkgewotCQkJZmFpbCgiVW5hYmxlIHRvIGZpbmQgZG9jdW1lbnRhdGlvbiBmb3IgZ2xvYmFsQXR0cjEiKTsKLQkJfQotCQlhc3NlcnRFcXVhbHMoIldyb25nIG51bWJlciBvZiBkb2N1bWVudGF0aW9uIGFubm90YXRpb25zLiIsIDIsIGRvY3VtZW50YXRpb24uZ2V0TGVuZ3RoKCkpOwotCQlhc3NlcnRFcXVhbHMoIkluY29ycmVjdCBmaXJzdCBhbm5vdGF0aW9uIGZvciBnbG9iYWxBdHRyMToiLAotCQkiUEFTUyEgRG9jdW1lbnRhdGlvbiBmb3IgYXR0cmlidXRlIHJlZiBvdmVycmlkZXMgdGhlIHJlc29sdmVkIGF0dHJpYnV0ZSByZWYgZG9jdW1lbnRhdGlvbiIsCi0JCSgoRG9jdW1lbnRhdGlvbkltcGwpZG9jdW1lbnRhdGlvbi5pdGVtKDApKS5nZXRWYWx1ZSgpLnRyaW0oKSk7Ci0JCQotCQlhc3NlcnRFcXVhbHMoIkluY29ycmVjdCBzZWNvbmQgYW5ub3RhdGlvbiBmb3IgZ2xvYmFsQXR0cjE6IiwKLQkJIlBBU1MhIE11bHRpcGxlIGRvY3VtZW50YXRpb24gZWxlbWVudHMuIiwKLQkJKChEb2N1bWVudGF0aW9uSW1wbClkb2N1bWVudGF0aW9uLml0ZW0oMSkpLmdldFZhbHVlKCkudHJpbSgpKTsKLQl9ICAKLQotCXByaXZhdGUgdm9pZCB0ZXN0R2xvYmFsQXR0cjJEb2N1bWVudGF0aW9uKENNTmFtZWROb2RlTWFwIGF0dHJpYnV0ZXMpIHsKLQkJQ01BdHRyaWJ1dGVEZWNsYXJhdGlvbiBhdHRyaWJ1dGUgPSAoQ01BdHRyaWJ1dGVEZWNsYXJhdGlvbikgYXR0cmlidXRlcy5nZXROYW1lZEl0ZW0oImdsb2JhbEF0dHIyIik7Ci0JCWFzc2VydE5vdE51bGwoIk1pc3NpbmcgZ2xvYmFsQXR0cjEgYXR0cmlidXRlLiIpOwotCQkKLQkJQ01Ob2RlTGlzdCBkb2N1bWVudGF0aW9uID0gKENNTm9kZUxpc3QpYXR0cmlidXRlLmdldFByb3BlcnR5KCJkb2N1bWVudGF0aW9uIik7Ci0JCWlmIChkb2N1bWVudGF0aW9uLmdldExlbmd0aCgpID09IDApIHsKLQkJCWZhaWwoIlVuYWJsZSB0byBmaW5kIGRvY3VtZW50YXRpb24gZm9yIGdsb2JhbEF0dHIyIik7Ci0JCX0KLQkJYXNzZXJ0RXF1YWxzKCJXcm9uZyBudW1iZXIgb2YgZG9jdW1lbnRhdGlvbiBhbm5vdGF0aW9ucy4iLCAxLCBkb2N1bWVudGF0aW9uLmdldExlbmd0aCgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJJbmNvcnJlY3QgYW5ub3RhdGlvbiBmb3IgZ2xvYmFsQXR0cjI6IiwKLQkJIlBBU1MhIERvY3VtZW50YXRpb24gZm9yIHJlc29sdmVkIGF0dHJpYnV0ZSByZWYgd2hlbiB0aGUgYXR0cmlidXRlIHJlZiBkb2VzIG5vdCBoYXZlIGRvY3VtZW50YXRpb24iLAotCQkoKERvY3VtZW50YXRpb25JbXBsKWRvY3VtZW50YXRpb24uaXRlbSgwKSkuZ2V0VmFsdWUoKS50cmltKCkpOwotCX0KLQkKLQlwcml2YXRlIHZvaWQgdGVzdEdsb2JhbEF0dHIzRG9jdW1lbnRhdGlvbihDTU5hbWVkTm9kZU1hcCBhdHRyaWJ1dGVzKSB7Ci0JCUNNQXR0cmlidXRlRGVjbGFyYXRpb24gYXR0cmlidXRlID0gKENNQXR0cmlidXRlRGVjbGFyYXRpb24pIGF0dHJpYnV0ZXMuZ2V0TmFtZWRJdGVtKCJnbG9iYWxBdHRyMyIpOwotCQlhc3NlcnROb3ROdWxsKCJNaXNzaW5nIGdsb2JhbEF0dHIxIGF0dHJpYnV0ZS4iKTsKLQkJCi0JCUNNTm9kZUxpc3QgZG9jdW1lbnRhdGlvbiA9IChDTU5vZGVMaXN0KWF0dHJpYnV0ZS5nZXRQcm9wZXJ0eSgiZG9jdW1lbnRhdGlvbiIpOwotCQlpZiAoZG9jdW1lbnRhdGlvbi5nZXRMZW5ndGgoKSA9PSAwKSB7Ci0JCQlmYWlsKCJVbmFibGUgdG8gZmluZCBkb2N1bWVudGF0aW9uIGZvciBnbG9iYWxBdHRyMyIpOwotCQl9Ci0JCWFzc2VydEVxdWFscygiV3JvbmcgbnVtYmVyIG9mIGRvY3VtZW50YXRpb24gYW5ub3RhdGlvbnMuIiwgMSwgZG9jdW1lbnRhdGlvbi5nZXRMZW5ndGgoKSk7Ci0JCWFzc2VydEVxdWFscygiSW5jb3JyZWN0IGFubm90YXRpb24gZm9yIGdsb2JhbEF0dHIzOiIsCi0JCSJQQVNTISBEb2N1bWVudGF0aW9uIGZvciByZXNvbHZlZCBhdHRyaWJ1dGUgcmVmIHdoZW4gdGhlIGF0dHJpYnV0ZSByZWYgaGFzIGFuIGFubm90YXRpb24gYnV0IGRvZXMgbm90IGhhdmUgZG9jdW1lbnRhdGlvbiIsCi0JCSgoRG9jdW1lbnRhdGlvbkltcGwpZG9jdW1lbnRhdGlvbi5pdGVtKDApKS5nZXRWYWx1ZSgpLnRyaW0oKSk7Ci0JfQotCQotCXByaXZhdGUgdm9pZCB0ZXN0R2xvYmFsQXR0cjREb2N1bWVudGF0aW9uKENNTmFtZWROb2RlTWFwIGF0dHJpYnV0ZXMpIHsKLQkJQ01BdHRyaWJ1dGVEZWNsYXJhdGlvbiBhdHRyaWJ1dGUgPSAoQ01BdHRyaWJ1dGVEZWNsYXJhdGlvbikgYXR0cmlidXRlcy5nZXROYW1lZEl0ZW0oImdsb2JhbEF0dHI0Iik7Ci0JCWFzc2VydE5vdE51bGwoIk1pc3NpbmcgZ2xvYmFsQXR0cjEgYXR0cmlidXRlLiIpOwotCQkKLQkJQ01Ob2RlTGlzdCBkb2N1bWVudGF0aW9uID0gKENNTm9kZUxpc3QpYXR0cmlidXRlLmdldFByb3BlcnR5KCJkb2N1bWVudGF0aW9uIik7Ci0JCWlmIChkb2N1bWVudGF0aW9uLmdldExlbmd0aCgpID09IDApIHsKLQkJCWZhaWwoIkRvY3VtZW50YXRpb24gZWxlbWVudCBub3QgcmV0dXJuZWQgZm9yIGdsb2JhbEF0dHI0Iik7Ci0JCX0KLQkJYXNzZXJ0TnVsbCgiZ2xvYmFsQXR0cjQgcmV0dXJuZWQgZGF0YSB3aGVuIG5vbiBleHBlY3RlZC4iLCAoKERvY3VtZW50YXRpb25JbXBsKWRvY3VtZW50YXRpb24uaXRlbSgwKSkuZ2V0VmFsdWUoKSk7Ci0JfQotCQotCQkKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvY29yZS90ZXN0cy9pbnRlcm5hbC9YU0RDb3JlVGVzdHNQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC9jb3JlL3Rlc3RzL2ludGVybmFsL1hTRENvcmVUZXN0c1BsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTc0Y2VhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC9jb3JlL3Rlc3RzL2ludGVybmFsL1hTRENvcmVUZXN0c1BsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKLQotLyoqCi0gKiBUaGUgYWN0aXZhdG9yIGNsYXNzIGNvbnRyb2xzIHRoZSBwbHVnLWluIGxpZmUgY3ljbGUKLSAqLwotcHVibGljIGNsYXNzIFhTRENvcmVUZXN0c1BsdWdpbiBleHRlbmRzIFBsdWdpbgotewotICAvLyBUaGUgcGx1Zy1pbiBJRAotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzIjsKLSAgcHJvdGVjdGVkIHN0YXRpYyBCdW5kbGUgcGx1Z2luQnVuZGxlOwotCi0gIC8vIFRoZSBzaGFyZWQgaW5zdGFuY2UKLSAgcHJpdmF0ZSBzdGF0aWMgWFNEQ29yZVRlc3RzUGx1Z2luIHBsdWdpbjsKLQotICAvKioKLSAgICogVGhlIGNvbnN0cnVjdG9yCi0gICAqLwotICBwdWJsaWMgWFNEQ29yZVRlc3RzUGx1Z2luKCkKLSAgewotICB9Ci0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKQotICAgKiAKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2lucyNzdGFydChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gICAgc3VwZXIuc3RhcnQoY29udGV4dCk7Ci0gICAgcGx1Z2luID0gdGhpczsKLSAgICBwbHVnaW5CdW5kbGUgPSBjb250ZXh0LmdldEJ1bmRsZSgpOwotICB9Ci0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKQotICAgKiAKLSAgICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luI3N0b3Aob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gICAgcGx1Z2luID0gbnVsbDsKLSAgICBwbHVnaW5CdW5kbGUgPSBudWxsOwotICAgIHN1cGVyLnN0b3AoY29udGV4dCk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlCi0gICAqIAotICAgKiBAcmV0dXJuIHRoZSBzaGFyZWQgaW5zdGFuY2UKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgWFNEQ29yZVRlc3RzUGx1Z2luIGdldERlZmF1bHQoKQotICB7Ci0gICAgcmV0dXJuIHBsdWdpbjsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgdGhlIGluc3RhbGwgVVJMIG9mIHRoaXMgcGx1Z2luLgotICAgKiAKLSAgICogQHJldHVybiB0aGUgaW5zdGFsbCB1cmwgb2YgdGhpcyBwbHVnaW4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEluc3RhbGxVUkwoKQotICB7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgcmV0dXJuIEZpbGVMb2NhdG9yLnJlc29sdmUocGx1Z2luQnVuZGxlLmdldEVudHJ5KCIvIikpLmdldEZpbGUoKTsKLSAgICB9Ci0gICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMvdGVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3OWNmODEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzL3Rlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci0KLTxwcm9qZWN0Ci0gICAgbmFtZT0idGVzdHN1aXRlIgotICAgIGRlZmF1bHQ9InJ1biIKLSAgICBiYXNlZGlyPSIuIj4KLSAgICAKLSAgICA8IS0tIFRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyBzaG91bGQgYmUgcGFzc2VkIGludG8gdGhpcyBzY3JpcHQgLS0+Ci0gICAgPCEtLSAke2VjbGlwc2UtaG9tZX0gICAtLT4KLSAgICA8IS0tICR7YnVpbGREaXJlY3Rvcnl9ICAtLT4KLSAgICA8IS0tICR7YnVpbGRMYWJlbH0gICAgICAgIC0tPgotCi0gICAgPCEtLSBzaG91bGQgYmUgbGl0dGxlIG5lZWQgdG8gY2hhbmdlIHdoYXQncyBhYm92ZSAgLS0+Ci0gICAgCi0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9InBsdWdpbi1uYW1lIgotICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJjbGFzc25hbWUiCi0gICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMuaW50ZXJuYWwuQWxsWFNEQ29yZVRlc3RzIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJ0ZXN0VHlwZSIKLSAgICAgICAgdmFsdWU9ImNvcmUtdGVzdCIgLz4KLQotICAgIDwhLS0gc2hvdWxkIGJlIGxpdHRsZSBuZWVkIHRvIGNoYW5nZSB3aGF0J3MgYmVsb3cgLS0+Ci0KLSAgICA8ZWNobyBtZXNzYWdlPSJiYXNlZGlyOiAke2Jhc2VkaXJ9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImVjbGlwc2UtaG9tZTogJHtlY2xpcHNlLWhvbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImJ1aWxkRGlyZWN0b3J5OiAke2J1aWxkRGlyZWN0b3J5fSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJwbHVnaW4tbmFtZTogJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iY2xhc3NuYW1lOiAke2NsYXNzbmFtZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0idGVzdFR5cGUgJHt0ZXN0VHlwZX0iIC8+Ci0KLQotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJsaWJyYXJ5LWZpbGUiCi0gICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMS4wL2xpYnJhcnkueG1sIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJ3b3Jrc3BhY2UiCi0gICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vanVuaXR3b3Jrc3BhY2VzLyR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICAKLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGFsbCBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBmb3IgLS0+Ci0gICAgPCEtLSBhbGwgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcnVuLiBJbml0aWFsaXphdGlvbiBmb3IgaW5kaXZpZHVhbCB0ZXN0cyAtLT4KLSAgICA8IS0tIHNob3VsZCBiZSBkb25lIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgc3VpdGUgdGFyZ2V0LiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9ImluaXQiPgotICAgICAgICA8dHN0YW1wIC8+Ci0gICAgICAgIDxkZWxldGU+Ci0gICAgICAgICAgICA8ZmlsZXNldAotICAgICAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9IgotICAgICAgICAgICAgICAgIGluY2x1ZGVzPSIke3BsdWdpbi1uYW1lfS4qeG1sIiAvPgotICAgICAgICA8L2RlbGV0ZT4KLSAgICAgICAgPCEtLSBtYWtlIGRpcmVjdG9yeSwgaW4gY2FzZSBwYXRoIGRvZXNuJ3QgZXhpc3QgeWV0IC0tPgotICAgICAgICA8bWtkaXIgZGlyPSIke3dvcmtzcGFjZX0iIC8+Ci0gICAgICAgIDwhLS0gIGJ1dCBkZWxldGUgdG8gbWFrZSBzdXJlIGZyZXNoIGNvbnRlbnRzLS0+Ci0gICAgICAgIDxkZWxldGUKLSAgICAgICAgICAgIGRpcj0iJHt3b3Jrc3BhY2V9IgotICAgICAgICAgICAgcXVpZXQ9InRydWUiIC8+Ci0KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgZGVmaW5lcyB0aGUgdGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4gLS0+Ci0gICAgPHRhcmdldCBuYW1lPSJzdWl0ZSI+Ci0KLSAgICAgICAgPGFudAotICAgICAgICAgICAgdGFyZ2V0PSIke3Rlc3RUeXBlfSIKLSAgICAgICAgICAgIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLSAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImRhdGEtZGlyIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3dvcmtzcGFjZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJwbHVnaW4tbmFtZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJjbGFzc25hbWUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7Y2xhc3NuYW1lfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9InBsdWdpbi1wYXRoIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy8ke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgPC9hbnQ+Ci0KLSAgICAgICAgPGNvcHkKLSAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIKLSAgICAgICAgICAgIGZpbGU9IiR7d29ya3NwYWNlfS8ubWV0YWRhdGEvLmxvZyIKLSAgICAgICAgICAgIHRvZmlsZT0iJHtidWlsZERpcmVjdG9yeX0vJHtidWlsZExhYmVsfS90ZXN0UmVzdWx0cy9jb25zb2xlbG9ncy8ke3BsdWdpbi1uYW1lfS5jb25zb2xlbG9nLnR4dCIgLz4KLQotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBjb2RlIHRvIGNsZWFudXAgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgYWZ0ZXIgLS0+Ci0gICAgPCEtLSBhZnRlciBhbGwgb2YgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4uIFlvdSBjYW4gdXNlIHRoaXMgdGFyZ2V0IHRvIC0tPgotICAgIDwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9ImNsZWFudXAiPgotICAgICAgICA8IS0tIHVzdWFsbHkgbm8gbmVlZCB0byBkZWxldGUgd29ya3NwYWNlIHVudGlsIG5leHQgcnVuLCBhbmQgbGVhdmluZyBpdCBhbGxvd3MgaW5zcGVjdGlvbiAtLT4KLSAgICAgICAgPCEtLSA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIgLz4gLS0+Ci0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+Ci0gICAgPCEtLSBhZnRlciBhbGwgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4gc2hvdWxkIGdvIGhlcmUuIC0tPgotICAgIDx0YXJnZXQKLSAgICAgICAgbmFtZT0icnVuIgotICAgICAgICBkZXBlbmRzPSJpbml0LHN1aXRlLGNsZWFudXAiPgotICAgICAgICA8YW50Ci0gICAgICAgICAgICB0YXJnZXQ9ImNvbGxlY3QiCi0gICAgICAgICAgICBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iCi0gICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJpbmNsdWRlcyIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0uKnhtbCIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9Im91dHB1dC1maWxlIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfS54bWwiIC8+Ci0gICAgICAgIDwvYW50PgotICAgIDwvdGFyZ2V0PgotCi08L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzL3Rlc3RyZXNvdXJjZXMvLmN2c2lnbm9yZSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy90ZXN0cmVzb3VyY2VzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiNTM1NzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzL3Rlc3RyZXNvdXJjZXMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLWdlbmVyYXRlZFJlc3VsdHMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEV2hpdGVzcGFjZS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTRFdoaXRlc3BhY2UueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYzY0OTFjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWFNEV2hpdGVzcGFjZS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0JPHhzZDplbGVtZW50IG5hbWU9InRlc3QiIHR5cGU9InhzZFRlc3QiIC8+Ci0JPCEtLSBEZWZpbmUgYSBzaW1wbGUgdHlwZSB0byB0ZXN0IHRoYXQgdGhlIGhpZXJhcmNoeSBvdmVycmlkaW5nIHdoaXRlc3BhY2UgcnVsZSBpcyBvYnNlcnZlZCAtLT4KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iQ29sbGFwc2VkU3RyaW5nIj4KLQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLQkJCTx4c2Q6d2hpdGVTcGFjZSB2YWx1ZT0iY29sbGFwc2UiIC8+Ci0JCTwveHNkOnJlc3RyaWN0aW9uPgotCTwveHNkOnNpbXBsZVR5cGU+Ci0JPCEtLSBEZWZpbmUgYSBzaW1wbGUgdHlwZSB0byB0ZXN0IHRoYXQgdGhlIHdoaXRlc3BhY2UgcnVsZSBpcyBpbmhlcml0ZWQgZnJvbSB0aGUgYW5jZXN0b3IgLS0+Ci0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik5vcm1hbGl6ZWQiPgotICAJCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOm5vcm1hbGl6ZWRTdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotICAJPC94c2Q6c2ltcGxlVHlwZT4KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9InhzZFRlc3QiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPCEtLSBXaGl0ZXNwYWNlIHNob3VsZCBiZSByZXBsYWNlZCAtLT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJzaW1wbGUtcmVwbGFjZSIgdHlwZT0ieHNkOm5vcm1hbGl6ZWRTdHJpbmciIC8+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iaW50ZWdlci1jb2xsYXBzZSIgdHlwZT0ieHNkOm5vbk5lZ2F0aXZlSW50ZWdlciIgLz4KLQkJCTwhLS0gV2hpdGVzcGFjZSBzaG91bGQgY29sbGFwc2UgLS0+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0idG9rZW4tY29sbGFwc2UiIHR5cGU9InhzZDp0b2tlbiIgLz4KLQkJCTwhLS0gV2hpdGVzcGFjZSBzaG91bGQgYmUgcHJlc2VydmVkIC0tPgotCQkJPHhzZDplbGVtZW50IG5hbWU9InN0cmluZy1wcmVzZXJ2ZSIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLQkJCTwhLS0gV2hpdGVzcGFjZSBzaG91bGQgY29sbGFwc2UgLS0+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iZHVyYXRpb24tY29sbGFwc2UiIHR5cGU9InhzZDpkdXJhdGlvbiIgLz4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJleHRlbmRlZC1jb2xsYXBzZSIgdHlwZT0iQ29sbGFwc2VkU3RyaW5nIiAvPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImV4dGVuZGVkLXJlcGxhY2UiIHR5cGU9Ik5vcm1hbGl6ZWQiIC8+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YU0lUeXBlVGVzdC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTSVR5cGVUZXN0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQzOTY0Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hTSVR5cGVUZXN0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL05ld1hNTFNjaGVtYSIKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTmV3WE1MU2NoZW1hIiBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+Ci0JPGNvbXBsZXhUeXBlIG5hbWU9InR5cGVBIj4KLQkJPGF0dHJpYnV0ZSBuYW1lPSJ0eXBlIiB1c2U9InJlcXVpcmVkIj4KLQkJCTxzaW1wbGVUeXBlPgotCQkJCTxyZXN0cmljdGlvbiBiYXNlPSJzdHJpbmciPgotCQkJCQk8ZW51bWVyYXRpb24gdmFsdWU9IlgiPjwvZW51bWVyYXRpb24+Ci0JCQkJPC9yZXN0cmljdGlvbj4KLQkJCTwvc2ltcGxlVHlwZT4KLQkJPC9hdHRyaWJ1dGU+Ci0JPC9jb21wbGV4VHlwZT4KLQk8Y29tcGxleFR5cGUgbmFtZT0idHlwZUIiPgotCTwvY29tcGxleFR5cGU+Ci0JPGNvbXBsZXhUeXBlIG5hbWU9InR5cGVDIj4KLQkJPGNvbXBsZXhDb250ZW50PgotCQkJPGV4dGVuc2lvbiBiYXNlPSJ0bnM6dHlwZUEiPgotCQkJPC9leHRlbnNpb24+Ci0JCTwvY29tcGxleENvbnRlbnQ+Ci0JPC9jb21wbGV4VHlwZT4KLQkJPGNvbXBsZXhUeXBlIG5hbWU9InR5cGVEIj4KLQkJPGNvbXBsZXhDb250ZW50PgotCQkJPGV4dGVuc2lvbiBiYXNlPSJ0bnM6dHlwZUIiPgotCQkJPC9leHRlbnNpb24+Ci0JCTwvY29tcGxleENvbnRlbnQ+Ci0JPC9jb21wbGV4VHlwZT4KLQk8ZWxlbWVudCBuYW1lPSJlbGVtZW50QSIgdHlwZT0idG5zOnR5cGVBIj48L2VsZW1lbnQ+Ci0JPGVsZW1lbnQgbmFtZT0iZWxlbWVudEIiIHR5cGU9InRuczp0eXBlQiI+PC9lbGVtZW50PgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2RvY3VtZW50YXRpb24vVGVzdEF0dHJpYnV0ZVJlZnMueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9kb2N1bWVudGF0aW9uL1Rlc3RBdHRyaWJ1dGVSZWZzLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzdjMjBhYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2RvY3VtZW50YXRpb24vVGVzdEF0dHJpYnV0ZVJlZnMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotCTx4c2Q6ZWxlbWVudCBuYW1lPSJvYmplY3QiIHR5cGU9Im9iamVjdCI+PC94c2Q6ZWxlbWVudD4KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Im9iamVjdCI+Ci0JCTx4c2Q6YXR0cmlidXRlIHJlZj0iZ2xvYmFsQXR0cjEiIHVzZT0icmVxdWlyZWQiPgotCQkJPHhzZDphbm5vdGF0aW9uPgotCQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJCQkJUEFTUyEgRG9jdW1lbnRhdGlvbiBmb3IgYXR0cmlidXRlIHJlZiBvdmVycmlkZXMgdGhlIHJlc29sdmVkIGF0dHJpYnV0ZSByZWYgZG9jdW1lbnRhdGlvbgotCQkJCTwveHNkOmRvY3VtZW50YXRpb24+Ci0JCQkJPHhzZDpkb2N1bWVudGF0aW9uPgotCQkJCQlQQVNTISBNdWx0aXBsZSBkb2N1bWVudGF0aW9uIGVsZW1lbnRzLgotCQkJCTwveHNkOmRvY3VtZW50YXRpb24+Ci0JCQk8L3hzZDphbm5vdGF0aW9uPgotCQk8L3hzZDphdHRyaWJ1dGU+Ci0JCTx4c2Q6YXR0cmlidXRlIHJlZj0iZ2xvYmFsQXR0cjIiIHVzZT0icmVxdWlyZWQiPjwveHNkOmF0dHJpYnV0ZT4KLQkJPHhzZDphdHRyaWJ1dGUgcmVmPSJnbG9iYWxBdHRyMyIgdXNlPSJyZXF1aXJlZCI+Ci0JCQk8eHNkOmFubm90YXRpb24+Ci0JCQk8L3hzZDphbm5vdGF0aW9uPgotCQk8L3hzZDphdHRyaWJ1dGU+Ci0JCTx4c2Q6YXR0cmlidXRlIHJlZj0iZ2xvYmFsQXR0cjQiIHVzZT0icmVxdWlyZWQiPgotCQkJPHhzZDphbm5vdGF0aW9uPgotCQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj48L3hzZDpkb2N1bWVudGF0aW9uPgotCQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJPC94c2Q6YXR0cmlidXRlPgotCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJsb2NhbEF0dHIiIHR5cGU9InhzZDpzdHJpbmciPgotCQkJPHhzZDphbm5vdGF0aW9uPgotCQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJICAgICAgIFBBU1MhIE11bHRpcGxlIGRvY3VtZW50YXRpb24gZWxlbWVudHMgZm9yIGxvY2FsIGF0dHJpYnV0ZSBwYXJ0IDEKLQkJICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0JCQkJPHhzZDpkb2N1bWVudGF0aW9uPgotCQkgICAgICAgUEFTUyEgTXVsdGlwbGUgZG9jdW1lbnRhdGlvbiBlbGVtZW50cyBmb3IgbG9jYWwgYXR0cmlidXRlIHBhcnQgMgotCQkgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJCTwveHNkOmFubm90YXRpb24+Ci0JCTwveHNkOmF0dHJpYnV0ZT4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJnbG9iYWxBdHRyMSI+Ci0JCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJCQlGQUlMRUQhIERvY3VtZW50YXRpb24gZm9yIHJlc29sdmVkIGF0dHJpYnV0ZSByZWYuICBJZiB0aGlzIGRvYyBzaG93cywgaXQncyBhIGJ1Zy4KLQkJCTwveHNkOmRvY3VtZW50YXRpb24+Ci0JCTwveHNkOmFubm90YXRpb24+Ci0JCTx4c2Q6c2ltcGxlVHlwZT4KLQkJCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0JCQkJPHhzZDpwYXR0ZXJuIHZhbHVlPSJbYS16QS1aMC05X10rIj48L3hzZDpwYXR0ZXJuPgotCQkJPC94c2Q6cmVzdHJpY3Rpb24+Ci0JCTwveHNkOnNpbXBsZVR5cGU+Ci0JPC94c2Q6YXR0cmlidXRlPgotCTx4c2Q6YXR0cmlidXRlIG5hbWU9Imdsb2JhbEF0dHIyIiB0eXBlPSJ4c2Q6c3RyaW5nIj4KLQkJPHhzZDphbm5vdGF0aW9uPgotCQkJPHhzZDpkb2N1bWVudGF0aW9uPgotCQkJCVBBU1MhIERvY3VtZW50YXRpb24gZm9yIHJlc29sdmVkIGF0dHJpYnV0ZSByZWYgd2hlbiB0aGUgYXR0cmlidXRlIHJlZiBkb2VzIG5vdCBoYXZlIGRvY3VtZW50YXRpb24KLQkJCTwveHNkOmRvY3VtZW50YXRpb24+Ci0JCTwveHNkOmFubm90YXRpb24+Ci0JPC94c2Q6YXR0cmlidXRlPgotCTx4c2Q6YXR0cmlidXRlIG5hbWU9Imdsb2JhbEF0dHIzIiB0eXBlPSJ4c2Q6c3RyaW5nIj4KLQkJPHhzZDphbm5vdGF0aW9uPgotCQkJPHhzZDpkb2N1bWVudGF0aW9uPgotCQkJCVBBU1MhIERvY3VtZW50YXRpb24gZm9yIHJlc29sdmVkIGF0dHJpYnV0ZSByZWYgd2hlbiB0aGUgYXR0cmlidXRlIHJlZiBoYXMgYW4gYW5ub3RhdGlvbiBidXQgZG9lcyBub3QgaGF2ZSBkb2N1bWVudGF0aW9uCi0JCQk8L3hzZDpkb2N1bWVudGF0aW9uPgotCQk8L3hzZDphbm5vdGF0aW9uPgotCTwveHNkOmF0dHJpYnV0ZT4KLQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJnbG9iYWxBdHRyNCIgdHlwZT0ieHNkOnN0cmluZyI+Ci0JCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJCQlGQUlMRUQhIERvY3VtZW50YXRpb24gZm9yIGF0dHJpYnV0ZSByZWYgaXMgZW1wdHkuICBUaGlzIGRvY3VtZW50YXRpb24gc2hvdWxkIG5vdCBkaXNwbGF5LgotCQkJPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJPC94c2Q6YW5ub3RhdGlvbj4KLQk8L3hzZDphdHRyaWJ1dGU+Ci08L3hzZDpzY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2RvY3VtZW50YXRpb24vZ2xvYmFscmVmdGVzdC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2RvY3VtZW50YXRpb24vZ2xvYmFscmVmdGVzdC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0Zjg2NzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9kb2N1bWVudGF0aW9uL2dsb2JhbHJlZnRlc3QueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRGF2aWQgQ2FydmVyIC0gU1RBUiAtIGJ1ZyAxNTcyNTQgLSBUZXN0IGZpbGUgZm9yIGRvY3VtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotIC0tPgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL2dsb2JhbHJlZnRlc3QiIHhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL2dsb2JhbHJlZnRlc3QiIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIj4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0icm9vdFRlc3QiIHR5cGU9IlRlc3RUeXBlIi8+Ci0JPHhzZDplbGVtZW50IG5hbWU9InRlc3QiIHR5cGU9InhzZDpzdHJpbmciPgotCQk8eHNkOmFubm90YXRpb24+Ci0JCQk8eHNkOmRvY3VtZW50YXRpb24+VGhpcyBzb21lIGdsb2JhbCBkb2N1bWVudGF0aW9uPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJPC94c2Q6YW5ub3RhdGlvbj4KLQk8L3hzZDplbGVtZW50PgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJ0ZXN0RWxlbWVudCIgdHlwZT0ieHNkOnN0cmluZyI+Ci0gICAgCTx4c2Q6YW5ub3RhdGlvbj4KLSAgICAJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5Tb21lIG1vcmUgdGVzdGluZzwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgCTwveHNkOmFubm90YXRpb24+Ci0gICAgPC94c2Q6ZWxlbWVudD4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IlRlc3RUeXBlIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCByZWY9InRlc3QiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSIxIi8+Ci0gICAgCQk8eHNkOmVsZW1lbnQgcmVmPSJ0ZXN0RWxlbWVudCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9IjEiPgotICAgIAkJCTx4c2Q6YW5ub3RhdGlvbj4KLSAgICAJCQkJPHhzZDpkb2N1bWVudGF0aW9uPlRoaXMgaXMgYW4gb3ZlcnJpZGU8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgIAkJCTwveHNkOmFubm90YXRpb24+Ci0gICAgCQk8L3hzZDplbGVtZW50PgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9InRlc3RBdHRyaWJ1dGUiIHR5cGU9IkF0dHJpYnV0ZVRlc3RUeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0iMSIvPgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4gIAotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iQXR0cmlidXRlVGVzdFR5cGUiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9InRlc3QyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJ0ZXN0QXQiIHR5cGU9InhzZDpzdHJpbmciPgotICAgIAkJPHhzZDphbm5vdGF0aW9uPgotICAgIAkJCTx4c2Q6YXBwaW5mby8+Ci0gICAgCQk8L3hzZDphbm5vdGF0aW9uPgotICAgIAk8L3hzZDphdHRyaWJ1dGU+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9InRlc3RBdFdpdGhEb2MiIHR5cGU9InhzZDpzdHJpbmciPgotICAgIAkJPHhzZDphbm5vdGF0aW9uPgotICAgIAkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5BdHRyaWJ1dGUgRG9jdW1lbnRhdGlvbjwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgCQk8L3hzZDphbm5vdGF0aW9uPgotICAgIAk8L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL3Rlc3RTY2hlbWFGb3JCdWcxNzY0MjAueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy90ZXN0U2NoZW1hRm9yQnVnMTc2NDIwLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGJjYWY1Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL3Rlc3RTY2hlbWFGb3JCdWcxNzY0MjAueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvdGVzdFNjaGVtYUZvckJ1ZzE3NjQyMCIKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvdGVzdFNjaGVtYUZvckJ1ZzE3NjQyMCIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+Ci0JPHNpbXBsZVR5cGUgbmFtZT0ibnVtYmVyc1R5cGUiPgotCQk8cmVzdHJpY3Rpb24gYmFzZT0ic3RyaW5nIj4KLQkJCTxlbnVtZXJhdGlvbiB2YWx1ZT0iMSIvPgotCQkJPGVudW1lcmF0aW9uIHZhbHVlPSIyIi8+Ci0JCQk8ZW51bWVyYXRpb24gdmFsdWU9IjMiLz4KLQkJCTxlbnVtZXJhdGlvbiB2YWx1ZT0iNCIvPgotCQk8L3Jlc3RyaWN0aW9uPgotCTwvc2ltcGxlVHlwZT4KLQk8c2ltcGxlVHlwZSBuYW1lPSJsZXR0ZXJzVHlwZSI+Ci0JCTxyZXN0cmljdGlvbiBiYXNlPSJzdHJpbmciPgotCQkJPGVudW1lcmF0aW9uIHZhbHVlPSJhIi8+Ci0JCQk8ZW51bWVyYXRpb24gdmFsdWU9ImIiLz4KLQkJCTxlbnVtZXJhdGlvbiB2YWx1ZT0iYyIvPgotCQkJPGVudW1lcmF0aW9uIHZhbHVlPSJkIi8+Ci0JCTwvcmVzdHJpY3Rpb24+Ci0JPC9zaW1wbGVUeXBlPgotCTxzaW1wbGVUeXBlIG5hbWU9InVuaW9uVHlwZSI+Ci0JCTx1bmlvbiBtZW1iZXJUeXBlcz0idG5zOmxldHRlcnNUeXBlIHRuczpudW1iZXJzVHlwZSB0bnM6dW5pb24yVHlwZSIgLz4KLQk8L3NpbXBsZVR5cGU+Ci0JPGVsZW1lbnQgbmFtZT0iZWxlbWVudCIgdHlwZT0idG5zOnVuaW9uVHlwZSI+PC9lbGVtZW50PgotICAgIDxzaW1wbGVUeXBlIG5hbWU9Im51bWJlcnMyVHlwZSI+Ci0gICAgCTxyZXN0cmljdGlvbiBiYXNlPSJzdHJpbmciPgotICAgIAkJPGVudW1lcmF0aW9uIHZhbHVlPSI0Ii8+Ci0gICAgCQk8ZW51bWVyYXRpb24gdmFsdWU9IjUiLz4KLSAgICAJCTxlbnVtZXJhdGlvbiB2YWx1ZT0iNiIvPgotICAgIAk8L3Jlc3RyaWN0aW9uPgotICAgIDwvc2ltcGxlVHlwZT4KLSAgICA8c2ltcGxlVHlwZSBuYW1lPSJsZXR0ZXJzMlR5cGUiPgotICAgIAk8cmVzdHJpY3Rpb24gYmFzZT0ic3RyaW5nIj4KLSAgICAJCTxlbnVtZXJhdGlvbiB2YWx1ZT0iZCIvPgotICAgIAkJPGVudW1lcmF0aW9uIHZhbHVlPSJlIi8+Ci0gICAgCQk8ZW51bWVyYXRpb24gdmFsdWU9ImYiLz4KLSAgICAJPC9yZXN0cmljdGlvbj4KLSAgICA8L3NpbXBsZVR5cGU+Ci0gICAgPHNpbXBsZVR5cGUgbmFtZT0idW5pb24yVHlwZSI+Ci0gICAgCTx1bmlvbiBtZW1iZXJUeXBlcz0idG5zOmxldHRlcnMyVHlwZSB0bnM6bnVtYmVyczJUeXBlIi8+PC9zaW1wbGVUeXBlPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0YzVlMzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOWFhMTc4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5MDBmMjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0jV2VkIEp1bCAyMyAxMToxOToxMyBFRFQgMjAwOAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm51bGxSZWZlcmVuY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yZWR1bmRhbnROdWxsQ2hlY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3RlbnRpYWxOdWxsUmVmZXJlbmNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBhcmFtZXRlckFzc2lnbm1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMYWJlbD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVySW5jbHVkZURvY0NvbW1lbnRSZWZlcmVuY2U9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbkluY2x1ZGVEb2NDb21tZW50UmVmZXJlbmNlPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJhd1R5cGVSZWZlcmVuY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJlZHVuZGFudFN1cGVyaW50ZXJmYWNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mYXRhbE9wdGlvbmFsRXJyb3I9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1kaXNhYmxlZAotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25FeGVtcHRFeGNlcHRpb25BbmRUaHJvd2FibGU9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mYWxsdGhyb3VnaENhc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YjQ0YjE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBKdWwgMjIgMTI6MTM6NTEgRURUIDIwMDgKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQudWkudGV4dC5jdXN0b21fY29kZV90ZW1wbGF0ZXM9PD94bWwgdmVyc2lvblw9IjEuMCIgZW5jb2RpbmdcPSJVVEYtOCIgc3RhbmRhbG9uZVw9Im5vIj8+PHRlbXBsYXRlcy8+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmVjOTA4NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lLjAKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMC5xdWFsaWZpZXIKLUJ1bmRsZS1DbGFzc1BhdGg6IHhzZHVpdGVzdHMuamFyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzLkFjdGl2YXRvcgotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLnVpO2J1bmRsZS12ZXJzaW9uPSJbMy40LjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWU7YnVuZGxlLXZlcnNpb249IlszLjQuMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzO2J1bmRsZS12ZXJzaW9uPSJbMy40LjAsNC4wLjApIiwKLSBvcmcuanVuaXQ7YnVuZGxlLXZlcnNpb249IlszLjguMSw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC54c2QudWk7YnVuZGxlLXZlcnNpb249IlsxLjIuMCwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLnhzZDtidW5kbGUtdmVyc2lvbj0iWzIuNC4wLDMuMC4wKSIKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNQotQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKLUJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvYWJvdXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE5OWRmMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQ1NmQ4ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1iaW4uaW5jbHVkZXMgPSBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgYnVpbGQucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICB0ZXN0cmVzb3VyY2VzLyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCi0gICAgICAgICAgICAgICB0ZXN0LnhtbCxcCi0gICAgICAgICAgICAgICB4c2R1aXRlc3RzLmphcixcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sCi1qYXJzLmNvbXBpbGUub3JkZXIgPSB4c2R1aXRlc3RzLmphcgotc291cmNlLnhzZHVpdGVzdHMuamFyID0gc3JjLwotb3V0cHV0LnhzZHVpdGVzdHMuamFyID0gYmluLwotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2JlMTY2OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBwcm9wZXJ0aWVzIGZpbGUgZm9yIG9yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMKLUJ1bmRsZS1WZW5kb3IuMCA9IEVjbGlwc2Uub3JnCi1CdW5kbGUtTmFtZS4wID0gWFNEIFVJIFRlc3RzIFBsdWctaW4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL3VpL3Rlc3RzL0FjdGl2YXRvci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC91aS90ZXN0cy9BY3RpdmF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzcwODFhYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL3VpL3Rlc3RzL0FjdGl2YXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHM7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7Ci0KLS8qKgotICogVGhlIGFjdGl2YXRvciBjbGFzcyBjb250cm9scyB0aGUgcGx1Zy1pbiBsaWZlIGN5Y2xlCi0gKi8KLXB1YmxpYyBjbGFzcyBBY3RpdmF0b3IgZXh0ZW5kcyBBYnN0cmFjdFVJUGx1Z2luCi17Ci0KLSAgLy8gVGhlIHBsdWctaW4gSUQKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMiOwotICBwcml2YXRlIHN0YXRpYyBCdW5kbGUgcGx1Z2luQnVuZGxlID0gbnVsbDsKLQotICAvLyBUaGUgc2hhcmVkIGluc3RhbmNlCi0gIHByaXZhdGUgc3RhdGljIEFjdGl2YXRvciBwbHVnaW47Ci0KLSAgLyoqCi0gICAqIFRoZSBjb25zdHJ1Y3RvcgotICAgKi8KLSAgcHVibGljIEFjdGl2YXRvcigpCi0gIHsKLSAgICBwbHVnaW4gPSB0aGlzOwotICB9Ci0KLSAgLyoKLSAgICogKG5vbi1KYXZhZG9jKQotICAgKiAKLSAgICogQHNlZQotICAgKiBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbiNzdGFydChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dAotICAgKiApCi0gICAqLwotICBwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24KLSAgewotICAgIHN1cGVyLnN0YXJ0KGNvbnRleHQpOwotICAgIHBsdWdpbiA9IHRoaXM7Ci0gICAgcGx1Z2luQnVuZGxlID0gY29udGV4dC5nZXRCdW5kbGUoKTsKLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWUKLSAgICogb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW4jc3RvcChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dAotICAgKiApCi0gICAqLwotICBwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gICAgcGx1Z2luID0gbnVsbDsKLSAgICBzdXBlci5zdG9wKGNvbnRleHQpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZQotICAgKiAKLSAgICogQHJldHVybiB0aGUgc2hhcmVkIGluc3RhbmNlCi0gICAqLwotICBwdWJsaWMgc3RhdGljIEFjdGl2YXRvciBnZXREZWZhdWx0KCkKLSAgewotICAgIHJldHVybiBwbHVnaW47Ci0gIH0KLQotICAvKioKLSAgICogR2V0IHRoZSBpbnN0YWxsIFVSTCBvZiB0aGlzIHBsdWdpbi4KLSAgICogCi0gICAqIEByZXR1cm4gdGhlIGluc3RhbGwgdXJsIG9mIHRoaXMgcGx1Z2luCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRJbnN0YWxsVVJMKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIHJldHVybiBGaWxlTG9jYXRvci5yZXNvbHZlKHBsdWdpbkJ1bmRsZS5nZXRFbnRyeSgiLyIpKS5nZXRGaWxlKCk7Ci0gICAgfQotICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC91aS90ZXN0cy9pbnRlcm5hbC9BbGxYU0RVSVRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL3VpL3Rlc3RzL2ludGVybmFsL0FsbFhTRFVJVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTEyZmI4Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL3VpL3Rlc3RzL2ludGVybmFsL0FsbFhTRFVJVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotLyoqCi0gKiBXcmFwcGVyIHRlc3Qgc3VpdGUgZm9yIGFsbCBYU0QgVUkgdGVzdHMuCi0gKi8KLXB1YmxpYyBjbGFzcyBBbGxYU0RVSVRlc3RzIGV4dGVuZHMgVGVzdFN1aXRlCi17Ci0gIC8qKgotICAgKiBDcmVhdGUgdGhpcyB0ZXN0IHN1aXRlLgotICAgKiAKLSAgICogQHJldHVybiBUaGlzIHRlc3Qgc3VpdGUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBBbGxYU0RVSVRlc3RzKCk7Ci0gIH0KLQotICAvKioKLSAgICogQ29uc3RydWN0b3IKLSAgICovCi0gIHB1YmxpYyBBbGxYU0RVSVRlc3RzKCkKLSAgewotICAgIHN1cGVyKCJBbGxYU0RVSVRlc3RzIik7Ci0gICAgLy8gWFNEIEluY2x1ZGVzIHRlc3RzCi0gICAgYWRkVGVzdChDaGFtZWxlb25JbmNsdWRlc1Rlc3Quc3VpdGUoKSk7Ci0gICAgLy8gVGVzdGluZyB1c2VkIGltcG9ydHMgYXJlbid0IHJlbW92ZWQgKGVuc3VyZSBsb2dpYyB0byBkZXRlcm1pbmUKLSAgICAvLyB3aGF0IGlzIG9yIHdoYXQgaXMgbm90IHVzZWQgaXMgY29ycmVjdCkKLSAgICBhZGRUZXN0KEltcG9ydHNUZXN0LnN1aXRlKCkpOwotICAgIC8vIFVudXNlZCBYU0QgaW1wb3J0cyB0ZXN0cwotICAgIGFkZFRlc3QoWFNEVW51c2VkVGVzdHMuc3VpdGUoKSk7Ci0gICAgLy8gWFNEIHhtbCBucyB0YWJsZSBjbGVhbnVwCi0gICAgYWRkVGVzdChYU0RYTUxOU0NsZWFudXBUZXN0cy5zdWl0ZSgpKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC91aS90ZXN0cy9pbnRlcm5hbC9CYXNlVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdWkvdGVzdHMvaW50ZXJuYWwvQmFzZVRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2MzRiM2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC91aS90ZXN0cy9pbnRlcm5hbC9CYXNlVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLlVSSTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLmltcGwuUmVzb3VyY2VTZXRJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkuaW50ZXJuYWwuY29tbW9uLnV0aWwuWFNERGlyZWN0aXZlc01hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy5BY3RpdmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QudXRpbC5YU0RSZXNvdXJjZUltcGw7Ci0KLXB1YmxpYyBjbGFzcyBCYXNlVGVzdENhc2UgZXh0ZW5kcyBUZXN0Q2FzZQotewotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fQUJTT0xVVEVfUEFUSCA9IEFjdGl2YXRvci5nZXRJbnN0YWxsVVJMKCk7Ci0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFJFU09VUkNFU19GT0xERVIgPSAidGVzdHJlc291cmNlcyI7IC8vJE5PTi1OTFMtMSQKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgVENfUk9PVF9GT0xERVIgPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArICIvIiArIFJFU09VUkNFU19GT0xERVIgKyAiL1hTRCI7IC8vJE5PTi1OTFMtMSQKLSAgcHJvdGVjdGVkIFhTRERpcmVjdGl2ZXNNYW5hZ2VyIGltcG9ydE1hbmFnZXIgPSBuZXcgWFNERGlyZWN0aXZlc01hbmFnZXIoKTsKLQotICBwdWJsaWMgQmFzZVRlc3RDYXNlKCkKLSAgewotICB9Ci0KLSAgcHVibGljIEJhc2VUZXN0Q2FzZShTdHJpbmcgbmFtZSkKLSAgewotICAgIHN1cGVyKG5hbWUpOwotICB9Ci0KLSAgcHJvdGVjdGVkIFhTRFNjaGVtYSBnZXRYU0RTY2hlbWEoU3RyaW5nIHBhdGgpCi0gIHsKLSAgICBVUkkgdXJpID0gVVJJLmNyZWF0ZUZpbGVVUkkocGF0aCk7Ci0gICAgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBuZXcgUmVzb3VyY2VTZXRJbXBsKCk7Ci0gICAgWFNEUmVzb3VyY2VJbXBsIHJlc291cmNlID0gKFhTRFJlc291cmNlSW1wbCkgcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2UodXJpLCB0cnVlKTsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gcmVzb3VyY2UuZ2V0U2NoZW1hKCk7Ci0gICAgYXNzZXJ0Tm90TnVsbChzY2hlbWEpOwotICAgIHJldHVybiBzY2hlbWE7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdWkvdGVzdHMvaW50ZXJuYWwvQ2hhbWVsZW9uSW5jbHVkZXNUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL3VpL3Rlc3RzL2ludGVybmFsL0NoYW1lbGVvbkluY2x1ZGVzVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NGQxOGY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdWkvdGVzdHMvaW50ZXJuYWwvQ2hhbWVsZW9uSW5jbHVkZXNUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotCi1wdWJsaWMgY2xhc3MgQ2hhbWVsZW9uSW5jbHVkZXNUZXN0IGV4dGVuZHMgQmFzZVRlc3RDYXNlCi17Ci0gIC8qKgotICAgKiBDcmVhdGUgYSB0ZXN0cyBzdWl0ZSBmcm9tIHRoaXMgdGVzdCBjbGFzcy4KLSAgICogCi0gICAqIEByZXR1cm4gQSB0ZXN0IHN1aXRlIGNvbnRhaW5pbmcgdGhpcyB0ZXN0IGNsYXNzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIHJldHVybiBuZXcgVGVzdFN1aXRlKENoYW1lbGVvbkluY2x1ZGVzVGVzdC5jbGFzcyk7Ci0gIH0KLSAgCi0gIHB1YmxpYyB2b2lkIHRlc3RDaGFtZWxlb25UZXN0MDAxKCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUF0dHJpYnV0ZS9Vc2VkL01haW4ueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0Q2hhbWVsZW9uVGVzdDAwMigpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlBdHRyaWJ1dGUvVW51c2VkL01haW4ueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0Q2hhbWVsZW9uVGVzdDAwMygpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlBdHRyaWJ1dGVHcm91cC9Vc2VkL01haW4ueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0Q2hhbWVsZW9uVGVzdDAwNCgpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlBdHRyaWJ1dGVHcm91cC9VbnVzZWQvTWFpbi54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAxKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RDaGFtZWxlb25UZXN0MDA1KCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1CYXNlVHlwZTEueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0Q2hhbWVsZW9uVGVzdDAwNigpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tQmFzZVR5cGUyLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdENoYW1lbGVvblRlc3QwMDcoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUJhc2VUeXBlMy54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RDaGFtZWxlb25UZXN0MDA4KCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1HbG9iYWxFbGVtZW50VHlwZS54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RDaGFtZWxlb25UZXN0MDA5KCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMS54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RDaGFtZWxlb25UZXN0MDEwKCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMi54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RDaGFtZWxlb25UZXN0MDExKCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUVsZW1lbnQvVXNlZC9NYWluLUNULnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdENoYW1lbGVvblRlc3QwMTIoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5RWxlbWVudC9Vc2VkL01haW4tR3JvdXAueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0Q2hhbWVsZW9uVGVzdDAxMygpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlHcm91cERlZmluaXRpb24vVXNlZC9NYWluLUNULnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdENoYW1lbGVvblRlc3QwMTQoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5R3JvdXBEZWZpbml0aW9uL1VzZWQvTWFpbi1Hcm91cC54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RDaGFtZWxlb25UZXN0MDE1KCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUdsb2JhbEF0dHJpYnV0ZVR5cGUueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0Q2hhbWVsZW9uVGVzdDAxNigpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1HbG9iYWxFbGVtZW50VHlwZS54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RDaGFtZWxlb25UZXN0MDE3KCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUxpc3QueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0Q2hhbWVsZW9uVGVzdDAxOCgpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1Mb2NhbEF0dHJpYnV0ZVR5cGUxLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdENoYW1lbGVvblRlc3QwMTkoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTEueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0Q2hhbWVsZW9uVGVzdDAyMCgpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMi54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RDaGFtZWxlb25UZXN0MDIxKCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLVJlc3RyaWN0aW9uLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdENoYW1lbGVvblRlc3QwMjIoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tVW5pb24xLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdENoYW1lbGVvblRlc3QwMjMoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tVW5pb24yLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdENoYW1lbGVvblRlc3QwMjQoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tVW5pb24zLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDApOwotICB9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL3VpL3Rlc3RzL2ludGVybmFsL0ltcG9ydHNUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL3VpL3Rlc3RzL2ludGVybmFsL0ltcG9ydHNUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5ZTMzYmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC91aS90ZXN0cy9pbnRlcm5hbC9JbXBvcnRzVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjI0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLQotcHVibGljIGNsYXNzIEltcG9ydHNUZXN0IGV4dGVuZHMgQmFzZVRlc3RDYXNlCi17Ci0gIC8qKgotICAgKiBDcmVhdGUgYSB0ZXN0cyBzdWl0ZSBmcm9tIHRoaXMgdGVzdCBjbGFzcy4KLSAgICogCi0gICAqIEByZXR1cm4gQSB0ZXN0IHN1aXRlIGNvbnRhaW5pbmcgdGhpcyB0ZXN0IGNsYXNzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIHJldHVybiBuZXcgVGVzdFN1aXRlKEltcG9ydHNUZXN0LmNsYXNzKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnQwMDEoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlBdHRyaWJ1dGUvVXNlZC9NYWluLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydDAwMigpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUF0dHJpYnV0ZS9VbnVzZWQvTWFpbi54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAxKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnQwMDMoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlBdHRyaWJ1dGVHcm91cC9Vc2VkL01haW4ueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0MDA0KCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5QXR0cmlidXRlR3JvdXAvVW51c2VkL01haW4ueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0MDA1KCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUJhc2VUeXBlMS54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnQwMDYoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tQmFzZVR5cGUyLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydDAwNygpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1CYXNlVHlwZTMueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0MDA4KCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUdsb2JhbEVsZW1lbnRUeXBlLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydDAwOSgpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMS54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnQwMTAoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTIueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0MDExKCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5RWxlbWVudC9Vc2VkL01haW4tQ1QueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0MDEyKCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5RWxlbWVudC9Vc2VkL01haW4tR3JvdXAueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0MDEzKCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5R3JvdXBEZWZpbml0aW9uL1VzZWQvTWFpbi1DVC54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnQwMTQoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlHcm91cERlZmluaXRpb24vVXNlZC9NYWluLUdyb3VwLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydDAxNSgpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUdsb2JhbEF0dHJpYnV0ZVR5cGUueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0MDE2KCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tR2xvYmFsRWxlbWVudFR5cGUueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0MDE3KCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tTGlzdC54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnQwMTgoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1Mb2NhbEF0dHJpYnV0ZVR5cGUxLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydDAxOSgpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUxLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydDAyMCgpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUyLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydDAyMSgpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLVJlc3RyaWN0aW9uLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydDAyMigpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLVVuaW9uMS54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnQwMjMoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1VbmlvbjIueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0MDI0KCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tVW5pb24zLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDApOwotICB9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL3VpL3Rlc3RzL2ludGVybmFsL1hTRFVudXNlZFRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL3VpL3Rlc3RzL2ludGVybmFsL1hTRFVudXNlZFRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2NDQ5NDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC91aS90ZXN0cy9pbnRlcm5hbC9YU0RVbnVzZWRUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzE0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hRGlyZWN0aXZlOwotCi1wdWJsaWMgY2xhc3MgWFNEVW51c2VkVGVzdHMgZXh0ZW5kcyBCYXNlVGVzdENhc2UKLXsKLSAgLyoqCi0gICAqIENyZWF0ZSBhIHRlc3RzIHN1aXRlIGZyb20gdGhpcyB0ZXN0IGNsYXNzLgotICAgKiAKLSAgICogQHJldHVybiBBIHRlc3Qgc3VpdGUgY29udGFpbmluZyB0aGlzIHRlc3QgY2xhc3MuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoWFNEVW51c2VkVGVzdHMuY2xhc3MpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydDAwMSgpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9TaW1wbGUvVGVzdC54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAxKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDEgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgwKTsKLSAgICBhc3NlcnRUcnVlKCJJbXBvcnQwMDEueHNkIi5lcXVhbHMoZDEuZ2V0U2NoZW1hTG9jYXRpb24oKSkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydDAwMVJlcGVhdFJlbW92YWxPbmNlKCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL1NpbXBsZS9UZXN0LnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDEpOwotICAgIFhTRFNjaGVtYURpcmVjdGl2ZSBkMSA9IChYU0RTY2hlbWFEaXJlY3RpdmUpIGxpc3QuZ2V0KDApOwotICAgIGFzc2VydFRydWUoIkltcG9ydDAwMS54c2QiLmVxdWFscyhkMS5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0gICAgCi0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydDAwMVJlcGVhdFJlbW92YWxUd2ljZSgpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9TaW1wbGUvVGVzdC54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAxKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDEgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgwKTsKLSAgICBhc3NlcnRUcnVlKCJJbXBvcnQwMDEueHNkIi5lcXVhbHMoZDEuZ2V0U2NoZW1hTG9jYXRpb24oKSkpOwotICAgIAotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLSAgICAKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotIAotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0MDAyKCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL1VudXNlZC90ZXN0L01haW4wMDEueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMSk7Ci0gICAgWFNEU2NoZW1hRGlyZWN0aXZlIGQxID0gKFhTRFNjaGVtYURpcmVjdGl2ZSkgbGlzdC5nZXQoMCk7Ci0gICAgYXNzZXJ0VHJ1ZSgiLi4vSW5jbHVkZTEueHNkIi5lcXVhbHMoZDEuZ2V0U2NoZW1hTG9jYXRpb24oKSkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydDAwMygpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9VbnVzZWQvdGVzdC9NYWluMDAyLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDEpOwotICAgIFhTRFNjaGVtYURpcmVjdGl2ZSBkMSA9IChYU0RTY2hlbWFEaXJlY3RpdmUpIGxpc3QuZ2V0KDApOwotICAgIGFzc2VydFRydWUoIi4uL0ltcG9ydDEueHNkIi5lcXVhbHMoZDEuZ2V0U2NoZW1hTG9jYXRpb24oKSkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydDAwNCgpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9VbnVzZWQvdGVzdC9NYWluMDAzLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDIpOwotICAgIFhTRFNjaGVtYURpcmVjdGl2ZSBkMSA9IChYU0RTY2hlbWFEaXJlY3RpdmUpIGxpc3QuZ2V0KDEpOwotICAgIGFzc2VydFRydWUoIi4uL0ltcG9ydDEueHNkIi5lcXVhbHMoZDEuZ2V0U2NoZW1hTG9jYXRpb24oKSkpOwotICAgIFhTRFNjaGVtYURpcmVjdGl2ZSBkMiA9IChYU0RTY2hlbWFEaXJlY3RpdmUpIGxpc3QuZ2V0KDApOwotICAgIGFzc2VydFRydWUoIi4uL0luY2x1ZGUxLnhzZCIuZXF1YWxzKGQyLmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnQwMDUoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvVW51c2VkL3Rlc3QvTWFpbjAwNC54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAyKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDEgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgxKTsKLSAgICBhc3NlcnRUcnVlKCIuLi9JbXBvcnQzLnhzZCIuZXF1YWxzKGQxLmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDIgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgwKTsKLSAgICBhc3NlcnRUcnVlKCIuLi9JbmNsdWRlMS54c2QiLmVxdWFscyhkMi5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0MDA2KCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL1VudXNlZC90ZXN0L01haW4wMDUueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gNSk7Ci0gICAgWFNEU2NoZW1hRGlyZWN0aXZlIGQxID0gKFhTRFNjaGVtYURpcmVjdGl2ZSkgbGlzdC5nZXQoMSk7Ci0gICAgYXNzZXJ0VHJ1ZSgiLi4vSW1wb3J0MS54c2QiLmVxdWFscyhkMS5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0gICAgWFNEU2NoZW1hRGlyZWN0aXZlIGQyID0gKFhTRFNjaGVtYURpcmVjdGl2ZSkgbGlzdC5nZXQoMik7Ci0gICAgYXNzZXJ0VHJ1ZSgiLi4vSW1wb3J0Mi54c2QiLmVxdWFscyhkMi5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0gICAgWFNEU2NoZW1hRGlyZWN0aXZlIGQzID0gKFhTRFNjaGVtYURpcmVjdGl2ZSkgbGlzdC5nZXQoMyk7Ci0gICAgYXNzZXJ0VHJ1ZSgiLi4vSW1wb3J0My54c2QiLmVxdWFscyhkMy5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0gICAgWFNEU2NoZW1hRGlyZWN0aXZlIGQ0ID0gKFhTRFNjaGVtYURpcmVjdGl2ZSkgbGlzdC5nZXQoNCk7Ci0gICAgYXNzZXJ0VHJ1ZSgiLi4vSW1wb3J0NC54c2QiLmVxdWFscyhkNC5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0gICAgWFNEU2NoZW1hRGlyZWN0aXZlIGQ1ID0gKFhTRFNjaGVtYURpcmVjdGl2ZSkgbGlzdC5nZXQoMCk7Ci0gICAgYXNzZXJ0VHJ1ZSgiLi4vSW5jbHVkZTEueHNkIi5lcXVhbHMoZDUuZ2V0U2NoZW1hTG9jYXRpb24oKSkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydDAwNygpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9VbnVzZWQvdGVzdC9NYWluMDA2LnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDEpOwotICAgIFhTRFNjaGVtYURpcmVjdGl2ZSBkMSA9IChYU0RTY2hlbWFEaXJlY3RpdmUpIGxpc3QuZ2V0KDApOwotICAgIGFzc2VydFRydWUoIi4uL0ltcG9ydDEueHNkIi5lcXVhbHMoZDEuZ2V0U2NoZW1hTG9jYXRpb24oKSkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydDAwOCgpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9VbnVzZWQvdGVzdC9NYWluMDA3LnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDIpOwotICAgIFhTRFNjaGVtYURpcmVjdGl2ZSBkMSA9IChYU0RTY2hlbWFEaXJlY3RpdmUpIGxpc3QuZ2V0KDApOwotICAgIGFzc2VydFRydWUoIi4uL0ltcG9ydDEueHNkIi5lcXVhbHMoZDEuZ2V0U2NoZW1hTG9jYXRpb24oKSkpOwotICAgIFhTRFNjaGVtYURpcmVjdGl2ZSBkMiA9IChYU0RTY2hlbWFEaXJlY3RpdmUpIGxpc3QuZ2V0KDEpOwotICAgIGFzc2VydFRydWUoIi4uL0luY2x1ZGUyLnhzZCIuZXF1YWxzKGQyLmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnQwMDkoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvVW51c2VkL3Rlc3QvTWFpbjAwOC54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAyKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDEgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgwKTsKLSAgICBhc3NlcnRUcnVlKCIuLi9JbXBvcnQxLnhzZCIuZXF1YWxzKGQxLmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDIgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgxKTsKLSAgICBhc3NlcnRUcnVlKCIuLi9JbmNsdWRlMi54c2QiLmVxdWFscyhkMi5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0MDEwKCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL1VudXNlZC90ZXN0L01haW4wMDkueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMSk7Ci0gICAgWFNEU2NoZW1hRGlyZWN0aXZlIGQxID0gKFhTRFNjaGVtYURpcmVjdGl2ZSkgbGlzdC5nZXQoMCk7Ci0gICAgYXNzZXJ0VHJ1ZSgiLi4vSW1wb3J0MS54c2QiLmVxdWFscyhkMS5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0MDExKCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL1VudXNlZC90ZXN0L01haW4wMDlhLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydDAxMigpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9VbnVzZWQvdGVzdC9NYWluMDA5Yi54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAyKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDEgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgwKTsKLSAgICBhc3NlcnRUcnVlKCIuLi9JbmNsdWRlMi54c2QiLmVxdWFscyhkMS5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0gICAgWFNEU2NoZW1hRGlyZWN0aXZlIGQyID0gKFhTRFNjaGVtYURpcmVjdGl2ZSkgbGlzdC5nZXQoMSk7Ci0gICAgYXNzZXJ0VHJ1ZSgiLi4vSW5jbHVkZTMueHNkIi5lcXVhbHMoZDIuZ2V0U2NoZW1hTG9jYXRpb24oKSkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydDAxMygpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9VbnVzZWQvdGVzdC9NYWluMDA5Yy54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAzKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDEgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgwKTsKLSAgICBhc3NlcnRUcnVlKCIuLi9JbmNsdWRlMS54c2QiLmVxdWFscyhkMS5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0gICAgWFNEU2NoZW1hRGlyZWN0aXZlIGQyID0gKFhTRFNjaGVtYURpcmVjdGl2ZSkgbGlzdC5nZXQoMSk7Ci0gICAgYXNzZXJ0VHJ1ZSgiLi4vSW5jbHVkZTIueHNkIi5lcXVhbHMoZDIuZ2V0U2NoZW1hTG9jYXRpb24oKSkpOwotICAgIFhTRFNjaGVtYURpcmVjdGl2ZSBkMyA9IChYU0RTY2hlbWFEaXJlY3RpdmUpIGxpc3QuZ2V0KDIpOwotICAgIGFzc2VydFRydWUoIi4uL0luY2x1ZGUzLnhzZCIuZXF1YWxzKGQzLmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnQwMTQoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvVW51c2VkL3Rlc3QvTWFpbjAwOWQueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMik7Ci0gICAgWFNEU2NoZW1hRGlyZWN0aXZlIGQxID0gKFhTRFNjaGVtYURpcmVjdGl2ZSkgbGlzdC5nZXQoMCk7Ci0gICAgYXNzZXJ0VHJ1ZSgiLi4vSW5jbHVkZTEueHNkIi5lcXVhbHMoZDEuZ2V0U2NoZW1hTG9jYXRpb24oKSkpOwotICAgIFhTRFNjaGVtYURpcmVjdGl2ZSBkMiA9IChYU0RTY2hlbWFEaXJlY3RpdmUpIGxpc3QuZ2V0KDEpOwotICAgIGFzc2VydFRydWUoIi4uL0luY2x1ZGUzLnhzZCIuZXF1YWxzKGQyLmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnQwMTUoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvVW51c2VkL3Rlc3QvTWFpbjAwOWUueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMSk7Ci0gICAgWFNEU2NoZW1hRGlyZWN0aXZlIGQxID0gKFhTRFNjaGVtYURpcmVjdGl2ZSkgbGlzdC5nZXQoMCk7Ci0gICAgYXNzZXJ0VHJ1ZSgiLi4vSW5jbHVkZTIueHNkIi5lcXVhbHMoZDEuZ2V0U2NoZW1hTG9jYXRpb24oKSkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydDAxNigpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9VbnVzZWQvdGVzdC9NYWluMDA5Zi54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSA1KTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDEgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgwKTsKLSAgICBhc3NlcnRUcnVlKCIuLi9JbmNsdWRlMS54c2QiLmVxdWFscyhkMS5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0gICAgWFNEU2NoZW1hRGlyZWN0aXZlIGQyID0gKFhTRFNjaGVtYURpcmVjdGl2ZSkgbGlzdC5nZXQoMSk7Ci0gICAgYXNzZXJ0VHJ1ZSgiLi4vQS54c2QiLmVxdWFscyhkMi5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0gICAgWFNEU2NoZW1hRGlyZWN0aXZlIGQzID0gKFhTRFNjaGVtYURpcmVjdGl2ZSkgbGlzdC5nZXQoMik7Ci0gICAgYXNzZXJ0VHJ1ZSgiLi4vSW5jbHVkZTUueHNkIi5lcXVhbHMoZDMuZ2V0U2NoZW1hTG9jYXRpb24oKSkpOwotCi0gICAgWFNEU2NoZW1hRGlyZWN0aXZlIGQ0ID0gKFhTRFNjaGVtYURpcmVjdGl2ZSkgbGlzdC5nZXQoMyk7Ci0gICAgYXNzZXJ0VHJ1ZSgiLi4vSW5jbHVkZTIueHNkIi5lcXVhbHMoZDQuZ2V0U2NoZW1hTG9jYXRpb24oKSkpOwotICAgIFhTRFNjaGVtYURpcmVjdGl2ZSBkNSA9IChYU0RTY2hlbWFEaXJlY3RpdmUpIGxpc3QuZ2V0KDQpOwotICAgIGFzc2VydFRydWUoIi4uL0luY2x1ZGUzLnhzZCIuZXF1YWxzKGQ1LmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnQwMTcoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvVW51c2VkL3Rlc3QvTWFpbjAwOWcueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMik7Ci0gICAgWFNEU2NoZW1hRGlyZWN0aXZlIGQxID0gKFhTRFNjaGVtYURpcmVjdGl2ZSkgbGlzdC5nZXQoMCk7Ci0gICAgYXNzZXJ0VHJ1ZSgiLi4vSW5jbHVkZTEueHNkIi5lcXVhbHMoZDEuZ2V0U2NoZW1hTG9jYXRpb24oKSkpOwotICAgIFhTRFNjaGVtYURpcmVjdGl2ZSBkMiA9IChYU0RTY2hlbWFEaXJlY3RpdmUpIGxpc3QuZ2V0KDEpOwotICAgIGFzc2VydFRydWUoIi4uL0luY2x1ZGUyLnhzZCIuZXF1YWxzKGQyLmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnQwMTgoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvVW51c2VkL3Rlc3QvTWFpbjAwOWgueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMyk7Ci0gICAgWFNEU2NoZW1hRGlyZWN0aXZlIGQxID0gKFhTRFNjaGVtYURpcmVjdGl2ZSkgbGlzdC5nZXQoMCk7Ci0gICAgYXNzZXJ0VHJ1ZSgiLi4vSW5jbHVkZTEueHNkIi5lcXVhbHMoZDEuZ2V0U2NoZW1hTG9jYXRpb24oKSkpOwotICAgIFhTRFNjaGVtYURpcmVjdGl2ZSBkMiA9IChYU0RTY2hlbWFEaXJlY3RpdmUpIGxpc3QuZ2V0KDEpOwotICAgIGFzc2VydFRydWUoIi4uL0luY2x1ZGU1LnhzZCIuZXF1YWxzKGQyLmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDMgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgyKTsKLSAgICBhc3NlcnRUcnVlKCIuLi9JbmNsdWRlMy54c2QiLmVxdWFscyhkMy5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0Q2lyY3VsYXJJbmNsdWRlczAwMSgpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9JbmNsdWRlcy9jaXJjdWxhci90ZXN0L01haW4wMDEueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMSk7Ci0gICAgWFNEU2NoZW1hRGlyZWN0aXZlIGQxID0gKFhTRFNjaGVtYURpcmVjdGl2ZSkgbGlzdC5nZXQoMCk7Ci0gICAgYXNzZXJ0VHJ1ZSgiLi4vSW5jbHVkZTQueHNkIi5lcXVhbHMoZDEuZ2V0U2NoZW1hTG9jYXRpb24oKSkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdENpcmN1bGFySW5jbHVkZXMwMDIoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvSW5jbHVkZXMvY2lyY3VsYXIvdGVzdC9NYWluMDAyLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDYpOwotICAgIFhTRFNjaGVtYURpcmVjdGl2ZSBkMSA9IChYU0RTY2hlbWFEaXJlY3RpdmUpIGxpc3QuZ2V0KDApOwotICAgIGFzc2VydFRydWUoIi4uL0luY2x1ZGUxLnhzZCIuZXF1YWxzKGQxLmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDIgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgxKTsKLSAgICBhc3NlcnRUcnVlKCIuLi9JbmNsdWRlMi54c2QiLmVxdWFscyhkMi5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0gICAgWFNEU2NoZW1hRGlyZWN0aXZlIGQzID0gKFhTRFNjaGVtYURpcmVjdGl2ZSkgbGlzdC5nZXQoMik7Ci0gICAgYXNzZXJ0VHJ1ZSgiLi4vSW5jbHVkZTMueHNkIi5lcXVhbHMoZDMuZ2V0U2NoZW1hTG9jYXRpb24oKSkpOwotICAgIFhTRFNjaGVtYURpcmVjdGl2ZSBkNCA9IChYU0RTY2hlbWFEaXJlY3RpdmUpIGxpc3QuZ2V0KDMpOwotICAgIGFzc2VydFRydWUoIi4uL0luY2x1ZGU0LnhzZCIuZXF1YWxzKGQ0LmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDUgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCg0KTsKLSAgICBhc3NlcnRUcnVlKCIuLi9JbmNsdWRlNS54c2QiLmVxdWFscyhkNS5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0gICAgWFNEU2NoZW1hRGlyZWN0aXZlIGQ2ID0gKFhTRFNjaGVtYURpcmVjdGl2ZSkgbGlzdC5nZXQoNSk7Ci0gICAgYXNzZXJ0VHJ1ZSgiLi4vSW5jbHVkZTYueHNkIi5lcXVhbHMoZDYuZ2V0U2NoZW1hTG9jYXRpb24oKSkpOwotCi0gIH0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdWkvdGVzdHMvaW50ZXJuYWwvWFNEWE1MTlNDbGVhbnVwVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdWkvdGVzdHMvaW50ZXJuYWwvWFNEWE1MTlNDbGVhbnVwVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjBjNDc0My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL3VpL3Rlc3RzL2ludGVybmFsL1hTRFhNTE5TQ2xlYW51cFRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyODMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci0KLXB1YmxpYyBjbGFzcyBYU0RYTUxOU0NsZWFudXBUZXN0cyBleHRlbmRzIEJhc2VUZXN0Q2FzZQotewotICAvKioKLSAgICogQ3JlYXRlIGEgdGVzdHMgc3VpdGUgZnJvbSB0aGlzIHRlc3QgY2xhc3MuCi0gICAqIAotICAgKiBAcmV0dXJuIEEgdGVzdCBzdWl0ZSBjb250YWluaW5nIHRoaXMgdGVzdCBjbGFzcy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IFRlc3RTdWl0ZShYU0RYTUxOU0NsZWFudXBUZXN0cy5jbGFzcyk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0Q2xlYW51cDAwMSgpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi94bWxuc0NsZWFudXAvdGVzdC9NYWluMDAxLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBTZXQgdW51c2VkUHJlZml4ZXMgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFByZWZpeGVzKCk7Ci0gICAgU2V0IHVzZWRQcmVmaXhlcyA9IGltcG9ydE1hbmFnZXIuZ2V0VXNlZFByZWZpeGVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlcy5zaXplKCkgPT0gMCk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuc2l6ZSgpID09IDE0KTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucyhudWxsKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczAxIikpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMwMiIpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMDMiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczA0IikpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMwNSIpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMDYiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczA3IikpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMwOCIpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMDkiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczEwIikpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMxMSIpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMTIiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInAiKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0Q2xlYW51cDAwMigpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi94bWxuc0NsZWFudXAvdGVzdC9NYWluMDAyLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBTZXQgdW51c2VkUHJlZml4ZXMgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFByZWZpeGVzKCk7Ci0gICAgU2V0IHVzZWRQcmVmaXhlcyA9IGltcG9ydE1hbmFnZXIuZ2V0VXNlZFByZWZpeGVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlcy5zaXplKCkgPT0gMSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMDUiKSk7Ci0KLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5zaXplKCkgPT0gNik7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMobnVsbCkpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMwMSIpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMDIiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczAzIikpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMwNCIpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygicCIpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RDbGVhbnVwMDAzKCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL3htbG5zQ2xlYW51cC90ZXN0L01haW4wMDMueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIFNldCB1bnVzZWRQcmVmaXhlcyA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkUHJlZml4ZXMoKTsKLSAgICBTZXQgdXNlZFByZWZpeGVzID0gaW1wb3J0TWFuYWdlci5nZXRVc2VkUHJlZml4ZXMoKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzLnNpemUoKSA9PSAwKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5zaXplKCkgPT0gMTQpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ4c2QiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczAxIikpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMwMiIpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMDMiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczA0IikpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMwNSIpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMDYiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczA3IikpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMwOCIpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMDkiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczEwIikpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMxMSIpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMTIiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInAiKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0Q2xlYW51cDAwNCgpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi94bWxuc0NsZWFudXAvdGVzdC9NYWluMDA0LnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBTZXQgdW51c2VkUHJlZml4ZXMgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFByZWZpeGVzKCk7Ci0gICAgU2V0IHVzZWRQcmVmaXhlcyA9IGltcG9ydE1hbmFnZXIuZ2V0VXNlZFByZWZpeGVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlcy5zaXplKCkgPT0gMTIpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczAyIikpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczAzIikpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczA0IikpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczA1IikpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczA2IikpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczA3IikpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczA4IikpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczA5IikpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczEwIikpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczExIikpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczEyIikpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuY29udGFpbnMobnVsbCkpOwotCi0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuc2l6ZSgpID09IDMpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ4c2QiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczAxIikpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJwIikpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdENsZWFudXAwMDUoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIveG1sbnNDbGVhbnVwL3Rlc3QvTWFpbjAwNS54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgU2V0IHVudXNlZFByZWZpeGVzID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRQcmVmaXhlcygpOwotICAgIFNldCB1c2VkUHJlZml4ZXMgPSBpbXBvcnRNYW5hZ2VyLmdldFVzZWRQcmVmaXhlcygpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuc2l6ZSgpID09IDEyKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMwMSIpKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMwMiIpKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMwMyIpKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMwNCIpKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMwNSIpKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMwNiIpKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMwNyIpKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMwOCIpKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMwOSIpKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMxMCIpKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMxMSIpKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMxMiIpKTsKLQotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLnNpemUoKSA9PSAzKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygieHNkIikpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJwIikpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKG51bGwpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RDbGVhbnVwMDA2KCkKLSAgewotICAgIC8vIE51bGwgdGFyZ2V0IG5hbWVzcGFjZSBzY2hlbWEKLQotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL3htbG5zQ2xlYW51cC90ZXN0L01haW4wMDYueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIFNldCB1bnVzZWRQcmVmaXhlcyA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkUHJlZml4ZXMoKTsKLSAgICBTZXQgdXNlZFByZWZpeGVzID0gaW1wb3J0TWFuYWdlci5nZXRVc2VkUHJlZml4ZXMoKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzLnNpemUoKSA9PSAxKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMwMSIpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5zaXplKCkgPT0gMyk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInhzZCIpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygicCIpKTsKLSAgICAvLyBUaGlzIHdhcyBhZGRlZCBzaW5jZSByZWZlcmVuY2VzIHdlcmUgbWFkZSB3aXRob3V0IGEgcHJlZml4Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMobnVsbCkpOwotCi0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0Q2xlYW51cDAwNygpCi0gIHsKLSAgICAvLyBUZXN0IFVudXNlZCBOdWxsIFByZWZpeAotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL3htbG5zQ2xlYW51cC90ZXN0L01haW4wMDcueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIFNldCB1bnVzZWRQcmVmaXhlcyA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkUHJlZml4ZXMoKTsKLSAgICBTZXQgdXNlZFByZWZpeGVzID0gaW1wb3J0TWFuYWdlci5nZXRVc2VkUHJlZml4ZXMoKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzLnNpemUoKSA9PSAxKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzLmNvbnRhaW5zKG51bGwpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5zaXplKCkgPT0gMyk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInhzZCIpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygicCIpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygidG5zIikpOwotCi0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0Q2xlYW51cDAwOCgpCi0gIHsKLSAgICAvLyBUZXN0IFVzZWQgTnVsbCBQcmVmaXgKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi94bWxuc0NsZWFudXAvdGVzdC9NYWluMDA4LnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBTZXQgdW51c2VkUHJlZml4ZXMgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFByZWZpeGVzKCk7Ci0gICAgU2V0IHVzZWRQcmVmaXhlcyA9IGltcG9ydE1hbmFnZXIuZ2V0VXNlZFByZWZpeGVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlcy5zaXplKCkgPT0gMSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlcy5jb250YWlucygicCIpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5zaXplKCkgPT0gMyk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInhzZCIpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucyhudWxsKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInRucyIpKTsKLSAgfQotCi0gIC8vIFVzaW5nIHRoZSB0ZXN0IFhTRHMgZnJvbSB0aGUgVW51c2VkIGZvbGRlcgotICBwdWJsaWMgdm9pZCB0ZXN0Q2xlYW51cDAwOSgpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9VbnVzZWQvdGVzdC9NYWluMDAxLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBTZXQgdW51c2VkUHJlZml4ZXMgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFByZWZpeGVzKCk7Ci0gICAgU2V0IHVzZWRQcmVmaXhlcyA9IGltcG9ydE1hbmFnZXIuZ2V0VXNlZFByZWZpeGVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlcy5zaXplKCkgPT0gMCk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuc2l6ZSgpID09IDIpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKG51bGwpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygidG5zIikpOwotICB9Ci0KLSAgLy8gVXNpbmcgdGhlIHRlc3QgWFNEcyBmcm9tIHRoZSBVbnVzZWQgZm9sZGVyCi0gIHB1YmxpYyB2b2lkIHRlc3RDbGVhbnVwMDEwKCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL1VudXNlZC90ZXN0L01haW4wMDIueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIFNldCB1bnVzZWRQcmVmaXhlcyA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkUHJlZml4ZXMoKTsKLSAgICBTZXQgdXNlZFByZWZpeGVzID0gaW1wb3J0TWFuYWdlci5nZXRVc2VkUHJlZml4ZXMoKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzLnNpemUoKSA9PSAxKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzLmNvbnRhaW5zKCJpbXAiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuc2l6ZSgpID09IDIpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKG51bGwpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygidG5zIikpOwotICB9Ci0KLSAgLy8gVXNpbmcgdGhlIHRlc3QgWFNEcyBmcm9tIHRoZSBVbnVzZWQgZm9sZGVyCi0gIHB1YmxpYyB2b2lkIHRlc3RDbGVhbnVwMDExKCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL1VudXNlZC90ZXN0L01haW4wMDMueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIFNldCB1bnVzZWRQcmVmaXhlcyA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkUHJlZml4ZXMoKTsKLSAgICBTZXQgdXNlZFByZWZpeGVzID0gaW1wb3J0TWFuYWdlci5nZXRVc2VkUHJlZml4ZXMoKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzLnNpemUoKSA9PSAxKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzLmNvbnRhaW5zKCJpbXAiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuc2l6ZSgpID09IDIpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKG51bGwpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygidG5zIikpOwotICB9Ci0KLSAgLy8gVXNpbmcgdGhlIHRlc3QgWFNEcyBmcm9tIHRoZSBVbnVzZWQgZm9sZGVyCi0gIHB1YmxpYyB2b2lkIHRlc3RDbGVhbnVwMDEyKCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL1VudXNlZC90ZXN0L01haW4wMDQueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIFNldCB1bnVzZWRQcmVmaXhlcyA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkUHJlZml4ZXMoKTsKLSAgICBTZXQgdXNlZFByZWZpeGVzID0gaW1wb3J0TWFuYWdlci5nZXRVc2VkUHJlZml4ZXMoKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzLnNpemUoKSA9PSAxKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzLmNvbnRhaW5zKCJpbXAiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuc2l6ZSgpID09IDIpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKG51bGwpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygidG5zIikpOwotICB9Ci0KLSAgLy8gVXNpbmcgdGhlIHRlc3QgWFNEcyBmcm9tIHRoZSBVbnVzZWQgZm9sZGVyCi0gIHB1YmxpYyB2b2lkIHRlc3RDbGVhbnVwMDEzKCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL1VudXNlZC90ZXN0L01haW4wMDUueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIFNldCB1bnVzZWRQcmVmaXhlcyA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkUHJlZml4ZXMoKTsKLSAgICBTZXQgdXNlZFByZWZpeGVzID0gaW1wb3J0TWFuYWdlci5nZXRVc2VkUHJlZml4ZXMoKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzLnNpemUoKSA9PSAyKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzLmNvbnRhaW5zKCJpbXAiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlcy5jb250YWlucygiaW1wNCIpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5zaXplKCkgPT0gMik7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMobnVsbCkpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMiKSk7Ci0gIH0KLQotICAvLyBVc2luZyB0aGUgdGVzdCBYU0RzIGZyb20gdGhlIFVudXNlZCBmb2xkZXIKLSAgcHVibGljIHZvaWQgdGVzdENsZWFudXAwMTQoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvVW51c2VkL3Rlc3QvTWFpbjAwNi54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgU2V0IHVudXNlZFByZWZpeGVzID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRQcmVmaXhlcygpOwotICAgIFNldCB1c2VkUHJlZml4ZXMgPSBpbXBvcnRNYW5hZ2VyLmdldFVzZWRQcmVmaXhlcygpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuc2l6ZSgpID09IDApOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLnNpemUoKSA9PSAzKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucyhudWxsKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInRucyIpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygicCIpKTsKLSAgfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyMjI0NzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotCi08cHJvamVjdAotICAgIG5hbWU9InRlc3RzdWl0ZSIKLSAgICBkZWZhdWx0PSJydW4iCi0gICAgYmFzZWRpcj0iLiI+Ci0gICAgCi0gICAgPCEtLSBUaGUgZm9sbG93aW5nIHByb3BlcnRpZXMgc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgotICAgIDwhLS0gJHtlY2xpcHNlLWhvbWV9ICAgLS0+Ci0gICAgPCEtLSAke2J1aWxkRGlyZWN0b3J5fSAgLS0+Ci0gICAgPCEtLSAke2J1aWxkTGFiZWx9ICAgICAgICAtLT4KLQotICAgIDwhLS0gc2hvdWxkIGJlIGxpdHRsZSBuZWVkIHRvIGNoYW5nZSB3aGF0J3MgYWJvdmUgIC0tPgotCTxwcm9wZXJ0eQotCQluYW1lPSJwbHVnaW4tbmFtZSIKLQkJdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9ImNsYXNzbmFtZSIKLSAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMuaW50ZXJuYWwuQWxsWFNEVUlUZXN0cyIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0idGVzdFR5cGUiCi0gICAgICAgIHZhbHVlPSJ1aS10ZXN0IiAvPgotCi0gICAgPCEtLSBzaG91bGQgYmUgbGl0dGxlIG5lZWQgdG8gY2hhbmdlIHdoYXQncyBiZWxvdyAtLT4KLQotICAgIDxlY2hvIG1lc3NhZ2U9ImJhc2VkaXI6ICR7YmFzZWRpcn0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iZWNsaXBzZS1ob21lOiAke2VjbGlwc2UtaG9tZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iYnVpbGREaXJlY3Rvcnk6ICR7YnVpbGREaXJlY3Rvcnl9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9InBsdWdpbi1uYW1lOiAke3BsdWdpbi1uYW1lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJjbGFzc25hbWU6ICR7Y2xhc3NuYW1lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJ0ZXN0VHlwZSAke3Rlc3RUeXBlfSIgLz4KLQotCi0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9ImxpYnJhcnktZmlsZSIKLSAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4xLjAvbGlicmFyeS54bWwiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9IndvcmtzcGFjZSIKLSAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9qdW5pdHdvcmtzcGFjZXMvJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgIAotICAgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4KLSAgICA8IS0tIGFsbCB0ZXN0cyB0aGF0IGFyZSB0byBiZSBydW4uIEluaXRpYWxpemF0aW9uIGZvciBpbmRpdmlkdWFsIHRlc3RzIC0tPgotICAgIDwhLS0gc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIC0tPgotICAgIDx0YXJnZXQgbmFtZT0iaW5pdCI+Ci0gICAgICAgIDx0c3RhbXAgLz4KLSAgICAgICAgPGRlbGV0ZT4KLSAgICAgICAgICAgIDxmaWxlc2V0Ci0gICAgICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iCi0gICAgICAgICAgICAgICAgaW5jbHVkZXM9IiR7cGx1Z2luLW5hbWV9Lip4bWwiIC8+Ci0gICAgICAgIDwvZGVsZXRlPgotICAgICAgICA8IS0tIG1ha2UgZGlyZWN0b3J5LCBpbiBjYXNlIHBhdGggZG9lc24ndCBleGlzdCB5ZXQgLS0+Ci0gICAgICAgIDxta2RpciBkaXI9IiR7d29ya3NwYWNlfSIgLz4KLSAgICAgICAgPCEtLSAgYnV0IGRlbGV0ZSB0byBtYWtlIHN1cmUgZnJlc2ggY29udGVudHMtLT4KLSAgICAgICAgPGRlbGV0ZQotICAgICAgICAgICAgZGlyPSIke3dvcmtzcGFjZX0iCi0gICAgICAgICAgICBxdWlldD0idHJ1ZSIgLz4KLQotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9InN1aXRlIj4KLQotICAgICAgICA8YW50Ci0gICAgICAgICAgICB0YXJnZXQ9IiR7dGVzdFR5cGV9IgotICAgICAgICAgICAgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iZGF0YS1kaXIiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7d29ya3NwYWNlfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9InBsdWdpbi1uYW1lIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImNsYXNzbmFtZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtjbGFzc25hbWV9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0icGx1Z2luLXBhdGgiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICA8L2FudD4KLQotICAgICAgICA8Y29weQotICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIgotICAgICAgICAgICAgZmlsZT0iJHt3b3Jrc3BhY2V9Ly5tZXRhZGF0YS8ubG9nIgotICAgICAgICAgICAgdG9maWxlPSIke2J1aWxkRGlyZWN0b3J5fS8ke2J1aWxkTGFiZWx9L3Rlc3RSZXN1bHRzL2NvbnNvbGVsb2dzLyR7cGx1Z2luLW5hbWV9LmNvbnNvbGVsb2cudHh0IiAvPgotCi0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGNvZGUgdG8gY2xlYW51cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBhZnRlciAtLT4KLSAgICA8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+Ci0gICAgPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgotICAgIDx0YXJnZXQgbmFtZT0iY2xlYW51cCI+Ci0gICAgICAgIDwhLS0gdXN1YWxseSBubyBuZWVkIHRvIGRlbGV0ZSB3b3Jrc3BhY2UgdW50aWwgbmV4dCBydW4sIGFuZCBsZWF2aW5nIGl0IGFsbG93cyBpbnNwZWN0aW9uIC0tPgotICAgICAgICA8IS0tIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIiAvPiAtLT4KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4KLSAgICA8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+Ci0gICAgPHRhcmdldAotICAgICAgICBuYW1lPSJydW4iCi0gICAgICAgIGRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+Ci0gICAgICAgIDxhbnQKLSAgICAgICAgICAgIHRhcmdldD0iY29sbGVjdCIKLSAgICAgICAgICAgIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLSAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImluY2x1ZGVzIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfS4qeG1sIiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0ib3V0cHV0LWZpbGUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIgLz4KLSAgICAgICAgPC9hbnQ+Ci0gICAgPC90YXJnZXQ+Ci0KLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL0luY2x1ZGUxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL0luY2x1ZGUxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjJiZmMyYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9JbmNsdWRlMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIAotICAgIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbXBDVDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtYXhPY2N1cnM9IjI1Ij48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQotICAgIDx4c2Q6Z3JvdXAgbmFtZT0iSW1wR3IxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Z3JvdXA+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJJbXBBdHRyMSIgdHlwZT0iSW1wU1QxIj48L3hzZDphdHRyaWJ1dGU+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZUdyb3VwIG5hbWU9IkltcEF0dHJHcjEiPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDphdHRyaWJ1dGVHcm91cD4KLQotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJJbXBFbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbXBTVDEiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW1wU1QyIj4KLSAgICAJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbXBDVDIiPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdHRyMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5QXR0cmlidXRlL1VudXNlZC9NYWluLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5QXR0cmlidXRlL1VudXNlZC9NYWluLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTkyOTI1Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUF0dHJpYnV0ZS9VbnVzZWQvTWFpbi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQk8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbkVsZW1lbnQxIiB0eXBlPSJNYWluQ1QiPjwveHNkOmVsZW1lbnQ+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVCI+Ci0JCTx4c2Q6YXR0cmlidXRlIHJlZj0iTWFpbkF0dHJpYnV0ZSI+PC94c2Q6YXR0cmlidXRlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0gICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iTWFpbkF0dHJpYnV0ZSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5QXR0cmlidXRlL1VzZWQvTWFpbi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUF0dHJpYnV0ZS9Vc2VkL01haW4ueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDE2YzMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5QXR0cmlidXRlL1VzZWQvTWFpbi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQk8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbkVsZW1lbnQxIiB0eXBlPSJNYWluQ1QiPjwveHNkOmVsZW1lbnQ+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVCI+Ci0JCTx4c2Q6YXR0cmlidXRlIHJlZj0iSW1wQXR0cjEiPjwveHNkOmF0dHJpYnV0ZT4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUF0dHJpYnV0ZUdyb3VwL1VudXNlZC9NYWluLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5QXR0cmlidXRlR3JvdXAvVW51c2VkL01haW4ueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTYyZGEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5QXR0cmlidXRlR3JvdXAvVW51c2VkL01haW4ueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0JPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtZW50MSIgdHlwZT0iTWFpbkNUIj48L3hzZDplbGVtZW50PgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QiPgotICAgICAgICA8eHNkOmF0dHJpYnV0ZUdyb3VwIHJlZj0iTWFpbkF0dHJpYnV0ZUdyb3VwMSI+PC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Ik1haW5BdHRyaWJ1dGVHcm91cDEiPgotCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdHIxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0JCTx4c2Q6YW55QXR0cmlidXRlPjwveHNkOmFueUF0dHJpYnV0ZT4KLQk8L3hzZDphdHRyaWJ1dGVHcm91cD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUF0dHJpYnV0ZUdyb3VwL1VzZWQvTWFpbi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUF0dHJpYnV0ZUdyb3VwL1VzZWQvTWFpbi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzOWQyNGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlBdHRyaWJ1dGVHcm91cC9Vc2VkL01haW4ueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0JPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtZW50MSIgdHlwZT0iTWFpbkNUIj48L3hzZDplbGVtZW50PgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QiPgotICAgICAgICA8eHNkOmF0dHJpYnV0ZUdyb3VwIHJlZj0iSW1wQXR0ckdyMSI+PC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Ik1haW5BdHRyaWJ1dGVHcm91cDEiPgotCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdHIxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0JCTx4c2Q6YW55QXR0cmlidXRlPjwveHNkOmFueUF0dHJpYnV0ZT4KLQk8L3hzZDphdHRyaWJ1dGVHcm91cD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUJhc2VUeXBlMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUJhc2VUeXBlMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzOWExYWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1CYXNlVHlwZTEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0gICAgCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QxIj4KLSAgICAJPHhzZDpjb21wbGV4Q29udGVudD4KLSAgICAJCTx4c2Q6ZXh0ZW5zaW9uIGJhc2U9Ik1haW5DVDIiPjwveHNkOmV4dGVuc2lvbj4KLSAgICAJPC94c2Q6Y29tcGxleENvbnRlbnQ+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDIiPjwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tQmFzZVR5cGUyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tQmFzZVR5cGUyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNlMjgyNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUJhc2VUeXBlMi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLSAgICAKLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDEiPgotICAgIAk8eHNkOmNvbXBsZXhDb250ZW50PgotICAgIAkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJNYWluQ1QyIj4KLSAgICAJCQk8eHNkOnNlcXVlbmNlPgotICAgIAkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIG1pbk9jY3Vycz0iMSI+Ci0gICAgCQkJCQk8eHNkOnNpbXBsZVR5cGU+Ci0gICAgCQkJCQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAJCQkJCQkJPHhzZDptaW5MZW5ndGggdmFsdWU9IjEiPjwveHNkOm1pbkxlbmd0aD4KLSAgICAJCQkJCQkJPHhzZDptYXhMZW5ndGggdmFsdWU9IjEwIj48L3hzZDptYXhMZW5ndGg+Ci0gICAgCQkJCQkJPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgCQkJCQk8L3hzZDpzaW1wbGVUeXBlPgotICAgIAkJCQk8L3hzZDplbGVtZW50PgotICAgIAkJCTwveHNkOnNlcXVlbmNlPgotICAgIAkJPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgCTwveHNkOmNvbXBsZXhDb250ZW50PgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QyIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1CYXNlVHlwZTMueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1CYXNlVHlwZTMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODc2OWZiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tQmFzZVR5cGUzLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtZW50Ij4KLSAgICAJPHhzZDpjb21wbGV4VHlwZT4KLSAgICAJCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQkJPHhzZDplbGVtZW50IG5hbWU9ImVsZW0xIj4KLSAgICAJCQkJPHhzZDpjb21wbGV4VHlwZT4KLSAgICAJCQkJCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9ImVsZW0xIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCTx4c2Q6Y29tcGxleENvbnRlbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJPHhzZDpleHRlbnNpb24gYmFzZT0iTWFpbkNUMSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCTx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQk8eHNkOmVsZW1lbnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQluYW1lPSJlbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQk8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQk8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQk8L3hzZDpleHRlbnNpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAk8L3hzZDpjb21wbGV4Q29udGVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgCQkJCQkJPC94c2Q6ZWxlbWVudD4KLSAgICAJCQkJCTwveHNkOnNlcXVlbmNlPgotICAgIAkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAJCQk8L3hzZDplbGVtZW50PgotICAgIAkJPC94c2Q6c2VxdWVuY2U+Ci0gICAgCTwveHNkOmNvbXBsZXhUeXBlPgotICAgIDwveHNkOmVsZW1lbnQ+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDEiPjwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tR2xvYmFsRWxlbWVudFR5cGUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1HbG9iYWxFbGVtZW50VHlwZS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0YTYxNjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1HbG9iYWxFbGVtZW50VHlwZS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluRWxlbWVudDEiIHR5cGU9Ik1haW5DVDEiPjwveHNkOmVsZW1lbnQ+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDEiPjwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyMGZlMmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0ibG9jYWxFbGVtMSIgdHlwZT0iTWFpbkNUMiI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDIiPjwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkN2ZlYTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6Z3JvdXAgbmFtZT0iTWFpbkdyb3VwMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0ibG9jYWxFbGVtMSIgdHlwZT0iTWFpbkNUMSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Z3JvdXA+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDEiPjwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUJhc2VUeXBlMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1CYXNlVHlwZTEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5M2U4NDIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUJhc2VUeXBlMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLSAgICAKLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDEiPgotICAgIAk8eHNkOmNvbXBsZXhDb250ZW50PgotICAgIAkJPHhzZDpleHRlbnNpb24gYmFzZT0iSW1wQ1QxIj48L3hzZDpleHRlbnNpb24+Ci0gICAgCTwveHNkOmNvbXBsZXhDb250ZW50PgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUJhc2VUeXBlMi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1CYXNlVHlwZTIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzY2QyYTFmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUJhc2VUeXBlMi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLSAgICAKLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDEiPgotICAgIAk8eHNkOmNvbXBsZXhDb250ZW50PgotICAgIAkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJJbXBDVDEiPgotICAgIAkJCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgbWluT2NjdXJzPSIxIj4KLSAgICAJCQkJCTx4c2Q6c2ltcGxlVHlwZT4KLSAgICAJCQkJCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotICAgIAkJCQkJCQk8eHNkOm1pbkxlbmd0aCB2YWx1ZT0iMSI+PC94c2Q6bWluTGVuZ3RoPgotICAgIAkJCQkJCQk8eHNkOm1heExlbmd0aCB2YWx1ZT0iMTAiPjwveHNkOm1heExlbmd0aD4KLSAgICAJCQkJCQk8L3hzZDpyZXN0cmljdGlvbj4KLSAgICAJCQkJCTwveHNkOnNpbXBsZVR5cGU+Ci0gICAgCQkJCTwveHNkOmVsZW1lbnQ+Ci0gICAgCQkJPC94c2Q6c2VxdWVuY2U+Ci0gICAgCQk8L3hzZDpyZXN0cmljdGlvbj4KLSAgICAJPC94c2Q6Y29tcGxleENvbnRlbnQ+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tQmFzZVR5cGUzLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUJhc2VUeXBlMy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4NTQ3NzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tQmFzZVR5cGUzLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtZW50Ij4KLSAgICAJPHhzZDpjb21wbGV4VHlwZT4KLSAgICAJCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQkJPHhzZDplbGVtZW50IG5hbWU9ImVsZW0xIj4KLSAgICAJCQkJPHhzZDpjb21wbGV4VHlwZT4KLSAgICAJCQkJCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9ImVsZW0xIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCTx4c2Q6Y29tcGxleENvbnRlbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJPHhzZDpleHRlbnNpb24gYmFzZT0iSW1wQ1QxIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCTx4c2Q6ZWxlbWVudAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCW5hbWU9ImVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCTwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCTwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCTwveHNkOmV4dGVuc2lvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCTwveHNkOmNvbXBsZXhDb250ZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAJCQkJCQk8L3hzZDplbGVtZW50PgotICAgIAkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0gICAgCQkJCTwveHNkOmNvbXBsZXhUeXBlPjwveHNkOmVsZW1lbnQ+Ci0gICAgCQk8L3hzZDpzZXF1ZW5jZT4KLSAgICAJPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPC94c2Q6ZWxlbWVudD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1HbG9iYWxFbGVtZW50VHlwZS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1HbG9iYWxFbGVtZW50VHlwZS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0MjI3NGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tR2xvYmFsRWxlbWVudFR5cGUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluRWxlbWVudDEiIHR5cGU9IkltcENUMSI+PC94c2Q6ZWxlbWVudD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlZDY1YmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImxvY2FsRWxlbTEiIHR5cGU9IkltcENUMSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMjJiNWFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXAxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJsb2NhbEVsZW0xIiB0eXBlPSJJbXBDVDEiPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmdyb3VwPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5RWxlbWVudC9VbnVzZWQvTWFpbi1DVC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUVsZW1lbnQvVW51c2VkL01haW4tQ1QueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZWU0ZDI3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5RWxlbWVudC9VbnVzZWQvTWFpbi1DVC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IHJlZj0iTWFpbkVsZW1lbnQxIj48L3hzZDplbGVtZW50PgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluRWxlbWVudDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlFbGVtZW50L1VudXNlZC9NYWluLUdyb3VwLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5RWxlbWVudC9VbnVzZWQvTWFpbi1Hcm91cC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0OTdiMDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlFbGVtZW50L1VudXNlZC9NYWluLUdyb3VwLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOmdyb3VwIG5hbWU9Ik1haW5Hcm91cDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImxvY2FsRWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8eHNkOmNob2ljZT4KLSAgICAJCQk8eHNkOmVsZW1lbnQgbmFtZT0ibG9jYWxFbGVtMiIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLSAgICAJCQk8eHNkOmVsZW1lbnQgcmVmPSJNYWluRWxlbWVudDEiPjwveHNkOmVsZW1lbnQ+Ci0gICAgCQk8L3hzZDpjaG9pY2U+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmdyb3VwPgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtZW50MSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUVsZW1lbnQvVXNlZC9NYWluLUNULnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5RWxlbWVudC9Vc2VkL01haW4tQ1QueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZmU0M2YxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5RWxlbWVudC9Vc2VkL01haW4tQ1QueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9IkltcEVsZW0xIj48L3hzZDplbGVtZW50PgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUVsZW1lbnQvVXNlZC9NYWluLUdyb3VwLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5RWxlbWVudC9Vc2VkL01haW4tR3JvdXAueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZjY0ODJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5RWxlbWVudC9Vc2VkL01haW4tR3JvdXAueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6Z3JvdXAgbmFtZT0iTWFpbkdyb3VwMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0ibG9jYWxFbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgIDx4c2Q6Y2hvaWNlPgotICAgIAkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJsb2NhbEVsZW0yIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotICAgIAkJCTx4c2Q6ZWxlbWVudCByZWY9IkltcEVsZW0xIj48L3hzZDplbGVtZW50PgotICAgIAkJPC94c2Q6Y2hvaWNlPgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpncm91cD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUdyb3VwRGVmaW5pdGlvbi9VbnVzZWQvTWFpbi1DVC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUdyb3VwRGVmaW5pdGlvbi9VbnVzZWQvTWFpbi1DVC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0NTVkN2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlHcm91cERlZmluaXRpb24vVW51c2VkL01haW4tQ1QueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6Z3JvdXAgcmVmPSJNYWluR3JvdXBEZWZpbml0aW9uMSI+PC94c2Q6Z3JvdXA+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXBEZWZpbml0aW9uMSI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iZ3JFbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Z3JvdXA+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlHcm91cERlZmluaXRpb24vVW51c2VkL01haW4tR3JvdXAueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlHcm91cERlZmluaXRpb24vVW51c2VkL01haW4tR3JvdXAueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZDc0OTE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5R3JvdXBEZWZpbml0aW9uL1VudXNlZC9NYWluLUdyb3VwLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLQk8eHNkOmdyb3VwIG5hbWU9Ik1haW5Hcm91cERlZmluaXRpb24xIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJnckVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpncm91cD4KLQotCTx4c2Q6Z3JvdXAgbmFtZT0iTWFpbkdyb3VwRGVmaW5pdGlvbjIiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImdyRWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmdyb3VwIHJlZj0iTWFpbkdyb3VwRGVmaW5pdGlvbjEiPjwveHNkOmdyb3VwPgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpncm91cD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUdyb3VwRGVmaW5pdGlvbi9Vc2VkL01haW4tQ1QueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlHcm91cERlZmluaXRpb24vVXNlZC9NYWluLUNULnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjMwZmE1Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUdyb3VwRGVmaW5pdGlvbi9Vc2VkL01haW4tQ1QueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6Z3JvdXAgcmVmPSJJbXBHcjEiPjwveHNkOmdyb3VwPgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotCTx4c2Q6Z3JvdXAgbmFtZT0iTWFpbkdyb3VwRGVmaW5pdGlvbjEiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImdyRWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmdyb3VwPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5R3JvdXBEZWZpbml0aW9uL1VzZWQvTWFpbi1Hcm91cC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUdyb3VwRGVmaW5pdGlvbi9Vc2VkL01haW4tR3JvdXAueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MmJhYTZhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5R3JvdXBEZWZpbml0aW9uL1VzZWQvTWFpbi1Hcm91cC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0JPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXBEZWZpbml0aW9uMSI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iZ3JFbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Z3JvdXA+Ci0KLQk8eHNkOmdyb3VwIG5hbWU9Ik1haW5Hcm91cERlZmluaXRpb24yIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJnckVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCQkJPHhzZDpncm91cCByZWY9IkltcEdyMSI+PC94c2Q6Z3JvdXA+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmdyb3VwPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1HbG9iYWxBdHRyaWJ1dGVUeXBlLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1HbG9iYWxBdHRyaWJ1dGVUeXBlLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzE1NmQ5Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tR2xvYmFsQXR0cmlidXRlVHlwZS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iTWFpbkF0dHJpYnV0ZTEiIHR5cGU9InhzZDpkYXRlIj48L3hzZDphdHRyaWJ1dGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUdsb2JhbEVsZW1lbnRUeXBlLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1HbG9iYWxFbGVtZW50VHlwZS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmYzUyNzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUdsb2JhbEVsZW1lbnRUeXBlLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbkVsZW1lbnQxIiB0eXBlPSJ4c2Q6dW5zaWduZWRCeXRlIj48L3hzZDplbGVtZW50PgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1MaXN0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1MaXN0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2I5MzE3My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tTGlzdC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0JCi0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUIj4KLSAgICAJPHhzZDpsaXN0IGl0ZW1UeXBlPSJ4c2Q6Ym9vbGVhbiI+Ci0gICAgCTwveHNkOmxpc3Q+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tTG9jYWxBdHRyaWJ1dGVUeXBlMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tTG9jYWxBdHRyaWJ1dGVUeXBlMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5MmFhNWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUxvY2FsQXR0cmlidXRlVHlwZTEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMSI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImxvY2FsQXR0cmlidXRlMSIgdHlwZT0ieHNkOnNob3J0Ij48L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhZjJhMmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJsb2NhbEVsZW0xIiB0eXBlPSJ4c2Q6bGFuZ3VhZ2UiPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjg2YWZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6Z3JvdXAgbmFtZT0iTWFpbkdyb3VwMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0ibG9jYWxFbGVtMSIgdHlwZT0ieHNkOmRvdWJsZSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Z3JvdXA+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLVJlc3RyaWN0aW9uLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1SZXN0cmljdGlvbi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiMTNmNjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLVJlc3RyaWN0aW9uLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUIj4KLSAgICAJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6dGltZSI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tVW5pb24xLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1VbmlvbjEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Mzg3ZTE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1VbmlvbjEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QiPgotICAgICAgPHhzZDp1bmlvbiBtZW1iZXJUeXBlcz0ieHNkOmJvb2xlYW4iPgotICAgICAgICAgPHhzZDpzaW1wbGVUeXBlPgotICAgICAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgICAgPHhzZDptYXhMZW5ndGggdmFsdWU9IjUiPjwveHNkOm1heExlbmd0aD4KLSAgICAgICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgICAgICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICAgIDwveHNkOnVuaW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLVVuaW9uMi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tVW5pb24yLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGUyOGQ4YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tVW5pb24yLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUIj4KLSAgICAgIDx4c2Q6dW5pb24gbWVtYmVyVHlwZXM9InhzZDpib29sZWFuIHhzZDpkYXRlIj4KLSAgICAgICAgIDx4c2Q6c2ltcGxlVHlwZT4KLSAgICAgICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0gICAgICAgICAgICAgIDx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI1Ij48L3hzZDptYXhMZW5ndGg+Ci0gICAgICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICAgICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgICA8L3hzZDp1bmlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1VbmlvbjMueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLVVuaW9uMy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlMjhkOGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLVVuaW9uMy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVCI+Ci0gICAgICA8eHNkOnVuaW9uIG1lbWJlclR5cGVzPSJ4c2Q6Ym9vbGVhbiB4c2Q6ZGF0ZSI+Ci0gICAgICAgICA8eHNkOnNpbXBsZVR5cGU+Ci0gICAgICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotICAgICAgICAgICAgICA8eHNkOm1heExlbmd0aCB2YWx1ZT0iNSI+PC94c2Q6bWF4TGVuZ3RoPgotICAgICAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgICAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgICAgPC94c2Q6dW5pb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUdsb2JhbEF0dHJpYnV0ZVR5cGUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1HbG9iYWxBdHRyaWJ1dGVUeXBlLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU3ODM5NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUdsb2JhbEF0dHJpYnV0ZVR5cGUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9Ik1haW5BdHRyaWJ1dGUxIiB0eXBlPSJJbXBTVDEiPjwveHNkOmF0dHJpYnV0ZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUdsb2JhbEVsZW1lbnRUeXBlLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tR2xvYmFsRWxlbWVudFR5cGUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNGU4NTRlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tR2xvYmFsRWxlbWVudFR5cGUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluRWxlbWVudDEiIHR5cGU9IkltcFNUMSI+PC94c2Q6ZWxlbWVudD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUxpc3QueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1MaXN0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDc4NDY1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUxpc3QueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCQotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVCI+Ci0gICAgCTx4c2Q6bGlzdCBpdGVtVHlwZT0iSW1wU1QxIj4KLSAgICAJPC94c2Q6bGlzdD4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tTG9jYWxBdHRyaWJ1dGVUeXBlMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUxvY2FsQXR0cmlidXRlVHlwZTEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMGZlOGZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tTG9jYWxBdHRyaWJ1dGVUeXBlMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QxIj4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0ibG9jYWxBdHRyaWJ1dGUxIiB0eXBlPSJJbXBTVDEiPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZGIxNjAzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImxvY2FsRWxlbTEiIHR5cGU9IkltcFNUMSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2E1M2U2NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXAxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJsb2NhbEVsZW0xIiB0eXBlPSJJbXBTVDEiPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmdyb3VwPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tUmVzdHJpY3Rpb24ueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1SZXN0cmljdGlvbi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4ZjdhMTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1SZXN0cmljdGlvbi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVCI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0iSW1wU1QxIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tVW5pb24xLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tVW5pb24xLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGQ5MDRmNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLVVuaW9uMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVCI+Ci0gICAgICA8eHNkOnVuaW9uIG1lbWJlclR5cGVzPSJJbXBTVDEgeHNkOmJvb2xlYW4iPgotICAgICAgICAgPHhzZDpzaW1wbGVUeXBlPgotICAgICAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgICAgPHhzZDptYXhMZW5ndGggdmFsdWU9IjUiPjwveHNkOm1heExlbmd0aD4KLSAgICAgICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgICAgICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICAgIDwveHNkOnVuaW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1VbmlvbjIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1VbmlvbjIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOGMwYjMxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tVW5pb24yLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUIj4KLSAgICAgIDx4c2Q6dW5pb24gbWVtYmVyVHlwZXM9InhzZDpib29sZWFuIHhzZDpkYXRlIEltcFNUMSI+Ci0gICAgICAgICA8eHNkOnNpbXBsZVR5cGU+Ci0gICAgICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotICAgICAgICAgICAgICA8eHNkOm1heExlbmd0aCB2YWx1ZT0iNSI+PC94c2Q6bWF4TGVuZ3RoPgotICAgICAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgICAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgICAgPC94c2Q6dW5pb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLVVuaW9uMy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLVVuaW9uMy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxN2Y0MGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1VbmlvbjMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QiPgotICAgICAgPHhzZDp1bmlvbiBtZW1iZXJUeXBlcz0ieHNkOmJvb2xlYW4geHNkOmRhdGUiPgotICAgICAgICAgPHhzZDpzaW1wbGVUeXBlPgotICAgICAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJJbXBTVDEiPgotICAgICAgICAgICAgICA8eHNkOm1heExlbmd0aCB2YWx1ZT0iNSI+PC94c2Q6bWF4TGVuZ3RoPgotICAgICAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgICAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgICAgPC94c2Q6dW5pb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL0ltcG9ydDEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9JbXBvcnQxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjY5ZmNjZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL0ltcG9ydDEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiAKLSAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IiAKLSAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW1wQ1QxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyIgbWF4T2NjdXJzPSIyNSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0KLSAgICA8eHNkOmdyb3VwIG5hbWU9IkltcEdyMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmdyb3VwPgotCi0gICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iSW1wQXR0cjEiIHR5cGU9InRuczpJbXBTVDEiPjwveHNkOmF0dHJpYnV0ZT4KLQotICAgIDx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iSW1wQXR0ckdyMSI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0MSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9IkltcEVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkltcFNUMSI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbXBTVDIiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkltcENUMiI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0dHIxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUF0dHJpYnV0ZS9VbnVzZWQvTWFpbi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5QXR0cmlidXRlL1VudXNlZC9NYWluLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2FhYmQxYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5QXR0cmlidXRlL1VudXNlZC9NYWluLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOmltcD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwveHNkOmltcG9ydD4KLQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluRWxlbWVudDEiIHR5cGU9Ik1haW5DVCI+PC94c2Q6ZWxlbWVudD4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUIj4KLQkJPHhzZDphdHRyaWJ1dGUgcmVmPSJNYWluQXR0cmlidXRlIj48L3hzZDphdHRyaWJ1dGU+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJNYWluQXR0cmlidXRlIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUF0dHJpYnV0ZS9Vc2VkL01haW4ueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUF0dHJpYnV0ZS9Vc2VkL01haW4ueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYmY3MWM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlBdHRyaWJ1dGUvVXNlZC9NYWluLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOmltcD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwveHNkOmltcG9ydD4KLQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluRWxlbWVudDEiIHR5cGU9Ik1haW5DVCI+PC94c2Q6ZWxlbWVudD4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUIj4KLQkJPHhzZDphdHRyaWJ1dGUgcmVmPSJpbXA6SW1wQXR0cjEiPjwveHNkOmF0dHJpYnV0ZT4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5QXR0cmlidXRlR3JvdXAvVW51c2VkL01haW4ueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUF0dHJpYnV0ZUdyb3VwL1VudXNlZC9NYWluLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmU2N2FkMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5QXR0cmlidXRlR3JvdXAvVW51c2VkL01haW4ueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6aW1wPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC94c2Q6aW1wb3J0PgotCi0JPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtZW50MSIgdHlwZT0iTWFpbkNUIj48L3hzZDplbGVtZW50PgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QiPgotICAgICAgICA8eHNkOmF0dHJpYnV0ZUdyb3VwIHJlZj0iTWFpbkF0dHJpYnV0ZUdyb3VwMSI+PC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Ik1haW5BdHRyaWJ1dGVHcm91cDEiPgotCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdHIxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0JCTx4c2Q6YW55QXR0cmlidXRlPjwveHNkOmFueUF0dHJpYnV0ZT4KLQk8L3hzZDphdHRyaWJ1dGVHcm91cD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5QXR0cmlidXRlR3JvdXAvVXNlZC9NYWluLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlBdHRyaWJ1dGVHcm91cC9Vc2VkL01haW4ueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjVjZmUzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlBdHRyaWJ1dGVHcm91cC9Vc2VkL01haW4ueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6aW1wPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC94c2Q6aW1wb3J0PgotCi0JPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtZW50MSIgdHlwZT0iTWFpbkNUIj48L3hzZDplbGVtZW50PgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QiPgotICAgICAgICA8eHNkOmF0dHJpYnV0ZUdyb3VwIHJlZj0iaW1wOkltcEF0dHJHcjEiPjwveHNkOmF0dHJpYnV0ZUdyb3VwPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDphdHRyaWJ1dGVHcm91cCBuYW1lPSJNYWluQXR0cmlidXRlR3JvdXAxIj4KLQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXRyMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotCQk8eHNkOmFueUF0dHJpYnV0ZT48L3hzZDphbnlBdHRyaWJ1dGU+Ci0JPC94c2Q6YXR0cmlidXRlR3JvdXA+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUJhc2VUeXBlMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tQmFzZVR5cGUxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmNlZDg1OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tQmFzZVR5cGUxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOmltcD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0gICAgCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QxIj4KLSAgICAJPHhzZDpjb21wbGV4Q29udGVudD4KLSAgICAJCTx4c2Q6ZXh0ZW5zaW9uIGJhc2U9Ik1haW5DVDIiPjwveHNkOmV4dGVuc2lvbj4KLSAgICAJPC94c2Q6Y29tcGxleENvbnRlbnQ+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDIiPjwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1CYXNlVHlwZTIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUJhc2VUeXBlMi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1MGZlOTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUJhc2VUeXBlMi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC94c2Q6aW1wb3J0PgotICAgIAotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMSI+Ci0gICAgCTx4c2Q6Y29tcGxleENvbnRlbnQ+Ci0gICAgCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9Ik1haW5DVDIiPgotICAgIAkJCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgbWluT2NjdXJzPSIxIj4KLSAgICAJCQkJCTx4c2Q6c2ltcGxlVHlwZT4KLSAgICAJCQkJCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotICAgIAkJCQkJCQk8eHNkOm1pbkxlbmd0aCB2YWx1ZT0iMSI+PC94c2Q6bWluTGVuZ3RoPgotICAgIAkJCQkJCQk8eHNkOm1heExlbmd0aCB2YWx1ZT0iMTAiPjwveHNkOm1heExlbmd0aD4KLSAgICAJCQkJCQk8L3hzZDpyZXN0cmljdGlvbj4KLSAgICAJCQkJCTwveHNkOnNpbXBsZVR5cGU+Ci0gICAgCQkJCTwveHNkOmVsZW1lbnQ+Ci0gICAgCQkJPC94c2Q6c2VxdWVuY2U+Ci0gICAgCQk8L3hzZDpyZXN0cmljdGlvbj4KLSAgICAJPC94c2Q6Y29tcGxleENvbnRlbnQ+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDIiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tQmFzZVR5cGUzLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1CYXNlVHlwZTMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZTRmMGNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1CYXNlVHlwZTMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6aW1wPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwveHNkOmltcG9ydD4KLQotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluRWxlbWVudCI+Ci0gICAgCTx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgCQk8eHNkOnNlcXVlbmNlPgotICAgIAkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlbGVtMSI+Ci0gICAgCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgCQkJCQk8eHNkOnNlcXVlbmNlPgotICAgIAkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlbGVtMSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAk8eHNkOmNvbXBsZXhDb250ZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCTx4c2Q6ZXh0ZW5zaW9uIGJhc2U9Ik1haW5DVDEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQk8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJPHhzZDplbGVtZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJbmFtZT0iZWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJPC94c2Q6ZXh0ZW5zaW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJPC94c2Q6Y29tcGxleENvbnRlbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIAkJCQkJCTwveHNkOmVsZW1lbnQ+Ci0gICAgCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLSAgICAJCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgCQkJPC94c2Q6ZWxlbWVudD4KLSAgICAJCTwveHNkOnNlcXVlbmNlPgotICAgIAk8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8L3hzZDplbGVtZW50PgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QxIj48L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tR2xvYmFsRWxlbWVudFR5cGUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUdsb2JhbEVsZW1lbnRUeXBlLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjJlYWYxYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tR2xvYmFsRWxlbWVudFR5cGUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6aW1wPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwveHNkOmltcG9ydD4KLQotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluRWxlbWVudDEiIHR5cGU9Ik1haW5DVDEiPjwveHNkOmVsZW1lbnQ+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDEiPjwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTJkZjU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC94c2Q6aW1wb3J0PgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJsb2NhbEVsZW0xIiB0eXBlPSJNYWluQ1QyIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMiI+PC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2ODg0N2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOmltcD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0KLSAgICA8eHNkOmdyb3VwIG5hbWU9Ik1haW5Hcm91cDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImxvY2FsRWxlbTEiIHR5cGU9Ik1haW5DVDEiPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmdyb3VwPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QxIj48L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUJhc2VUeXBlMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUJhc2VUeXBlMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3OGM4N2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1CYXNlVHlwZTEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6aW1wPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwveHNkOmltcG9ydD4KLSAgICAKLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDEiPgotICAgIAk8eHNkOmNvbXBsZXhDb250ZW50PgotICAgIAkJPHhzZDpleHRlbnNpb24gYmFzZT0iaW1wOkltcENUMSI+PC94c2Q6ZXh0ZW5zaW9uPgotICAgIAk8L3hzZDpjb21wbGV4Q29udGVudD4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUJhc2VUeXBlMi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUJhc2VUeXBlMi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1MmVmZDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1CYXNlVHlwZTIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6aW1wPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC94c2Q6aW1wb3J0PgotICAgIAotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUeXBlMSI+Ci0gICAgCTx4c2Q6Y29tcGxleENvbnRlbnQ+Ci0gICAgCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9ImltcDpJbXBDVDIiPgotICAgIAkJICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXR0cjEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLSAgICAJCTwveHNkOnJlc3RyaWN0aW9uPgotICAgIAk8L3hzZDpjb21wbGV4Q29udGVudD4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAKLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDIiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtYXhPY2N1cnM9IjIxIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAKLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkltcENUMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciIG1heE9jY3Vycz0iMjUiPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotCi08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1CYXNlVHlwZTMueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1CYXNlVHlwZTMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYWViMjQ5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tQmFzZVR5cGUzLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOmltcD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbkVsZW1lbnQiPgotICAgIAk8eHNkOmNvbXBsZXhUeXBlPgotICAgIAkJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCQk8eHNkOmVsZW1lbnQgbmFtZT0iZWxlbTEiPgotICAgIAkJCQk8eHNkOmNvbXBsZXhUeXBlPgotICAgIAkJCQkJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iZWxlbTEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJPHhzZDpjb21wbGV4Q29udGVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQk8eHNkOmV4dGVuc2lvbiBiYXNlPSJpbXA6SW1wQ1QxIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCTx4c2Q6ZWxlbWVudAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCW5hbWU9ImVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCTwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCTwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCTwveHNkOmV4dGVuc2lvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCTwveHNkOmNvbXBsZXhDb250ZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAJCQkJCQk8L3hzZDplbGVtZW50PgotICAgIAkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0gICAgCQkJCTwveHNkOmNvbXBsZXhUeXBlPjwveHNkOmVsZW1lbnQ+Ci0gICAgCQk8L3hzZDpzZXF1ZW5jZT4KLSAgICAJPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPC94c2Q6ZWxlbWVudD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUdsb2JhbEVsZW1lbnRUeXBlLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tR2xvYmFsRWxlbWVudFR5cGUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzBkNWRlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tR2xvYmFsRWxlbWVudFR5cGUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6aW1wPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwveHNkOmltcG9ydD4KLQotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluRWxlbWVudDEiIHR5cGU9ImltcDpJbXBDVDEiPjwveHNkOmVsZW1lbnQ+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDNjYzRlNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOmltcD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImxvY2FsRWxlbTEiIHR5cGU9ImltcDpJbXBDVDEiPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyM2QzZjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC94c2Q6aW1wb3J0PgotCi0gICAgPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXAxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJsb2NhbEVsZW0xIiB0eXBlPSJpbXA6SW1wQ1QxIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpncm91cD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5RWxlbWVudC9VbnVzZWQvTWFpbi1DVC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5RWxlbWVudC9VbnVzZWQvTWFpbi1DVC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjZWY2YjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUVsZW1lbnQvVW51c2VkL01haW4tQ1QueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6aW1wPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC94c2Q6aW1wb3J0PgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IHJlZj0iTWFpbkVsZW1lbnQxIj48L3hzZDplbGVtZW50PgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluRWxlbWVudDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUVsZW1lbnQvVW51c2VkL01haW4tR3JvdXAueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUVsZW1lbnQvVW51c2VkL01haW4tR3JvdXAueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDBmNDk3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlFbGVtZW50L1VudXNlZC9NYWluLUdyb3VwLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOmltcD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwveHNkOmltcG9ydD4KLQotICAgIDx4c2Q6Z3JvdXAgbmFtZT0iTWFpbkdyb3VwMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0ibG9jYWxFbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgIDx4c2Q6Y2hvaWNlPgotICAgIAkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJsb2NhbEVsZW0yIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotICAgIAkJCTx4c2Q6ZWxlbWVudCByZWY9Ik1haW5FbGVtZW50MSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJCTwveHNkOmNob2ljZT4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Z3JvdXA+Ci0KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbkVsZW1lbnQxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlFbGVtZW50L1VzZWQvTWFpbi1DVC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5RWxlbWVudC9Vc2VkL01haW4tQ1QueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTE2MTdmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlFbGVtZW50L1VzZWQvTWFpbi1DVC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLSAgICB4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVCI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJpbXA6SW1wRWxlbTEiPjwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlFbGVtZW50L1VzZWQvTWFpbi1Hcm91cC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5RWxlbWVudC9Vc2VkL01haW4tR3JvdXAueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NjM1NWU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlFbGVtZW50L1VzZWQvTWFpbi1Hcm91cC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0KLSAgICA8eHNkOmdyb3VwIG5hbWU9Ik1haW5Hcm91cDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImxvY2FsRWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8eHNkOmNob2ljZT4KLSAgICAJCQk8eHNkOmVsZW1lbnQgbmFtZT0ibG9jYWxFbGVtMiIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLSAgICAJCQk8eHNkOmVsZW1lbnQgcmVmPSJpbXA6SW1wRWxlbTEiPjwveHNkOmVsZW1lbnQ+Ci0gICAgCQk8L3hzZDpjaG9pY2U+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmdyb3VwPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlHcm91cERlZmluaXRpb24vVW51c2VkL01haW4tQ1QueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUdyb3VwRGVmaW5pdGlvbi9VbnVzZWQvTWFpbi1DVC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0Y2RhNmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUdyb3VwRGVmaW5pdGlvbi9VbnVzZWQvTWFpbi1DVC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVCI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmdyb3VwIHJlZj0iTWFpbkdyb3VwRGVmaW5pdGlvbjEiPjwveHNkOmdyb3VwPgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotCTx4c2Q6Z3JvdXAgbmFtZT0iTWFpbkdyb3VwRGVmaW5pdGlvbjEiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImdyRWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmdyb3VwPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlHcm91cERlZmluaXRpb24vVW51c2VkL01haW4tR3JvdXAueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUdyb3VwRGVmaW5pdGlvbi9VbnVzZWQvTWFpbi1Hcm91cC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1ZTYyYzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUdyb3VwRGVmaW5pdGlvbi9VbnVzZWQvTWFpbi1Hcm91cC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0KLQk8eHNkOmdyb3VwIG5hbWU9Ik1haW5Hcm91cERlZmluaXRpb24xIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJnckVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpncm91cD4KLQotCTx4c2Q6Z3JvdXAgbmFtZT0iTWFpbkdyb3VwRGVmaW5pdGlvbjIiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImdyRWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmdyb3VwIHJlZj0iTWFpbkdyb3VwRGVmaW5pdGlvbjEiPjwveHNkOmdyb3VwPgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpncm91cD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5R3JvdXBEZWZpbml0aW9uL1VzZWQvTWFpbi1DVC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5R3JvdXBEZWZpbml0aW9uL1VzZWQvTWFpbi1DVC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlNmY3YjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUdyb3VwRGVmaW5pdGlvbi9Vc2VkL01haW4tQ1QueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6aW1wPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC94c2Q6aW1wb3J0PgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QiPgotCQk8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDpncm91cCByZWY9ImltcDpJbXBHcjEiPjwveHNkOmdyb3VwPgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotCTx4c2Q6Z3JvdXAgbmFtZT0iTWFpbkdyb3VwRGVmaW5pdGlvbjEiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImdyRWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmdyb3VwPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlHcm91cERlZmluaXRpb24vVXNlZC9NYWluLUdyb3VwLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlHcm91cERlZmluaXRpb24vVXNlZC9NYWluLUdyb3VwLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjA4NjhmNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5R3JvdXBEZWZpbml0aW9uL1VzZWQvTWFpbi1Hcm91cC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0KLQk8eHNkOmdyb3VwIG5hbWU9Ik1haW5Hcm91cERlZmluaXRpb24xIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJnckVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpncm91cD4KLQotCTx4c2Q6Z3JvdXAgbmFtZT0iTWFpbkdyb3VwRGVmaW5pdGlvbjIiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImdyRWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmdyb3VwIHJlZj0iaW1wOkltcEdyMSI+PC94c2Q6Z3JvdXA+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmdyb3VwPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUdsb2JhbEF0dHJpYnV0ZVR5cGUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tR2xvYmFsQXR0cmlidXRlVHlwZS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjZDcwN2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tR2xvYmFsQXR0cmlidXRlVHlwZS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJNYWluQXR0cmlidXRlMSIgdHlwZT0ieHNkOmRhdGUiPjwveHNkOmF0dHJpYnV0ZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1HbG9iYWxFbGVtZW50VHlwZS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1HbG9iYWxFbGVtZW50VHlwZS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzZDQ4YmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tR2xvYmFsRWxlbWVudFR5cGUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6aW1wPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICAKLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwveHNkOmltcG9ydD4KLQotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluRWxlbWVudDEiIHR5cGU9InhzZDp1bnNpZ25lZEJ5dGUiPjwveHNkOmVsZW1lbnQ+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tTGlzdC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1MaXN0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjRjNmJmMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1MaXN0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCQotCTx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC94c2Q6aW1wb3J0PgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVCI+Ci0gICAgCTx4c2Q6bGlzdCBpdGVtVHlwZT0ieHNkOmJvb2xlYW4iPgotICAgIAk8L3hzZDpsaXN0PgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tTG9jYWxBdHRyaWJ1dGVUeXBlMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1Mb2NhbEF0dHJpYnV0ZVR5cGUxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTk2NzE1MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1Mb2NhbEF0dHJpYnV0ZVR5cGUxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOmltcD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwveHNkOmltcG9ydD4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMSI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImxvY2FsQXR0cmlidXRlMSIgdHlwZT0ieHNkOnNob3J0Ij48L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmN2UzOGYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOmltcD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgCi0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImxvY2FsRWxlbTEiIHR5cGU9InhzZDpsYW5ndWFnZSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MWIzYmMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOmltcD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgCi0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0KLSAgICA8eHNkOmdyb3VwIG5hbWU9Ik1haW5Hcm91cDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImxvY2FsRWxlbTEiIHR5cGU9InhzZDpkb3VibGUiPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmdyb3VwPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLVJlc3RyaWN0aW9uLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLVJlc3RyaWN0aW9uLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTA4NDI2Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1SZXN0cmljdGlvbi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUIj4KLSAgICAJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6dGltZSI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1VbmlvbjEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tVW5pb24xLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmFkZGQ3MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1VbmlvbjEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6aW1wPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC94c2Q6aW1wb3J0PgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVCI+Ci0gICAgICA8eHNkOnVuaW9uIG1lbWJlclR5cGVzPSJ4c2Q6Ym9vbGVhbiI+Ci0gICAgICAgICA8eHNkOnNpbXBsZVR5cGU+Ci0gICAgICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotICAgICAgICAgICAgICA8eHNkOm1heExlbmd0aCB2YWx1ZT0iNSI+PC94c2Q6bWF4TGVuZ3RoPgotICAgICAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgICAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgICAgPC94c2Q6dW5pb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1VbmlvbjIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tVW5pb24yLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTkxMTVhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1VbmlvbjIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6aW1wPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC94c2Q6aW1wb3J0PgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVCI+Ci0gICAgICA8eHNkOnVuaW9uIG1lbWJlclR5cGVzPSJ4c2Q6Ym9vbGVhbiB4c2Q6ZGF0ZSI+Ci0gICAgICAgICA8eHNkOnNpbXBsZVR5cGU+Ci0gICAgICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotICAgICAgICAgICAgICA8eHNkOm1heExlbmd0aCB2YWx1ZT0iNSI+PC94c2Q6bWF4TGVuZ3RoPgotICAgICAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgICAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgICAgPC94c2Q6dW5pb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1VbmlvbjMueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tVW5pb24zLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTkxMTVhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1VbmlvbjMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6aW1wPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC94c2Q6aW1wb3J0PgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVCI+Ci0gICAgICA8eHNkOnVuaW9uIG1lbWJlclR5cGVzPSJ4c2Q6Ym9vbGVhbiB4c2Q6ZGF0ZSI+Ci0gICAgICAgICA8eHNkOnNpbXBsZVR5cGU+Ci0gICAgICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotICAgICAgICAgICAgICA8eHNkOm1heExlbmd0aCB2YWx1ZT0iNSI+PC94c2Q6bWF4TGVuZ3RoPgotICAgICAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgICAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgICAgPC94c2Q6dW5pb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tR2xvYmFsQXR0cmlidXRlVHlwZS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tR2xvYmFsQXR0cmlidXRlVHlwZS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmOTEwY2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUdsb2JhbEF0dHJpYnV0ZVR5cGUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6aW1wPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC94c2Q6aW1wb3J0PgotCi0gICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iTWFpbkF0dHJpYnV0ZTEiIHR5cGU9ImltcDpJbXBTVDEiPjwveHNkOmF0dHJpYnV0ZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tR2xvYmFsRWxlbWVudFR5cGUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUdsb2JhbEVsZW1lbnRUeXBlLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzU4NGExOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tR2xvYmFsRWxlbWVudFR5cGUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6aW1wPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC94c2Q6aW1wb3J0PgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtZW50MSIgdHlwZT0iaW1wOkltcFNUMSI+PC94c2Q6ZWxlbWVudD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tTGlzdC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tTGlzdC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3YzQwMmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUxpc3QueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOmltcD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0JCi0JPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUIj4KLSAgICAJPHhzZDpsaXN0IGl0ZW1UeXBlPSJpbXA6SW1wU1QxIj4KLSAgICAJPC94c2Q6bGlzdD4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1Mb2NhbEF0dHJpYnV0ZVR5cGUxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1Mb2NhbEF0dHJpYnV0ZVR5cGUxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQ4NzY0OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tTG9jYWxBdHRyaWJ1dGVUeXBlMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDEiPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJsb2NhbEF0dHJpYnV0ZTEiIHR5cGU9ImltcDpJbXBTVDEiPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTRiYzQxNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6aW1wPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC94c2Q6aW1wb3J0PgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJsb2NhbEVsZW0xIiB0eXBlPSJpbXA6SW1wU1QxIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODAzYzM0YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6aW1wPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICAKLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwveHNkOmltcG9ydD4KLQotICAgIDx4c2Q6Z3JvdXAgbmFtZT0iTWFpbkdyb3VwMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0ibG9jYWxFbGVtMSIgdHlwZT0iaW1wOkltcFNUMSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Z3JvdXA+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLVJlc3RyaWN0aW9uLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1SZXN0cmljdGlvbi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwNzg0MTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLVJlc3RyaWN0aW9uLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOmltcD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwveHNkOmltcG9ydD4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9ImltcDpJbXBTVDEiPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLVVuaW9uMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tVW5pb24xLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAzOTI5OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tVW5pb24xLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOmltcD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwveHNkOmltcG9ydD4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QiPgotICAgICAgPHhzZDp1bmlvbiBtZW1iZXJUeXBlcz0iaW1wOkltcFNUMSB4c2Q6Ym9vbGVhbiI+Ci0gICAgICAgICA8eHNkOnNpbXBsZVR5cGU+Ci0gICAgICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotICAgICAgICAgICAgICA8eHNkOm1heExlbmd0aCB2YWx1ZT0iNSI+PC94c2Q6bWF4TGVuZ3RoPgotICAgICAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgICAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgICAgPC94c2Q6dW5pb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tVW5pb24yLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1VbmlvbjIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZmVmZjQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1VbmlvbjIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6aW1wPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC94c2Q6aW1wb3J0PgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVCI+Ci0gICAgICA8eHNkOnVuaW9uIG1lbWJlclR5cGVzPSJ4c2Q6Ym9vbGVhbiB4c2Q6ZGF0ZSBpbXA6SW1wU1QxIj4KLSAgICAgICAgIDx4c2Q6c2ltcGxlVHlwZT4KLSAgICAgICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0gICAgICAgICAgICAgIDx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI1Ij48L3hzZDptYXhMZW5ndGg+Ci0gICAgICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICAgICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgICA8L3hzZDp1bmlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1VbmlvbjMueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLVVuaW9uMy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3ZTIzMTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLVVuaW9uMy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUIj4KLSAgICAgIDx4c2Q6dW5pb24gbWVtYmVyVHlwZXM9InhzZDpib29sZWFuIHhzZDpkYXRlIj4KLSAgICAgICAgIDx4c2Q6c2ltcGxlVHlwZT4KLSAgICAgICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0iaW1wOkltcFNUMSI+Ci0gICAgICAgICAgICAgIDx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI1Ij48L3hzZDptYXhMZW5ndGg+Ci0gICAgICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICAgICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgICA8L3hzZDp1bmlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvSW5jbHVkZTEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9JbmNsdWRlMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhMmVlZTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9JbmNsdWRlMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIAotICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIiAKLSAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkltcENUMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciIG1heE9jY3Vycz0iMjUiPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotCi0gICAgPHhzZDpncm91cCBuYW1lPSJJbXBHcjEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpncm91cD4KLQotICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9IkltcEF0dHIxIiB0eXBlPSJ0bnM6SW1wU1QxIj48L3hzZDphdHRyaWJ1dGU+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZUdyb3VwIG5hbWU9IkltcEF0dHJHcjEiPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDphdHRyaWJ1dGVHcm91cD4KLQotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJJbXBFbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbXBTVDEiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW1wU1QyIj4KLSAgICAJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbXBDVDIiPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdHRyMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlBdHRyaWJ1dGUvVW51c2VkL01haW4ueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUF0dHJpYnV0ZS9VbnVzZWQvTWFpbi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5MjkyNWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUF0dHJpYnV0ZS9VbnVzZWQvTWFpbi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQk8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbkVsZW1lbnQxIiB0eXBlPSJNYWluQ1QiPjwveHNkOmVsZW1lbnQ+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVCI+Ci0JCTx4c2Q6YXR0cmlidXRlIHJlZj0iTWFpbkF0dHJpYnV0ZSI+PC94c2Q6YXR0cmlidXRlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0gICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iTWFpbkF0dHJpYnV0ZSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlBdHRyaWJ1dGUvVXNlZC9NYWluLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlBdHRyaWJ1dGUvVXNlZC9NYWluLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2QxNmMzMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5QXR0cmlidXRlL1VzZWQvTWFpbi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQk8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbkVsZW1lbnQxIiB0eXBlPSJNYWluQ1QiPjwveHNkOmVsZW1lbnQ+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVCI+Ci0JCTx4c2Q6YXR0cmlidXRlIHJlZj0iSW1wQXR0cjEiPjwveHNkOmF0dHJpYnV0ZT4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5QXR0cmlidXRlR3JvdXAvVW51c2VkL01haW4ueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUF0dHJpYnV0ZUdyb3VwL1VudXNlZC9NYWluLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTU2MmRhMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5QXR0cmlidXRlR3JvdXAvVW51c2VkL01haW4ueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0JPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtZW50MSIgdHlwZT0iTWFpbkNUIj48L3hzZDplbGVtZW50PgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QiPgotICAgICAgICA8eHNkOmF0dHJpYnV0ZUdyb3VwIHJlZj0iTWFpbkF0dHJpYnV0ZUdyb3VwMSI+PC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Ik1haW5BdHRyaWJ1dGVHcm91cDEiPgotCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdHIxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0JCTx4c2Q6YW55QXR0cmlidXRlPjwveHNkOmFueUF0dHJpYnV0ZT4KLQk8L3hzZDphdHRyaWJ1dGVHcm91cD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5QXR0cmlidXRlR3JvdXAvVXNlZC9NYWluLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlBdHRyaWJ1dGVHcm91cC9Vc2VkL01haW4ueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMzlkMjRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlBdHRyaWJ1dGVHcm91cC9Vc2VkL01haW4ueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0JPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtZW50MSIgdHlwZT0iTWFpbkNUIj48L3hzZDplbGVtZW50PgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QiPgotICAgICAgICA8eHNkOmF0dHJpYnV0ZUdyb3VwIHJlZj0iSW1wQXR0ckdyMSI+PC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Ik1haW5BdHRyaWJ1dGVHcm91cDEiPgotCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdHIxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0JCTx4c2Q6YW55QXR0cmlidXRlPjwveHNkOmFueUF0dHJpYnV0ZT4KLQk8L3hzZDphdHRyaWJ1dGVHcm91cD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tQmFzZVR5cGUxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1CYXNlVHlwZTEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MzlhMWFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1CYXNlVHlwZTEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0gICAgCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QxIj4KLSAgICAJPHhzZDpjb21wbGV4Q29udGVudD4KLSAgICAJCTx4c2Q6ZXh0ZW5zaW9uIGJhc2U9Ik1haW5DVDIiPjwveHNkOmV4dGVuc2lvbj4KLSAgICAJPC94c2Q6Y29tcGxleENvbnRlbnQ+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDIiPjwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1CYXNlVHlwZTIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUJhc2VUeXBlMi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZTI4MjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUJhc2VUeXBlMi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLSAgICAKLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDEiPgotICAgIAk8eHNkOmNvbXBsZXhDb250ZW50PgotICAgIAkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJNYWluQ1QyIj4KLSAgICAJCQk8eHNkOnNlcXVlbmNlPgotICAgIAkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIG1pbk9jY3Vycz0iMSI+Ci0gICAgCQkJCQk8eHNkOnNpbXBsZVR5cGU+Ci0gICAgCQkJCQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAJCQkJCQkJPHhzZDptaW5MZW5ndGggdmFsdWU9IjEiPjwveHNkOm1pbkxlbmd0aD4KLSAgICAJCQkJCQkJPHhzZDptYXhMZW5ndGggdmFsdWU9IjEwIj48L3hzZDptYXhMZW5ndGg+Ci0gICAgCQkJCQkJPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgCQkJCQk8L3hzZDpzaW1wbGVUeXBlPgotICAgIAkJCQk8L3hzZDplbGVtZW50PgotICAgIAkJCTwveHNkOnNlcXVlbmNlPgotICAgIAkJPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgCTwveHNkOmNvbXBsZXhDb250ZW50PgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QyIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUJhc2VUeXBlMy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tQmFzZVR5cGUzLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzg3NjlmYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tQmFzZVR5cGUzLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtZW50Ij4KLSAgICAJPHhzZDpjb21wbGV4VHlwZT4KLSAgICAJCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQkJPHhzZDplbGVtZW50IG5hbWU9ImVsZW0xIj4KLSAgICAJCQkJPHhzZDpjb21wbGV4VHlwZT4KLSAgICAJCQkJCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9ImVsZW0xIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCTx4c2Q6Y29tcGxleENvbnRlbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJPHhzZDpleHRlbnNpb24gYmFzZT0iTWFpbkNUMSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCTx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQk8eHNkOmVsZW1lbnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQluYW1lPSJlbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQk8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQk8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQk8L3hzZDpleHRlbnNpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAk8L3hzZDpjb21wbGV4Q29udGVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgCQkJCQkJPC94c2Q6ZWxlbWVudD4KLSAgICAJCQkJCTwveHNkOnNlcXVlbmNlPgotICAgIAkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAJCQk8L3hzZDplbGVtZW50PgotICAgIAkJPC94c2Q6c2VxdWVuY2U+Ci0gICAgCTwveHNkOmNvbXBsZXhUeXBlPgotICAgIDwveHNkOmVsZW1lbnQ+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDEiPjwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1HbG9iYWxFbGVtZW50VHlwZS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tR2xvYmFsRWxlbWVudFR5cGUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNGE2MTY3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1HbG9iYWxFbGVtZW50VHlwZS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluRWxlbWVudDEiIHR5cGU9Ik1haW5DVDEiPjwveHNkOmVsZW1lbnQ+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDEiPjwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjBmZTJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0ibG9jYWxFbGVtMSIgdHlwZT0iTWFpbkNUMiI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDIiPjwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZDdmZWE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6Z3JvdXAgbmFtZT0iTWFpbkdyb3VwMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0ibG9jYWxFbGVtMSIgdHlwZT0iTWFpbkNUMSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Z3JvdXA+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDEiPjwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tQmFzZVR5cGUxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tQmFzZVR5cGUxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTNlODQyMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUJhc2VUeXBlMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLSAgICAKLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDEiPgotICAgIAk8eHNkOmNvbXBsZXhDb250ZW50PgotICAgIAkJPHhzZDpleHRlbnNpb24gYmFzZT0iSW1wQ1QxIj48L3hzZDpleHRlbnNpb24+Ci0gICAgCTwveHNkOmNvbXBsZXhDb250ZW50PgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tQmFzZVR5cGUyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tQmFzZVR5cGUyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2NkMmExZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUJhc2VUeXBlMi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLSAgICAKLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDEiPgotICAgIAk8eHNkOmNvbXBsZXhDb250ZW50PgotICAgIAkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJJbXBDVDEiPgotICAgIAkJCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgbWluT2NjdXJzPSIxIj4KLSAgICAJCQkJCTx4c2Q6c2ltcGxlVHlwZT4KLSAgICAJCQkJCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotICAgIAkJCQkJCQk8eHNkOm1pbkxlbmd0aCB2YWx1ZT0iMSI+PC94c2Q6bWluTGVuZ3RoPgotICAgIAkJCQkJCQk8eHNkOm1heExlbmd0aCB2YWx1ZT0iMTAiPjwveHNkOm1heExlbmd0aD4KLSAgICAJCQkJCQk8L3hzZDpyZXN0cmljdGlvbj4KLSAgICAJCQkJCTwveHNkOnNpbXBsZVR5cGU+Ci0gICAgCQkJCTwveHNkOmVsZW1lbnQ+Ci0gICAgCQkJPC94c2Q6c2VxdWVuY2U+Ci0gICAgCQk8L3hzZDpyZXN0cmljdGlvbj4KLSAgICAJPC94c2Q6Y29tcGxleENvbnRlbnQ+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1CYXNlVHlwZTMueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1CYXNlVHlwZTMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODU0Nzc1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tQmFzZVR5cGUzLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtZW50Ij4KLSAgICAJPHhzZDpjb21wbGV4VHlwZT4KLSAgICAJCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQkJPHhzZDplbGVtZW50IG5hbWU9ImVsZW0xIj4KLSAgICAJCQkJPHhzZDpjb21wbGV4VHlwZT4KLSAgICAJCQkJCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9ImVsZW0xIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCTx4c2Q6Y29tcGxleENvbnRlbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJPHhzZDpleHRlbnNpb24gYmFzZT0iSW1wQ1QxIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCTx4c2Q6ZWxlbWVudAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCW5hbWU9ImVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCTwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCTwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCTwveHNkOmV4dGVuc2lvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCTwveHNkOmNvbXBsZXhDb250ZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAJCQkJCQk8L3hzZDplbGVtZW50PgotICAgIAkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0gICAgCQkJCTwveHNkOmNvbXBsZXhUeXBlPjwveHNkOmVsZW1lbnQ+Ci0gICAgCQk8L3hzZDpzZXF1ZW5jZT4KLSAgICAJPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPC94c2Q6ZWxlbWVudD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUdsb2JhbEVsZW1lbnRUeXBlLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tR2xvYmFsRWxlbWVudFR5cGUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNDIyNzRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tR2xvYmFsRWxlbWVudFR5cGUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluRWxlbWVudDEiIHR5cGU9IkltcENUMSI+PC94c2Q6ZWxlbWVudD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZWQ2NWJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImxvY2FsRWxlbTEiIHR5cGU9IkltcENUMSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjIyYjVhYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXAxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJsb2NhbEVsZW0xIiB0eXBlPSJJbXBDVDEiPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmdyb3VwPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlFbGVtZW50L1VudXNlZC9NYWluLUNULnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlFbGVtZW50L1VudXNlZC9NYWluLUNULnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmVlNGQyNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5RWxlbWVudC9VbnVzZWQvTWFpbi1DVC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IHJlZj0iTWFpbkVsZW1lbnQxIj48L3hzZDplbGVtZW50PgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluRWxlbWVudDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUVsZW1lbnQvVW51c2VkL01haW4tR3JvdXAueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUVsZW1lbnQvVW51c2VkL01haW4tR3JvdXAueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNDk3YjAxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlFbGVtZW50L1VudXNlZC9NYWluLUdyb3VwLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOmdyb3VwIG5hbWU9Ik1haW5Hcm91cDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImxvY2FsRWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8eHNkOmNob2ljZT4KLSAgICAJCQk8eHNkOmVsZW1lbnQgbmFtZT0ibG9jYWxFbGVtMiIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLSAgICAJCQk8eHNkOmVsZW1lbnQgcmVmPSJNYWluRWxlbWVudDEiPjwveHNkOmVsZW1lbnQ+Ci0gICAgCQk8L3hzZDpjaG9pY2U+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmdyb3VwPgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtZW50MSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5RWxlbWVudC9Vc2VkL01haW4tQ1QueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUVsZW1lbnQvVXNlZC9NYWluLUNULnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGZlNDNmMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5RWxlbWVudC9Vc2VkL01haW4tQ1QueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9IkltcEVsZW0xIj48L3hzZDplbGVtZW50PgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5RWxlbWVudC9Vc2VkL01haW4tR3JvdXAueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUVsZW1lbnQvVXNlZC9NYWluLUdyb3VwLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGY2NDgyYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5RWxlbWVudC9Vc2VkL01haW4tR3JvdXAueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6Z3JvdXAgbmFtZT0iTWFpbkdyb3VwMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0ibG9jYWxFbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgIDx4c2Q6Y2hvaWNlPgotICAgIAkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJsb2NhbEVsZW0yIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotICAgIAkJCTx4c2Q6ZWxlbWVudCByZWY9IkltcEVsZW0xIj48L3hzZDplbGVtZW50PgotICAgIAkJPC94c2Q6Y2hvaWNlPgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpncm91cD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5R3JvdXBEZWZpbml0aW9uL1VudXNlZC9NYWluLUNULnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlHcm91cERlZmluaXRpb24vVW51c2VkL01haW4tQ1QueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDU1ZDdlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlHcm91cERlZmluaXRpb24vVW51c2VkL01haW4tQ1QueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6Z3JvdXAgcmVmPSJNYWluR3JvdXBEZWZpbml0aW9uMSI+PC94c2Q6Z3JvdXA+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXBEZWZpbml0aW9uMSI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iZ3JFbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Z3JvdXA+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUdyb3VwRGVmaW5pdGlvbi9VbnVzZWQvTWFpbi1Hcm91cC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5R3JvdXBEZWZpbml0aW9uL1VudXNlZC9NYWluLUdyb3VwLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGQ3NDkxOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5R3JvdXBEZWZpbml0aW9uL1VudXNlZC9NYWluLUdyb3VwLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLQk8eHNkOmdyb3VwIG5hbWU9Ik1haW5Hcm91cERlZmluaXRpb24xIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJnckVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpncm91cD4KLQotCTx4c2Q6Z3JvdXAgbmFtZT0iTWFpbkdyb3VwRGVmaW5pdGlvbjIiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImdyRWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmdyb3VwIHJlZj0iTWFpbkdyb3VwRGVmaW5pdGlvbjEiPjwveHNkOmdyb3VwPgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpncm91cD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5R3JvdXBEZWZpbml0aW9uL1VzZWQvTWFpbi1DVC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5R3JvdXBEZWZpbml0aW9uL1VzZWQvTWFpbi1DVC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzMGZhNWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUdyb3VwRGVmaW5pdGlvbi9Vc2VkL01haW4tQ1QueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6Z3JvdXAgcmVmPSJJbXBHcjEiPjwveHNkOmdyb3VwPgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotCTx4c2Q6Z3JvdXAgbmFtZT0iTWFpbkdyb3VwRGVmaW5pdGlvbjEiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImdyRWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmdyb3VwPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlHcm91cERlZmluaXRpb24vVXNlZC9NYWluLUdyb3VwLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlHcm91cERlZmluaXRpb24vVXNlZC9NYWluLUdyb3VwLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDJiYWE2YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5R3JvdXBEZWZpbml0aW9uL1VzZWQvTWFpbi1Hcm91cC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0JPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXBEZWZpbml0aW9uMSI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iZ3JFbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Z3JvdXA+Ci0KLQk8eHNkOmdyb3VwIG5hbWU9Ik1haW5Hcm91cERlZmluaXRpb24yIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJnckVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCQkJPHhzZDpncm91cCByZWY9IkltcEdyMSI+PC94c2Q6Z3JvdXA+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmdyb3VwPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUdsb2JhbEF0dHJpYnV0ZVR5cGUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tR2xvYmFsQXR0cmlidXRlVHlwZS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxNTZkOWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tR2xvYmFsQXR0cmlidXRlVHlwZS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iTWFpbkF0dHJpYnV0ZTEiIHR5cGU9InhzZDpkYXRlIj48L3hzZDphdHRyaWJ1dGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tR2xvYmFsRWxlbWVudFR5cGUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tR2xvYmFsRWxlbWVudFR5cGUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NDZlMDkxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUdsb2JhbEVsZW1lbnRUeXBlLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbkVsZW1lbnQxIiB0eXBlPSJ4c2Q6dW5zaWduZWRCeXRlIj48L3hzZDplbGVtZW50PgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUxpc3QueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tTGlzdC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiOTMxNzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tTGlzdC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0JCi0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUIj4KLSAgICAJPHhzZDpsaXN0IGl0ZW1UeXBlPSJ4c2Q6Ym9vbGVhbiI+Ci0gICAgCTwveHNkOmxpc3Q+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1Mb2NhbEF0dHJpYnV0ZVR5cGUxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUxvY2FsQXR0cmlidXRlVHlwZTEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTJhYTVkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUxvY2FsQXR0cmlidXRlVHlwZTEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMSI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImxvY2FsQXR0cmlidXRlMSIgdHlwZT0ieHNkOnNob3J0Ij48L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYWYyYTJkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJsb2NhbEVsZW0xIiB0eXBlPSJ4c2Q6bGFuZ3VhZ2UiPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Y4NmFmYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6Z3JvdXAgbmFtZT0iTWFpbkdyb3VwMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0ibG9jYWxFbGVtMSIgdHlwZT0ieHNkOmRvdWJsZSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Z3JvdXA+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tUmVzdHJpY3Rpb24ueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tUmVzdHJpY3Rpb24ueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjEzZjYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLVJlc3RyaWN0aW9uLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUIj4KLSAgICAJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6dGltZSI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1VbmlvbjEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tVW5pb24xLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTM4N2UxNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1VbmlvbjEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QiPgotICAgICAgPHhzZDp1bmlvbiBtZW1iZXJUeXBlcz0ieHNkOmJvb2xlYW4iPgotICAgICAgICAgPHhzZDpzaW1wbGVUeXBlPgotICAgICAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgICAgPHhzZDptYXhMZW5ndGggdmFsdWU9IjUiPjwveHNkOm1heExlbmd0aD4KLSAgICAgICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgICAgICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICAgIDwveHNkOnVuaW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tVW5pb24yLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLVVuaW9uMi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlMjhkOGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tVW5pb24yLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUIj4KLSAgICAgIDx4c2Q6dW5pb24gbWVtYmVyVHlwZXM9InhzZDpib29sZWFuIHhzZDpkYXRlIj4KLSAgICAgICAgIDx4c2Q6c2ltcGxlVHlwZT4KLSAgICAgICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0gICAgICAgICAgICAgIDx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI1Ij48L3hzZDptYXhMZW5ndGg+Ci0gICAgICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICAgICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgICA8L3hzZDp1bmlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLVVuaW9uMy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1VbmlvbjMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTI4ZDhhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLVVuaW9uMy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVCI+Ci0gICAgICA8eHNkOnVuaW9uIG1lbWJlclR5cGVzPSJ4c2Q6Ym9vbGVhbiB4c2Q6ZGF0ZSI+Ci0gICAgICAgICA8eHNkOnNpbXBsZVR5cGU+Ci0gICAgICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotICAgICAgICAgICAgICA8eHNkOm1heExlbmd0aCB2YWx1ZT0iNSI+PC94c2Q6bWF4TGVuZ3RoPgotICAgICAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgICAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgICAgPC94c2Q6dW5pb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tR2xvYmFsQXR0cmlidXRlVHlwZS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tR2xvYmFsQXR0cmlidXRlVHlwZS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1NzgzOTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUdsb2JhbEF0dHJpYnV0ZVR5cGUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9Ik1haW5BdHRyaWJ1dGUxIiB0eXBlPSJJbXBTVDEiPjwveHNkOmF0dHJpYnV0ZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tR2xvYmFsRWxlbWVudFR5cGUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUdsb2JhbEVsZW1lbnRUeXBlLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDRlODU0ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tR2xvYmFsRWxlbWVudFR5cGUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluRWxlbWVudDEiIHR5cGU9IkltcFNUMSI+PC94c2Q6ZWxlbWVudD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tTGlzdC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tTGlzdC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3ODQ2NTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUxpc3QueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCQotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVCI+Ci0gICAgCTx4c2Q6bGlzdCBpdGVtVHlwZT0iSW1wU1QxIj4KLSAgICAJPC94c2Q6bGlzdD4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1Mb2NhbEF0dHJpYnV0ZVR5cGUxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1Mb2NhbEF0dHJpYnV0ZVR5cGUxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTBmZThmZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tTG9jYWxBdHRyaWJ1dGVUeXBlMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QxIj4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0ibG9jYWxBdHRyaWJ1dGUxIiB0eXBlPSJJbXBTVDEiPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRiMTYwMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImxvY2FsRWxlbTEiIHR5cGU9IkltcFNUMSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhNTNlNjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXAxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJsb2NhbEVsZW0xIiB0eXBlPSJJbXBTVDEiPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmdyb3VwPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1SZXN0cmljdGlvbi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tUmVzdHJpY3Rpb24ueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOGY3YTE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1SZXN0cmljdGlvbi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVCI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0iSW1wU1QxIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1VbmlvbjEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLVVuaW9uMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkOTA0ZjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLVVuaW9uMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVCI+Ci0gICAgICA8eHNkOnVuaW9uIG1lbWJlclR5cGVzPSJJbXBTVDEgeHNkOmJvb2xlYW4iPgotICAgICAgICAgPHhzZDpzaW1wbGVUeXBlPgotICAgICAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgICAgPHhzZDptYXhMZW5ndGggdmFsdWU9IjUiPjwveHNkOm1heExlbmd0aD4KLSAgICAgICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgICAgICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICAgIDwveHNkOnVuaW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLVVuaW9uMi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tVW5pb24yLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZThjMGIzMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tVW5pb24yLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUIj4KLSAgICAgIDx4c2Q6dW5pb24gbWVtYmVyVHlwZXM9InhzZDpib29sZWFuIHhzZDpkYXRlIEltcFNUMSI+Ci0gICAgICAgICA8eHNkOnNpbXBsZVR5cGU+Ci0gICAgICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotICAgICAgICAgICAgICA8eHNkOm1heExlbmd0aCB2YWx1ZT0iNSI+PC94c2Q6bWF4TGVuZ3RoPgotICAgICAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgICAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgICAgPC94c2Q6dW5pb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tVW5pb24zLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1VbmlvbjMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTdmNDBiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1VbmlvbjMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QiPgotICAgICAgPHhzZDp1bmlvbiBtZW1iZXJUeXBlcz0ieHNkOmJvb2xlYW4geHNkOmRhdGUiPgotICAgICAgICAgPHhzZDpzaW1wbGVUeXBlPgotICAgICAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJJbXBTVDEiPgotICAgICAgICAgICAgICA8eHNkOm1heExlbmd0aCB2YWx1ZT0iNSI+PC94c2Q6bWF4TGVuZ3RoPgotICAgICAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgICAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgICAgPC94c2Q6dW5pb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL2NpcmN1bGFyL0luY2x1ZGUxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvY2lyY3VsYXIvSW5jbHVkZTEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNGQ5NmQ3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvY2lyY3VsYXIvSW5jbHVkZTEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiAKLSAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIgCi0gICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gICAgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbmMxQ1QxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyIgbWF4T2NjdXJzPSIyNSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0KLSAgICA8eHNkOmdyb3VwIG5hbWU9IkluYzFHcjEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpncm91cD4KLQotICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9IkluYzFBdHRyMSIgdHlwZT0idG5zOkluYzFTVDEiPjwveHNkOmF0dHJpYnV0ZT4KLQotICAgIDx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iSW5jMUF0dHJHcjEiPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDphdHRyaWJ1dGVHcm91cD4KLQotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJJbmMxRWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW5jMVNUMSI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbmMxU1QyIj4KLSAgICAJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbmMxQ1QyIj4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXR0cjEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL2NpcmN1bGFyL0luY2x1ZGUyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvY2lyY3VsYXIvSW5jbHVkZTIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNmFkNGEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvY2lyY3VsYXIvSW5jbHVkZTIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0JPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJJbmNsdWRlMy54c2QiPjwveHNkOmluY2x1ZGU+Ci0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbmMyQ1QxIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyIgbWF4T2NjdXJzPSIyNSI+PC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOmdyb3VwIG5hbWU9IkluYzJHcjEiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpncm91cD4KLQotCTx4c2Q6YXR0cmlidXRlIG5hbWU9IkluYzJBdHRyMSIgdHlwZT0idG5zOkluYzJTVDEiPjwveHNkOmF0dHJpYnV0ZT4KLQotCTx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iSW5jMkF0dHJHcjEiPgotCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLQk8L3hzZDphdHRyaWJ1dGVHcm91cD4KLQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJJbmMyRWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW5jMlNUMSI+Ci0JCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbmMyU1QyIj4KLQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbmMyQ1QyIj4KLQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXR0cjEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL2NpcmN1bGFyL0luY2x1ZGUzLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvY2lyY3VsYXIvSW5jbHVkZTMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOWUwMjA3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvY2lyY3VsYXIvSW5jbHVkZTMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0JPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJJbmNsdWRlNC54c2QiPjwveHNkOmluY2x1ZGU+Ci0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbmMzQ1QxIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyIgbWF4T2NjdXJzPSIyNSI+PC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOmdyb3VwIG5hbWU9IkluYzNHcjEiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpncm91cD4KLQotCTx4c2Q6YXR0cmlidXRlIG5hbWU9IkluYzNBdHRyMSIgdHlwZT0idG5zOkluYzNTVDEiPjwveHNkOmF0dHJpYnV0ZT4KLQotCTx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iSW5jM0F0dHJHcjEiPgotCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLQk8L3hzZDphdHRyaWJ1dGVHcm91cD4KLQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJJbmMzRWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW5jM1NUMSI+Ci0JCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbmMzU1QyIj4KLQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbmMzQ1QyIj4KLQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXR0cjEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL2NpcmN1bGFyL0luY2x1ZGU0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvY2lyY3VsYXIvSW5jbHVkZTQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NjUwOTg0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvY2lyY3VsYXIvSW5jbHVkZTQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiAKLSAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIgCi0gICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gICAgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0JPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJJbmNsdWRlNS54c2QiPjwveHNkOmluY2x1ZGU+Ci0JCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbmM0Q1QxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyIgbWF4T2NjdXJzPSIyNSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0KLSAgICA8eHNkOmdyb3VwIG5hbWU9IkluYzRHcjEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpncm91cD4KLQotICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9IkluYzRBdHRyMSIgdHlwZT0idG5zOkluYzRTVDEiPjwveHNkOmF0dHJpYnV0ZT4KLQotICAgIDx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iSW5jNEF0dHJHcjEiPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDphdHRyaWJ1dGVHcm91cD4KLQotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJJbmM0RWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW5jNFNUMSI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbmM0U1QyIj4KLSAgICAJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbmM0Q1QyIj4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXR0cjEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL2NpcmN1bGFyL0luY2x1ZGU1LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvY2lyY3VsYXIvSW5jbHVkZTUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODE3YWJkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvY2lyY3VsYXIvSW5jbHVkZTUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiAKLSAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIgCi0gICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gICAgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0JPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJJbmNsdWRlNi54c2QiPjwveHNkOmluY2x1ZGU+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbmM1Q1QxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyIgbWF4T2NjdXJzPSIyNSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0KLSAgICA8eHNkOmdyb3VwIG5hbWU9IkluYzVHcjEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpncm91cD4KLQotICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9IkluYzVBdHRyMSIgdHlwZT0idG5zOkluYzVTVDEiPjwveHNkOmF0dHJpYnV0ZT4KLQotICAgIDx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iSW5jNUF0dHJHcjEiPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDphdHRyaWJ1dGVHcm91cD4KLQotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJJbmM1RWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW5jNVNUMSI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbmM1U1QyIj4KLSAgICAJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbmM1Q1QyIj4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXR0cjEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL2NpcmN1bGFyL0luY2x1ZGU2LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvY2lyY3VsYXIvSW5jbHVkZTYueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjMwMzNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvY2lyY3VsYXIvSW5jbHVkZTYueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiAKLSAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIgCi0gICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gICAgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iIHhtbG5zOlExPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+Ci08IS0tIAotICAgIDx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSJJbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC94c2Q6aW1wb3J0PgotIC0tPgotICAgCTx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iSW5jbHVkZTIueHNkIj48L3hzZDppbmNsdWRlPgotCTx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iSW5jbHVkZTUueHNkIj48L3hzZDppbmNsdWRlPgotCQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW5jNkNUMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciIG1heE9jY3Vycz0iMjUiPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotCi0gICAgPHhzZDpncm91cCBuYW1lPSJJbmM2R3IxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Z3JvdXA+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJJbmM2QXR0cjEiIHR5cGU9InRuczpJbmM2U1QxIj48L3hzZDphdHRyaWJ1dGU+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZUdyb3VwIG5hbWU9IkluYzZBdHRyR3IxIj4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXQxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iSW5jNkVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotPCEtLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iSW5jNkVsZW0xIiB0eXBlPSJRMTpJbXBDVDEiPjwveHNkOmVsZW1lbnQ+LS0+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW5jNlNUMSI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbmM2U1QyIj4KLSAgICAJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbmM2Q1QyIj4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXR0cjEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL2NpcmN1bGFyL3Rlc3QvTWFpbjAwMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL2NpcmN1bGFyL3Rlc3QvTWFpbjAwMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlZmQzMmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9jaXJjdWxhci90ZXN0L01haW4wMDEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB4bWxuczpwPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+Ci0KLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTQueHNkIj48L2luY2x1ZGU+Ci0KLQk8ZWxlbWVudCBuYW1lPSJNYWluRWxlbTEiIHR5cGU9InN0cmluZyI+Ci0JCTxhbm5vdGF0aW9uPgotCQkJPGFwcGluZm8+Ci0JCQkJPHA6SW1wRWxlbTE+PC9wOkltcEVsZW0xPgotCQkJPC9hcHBpbmZvPgotCQk8L2Fubm90YXRpb24+Ci0JPC9lbGVtZW50PgotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9jaXJjdWxhci90ZXN0L01haW4wMDIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9jaXJjdWxhci90ZXN0L01haW4wMDIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YWU4MmEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvY2lyY3VsYXIvdGVzdC9NYWluMDAyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgeG1sbnM6cD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPgotCi0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0luY2x1ZGUxLnhzZCI+PC9pbmNsdWRlPgotCi0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0luY2x1ZGUyLnhzZCI+PC9pbmNsdWRlPgotCQotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlMy54c2QiPjwvaW5jbHVkZT4KLQotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlNC54c2QiPjwvaW5jbHVkZT4KLQkKLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTUueHNkIj48L2luY2x1ZGU+Ci0JCi0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0luY2x1ZGU2LnhzZCI+PC9pbmNsdWRlPgotCQotCTxlbGVtZW50IG5hbWU9Ik1haW5FbGVtMSIgdHlwZT0ic3RyaW5nIj4KLQkJPGFubm90YXRpb24+Ci0JCQk8YXBwaW5mbz4KLQkJCQk8cDpJbXBFbGVtMT48L3A6SW1wRWxlbTE+Ci0JCQk8L2FwcGluZm8+Ci0JCTwvYW5ub3RhdGlvbj4KLQk8L2VsZW1lbnQ+Ci08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1NpbXBsZS9JbXBvcnQwMDEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9TaW1wbGUvSW1wb3J0MDAxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjAxMzE0NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1NpbXBsZS9JbXBvcnQwMDEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3NkbFRlc3QvSW1wb3J0IiAKLQl4bWxuczp0bnM9Imh0dHA6Ly93c2RsVGVzdC9JbXBvcnQiPgotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iY3QwMSI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJmaWVsZDEiCi0JCQkJdHlwZT0ieHNkOnN0cmluZyI+Ci0JCQk8L3hzZDplbGVtZW50PgotCQkJPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iZmllbGQyIgotCQkJCXR5cGU9InhzZDpzdHJpbmciPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9ImZpZWxkMyIKLQkJCQl0eXBlPSJ4c2Q6c3RyaW5nIj4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJmaWVsZDQiCi0JCQkJdHlwZT0ieHNkOnN0cmluZyI+Ci0JCQk8L3hzZDplbGVtZW50PgotCQkJPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iZmllbGQ1IgotCQkJCXR5cGU9InhzZDpzdHJpbmciPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0JPHhzZDplbGVtZW50IG5hbWU9ImltcDFFbGVtZW50IiB0eXBlPSJ0bnM6Y3QwMSIgLz4KLTwveHNkOnNjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvU2ltcGxlL0ltcG9ydDAwMi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1NpbXBsZS9JbXBvcnQwMDIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDY2M2ZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvU2ltcGxlL0ltcG9ydDAwMi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93c2RsVGVzdC9JbXBvcnQiPgotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iY3QwMiI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJmaWVsZDEiCi0JCQkJdHlwZT0ieHNkOnN0cmluZyI+Ci0JCQk8L3hzZDplbGVtZW50PgotCQkJPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iZmllbGQyIgotCQkJCXR5cGU9InhzZDpzdHJpbmciPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9ImZpZWxkMyIKLQkJCQl0eXBlPSJ4c2Q6c3RyaW5nIj4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJmaWVsZDQiCi0JCQkJdHlwZT0ieHNkOnN0cmluZyI+Ci0JCQk8L3hzZDplbGVtZW50PgotCQkJPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iZmllbGQ1IgotCQkJCXR5cGU9InhzZDpzdHJpbmciPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1NpbXBsZS9JbXBvcnQwMDMueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9TaW1wbGUvSW1wb3J0MDAzLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjkyYmVkYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1NpbXBsZS9JbXBvcnQwMDMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3NkbFRlc3QvSW1wb3J0IiB4bWxuczp0bnM9Imh0dHA6Ly93c2RsVGVzdC9JbXBvcnQiPgotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iY3QwMyI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJmaWVsZDEiCi0JCQkJdHlwZT0ieHNkOnN0cmluZyI+Ci0JCQk8L3hzZDplbGVtZW50PgotCQkJPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iZmllbGQyIgotCQkJCXR5cGU9InhzZDpzdHJpbmciPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9ImZpZWxkMyIKLQkJCQl0eXBlPSJ4c2Q6c3RyaW5nIj4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJmaWVsZDQiCi0JCQkJdHlwZT0ieHNkOnN0cmluZyI+Ci0JCQk8L3hzZDplbGVtZW50PgotCQkJPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iZmllbGQ1IgotCQkJCXR5cGU9InhzZDpzdHJpbmciPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0iaW1wM0VsZW1lbnQiPgotCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InRuczpjdDAzIj48L3hzZDplbGVtZW50PgotCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci08L3hzZDpzY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1NpbXBsZS9UZXN0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvU2ltcGxlL1Rlc3QueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMGE1NjdmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvU2ltcGxlL1Rlc3QueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3dzZGxUZXN0IgotCXhtbG5zOmltcD0iaHR0cDovL3dzZGxUZXN0L0ltcG9ydCIgeG1sbnM6dG5zPSJodHRwOi8vd3NkbFRlc3QiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0JPHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3NkbFRlc3QvSW1wb3J0IgotCQlzY2hlbWFMb2NhdGlvbj0iSW1wb3J0MDAxLnhzZCIgLz4KLQk8eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93c2RsVGVzdC9JbXBvcnQiCi0JCXNjaGVtYUxvY2F0aW9uPSJJbXBvcnQwMDIueHNkIiAvPgotCTx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3dzZGxUZXN0L0ltcG9ydCIKLQkJc2NoZW1hTG9jYXRpb249IkltcG9ydDAwMy54c2QiIC8+Ci0JPHhzZDplbGVtZW50IG5hbWU9Im9wZXJhdGlvbjEiPgotCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iaW5wdXQxIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOmludCIgLz4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iaW4iIHR5cGU9ImltcDpjdDAzIiAvPgotCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0JPHhzZDplbGVtZW50IG5hbWU9Im9wZXJhdGlvbjFSZXNwb25zZSI+Ci0JCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQk8eHNkOnNlcXVlbmNlPgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJvdXRwdXQxIiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0iaW1wOmN0MDIiIC8+Ci0JCQk8L3hzZDpzZXF1ZW5jZT4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC9JbXBvcnQxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL0ltcG9ydDEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjlmY2NlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL0ltcG9ydDEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiAKLSAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IiAKLSAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW1wQ1QxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyIgbWF4T2NjdXJzPSIyNSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0KLSAgICA8eHNkOmdyb3VwIG5hbWU9IkltcEdyMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmdyb3VwPgotCi0gICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iSW1wQXR0cjEiIHR5cGU9InRuczpJbXBTVDEiPjwveHNkOmF0dHJpYnV0ZT4KLQotICAgIDx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iSW1wQXR0ckdyMSI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0MSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9IkltcEVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkltcFNUMSI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbXBTVDIiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkltcENUMiI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0dHIxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvSW1wb3J0Mi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC9JbXBvcnQyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmRiYTc3MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC9JbXBvcnQyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgCi0gICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIgCi0gICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gICAgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkltcDJDVDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtYXhPY2N1cnM9IjI1Ij48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQotICAgIDx4c2Q6Z3JvdXAgbmFtZT0iSW1wMkdyMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmdyb3VwPgotCi0gICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iSW1wMkF0dHIxIiB0eXBlPSJ0bnM6SW1wMlNUMSI+PC94c2Q6YXR0cmlidXRlPgotCi0gICAgPHhzZDphdHRyaWJ1dGVHcm91cCBuYW1lPSJJbXAyQXR0ckdyMSI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0MSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9IkltcDJFbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbXAyU1QxIj4KLSAgICAJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkltcDJTVDIiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkltcDJDVDIiPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdHRyMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL0ltcG9ydDMueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvSW1wb3J0My54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczMTVkMjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvSW1wb3J0My54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiIHhtbG5zOlExPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydDQiPgotCi0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249IkltcG9ydDQueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0NCI+PC94c2Q6aW1wb3J0PgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW1wM0NUMSI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciIG1heE9jY3Vycz0iMjUiPjwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDpncm91cCBuYW1lPSJJbXAzR3IxIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Z3JvdXA+Ci0KLQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJJbXAzQXR0cjEiIHR5cGU9InRuczpJbXAzU1QxIj48L3hzZDphdHRyaWJ1dGU+Ci0KLQk8eHNkOmF0dHJpYnV0ZUdyb3VwIG5hbWU9IkltcDNBdHRyR3IxIj4KLQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXQxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0JPC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0iSW1wM0VsZW0xIiB0eXBlPSJRMTpJbXA0Q1QxIj48L3hzZDplbGVtZW50PgotCi0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkltcDNTVDEiPgotCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotCTwveHNkOnNpbXBsZVR5cGU+Ci0KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW1wM1NUMiI+Ci0JCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW1wM0NUMiI+Ci0JCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0dHIxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvSW1wb3J0NC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC9JbXBvcnQ0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQ1MTk1OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC9JbXBvcnQ0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgCi0gICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydDQiIAotICAgIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQ0IiB4bWxuczpRMT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPgotCi0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249IkltcG9ydDMueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbXA0Q1QxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyIgbWF4T2NjdXJzPSIyNSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0KLSAgICA8eHNkOmdyb3VwIG5hbWU9IkltcDRHcjEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpncm91cD4KLQotICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9IkltcDRBdHRyMSIgdHlwZT0idG5zOkltcDRTVDEiPjwveHNkOmF0dHJpYnV0ZT4KLQotICAgIDx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iSW1wNEF0dHJHcjEiPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDphdHRyaWJ1dGVHcm91cD4KLQotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJJbXA0RWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW1wNFNUMSI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbXA0U1QyIj4KLSAgICAJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbXA0Q1QyIj4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXR0cjEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9IkltcDRFbGVtMiIgdHlwZT0iUTE6SW1wM0NUMiI+PC94c2Q6ZWxlbWVudD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC9JbXBvcnQ1LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL0ltcG9ydDUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTIwZTg0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL0ltcG9ydDUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiAKLSAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0NSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gICAgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydDUiIHhtbG5zOlExPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydDYiPgotCi0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249IkltcG9ydDYueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0NiI+PC94c2Q6aW1wb3J0PgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW1wNUNUMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciIG1heE9jY3Vycz0iMjUiPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotCi0gICAgPHhzZDpncm91cCBuYW1lPSJJbXA1R3IxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Z3JvdXA+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJJbXA1QXR0cjEiIHR5cGU9InRuczpJbXA1U1QxIj48L3hzZDphdHRyaWJ1dGU+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZUdyb3VwIG5hbWU9IkltcDVBdHRyR3IxIj4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXQxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iSW1wNUVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkltcDVTVDEiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW1wNVNUMiI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW1wNUNUMiI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0dHIxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJJbXA1RWxlbTIiIHR5cGU9IlExOkltcDZDVDEiPjwveHNkOmVsZW1lbnQ+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvSW1wb3J0Ni54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC9JbXBvcnQ2LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQxNWVhZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC9JbXBvcnQ2LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgCi0gICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydDYiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQ2Ij4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW1wNkNUMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciIG1heE9jY3Vycz0iMjUiPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotCi0gICAgPHhzZDpncm91cCBuYW1lPSJJbXA2R3IxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Z3JvdXA+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJJbXA2QXR0cjEiIHR5cGU9InRuczpJbXA2U1QxIj48L3hzZDphdHRyaWJ1dGU+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZUdyb3VwIG5hbWU9IkltcDZBdHRyR3IxIj4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXQxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iSW1wNkVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkltcDZTVDEiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW1wNlNUMiI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW1wNkNUMiI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0dHIxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJJbXA2RWxlbTIiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvSW5jbHVkZTEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvSW5jbHVkZTEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNGQ5NmQ3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL0luY2x1ZGUxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgCi0gICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iIAotICAgIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW5jMUNUMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciIG1heE9jY3Vycz0iMjUiPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotCi0gICAgPHhzZDpncm91cCBuYW1lPSJJbmMxR3IxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Z3JvdXA+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJJbmMxQXR0cjEiIHR5cGU9InRuczpJbmMxU1QxIj48L3hzZDphdHRyaWJ1dGU+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZUdyb3VwIG5hbWU9IkluYzFBdHRyR3IxIj4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXQxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iSW5jMUVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkluYzFTVDEiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW5jMVNUMiI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW5jMUNUMiI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0dHIxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvSW5jbHVkZTIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvSW5jbHVkZTIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNmFkNGEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL0luY2x1ZGUyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotCTx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iSW5jbHVkZTMueHNkIj48L3hzZDppbmNsdWRlPgotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW5jMkNUMSI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciIG1heE9jY3Vycz0iMjUiPjwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDpncm91cCBuYW1lPSJJbmMyR3IxIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Z3JvdXA+Ci0KLQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJJbmMyQXR0cjEiIHR5cGU9InRuczpJbmMyU1QxIj48L3hzZDphdHRyaWJ1dGU+Ci0KLQk8eHNkOmF0dHJpYnV0ZUdyb3VwIG5hbWU9IkluYzJBdHRyR3IxIj4KLQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXQxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0JPC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0iSW5jMkVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCi0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkluYzJTVDEiPgotCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotCTwveHNkOnNpbXBsZVR5cGU+Ci0KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW5jMlNUMiI+Ci0JCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW5jMkNUMiI+Ci0JCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0dHIxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvSW5jbHVkZTMueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvSW5jbHVkZTMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOWUwMjA3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL0luY2x1ZGUzLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotCTx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iSW5jbHVkZTQueHNkIj48L3hzZDppbmNsdWRlPgotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW5jM0NUMSI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciIG1heE9jY3Vycz0iMjUiPjwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDpncm91cCBuYW1lPSJJbmMzR3IxIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Z3JvdXA+Ci0KLQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJJbmMzQXR0cjEiIHR5cGU9InRuczpJbmMzU1QxIj48L3hzZDphdHRyaWJ1dGU+Ci0KLQk8eHNkOmF0dHJpYnV0ZUdyb3VwIG5hbWU9IkluYzNBdHRyR3IxIj4KLQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXQxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0JPC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0iSW5jM0VsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCi0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkluYzNTVDEiPgotCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotCTwveHNkOnNpbXBsZVR5cGU+Ci0KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW5jM1NUMiI+Ci0JCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW5jM0NUMiI+Ci0JCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0dHIxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvSW5jbHVkZTQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvSW5jbHVkZTQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDU5YjE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL0luY2x1ZGU0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgCi0gICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iIAotICAgIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW5jNENUMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciIG1heE9jY3Vycz0iMjUiPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotCi0gICAgPHhzZDpncm91cCBuYW1lPSJJbmM0R3IxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Z3JvdXA+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJJbmM0QXR0cjEiIHR5cGU9InRuczpJbmM0U1QxIj48L3hzZDphdHRyaWJ1dGU+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZUdyb3VwIG5hbWU9IkluYzRBdHRyR3IxIj4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXQxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iSW5jNEVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkluYzRTVDEiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW5jNFNUMiI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW5jNENUMiI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0dHIxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvSW5jbHVkZTUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvSW5jbHVkZTUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODJjMzY1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL0luY2x1ZGU1LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgCi0gICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iIAotICAgIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW5jNUNUMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciIG1heE9jY3Vycz0iMjUiPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotCi0gICAgPHhzZDpncm91cCBuYW1lPSJJbmM1R3IxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Z3JvdXA+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJJbmM1QXR0cjEiIHR5cGU9InRuczpJbmM1U1QxIj48L3hzZDphdHRyaWJ1dGU+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZUdyb3VwIG5hbWU9IkluYzVBdHRyR3IxIj4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXQxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iSW5jNUVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkluYzVTVDEiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW5jNVNUMiI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW5jNUNUMiI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0dHIxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvSW5jbHVkZTYueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvSW5jbHVkZTYueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjZkNGYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL0luY2x1ZGU2LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgCi0gICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iIAotICAgIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIiB4bWxuczpRMT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPgotCi0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249IkltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbmM2Q1QxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyIgbWF4T2NjdXJzPSIyNSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0KLSAgICA8eHNkOmdyb3VwIG5hbWU9IkluYzZHcjEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpncm91cD4KLQotICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9IkluYzZBdHRyMSIgdHlwZT0idG5zOkluYzZTVDEiPjwveHNkOmF0dHJpYnV0ZT4KLQotICAgIDx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iSW5jNkF0dHJHcjEiPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDphdHRyaWJ1dGVHcm91cD4KLQotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJJbmM2RWxlbTEiIHR5cGU9IlExOkltcENUMSI+PC94c2Q6ZWxlbWVudD4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbmM2U1QxIj4KLSAgICAJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkluYzZTVDIiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkluYzZDVDIiPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdHRyMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC90ZXN0L01haW4wMDEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTVhOWQ1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+Ci0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0luY2x1ZGUxLnhzZCI+PC9pbmNsdWRlPgotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDAyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwMi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhMmE4YjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDAyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotICAgIHhtbG5zOmltcD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgotCTxpbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L2ltcG9ydD4KLTwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwMy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC90ZXN0L01haW4wMDMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MWRkMzY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwMy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLSAgICB4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIj4KLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTEueHNkIj48L2luY2x1ZGU+Ci0JPGltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwvaW1wb3J0PgotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDA0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwNC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3OWJjZWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDA0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotICAgIHhtbG5zOmltcD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlMS54c2QiPjwvaW5jbHVkZT4KLQk8aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi9JbXBvcnQzLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC9pbXBvcnQ+Ci08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC90ZXN0L01haW4wMDUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDA1LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmNlYWUxNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC90ZXN0L01haW4wMDUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotICAgIHhtbG5zOmltcD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0gICAgeG1sbnM6aW1wND0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQ0IgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIj4KLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTEueHNkIj48L2luY2x1ZGU+Ci0JPGltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwvaW1wb3J0PgotCTxpbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uL0ltcG9ydDIueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L2ltcG9ydD4KLQk8aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi9JbXBvcnQzLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC9pbXBvcnQ+Ci0JPGltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vSW1wb3J0NC54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQ0Ij48L2ltcG9ydD4KLTwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwNi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC90ZXN0L01haW4wMDYueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMjlkMzM4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwNi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHhtbG5zOnA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij4KLQk8aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC9pbXBvcnQ+Ci0KLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTEueHNkIj48L2luY2x1ZGU+Ci0KLQk8ZWxlbWVudCBuYW1lPSJNYWluRWxlbTEiIHR5cGU9InRuczpJbmMxQ1QxIj4KLQkJPGFubm90YXRpb24+Ci0JCQk8YXBwaW5mbz4KLQkJCQk8cDpJbXBFbGVtMT48L3A6SW1wRWxlbTE+Ci0JCQk8L2FwcGluZm8+Ci0JCTwvYW5ub3RhdGlvbj4KLQk8L2VsZW1lbnQ+Ci08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC90ZXN0L01haW4wMDcueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDA3LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjIyYTY4Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC90ZXN0L01haW4wMDcueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB4bWxuczpwPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+Ci0JPGltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwvaW1wb3J0PgotCi0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0luY2x1ZGUxLnhzZCI+PC9pbmNsdWRlPgotCQotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlMi54c2QiPjwvaW5jbHVkZT4KLQotCTxlbGVtZW50IG5hbWU9Ik1haW5FbGVtMSIgdHlwZT0idG5zOkluYzFDVDEiPgotCQk8YW5ub3RhdGlvbj4KLQkJCTxhcHBpbmZvPgotCQkJCTxwOkltcEVsZW0xPjwvcDpJbXBFbGVtMT4KLQkJCTwvYXBwaW5mbz4KLQkJPC9hbm5vdGF0aW9uPgotCTwvZWxlbWVudD4KLTwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwOC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC90ZXN0L01haW4wMDgueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTg5YzA2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwOC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHhtbG5zOnA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij4KLQk8aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC9pbXBvcnQ+Ci0KLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTEueHNkIj48L2luY2x1ZGU+Ci0JCi0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0luY2x1ZGUyLnhzZCI+PC9pbmNsdWRlPgotCQotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlMy54c2QiPjwvaW5jbHVkZT4KLQotCTxlbGVtZW50IG5hbWU9Ik1haW5FbGVtMSIgdHlwZT0idG5zOkluYzFDVDEiPgotCQk8YW5ub3RhdGlvbj4KLQkJCTxhcHBpbmZvPgotCQkJCTxwOkltcEVsZW0xPjwvcDpJbXBFbGVtMT4KLQkJCTwvYXBwaW5mbz4KLQkJPC9hbm5vdGF0aW9uPgotCTwvZWxlbWVudD4KLQotICAgIDxhdHRyaWJ1dGUgbmFtZT0iTWFpbjhBdHRyaWJ1dGUiIHR5cGU9InRuczpJbmMzU1QxIj48L2F0dHJpYnV0ZT4KLTwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwOS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC90ZXN0L01haW4wMDkueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMTg2YTRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwOS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHhtbG5zOnA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij4KLQk8aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC9pbXBvcnQ+Ci0KLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTEueHNkIj48L2luY2x1ZGU+Ci0JCi0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0luY2x1ZGUyLnhzZCI+PC9pbmNsdWRlPgotCi0JPGVsZW1lbnQgbmFtZT0iTWFpbkVsZW0xIiB0eXBlPSJ0bnM6SW5jMUNUMSI+Ci0JCTxhbm5vdGF0aW9uPgotCQkJPGFwcGluZm8+Ci0JCQkJPHA6SW1wRWxlbTE+PC9wOkltcEVsZW0xPgotCQkJPC9hcHBpbmZvPgotCQk8L2Fubm90YXRpb24+Ci0JPC9lbGVtZW50PgotCi0JPGNvbXBsZXhUeXBlIG5hbWU9Ik1haW45Q1QxIj4KLQkJPGNvbXBsZXhDb250ZW50PgotCQkJPGV4dGVuc2lvbiBiYXNlPSJ0bnM6SW5jM0NUMSI+PC9leHRlbnNpb24+Ci0JCTwvY29tcGxleENvbnRlbnQ+Ci0JPC9jb21wbGV4VHlwZT4KLTwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwOWEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDA5YS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjYjA5MWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDA5YS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHhtbG5zOnA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij4KLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTEueHNkIj48L2luY2x1ZGU+Ci0JCi0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0luY2x1ZGUyLnhzZCI+PC9pbmNsdWRlPgotCQotCTxlbGVtZW50IG5hbWU9Ik1haW5FbGVtMSIgdHlwZT0idG5zOkluYzFDVDEiPgotCQk8YW5ub3RhdGlvbj4KLQkJCTxhcHBpbmZvPgotCQkJCTxwOkltcEVsZW0xPjwvcDpJbXBFbGVtMT4KLQkJCTwvYXBwaW5mbz4KLQkJPC9hbm5vdGF0aW9uPgotCTwvZWxlbWVudD4KLQotCTxjb21wbGV4VHlwZSBuYW1lPSJNYWluOUNUMSI+Ci0JCTxjb21wbGV4Q29udGVudD4KLQkJCTxleHRlbnNpb24gYmFzZT0idG5zOkluYzRDVDEiPjwvZXh0ZW5zaW9uPgotCQk8L2NvbXBsZXhDb250ZW50PgotCTwvY29tcGxleFR5cGU+Ci08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC90ZXN0L01haW4wMDliLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwOWIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OGFiZjAxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwOWIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB4bWxuczpwPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+Ci0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0luY2x1ZGUxLnhzZCI+PC9pbmNsdWRlPgotCQotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlMi54c2QiPjwvaW5jbHVkZT4KLQotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlMy54c2QiPjwvaW5jbHVkZT4KLQkKLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTQueHNkIj48L2luY2x1ZGU+Ci0JCi0JPGVsZW1lbnQgbmFtZT0iTWFpbkVsZW0xIiB0eXBlPSJ0bnM6SW5jMUNUMSI+Ci0JCTxhbm5vdGF0aW9uPgotCQkJPGFwcGluZm8+Ci0JCQkJPHA6SW1wRWxlbTE+PC9wOkltcEVsZW0xPgotCQkJPC9hcHBpbmZvPgotCQk8L2Fubm90YXRpb24+Ci0JPC9lbGVtZW50PgotCi0JPGNvbXBsZXhUeXBlIG5hbWU9Ik1haW45Q1QxIj4KLQkJPGNvbXBsZXhDb250ZW50PgotCQkJPGV4dGVuc2lvbiBiYXNlPSJ0bnM6SW5jNENUMSI+PC9leHRlbnNpb24+Ci0JCTwvY29tcGxleENvbnRlbnQ+Ci0JPC9jb21wbGV4VHlwZT4KLTwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwOWMueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDA5Yy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1MGMyMjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDA5Yy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHhtbG5zOnA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij4KLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTEueHNkIj48L2luY2x1ZGU+Ci0JCi0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0luY2x1ZGUyLnhzZCI+PC9pbmNsdWRlPgotCi0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0luY2x1ZGUzLnhzZCI+PC9pbmNsdWRlPgotCQotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlNC54c2QiPjwvaW5jbHVkZT4KLQkKLQk8ZWxlbWVudCBuYW1lPSJNYWluRWxlbTEiIHR5cGU9InN0cmluZyI+Ci0JCTxhbm5vdGF0aW9uPgotCQkJPGFwcGluZm8+Ci0JCQkJPHA6SW1wRWxlbTE+PC9wOkltcEVsZW0xPgotCQkJPC9hcHBpbmZvPgotCQk8L2Fubm90YXRpb24+Ci0JPC9lbGVtZW50PgotCi0JPGNvbXBsZXhUeXBlIG5hbWU9Ik1haW45Q1QxIj4KLQkJPGNvbXBsZXhDb250ZW50PgotCQkJPGV4dGVuc2lvbiBiYXNlPSJ0bnM6SW5jNENUMSI+PC9leHRlbnNpb24+Ci0JCTwvY29tcGxleENvbnRlbnQ+Ci0JPC9jb21wbGV4VHlwZT4KLTwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwOWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDA5ZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjOWMzMjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDA5ZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHhtbG5zOnA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij4KLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTEueHNkIj48L2luY2x1ZGU+Ci0JCi0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0luY2x1ZGUyLnhzZCI+PC9pbmNsdWRlPgotCi0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0luY2x1ZGUzLnhzZCI+PC9pbmNsdWRlPgotCi0JPGVsZW1lbnQgbmFtZT0iTWFpbkVsZW0xIiB0eXBlPSJzdHJpbmciPgotCQk8YW5ub3RhdGlvbj4KLQkJCTxhcHBpbmZvPgotCQkJCTxwOkltcEVsZW0xPjwvcDpJbXBFbGVtMT4KLQkJCTwvYXBwaW5mbz4KLQkJPC9hbm5vdGF0aW9uPgotCTwvZWxlbWVudD4KLQotCTxjb21wbGV4VHlwZSBuYW1lPSJNYWluOUNUMSI+Ci0JCTxjb21wbGV4Q29udGVudD4KLQkJCTxleHRlbnNpb24gYmFzZT0idG5zOkluYzRDVDEiPjwvZXh0ZW5zaW9uPgotCQk8L2NvbXBsZXhDb250ZW50PgotCTwvY29tcGxleFR5cGU+Ci08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC90ZXN0L01haW4wMDllLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwOWUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTNlY2MwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwOWUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB4bWxuczpwPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+Ci0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0luY2x1ZGUxLnhzZCI+PC9pbmNsdWRlPgotCQotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlMi54c2QiPjwvaW5jbHVkZT4KLQotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlNC54c2QiPjwvaW5jbHVkZT4KLQkKLQk8ZWxlbWVudCBuYW1lPSJNYWluRWxlbTEiIHR5cGU9InRuczpJbmMxQ1QxIj4KLQkJPGFubm90YXRpb24+Ci0JCQk8YXBwaW5mbz4KLQkJCQk8cDpJbXBFbGVtMT48L3A6SW1wRWxlbTE+Ci0JCQk8L2FwcGluZm8+Ci0JCTwvYW5ub3RhdGlvbj4KLQk8L2VsZW1lbnQ+Ci0KLQk8Y29tcGxleFR5cGUgbmFtZT0iTWFpbjlDVDEiPgotCQk8Y29tcGxleENvbnRlbnQ+Ci0JCQk8ZXh0ZW5zaW9uIGJhc2U9InRuczpJbmM0Q1QxIj48L2V4dGVuc2lvbj4KLQkJPC9jb21wbGV4Q29udGVudD4KLQk8L2NvbXBsZXhUeXBlPgotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDA5Zi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC90ZXN0L01haW4wMDlmLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzJlZGM1OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC90ZXN0L01haW4wMDlmLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgeG1sbnM6cD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPgotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlMS54c2QiPjwvaW5jbHVkZT4KLQkKLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTIueHNkIj48L2luY2x1ZGU+Ci0KLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTMueHNkIj48L2luY2x1ZGU+Ci0KLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vQS54c2QiPjwvaW5jbHVkZT4KLQkKLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTUueHNkIj48L2luY2x1ZGU+Ci0JCi0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0luY2x1ZGU0LnhzZCI+PC9pbmNsdWRlPgotCQotCTxlbGVtZW50IG5hbWU9Ik1haW5FbGVtMSIgdHlwZT0ic3RyaW5nIj4KLQkJPGFubm90YXRpb24+Ci0JCQk8YXBwaW5mbz4KLQkJCQk8cDpJbXBFbGVtMT48L3A6SW1wRWxlbTE+Ci0JCQk8L2FwcGluZm8+Ci0JCTwvYW5ub3RhdGlvbj4KLQk8L2VsZW1lbnQ+Ci0KLQk8Y29tcGxleFR5cGUgbmFtZT0iTWFpbjlDVDEiPgotCQk8Y29tcGxleENvbnRlbnQ+Ci0JCQk8ZXh0ZW5zaW9uIGJhc2U9InRuczpJbmM0Q1QxIj48L2V4dGVuc2lvbj4KLQkJPC9jb21wbGV4Q29udGVudD4KLQk8L2NvbXBsZXhUeXBlPgotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDA5Zy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC90ZXN0L01haW4wMDlnLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjMxZmE3ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC90ZXN0L01haW4wMDlnLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgeG1sbnM6cD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPgotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlMS54c2QiPjwvaW5jbHVkZT4KLQkKLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTIueHNkIj48L2luY2x1ZGU+Ci0KLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTMueHNkIj48L2luY2x1ZGU+Ci0JCi0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0luY2x1ZGU0LnhzZCI+PC9pbmNsdWRlPgotCQotCTxlbGVtZW50IG5hbWU9Ik1haW5FbGVtMSIgdHlwZT0idG5zOkluYzNDVDEiPgotCQk8YW5ub3RhdGlvbj4KLQkJCTxhcHBpbmZvPgotCQkJCTxwOkltcEVsZW0xPjwvcDpJbXBFbGVtMT4KLQkJCTwvYXBwaW5mbz4KLQkJPC9hbm5vdGF0aW9uPgotCTwvZWxlbWVudD4KLQotCTxjb21wbGV4VHlwZSBuYW1lPSJNYWluOUNUMSI+Ci0JCTxjb21wbGV4Q29udGVudD4KLQkJCTxleHRlbnNpb24gYmFzZT0idG5zOkluYzRDVDEiPjwvZXh0ZW5zaW9uPgotCQk8L2NvbXBsZXhDb250ZW50PgotCTwvY29tcGxleFR5cGU+Ci08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC90ZXN0L01haW4wMDloLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwOWgueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOTQ5N2Q4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwOWgueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB4bWxuczpwPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+Ci0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0luY2x1ZGUxLnhzZCI+PC9pbmNsdWRlPgotCQotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlMi54c2QiPjwvaW5jbHVkZT4KLQotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlMy54c2QiPjwvaW5jbHVkZT4KLQkKLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTQueHNkIj48L2luY2x1ZGU+Ci0JCi0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0luY2x1ZGU1LnhzZCI+PC9pbmNsdWRlPgotCQotCTxlbGVtZW50IG5hbWU9Ik1haW5FbGVtMSIgdHlwZT0idG5zOkluYzJDVDEiPgotCQk8YW5ub3RhdGlvbj4KLQkJCTxhcHBpbmZvPgotCQkJCTxwOkltcEVsZW0xPjwvcDpJbXBFbGVtMT4KLQkJCTwvYXBwaW5mbz4KLQkJPC9hbm5vdGF0aW9uPgotCTwvZWxlbWVudD4KLQotCTxjb21wbGV4VHlwZSBuYW1lPSJNYWluOUNUMSI+Ci0JCTxjb21wbGV4Q29udGVudD4KLQkJCTxleHRlbnNpb24gYmFzZT0idG5zOkluYzRDVDEiPjwvZXh0ZW5zaW9uPgotCQk8L2NvbXBsZXhDb250ZW50PgotCTwvY29tcGxleFR5cGU+Ci08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL3htbG5zQ2xlYW51cC9JbXBvcnQxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QveG1sbnNDbGVhbnVwL0ltcG9ydDEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjlmY2NlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QveG1sbnNDbGVhbnVwL0ltcG9ydDEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiAKLSAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IiAKLSAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW1wQ1QxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyIgbWF4T2NjdXJzPSIyNSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0KLSAgICA8eHNkOmdyb3VwIG5hbWU9IkltcEdyMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmdyb3VwPgotCi0gICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iSW1wQXR0cjEiIHR5cGU9InRuczpJbXBTVDEiPjwveHNkOmF0dHJpYnV0ZT4KLQotICAgIDx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iSW1wQXR0ckdyMSI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0MSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9IkltcEVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkltcFNUMSI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbXBTVDIiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkltcENUMiI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0dHIxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC94bWxuc0NsZWFudXAvSW5jbHVkZTEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC94bWxuc0NsZWFudXAvSW5jbHVkZTEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNGQ5NmQ3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QveG1sbnNDbGVhbnVwL0luY2x1ZGUxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgCi0gICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iIAotICAgIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW5jMUNUMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciIG1heE9jY3Vycz0iMjUiPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotCi0gICAgPHhzZDpncm91cCBuYW1lPSJJbmMxR3IxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Z3JvdXA+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJJbmMxQXR0cjEiIHR5cGU9InRuczpJbmMxU1QxIj48L3hzZDphdHRyaWJ1dGU+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZUdyb3VwIG5hbWU9IkluYzFBdHRyR3IxIj4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXQxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iSW5jMUVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkluYzFTVDEiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW5jMVNUMiI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW5jMUNUMiI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0dHIxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC94bWxuc0NsZWFudXAvdGVzdC9NYWluMDAxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QveG1sbnNDbGVhbnVwL3Rlc3QvTWFpbjAwMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliNjZiMWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC94bWxuc0NsZWFudXAvdGVzdC9NYWluMDAxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMDE9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMwMj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczAzPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMDQ9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMwNT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczA2PSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMDc9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMwOD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczA5PSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMTA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMxMT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczEyPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6cD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgotCi0JPGVsZW1lbnQgbmFtZT0iTWFpbkVsZW0wMDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PgotCQotCTxjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QwMDEiPgotCQk8c2VxdWVuY2U+Ci0JCQk8ZWxlbWVudCBuYW1lPSJDVDAwMUVsZW0wMDEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PgotCQkJPGVsZW1lbnQgcmVmPSJ0bnMwMTpNYWluRWxlbTAwMSI+PC9lbGVtZW50PgotCQkJPGFueT48L2FueT4KLQkJPC9zZXF1ZW5jZT4KLQk8L2NvbXBsZXhUeXBlPgotCi0JPGNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDAwMiI+Ci0JCTxjb21wbGV4Q29udGVudD4KLQkJCTxleHRlbnNpb24gYmFzZT0idG5zMDI6TWFpbkNUMDAxIj48L2V4dGVuc2lvbj4KLQkJPC9jb21wbGV4Q29udGVudD4KLQk8L2NvbXBsZXhUeXBlPgotCi0JPGNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDAwMyI+Ci0JCTxjb21wbGV4Q29udGVudD4KLQkJCTxyZXN0cmljdGlvbiBiYXNlPSJ0bnMwMzpNYWluQ1QwMDEiPjwvcmVzdHJpY3Rpb24+Ci0JCTwvY29tcGxleENvbnRlbnQ+Ci0JPC9jb21wbGV4VHlwZT4KLQotCTxjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QwMDQiPgotCQk8c2ltcGxlQ29udGVudD4KLQkJCTxleHRlbnNpb24gYmFzZT0ic3RyaW5nIj4KLQkJCQk8YW5ub3RhdGlvbj4KLQkJCQkJPGFwcGluZm8+PC9hcHBpbmZvPgotCQkJCTwvYW5ub3RhdGlvbj4KLQkJCQk8YXR0cmlidXRlIG5hbWU9ImF0dHIxIiB0eXBlPSJzaG9ydCI+PC9hdHRyaWJ1dGU+Ci0JCQkJPGF0dHJpYnV0ZUdyb3VwIHJlZj0idG5zMDQ6TWFpbkF0dHJHcjAwMSI+PC9hdHRyaWJ1dGVHcm91cD4KLQkJCQk8YW55QXR0cmlidXRlPjwvYW55QXR0cmlidXRlPgotCQkJPC9leHRlbnNpb24+Ci0JCTwvc2ltcGxlQ29udGVudD4KLQk8L2NvbXBsZXhUeXBlPgotCi0JPHNpbXBsZVR5cGUgbmFtZT0iTWFpblNUMDAxIj4KLQkJPHJlc3RyaWN0aW9uIGJhc2U9InN0cmluZyI+Ci0JCQk8ZW51bWVyYXRpb24gdmFsdWU9ImVudW0xIj48L2VudW1lcmF0aW9uPgotCQk8L3Jlc3RyaWN0aW9uPgotCTwvc2ltcGxlVHlwZT4KLQotCTxzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVDAwMiI+Ci0JCTxyZXN0cmljdGlvbiBiYXNlPSJ0bnMwNTpNYWluU1QwMDEiPjwvcmVzdHJpY3Rpb24+Ci0JPC9zaW1wbGVUeXBlPgotCi0JPHNpbXBsZVR5cGUgbmFtZT0iTWFpblNUMDAzIj4KLQkJPGxpc3QgaXRlbVR5cGU9InRuczA2Ok1haW5TVDAwMSI+PC9saXN0PgotCTwvc2ltcGxlVHlwZT4KLQotCTxzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVDAwNCI+Ci0JCTxsaXN0PgotCQkJPHNpbXBsZVR5cGU+Ci0JCQkJPHJlc3RyaWN0aW9uIGJhc2U9InRuczA3Ok1haW5TVDAwMSI+PC9yZXN0cmljdGlvbj4KLQkJCTwvc2ltcGxlVHlwZT4KLQkJPC9saXN0PgotCTwvc2ltcGxlVHlwZT4KLQotCi0JPHNpbXBsZVR5cGUgbmFtZT0iTWFpblNUMDA1Ij4KLQkJPHVuaW9uIG1lbWJlclR5cGVzPSJ0bnMwODpNYWluU1QwMDEgdG5zMDk6TWFpblNUMDAyIj48L3VuaW9uPgotCTwvc2ltcGxlVHlwZT4KLQotCTxhdHRyaWJ1dGUgbmFtZT0iTWFpbkF0dHIwMDEiIHR5cGU9InN0cmluZyI+PC9hdHRyaWJ1dGU+Ci0KLQk8YXR0cmlidXRlIG5hbWU9Ik1haW5BdHRyMDAyIiB0eXBlPSJzdHJpbmciPjwvYXR0cmlidXRlPgotCi0JPGF0dHJpYnV0ZUdyb3VwIG5hbWU9Ik1haW5BdHRyR3IwMDEiPgotCQk8YXR0cmlidXRlIHJlZj0idG5zMTA6TWFpbkF0dHIwMDEiPjwvYXR0cmlidXRlPgotCTwvYXR0cmlidXRlR3JvdXA+Ci0KLQk8YXR0cmlidXRlR3JvdXAgbmFtZT0iTWFpbkF0dHJHcjAwMiI+PC9hdHRyaWJ1dGVHcm91cD4KLQotCTxncm91cCBuYW1lPSJNYWluR3JvdXAwMDEiPgotCQk8c2VxdWVuY2U+Ci0JCQk8Z3JvdXAgcmVmPSJ0bnMxMTpNYWluR3JvdXAwMDIiPjwvZ3JvdXA+Ci0JCTwvc2VxdWVuY2U+Ci0JPC9ncm91cD4KLQkKLQk8ZWxlbWVudCBuYW1lPSJNYWluRWxlbTAwMiIgdHlwZT0ic3RyaW5nIiBzdWJzdGl0dXRpb25Hcm91cD0idG5zMTI6TWFpbkVsZW0wMDEiPjwvZWxlbWVudD4KLQkKLQk8Z3JvdXAgbmFtZT0iTWFpbkdyb3VwMDAyIj4KLQkJPHNlcXVlbmNlPgotCQkJPGVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InN0cmluZyI+Ci0JCQkJPGFubm90YXRpb24+Ci0JCQkJCTxhcHBpbmZvPgotCQkJCQkJPHA6SW1wRWxlbTE+PC9wOkltcEVsZW0xPgotCQkJCQk8L2FwcGluZm8+Ci0JCQkJPC9hbm5vdGF0aW9uPgotCQkJPC9lbGVtZW50PgotCQk8L3NlcXVlbmNlPgotCTwvZ3JvdXA+Ci0KLTwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QveG1sbnNDbGVhbnVwL3Rlc3QvTWFpbjAwMi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL3htbG5zQ2xlYW51cC90ZXN0L01haW4wMDIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYTAzOGNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QveG1sbnNDbGVhbnVwL3Rlc3QvTWFpbjAwMi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMDE9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMwMj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczAzPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMDQ9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMwNT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij4KLQotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlMS54c2QiPjwvaW5jbHVkZT4KLQkKLQk8ZWxlbWVudCBuYW1lPSJNYWluRWxlbTAwMSIgdHlwZT0idG5zMDE6SW5jMUNUMSI+Ci0JCTxhbm5vdGF0aW9uPgotCQkJPGFwcGluZm8+Ci0JCQkJPHA6SW1wRWxlbTE+PC9wOkltcEVsZW0xPgotCQkJPC9hcHBpbmZvPgotCQk8L2Fubm90YXRpb24+Ci0JPC9lbGVtZW50PgotCi0JPHNpbXBsZVR5cGUgbmFtZT0iTWFpblNUMDAxIj4KLQkJPHJlc3RyaWN0aW9uIGJhc2U9InN0cmluZyI+PC9yZXN0cmljdGlvbj4KLQk8L3NpbXBsZVR5cGU+Ci0KLQk8c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QwMDIiPgotCQk8cmVzdHJpY3Rpb24gYmFzZT0idG5zMDI6TWFpblNUMDAxIj48L3Jlc3RyaWN0aW9uPgotCTwvc2ltcGxlVHlwZT4KLQotCTxzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVDAwNSI+Ci0JCTx1bmlvbiBtZW1iZXJUeXBlcz0idG5zMDM6TWFpblNUMDAxICAgCi0JCXRuczA0Ok1haW5TVDAwMiAgIAotCQlzdHJpbmcgIAotICAgICAgICBpbnRlZ2VyICAgICAgICAiPjwvdW5pb24+Ci0JPC9zaW1wbGVUeXBlPgotCi08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL3htbG5zQ2xlYW51cC90ZXN0L01haW4wMDMueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC94bWxuc0NsZWFudXAvdGVzdC9NYWluMDAzLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzg4YjAzNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL3htbG5zQ2xlYW51cC90ZXN0L01haW4wMDMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTEwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMwMT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczAyPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMDM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMwND0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczA1PSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMDY9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMwNz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczA4PSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMDk9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMxMD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczExPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMTI9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczpwPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbkVsZW0wMDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDAwMSI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iQ1QwMDFFbGVtMDAxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCQkJPHhzZDplbGVtZW50IHJlZj0idG5zMDE6TWFpbkVsZW0wMDEiPjwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmFueT48L3hzZDphbnk+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QwMDIiPgotCQk8eHNkOmNvbXBsZXhDb250ZW50PgotCQkJPHhzZDpleHRlbnNpb24gYmFzZT0idG5zMDI6TWFpbkNUMDAxIj48L3hzZDpleHRlbnNpb24+Ci0JCTwveHNkOmNvbXBsZXhDb250ZW50PgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QwMDMiPgotCQk8eHNkOmNvbXBsZXhDb250ZW50PgotCQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ0bnMwMzpNYWluQ1QwMDEiPjwveHNkOnJlc3RyaWN0aW9uPgotCQk8L3hzZDpjb21wbGV4Q29udGVudD4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMDA0Ij4KLQkJPHhzZDpzaW1wbGVDb250ZW50PgotCQkJPHhzZDpleHRlbnNpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0JCQkJPHhzZDphbm5vdGF0aW9uPgotCQkJCQk8eHNkOmFwcGluZm8+PC94c2Q6YXBwaW5mbz4KLQkJCQk8L3hzZDphbm5vdGF0aW9uPgotCQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0dHIxIiB0eXBlPSJ4c2Q6c2hvcnQiPjwveHNkOmF0dHJpYnV0ZT4KLQkJCQk8eHNkOmF0dHJpYnV0ZUdyb3VwIHJlZj0idG5zMDQ6TWFpbkF0dHJHcjAwMSI+PC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0JCQkJPHhzZDphbnlBdHRyaWJ1dGU+PC94c2Q6YW55QXR0cmlidXRlPgotCQkJPC94c2Q6ZXh0ZW5zaW9uPgotCQk8L3hzZDpzaW1wbGVDb250ZW50PgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVDAwMSI+Ci0JCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0JCQk8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJlbnVtMSI+PC94c2Q6ZW51bWVyYXRpb24+Ci0JCTwveHNkOnJlc3RyaWN0aW9uPgotCTwveHNkOnNpbXBsZVR5cGU+Ci0KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUMDAyIj4KLQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ0bnMwNTpNYWluU1QwMDEiPjwveHNkOnJlc3RyaWN0aW9uPgotCTwveHNkOnNpbXBsZVR5cGU+Ci0KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUMDAzIj4KLQkJPHhzZDpsaXN0IGl0ZW1UeXBlPSJ0bnMwNjpNYWluU1QwMDEiPjwveHNkOmxpc3Q+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QwMDQiPgotCQk8eHNkOmxpc3Q+Ci0JCQk8eHNkOnNpbXBsZVR5cGU+Ci0JCQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ0bnMwNzpNYWluU1QwMDEiPjwveHNkOnJlc3RyaWN0aW9uPgotCQkJPC94c2Q6c2ltcGxlVHlwZT4KLQkJPC94c2Q6bGlzdD4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCi0KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUMDA1Ij4KLQkJPHhzZDp1bmlvbiBtZW1iZXJUeXBlcz0idG5zMDg6TWFpblNUMDAxIHRuczA5Ok1haW5TVDAwMiI+PC94c2Q6dW5pb24+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQotCTx4c2Q6YXR0cmlidXRlIG5hbWU9Ik1haW5BdHRyMDAxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0KLQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJNYWluQXR0cjAwMiIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotCi0JPHhzZDphdHRyaWJ1dGVHcm91cCBuYW1lPSJNYWluQXR0ckdyMDAxIj4KLQkJPHhzZDphdHRyaWJ1dGUgcmVmPSJ0bnMxMDpNYWluQXR0cjAwMSI+PC94c2Q6YXR0cmlidXRlPgotCTwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCi0JPHhzZDphdHRyaWJ1dGVHcm91cCBuYW1lPSJNYWluQXR0ckdyMDAyIj48L3hzZDphdHRyaWJ1dGVHcm91cD4KLQotCTx4c2Q6Z3JvdXAgbmFtZT0iTWFpbkdyb3VwMDAxIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6Z3JvdXAgcmVmPSJ0bnMxMTpNYWluR3JvdXAwMDIiPjwveHNkOmdyb3VwPgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpncm91cD4KLQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluRWxlbTAwMiIgdHlwZT0ieHNkOnN0cmluZyIgc3Vic3RpdHV0aW9uR3JvdXA9InRuczEyOk1haW5FbGVtMDAxIj48L3hzZDplbGVtZW50PgotCQotCTx4c2Q6Z3JvdXAgbmFtZT0iTWFpbkdyb3VwMDAyIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyI+Ci0JCQkJPHhzZDphbm5vdGF0aW9uPgotCQkJCQk8eHNkOmFwcGluZm8+Ci0JCQkJCQk8cDpJbXBFbGVtMT48L3A6SW1wRWxlbTE+Ci0JCQkJCTwveHNkOmFwcGluZm8+Ci0JCQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmdyb3VwPgotCi08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC94bWxuc0NsZWFudXAvdGVzdC9NYWluMDA0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QveG1sbnNDbGVhbnVwL3Rlc3QvTWFpbjAwNC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkY2YwZjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC94bWxuc0NsZWFudXAvdGVzdC9NYWluMDA0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMDE9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMwMj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczAzPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMDQ9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMwNT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczA2PSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMDc9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMwOD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczA5PSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMTA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMxMT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczEyPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6cD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbkVsZW0wMDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDAwMSI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iQ1QwMDFFbGVtMDAxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCQkJPHhzZDplbGVtZW50IHJlZj0idG5zMDE6TWFpbkVsZW0wMDEiPjwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmFueT48L3hzZDphbnk+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QwMDIiPgotCQk8eHNkOmNvbXBsZXhDb250ZW50PgotCQkJPHhzZDpleHRlbnNpb24gYmFzZT0idG5zMDE6TWFpbkNUMDAxIj48L3hzZDpleHRlbnNpb24+Ci0JCTwveHNkOmNvbXBsZXhDb250ZW50PgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QwMDMiPgotCQk8eHNkOmNvbXBsZXhDb250ZW50PgotCQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ0bnMwMTpNYWluQ1QwMDEiPjwveHNkOnJlc3RyaWN0aW9uPgotCQk8L3hzZDpjb21wbGV4Q29udGVudD4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMDA0Ij4KLQkJPHhzZDpzaW1wbGVDb250ZW50PgotCQkJPHhzZDpleHRlbnNpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0JCQkJPHhzZDphbm5vdGF0aW9uPgotCQkJCQk8eHNkOmFwcGluZm8+PC94c2Q6YXBwaW5mbz4KLQkJCQk8L3hzZDphbm5vdGF0aW9uPgotCQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0dHIxIiB0eXBlPSJ4c2Q6c2hvcnQiPjwveHNkOmF0dHJpYnV0ZT4KLQkJCQk8eHNkOmF0dHJpYnV0ZUdyb3VwIHJlZj0idG5zMDE6TWFpbkF0dHJHcjAwMSI+PC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0JCQkJPHhzZDphbnlBdHRyaWJ1dGU+PC94c2Q6YW55QXR0cmlidXRlPgotCQkJPC94c2Q6ZXh0ZW5zaW9uPgotCQk8L3hzZDpzaW1wbGVDb250ZW50PgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVDAwMSI+Ci0JCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0JCQk8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJlbnVtMSI+PC94c2Q6ZW51bWVyYXRpb24+Ci0JCTwveHNkOnJlc3RyaWN0aW9uPgotCTwveHNkOnNpbXBsZVR5cGU+Ci0KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUMDAyIj4KLQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ0bnMwMTpNYWluU1QwMDEiPjwveHNkOnJlc3RyaWN0aW9uPgotCTwveHNkOnNpbXBsZVR5cGU+Ci0KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUMDAzIj4KLQkJPHhzZDpsaXN0IGl0ZW1UeXBlPSJ0bnMwMTpNYWluU1QwMDEiPjwveHNkOmxpc3Q+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QwMDQiPgotCQk8eHNkOmxpc3Q+Ci0JCQk8eHNkOnNpbXBsZVR5cGU+Ci0JCQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ0bnMwMTpNYWluU1QwMDEiPjwveHNkOnJlc3RyaWN0aW9uPgotCQkJPC94c2Q6c2ltcGxlVHlwZT4KLQkJPC94c2Q6bGlzdD4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCi0KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUMDA1Ij4KLQkJPHhzZDp1bmlvbiBtZW1iZXJUeXBlcz0idG5zMDE6TWFpblNUMDAxIHRuczAxOk1haW5TVDAwMiI+PC94c2Q6dW5pb24+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQotCTx4c2Q6YXR0cmlidXRlIG5hbWU9Ik1haW5BdHRyMDAxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0KLQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJNYWluQXR0cjAwMiIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotCi0JPHhzZDphdHRyaWJ1dGVHcm91cCBuYW1lPSJNYWluQXR0ckdyMDAxIj4KLQkJPHhzZDphdHRyaWJ1dGUgcmVmPSJ0bnMwMTpNYWluQXR0cjAwMSI+PC94c2Q6YXR0cmlidXRlPgotCTwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCi0JPHhzZDphdHRyaWJ1dGVHcm91cCBuYW1lPSJNYWluQXR0ckdyMDAyIj48L3hzZDphdHRyaWJ1dGVHcm91cD4KLQotCTx4c2Q6Z3JvdXAgbmFtZT0iTWFpbkdyb3VwMDAxIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6Z3JvdXAgcmVmPSJ0bnMwMTpNYWluR3JvdXAwMDIiPjwveHNkOmdyb3VwPgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpncm91cD4KLQkKLQk8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbkVsZW0wMDIiIHR5cGU9InhzZDpzdHJpbmciIHN1YnN0aXR1dGlvbkdyb3VwPSJ0bnMwMTpNYWluRWxlbTAwMSI+PC94c2Q6ZWxlbWVudD4KLQotCTx4c2Q6Z3JvdXAgbmFtZT0iTWFpbkdyb3VwMDAyIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyI+Ci0JCQkJPHhzZDphbm5vdGF0aW9uPgotCQkJCQk8eHNkOmFwcGluZm8+Ci0JCQkJCQk8cDpJbXBFbGVtMT48L3A6SW1wRWxlbTE+Ci0JCQkJCTwveHNkOmFwcGluZm8+Ci0JCQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmdyb3VwPgotCi08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC94bWxuc0NsZWFudXAvdGVzdC9NYWluMDA1LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QveG1sbnNDbGVhbnVwL3Rlc3QvTWFpbjAwNS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3MTM5M2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC94bWxuc0NsZWFudXAvdGVzdC9NYWluMDA1LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMDE9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMwMj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczAzPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMDQ9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMwNT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczA2PSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMDc9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMwOD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczA5PSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMTA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMxMT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczEyPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6cD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbkVsZW0wMDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDAwMSI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iQ1QwMDFFbGVtMDAxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCQkJPHhzZDplbGVtZW50IHJlZj0iTWFpbkVsZW0wMDEiPjwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmFueT48L3hzZDphbnk+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QwMDIiPgotCQk8eHNkOmNvbXBsZXhDb250ZW50PgotCQkJPHhzZDpleHRlbnNpb24gYmFzZT0iTWFpbkNUMDAxIj48L3hzZDpleHRlbnNpb24+Ci0JCTwveHNkOmNvbXBsZXhDb250ZW50PgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QwMDMiPgotCQk8eHNkOmNvbXBsZXhDb250ZW50PgotCQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJNYWluQ1QwMDEiPjwveHNkOnJlc3RyaWN0aW9uPgotCQk8L3hzZDpjb21wbGV4Q29udGVudD4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMDA0Ij4KLQkJPHhzZDpzaW1wbGVDb250ZW50PgotCQkJPHhzZDpleHRlbnNpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0JCQkJPHhzZDphbm5vdGF0aW9uPgotCQkJCQk8eHNkOmFwcGluZm8+PC94c2Q6YXBwaW5mbz4KLQkJCQk8L3hzZDphbm5vdGF0aW9uPgotCQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0dHIxIiB0eXBlPSJ4c2Q6c2hvcnQiPjwveHNkOmF0dHJpYnV0ZT4KLQkJCQk8eHNkOmF0dHJpYnV0ZUdyb3VwIHJlZj0iTWFpbkF0dHJHcjAwMSI+PC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0JCQkJPHhzZDphbnlBdHRyaWJ1dGU+PC94c2Q6YW55QXR0cmlidXRlPgotCQkJPC94c2Q6ZXh0ZW5zaW9uPgotCQk8L3hzZDpzaW1wbGVDb250ZW50PgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVDAwMSI+Ci0JCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0JCQk8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJlbnVtMSI+PC94c2Q6ZW51bWVyYXRpb24+Ci0JCTwveHNkOnJlc3RyaWN0aW9uPgotCTwveHNkOnNpbXBsZVR5cGU+Ci0KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUMDAyIj4KLQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJNYWluU1QwMDEiPjwveHNkOnJlc3RyaWN0aW9uPgotCTwveHNkOnNpbXBsZVR5cGU+Ci0KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUMDAzIj4KLQkJPHhzZDpsaXN0IGl0ZW1UeXBlPSJNYWluU1QwMDEiPjwveHNkOmxpc3Q+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QwMDQiPgotCQk8eHNkOmxpc3Q+Ci0JCQk8eHNkOnNpbXBsZVR5cGU+Ci0JCQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJNYWluU1QwMDEiPjwveHNkOnJlc3RyaWN0aW9uPgotCQkJPC94c2Q6c2ltcGxlVHlwZT4KLQkJPC94c2Q6bGlzdD4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCi0KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUMDA1Ij4KLQkJPHhzZDp1bmlvbiBtZW1iZXJUeXBlcz0iTWFpblNUMDAxIE1haW5TVDAwMiI+PC94c2Q6dW5pb24+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQotCTx4c2Q6YXR0cmlidXRlIG5hbWU9Ik1haW5BdHRyMDAxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0KLQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJNYWluQXR0cjAwMiIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotCi0JPHhzZDphdHRyaWJ1dGVHcm91cCBuYW1lPSJNYWluQXR0ckdyMDAxIj4KLQkJPHhzZDphdHRyaWJ1dGUgcmVmPSJNYWluQXR0cjAwMSI+PC94c2Q6YXR0cmlidXRlPgotCTwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCi0JPHhzZDphdHRyaWJ1dGVHcm91cCBuYW1lPSJNYWluQXR0ckdyMDAyIj48L3hzZDphdHRyaWJ1dGVHcm91cD4KLQotCTx4c2Q6Z3JvdXAgbmFtZT0iTWFpbkdyb3VwMDAxIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6Z3JvdXAgcmVmPSJNYWluR3JvdXAwMDIiPjwveHNkOmdyb3VwPgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpncm91cD4KLQkKLQk8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbkVsZW0wMDIiIHR5cGU9InhzZDpzdHJpbmciIHN1YnN0aXR1dGlvbkdyb3VwPSJNYWluRWxlbTAwMSI+PC94c2Q6ZWxlbWVudD4KLQotCTx4c2Q6Z3JvdXAgbmFtZT0iTWFpbkdyb3VwMDAyIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyI+Ci0JCQkJPHhzZDphbm5vdGF0aW9uPgotCQkJCQk8eHNkOmFwcGluZm8+Ci0JCQkJCQk8cDpJbXBFbGVtMT48L3A6SW1wRWxlbTE+Ci0JCQkJCTwveHNkOmFwcGluZm8+Ci0JCQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmdyb3VwPgotCi08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC94bWxuc0NsZWFudXAvdGVzdC9NYWluMDA2LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QveG1sbnNDbGVhbnVwL3Rlc3QvTWFpbjAwNi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkYmIyZTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC94bWxuc0NsZWFudXAvdGVzdC9NYWluMDA2LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSAKLSAgICB4bWxuczp0bnMwMT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IiBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluRWxlbTAwMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMDAxIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJDVDAwMUVsZW0wMDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJNYWluRWxlbTAwMSI+PC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6YW55PjwveHNkOmFueT4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDAwMiI+Ci0JCTx4c2Q6Y29tcGxleENvbnRlbnQ+Ci0JCQk8eHNkOmV4dGVuc2lvbiBiYXNlPSJNYWluQ1QwMDEiPjwveHNkOmV4dGVuc2lvbj4KLQkJPC94c2Q6Y29tcGxleENvbnRlbnQ+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDAwMyI+Ci0JCTx4c2Q6Y29tcGxleENvbnRlbnQ+Ci0JCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9Ik1haW5DVDAwMSI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0JCTwveHNkOmNvbXBsZXhDb250ZW50PgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QwMDQiPgotCQk8eHNkOnNpbXBsZUNvbnRlbnQ+Ci0JCQk8eHNkOmV4dGVuc2lvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLQkJCQk8eHNkOmFubm90YXRpb24+Ci0JCQkJCTx4c2Q6YXBwaW5mbz48L3hzZDphcHBpbmZvPgotCQkJCTwveHNkOmFubm90YXRpb24+Ci0JCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXR0cjEiIHR5cGU9InhzZDpzaG9ydCI+PC94c2Q6YXR0cmlidXRlPgotCQkJCTx4c2Q6YXR0cmlidXRlR3JvdXAgcmVmPSJNYWluQXR0ckdyMDAxIj48L3hzZDphdHRyaWJ1dGVHcm91cD4KLQkJCQk8eHNkOmFueUF0dHJpYnV0ZT48L3hzZDphbnlBdHRyaWJ1dGU+Ci0JCQk8L3hzZDpleHRlbnNpb24+Ci0JCTwveHNkOnNpbXBsZUNvbnRlbnQ+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUMDAxIj4KLQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLQkJCTx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImVudW0xIj48L3hzZDplbnVtZXJhdGlvbj4KLQkJPC94c2Q6cmVzdHJpY3Rpb24+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QwMDIiPgotCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9Ik1haW5TVDAwMSI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QwMDMiPgotCQk8eHNkOmxpc3QgaXRlbVR5cGU9Ik1haW5TVDAwMSI+PC94c2Q6bGlzdD4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCi0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVDAwNCI+Ci0JCTx4c2Q6bGlzdD4KLQkJCTx4c2Q6c2ltcGxlVHlwZT4KLQkJCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9Ik1haW5TVDAwMSI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0JCQk8L3hzZDpzaW1wbGVUeXBlPgotCQk8L3hzZDpsaXN0PgotCTwveHNkOnNpbXBsZVR5cGU+Ci0KLQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QwMDUiPgotCQk8eHNkOnVuaW9uIG1lbWJlclR5cGVzPSJNYWluU1QwMDEgTWFpblNUMDAyIj48L3hzZDp1bmlvbj4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCi0JPHhzZDphdHRyaWJ1dGUgbmFtZT0iTWFpbkF0dHIwMDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLQotCTx4c2Q6YXR0cmlidXRlIG5hbWU9Ik1haW5BdHRyMDAyIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0KLQk8eHNkOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Ik1haW5BdHRyR3IwMDEiPgotCQk8eHNkOmF0dHJpYnV0ZSByZWY9Ik1haW5BdHRyMDAxIj48L3hzZDphdHRyaWJ1dGU+Ci0JPC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0KLQk8eHNkOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Ik1haW5BdHRyR3IwMDIiPjwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCi0JPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXAwMDEiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDpncm91cCByZWY9Ik1haW5Hcm91cDAwMiI+PC94c2Q6Z3JvdXA+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmdyb3VwPgotCQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluRWxlbTAwMiIgdHlwZT0ieHNkOnN0cmluZyIgc3Vic3RpdHV0aW9uR3JvdXA9Ik1haW5FbGVtMDAxIj48L3hzZDplbGVtZW50PgotCi0JPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXAwMDIiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIj4KLQkJCQk8eHNkOmFubm90YXRpb24+Ci0JCQkJCTx4c2Q6YXBwaW5mbz4KLQkJCQkJCTxwOkltcEVsZW0xPjwvcDpJbXBFbGVtMT4KLQkJCQkJPC94c2Q6YXBwaW5mbz4KLQkJCQk8L3hzZDphbm5vdGF0aW9uPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Z3JvdXA+Ci0KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL3htbG5zQ2xlYW51cC90ZXN0L01haW4wMDcueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC94bWxuc0NsZWFudXAvdGVzdC9NYWluMDA3LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWUzYWNjZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL3htbG5zQ2xlYW51cC90ZXN0L01haW4wMDcueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTAwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczpwPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxucz0iaHR0cDovL1VudXNlZCI+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbkVsZW0wMDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDAwMSI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iQ1QwMDFFbGVtMDAxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCQkJPHhzZDplbGVtZW50IHJlZj0idG5zOk1haW5FbGVtMDAxIj48L3hzZDplbGVtZW50PgotCQkJPHhzZDphbnk+PC94c2Q6YW55PgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMDAyIj4KLQkJPHhzZDpjb21wbGV4Q29udGVudD4KLQkJCTx4c2Q6ZXh0ZW5zaW9uIGJhc2U9InRuczpNYWluQ1QwMDEiPjwveHNkOmV4dGVuc2lvbj4KLQkJPC94c2Q6Y29tcGxleENvbnRlbnQ+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDAwMyI+Ci0JCTx4c2Q6Y29tcGxleENvbnRlbnQ+Ci0JCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InRuczpNYWluQ1QwMDEiPjwveHNkOnJlc3RyaWN0aW9uPgotCQk8L3hzZDpjb21wbGV4Q29udGVudD4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMDA0Ij4KLQkJPHhzZDpzaW1wbGVDb250ZW50PgotCQkJPHhzZDpleHRlbnNpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0JCQkJPHhzZDphbm5vdGF0aW9uPgotCQkJCQk8eHNkOmFwcGluZm8+PC94c2Q6YXBwaW5mbz4KLQkJCQk8L3hzZDphbm5vdGF0aW9uPgotCQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0dHIxIiB0eXBlPSJ4c2Q6c2hvcnQiPjwveHNkOmF0dHJpYnV0ZT4KLQkJCQk8eHNkOmF0dHJpYnV0ZUdyb3VwIHJlZj0idG5zOk1haW5BdHRyR3IwMDEiPjwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCQkJCTx4c2Q6YW55QXR0cmlidXRlPjwveHNkOmFueUF0dHJpYnV0ZT4KLQkJCTwveHNkOmV4dGVuc2lvbj4KLQkJPC94c2Q6c2ltcGxlQ29udGVudD4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QwMDEiPgotCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotCQkJPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iZW51bTEiPjwveHNkOmVudW1lcmF0aW9uPgotCQk8L3hzZDpyZXN0cmljdGlvbj4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCi0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVDAwMiI+Ci0JCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0idG5zOk1haW5TVDAwMSI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QwMDMiPgotCQk8eHNkOmxpc3QgaXRlbVR5cGU9InRuczpNYWluU1QwMDEiPjwveHNkOmxpc3Q+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QwMDQiPgotCQk8eHNkOmxpc3Q+Ci0JCQk8eHNkOnNpbXBsZVR5cGU+Ci0JCQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ0bnM6TWFpblNUMDAxIj48L3hzZDpyZXN0cmljdGlvbj4KLQkJCTwveHNkOnNpbXBsZVR5cGU+Ci0JCTwveHNkOmxpc3Q+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQotCi0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVDAwNSI+Ci0JCTx4c2Q6dW5pb24gbWVtYmVyVHlwZXM9InRuczpNYWluU1QwMDEgdG5zOk1haW5TVDAwMiI+PC94c2Q6dW5pb24+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQotCTx4c2Q6YXR0cmlidXRlIG5hbWU9Ik1haW5BdHRyMDAxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0KLQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJNYWluQXR0cjAwMiIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotCi0JPHhzZDphdHRyaWJ1dGVHcm91cCBuYW1lPSJNYWluQXR0ckdyMDAxIj4KLQkJPHhzZDphdHRyaWJ1dGUgcmVmPSJ0bnM6TWFpbkF0dHIwMDEiPjwveHNkOmF0dHJpYnV0ZT4KLQk8L3hzZDphdHRyaWJ1dGVHcm91cD4KLQotCTx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iTWFpbkF0dHJHcjAwMiI+PC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0KLQk8eHNkOmdyb3VwIG5hbWU9Ik1haW5Hcm91cDAwMSI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmdyb3VwIHJlZj0idG5zOk1haW5Hcm91cDAwMiI+PC94c2Q6Z3JvdXA+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmdyb3VwPgotCQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluRWxlbTAwMiIgdHlwZT0ieHNkOnN0cmluZyIgc3Vic3RpdHV0aW9uR3JvdXA9InRuczpNYWluRWxlbTAwMSI+PC94c2Q6ZWxlbWVudD4KLQotCTx4c2Q6Z3JvdXAgbmFtZT0iTWFpbkdyb3VwMDAyIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyI+Ci0JCQkJPHhzZDphbm5vdGF0aW9uPgotCQkJCQk8eHNkOmFwcGluZm8+Ci0JCQkJCQk8cDpJbXBFbGVtMT48L3A6SW1wRWxlbTE+Ci0JCQkJCTwveHNkOmFwcGluZm8+Ci0JCQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmdyb3VwPgotCi08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC94bWxuc0NsZWFudXAvdGVzdC9NYWluMDA4LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QveG1sbnNDbGVhbnVwL3Rlc3QvTWFpbjAwOC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhNTk5NDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC94bWxuc0NsZWFudXAvdGVzdC9NYWluMDA4LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6cD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM9Imh0dHA6Ly9Vc2VkIj4KLQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluRWxlbTAwMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMDAxIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJDVDAwMUVsZW0wMDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJ0bnM6TWFpbkVsZW0wMDEiPjwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmFueT48L3hzZDphbnk+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QwMDIiPgotCQk8eHNkOmNvbXBsZXhDb250ZW50PgotCQkJPHhzZDpleHRlbnNpb24gYmFzZT0idG5zOk1haW5DVDAwMSI+PC94c2Q6ZXh0ZW5zaW9uPgotCQk8L3hzZDpjb21wbGV4Q29udGVudD4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMDAzIj4KLQkJPHhzZDpjb21wbGV4Q29udGVudD4KLQkJCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0idG5zOk1haW5DVDAwMSI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0JCTwveHNkOmNvbXBsZXhDb250ZW50PgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QwMDQiPgotCQk8eHNkOnNpbXBsZUNvbnRlbnQ+Ci0JCQk8eHNkOmV4dGVuc2lvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLQkJCQk8eHNkOmFubm90YXRpb24+Ci0JCQkJCTx4c2Q6YXBwaW5mbz48L3hzZDphcHBpbmZvPgotCQkJCTwveHNkOmFubm90YXRpb24+Ci0JCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXR0cjEiIHR5cGU9InhzZDpzaG9ydCI+PC94c2Q6YXR0cmlidXRlPgotCQkJCTx4c2Q6YXR0cmlidXRlR3JvdXAgcmVmPSJ0bnM6TWFpbkF0dHJHcjAwMSI+PC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0JCQkJPHhzZDphbnlBdHRyaWJ1dGU+PC94c2Q6YW55QXR0cmlidXRlPgotCQkJPC94c2Q6ZXh0ZW5zaW9uPgotCQk8L3hzZDpzaW1wbGVDb250ZW50PgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVDAwMSI+Ci0JCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0JCQk8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJlbnVtMSI+PC94c2Q6ZW51bWVyYXRpb24+Ci0JCTwveHNkOnJlc3RyaWN0aW9uPgotCTwveHNkOnNpbXBsZVR5cGU+Ci0KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUMDAyIj4KLQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ0bnM6TWFpblNUMDAxIj48L3hzZDpyZXN0cmljdGlvbj4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCi0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVDAwMyI+Ci0JCTx4c2Q6bGlzdCBpdGVtVHlwZT0idG5zOk1haW5TVDAwMSI+PC94c2Q6bGlzdD4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCi0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVDAwNCI+Ci0JCTx4c2Q6bGlzdD4KLQkJCTx4c2Q6c2ltcGxlVHlwZT4KLQkJCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InRuczpNYWluU1QwMDEiPjwveHNkOnJlc3RyaWN0aW9uPgotCQkJPC94c2Q6c2ltcGxlVHlwZT4KLQkJPC94c2Q6bGlzdD4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCi0KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUMDA1Ij4KLQkJPHhzZDp1bmlvbiBtZW1iZXJUeXBlcz0idG5zOk1haW5TVDAwMSB0bnM6TWFpblNUMDAyIj48L3hzZDp1bmlvbj4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCi0JPHhzZDphdHRyaWJ1dGUgbmFtZT0iTWFpbkF0dHIwMDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLQotCTx4c2Q6YXR0cmlidXRlIG5hbWU9Ik1haW5BdHRyMDAyIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0KLQk8eHNkOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Ik1haW5BdHRyR3IwMDEiPgotCQk8eHNkOmF0dHJpYnV0ZSByZWY9InRuczpNYWluQXR0cjAwMSI+PC94c2Q6YXR0cmlidXRlPgotCTwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCi0JPHhzZDphdHRyaWJ1dGVHcm91cCBuYW1lPSJNYWluQXR0ckdyMDAyIj48L3hzZDphdHRyaWJ1dGVHcm91cD4KLQotCTx4c2Q6Z3JvdXAgbmFtZT0iTWFpbkdyb3VwMDAxIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6Z3JvdXAgcmVmPSJ0bnM6TWFpbkdyb3VwMDAyIj48L3hzZDpncm91cD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Z3JvdXA+Ci0JCi0JPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtMDAyIiB0eXBlPSJ4c2Q6c3RyaW5nIiBzdWJzdGl0dXRpb25Hcm91cD0idG5zOk1haW5FbGVtMDAxIj48L3hzZDplbGVtZW50PgotCi0JPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXAwMDIiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIj4KLQkJCQk8eHNkOmFubm90YXRpb24+Ci0JCQkJCTx4c2Q6YXBwaW5mbz4KLQkJCQkJCTxJbXBFbGVtMT48L0ltcEVsZW0xPgotCQkJCQk8L3hzZDphcHBpbmZvPgotCQkJCTwveHNkOmFubm90YXRpb24+Ci0JCQk8L3hzZDplbGVtZW50PgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpncm91cD4KLQotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2YzYwMjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMvIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNCIvPgotCTxjbGFzc3BhdGhlbnRyeSBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiIGtpbmQ9ImNvbiI+Ci0JCTxhY2Nlc3NydWxlcz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49Im9yZy9lY2xpcHNlL3dzdC8qKiIvPgotCQk8L2FjY2Vzc3J1bGVzPgotCTwvY2xhc3NwYXRoZW50cnk+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy8uY3ZzaWdub3JlIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwMzc1MzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLWJpbgotYnVpbGQueG1sCi12YWxpZGF0ZXhzZHRlc3RzLmphcgotdGVtcC5mb2xkZXIKLWphdmFDb21waWxlci52YWxpZGF0ZXhzZHRlc3RzLmphci5hcmdzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0OGNkNDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZmE1YzkxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjMyIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotZW5jb2RpbmcvPHByb2plY3Q+PUlTTy04ODU5LTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlYzU3NTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNNb24gQXByIDE3IDAxOjQ4OjM5IEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotbGluZS5zZXBhcmF0b3I9XHJcbgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmN2JhYzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLSNTYXQgQXVnIDE5IDE2OjMxOjQzIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5jbGVhbk91dHB1dEZvbGRlcj1jbGVhbgotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5kdXBsaWNhdGVSZXNvdXJjZVRhc2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5pbnZhbGlkQ2xhc3NwYXRoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5yZXNvdXJjZUNvcHlFeGNsdXNpb25GaWx0ZXI9Ki5sYXVuY2gKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNpcmN1bGFyQ2xhc3NwYXRoPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGguZXhjbHVzaW9uUGF0dGVybnM9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLm11bHRpcGxlT3V0cHV0TG9jYXRpb25zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZG9jLmNvbW1lbnQuc3VwcG9ydD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5tYXhQcm9ibGVtUGVyVW5pdD0xMDAKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NEZXByZWNhdGVkUmVmPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzTm90VmlzaWJsZVJlZj1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHJpdmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c092ZXJyaWRpbmc9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wdWJsaWMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wcml2YXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuc2FmZVR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGF0aWJsZUpES0xldmVsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wbGV0ZUNsYXNzcGF0aD1lcnJvcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzAxYzdhZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotI01vbiBBcHIgMTcgMDE6NDg6MzkgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1pbnRlcm5hbC5kZWZhdWx0LmNvbXBsaWFuY2U9ZGVmYXVsdAotb3JnLmVjbGlwc2UuamR0LnVpLnRleHQuY3VzdG9tX2NvZGVfdGVtcGxhdGVzPTw/eG1sIHZlcnNpb25cPSIxLjAiIGVuY29kaW5nXD0iVVRGLTgiPz5cclxuPHRlbXBsYXRlcy8+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU5MzY4Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozMiBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLmVuYWJsZS5wcm9qZWN0LnJlZmFjdG9yaW5nLmhpc3Rvcnk9ZmFsc2UKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjNTIyYmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0jTW9uIEFwciAxNyAwMjowMTozMyBFRFQgMjAwNgotY29tcGlsZXJzLmluY29tcGF0aWJsZS1lbnZpcm9ubWVudD0wCi1jb21waWxlcnMucC5idWlsZD0wCi1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLmlsbGVnYWwtYXR0LXZhbHVlPTAKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0wCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0wCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy5wLnVudXNlZC1lbGVtZW50LW9yLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWY4ZjdjYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUuMAotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzCi1CdW5kbGUtVmVyc2lvbjogMS4wLjQwMS5xdWFsaWZpZXIKLUJ1bmRsZS1DbGFzc1BhdGg6IHZhbGlkYXRleHNkdGVzdHMuamFyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMuaW50ZXJuYWwuWFNEVmFsaWRhdGlvblRlc3RzUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvci4wCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcywKLSBvcmcuanVuaXQ7YnVuZGxlLXZlcnNpb249IlszLjguMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZSwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCi0gb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLAotIG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXIKLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLmludGVybmFsLnZhbGlkYXRpb247eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3QueHNkLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzLmludGVybmFsO3gtaW50ZXJuYWw6PXRydWUKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNAotQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9hYm91dC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTlkZjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5KdW5lLCAyMDA4PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2Y2ZlYWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotYmluLmluY2x1ZGVzID0gdmFsaWRhdGV4c2R0ZXN0cy5qYXIsXAotICAgICAgICAgICAgICAgdGVzdC54bWwsXAotICAgICAgICAgICAgICAgdGVzdHJlc291cmNlcy8sXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMKLXNvdXJjZS52YWxpZGF0ZXhzZHRlc3RzLmphciA9IHNyYy8gCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvcGx1Z2luLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhMGQ4NGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgcHJvcGVydGllcyBmaWxlIGZvciBvcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMKLUJ1bmRsZS1WZW5kb3IuMCA9IEVjbGlwc2UKLUJ1bmRsZS1OYW1lLjAgPSBYU0QgVmFsaWRhdGlvbiBUZXN0cyBQbHVnLWluClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9YU0RWYWxpZGF0aW9uQ29uZmlndXJhdGlvblRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vWFNEVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb25UZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5ODNkNzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9YU0RWYWxpZGF0aW9uQ29uZmlndXJhdGlvblRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2QuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi0vKioKLSAqIFRlc3QgdGhlIFhTRFZhbGlkYXRpb25Db25maWd1cmF0aW9uIGNsYXNzLgotICovCi1wdWJsaWMgY2xhc3MgWFNEVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb25UZXN0IGV4dGVuZHMgVGVzdENhc2UKLXsKLSAgWFNEVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbjsKLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIAotICB7Ci0Jc3VwZXIuc2V0VXAoKTsKLQljb25maWd1cmF0aW9uID0gbmV3IFhTRFZhbGlkYXRpb25Db25maWd1cmF0aW9uKCk7Ci0gIH0KLQotCi0gIHByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiAKLSAgewotCWNvbmZpZ3VyYXRpb24gPSBudWxsOwotCXN1cGVyLnRlYXJEb3duKCk7Ci0gIH0KLQotCi0gIC8qKgotICAgKiBUZXN0IHRoZSBkZWZhdWx0IHNldHRpbmcgb2YgdGhlIEhPTk9VUl9BTExfU0NIRU1BX0xPQ0FUSU9OUyBmZWF0dXJlLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFNldEhvbm91ckFsbFNjaGVtYUxvY2F0aW9uc0ZlYXR1cmVEZWZhdWx0KCkKLSAgewotCXRyeQotCXsKLQkJYXNzZXJ0RmFsc2UoIlRoZSBIT05PVVJfQUxMX1NDSEVNQV9MT0NBVElPTlMgZmVhdHVyZSBpcyBub3Qgc2V0IGJ5IGRlZmF1bHQgdG8gZmFsc2UuIiwgY29uZmlndXJhdGlvbi5nZXRGZWF0dXJlKFhTRFZhbGlkYXRpb25Db25maWd1cmF0aW9uLkhPTk9VUl9BTExfU0NIRU1BX0xPQ0FUSU9OUykpOwotCX0KLQljYXRjaChFeGNlcHRpb24gZSkKLQl7Ci0JICBmYWlsKCJVbmFibGUgdG8gc2V0IHJlYWQgdGhlIEhPTk9VUl9BTExfU0NIRU1BX0xPQ0FUSU9OUyBmZWF0dXJlOiAiICsgZSk7Ci0JfQotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCBzZXR0aW5nIHRoZSBIT05PVVJfQUxMX1NDSEVNQV9MT0NBVElPTlMgZmVhdHVyZSB0byB0cnVlLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFNldEhvbm91ckFsbFNjaGVtYUxvY2F0aW9uc0ZlYXR1cmVUcnVlKCkKLSAgewotCXRyeQotCXsKLQkgIGNvbmZpZ3VyYXRpb24uc2V0RmVhdHVyZShYU0RWYWxpZGF0aW9uQ29uZmlndXJhdGlvbi5IT05PVVJfQUxMX1NDSEVNQV9MT0NBVElPTlMsIHRydWUpOwotCSAgYXNzZXJ0VHJ1ZSgiVGhlIEhPTk9VUl9BTExfU0NIRU1BX0xPQ0FUSU9OUyBmZWF0dXJlIGlzIG5vdCBzZXQgdG8gdHJ1ZS4iLCBjb25maWd1cmF0aW9uLmdldEZlYXR1cmUoWFNEVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24uSE9OT1VSX0FMTF9TQ0hFTUFfTE9DQVRJT05TKSk7Ci0JfQotCWNhdGNoKEV4Y2VwdGlvbiBlKQotCXsKLQkgIGZhaWwoIlVuYWJsZSB0byBzZXQgSE9OT1VSX0FMTF9TQ0hFTUFfTE9DQVRJT05TIHRvIHRydWU6ICIgKyBlKTsKLQl9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IHNldHRpbmcgdGhlIEhPTk9VUl9BTExfU0NIRU1BX0xPQ0FUSU9OUyBmZWF0dXJlIHRvIGZhbHNlLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFNldEhvbm91ckFsbFNjaGVtYUxvY2F0aW9uc0ZlYXR1cmVGYWxzZSgpCi0gIHsKLQl0cnkKLQl7Ci0JICBjb25maWd1cmF0aW9uLnNldEZlYXR1cmUoWFNEVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24uSE9OT1VSX0FMTF9TQ0hFTUFfTE9DQVRJT05TLCBmYWxzZSk7Ci0JICBhc3NlcnRGYWxzZSgiVGhlIEhPTk9VUl9BTExfU0NIRU1BX0xPQ0FUSU9OUyBmZWF0dXJlIGlzIG5vdCBzZXQgdG8gZmFsc2UuIiwgY29uZmlndXJhdGlvbi5nZXRGZWF0dXJlKFhTRFZhbGlkYXRpb25Db25maWd1cmF0aW9uLkhPTk9VUl9BTExfU0NIRU1BX0xPQ0FUSU9OUykpOwotCX0KLQljYXRjaChFeGNlcHRpb24gZSkKLQl7Ci0JICBmYWlsKCJVbmFibGUgdG8gc2V0IEhPTk9VUl9BTExfU0NIRU1BX0xPQ0FUSU9OUyB0byBmYWxzZTogIiArIGUpOwotCX0KLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3Qgc2V0dGluZyBhIGZlYXR1cmUgdGhhdCBkb2Vzbid0IGV4aXN0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFNldE5vdEV4aXN0YW50RmVhdHVyZSgpCi0gIHsKLQl0cnkKLQl7Ci0JICBjb25maWd1cmF0aW9uLnNldEZlYXR1cmUoIk5PTl9FWElTVEFOVF9GRUFUVVJFIiwgZmFsc2UpOwotCSAgZmFpbCgiU2V0dGluZyBhIG5vbiBleGlzdGFudCBmZWF0dXJlIGRpZCBub3QgcHJvZHVjZSBhbiBleGNlcHRpb24uIik7Ci0JfQotCWNhdGNoKEV4Y2VwdGlvbiBlKQotCXsKLQkgIC8vIFRoZSB0ZXN0IHN1Y2NlZWRzIGlmIHRoZSBleGNlcHRpb24gaXMgY2F1Z2h0LgotCX0KLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgZ2V0dGluZyBhIGZlYXR1cmUgdGhhdCBkb2Vzbid0IGV4aXN0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEdldE5vdEV4aXN0YW50RmVhdHVyZSgpCi0gIHsKLQl0cnkKLQl7Ci0JICBjb25maWd1cmF0aW9uLmdldEZlYXR1cmUoIk5PTl9FWElTVEFOVF9GRUFUVVJFIik7Ci0JICBmYWlsKCJHZXR0aW5nIGEgbm9uIGV4aXN0YW50IGZlYXR1cmUgZGlkIG5vdCBwcm9kdWNlIGFuIGV4Y2VwdGlvbi4iKTsKLQl9Ci0JY2F0Y2goRXhjZXB0aW9uIGUpCi0JewotCSAgLy8gVGhlIHRlc3Qgc3VjY2VlZHMgaWYgdGhlIGV4Y2VwdGlvbiBpcyBjYXVnaHQuCi0JfQotICB9Ci0gIAotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lY2xpcHNlL1ZhbGlkYXRvclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9WYWxpZGF0b3JUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2OGI0MTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lY2xpcHNlL1ZhbGlkYXRvclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2QuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2U7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5jb3JlLk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5OZXN0ZWRWYWxpZGF0b3JDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuVmFsaWRhdGlvbk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5WYWxpZGF0aW9uUmVwb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbC5YU0RWYWxpZGF0aW9uVGVzdHNQbHVnaW47Ci0KLS8qKgotICogQSB0ZXN0IGNsYXNzIGZvciB0aGUgVmFsaWRhdG9yIGNsYXNzLgotICovCi1wdWJsaWMgY2xhc3MgVmFsaWRhdG9yVGVzdCBleHRlbmRzIFRlc3RDYXNlIAotewotICBWYWxpZGF0b3JXcmFwcGVyIHZhbGlkYXRvciA9IG5ldyBWYWxpZGF0b3JXcmFwcGVyKCk7Ci0JICAKLSAgLyoqCi0gICAqIENyZWF0ZSBhIHRlc3RzIHN1aXRlIGZyb20gdGhpcyB0ZXN0IGNsYXNzLgotICAgKiAKLSAgICogQHJldHVybiBBIHRlc3Qgc3VpdGUgY29udGFpbmluZyB0aGlzIHRlc3QgY2xhc3MuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoVmFsaWRhdG9yVGVzdC5jbGFzcyk7Ci0gIH0KLQkgIAotICAvKioKLSAgICogVGVzdCB0aGUgYWRkSW5mb1RvTWVzc2FnZSBtZXRob2QuIFRoZSBmb2xsb3dpbmcgdGVzdHMgYXJlIHBlcmZvcm1lZDo8YnIvPgotICAgKiAxLiBXaGVuIHRoZSB2YWxpZGF0aW9uIG1lc3NhZ2UgY29udGFpbnMgYSBudWxsIGtleSBub3RoaW5nIGlzIGFkZGVkIHRvIHRoZSBtZXNzYWdlLjxici8+Ci0gICAqIDIuIFdoZW4gdGhlIG1lc3NhZ2UgY29udGFpbnMgdGhlIGtleSAiRU5USVJFX0VMRU1FTlQiIHRoZSB0aHJlZSBhdHRyaWJ1dGVzIGFyZSBhZGRlZAotICAgKiB0byB0aGUgbWV0aG9kIGFuZCB0aGUgU1FVSUdHTEVfTkFNRV9PUl9WQUxVRV9BVFRSSUJVVEUgaXMgbnVsbC48YnIvPgotICAgKiAzLiBXaGVuIHRoZSBtZXNzYWdlIGNvbnRhaW5zIHRoZSBrZXkgIkVudGl0eU5vdERlY2xhcmVkIiB0aGUgdGhyZWUgYXR0cmlidXRlcyBhcmUgc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEFkZEluZm9Ub01lc3NhZ2UoKQotICB7Ci0gICAgLy8gVGhlc2Ugc3RyaW5ncyBhcmUgY29tbW9uIGFkZGl0aW9uIGluZm9ybWF0aW9uIHR5cGVzLgotCVN0cmluZyBDT0xVTU5fTlVNQkVSX0FUVFJJQlVURSA9ICJjb2x1bW5OdW1iZXIiOyAvLyROT04tTkxTLTEkCi0JU3RyaW5nIFNRVUlHR0xFX1NFTEVDVElPTl9TVFJBVEVHWV9BVFRSSUJVVEUgPSAic3F1aWdnbGVTZWxlY3Rpb25TdHJhdGVneSI7IC8vJE5PTi1OTFMtMSQKLQlTdHJpbmcgU1FVSUdHTEVfTkFNRV9PUl9WQUxVRV9BVFRSSUJVVEUgPSAic3F1aWdnbGVOYW1lT3JWYWx1ZSI7IC8vJE5PTi1OTFMtMSQKLQkKLQkvLyBUZXN0IHRoYXQgdGhlIG1lc3NhZ2UgZG9lcyBub3QgY29udGFpbiB0aGUgYXR0cmlidXRlcyB3aGVuIHRoZSBtZXRob2QgaXMgY2FsbGVkCi0JLy8gd2l0aCBhIG51bGwga2V5LgotCVZhbGlkYXRpb25NZXNzYWdlIHZhbGlkYXRpb25NZXNzYWdlID0gbmV3IFZhbGlkYXRpb25NZXNzYWdlKCIiLCAxLCAxLCAiIik7Ci0JTWVzc2FnZSBtZXNzYWdlID0gbmV3IE1lc3NhZ2UoKTsKLQl2YWxpZGF0b3IuYWRkSW5mb1RvTWVzc2FnZSh2YWxpZGF0aW9uTWVzc2FnZSwgbWVzc2FnZSk7Ci0JYXNzZXJ0TnVsbCgiQ09MVU1OX05VTUJFUl9BVFRSSUJVVEUgd2FzIG5vdCBudWxsIGZvciBhIFZhbGlkYXRpb25NZXNzYWdlIHdpdGggYSBudWxsIGtleS4gQ09MVU1OX05VTUJFUl9BVFRSSUJVVEUgPSAiICsgbWVzc2FnZS5nZXRBdHRyaWJ1dGUoQ09MVU1OX05VTUJFUl9BVFRSSUJVVEUpLCBtZXNzYWdlLmdldEF0dHJpYnV0ZShDT0xVTU5fTlVNQkVSX0FUVFJJQlVURSkpOwotCWFzc2VydE51bGwoIlNRVUlHR0xFX1NFTEVDVElPTl9TVFJBVEVHWV9BVFRSSUJVVEUgd2FzIG5vdCBudWxsIGZvciBhIFZhbGlkYXRpb25NZXNzYWdlIHdpdGggYSBudWxsIGtleS4gU1FVSUdHTEVfU0VMRUNUSU9OX1NUUkFURUdZX0FUVFJJQlVURSA9ICIgKyBtZXNzYWdlLmdldEF0dHJpYnV0ZShTUVVJR0dMRV9TRUxFQ1RJT05fU1RSQVRFR1lfQVRUUklCVVRFKSwgbWVzc2FnZS5nZXRBdHRyaWJ1dGUoU1FVSUdHTEVfU0VMRUNUSU9OX1NUUkFURUdZX0FUVFJJQlVURSkpOwotCWFzc2VydE51bGwoIlNRVUlHR0xFX05BTUVfT1JfVkFMVUVfQVRUUklCVVRFIHdhcyBub3QgbnVsbCBmb3IgYSBWYWxpZGF0aW9uTWVzc2FnZSB3aXRoIGEgbnVsbCBrZXkuIFNRVUlHR0xFX05BTUVfT1JfVkFMVUVfQVRUUklCVVRFID0gIiArIG1lc3NhZ2UuZ2V0QXR0cmlidXRlKFNRVUlHR0xFX05BTUVfT1JfVkFMVUVfQVRUUklCVVRFKSwgbWVzc2FnZS5nZXRBdHRyaWJ1dGUoU1FVSUdHTEVfTkFNRV9PUl9WQUxVRV9BVFRSSUJVVEUpKTsKLQkKLQkvLyBUZXN0IHRoYXQgdGhlIG1lc3NhZ2UgY29udGFpbnMgdGhlIHRocmVlIGF0dHJpYnV0ZXMgd2hlbiB0aGUga2V5IGlzIHNldCB0byAiczRzLWVsdC1jaGFyYWN0ZXIiLgotCVZhbGlkYXRpb25NZXNzYWdlIHZhbGlkYXRpb25NZXNzYWdlMiA9IG5ldyBWYWxpZGF0aW9uTWVzc2FnZSgiIiwgMSwgMSwgIiIsICJzNHMtZWx0LWNoYXJhY3RlciIsIG51bGwpOwotCU1lc3NhZ2UgbWVzc2FnZTIgPSBuZXcgTWVzc2FnZSgpOwotCXZhbGlkYXRvci5hZGRJbmZvVG9NZXNzYWdlKHZhbGlkYXRpb25NZXNzYWdlMiwgbWVzc2FnZTIpOwotCWFzc2VydEVxdWFscygiQ09MVU1OX05VTUJFUl9BVFRSSUJVVEUgd2FzIGNvcnJlY3RseSBzZXQgdG8gMSBmb3IgYSBWYWxpZGF0aW9uTWVzc2FnZSB3aXRoIHRoZSBrZXkgczRzLWVsdC1jaGFyYWN0ZXIuIENPTFVNTl9OVU1CRVJfQVRUUklCVVRFID0gIiArIG1lc3NhZ2UyLmdldEF0dHJpYnV0ZShDT0xVTU5fTlVNQkVSX0FUVFJJQlVURSksIG5ldyBJbnRlZ2VyKDEpLCBtZXNzYWdlMi5nZXRBdHRyaWJ1dGUoQ09MVU1OX05VTUJFUl9BVFRSSUJVVEUpKTsKLQlhc3NlcnRFcXVhbHMoIlNRVUlHR0xFX1NFTEVDVElPTl9TVFJBVEVHWV9BVFRSSUJVVEUgd2FzIG5vdCBURVhULiBTUVVJR0dMRV9TRUxFQ1RJT05fU1RSQVRFR1lfQVRUUklCVVRFID0gIiArIG1lc3NhZ2UyLmdldEF0dHJpYnV0ZShTUVVJR0dMRV9TRUxFQ1RJT05fU1RSQVRFR1lfQVRUUklCVVRFKSwgIlRFWFQiLCBtZXNzYWdlMi5nZXRBdHRyaWJ1dGUoU1FVSUdHTEVfU0VMRUNUSU9OX1NUUkFURUdZX0FUVFJJQlVURSkpOwotCWFzc2VydEVxdWFscygiU1FVSUdHTEVfTkFNRV9PUl9WQUxVRV9BVFRSSUJVVEUgd2FzIG5vdCBhbiBlbXB0eSBzdHJpbmcgZm9yIGEgVmFsaWRhdGlvbk1lc3NhZ2Ugd2l0aCB0aGUga2V5IHM0cy1lbHQtY2hhcmFjdGVyLiBTUVVJR0dMRV9OQU1FX09SX1ZBTFVFX0FUVFJJQlVURSA9ICIgKyBtZXNzYWdlMi5nZXRBdHRyaWJ1dGUoU1FVSUdHTEVfTkFNRV9PUl9WQUxVRV9BVFRSSUJVVEUpLCAiIiwgbWVzc2FnZTIuZ2V0QXR0cmlidXRlKFNRVUlHR0xFX05BTUVfT1JfVkFMVUVfQVRUUklCVVRFKSk7Ci0JCi0gICAgLy8gVGVzdCB0aGF0IHRoZSBtZXNzYWdlIGNvbnRhaW5zIHRoZSB0aHJlZSBhdHRyaWJ1dGVzIHdoZW4gdGhlIGtleSBpcyBzZXQgdG8gInNyYy1yZXNvbHZlIi4KLQlWYWxpZGF0aW9uTWVzc2FnZSB2YWxpZGF0aW9uTWVzc2FnZTMgPSBuZXcgVmFsaWRhdGlvbk1lc3NhZ2UoIidNeU5hbWUnIiwgMSwgMSwgIiIsICJzcmMtcmVzb2x2ZSIsIG51bGwpOwotCU1lc3NhZ2UgbWVzc2FnZTMgPSBuZXcgTWVzc2FnZSgpOwotCXZhbGlkYXRvci5hZGRJbmZvVG9NZXNzYWdlKHZhbGlkYXRpb25NZXNzYWdlMywgbWVzc2FnZTMpOwotCWFzc2VydEVxdWFscygiQ09MVU1OX05VTUJFUl9BVFRSSUJVVEUgd2FzIGNvcnJlY3RseSBzZXQgdG8gMSBmb3IgYSBWYWxpZGF0aW9uTWVzc2FnZSB3aXRoIHRoZSBrZXkgc3JjLXJlc29sdmUuIENPTFVNTl9OVU1CRVJfQVRUUklCVVRFID0gIiArIG1lc3NhZ2UzLmdldEF0dHJpYnV0ZShDT0xVTU5fTlVNQkVSX0FUVFJJQlVURSksIG5ldyBJbnRlZ2VyKDEpLCBtZXNzYWdlMy5nZXRBdHRyaWJ1dGUoQ09MVU1OX05VTUJFUl9BVFRSSUJVVEUpKTsKLQlhc3NlcnRFcXVhbHMoIlNRVUlHR0xFX1NFTEVDVElPTl9TVFJBVEVHWV9BVFRSSUJVVEUgd2FzIG5vdCBWQUxVRV9PRl9BVFRSSUJVVEVfV0lUSF9HSVZFTl9WQUxVRS4gU1FVSUdHTEVfU0VMRUNUSU9OX1NUUkFURUdZX0FUVFJJQlVURSA9ICIgKyBtZXNzYWdlMy5nZXRBdHRyaWJ1dGUoU1FVSUdHTEVfU0VMRUNUSU9OX1NUUkFURUdZX0FUVFJJQlVURSksICJWQUxVRV9PRl9BVFRSSUJVVEVfV0lUSF9HSVZFTl9WQUxVRSIsIG1lc3NhZ2UzLmdldEF0dHJpYnV0ZShTUVVJR0dMRV9TRUxFQ1RJT05fU1RSQVRFR1lfQVRUUklCVVRFKSk7Ci0JYXNzZXJ0RXF1YWxzKCJTUVVJR0dMRV9OQU1FX09SX1ZBTFVFX0FUVFJJQlVURSB3YXMgbm90IHNldCB0byBNeU5hbWUgZm9yIGEgVmFsaWRhdGlvbk1lc3NhZ2Ugd2l0aCB0aGUga2V5IHNyYy1yZXNvbHZlLiBTUVVJR0dMRV9OQU1FX09SX1ZBTFVFX0FUVFJJQlVURSA9ICIgKyBtZXNzYWdlMy5nZXRBdHRyaWJ1dGUoU1FVSUdHTEVfTkFNRV9PUl9WQUxVRV9BVFRSSUJVVEUpLCAiTXlOYW1lIiwgbWVzc2FnZTMuZ2V0QXR0cmlidXRlKFNRVUlHR0xFX05BTUVfT1JfVkFMVUVfQVRUUklCVVRFKSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IHRoZSB2YWxpZGF0ZSBtZXRob2QuIFRlc3RzIHRvIGJlIHBlcmZvcm1lZDo8YnIvPgotICAgKiAxLiBUZXN0IHRoYXQgdmFsaWRhdGluZyBhIHZhbGlkIGZpbGUgZnJvbSBhIFVSSSBvciBhbiBpbnB1dCBzdHJlYW0gcHJvZHVjZXMgdGhlIHNhbWUgcmVzdWx0Ljxici8+Ci0gICAqIDIuIFRlc3QgdGhhdCB2YWxpZGF0aW5nIGFuIGludmFsaWQgZmlsZSBmcm9tIGEgVVJJIG9yIGFuIGlucHV0IHN0cmVhbSBwcm9kdWNlcyB0aGUgc2FtZSByZXN1bHQuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0VmFsaWRhdGUoKQotICB7Ci0JdHJ5Ci0JewotCSAgLy8gVGVzdCB0aGF0IHZhbGlkYXRpbmcgYSB2YWxpZCBmaWxlIGZyb20gYSBVUkkgYW5kIGFuIGlucHV0IHN0cmVhbSBwcm9kdWNlcyB0aGUgc2FtZSByZXN1bHQuCi0JICBTdHJpbmcgUExVR0lOX0FCU09MVVRFX1BBVEggPSBYU0RWYWxpZGF0aW9uVGVzdHNQbHVnaW4uZ2V0SW5zdGFsbFVSTCgpOwotCSAgU3RyaW5nIHVyaSA9ICJmaWxlOi8vLyIgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJ0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aFZhbGlkLnhzZCI7Ci0JICBWYWxpZGF0aW9uUmVwb3J0IHJlcG9ydDEgPSB2YWxpZGF0b3IudmFsaWRhdGUodXJpLCBudWxsLCBuZXcgTmVzdGVkVmFsaWRhdG9yQ29udGV4dCgpKTsKLQkgIFZhbGlkYXRpb25SZXBvcnQgcmVwb3J0MiA9IG51bGw7Ci0JICBJbnB1dFN0cmVhbSBpcyA9IG51bGw7Ci0JICB0cnkKLQkgIHsKLQkgICAgaXMgPSBuZXcgVVJMKHVyaSkub3BlblN0cmVhbSgpOwotCSAgICByZXBvcnQyID0gdmFsaWRhdG9yLnZhbGlkYXRlKHVyaSwgaXMsIG5ldyBOZXN0ZWRWYWxpZGF0b3JDb250ZXh0KCkpOwotCSAgfQotCSAgY2F0Y2goRXhjZXB0aW9uIGUpCi0JICB7Ci0JCWZhaWwoIkEgcHJvYmxlbSBvY2N1cnJlZCB3aGlsZSB2YWxpZGF0aW5nIGEgdmFsaWQgZmlsZSB3aXRoIGFuIGlucHV0c3RyZWFtOiAiICsgZSk7Ci0JICB9Ci0JICBmaW5hbGx5Ci0JICB7Ci0JCWlmKGlzICE9IG51bGwpCi0JCXsKLQkJICB0cnkKLQkJICB7Ci0JCSAgICBpcy5jbG9zZSgpOwotCQkgIH0KLQkJICBjYXRjaChJT0V4Y2VwdGlvbiBlKQotCQkgIHsKLQkJCS8vIERvIG5vdGhpbmcuCi0JCSAgfQotCQl9Ci0JICB9Ci0JICBhc3NlcnRUcnVlKCJWYWxpZGF0aW9uIHVzaW5nIGEgVVJJIGRpZCBub3QgcHJvZHVjdCBhIHZhbGlkIHZhbGlkYXRpb24gcmVzdWx0LiIsIHJlcG9ydDEuaXNWYWxpZCgpKTsKLQkgIGFzc2VydEVxdWFscygiVmFsaWRhdGlvbiB1c2luZyBVUkkgYW5kIHVzaW5nIGlucHV0c3RyZWFtIG9mIHRoZSBzYW1lIGZpbGUgcHJvZHVjZXMgZGlmZmVyZW50IG51bWJlcnMgb2YgZXJyb3JzLiIsIHJlcG9ydDEuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKCkubGVuZ3RoLCByZXBvcnQyLmdldFZhbGlkYXRpb25NZXNzYWdlcygpLmxlbmd0aCk7Ci0JICAKLSAgICAgIC8vIFRlc3QgdGhhdCB2YWxpZGF0aW5nIGFuIGludmFsaWQgZmlsZSBmcm9tIGEgVVJJIGFuZCBhbiBpbnB1dCBzdHJlYW0gcHJvZHVjZXMgdGhlIHNhbWUgcmVzdWx0LgotCSAgdXJpID0gImZpbGU6Ly8vIiArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInRlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoLUluUGF0aC9EYXNoSW5QYXRoSW52YWxpZC54c2QiOwotCSAgcmVwb3J0MSA9IHZhbGlkYXRvci52YWxpZGF0ZSh1cmksIG51bGwsIG5ldyBOZXN0ZWRWYWxpZGF0b3JDb250ZXh0KCkpOwotCSAgcmVwb3J0MiA9IG51bGw7Ci0JICBpcyA9IG51bGw7Ci0JICB0cnkKLQkgIHsKLQkgICAgaXMgPSBuZXcgVVJMKHVyaSkub3BlblN0cmVhbSgpOwotCSAgICByZXBvcnQyID0gdmFsaWRhdG9yLnZhbGlkYXRlKHVyaSwgaXMsIG5ldyBOZXN0ZWRWYWxpZGF0b3JDb250ZXh0KCkpOwotCSAgfQotCSAgY2F0Y2goRXhjZXB0aW9uIGUpCi0JICB7Ci0JCWZhaWwoIkEgcHJvYmxlbSBvY2N1cnJlZCB3aGlsZSB2YWxpZGF0aW5nIGFuIGludmFsaWQgZmlsZSB3aXRoIGFuIGlucHV0c3RyZWFtOiAiICsgZSk7Ci0JICB9Ci0JICBmaW5hbGx5Ci0JICB7Ci0JCWlmKGlzICE9IG51bGwpCi0JCXsKLQkJICB0cnkKLQkJICB7Ci0JCSAgICBpcy5jbG9zZSgpOwotCQkgIH0KLQkJICBjYXRjaChJT0V4Y2VwdGlvbiBlKQotCQkgIHsKLQkJCS8vIERvIG5vdGhpbmcuCi0JCSAgfQotCQl9Ci0JICB9Ci0JICBhc3NlcnRGYWxzZSgiVmFsaWRhdGlvbiB1c2luZyBhIFVSSSBkaWQgbm90IHByb2R1Y3QgYW4gaW52YWxpZCB2YWxpZGF0aW9uIHJlc3VsdC4iLCByZXBvcnQxLmlzVmFsaWQoKSk7Ci0JICBhc3NlcnRFcXVhbHMoIlZhbGlkYXRpb24gdXNpbmcgVVJJIGFuZCB1c2luZyBpbnB1dHN0cmVhbSBvZiB0aGUgc2FtZSBmaWxlIHByb2R1Y2VzIGRpZmZlcmVudCBudW1iZXJzIG9mIGVycm9ycy4iLCByZXBvcnQxLmdldFZhbGlkYXRpb25NZXNzYWdlcygpLmxlbmd0aCwgcmVwb3J0Mi5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKS5sZW5ndGgpOwotCX0KLQljYXRjaChFeGNlcHRpb24gZSkKLQl7Ci0JICBmYWlsKCJVbmFibGUgdG8gbG9jYXRlIHBsdWctaW4gbG9jYXRpb246ICIgKyBlKTsKLQl9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9WYWxpZGF0b3JXcmFwcGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2VjbGlwc2UvVmFsaWRhdG9yV3JhcHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZGE5NWY1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9WYWxpZGF0b3JXcmFwcGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2QuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5wcm92aXNpb25hbC5jb3JlLklNZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuVmFsaWRhdGlvbk1lc3NhZ2U7Ci0KLS8qKgotICogQSB3cmFwcGVyIGNsYXNzIHRvIGFsbG93IGZvciB0ZXN0aW5nIHRoZSBWYWxpZGF0b3IgY2xhc3MuCi0gKi8KLXB1YmxpYyBjbGFzcyBWYWxpZGF0b3JXcmFwcGVyIGV4dGVuZHMgVmFsaWRhdG9yIAotewotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZWNsaXBzZS5WYWxpZGF0b3IjYWRkSW5mb1RvTWVzc2FnZShvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLlZhbGlkYXRpb25NZXNzYWdlLCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5wcm92aXNpb25hbC5jb3JlLklNZXNzYWdlKQotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkSW5mb1RvTWVzc2FnZShWYWxpZGF0aW9uTWVzc2FnZSB2YWxpZGF0aW9uTWVzc2FnZSwgSU1lc3NhZ2UgbWVzc2FnZSkgCi0gIHsKLQlzdXBlci5hZGRJbmZvVG9NZXNzYWdlKHZhbGlkYXRpb25NZXNzYWdlLCBtZXNzYWdlKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lY2xpcHNlL1hTRE1lc3NhZ2VJbmZvSGVscGVyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lY2xpcHNlL1hTRE1lc3NhZ2VJbmZvSGVscGVyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzZlYjFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9YU0RNZXNzYWdlSW5mb0hlbHBlclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZWNsaXBzZTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi0vKioKLSAqIFRlc3QgY2FzZSB0byB0ZXN0IHRoZSBYU0RNZXNzYWdlSW5mb0hlbHBlciBjbGFzcy4KLSAqLwotcHVibGljIGNsYXNzIFhTRE1lc3NhZ2VJbmZvSGVscGVyVGVzdCBleHRlbmRzIFRlc3RDYXNlIAotewotICBwcml2YXRlIFhTRE1lc3NhZ2VJbmZvSGVscGVyV3JhcHBlciBoZWxwZXIgPSBuZXcgWFNETWVzc2FnZUluZm9IZWxwZXJXcmFwcGVyKCk7Ci0gIAotICAvKioKLSAgICogQ3JlYXRlIGEgdGVzdHMgc3VpdGUgZnJvbSB0aGlzIHRlc3QgY2xhc3MuCi0gICAqIAotICAgKiBAcmV0dXJuIEEgdGVzdCBzdWl0ZSBjb250YWluaW5nIHRoaXMgdGVzdCBjbGFzcy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IFRlc3RTdWl0ZShYU0RNZXNzYWdlSW5mb0hlbHBlclRlc3QuY2xhc3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCB0aGF0IHRoZSBjcmVhdGVNZXNzYWdlSW5mbyBtZXRob2QgcmV0dXJucyB7IiIsICIifSB3aGVuCi0gICAqIGdpdmVuIGEgbm9uLWV4aXN0YW50IGtleSBhbmQgbnVsbCBtZXNzYWdlIGFyZ3VtZW50cy4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3ROb3RFeGlzdGFudEtleUFuZE51bGxNZXNzYWdlQXJndW1lbnRzKCkKLSAgewotCVN0cmluZ1tdIG1lc3NhZ2VJbmZvID0gaGVscGVyLmNyZWF0ZU1lc3NhZ2VJbmZvKCJOT05fRVhJU1RBTlRfS0VZIiwgbnVsbCk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgc2VsZWN0aW9uIHN0cmF0ZWd5IHJldHVybmVkIHdhcyBub3QgYW4gZW1wdHkgc3RyaW5nLiIsICIiLCBtZXNzYWdlSW5mb1swXSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgbmFtZU9yVmFsdWUgcmV0dXJuZWQgd2FzIG5vdCBhbiBlbXB0eSBzdHJpbmcuIiwgIiIsIG1lc3NhZ2VJbmZvWzFdKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgdGhhdCB0aGUgY3JlYXRlTWVzc2FnZUluZm8gbWV0aG9kIHJldHVybnMgeyIiLCAiIn0gd2hlbgotICAgKiBnaXZlbiBhIG5vbi1leGlzdGFudCBrZXkgYW4gbnVsbCBtZXNzYWdlIGFyZ3VtZW50cy4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3ROdWxsS2V5QW5kTWVzc2FnZUFyZ3VtZW50cygpCi0gIHsKLQlTdHJpbmdbXSBtZXNzYWdlSW5mbyA9IGhlbHBlci5jcmVhdGVNZXNzYWdlSW5mbyhudWxsLCBudWxsKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSBzZWxlY3Rpb24gc3RyYXRlZ3kgcmV0dXJuZWQgd2FzIG5vdCBhbiBlbXB0eSBzdHJpbmcuIiwgIiIsIG1lc3NhZ2VJbmZvWzBdKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSBuYW1lT3JWYWx1ZSByZXR1cm5lZCB3YXMgbm90IGFuIGVtcHR5IHN0cmluZy4iLCAiIiwgbWVzc2FnZUluZm9bMV0pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCB0aGUgbWV0aG9kIGdldEZpcnN0U3RyaW5nQmV0d2VlblNpbmdsZVF1b3Rlcy4gVGhlcmUgYXJlIGEgZmV3IHRlc3RzOgotICAgKiAxLiBUZXN0IHRoYXQgYSBzaW1wbGUgc3RyaW5nIHdpdGggc2luZ2xlIHF1b3RlcyAnbmFtZScgcmV0dXJucyBuYW1lLgotICAgKiAyLiBUZXN0IHRoYXQgYSBzdHJpbmcgd2l0aCBubyBzaW5nbGUgcXVvdGVzIHJldHVybnMgbnVsbC4KLSAgICogMy4gVGVzdCB0aGF0IGEgc3RyaW5nIHdpdGggYSBzaW5nbGUgc2luZ2xlIHF1b3RlICduYW1lIHJldHVybnMgbnVsbC4KLSAgICogNC4gVGVzdCB0aGF0IGEgc3RyaW5nIHdpdGggMyBzaW5nbGUgcXVvdGVzICduYW1lJ25hbWUyJyByZXR1cm5zIG5hbWUuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0R2V0Rmlyc3RTdHJpbmdCZXR3ZWVuU2luZ2xlUXVvdGVzKCkKLSAgewotCS8vIDEuIFRlc3QgdGhhdCBhIHNpbXBsZSBzdHJpbmcgd2l0aCBzaW5nbGUgcXVvdGVzICduYW1lJyByZXR1cm5zIG5hbWUuCi0JU3RyaW5nIHJlc3VsdCA9IGhlbHBlci5nZXRGaXJzdFN0cmluZ0JldHdlZW5TaW5nbGVRdW90ZXMoIiduYW1lJyIpOwotCWFzc2VydEVxdWFscygiVGhlIHJldHVybmVkIHN0cmluZyB3YXMgbm90IFwibmFtZVwiIGZvciB0aGUgc3RyaW5nIFwiJ25hbWUnXCIuIiwgIm5hbWUiLCByZXN1bHQpOwotCQotCS8vIDIuIFRlc3QgdGhhdCBhIHN0cmluZyB3aXRoIG5vIHNpbmdsZSBxdW90ZXMgcmV0dXJucyBudWxsLgotCXJlc3VsdCA9IGhlbHBlci5nZXRGaXJzdFN0cmluZ0JldHdlZW5TaW5nbGVRdW90ZXMoIm5hbWUiKTsKLQlhc3NlcnROdWxsKCJUaGUgcmV0dXJuZWQgc3RyaW5nIHdhcyBub3QgbnVsbCBmb3IgdGhlIHN0cmluZyBcIm5hbWVcIiB3aXRoIG5vIHNpbmdsZSBxdW90ZXMuIiwgcmVzdWx0KTsKLQkKLQkvLyAzLiBUZXN0IHRoYXQgYSBzdHJpbmcgd2l0aCBhIHNpbmdsZSBzaW5nbGUgcXVvdGUgJ25hbWUgcmV0dXJucyBudWxsLgotCXJlc3VsdCA9IGhlbHBlci5nZXRGaXJzdFN0cmluZ0JldHdlZW5TaW5nbGVRdW90ZXMoIiduYW1lIik7Ci0JYXNzZXJ0TnVsbCgiVGhlIHJldHVybmVkIHN0cmluZyB3YXMgbm90IG51bGwgZm9yIHRoZSBzdHJpbmcgXCInbmFtZVwiIHdpdGggb25lIHNpbmdsZSBxdW90ZS4iLCByZXN1bHQpOwotCQotCS8vIDQuIFRlc3QgdGhhdCBhIHN0cmluZyB3aXRoIDMgc2luZ2xlIHF1b3RlcyAnbmFtZSduYW1lMicgcmV0dXJucyBuYW1lLgotCXJlc3VsdCA9IGhlbHBlci5nZXRGaXJzdFN0cmluZ0JldHdlZW5TaW5nbGVRdW90ZXMoIiduYW1lJ25hbWUyJyIpOwotCWFzc2VydEVxdWFscygiVGhlIHJldHVybmVkIHN0cmluZyB3YXMgbm90IFwibmFtZVwiIGZvciB0aGUgc3RyaW5nIFwiJ25hbWUnbmFtZTInXCIgd2l0aCAzIHNpbmdsZSBxdW90ZXMuIiwgIm5hbWUiLCByZXN1bHQpOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9YU0RNZXNzYWdlSW5mb0hlbHBlcldyYXBwZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9YU0RNZXNzYWdlSW5mb0hlbHBlcldyYXBwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQ0Mjk2NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2VjbGlwc2UvWFNETWVzc2FnZUluZm9IZWxwZXJXcmFwcGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2QuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2U7Ci0KLS8qKgotICogQSB3cmFwcGVyIGNsYXNzIGZvciB0aGUgWFNETWVzc2FnZUluZm9IZWxwZXIgY2xhc3MgZm9yIHRlc3RpbmcuCi0gKi8KLXB1YmxpYyBjbGFzcyBYU0RNZXNzYWdlSW5mb0hlbHBlcldyYXBwZXIgZXh0ZW5kcyBYU0RNZXNzYWdlSW5mb0hlbHBlciAKLXsKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC54c2QuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2UuWFNETWVzc2FnZUluZm9IZWxwZXIjZ2V0Rmlyc3RTdHJpbmdCZXR3ZWVuU2luZ2xlUXVvdGVzKGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEZpcnN0U3RyaW5nQmV0d2VlblNpbmdsZVF1b3RlcyhTdHJpbmcgcykgCi0gIHsKLQlyZXR1cm4gc3VwZXIuZ2V0Rmlyc3RTdHJpbmdCZXR3ZWVuU2luZ2xlUXVvdGVzKHMpOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2VjbGlwc2UvWFNEVmFsaWRhdG9yVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lY2xpcHNlL1hTRFZhbGlkYXRvclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjVhNzQ1OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2VjbGlwc2UvWFNEVmFsaWRhdG9yVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNkLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLS8qKgotICogVGVzdCB0aGUgRWNsaXBzZSBzcGVjaWZpYyBYU0QgdmFsaWRhdG9yLgotICovCi1wdWJsaWMgY2xhc3MgWFNEVmFsaWRhdG9yVGVzdCBleHRlbmRzIFRlc3RDYXNlIAotewotICAvKioKLSAgICogQ3JlYXRlIGEgdGVzdHMgc3VpdGUgZnJvbSB0aGlzIHRlc3QgY2xhc3MuCi0gICAqIAotICAgKiBAcmV0dXJuIEEgdGVzdCBzdWl0ZSBjb250YWluaW5nIHRoaXMgdGVzdCBjbGFzcy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IFRlc3RTdWl0ZShYU0RWYWxpZGF0b3JUZXN0LmNsYXNzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgdG8gZW5zdXJlIHRoZSBVUkkgcmVzb2x2ZXIgaXMgbm90IG51bGwgaW4gdGhlIEVjbGlwc2UKLSAgICogc3BlY2lmaWMgWFNEIHZhbGlkYXRvci4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RVUklSZXNvbHZlcklzUmVnaXN0ZXJlZCgpCi0gIHsKLQlYU0RWYWxpZGF0b3JXcmFwcGVyIHZhbGlkYXRvciA9IG5ldyBYU0RWYWxpZGF0b3JXcmFwcGVyKCk7Ci0JYXNzZXJ0Tm90TnVsbCgiVGhlIFVSSSByZXNvbHZlciBpcyBudWxsLiIsIHZhbGlkYXRvci5nZXRVUklSZXNvbHZlcigpKTsKLSAgfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2VjbGlwc2UvWFNEVmFsaWRhdG9yV3JhcHBlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lY2xpcHNlL1hTRFZhbGlkYXRvcldyYXBwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTE0N2VlYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2VjbGlwc2UvWFNEVmFsaWRhdG9yV3JhcHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNkLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51cmlyZXNvbHZlci5pbnRlcm5hbC5wcm92aXNpb25hbC5VUklSZXNvbHZlcjsKLQotLyoqCi0gKiBXcmFwcGVyIGZvciB0aGUgRWNsaXBzZSBYU0QgdmFsaWRhdG9yIGNsYXNzIHRvIGFsbG93IGZvciB0ZXN0aW5nLgotICovCi1wdWJsaWMgY2xhc3MgWFNEVmFsaWRhdG9yV3JhcHBlciBleHRlbmRzIFhTRFZhbGlkYXRvciAKLXsKLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKi8KLSAgcHVibGljIFhTRFZhbGlkYXRvcldyYXBwZXIoKQotICB7Ci0Jc3VwZXIoKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgVVJJIHJlc29sdmVyIHJlZ2lzdGVyZWQgb24gdGhlIFhNTCB2YWxpZGF0b3IuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBVUkkgcmVzb2x2ZXIgcmVnaXN0ZXJlZCBvbiB0aGUgWE1MIHZhbGlkYXRvci4KLSAgICovCi0gIHB1YmxpYyBVUklSZXNvbHZlciBnZXRVUklSZXNvbHZlcigpCi0gIHsKLQlyZXR1cm4gdXJpcmVzb2x2ZXI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL0FsbFhTRFRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9BbGxYU0RUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YmExZTYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL0FsbFhTRFRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLlhTRFZhbGlkYXRpb25Db25maWd1cmF0aW9uVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlLlZhbGlkYXRvclRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZWNsaXBzZS5YU0RNZXNzYWdlSW5mb0hlbHBlclRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZWNsaXBzZS5YU0RWYWxpZGF0b3JUZXN0OwotLyoqCi0gKiBUaGUgcm9vdCB0ZXN0IHN1aXRlIHRoYXQgY29udGFpbnMgYWxsIG90aGVyIFhTRCB2YWxpZGF0b3IgdGVzdCBzdWl0ZXMuCi0gKi8KLXB1YmxpYyBjbGFzcyBBbGxYU0RUZXN0cyBleHRlbmRzIGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGUKLXsKLSAgLyoqCi0gICAqIENyZWF0ZSB0aGlzIHRlc3Qgc3VpdGUuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoaXMgdGVzdCBzdWl0ZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IEFsbFhTRFRlc3RzKCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvcgotICAgKi8KLSAgcHVibGljIEFsbFhTRFRlc3RzKCkKLSAgewotICAgIHN1cGVyKCJBbGxYU0RUZXN0cyIpOwotICAgIGFkZFRlc3QoVmFsaWRhdG9yVGVzdC5zdWl0ZSgpKTsKLSAgICBhZGRUZXN0KFhTRE1lc3NhZ2VJbmZvSGVscGVyVGVzdC5zdWl0ZSgpKTsKLSAgICBhZGRUZXN0KFhTRFZhbGlkYXRvclRlc3Quc3VpdGUoKSk7Ci0gICAgYWRkVGVzdChCdWdGaXhlc1Rlc3Quc3VpdGUoKSk7Ci0gICAgYWRkVGVzdChQYXRoc1Rlc3Quc3VpdGUoKSk7Ci0gICAgYWRkVGVzdFN1aXRlKFhTRFZhbGlkYXRpb25Db25maWd1cmF0aW9uVGVzdC5jbGFzcyk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9CYXNlVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL0Jhc2VUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZWNkNjEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL0Jhc2VUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzM4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLkRhdGFPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuVmFsaWRhdGlvbk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5WYWxpZGF0aW9uUmVwb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLlhTRFZhbGlkYXRpb25Db25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2UuWFNEVmFsaWRhdG9yOwotCi0vKioKLSAqIEJhc2UgdGVzdCBjYXNlIGNsYXNzIHdoaWNoIHByb3ZpZGVzIG1ldGhvZHMgdG8gCi0gKiAtIGNyZWF0ZSBsb2dzCi0gKiAtIHJlYWQgZnJvbSBsb2dzCi0gKiAtIHJ1biBsb2cgY29tcGFyaXNvbiB0ZXN0cwotICovCi1wdWJsaWMgY2xhc3MgQmFzZVRlc3RDYXNlIGV4dGVuZHMgVGVzdENhc2UKLXsKLSAgcHJvdGVjdGVkIFN0cmluZyBGSUxFX1BST1RPQ09MID0gImZpbGU6Ly8vIjsgCi0gIHByb3RlY3RlZCBTdHJpbmcgUExVR0lOX0FCU09MVVRFX1BBVEg7Ci0gIHByb3RlY3RlZCBTdHJpbmcgU0FNUExFU19ESVIgPSAidGVzdHJlc291cmNlcy9zYW1wbGVzLyI7Ci0gIHByb3RlY3RlZCBTdHJpbmcgR0VORVJBVEVEX1JFU1VMVFNfRElSID0gInRlc3RyZXNvdXJjZXMvZ2VuZXJhdGVkUmVzdWx0cy8iOwotICBwcm90ZWN0ZWQgU3RyaW5nIElERUFMX1JFU1VMVFNfRElSID0gInRlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzLyI7Ci0gIHByb3RlY3RlZCBTdHJpbmcgTE9HX0ZJTEVfTE9DQVRJT04gPSAicmVzdWx0cy5sb2ciOwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fTkFNRSA9ICJvcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMiOwotICBwcml2YXRlIFhTRFZhbGlkYXRvciB2YWxpZGF0b3IgPSBYU0RWYWxpZGF0b3IuZ2V0SW5zdGFuY2UoKTsKLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKQotICB7Ci0gICAgUExVR0lOX0FCU09MVVRFX1BBVEggPSBYU0RWYWxpZGF0aW9uVGVzdHNQbHVnaW4uZ2V0SW5zdGFsbFVSTCgpOwotICB9Ci0gIAotICAvKioKLSAgICogUnVuIGEgdmFsaWRhdG9yIHRlc3QuIFRoZSB0ZXN0IHdpbGwgcnVuIHRoZSB2YWxpZGF0b3IsIGxvZyB0aGUgcmVzdWx0cyBhbmQgY29tcGFyZSB0aGUgcmVzdWx0cwotICAgKiB3aXRoIHRoZSBpZGVhbCByZXN1bHRzLiBUaGUgdGVzdCB3aWxsIG9ubHkgcGFzcyBpZiB0aGUgdHdvIGxvZyBmaWxlcyBhcmUgdGhlIHNhbWUuCi0gICAqIAotICAgKiBAcGFyYW0gdGVzdGZpbGUgVGhlIGZpbGUgdG8gcnVuIHRoZSB2YWxpZGF0b3IgdGVzdCBvbi4KLSAgICogQHBhcmFtIGxvZ2xvY2F0aW9uIFRoZSBsb2NhdGlvbiB0byBjcmVhdGUgdGhlIGxvZyBmaWxlLgotICAgKiBAcGFyYW0gaWRlYWxsb2dsb2NhdGlvbiBUaGUgbG9jYXRpb24gb2YgdGhlIGlkZWFsIGxvZyBmaWxlLgotICAgKi8KLSAgcHVibGljIHZvaWQgcnVuVGVzdChTdHJpbmcgdGVzdGZpbGUsIFN0cmluZyBsb2dsb2NhdGlvbiwgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24pCi0gIHsKLQlydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbiwgbmV3IFhTRFZhbGlkYXRpb25Db25maWd1cmF0aW9uKCkpOwotICB9Ci0gIC8qKgotICAgKiBSdW4gYSB2YWxpZGF0b3IgdGVzdC4gVGhlIHRlc3Qgd2lsbCBydW4gdGhlIHZhbGlkYXRvciwgbG9nIHRoZSByZXN1bHRzIGFuZCBjb21wYXJlIHRoZSByZXN1bHRzCi0gICAqIHdpdGggdGhlIGlkZWFsIHJlc3VsdHMuIFRoZSB0ZXN0IHdpbGwgb25seSBwYXNzIGlmIHRoZSB0d28gbG9nIGZpbGVzIGFyZSB0aGUgc2FtZS4KLSAgICogCi0gICAqIEBwYXJhbSB0ZXN0ZmlsZSAKLSAgICogCQlUaGUgZmlsZSB0byBydW4gdGhlIHZhbGlkYXRvciB0ZXN0IG9uLgotICAgKiBAcGFyYW0gbG9nbG9jYXRpb24gCi0gICAqIAkJVGhlIGxvY2F0aW9uIHRvIGNyZWF0ZSB0aGUgbG9nIGZpbGUuCi0gICAqIEBwYXJhbSBpZGVhbGxvZ2xvY2F0aW9uIAotICAgKiAJCVRoZSBsb2NhdGlvbiBvZiB0aGUgaWRlYWwgbG9nIGZpbGUuCi0gICAqIEBwYXJhbSBjb25maWd1cmF0aW9uIAotICAgKiAJCVRoZSBYU0RWYWxpZGF0aW9uQ29uZmlndXJhdGlvbiBmb3IgdGhpcyB2YWxpZGF0aW9uIHRlc3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCBydW5UZXN0KFN0cmluZyB0ZXN0ZmlsZSwgU3RyaW5nIGxvZ2xvY2F0aW9uLCBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiwgWFNEVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLSAgewotICAgIFZhbGlkYXRpb25SZXBvcnQgdmFscmVwb3J0ID0gdmFsaWRhdG9yLnZhbGlkYXRlKHRlc3RmaWxlLCBudWxsLCBjb25maWd1cmF0aW9uKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBjcmVhdGVMb2cobG9nbG9jYXRpb24sIHZhbHJlcG9ydCk7Ci0gICAgICBTdHJpbmcgZ2VuZXJhdGVkTG9nID0gZ2V0U3RyaW5nRnJvbUZpbGUobG9nbG9jYXRpb24pOwotICAgICAgU3RyaW5nIGlkZWFsTG9nID0gZ2V0U3RyaW5nRnJvbUZpbGUoaWRlYWxsb2dsb2NhdGlvbik7Ci0gICAgICBhc3NlcnRFcXVhbHMoaWRlYWxMb2csIGdlbmVyYXRlZExvZyk7Ci0gICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZmFpbCgiQ291bGQgbm90IGNvbXBhcmUgbG9nIGZpbGVzIik7Ci0gICAgfQotICB9Ci0gIAotICAvKioKLSAgICogR2V0IGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgZmlsZS4KLSAgICogCi0gICAqIEBwYXJhbSBmaWxlbmFtZSB0aGUgZmlsZSBuYW1lIG9mIHRoZSBmaWxlIHRvIGdldCB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uLgotICAgKiBAcmV0dXJuIFRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gaWYgc3VjY2Vzc2Z1bC4KLSAgICogQHRocm93cyBFeGNlcHRpb24gVGhyb3duIGlmIHVuYWJsZSB0byBjcmVhdGUgYSBzdHJpbmcgcmVwcmVzZW50YWlvbiBvZiB0aGUgZmlsZS4KLSAgICovCi0gIHByaXZhdGUgU3RyaW5nIGdldFN0cmluZ0Zyb21GaWxlKFN0cmluZyBmaWxlbmFtZSkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGZpbGVzdHJpbmcgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgUmVhZGVyIHJlYWRlciA9IG51bGw7Ci0gICAgQnVmZmVyZWRSZWFkZXIgYnVmcmVhZGVyID0gbnVsbDsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBGaWxlIGZpbGUgPSBuZXcgRmlsZShmaWxlbmFtZSk7Ci0gICAgICByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcihmaWxlKTsKLSAgICAgIGJ1ZnJlYWRlciA9IG5ldyBCdWZmZXJlZFJlYWRlcihyZWFkZXIpOwotICAgICAgd2hpbGUgKGJ1ZnJlYWRlci5yZWFkeSgpKQotICAgICAgewotICAgICAgICBmaWxlc3RyaW5nLmFwcGVuZChidWZyZWFkZXIucmVhZExpbmUoKSArICJcbiIpOwotICAgICAgfQotICAgIH0gY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oKTsKLSAgICB9IGZpbmFsbHkKLSAgICB7Ci0gICAgICBidWZyZWFkZXIuY2xvc2UoKTsKLSAgICAgIHJlYWRlci5jbG9zZSgpOwotICAgIH0KLSAgICByZXR1cm4gZmlsZXN0cmluZy50b1N0cmluZygpOwotICB9Ci0gIAotICAvKioKLSAgICogQ3JlYXRlIGEgbG9nIGZpbGUgZm9yIGFuIFhTRCB0ZXN0LgotICAgKiAKLSAgICogQHBhcmFtIGZpbGVuYW1lIFRoZSBuYW1lIG9mIHRoZSBsb2cgZmlsZSB0byBjcmVhdGUuCi0gICAqIEBwYXJhbSB2YWxyZXBvcnQgVGhlIHZhbGlkYXRpb24gcmVwb3J0IGZvciB0aGlzIGZpbGUuCi0gICAqIEByZXR1cm4gVGhlIGZpbGUgY29udGVudHMgYXMgYSBzdHJpbmcgaWYgc3VjY2Vzc2Z1bCBvciBudWxsIGlmIG5vdCBzdWNjZXNzZnVsLgotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgY3JlYXRlTG9nKFN0cmluZyBmaWxlbmFtZSwgVmFsaWRhdGlvblJlcG9ydCB2YWxyZXBvcnQpCi0gIHsKLSAgICAgVmFsaWRhdGlvbk1lc3NhZ2VbXSB2YWxtZXNzYWdlcyA9IHZhbHJlcG9ydC5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKTsKLSAgICAgaW50IG51bW1lc3NhZ2VzID0gdmFsbWVzc2FnZXMubGVuZ3RoOy8vdmFsaWRhdG9yLmdldEVycm9ycygpLnNpemUoKSArIHZhbGlkYXRvci5nZXRXYXJuaW5ncygpLnNpemUoKTsKLSAgICAgU3RyaW5nQnVmZmVyIGVycm9yc1N0cmluZyA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgU3RyaW5nQnVmZmVyIHdhcm5pbmdzU3RyaW5nID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICBpbnQgbnVtZXJyb3JzID0gMDsKLSAgICAgaW50IG51bXdhcm5pbmdzID0gMDsKLSAgICAgZm9yKGludCBpID0gMDsgaSA8IG51bW1lc3NhZ2VzOyBpKyspCi0gICAgIHsKLSAgICAgICBWYWxpZGF0aW9uTWVzc2FnZSB2YWxtZXMgPSB2YWxtZXNzYWdlc1tpXTsKLSAgICAgICBpZih2YWxtZXMuZ2V0U2V2ZXJpdHkoKSA9PSBWYWxpZGF0aW9uTWVzc2FnZS5TRVZfTE9XKQotICAgICAgIHsKLSAgICAgICAgIG51bXdhcm5pbmdzKys7Ci0gICAgICAgICBTdHJpbmcgbWVzc2FnZSA9IHZhbG1lcy5nZXRNZXNzYWdlKCk7Ci0gICAgICAgICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlQWxsKCInW14nXSoiICsgZ2V0UGx1Z2luTmFtZSgpICsgIlteJy9dKi8iLCAiJyIpOwotICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZUFsbCgiWyhdW14oXSoiICsgZ2V0UGx1Z2luTmFtZSgpICsgIlteJy9dKi8iLCAiKCIpOwotICAgICAgICAgd2FybmluZ3NTdHJpbmcuYXBwZW5kKG1lc3NhZ2UgKyAiIFsiICsgdmFsbWVzLmdldExpbmVOdW1iZXIoKSArIiwgIiArIHZhbG1lcy5nZXRDb2x1bW5OdW1iZXIoKSArIl1cbiIpOwotICAgICAgICAgd2FybmluZ3NTdHJpbmcuYXBwZW5kKGNyZWF0ZU5lc3RlZE1lc3NhZ2VTdHJpbmcodmFsbWVzLmdldE5lc3RlZE1lc3NhZ2VzKCkpKTsKLSAgICAgICB9Ci0gICAgICAgZWxzZQotICAgICAgIHsKLSAgICAgICAgIG51bWVycm9ycysrOwotICAgICAgICAgU3RyaW5nIG1lc3NhZ2UgPSB2YWxtZXMuZ2V0TWVzc2FnZSgpOwotICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZUFsbCgiJ1teJ10qIiArIGdldFBsdWdpbk5hbWUoKSArICJbXicvXSovIiwgIiciKTsKLSAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2VBbGwoIlsoXVteKF0qIiArIGdldFBsdWdpbk5hbWUoKSArICJbXicvXSovIiwgIigiKTsKLSAgICAgICAgIGVycm9yc1N0cmluZy5hcHBlbmQobWVzc2FnZSArICIgWyIgKyB2YWxtZXMuZ2V0TGluZU51bWJlcigpICsiLCAiICsgdmFsbWVzLmdldENvbHVtbk51bWJlcigpICsiXVxuIik7Ci0gICAgICAgICBlcnJvcnNTdHJpbmcuYXBwZW5kKGNyZWF0ZU5lc3RlZE1lc3NhZ2VTdHJpbmcodmFsbWVzLmdldE5lc3RlZE1lc3NhZ2VzKCkpKTsKLSAgICAgICB9Ci0gICAgIH0KLSAgICAgU3RyaW5nQnVmZmVyIGxvZyA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgbG9nLmFwcGVuZCgibnVtYmVyIG9mIGVycm9ycyAgICAgIDogIiArIG51bWVycm9ycyArICJcbiIpOwotICAgICBpZihudW13YXJuaW5ncyA+IDApCi0gICAgIHsKLSAgICAgICBsb2cuYXBwZW5kKCJudW1iZXIgb2Ygd2FybmluZ3MgICAgOiAiICsgbnVtd2FybmluZ3MgKyAiXG4iKTsKLSAgICAgfQotICAgICBsb2cuYXBwZW5kKCJcbi0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKLSAgICAgaWYobnVtZXJyb3JzID09IDApCi0gICAgIHsKLSAgICAgICBsb2cuYXBwZW5kKCIobm9uZSlcbiIpOwotICAgICB9Ci0gICAgIGVsc2UKLSAgICAgewotICAgICAgIGxvZy5hcHBlbmQoZXJyb3JzU3RyaW5nLnRvU3RyaW5nKCkpOwotICAgICB9Ci0gICAgIGlmKG51bXdhcm5pbmdzID4gMCkKLSAgICAgewotICAgICAgIGxvZy5hcHBlbmQoIi0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKLSAgICAgICBsb2cuYXBwZW5kKGVycm9yc1N0cmluZy50b1N0cmluZygpKTsKLSAgICAgfQotICAgICBsb2cuYXBwZW5kKHdhcm5pbmdzU3RyaW5nLnRvU3RyaW5nKCkpOwotICAgICBsb2cuYXBwZW5kKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7Ci0gICAKLSAgICAgRGF0YU91dHB1dFN0cmVhbSBvdXRTdHJlYW0gPSBudWxsOwotICAgIHRyeQotICAgIHsKLSAgICAgIEZpbGUgbG9nZmlsZSA9IG5ldyBGaWxlKGZpbGVuYW1lKTsKLSAgICAgIEZpbGUgcGFyZW50ID0gbG9nZmlsZS5nZXRQYXJlbnRGaWxlKCk7Ci0gIAlpZiAoIXBhcmVudC5leGlzdHMoKSkgCi0gIAl7Ci0gIAkgIHBhcmVudC5ta2RpcnMoKTsKLSAgCX0KLSAgICAgIGlmKGxvZ2ZpbGUuZXhpc3RzKCkpCi0gICAgICB7Ci0gICAgICAgIGxvZ2ZpbGUuZGVsZXRlKCk7Ci0gICAgICB9Ci0gICAgICBsb2dmaWxlLmNyZWF0ZU5ld0ZpbGUoKTsKLSAgICAgIAotICAgICAgb3V0U3RyZWFtID0gbmV3IERhdGFPdXRwdXRTdHJlYW0obmV3IEZpbGVPdXRwdXRTdHJlYW0oZmlsZW5hbWUsIHRydWUpKTsKLSAgICAgIG91dFN0cmVhbS53cml0ZUJ5dGVzKGxvZy50b1N0cmluZygpKTsKLSAgICAgIG91dFN0cmVhbS5jbG9zZSgpOwotCi0gICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICAvLyBJZiB3ZSBjYW4ndCB3cml0ZSB0aGUgbG9nIHRoZW4gY2xlYXIgdGhlIGxvZy4KLSAgICAgIGxvZy5kZWxldGUoMCwgbG9nLmxlbmd0aCgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGxvZy50b1N0cmluZygpOwotICB9Ci0KLSAgcHJvdGVjdGVkIFN0cmluZyBnZXRQbHVnaW5OYW1lKCkKLSAgewotICAgIHJldHVybiBQTFVHSU5fTkFNRTsKLSAgfQotICAKLSAgcHJpdmF0ZSBTdHJpbmcgY3JlYXRlTmVzdGVkTWVzc2FnZVN0cmluZyhMaXN0IG5lc3RlZE1lc3NhZ2VzKQotICB7Ci0gICAgcmV0dXJuIGNyZWF0ZU5lc3RlZE1lc3NhZ2VTdHJpbmcobmVzdGVkTWVzc2FnZXMsIDApOwotICB9Ci0gIAotICBwcml2YXRlIFN0cmluZyBjcmVhdGVOZXN0ZWRNZXNzYWdlU3RyaW5nKExpc3QgbmVzdGVkTWVzc2FnZXMsIGludCBkZXB0aCkKLSAgewotICAgIGlmKG5lc3RlZE1lc3NhZ2VzICE9IG51bGwgJiYgbmVzdGVkTWVzc2FnZXMuc2l6ZSgpID4gMCkKLSAgICB7Ci0gICAgICBTdHJpbmcgbWVzc2FnZVN0cmluZyA9ICIiOwotICAgICAgSXRlcmF0b3IgbmVzdGVkTWVzSXRlciA9IG5lc3RlZE1lc3NhZ2VzLml0ZXJhdG9yKCk7Ci0gICAgICB3aGlsZShuZXN0ZWRNZXNJdGVyLmhhc05leHQoKSkKLSAgICAgIHsKLSAgICAgICAgVmFsaWRhdGlvbk1lc3NhZ2UgbmVzdmFsbWVzID0gKFZhbGlkYXRpb25NZXNzYWdlKW5lc3RlZE1lc0l0ZXIubmV4dCgpOwotICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgZGVwdGg7IGkrKykKLSAgICAgICAgewotICAgICAgICAgIG1lc3NhZ2VTdHJpbmcgKz0gIiAiOwotICAgICAgICB9Ci0gICAgICAgIC8vIElmIHRoZSBtZXNzYWdlIGNvbnRhaW5zIGFueSBmaWxlIHJlZmVyZW5jZXMgbWFrZSB0aGVtIHJlbGF0aXZlLgotICAgICAgICBTdHJpbmcgbWVzc2FnZSA9IG5lc3ZhbG1lcy5nZXRNZXNzYWdlKCk7Ci0gICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2VBbGwoIidbXiddKiIgKyBnZXRQbHVnaW5OYW1lKCkgKyAiW14nL10qLyIsICInIik7Ci0gICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2VBbGwoIlsoXVteKF0qIiArIGdldFBsdWdpbk5hbWUoKSArICJbXicvXSovIiwgIlsoXSIpOwotICAgICAgICBtZXNzYWdlU3RyaW5nICs9ICgiLT4gIiArIG1lc3NhZ2UgKyAiIFsiICsgbmVzdmFsbWVzLmdldExpbmVOdW1iZXIoKSArIiwgIiArIG5lc3ZhbG1lcy5nZXRDb2x1bW5OdW1iZXIoKSArIl1cbiIpOwotICAgICAgICBtZXNzYWdlU3RyaW5nICs9IGNyZWF0ZU5lc3RlZE1lc3NhZ2VTdHJpbmcobmVzdmFsbWVzLmdldE5lc3RlZE1lc3NhZ2VzKCksIGRlcHRoICsgMSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gbWVzc2FnZVN0cmluZzsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHJldHVybiAiIjsKLSAgICB9Ci0gIH0KLSAgCi0gIHByb3RlY3RlZCBJUHJvamVjdCBjcmVhdGVTaW1wbGVQcm9qZWN0KFN0cmluZyBwcm9qZWN0TmFtZSwgU3RyaW5nW10gZmlsZXMpCi0gIHsKLSAgICBmaW5hbCBJV29ya3NwYWNlIHdvcmtzcGFjZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKTsKLSAgICBmaW5hbCBJUHJvamVjdCBwcm9qZWN0ID0gd29ya3NwYWNlLmdldFJvb3QoKS5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsKLSAgICBpZighcHJvamVjdC5leGlzdHMoKSkKLSAgICB7Ci0gICAgICB0cnkKLQkgIHsKLSAgICAgICAgcHJvamVjdC5jcmVhdGUobnVsbCk7Ci0gICAgICB9Ci0gICAgICBjYXRjaChDb3JlRXhjZXB0aW9uIGUpCi0JICB7Ci0gICAgICAgIGZhaWwoIkNvdWxkIG5vdCBjcmVhdGUgcHJvamVjdCAiICsgcHJvamVjdE5hbWUgKyBlKTsKLSAgICAgIH0gCi0gICAgfQotICAgIGlmKCFwcm9qZWN0LmlzT3BlbigpKQotICAgIHsKLSAgICAgIHRyeQotCSAgewotICAgICAgICBwcm9qZWN0Lm9wZW4obnVsbCk7Ci0JICB9Ci0gICAgICBjYXRjaChDb3JlRXhjZXB0aW9uIGUpCi0gICAgICB7Ci0gICAgICAgIGZhaWwoIkNvdWxkIG5vdCBvcGVuIHByb2plY3QgIiArIHByb2plY3ROYW1lICsgZSk7Ci0JICB9Ci0gICAgfQotICAgIHRyeQotICAgIHsKLSAgICAgIElQcm9qZWN0RGVzY3JpcHRpb24gcHJvamVjdERlc2NyaXB0aW9uID0gcHJvamVjdC5nZXREZXNjcmlwdGlvbigpOyAKLSAgICAgIHByb2plY3REZXNjcmlwdGlvbi5zZXROYW1lKHByb2plY3ROYW1lKTsKLSAgICAgIHByb2plY3Quc2V0RGVzY3JpcHRpb24ocHJvamVjdERlc2NyaXB0aW9uLCBudWxsKTsKLSAgICB9Ci0gICAgY2F0Y2goRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZmFpbCgiVW5hYmxlIHRvIHNldCBwcm9qZWN0IHByb3BlcnRpZXMgZm9yIHByb2plY3QgIiArIHByb2plY3ROYW1lICsgIi4gIiArIGUpOwotICAgIH0KLQotICAgIGlmKGZpbGVzICE9IG51bGwpCi0gICAgewotICAgICAgaW50IG51bWZpbGVzID0gZmlsZXMubGVuZ3RoOwotICAgICAgZm9yKGludCBpID0gMDsgaSA8IG51bWZpbGVzOyBpKyspCi0gICAgICB7Ci0gICAgICAgIHRyeQotCQl7Ci0gICAgICAgICAgU3RyaW5nIGZpbGVuYW1lID0gZmlsZXNbaV07Ci0gICAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5yZXBsYWNlKCdcXCcsJy8nKTsKLSAgICAgICAgICBpZihmaWxlbmFtZS5zdGFydHNXaXRoKCJmaWxlOiIpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWUuc3Vic3RyaW5nKDUpOwotCQkJd2hpbGUoZmlsZW5hbWUuc3RhcnRzV2l0aCgiLyIpKQotCSAgICAgICAgewotCSAgICAgICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lLnN1YnN0cmluZygxKTsKLQkgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgCi0gICAgICAgICAgRmlsZSBmaWxlID0gbmV3IEZpbGUoZmlsZW5hbWUpOwotICAgICAgICAgIEZpbGVJbnB1dFN0cmVhbSBpbiA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oZmlsZSk7Ci0gICAgICAgICAgSUZpbGUgaUZpbGUgPSBwcm9qZWN0LmdldEZpbGUoZmlsZS5nZXROYW1lKCkpOwotICAgICAgICAgIGlmKCFpRmlsZS5leGlzdHMoKSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpRmlsZS5jcmVhdGUoaW4sIHRydWUsIG51bGwpOwotICAgICAgICAgICAgaW4uY2xvc2UoKTsKLSAgICAgICAgICB9Ci0JCX0KLSAgICAgICAgY2F0Y2goRXhjZXB0aW9uIGUpCi0JCXsKLQkJICBmYWlsKCJVbmFibGUgdG8gbG9jYXRlIGZpbGUgIiArIGZpbGVzW2ldKTsKLQkJfSAKLSAgICAgIH0KLSAgICB9Ci0gICAgdHJ5Ci0gICAgewotICAgICAgcHJvamVjdC5yZWZyZXNoTG9jYWwoLTEsIG51bGwpOwotICAgIH0KLSAgICBjYXRjaChFeGNlcHRpb24gZSkKLSAgICB7fQotICAgIHJldHVybiBwcm9qZWN0OwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9CdWdGaXhlc1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL0J1Z0ZpeGVzVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMGJiMzI3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL0J1Z0ZpeGVzVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgRGF2aWQgQ2FydmVyLCBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwsIGJ1ZyAxNDcwMzMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLlhNTENvcmVQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNhdGFsb2cucHJvdmlzaW9uYWwuSUNhdGFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNhdGFsb2cucHJvdmlzaW9uYWwuSUNhdGFsb2dFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY2F0YWxvZy5wcm92aXNpb25hbC5JTmV4dENhdGFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uWFNEVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb247Ci0KLQotCi0vKioKLSAqIFRlc3QgY2xhc3MgZm9yIGJ1ZyBmaXhlcy4KLSAqLwotcHVibGljIGNsYXNzIEJ1Z0ZpeGVzVGVzdCBleHRlbmRzIEJhc2VUZXN0Q2FzZQotewotICBwcml2YXRlIFN0cmluZyBCVUdGSVhFU19ESVIgPSAiQnVnRml4ZXMvIjsKLSAgCi0gIC8qKgotICAgKiBDcmVhdGUgYSB0ZXN0cyBzdWl0ZSBmcm9tIHRoaXMgdGVzdCBjbGFzcy4KLSAgICogCi0gICAqIEByZXR1cm4gQSB0ZXN0IHN1aXRlIGNvbnRhaW5pbmcgdGhpcyB0ZXN0IGNsYXNzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIHJldHVybiBuZXcgVGVzdFN1aXRlKEJ1Z0ZpeGVzVGVzdC5jbGFzcyk7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKQotICB7Ci0gICAgc3VwZXIuc2V0VXAoKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL0J1Z0ZpeGVzL0VtcHR5LnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEVtcHR5KCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJFbXB0eSI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiRW1wdHlGaWxlLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIEJVR0ZJWEVTX0RJUiArICJFbXB0eUZpbGUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiRW1wdHlGaWxlLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvQnVnRml4ZXMvSW52YWxpZFNjaGVtYUluWE1MQ2F0YWxvZy9JbnZhbGlkU2NoZW1hSW5YTUxDYXRhbG9nLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEludmFsaWRTY2hlbWFJblhNTENhdGFsb2coKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkludmFsaWRTY2hlbWFJblhNTENhdGFsb2ciOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiSW52YWxpZFNjaGVtYUluWE1MQ2F0YWxvZy8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiSW52YWxpZFNjaGVtYUluWE1MQ2F0YWxvZy8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIEJVR0ZJWEVTX0RJUiArICJJbnZhbGlkU2NoZW1hSW5YTUxDYXRhbG9nLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgY3JlYXRlU2ltcGxlUHJvamVjdCgiUHJvamVjdCIsIG5ldyBTdHJpbmdbXXt0ZXN0ZmlsZX0pOwotICAgIAotICAgIAotICAgIElDYXRhbG9nIGNhdGFsb2cgPSBYTUxDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXREZWZhdWx0WE1MQ2F0YWxvZygpOwotICAgIElOZXh0Q2F0YWxvZ1tdIG5leHRDYXRhbG9ncyA9IGNhdGFsb2cuZ2V0TmV4dENhdGFsb2dzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuZXh0Q2F0YWxvZ3MubGVuZ3RoOyBpKyspCi0JewotCQlJTmV4dENhdGFsb2cgbmV4dENhdGFsb2cgPSBuZXh0Q2F0YWxvZ3NbaV07Ci0JCWlmKFhNTENvcmVQbHVnaW4uVVNFUl9DQVRBTE9HX0lELmVxdWFscyhuZXh0Q2F0YWxvZy5nZXRJZCgpKSl7Ci0JCQlJQ2F0YWxvZyB1c2VyQ2F0YWxvZyA9IG5leHRDYXRhbG9nLmdldFJlZmVyZW5jZWRDYXRhbG9nKCk7Ci0JCQlpZih1c2VyQ2F0YWxvZyAhPSBudWxsKQotCQkJewotCQkJCUlDYXRhbG9nRW50cnkgY2F0YWxvZ0VudHJ5ID0gKElDYXRhbG9nRW50cnkpdXNlckNhdGFsb2cuY3JlYXRlQ2F0YWxvZ0VsZW1lbnQoSUNhdGFsb2dFbnRyeS5FTlRSWV9UWVBFX1BVQkxJQyk7Ci0JCQkgICAgY2F0YWxvZ0VudHJ5LnNldEtleSgidGVzdEtleSIpOwotCQkJICAgIGNhdGFsb2dFbnRyeS5zZXRVUkkoImh0dHA6Ly90ZXN0dXJpIik7Ci0JCQkgICAgdXNlckNhdGFsb2cuYWRkQ2F0YWxvZ0VsZW1lbnQoY2F0YWxvZ0VudHJ5KTsKLQkJCSAgICBydW5UZXN0KCJwbGF0Zm9ybTovcmVzb3VyY2UvUHJvamVjdC9JbnZhbGlkU2NoZW1hSW5YTUxDYXRhbG9nLnhzZCIvKkZJTEVfUFJPVE9DT0wgKyBmaWxlLmdldExvY2F0aW9uKCkudG9TdHJpbmcoKSovLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0JCQkgICAgY2F0YWxvZy5yZW1vdmVDYXRhbG9nRWxlbWVudChjYXRhbG9nRW50cnkpOwotCQkJfQkKLQkJfQkKLQl9IAotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvQnVnRml4ZXMvTWlzc2luZ0Nsb3NpbmdTY2hlbWFUYWcvTWlzc2luZ0Nsb3NpbmdTY2hlbWFUYWcueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0TWlzc2luZ0Nsb3NpbmdTY2hlbWFUYWcoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIk1pc3NpbmdDbG9zaW5nU2NoZW1hVGFnIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIEJVR0ZJWEVTX0RJUiArICJNaXNzaW5nQ2xvc2luZ1NjaGVtYVRhZy8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiTWlzc2luZ0Nsb3NpbmdTY2hlbWFUYWcvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiTWlzc2luZ0Nsb3NpbmdTY2hlbWFUYWcvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9CdWdGaXhlcy9JbXBvcnRYU0RXaXRoWFNESW1wb3J0SW5EaWZmRGlyL0ltcG9ydFhTRFdpdGhYU0RJbXBvcnRJbkRpZmZEaXIueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0WFNEV2l0aFhTREltcG9ydEluRGlmZkRpcigpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0WFNEV2l0aFhTREltcG9ydEluRGlmZkRpciI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiSW1wb3J0WFNEV2l0aFhTREltcG9ydEluRGlmZkRpci8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiSW1wb3J0WFNEV2l0aFhTREltcG9ydEluRGlmZkRpci8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIEJVR0ZJWEVTX0RJUiArICJJbXBvcnRYU0RXaXRoWFNESW1wb3J0SW5EaWZmRGlyLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvQnVnRml4ZXMvSW1wb3J0SW52YWxpZExvY2F0aW9uL0ltcG9ydEludmFsaWRMb2NhdGlvbi54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRJbnZhbGlkTG9jYXRpb24oKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydEludmFsaWRMb2NhdGlvbiI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiSW1wb3J0SW52YWxpZExvY2F0aW9uLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIEJVR0ZJWEVTX0RJUiArICJJbXBvcnRJbnZhbGlkTG9jYXRpb24vIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiSW1wb3J0SW52YWxpZExvY2F0aW9uLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvQnVnRml4ZXMvVHdvT3BlbkJyYWNrZXRzL1R3b09wZW5CcmFja2V0cy54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RUd29PcGVuQnJhY2tldHMoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlR3b09wZW5CcmFja2V0cyI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiVHdvT3BlbkJyYWNrZXRzLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIEJVR0ZJWEVTX0RJUiArICJUd29PcGVuQnJhY2tldHMvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiVHdvT3BlbkJyYWNrZXRzLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvQnVnRml4ZXMvSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoL0EueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0V2l0aEluY29ycmVjdFNsYXNoKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJBIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIEJVR0ZJWEVTX0RJUiArICJJbXBvcnRXaXRoSW5jb3JyZWN0U2xhc2gvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgQlVHRklYRVNfRElSICsgIkltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIEJVR0ZJWEVTX0RJUiArICJJbXBvcnRXaXRoSW5jb3JyZWN0U2xhc2gvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9CdWdGaXhlcy9Ib25vdXJBbGxTY2hlbWFMb2NhdGlvbnMvZG9nLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEhvbm91ckFsbFNjaGVtYUxvY2F0aW9ucygpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiZG9nIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIEJVR0ZJWEVTX0RJUiArICJIb25vdXJBbGxTY2hlbWFMb2NhdGlvbnMvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgQlVHRklYRVNfRElSICsgIkhvbm91ckFsbFNjaGVtYUxvY2F0aW9ucy8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIEJVR0ZJWEVTX0RJUiArICJIb25vdXJBbGxTY2hlbWFMb2NhdGlvbnMvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBYU0RWYWxpZGF0aW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gbmV3IFhTRFZhbGlkYXRpb25Db25maWd1cmF0aW9uKCk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgY29uZmlndXJhdGlvbi5zZXRGZWF0dXJlKFhTRFZhbGlkYXRpb25Db25maWd1cmF0aW9uLkhPTk9VUl9BTExfU0NIRU1BX0xPQ0FUSU9OUywgdHJ1ZSk7Ci0gICAgfQotICAgIGNhdGNoKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGZhaWwoIlVuYWJsZSB0byBzZXQgdGhlIEhPTk9VUl9BTExfU0NIRU1BX0xPQ0FUSU9OUyBmZWF0dXJlIHRvIHRydWU6ICIgKyBlKTsKLSAgICB9Ci0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24sIGNvbmZpZ3VyYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvQnVnRml4ZXMvWFNEUmVnaXN0ZXJlZFdpdGhDYXRhbG9nL0ludmFsaWRTY2hlbWFXaXRoTmFtZXNwYWNlSW5DYXRhbG9nLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEludmFsaWRTY2hlbWFXaXRoTmFtZXNwYWNlSW5DYXRhbG9nKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbnZhbGlkU2NoZW1hV2l0aE5hbWVzcGFjZUluQ2F0YWxvZyI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIEJVR0ZJWEVTX0RJUiArICJYU0RSZWdpc3RlcmVkV2l0aENhdGFsb2cvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgQlVHRklYRVNfRElSICsgIlhTRFJlZ2lzdGVyZWRXaXRoQ2F0YWxvZy8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIEJVR0ZJWEVTX0RJUiArICJYU0RSZWdpc3RlcmVkV2l0aENhdGFsb2cvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBjcmVhdGVTaW1wbGVQcm9qZWN0KCJQcm9qZWN0IiwgbmV3IFN0cmluZ1tde3Rlc3RmaWxlfSk7Ci0gICAgCi0gICAgCi0gICAgSUNhdGFsb2cgY2F0YWxvZyA9IFhNTENvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldERlZmF1bHRYTUxDYXRhbG9nKCk7Ci0gICAgSU5leHRDYXRhbG9nW10gbmV4dENhdGFsb2dzID0gY2F0YWxvZy5nZXROZXh0Q2F0YWxvZ3MoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG5leHRDYXRhbG9ncy5sZW5ndGg7IGkrKykKLQl7Ci0JCUlOZXh0Q2F0YWxvZyBuZXh0Q2F0YWxvZyA9IG5leHRDYXRhbG9nc1tpXTsKLQkJaWYoWE1MQ29yZVBsdWdpbi5VU0VSX0NBVEFMT0dfSUQuZXF1YWxzKG5leHRDYXRhbG9nLmdldElkKCkpKXsKLQkJCUlDYXRhbG9nIHVzZXJDYXRhbG9nID0gbmV4dENhdGFsb2cuZ2V0UmVmZXJlbmNlZENhdGFsb2coKTsKLQkJCWlmKHVzZXJDYXRhbG9nICE9IG51bGwpCi0JCQl7Ci0JCQkJSUNhdGFsb2dFbnRyeSBjYXRhbG9nRW50cnkgPSAoSUNhdGFsb2dFbnRyeSl1c2VyQ2F0YWxvZy5jcmVhdGVDYXRhbG9nRWxlbWVudChJQ2F0YWxvZ0VudHJ5LkVOVFJZX1RZUEVfUFVCTElDKTsKLQkJCSAgICBjYXRhbG9nRW50cnkuc2V0S2V5KCJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL0NhdGFsb2d1ZSIpOwotCQkJICAgIGNhdGFsb2dFbnRyeS5zZXRVUkkoInBsYXRmb3JtOi9yZXNvdXJjZS9Qcm9qZWN0L0ludmFsaWRTY2hlbWFJblhNTENhdGFsb2cueHNkIik7Ci0JCQkgICAgdXNlckNhdGFsb2cuYWRkQ2F0YWxvZ0VsZW1lbnQoY2F0YWxvZ0VudHJ5KTsKLQkJCSAgICBydW5UZXN0KCJwbGF0Zm9ybTovcmVzb3VyY2UvUHJvamVjdC9JbnZhbGlkU2NoZW1hV2l0aE5hbWVzcGFjZUluQ2F0YWxvZy54c2QiLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0JCQkgICAgY2F0YWxvZy5yZW1vdmVDYXRhbG9nRWxlbWVudChjYXRhbG9nRW50cnkpOwotCQkJfQkKLQkJfQkKLQl9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9CdWdGaXhlcy9GdWxsQ29uZm9ybWFuY2UvRnVsbENvbmZvcm1hbmNlLnhzZAotICAgKiBidWcgMTQ3MDMzCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0RnVsbENvbmZvcm1hbmNlKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJGdWxsQ29uZm9ybWFuY2UiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgQlVHRklYRVNfRElSICsgIkZ1bGxDb25mb3JtYW5jZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiRnVsbENvbmZvcm1hbmNlLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgQlVHRklYRVNfRElSICsgIkZ1bGxDb25mb3JtYW5jZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIFhTRFZhbGlkYXRpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBuZXcgWFNEVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24oKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBjb25maWd1cmF0aW9uLnNldEZlYXR1cmUoWFNEVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24uSE9OT1VSX0FMTF9TQ0hFTUFfTE9DQVRJT05TLCB0cnVlKTsKLSAgICAgIGNvbmZpZ3VyYXRpb24uc2V0RmVhdHVyZShYU0RWYWxpZGF0aW9uQ29uZmlndXJhdGlvbi5GVUxMX1NDSEVNQV9DT05GT1JNQU5DRSwgdHJ1ZSk7Ci0gICAgfQotICAgIGNhdGNoKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGZhaWwoIlVuYWJsZSB0byBzZXQgdGhlIEZVTExfU0NIRU1BX0NPTkZPUk1BTkNFIGZlYXR1cmUgdG8gdHJ1ZTogIiArIGUpOwotICAgIH0KLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbiwgY29uZmlndXJhdGlvbik7Ci0gIH0KLSAKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9QYXRoc1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL1BhdGhzVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMmFhZWNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL1BhdGhzVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA4NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLS8qKgotICogVGVzdHMgdGhhdCB0ZXN0IHZhcmlvdXMgdHlwZXMgb2YgdmFyaWF0aW9ucyBpbiBmaWxlIHBhdGhzLgotICovCi1wdWJsaWMgY2xhc3MgUGF0aHNUZXN0IGV4dGVuZHMgQmFzZVRlc3RDYXNlCi17Ci0gIHByaXZhdGUgU3RyaW5nIFBBVEhTX0RJUiA9ICJQYXRocy8iOwotICAKLSAgLyoqCi0gICAqIENyZWF0ZSBhIHRlc3RzIHN1aXRlIGZyb20gdGhpcyB0ZXN0IGNsYXNzLgotICAgKiAKLSAgICogQHJldHVybiBBIHRlc3Qgc3VpdGUgY29udGFpbmluZyB0aGlzIHRlc3QgY2xhc3MuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoUGF0aHNUZXN0LmNsYXNzKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpCi0gIHsKLSAgICBzdXBlci5zZXRVcCgpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvU3BhY2UgSW5QYXRoL1NwYWNlSW5QYXRoVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0U3BhY2VJblBhdGhWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiU3BhY2VJblBhdGhWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2UgSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJTcGFjZSBJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2UgSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvU3BhY2UgSW5QYXRoL1NwYWNlSW5QYXRoSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RTcGFjZUluUGF0aEludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlNwYWNlSW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2UgSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJTcGFjZSBJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2UgSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvQ2xvc2VCcmFja2V0KUluUGF0aC9DbG9zZUJyYWNrZXRJblBhdGhWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RDbG9zZUJyYWNrZXRJblBhdGhWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiQ2xvc2VCcmFja2V0SW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldClJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldClJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0KUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0Nsb3NlQnJhY2tldClJblBhdGgvQ2xvc2VCcmFja2V0SW5QYXRoSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RDbG9zZUJyYWNrZXR0SW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiQ2xvc2VCcmFja2V0SW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0KUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0KUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXQpSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9DbG9zZUJyYWNrZXQpSW5GaWxlbmFtZVZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdENsb3NlQnJhY2tldEluRmlsZW5hbWVWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiQ2xvc2VCcmFja2V0KUluRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9DbG9zZUJyYWNrZXQpSW5GaWxlbmFtZUludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0Q2xvc2VCcmFja2V0SW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkNsb3NlQnJhY2tldClJbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aFZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdERhc2hJblBhdGhWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiRGFzaEluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoLUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaC1JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaC1JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9EYXNoLUluUGF0aC9EYXNoSW5QYXRoSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3REYXNoSW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiRGFzaEluUGF0aEludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkRhc2gtSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoLUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoLUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0Rhc2gtSW5GaWxlbmFtZVZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdERhc2hJbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkRhc2gtSW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9EYXNoSW5GaWxlbmFtZS9EYXNoLUluRmlsZW5hbWVJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdERhc2hJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiRGFzaC1JbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkRhc2hJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkRhc2hJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvRXhjbGFtYXRpb24hSW5QYXRoL0V4Y2xhbWF0aW9uSW5QYXRoVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0RXhjbGFtYXRpb25JblBhdGhWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiRXhjbGFtYXRpb25JblBhdGhWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb24hSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbiFJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb24hSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvRXhjbGFtYXRpb24hSW5QYXRoL0V4Y2xhbWF0aW9uSW5QYXRoSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RFeGNsYW1hdGlvbkluUGF0aEludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkV4Y2xhbWF0aW9uSW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb24hSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbiFJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb24hSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uIUluRmlsZW5hbWVWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RFeGNsYW1hdGlvbkluRmlsZW5hbWVWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiRXhjbGFtYXRpb24hSW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbkluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbkluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvRXhjbGFtYXRpb24hSW5GaWxlbmFtZUludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0RXhjbGFtYXRpb25JbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiRXhjbGFtYXRpb24hSW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb25JbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL09wZW5CcmFja2V0KEluUGF0aC9PcGVuQnJhY2tldEluUGF0aFZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdE9wZW5CcmFja2V0SW5QYXRoVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIk9wZW5CcmFja2V0SW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0KEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiT3BlbkJyYWNrZXQoSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0KEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL09wZW5CcmFja2V0KEluUGF0aC9PcGVuQnJhY2tldEluUGF0aEludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0T3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJPcGVuQnJhY2tldEluUGF0aEludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0KEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiT3BlbkJyYWNrZXQoSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0KEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldChJbkZpbGVuYW1lVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0T3BlbkJyYWNrZXRJbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIk9wZW5CcmFja2V0KEluRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiT3BlbkJyYWNrZXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiT3BlbkJyYWNrZXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL09wZW5CcmFja2V0KEluRmlsZW5hbWVJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdE9wZW5CcmFja2V0SW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIk9wZW5CcmFja2V0KEluRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9QZXJpb2QuSW5QYXRoL1BlcmlvZEluUGF0aFZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFBlcmlvZEluUGF0aFZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJQZXJpb2RJblBhdGhWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiUGVyaW9kLkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUGVyaW9kLkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2QuSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvUGVyaW9kLkluUGF0aC9QZXJpb2RJblBhdGhJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFBlcmlvZEluUGF0aEludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlBlcmlvZEluUGF0aEludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZC5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZC5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUGVyaW9kLkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvUGVyaW9kLkluRmlsZW5hbWVWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RQZXJpb2RJbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlBlcmlvZC5JbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUGVyaW9kSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvUGVyaW9kLkluRmlsZW5hbWVJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFBlcmlvZEluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJQZXJpb2QuSW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUGVyaW9kSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1F1b3RlJ0luUGF0aC9RdW90ZUluUGF0aFZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFF1b3RlSW5QYXRoVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlF1b3RlSW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlJ0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGUnSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlJ0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1F1b3RlJ0luUGF0aC9RdW90ZUluUGF0aEludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UXVvdGVJblBhdGhJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJRdW90ZUluUGF0aEludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlJ0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGUnSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlJ0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZSdJbkZpbGVuYW1lVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UXVvdGVJbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlF1b3RlJ0luRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL1F1b3RlJ0luRmlsZW5hbWVJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFF1b3RlSW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlF1b3RlJ0luRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9TcGFjZUluRmlsZW5hbWUvU3BhY2UgSW5GaWxlbmFtZVZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFNwYWNlSW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJTcGFjZSBJbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2VJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9TcGFjZSBJbkZpbGVuYW1lSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RTcGFjZUluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJTcGFjZSBJbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2VJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJTcGFjZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2VJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvVGlsZGV+SW5QYXRoL1RpbGRlSW5QYXRoVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0VGlsZGVJblBhdGhWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiVGlsZGVJblBhdGhWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGV+SW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZX5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGV+SW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvVGlsZGV+SW5QYXRoL1RpbGRlSW5QYXRoSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RUaWxkZUluUGF0aEludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlRpbGRlSW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGV+SW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZX5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGV+SW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RUaWxkZUluRmlsZW5hbWVWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiVGlsZGV+SW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9UaWxkZUluRmlsZW5hbWUvVGlsZGV+SW5GaWxlbmFtZUludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0VGlsZGVJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiVGlsZGV+SW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL1VuZGVyc2NvcmVJblBhdGhWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RVbmRlcnNjb3JlSW5QYXRoVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlVuZGVyc2NvcmVJblBhdGhWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZV9JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlVuZGVyc2NvcmVfSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlVuZGVyc2NvcmVfSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvVW5kZXJzY29yZUluUGF0aEludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0VW5kZXJzY29yZUluUGF0aEludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlVuZGVyc2NvcmVJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlX0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZV9JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZV9JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9VbmRlcnNjb3JlX0luRmlsZW5hbWVWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RVbmRlcnNjb3JlSW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJVbmRlcnNjb3JlX0luRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlVuZGVyc2NvcmVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlVuZGVyc2NvcmVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvVW5kZXJzY29yZV9JbkZpbGVuYW1lSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RVbmRlcnNjb3JlSW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlVuZGVyc2NvcmVfSW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlVuZGVyc2NvcmVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aFZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEFuZ2xlSGF0SW5QYXRoVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkFuZ2xlSGF0SW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkFuZ2xlSGF0XkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXReSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkFuZ2xlSGF0XkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aEludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0QW5nbGVIYXRJblBhdGhJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJBbmdsZUhhdEluUGF0aEludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkFuZ2xlSGF0XkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXReSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkFuZ2xlSGF0XkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9BbmdsZUhhdF5JbkZpbGVuYW1lVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0QW5nbGVIYXRJbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkFuZ2xlSGF0XkluRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEFuZ2xlSGF0SW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkFuZ2xlSGF0XkluRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkFuZ2xlSGF0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKioqKioqKioqKioqKioqKgotICAgKiBUZXN0IEltcG9ydHMKLSAgICoqKioqKioqKioqKioqKioqLwotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9JbXBvcnRBbmdsZUhhdF5JbkZpbGVuYW1lVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0QW5nbGVIYXRJbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydEFuZ2xlSGF0XkluRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0ltcG9ydEFuZ2xlSGF0XkluRmlsZW5hbWVJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydEFuZ2xlSGF0SW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydEFuZ2xlSGF0XkluRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkFuZ2xlSGF0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9BbmdsZUhhdF5JblBhdGgvSW1wb3J0QW5nbGVIYXRJblBhdGhWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRBbmdsZUhhdEluUGF0aFZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRBbmdsZUhhdEluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdF5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkFuZ2xlSGF0XkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdF5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9BbmdsZUhhdF5JblBhdGgvSW1wb3J0QW5nbGVIYXRJblBhdGhJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydEFuZ2xlSGF0SW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0QW5nbGVIYXRJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdF5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkFuZ2xlSGF0XkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdF5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0KLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1NwYWNlIEluUGF0aC9JbXBvcnRTcGFjZUluUGF0aFZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydFNwYWNlSW5QYXRoVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydFNwYWNlSW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlIEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2UgSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlIEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1NwYWNlIEluUGF0aC9JbXBvcnRTcGFjZUluUGF0aEludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0U3BhY2VJblBhdGhJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRTcGFjZUluUGF0aEludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlIEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2UgSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlIEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0Nsb3NlQnJhY2tldClJblBhdGgvSW1wb3J0Q2xvc2VCcmFja2V0SW5QYXRoVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0Q2xvc2VCcmFja2V0SW5QYXRoVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydENsb3NlQnJhY2tldEluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXQpSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXQpSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldClJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9DbG9zZUJyYWNrZXQpSW5QYXRoL0ltcG9ydENsb3NlQnJhY2tldEluUGF0aEludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0Q2xvc2VCcmFja2V0dEluUGF0aEludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydENsb3NlQnJhY2tldEluUGF0aEludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldClJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldClJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0KUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvSW1wb3J0Q2xvc2VCcmFja2V0KUluRmlsZW5hbWVWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRDbG9zZUJyYWNrZXRJbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydENsb3NlQnJhY2tldClJbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvSW1wb3J0Q2xvc2VCcmFja2V0KUluRmlsZW5hbWVJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydENsb3NlQnJhY2tldEluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRDbG9zZUJyYWNrZXQpSW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0Rhc2gtSW5QYXRoL0ltcG9ydERhc2hJblBhdGhWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnREYXNoSW5QYXRoVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydERhc2hJblBhdGhWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaC1JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkRhc2gtSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkRhc2gtSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvRGFzaC1JblBhdGgvSW1wb3J0RGFzaEluUGF0aEludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0RGFzaEluUGF0aEludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydERhc2hJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoLUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaC1JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaC1JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9EYXNoSW5GaWxlbmFtZS9JbXBvcnREYXNoLUluRmlsZW5hbWVWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnREYXNoSW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnREYXNoLUluRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkRhc2hJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkRhc2hJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvRGFzaEluRmlsZW5hbWUvSW1wb3J0RGFzaC1JbkZpbGVuYW1lSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnREYXNoSW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydERhc2gtSW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkRhc2hJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0V4Y2xhbWF0aW9uIUluUGF0aC9JbXBvcnRFeGNsYW1hdGlvbkluUGF0aFZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydEV4Y2xhbWF0aW9uSW5QYXRoVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydEV4Y2xhbWF0aW9uSW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uIUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb24hSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uIUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0V4Y2xhbWF0aW9uIUluUGF0aC9JbXBvcnRFeGNsYW1hdGlvbkluUGF0aEludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0RXhjbGFtYXRpb25JblBhdGhJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRFeGNsYW1hdGlvbkluUGF0aEludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uIUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb24hSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uIUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9JbXBvcnRFeGNsYW1hdGlvbiFJbkZpbGVuYW1lVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0RXhjbGFtYXRpb25JbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydEV4Y2xhbWF0aW9uIUluRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb25JbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbkluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb25JbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0ltcG9ydEV4Y2xhbWF0aW9uIUluRmlsZW5hbWVJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydEV4Y2xhbWF0aW9uSW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydEV4Y2xhbWF0aW9uIUluRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbkluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbkluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9PcGVuQnJhY2tldChJblBhdGgvSW1wb3J0T3BlbkJyYWNrZXRJblBhdGhWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRPcGVuQnJhY2tldEluUGF0aFZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRPcGVuQnJhY2tldEluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldChJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0KEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldChJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9PcGVuQnJhY2tldChJblBhdGgvSW1wb3J0T3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydE9wZW5CcmFja2V0SW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0T3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldChJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0KEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldChJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvSW1wb3J0T3BlbkJyYWNrZXQoSW5GaWxlbmFtZVZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydE9wZW5CcmFja2V0SW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRPcGVuQnJhY2tldChJbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiT3BlbkJyYWNrZXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9JbXBvcnRPcGVuQnJhY2tldChJbkZpbGVuYW1lSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRPcGVuQnJhY2tldEluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRPcGVuQnJhY2tldChJbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiT3BlbkJyYWNrZXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiT3BlbkJyYWNrZXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvUGVyaW9kLkluUGF0aC9JbXBvcnRQZXJpb2RJblBhdGhWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRQZXJpb2RJblBhdGhWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0UGVyaW9kSW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZC5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZC5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUGVyaW9kLkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1BlcmlvZC5JblBhdGgvSW1wb3J0UGVyaW9kSW5QYXRoSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRQZXJpb2RJblBhdGhJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRQZXJpb2RJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2QuSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2QuSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZC5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL0ltcG9ydFBlcmlvZC5JbkZpbGVuYW1lVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0UGVyaW9kSW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRQZXJpb2QuSW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2RJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2RJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL0ltcG9ydFBlcmlvZC5JbkZpbGVuYW1lSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRQZXJpb2RJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0UGVyaW9kLkluRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2RJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2RJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9RdW90ZSdJblBhdGgvSW1wb3J0UXVvdGVJblBhdGhWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRRdW90ZUluUGF0aFZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRRdW90ZUluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZSdJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlJ0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZSdJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9RdW90ZSdJblBhdGgvSW1wb3J0UXVvdGVJblBhdGhJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydFF1b3RlSW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0UXVvdGVJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZSdJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlJ0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZSdJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9RdW90ZUluRmlsZW5hbWUvSW1wb3J0UXVvdGUnSW5GaWxlbmFtZVZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydFF1b3RlSW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRRdW90ZSdJbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9JbXBvcnRRdW90ZSdJbkZpbGVuYW1lSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRRdW90ZUluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRRdW90ZSdJbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL0ltcG9ydFNwYWNlIEluRmlsZW5hbWVWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRTcGFjZUluRmlsZW5hbWVWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0U3BhY2UgSW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJTcGFjZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJTcGFjZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9TcGFjZUluRmlsZW5hbWUvSW1wb3J0U3BhY2UgSW5GaWxlbmFtZUludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0U3BhY2VJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0U3BhY2UgSW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2VJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1RpbGRlfkluUGF0aC9JbXBvcnRUaWxkZUluUGF0aFZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydFRpbGRlSW5QYXRoVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydFRpbGRlSW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlfkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGV+SW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlfkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1RpbGRlfkluUGF0aC9JbXBvcnRUaWxkZUluUGF0aEludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0VGlsZGVJblBhdGhJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRUaWxkZUluUGF0aEludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlfkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGV+SW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlfkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9JbXBvcnRUaWxkZX5JbkZpbGVuYW1lVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0VGlsZGVJbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydFRpbGRlfkluRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL0ltcG9ydFRpbGRlfkluRmlsZW5hbWVJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydFRpbGRlSW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydFRpbGRlfkluRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9JbXBvcnRVbmRlcnNjb3JlSW5QYXRoVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0VW5kZXJzY29yZUluUGF0aFZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRVbmRlcnNjb3JlSW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlVuZGVyc2NvcmVfSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlX0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlX0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL0ltcG9ydFVuZGVyc2NvcmVJblBhdGhJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydFVuZGVyc2NvcmVJblBhdGhJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRVbmRlcnNjb3JlSW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZV9JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlVuZGVyc2NvcmVfSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlVuZGVyc2NvcmVfSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvSW1wb3J0VW5kZXJzY29yZV9JbkZpbGVuYW1lVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0VW5kZXJzY29yZUluRmlsZW5hbWVWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0VW5kZXJzY29yZV9JbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlVuZGVyc2NvcmVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL0ltcG9ydFVuZGVyc2NvcmVfSW5GaWxlbmFtZUludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0VW5kZXJzY29yZUluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRVbmRlcnNjb3JlX0luRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9YU0RWYWxpZGF0aW9uVGVzdHNQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL1hTRFZhbGlkYXRpb25UZXN0c1BsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTRhNzUyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL1hTRFZhbGlkYXRpb25UZXN0c1BsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMuaW50ZXJuYWw7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7Ci0KLS8qKgotICogVGhlIHBsdWdpbiBjbGFzcyBmb3IgdGhpcyB0ZXN0IHBsdWdpbi4KLSAqLwotcHVibGljIGNsYXNzIFhTRFZhbGlkYXRpb25UZXN0c1BsdWdpbiBleHRlbmRzIFBsdWdpbgotewotICBwcm90ZWN0ZWQgc3RhdGljIEJ1bmRsZSBwbHVnaW5CdW5kbGU7Ci0KLSAgcHVibGljIFhTRFZhbGlkYXRpb25UZXN0c1BsdWdpbigpCi0gIHsKLSAgfQotICAKLSAgLyoqCi0gICAqIEBzZWUgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUFjdGl2YXRvciNzdGFydChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHN0YXJ0KEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiAKLSAgewotCXN1cGVyLnN0YXJ0KGNvbnRleHQpOwotCXBsdWdpbkJ1bmRsZSA9IGNvbnRleHQuZ2V0QnVuZGxlKCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAc2VlIG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVBY3RpdmF0b3Ijc3RvcChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKLSAgICovCi0gIHB1YmxpYyB2b2lkIHN0b3AoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIAotICB7Ci0JcGx1Z2luQnVuZGxlID0gbnVsbDsKLQlzdXBlci5zdG9wKGNvbnRleHQpOwotICB9Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSBpbnN0YWxsIFVSTCBvZiB0aGlzIHBsdWdpbi4KLSAgICogCi0gICAqIEByZXR1cm4gdGhlIGluc3RhbGwgdXJsIG9mIHRoaXMgcGx1Z2luCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRJbnN0YWxsVVJMKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIHJldHVybiBGaWxlTG9jYXRvci5yZXNvbHZlKHBsdWdpbkJ1bmRsZS5nZXRFbnRyeSgiLyIpKS5nZXRGaWxlKCk7Ci0gICAgfQotICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmZGVjODEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTE2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci0KLTxwcm9qZWN0Ci0gICAgbmFtZT0idGVzdHN1aXRlIgotICAgIGRlZmF1bHQ9InJ1biIKLSAgICBiYXNlZGlyPSIuIj4KLSAgICAKLSAgICA8IS0tIFRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyBzaG91bGQgYmUgcGFzc2VkIGludG8gdGhpcyBzY3JpcHQgLS0+Ci0gICAgPCEtLSAke2VjbGlwc2UtaG9tZX0gICAtLT4KLSAgICA8IS0tICR7YnVpbGREaXJlY3Rvcnl9ICAtLT4KLSAgICA8IS0tICR7YnVpbGRMYWJlbH0gICAgICAgIC0tPgotCi0gICAgPCEtLSBzaG91bGQgYmUgbGl0dGxlIG5lZWQgdG8gY2hhbmdlIHdoYXQncyBhYm92ZSAgLS0+Ci0gICAgCi0JPHByb3BlcnR5Ci0JCW5hbWU9InBsdWdpbi1uYW1lIgotCQl2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzIiAvPgotCi0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9ImNsYXNzbmFtZSIKLSAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbC5BbGxYU0RUZXN0cyIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0idGVzdFR5cGUiCi0gICAgICAgIHZhbHVlPSJjb3JlLXRlc3QiIC8+Ci0KLSAgICA8IS0tIHNob3VsZCBiZSBsaXR0bGUgbmVlZCB0byBjaGFuZ2Ugd2hhdCdzIGJlbG93IC0tPgotCi0gICAgPGVjaG8gbWVzc2FnZT0iYmFzZWRpcjogJHtiYXNlZGlyfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJlY2xpcHNlLWhvbWU6ICR7ZWNsaXBzZS1ob21lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJidWlsZERpcmVjdG9yeTogJHtidWlsZERpcmVjdG9yeX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0icGx1Z2luLW5hbWU6ICR7cGx1Z2luLW5hbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImNsYXNzbmFtZTogJHtjbGFzc25hbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9InRlc3RUeXBlICR7dGVzdFR5cGV9IiAvPgotCi0KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0ibGlicmFyeS1maWxlIgotICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2UudGVzdF8zLjEuMC9saWJyYXJ5LnhtbCIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0id29ya3NwYWNlIgotICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L2p1bml0d29ya3NwYWNlcy8ke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgCi0gICAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPgotICAgIDwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+Ci0gICAgPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+Ci0gICAgPHRhcmdldCBuYW1lPSJpbml0Ij4KLSAgICAgICAgPHRzdGFtcCAvPgotICAgICAgICA8ZGVsZXRlPgotICAgICAgICAgICAgPGZpbGVzZXQKLSAgICAgICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSIKLSAgICAgICAgICAgICAgICBpbmNsdWRlcz0iJHtwbHVnaW4tbmFtZX0uKnhtbCIgLz4KLSAgICAgICAgPC9kZWxldGU+Ci0gICAgICAgIDwhLS0gbWFrZSBkaXJlY3RvcnksIGluIGNhc2UgcGF0aCBkb2Vzbid0IGV4aXN0IHlldCAtLT4KLSAgICAgICAgPG1rZGlyIGRpcj0iJHt3b3Jrc3BhY2V9IiAvPgotICAgICAgICA8IS0tICBidXQgZGVsZXRlIHRvIG1ha2Ugc3VyZSBmcmVzaCBjb250ZW50cy0tPgotICAgICAgICA8ZGVsZXRlCi0gICAgICAgICAgICBkaXI9IiR7d29ya3NwYWNlfSIKLSAgICAgICAgICAgIHF1aWV0PSJ0cnVlIiAvPgotCi0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGRlZmluZXMgdGhlIHRlc3RzIHRoYXQgbmVlZCB0byBiZSBydW4uIC0tPgotICAgIDx0YXJnZXQgbmFtZT0ic3VpdGUiPgotCi0gICAgICAgIDxhbnQKLSAgICAgICAgICAgIHRhcmdldD0iJHt0ZXN0VHlwZX0iCi0gICAgICAgICAgICBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iCi0gICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJkYXRhLWRpciIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHt3b3Jrc3BhY2V9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0icGx1Z2luLW5hbWUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iY2xhc3NuYW1lIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke2NsYXNzbmFtZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJwbHVnaW4tcGF0aCIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgIDwvYW50PgotCi0gICAgICAgIDxjb3B5Ci0gICAgICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiCi0gICAgICAgICAgICBmaWxlPSIke3dvcmtzcGFjZX0vLm1ldGFkYXRhLy5sb2ciCi0gICAgICAgICAgICB0b2ZpbGU9IiR7YnVpbGREaXJlY3Rvcnl9LyR7YnVpbGRMYWJlbH0vdGVzdFJlc3VsdHMvY29uc29sZWxvZ3MvJHtwbHVnaW4tbmFtZX0uY29uc29sZWxvZy50eHQiIC8+Ci0KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgotICAgIDwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4KLSAgICA8IS0tIGRlbGV0ZSB0ZW1wb3JhcnkgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZC4gLS0+Ci0gICAgPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KLSAgICAgICAgPCEtLSB1c3VhbGx5IG5vIG5lZWQgdG8gZGVsZXRlIHdvcmtzcGFjZSB1bnRpbCBuZXh0IHJ1biwgYW5kIGxlYXZpbmcgaXQgYWxsb3dzIGluc3BlY3Rpb24gLS0+Ci0gICAgICAgIDwhLS0gPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiIC8+IC0tPgotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSB0ZXN0IHN1aXRlLiBBbnkgYWN0aW9ucyB0aGF0IG5lZWQgdG8gaGFwcGVuIC0tPgotICAgIDwhLS0gYWZ0ZXIgYWxsIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuIHNob3VsZCBnbyBoZXJlLiAtLT4KLSAgICA8dGFyZ2V0Ci0gICAgICAgIG5hbWU9InJ1biIKLSAgICAgICAgZGVwZW5kcz0iaW5pdCxzdWl0ZSxjbGVhbnVwIj4KLSAgICAgICAgPGFudAotICAgICAgICAgICAgdGFyZ2V0PSJjb2xsZWN0IgotICAgICAgICAgICAgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iaW5jbHVkZXMiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Lip4bWwiIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJvdXRwdXQtZmlsZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0ueG1sIiAvPgotICAgICAgICA8L2FudD4KLSAgICA8L3RhcmdldD4KLQotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvLmN2c2lnbm9yZSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiNTM1NzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLWdlbmVyYXRlZFJlc3VsdHMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9CdWdGaXhlcy9FbXB0eUZpbGUvRW1wdHkueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9CdWdGaXhlcy9FbXB0eUZpbGUvRW1wdHkueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvQnVnRml4ZXMvRW1wdHlGaWxlL0VtcHR5LnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9CdWdGaXhlcy9GdWxsQ29uZm9ybWFuY2UvRnVsbENvbmZvcm1hbmNlLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvQnVnRml4ZXMvRnVsbENvbmZvcm1hbmNlL0Z1bGxDb25mb3JtYW5jZS54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTQ3OGFjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9CdWdGaXhlcy9GdWxsQ29uZm9ybWFuY2UvRnVsbENvbmZvcm1hbmNlLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDINCi0NCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLXJjYXNlLVJlY3Vyc2UuMjogVGhlcmUgaXMgbm90IGEgY29tcGxldGUgZnVuY3Rpb25hbCBtYXBwaW5nIGJldHdlZW4gdGhlIHBhcnRpY2xlcy4gWzM1LCA0M10NCi1kZXJpdmF0aW9uLW9rLXJlc3RyaWN0aW9uLjUuNC4yOiBFcnJvciBmb3IgdHlwZSAnUmVzdHJpY3RlZEZvbycuICBUaGUgcGFydGljbGUgb2YgdGhlIHR5cGUgaXMgbm90IGEgdmFsaWQgcmVzdHJpY3Rpb24gb2YgdGhlIHBhcnRpY2xlIG9mIHRoZSBiYXNlLiBbMzUsIDQzXQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL0J1Z0ZpeGVzL0hvbm91ckFsbFNjaGVtYUxvY2F0aW9ucy9kb2cueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9CdWdGaXhlcy9Ib25vdXJBbGxTY2hlbWFMb2NhdGlvbnMvZG9nLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL0J1Z0ZpeGVzL0hvbm91ckFsbFNjaGVtYUxvY2F0aW9ucy9kb2cueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL0J1Z0ZpeGVzL0ltcG9ydEludmFsaWRMb2NhdGlvbi9JbXBvcnRJbnZhbGlkTG9jYXRpb24ueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9CdWdGaXhlcy9JbXBvcnRJbnZhbGlkTG9jYXRpb24vSW1wb3J0SW52YWxpZExvY2F0aW9uLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhZmZjZWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL0J1Z0ZpeGVzL0ltcG9ydEludmFsaWRMb2NhdGlvbi9JbXBvcnRJbnZhbGlkTG9jYXRpb24ueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotbnVtYmVyIG9mIHdhcm5pbmdzICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS13YXJuaW5nIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotc2NoZW1hX3JlZmVyZW5jZS40OiBGYWlsZWQgdG8gcmVhZCBzY2hlbWEgZG9jdW1lbnQgJ3N1YmRpci9pbXBvcnRpbmcueHNkYScsIGJlY2F1c2UgMSkgY291bGQgbm90IGZpbmQgdGhlIGRvY3VtZW50OyAyKSB0aGUgZG9jdW1lbnQgY291bGQgbm90IGJlIHJlYWQ7IDMpIHRoZSByb290IGVsZW1lbnQgb2YgdGhlIGRvY3VtZW50IGlzIG5vdCA8eHNkOnNjaGVtYT4uIFszLCA5OF0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvQnVnRml4ZXMvSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoL0EueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9CdWdGaXhlcy9JbXBvcnRXaXRoSW5jb3JyZWN0U2xhc2gvQS54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9CdWdGaXhlcy9JbXBvcnRXaXRoSW5jb3JyZWN0U2xhc2gvQS54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvQnVnRml4ZXMvSW1wb3J0WFNEV2l0aFhTREltcG9ydEluRGlmZkRpci9JbXBvcnRYU0RXaXRoWFNESW1wb3J0SW5EaWZmRGlyLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvQnVnRml4ZXMvSW1wb3J0WFNEV2l0aFhTREltcG9ydEluRGlmZkRpci9JbXBvcnRYU0RXaXRoWFNESW1wb3J0SW5EaWZmRGlyLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL0J1Z0ZpeGVzL0ltcG9ydFhTRFdpdGhYU0RJbXBvcnRJbkRpZmZEaXIvSW1wb3J0WFNEV2l0aFhTREltcG9ydEluRGlmZkRpci54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvQnVnRml4ZXMvSW52YWxpZFNjaGVtYUluWE1MQ2F0YWxvZy9JbnZhbGlkU2NoZW1hSW5YTUxDYXRhbG9nLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvQnVnRml4ZXMvSW52YWxpZFNjaGVtYUluWE1MQ2F0YWxvZy9JbnZhbGlkU2NoZW1hSW5YTUxDYXRhbG9nLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0YTY2NTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL0J1Z0ZpeGVzL0ludmFsaWRTY2hlbWFJblhNTENhdGFsb2cvSW52YWxpZFNjaGVtYUluWE1MQ2F0YWxvZy54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1zcmMtcmVzb2x2ZS40LjI6IEVycm9yIHJlc29sdmluZyBjb21wb25lbnQgJ3N0cmluZ2EnLiBJdCB3YXMgZGV0ZWN0ZWQgdGhhdCAnc3RyaW5nYScgaXMgaW4gbmFtZXNwYWNlICdodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYScsIGJ1dCBjb21wb25lbnRzIGZyb20gdGhpcyBuYW1lc3BhY2UgYXJlIG5vdCByZWZlcmVuY2VhYmxlIGZyb20gc2NoZW1hIGRvY3VtZW50ICdwbGF0Zm9ybTovcmVzb3VyY2UvUHJvamVjdC9JbnZhbGlkU2NoZW1hSW5YTUxDYXRhbG9nLnhzZCcuIElmIHRoaXMgaXMgdGhlIGluY29ycmVjdCBuYW1lc3BhY2UsIHBlcmhhcHMgdGhlIHByZWZpeCBvZiAnc3RyaW5nYScgbmVlZHMgdG8gYmUgY2hhbmdlZC4gSWYgdGhpcyBpcyB0aGUgY29ycmVjdCBuYW1lc3BhY2UsIHRoZW4gYW4gYXBwcm9wcmlhdGUgJ2ltcG9ydCcgdGFnIHNob3VsZCBiZSBhZGRlZCB0byAncGxhdGZvcm06L3Jlc291cmNlL1Byb2plY3QvSW52YWxpZFNjaGVtYUluWE1MQ2F0YWxvZy54c2QnLiBbMywgNTBdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL0J1Z0ZpeGVzL01pc3NpbmdDbG9zaW5nU2NoZW1hVGFnL01pc3NpbmdDbG9zaW5nU2NoZW1hVGFnLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvQnVnRml4ZXMvTWlzc2luZ0Nsb3NpbmdTY2hlbWFUYWcvTWlzc2luZ0Nsb3NpbmdTY2hlbWFUYWcueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTdmYjAwZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvQnVnRml4ZXMvTWlzc2luZ0Nsb3NpbmdTY2hlbWFUYWcvTWlzc2luZ0Nsb3NpbmdTY2hlbWFUYWcueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFsyLCAxMjVdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL0J1Z0ZpeGVzL1R3b09wZW5CcmFja2V0cy9Ud29PcGVuQnJhY2tldHMueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9CdWdGaXhlcy9Ud29PcGVuQnJhY2tldHMvVHdvT3BlbkJyYWNrZXRzLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmMzM5OTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL0J1Z0ZpeGVzL1R3b09wZW5CcmFja2V0cy9Ud29PcGVuQnJhY2tldHMueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotVGhlIG1hcmt1cCBpbiB0aGUgZG9jdW1lbnQgcHJlY2VkaW5nIHRoZSByb290IGVsZW1lbnQgbXVzdCBiZSB3ZWxsLWZvcm1lZC4gWzEsIDJdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL0J1Z0ZpeGVzL1hTRFJlZ2lzdGVyZWRXaXRoQ2F0YWxvZy9JbnZhbGlkU2NoZW1hV2l0aE5hbWVzcGFjZUluQ2F0YWxvZy54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL0J1Z0ZpeGVzL1hTRFJlZ2lzdGVyZWRXaXRoQ2F0YWxvZy9JbnZhbGlkU2NoZW1hV2l0aE5hbWVzcGFjZUluQ2F0YWxvZy54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZWQxYTk5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9CdWdGaXhlcy9YU0RSZWdpc3RlcmVkV2l0aENhdGFsb2cvSW52YWxpZFNjaGVtYVdpdGhOYW1lc3BhY2VJbkNhdGFsb2cueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRWxlbWVudCB0eXBlICJjb21wbGV4VHlwZSIgbXVzdCBiZSBmb2xsb3dlZCBieSBlaXRoZXIgYXR0cmlidXRlIHNwZWNpZmljYXRpb25zLCAiPiIgb3IgIi8+Ii4gWzYsIDNdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9BbmdsZUhhdF5JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9BbmdsZUhhdF5JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2Y4YWE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvQW5nbGVIYXReSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvQW5nbGVIYXReSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVWYWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvQW5nbGVIYXReSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvSW1wb3J0QW5nbGVIYXReSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvSW1wb3J0QW5nbGVIYXReSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDU5NGM5OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0ltcG9ydEFuZ2xlSGF0XkluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVJlZmVyZW5jZWQgZmlsZSBjb250YWlucyBlcnJvcnMgKHRlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvQW5nbGVIYXReSW5GaWxlbmFtZUludmFsaWQueHNkKS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCByaWdodCBjbGljayBvbiB0aGUgbWVzc2FnZSBhbmQgc2VsZWN0ICJTaG93IERldGFpbHMuLi4iIFsxLCAwXQotLT4gWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvSW1wb3J0QW5nbGVIYXReSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0ltcG9ydEFuZ2xlSGF0XkluRmlsZW5hbWVWYWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvSW1wb3J0QW5nbGVIYXReSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhJbnZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoSW52YWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2Y4YWE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhJbnZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoVmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhWYWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhWYWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0ltcG9ydEFuZ2xlSGF0SW5QYXRoSW52YWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9JbXBvcnRBbmdsZUhhdEluUGF0aEludmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGZhNjEzNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0ltcG9ydEFuZ2xlSGF0SW5QYXRoSW52YWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1SZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoSW52YWxpZC54c2QpLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJpZ2h0IGNsaWNrIG9uIHRoZSBtZXNzYWdlIGFuZCBzZWxlY3QgIlNob3cgRGV0YWlscy4uLiIgWzEsIDBdCi0tPiBYTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9JbXBvcnRBbmdsZUhhdEluUGF0aFZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0ltcG9ydEFuZ2xlSGF0SW5QYXRoVmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0ltcG9ydEFuZ2xlSGF0SW5QYXRoVmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0Nsb3NlQnJhY2tldEluUGF0aEludmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvQ2xvc2VCcmFja2V0SW5QYXRoSW52YWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdmOGFhNy4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvQ2xvc2VCcmFja2V0SW5QYXRoSW52YWxpZC54c2QtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9DbG9zZUJyYWNrZXRJblBhdGhWYWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9DbG9zZUJyYWNrZXRJblBhdGhWYWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvQ2xvc2VCcmFja2V0SW5QYXRoVmFsaWQueHNkLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9JbXBvcnRDbG9zZUJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0ltcG9ydENsb3NlQnJhY2tldEluUGF0aEludmFsaWQueHNkLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzYTY3MmUuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0ltcG9ydENsb3NlQnJhY2tldEluUGF0aEludmFsaWQueHNkLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVJlZmVyZW5jZWQgZmlsZSBjb250YWlucyBlcnJvcnMgKHRlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXQpSW5QYXRoL0Nsb3NlQnJhY2tldEluUGF0aEludmFsaWQueHNkKS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCByaWdodCBjbGljayBvbiB0aGUgbWVzc2FnZSBhbmQgc2VsZWN0ICJTaG93IERldGFpbHMuLi4iIFsxLCAwXQotLT4gWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9JbXBvcnRDbG9zZUJyYWNrZXRJblBhdGhWYWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9JbXBvcnRDbG9zZUJyYWNrZXRJblBhdGhWYWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvSW1wb3J0Q2xvc2VCcmFja2V0SW5QYXRoVmFsaWQueHNkLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9DbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2Y4YWE3Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9DbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVWYWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9DbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9DbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2ciCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvSW1wb3J0Q2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0ltcG9ydENsb3NlQnJhY2tldFwwNTFJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmZjZjQ5Yi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvSW1wb3J0Q2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2ciCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1SZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9DbG9zZUJyYWNrZXQpSW5GaWxlbmFtZUludmFsaWQueHNkKS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCByaWdodCBjbGljayBvbiB0aGUgbWVzc2FnZSBhbmQgc2VsZWN0ICJTaG93IERldGFpbHMuLi4iIFsxLCAwXQotLT4gWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9JbXBvcnRDbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0ltcG9ydENsb3NlQnJhY2tldFwwNTFJbkZpbGVuYW1lVmFsaWQueHNkLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0ltcG9ydENsb3NlQnJhY2tldFwwNTFJbkZpbGVuYW1lVmFsaWQueHNkLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9EYXNoLUluUGF0aC9EYXNoSW5QYXRoSW52YWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhJbnZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3ZjhhYTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhJbnZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aFZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aFZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhWYWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaC1JblBhdGgvSW1wb3J0RGFzaEluUGF0aEludmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9EYXNoLUluUGF0aC9JbXBvcnREYXNoSW5QYXRoSW52YWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZGNlZjE4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9EYXNoLUluUGF0aC9JbXBvcnREYXNoSW5QYXRoSW52YWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1SZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aEludmFsaWQueHNkKS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCByaWdodCBjbGljayBvbiB0aGUgbWVzc2FnZSBhbmQgc2VsZWN0ICJTaG93IERldGFpbHMuLi4iIFsxLCAwXQotLT4gWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9EYXNoLUluUGF0aC9JbXBvcnREYXNoSW5QYXRoVmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9EYXNoLUluUGF0aC9JbXBvcnREYXNoSW5QYXRoVmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaC1JblBhdGgvSW1wb3J0RGFzaEluUGF0aFZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9EYXNoSW5GaWxlbmFtZS9EYXNoLUluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2Y4YWE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9EYXNoSW5GaWxlbmFtZS9EYXNoLUluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lVmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9EYXNoSW5GaWxlbmFtZS9EYXNoLUluRmlsZW5hbWVWYWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9EYXNoSW5GaWxlbmFtZS9EYXNoLUluRmlsZW5hbWVWYWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaEluRmlsZW5hbWUvSW1wb3J0RGFzaC1JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0ltcG9ydERhc2gtSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODI2OTdkZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaEluRmlsZW5hbWUvSW1wb3J0RGFzaC1JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1SZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lSW52YWxpZC54c2QpLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJpZ2h0IGNsaWNrIG9uIHRoZSBtZXNzYWdlIGFuZCBzZWxlY3QgIlNob3cgRGV0YWlscy4uLiIgWzEsIDBdCi0tPiBYTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0ltcG9ydERhc2gtSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaEluRmlsZW5hbWUvSW1wb3J0RGFzaC1JbkZpbGVuYW1lVmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaEluRmlsZW5hbWUvSW1wb3J0RGFzaC1JbkZpbGVuYW1lVmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvRXhjbGFtYXRpb25JblBhdGhJbnZhbGlkLnhzZC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvRXhjbGFtYXRpb25JblBhdGhJbnZhbGlkLnhzZC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2Y4YWE3Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0V4Y2xhbWF0aW9uSW5QYXRoSW52YWxpZC54c2QtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0V4Y2xhbWF0aW9uSW5QYXRoVmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aFZhbGlkLnhzZC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0V4Y2xhbWF0aW9uSW5QYXRoVmFsaWQueHNkLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0ltcG9ydEV4Y2xhbWF0aW9uSW5QYXRoSW52YWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0ltcG9ydEV4Y2xhbWF0aW9uSW5QYXRoSW52YWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDA2MjdkNC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9JbXBvcnRFeGNsYW1hdGlvbkluUGF0aEludmFsaWQueHNkLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVJlZmVyZW5jZWQgZmlsZSBjb250YWlucyBlcnJvcnMgKHRlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvbiFJblBhdGgvRXhjbGFtYXRpb25JblBhdGhJbnZhbGlkLnhzZCkuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmlnaHQgY2xpY2sgb24gdGhlIG1lc3NhZ2UgYW5kIHNlbGVjdCAiU2hvdyBEZXRhaWxzLi4uIiBbMSwgMF0KLS0+IFhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9JbXBvcnRFeGNsYW1hdGlvbkluUGF0aFZhbGlkLnhzZC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvSW1wb3J0RXhjbGFtYXRpb25JblBhdGhWYWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9JbXBvcnRFeGNsYW1hdGlvbkluUGF0aFZhbGlkLnhzZC1sb2ciCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9FeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2Y4YWE3Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2ciCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1YTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvRXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvRXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVWYWxpZC54c2QtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvSW1wb3J0RXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9JbXBvcnRFeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODBhOGY0Mi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9JbXBvcnRFeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotUmVmZXJlbmNlZCBmaWxlIGNvbnRhaW5zIGVycm9ycyAodGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9FeGNsYW1hdGlvbiFJbkZpbGVuYW1lSW52YWxpZC54c2QpLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJpZ2h0IGNsaWNrIG9uIHRoZSBtZXNzYWdlIGFuZCBzZWxlY3QgIlNob3cgRGV0YWlscy4uLiIgWzEsIDBdCi0tPiBYTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvSW1wb3J0RXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvSW1wb3J0RXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0ltcG9ydEV4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVWYWxpZC54c2QtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvSW1wb3J0T3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvSW1wb3J0T3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZWQ5YmU4Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL0ltcG9ydE9wZW5CcmFja2V0SW5QYXRoSW52YWxpZC54c2QtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotUmVmZXJlbmNlZCBmaWxlIGNvbnRhaW5zIGVycm9ycyAodGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0KEluUGF0aC9PcGVuQnJhY2tldEluUGF0aEludmFsaWQueHNkKS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCByaWdodCBjbGljayBvbiB0aGUgbWVzc2FnZSBhbmQgc2VsZWN0ICJTaG93IERldGFpbHMuLi4iIFsxLCAwXQotLT4gWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL0ltcG9ydE9wZW5CcmFja2V0SW5QYXRoVmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9JbXBvcnRPcGVuQnJhY2tldEluUGF0aFZhbGlkLnhzZC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL0ltcG9ydE9wZW5CcmFja2V0SW5QYXRoVmFsaWQueHNkLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL09wZW5CcmFja2V0SW5QYXRoSW52YWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL09wZW5CcmFja2V0SW5QYXRoSW52YWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdmOGFhNy4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9PcGVuQnJhY2tldEluUGF0aEludmFsaWQueHNkLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9PcGVuQnJhY2tldEluUGF0aFZhbGlkLnhzZC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvT3BlbkJyYWNrZXRJblBhdGhWYWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9PcGVuQnJhY2tldEluUGF0aFZhbGlkLnhzZC1sb2ciCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9JbXBvcnRPcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL0ltcG9ydE9wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZGQ4YmNlLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL0ltcG9ydE9wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2ciCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1SZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL09wZW5CcmFja2V0KEluRmlsZW5hbWVJbnZhbGlkLnhzZCkuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmlnaHQgY2xpY2sgb24gdGhlIG1lc3NhZ2UgYW5kIHNlbGVjdCAiU2hvdyBEZXRhaWxzLi4uIiBbMSwgMF0KLS0+IFhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9JbXBvcnRPcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lVmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9JbXBvcnRPcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lVmFsaWQueHNkLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvSW1wb3J0T3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2ciCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL09wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2Y4YWE3Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL09wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2ciCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1YTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvT3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvT3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL09wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVWYWxpZC54c2QtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1BlcmlvZC5JblBhdGgvSW1wb3J0UGVyaW9kSW5QYXRoSW52YWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1BlcmlvZC5JblBhdGgvSW1wb3J0UGVyaW9kSW5QYXRoSW52YWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MGE3MDIxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2QuSW5QYXRoL0ltcG9ydFBlcmlvZEluUGF0aEludmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotUmVmZXJlbmNlZCBmaWxlIGNvbnRhaW5zIGVycm9ycyAodGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZC5JblBhdGgvUGVyaW9kSW5QYXRoSW52YWxpZC54c2QpLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJpZ2h0IGNsaWNrIG9uIHRoZSBtZXNzYWdlIGFuZCBzZWxlY3QgIlNob3cgRGV0YWlscy4uLiIgWzEsIDBdCi0tPiBYTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1BlcmlvZC5JblBhdGgvSW1wb3J0UGVyaW9kSW5QYXRoVmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2QuSW5QYXRoL0ltcG9ydFBlcmlvZEluUGF0aFZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1BlcmlvZC5JblBhdGgvSW1wb3J0UGVyaW9kSW5QYXRoVmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1BlcmlvZC5JblBhdGgvUGVyaW9kSW5QYXRoSW52YWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1BlcmlvZC5JblBhdGgvUGVyaW9kSW5QYXRoSW52YWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2Y4YWE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2QuSW5QYXRoL1BlcmlvZEluUGF0aEludmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2QuSW5QYXRoL1BlcmlvZEluUGF0aFZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kLkluUGF0aC9QZXJpb2RJblBhdGhWYWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2QuSW5QYXRoL1BlcmlvZEluUGF0aFZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL0ltcG9ydFBlcmlvZC5JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvSW1wb3J0UGVyaW9kLkluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlNzlhZWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvSW1wb3J0UGVyaW9kLkluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVJlZmVyZW5jZWQgZmlsZSBjb250YWlucyBlcnJvcnMgKHRlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL1BlcmlvZC5JbkZpbGVuYW1lSW52YWxpZC54c2QpLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJpZ2h0IGNsaWNrIG9uIHRoZSBtZXNzYWdlIGFuZCBzZWxlY3QgIlNob3cgRGV0YWlscy4uLiIgWzEsIDBdCi0tPiBYTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvSW1wb3J0UGVyaW9kLkluRmlsZW5hbWVWYWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvSW1wb3J0UGVyaW9kLkluRmlsZW5hbWVWYWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL0ltcG9ydFBlcmlvZC5JbkZpbGVuYW1lVmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvUGVyaW9kLkluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9QZXJpb2QuSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdmOGFhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9QZXJpb2QuSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL1BlcmlvZC5JbkZpbGVuYW1lVmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL1BlcmlvZC5JbkZpbGVuYW1lVmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9QZXJpb2QuSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL0ltcG9ydFF1b3RlSW5QYXRoSW52YWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL0ltcG9ydFF1b3RlSW5QYXRoSW52YWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWM3MzlmOS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9JbXBvcnRRdW90ZUluUGF0aEludmFsaWQueHNkLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVJlZmVyZW5jZWQgZmlsZSBjb250YWlucyBlcnJvcnMgKHRlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZSdJblBhdGgvUXVvdGVJblBhdGhJbnZhbGlkLnhzZCkuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmlnaHQgY2xpY2sgb24gdGhlIG1lc3NhZ2UgYW5kIHNlbGVjdCAiU2hvdyBEZXRhaWxzLi4uIiBbMSwgMF0KLS0+IFhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9JbXBvcnRRdW90ZUluUGF0aFZhbGlkLnhzZC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9RdW90ZVwwNDdJblBhdGgvSW1wb3J0UXVvdGVJblBhdGhWYWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9JbXBvcnRRdW90ZUluUGF0aFZhbGlkLnhzZC1sb2ciCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9RdW90ZUluUGF0aEludmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9RdW90ZUluUGF0aEludmFsaWQueHNkLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3ZjhhYTcuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9RdW90ZVwwNDdJblBhdGgvUXVvdGVJblBhdGhJbnZhbGlkLnhzZC1sb2ciCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1YTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9RdW90ZVwwNDdJblBhdGgvUXVvdGVJblBhdGhWYWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL1F1b3RlSW5QYXRoVmFsaWQueHNkLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9RdW90ZVwwNDdJblBhdGgvUXVvdGVJblBhdGhWYWxpZC54c2QtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9RdW90ZUluRmlsZW5hbWUvSW1wb3J0UXVvdGVcMDQ3SW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9JbXBvcnRRdW90ZVwwNDdJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjgwNzFlMi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9JbXBvcnRRdW90ZVwwNDdJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotUmVmZXJlbmNlZCBmaWxlIGNvbnRhaW5zIGVycm9ycyAodGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZSdJbkZpbGVuYW1lSW52YWxpZC54c2QpLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJpZ2h0IGNsaWNrIG9uIHRoZSBtZXNzYWdlIGFuZCBzZWxlY3QgIlNob3cgRGV0YWlscy4uLiIgWzEsIDBdCi0tPiBYTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9RdW90ZUluRmlsZW5hbWUvSW1wb3J0UXVvdGVcMDQ3SW5GaWxlbmFtZVZhbGlkLnhzZC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9RdW90ZUluRmlsZW5hbWUvSW1wb3J0UXVvdGVcMDQ3SW5GaWxlbmFtZVZhbGlkLnhzZC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL0ltcG9ydFF1b3RlXDA0N0luRmlsZW5hbWVWYWxpZC54c2QtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9RdW90ZUluRmlsZW5hbWUvUXVvdGVcMDQ3SW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZVwwNDdJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdmOGFhNy4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZVwwNDdJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL1F1b3RlXDA0N0luRmlsZW5hbWVWYWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL1F1b3RlXDA0N0luRmlsZW5hbWVWYWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZVwwNDdJbkZpbGVuYW1lVmFsaWQueHNkLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9TcGFjZSBJblBhdGgvSW1wb3J0U3BhY2VJblBhdGhJbnZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2UgSW5QYXRoL0ltcG9ydFNwYWNlSW5QYXRoSW52YWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NjlhNmUyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9TcGFjZSBJblBhdGgvSW1wb3J0U3BhY2VJblBhdGhJbnZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVJlZmVyZW5jZWQgZmlsZSBjb250YWlucyBlcnJvcnMgKHRlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZSBJblBhdGgvU3BhY2VJblBhdGhJbnZhbGlkLnhzZCkuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmlnaHQgY2xpY2sgb24gdGhlIG1lc3NhZ2UgYW5kIHNlbGVjdCAiU2hvdyBEZXRhaWxzLi4uIiBbMSwgMF0KLS0+IFhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2UgSW5QYXRoL0ltcG9ydFNwYWNlSW5QYXRoVmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9TcGFjZSBJblBhdGgvSW1wb3J0U3BhY2VJblBhdGhWYWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9TcGFjZSBJblBhdGgvSW1wb3J0U3BhY2VJblBhdGhWYWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2UgSW5QYXRoL1NwYWNlSW5QYXRoSW52YWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1NwYWNlIEluUGF0aC9TcGFjZUluUGF0aEludmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdmOGFhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2UgSW5QYXRoL1NwYWNlSW5QYXRoSW52YWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1YTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1NwYWNlIEluUGF0aC9TcGFjZUluUGF0aFZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2UgSW5QYXRoL1NwYWNlSW5QYXRoVmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2UgSW5QYXRoL1NwYWNlSW5QYXRoVmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9JbXBvcnRTcGFjZSBJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9JbXBvcnRTcGFjZSBJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjc4MTI0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9TcGFjZUluRmlsZW5hbWUvSW1wb3J0U3BhY2UgSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotUmVmZXJlbmNlZCBmaWxlIGNvbnRhaW5zIGVycm9ycyAodGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9TcGFjZSBJbkZpbGVuYW1lSW52YWxpZC54c2QpLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJpZ2h0IGNsaWNrIG9uIHRoZSBtZXNzYWdlIGFuZCBzZWxlY3QgIlNob3cgRGV0YWlscy4uLiIgWzEsIDBdCi0tPiBYTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9JbXBvcnRTcGFjZSBJbkZpbGVuYW1lVmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9TcGFjZUluRmlsZW5hbWUvSW1wb3J0U3BhY2UgSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9JbXBvcnRTcGFjZSBJbkZpbGVuYW1lVmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9TcGFjZSBJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9TcGFjZSBJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2Y4YWE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9TcGFjZUluRmlsZW5hbWUvU3BhY2UgSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9TcGFjZUluRmlsZW5hbWUvU3BhY2UgSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL1NwYWNlIEluRmlsZW5hbWVWYWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9TcGFjZUluRmlsZW5hbWUvU3BhY2UgSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZUluRmlsZW5hbWUvQ29weSBvZiAtZm9yWGVyY2VzMi42LjItIEltcG9ydFRpbGRlfkluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL0NvcHkgb2YgLWZvclhlcmNlczIuNi4yLSBJbXBvcnRUaWxkZX5JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjliMTA5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZUluRmlsZW5hbWUvQ29weSBvZiAtZm9yWGVyY2VzMi42LjItIEltcG9ydFRpbGRlfkluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDENCi0NCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLVJlZmVyZW5jZWQgZmlsZSBjb250YWlucyBlcnJvcnMgKHRlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZUluRmlsZW5hbWUvVGlsZGUlN0VJbkZpbGVuYW1lSW52YWxpZC54c2QpLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJpZ2h0IGNsaWNrIG9uIHRoZSBtZXNzYWdlIGFuZCBzZWxlY3QgIlNob3cgRGV0YWlscy4uLiIgWzEsIDBdDQotLT4gWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9JbXBvcnRUaWxkZX5JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9JbXBvcnRUaWxkZX5JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2M2Y2ZTkxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZUluRmlsZW5hbWUvSW1wb3J0VGlsZGV+SW5GaWxlbmFtZUludmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotUmVmZXJlbmNlZCBmaWxlIGNvbnRhaW5zIGVycm9ycyAodGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9UaWxkZX5JbkZpbGVuYW1lSW52YWxpZC54c2QpLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJpZ2h0IGNsaWNrIG9uIHRoZSBtZXNzYWdlIGFuZCBzZWxlY3QgIlNob3cgRGV0YWlscy4uLiIgWzEsIDBdCi0tPiBYTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9JbXBvcnRUaWxkZX5JbkZpbGVuYW1lVmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZUluRmlsZW5hbWUvSW1wb3J0VGlsZGV+SW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9JbXBvcnRUaWxkZX5JbkZpbGVuYW1lVmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9UaWxkZX5JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9UaWxkZX5JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2Y4YWE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZUluRmlsZW5hbWUvVGlsZGV+SW5GaWxlbmFtZUludmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZUluRmlsZW5hbWUvVGlsZGV+SW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVWYWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZUluRmlsZW5hbWUvVGlsZGV+SW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZX5JblBhdGgvSW1wb3J0VGlsZGVJblBhdGhJbnZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGV+SW5QYXRoL0ltcG9ydFRpbGRlSW5QYXRoSW52YWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTk3MTMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZX5JblBhdGgvSW1wb3J0VGlsZGVJblBhdGhJbnZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVJlZmVyZW5jZWQgZmlsZSBjb250YWlucyBlcnJvcnMgKHRlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZX5JblBhdGgvVGlsZGVJblBhdGhJbnZhbGlkLnhzZCkuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmlnaHQgY2xpY2sgb24gdGhlIG1lc3NhZ2UgYW5kIHNlbGVjdCAiU2hvdyBEZXRhaWxzLi4uIiBbMSwgMF0KLS0+IFhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGV+SW5QYXRoL0ltcG9ydFRpbGRlSW5QYXRoVmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZX5JblBhdGgvSW1wb3J0VGlsZGVJblBhdGhWYWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZX5JblBhdGgvSW1wb3J0VGlsZGVJblBhdGhWYWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGV+SW5QYXRoL1RpbGRlSW5QYXRoSW52YWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aEludmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdmOGFhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGV+SW5QYXRoL1RpbGRlSW5QYXRoSW52YWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1YTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aFZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGV+SW5QYXRoL1RpbGRlSW5QYXRoVmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGV+SW5QYXRoL1RpbGRlSW5QYXRoVmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL0ltcG9ydFVuZGVyc2NvcmVfSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9JbXBvcnRVbmRlcnNjb3JlX0luRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5ZWEzZjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL0ltcG9ydFVuZGVyc2NvcmVfSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotUmVmZXJlbmNlZCBmaWxlIGNvbnRhaW5zIGVycm9ycyAodGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL1VuZGVyc2NvcmVfSW5GaWxlbmFtZUludmFsaWQueHNkKS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCByaWdodCBjbGljayBvbiB0aGUgbWVzc2FnZSBhbmQgc2VsZWN0ICJTaG93IERldGFpbHMuLi4iIFsxLCAwXQotLT4gWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9JbXBvcnRVbmRlcnNjb3JlX0luRmlsZW5hbWVWYWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL0ltcG9ydFVuZGVyc2NvcmVfSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL0ltcG9ydFVuZGVyc2NvcmVfSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9VbmRlcnNjb3JlX0luRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvVW5kZXJzY29yZV9JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2Y4YWE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9VbmRlcnNjb3JlX0luRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvVW5kZXJzY29yZV9JbkZpbGVuYW1lVmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9VbmRlcnNjb3JlX0luRmlsZW5hbWVWYWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9VbmRlcnNjb3JlX0luRmlsZW5hbWVWYWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvSW1wb3J0VW5kZXJzY29yZUluUGF0aEludmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9JbXBvcnRVbmRlcnNjb3JlSW5QYXRoSW52YWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MWU3Nzg2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9JbXBvcnRVbmRlcnNjb3JlSW5QYXRoSW52YWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1SZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvVW5kZXJzY29yZUluUGF0aEludmFsaWQueHNkKS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCByaWdodCBjbGljayBvbiB0aGUgbWVzc2FnZSBhbmQgc2VsZWN0ICJTaG93IERldGFpbHMuLi4iIFsxLCAwXQotLT4gWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9JbXBvcnRVbmRlcnNjb3JlSW5QYXRoVmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9JbXBvcnRVbmRlcnNjb3JlSW5QYXRoVmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvSW1wb3J0VW5kZXJzY29yZUluUGF0aFZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9VbmRlcnNjb3JlSW5QYXRoSW52YWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL1VuZGVyc2NvcmVJblBhdGhJbnZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3ZjhhYTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL1VuZGVyc2NvcmVJblBhdGhJbnZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvVW5kZXJzY29yZUluUGF0aFZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvVW5kZXJzY29yZUluUGF0aFZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL1VuZGVyc2NvcmVJblBhdGhWYWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0VtcHR5RmlsZS9FbXB0eS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0VtcHR5RmlsZS9FbXB0eS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9CdWdGaXhlcy9FbXB0eUZpbGUvRW1wdHkueHNkCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvRnVsbENvbmZvcm1hbmNlL0Z1bGxDb25mb3JtYW5jZS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0Z1bGxDb25mb3JtYW5jZS9GdWxsQ29uZm9ybWFuY2UueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZDYxYzZhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvRnVsbENvbmZvcm1hbmNlL0Z1bGxDb25mb3JtYW5jZS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEKLSAgICB4bWxuczpmb289InVybjpmb28iCi0gICAgdGFyZ2V0TmFtZXNwYWNlPSJ1cm46Zm9vIgotICAgIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0gICAgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0gICAgYXR0cmlidXRlRm9ybURlZmF1bHQ9InVucXVhbGlmaWVkIgotICAgIHZlcnNpb249IjEuMCI+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJGb28iPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50Ci0gICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiCi0gICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgIG5hbWU9IkZvbyIgLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudAotICAgICAgICAgICAgICAgIG1heE9jY3Vycz0iMSIKLSAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjEiCi0gICAgICAgICAgICAgICAgbmFtZT0iYmFyIj4KLSAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8eHNkOmF0dHJpYnV0ZQotICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT0idmFsdWUiCi0gICAgICAgICAgICAgICAgICAgICAgICB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6c2ltcGxlVHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJiYXIwMSIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iYmFyMDIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImJhcjAzIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPC94c2Q6YXR0cmlidXRlPgotICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJSZXN0cmljdGVkRm9vIj4KLSAgICAgICAgPHhzZDpjb21wbGV4Q29udGVudD4KLSAgICAgICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0iZm9vOkZvbyI+Ci0gICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9IjEiCi0gICAgICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjEiCi0gICAgICAgICAgICAgICAgICAgICAgICBuYW1lPSJGb28iIC8+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudAotICAgICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSIxIgotICAgICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIxIgotICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT0iYmFyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDphdHRyaWJ1dGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT0idmFsdWUiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnNpbXBsZVR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnJlc3RyaWN0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZT0ieHNkOnN0cmluZyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iYmFyMDEiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iYmFyMDIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iYmFyMDMiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDphdHRyaWJ1dGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgICAgICA8L3hzZDpjb21wbGV4Q29udGVudD4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvSG9ub3VyQWxsU2NoZW1hTG9jYXRpb25zL1BhcnQxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvSG9ub3VyQWxsU2NoZW1hTG9jYXRpb25zL1BhcnQxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjFjODFmNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0hvbm91ckFsbFNjaGVtYUxvY2F0aW9ucy9QYXJ0MS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvRG9nIiAKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvRG9nIiA+Ci0KLSAgICA8Y29tcGxleFR5cGUgbmFtZT0iSGVhZCI+PC9jb21wbGV4VHlwZT4KLTwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvSG9ub3VyQWxsU2NoZW1hTG9jYXRpb25zL1BhcnQyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvSG9ub3VyQWxsU2NoZW1hTG9jYXRpb25zL1BhcnQyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGIxM2QwNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0hvbm91ckFsbFNjaGVtYUxvY2F0aW9ucy9QYXJ0Mi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvRG9nIiAKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvRG9nIiA+Ci0KLQotICAgIDxjb21wbGV4VHlwZSBuYW1lPSJUYWlsIj48L2NvbXBsZXhUeXBlPgotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9CdWdGaXhlcy9Ib25vdXJBbGxTY2hlbWFMb2NhdGlvbnMvZG9nLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvSG9ub3VyQWxsU2NoZW1hTG9jYXRpb25zL2RvZy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjNGM2NjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9CdWdGaXhlcy9Ib25vdXJBbGxTY2hlbWFMb2NhdGlvbnMvZG9nLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvQURvZyIKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvQURvZyIKLQl4bWxuczpwcmVmPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0RvZyI+Ci0JCi0JPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvRG9nIgotCQlzY2hlbWFMb2NhdGlvbj0iUGFydDEueHNkIj4KLQk8L2ltcG9ydD4KLQk8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Eb2ciCi0JCXNjaGVtYUxvY2F0aW9uPSJQYXJ0Mi54c2QiPgotCTwvaW1wb3J0PgotCi0JPGNvbXBsZXhUeXBlIG5hbWU9IkRvZ1R5cGUiPgotCQk8c2VxdWVuY2U+Ci0KLQkJCTxlbGVtZW50IG5hbWU9IlRhaWwiIHR5cGU9InByZWY6VGFpbCI+PC9lbGVtZW50PgotCQkJPGVsZW1lbnQgbmFtZT0iQm9keSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+Ci0JCTwvc2VxdWVuY2U+Ci0JPC9jb21wbGV4VHlwZT4KLQotCTxlbGVtZW50IG5hbWU9ImFEb2ciIHR5cGU9InRuczpEb2dUeXBlIj48L2VsZW1lbnQ+Ci0KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9CdWdGaXhlcy9JbXBvcnRJbnZhbGlkTG9jYXRpb24vSW1wb3J0SW52YWxpZExvY2F0aW9uLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvSW1wb3J0SW52YWxpZExvY2F0aW9uL0ltcG9ydEludmFsaWRMb2NhdGlvbi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiODM0N2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9CdWdGaXhlcy9JbXBvcnRJbnZhbGlkTG9jYXRpb24vSW1wb3J0SW52YWxpZExvY2F0aW9uLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vcm9vdCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vcm9vdCI+Ci0gICAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0aW5nIiBzY2hlbWFMb2NhdGlvbj0ic3ViZGlyL2ltcG9ydGluZy54c2RhIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoL0EueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9CdWdGaXhlcy9JbXBvcnRXaXRoSW5jb3JyZWN0U2xhc2gvQS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjMjBmZTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9CdWdGaXhlcy9JbXBvcnRXaXRoSW5jb3JyZWN0U2xhc2gvQS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vQUMiPgotICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249IkMueHNkIi8+Ci0gIDx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL0IiIHNjaGVtYUxvY2F0aW9uPSJCLnhzZCIvPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoL0IueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9CdWdGaXhlcy9JbXBvcnRXaXRoSW5jb3JyZWN0U2xhc2gvQi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0NTAwN2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9CdWdGaXhlcy9JbXBvcnRXaXRoSW5jb3JyZWN0U2xhc2gvQi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vQiI+Ci0gIDx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL0FDIiBzY2hlbWFMb2NhdGlvbj0iLlxDLnhzZCIvPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoL0MueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9CdWdGaXhlcy9JbXBvcnRXaXRoSW5jb3JyZWN0U2xhc2gvQy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2ZGY2NzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9CdWdGaXhlcy9JbXBvcnRXaXRoSW5jb3JyZWN0U2xhc2gvQy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vQUMiPgotICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJTYW1wbGVUeXBlIj4KLSAgICA8eHNkOnNlcXVlbmNlPgotICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iU2FtcGxlRWxlbWVudCIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgIDwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvSW1wb3J0WFNEV2l0aFhTREltcG9ydEluRGlmZkRpci9JbXBvcnRYU0RXaXRoWFNESW1wb3J0SW5EaWZmRGlyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvSW1wb3J0WFNEV2l0aFhTREltcG9ydEluRGlmZkRpci9JbXBvcnRYU0RXaXRoWFNESW1wb3J0SW5EaWZmRGlyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTVlNmFmMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0ltcG9ydFhTRFdpdGhYU0RJbXBvcnRJbkRpZmZEaXIvSW1wb3J0WFNEV2l0aFhTREltcG9ydEluRGlmZkRpci54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL3Jvb3QiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL3Jvb3QiPgotICAgIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydGluZyIgc2NoZW1hTG9jYXRpb249InN1YmRpci9pbXBvcnRpbmcueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvSW1wb3J0WFNEV2l0aFhTREltcG9ydEluRGlmZkRpci9zdWJkaXIvaW1wb3J0aW5nLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvSW1wb3J0WFNEV2l0aFhTREltcG9ydEluRGlmZkRpci9zdWJkaXIvaW1wb3J0aW5nLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWFmNTQ2Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0ltcG9ydFhTRFdpdGhYU0RJbXBvcnRJbkRpZmZEaXIvc3ViZGlyL2ltcG9ydGluZy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydGluZyIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0aW5nIiB4bWxuczpzaW1wbGU9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vc2ltcGxlIj4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vc2ltcGxlIiBzY2hlbWFMb2NhdGlvbj0ic2ltcGxlLnhzZCIvPgotICAgIDxzaW1wbGVUeXBlIG5hbWU9Im15U2ltcGxlVHlwZSI+Ci0gICAgPGxpc3QgaXRlbVR5cGU9InN0cmluZyIvPgotICA8L3NpbXBsZVR5cGU+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvSW1wb3J0WFNEV2l0aFhTREltcG9ydEluRGlmZkRpci9zdWJkaXIvc2ltcGxlLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvSW1wb3J0WFNEV2l0aFhTREltcG9ydEluRGlmZkRpci9zdWJkaXIvc2ltcGxlLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODgxMGE0ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0ltcG9ydFhTRFdpdGhYU0RJbXBvcnRJbkRpZmZEaXIvc3ViZGlyL3NpbXBsZS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL3NpbXBsZSIgeG1sbnM6aWJtPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL3NpbXBsZSI+Ci0gICAgPGVsZW1lbnQgbmFtZT0ibXlFbGVtZW50IiB0eXBlPSJzdHJpbmciLz4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9CdWdGaXhlcy9JbnZhbGlkU2NoZW1hSW5YTUxDYXRhbG9nL0ludmFsaWRTY2hlbWFJblhNTENhdGFsb2cueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9CdWdGaXhlcy9JbnZhbGlkU2NoZW1hSW5YTUxDYXRhbG9nL0ludmFsaWRTY2hlbWFJblhNTENhdGFsb2cueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDQ0MzE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvSW52YWxpZFNjaGVtYUluWE1MQ2F0YWxvZy9JbnZhbGlkU2NoZW1hSW5YTUxDYXRhbG9nLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW52YWxpZCIgeG1sbnM6aW52YWxpZD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbnZhbGlkIj4KLQk8ZWxlbWVudCBuYW1lPSJOZXdHbG9iYWxFbGVtZW50IiB0eXBlPSJzdHJpbmdhIj48L2VsZW1lbnQ+Ci08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL01pc3NpbmdDbG9zaW5nU2NoZW1hVGFnL01pc3NpbmdDbG9zaW5nU2NoZW1hVGFnLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvTWlzc2luZ0Nsb3NpbmdTY2hlbWFUYWcvTWlzc2luZ0Nsb3NpbmdTY2hlbWFUYWcueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNGQ3NjM0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvTWlzc2luZ0Nsb3NpbmdTY2hlbWFUYWcvTWlzc2luZ0Nsb3NpbmdTY2hlbWFUYWcueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvVHdvT3BlbkJyYWNrZXRzL1R3b09wZW5CcmFja2V0cy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL1R3b09wZW5CcmFja2V0cy9Ud29PcGVuQnJhY2tldHMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTdjOGY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvVHdvT3BlbkJyYWNrZXRzL1R3b09wZW5CcmFja2V0cy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Ud29PcGVuQnJhY2tldHMiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Ud29PcGVuQnJhY2tldHMiPgotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9CdWdGaXhlcy9YU0RSZWdpc3RlcmVkV2l0aENhdGFsb2cvSW52YWxpZFNjaGVtYVdpdGhOYW1lc3BhY2VJbkNhdGFsb2cueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9CdWdGaXhlcy9YU0RSZWdpc3RlcmVkV2l0aENhdGFsb2cvSW52YWxpZFNjaGVtYVdpdGhOYW1lc3BhY2VJbkNhdGFsb2cueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlM2UyNGRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvWFNEUmVnaXN0ZXJlZFdpdGhDYXRhbG9nL0ludmFsaWRTY2hlbWFXaXRoTmFtZXNwYWNlSW5DYXRhbG9nLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gICAgICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9DYXRhbG9ndWUiIHhtbG5zOmM9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvQ2F0YWxvZ3VlIj4KLQotCTxjb21wbGV4VHlwZSBuYW1lPSJQdWJsaWNhdGlvblR5cGUiCi0JCTxzZXF1ZW5jZT4KLQkJCTxlbGVtZW50IG5hbWU9InRpdGxlIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD4KLQkJCTxlbGVtZW50IG5hbWU9ImF1dGhvciIgdHlwZT0ic3RyaW5nIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj48L2VsZW1lbnQ+Ci0JCQk8ZWxlbWVudCBuYW1lPSJkYXRlIiB0eXBlPSJnWWVhciI+PC9lbGVtZW50PgotCQk8L3NlcXVlbmNlPgotCTwvY29tcGxleFR5cGU+Ci0JCi0JPGNvbXBsZXhUeXBlIG5hbWU9IkJvb2tUeXBlIj4KLQkJPGNvbXBsZXhDb250ZW50PgotCQkJPGV4dGVuc2lvbiBiYXNlPSJjOlB1YmxpY2F0aW9uVHlwZSI+Ci0JCQkgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJpc2JuIiB0eXBlPSJzdHJpbmciIC8+Ci0JCQkJCTxlbGVtZW50IG5hbWU9InB1Ymxpc2hlciIgdHlwZT0ic3RyaW5nIi8+Ci0gICAgICAgICAgICAgICAgPC9zZXF1ZW5jZT4KLQkJCTwvZXh0ZW5zaW9uPgotCQk8L2NvbXBsZXhDb250ZW50PgotCTwvY29tcGxleFR5cGU+Ci0JCi0JPGNvbXBsZXhUeXBlIG5hbWU9Ik1hZ2F6aW5lVHlwZSI+Ci0JCTxjb21wbGV4Q29udGVudD4JCQkKLQkJCTxyZXN0cmljdGlvbiBiYXNlPSJjOlB1YmxpY2F0aW9uVHlwZSI+Ci0JCQkJPHNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJ0aXRsZSIgdHlwZT0ic3RyaW5nIiAvPgotCQkJCQk8ZWxlbWVudCBuYW1lPSJhdXRob3IiIHR5cGU9InN0cmluZyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9IjAiLz4KLQkJCQkJPGVsZW1lbnQgbmFtZT0iZGF0ZSIgdHlwZT0iZ1llYXIiPjwvZWxlbWVudD4KLQkJCQk8L3NlcXVlbmNlPgotCQkJPC9yZXN0cmljdGlvbj4KLQkJPC9jb21wbGV4Q29udGVudD4KLQk8L2NvbXBsZXhUeXBlPgotCQotCTxlbGVtZW50IG5hbWU9IlB1YmxpY2F0aW9uIiB0eXBlPSJjOlB1YmxpY2F0aW9uVHlwZSIgYWJzdHJhY3Q9InRydWUiPjwvZWxlbWVudD4KLQkKLQk8ZWxlbWVudCBuYW1lPSJCb29rIiB0eXBlPSJjOkJvb2tUeXBlIiBzdWJzdGl0dXRpb25Hcm91cD0iYzpQdWJsaWNhdGlvbiI+PC9lbGVtZW50PgotCi0JPGVsZW1lbnQgbmFtZT0iTWFnYXppbmUiIHR5cGU9ImM6TWFnYXppbmVUeXBlIiBzdWJzdGl0dXRpb25Hcm91cD0iYzpQdWJsaWNhdGlvbiI+PC9lbGVtZW50PgotCQotCTxlbGVtZW50IG5hbWU9IkNhdGFsb2d1ZSI+Ci0JCTxjb21wbGV4VHlwZT4KLQkJCTxzZXF1ZW5jZT4KLQkJCQk8ZWxlbWVudCByZWY9ImM6UHVibGljYXRpb24iIG1heE9jY3Vycz0idW5ib3VuZGVkIj48L2VsZW1lbnQ+Ci0JCQk8L3NlcXVlbmNlPgotCQk8L2NvbXBsZXhUeXBlPgotCTwvZWxlbWVudD4KLQkKLTwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVJbnZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVJbnZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTBjNmE2MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9BbmdsZUhhdF5JbkZpbGVuYW1lSW52YWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVWYWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9BbmdsZUhhdF5JbkZpbGVuYW1lVmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjdmNDc0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVWYWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0ltcG9ydEFuZ2xlSGF0XkluRmlsZW5hbWVJbnZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0ltcG9ydEFuZ2xlSGF0XkluRmlsZW5hbWVJbnZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZkZjE0Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9JbXBvcnRBbmdsZUhhdF5JbkZpbGVuYW1lSW52YWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0Ij4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJBbmdsZUhhdF5JbkZpbGVuYW1lSW52YWxpZC54c2QiLz4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvSW1wb3J0QW5nbGVIYXReSW5GaWxlbmFtZVZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0ltcG9ydEFuZ2xlSGF0XkluRmlsZW5hbWVWYWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwODRlNmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvSW1wb3J0QW5nbGVIYXReSW5GaWxlbmFtZVZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0IiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiPgotICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgc2NoZW1hTG9jYXRpb249IkFuZ2xlSGF0XkluRmlsZW5hbWVWYWxpZC54c2QiLz4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhJbnZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoSW52YWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwYzZhNjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhJbnZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhWYWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aFZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI3ZjQ3NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aFZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdF5JblBhdGgvSW1wb3J0QW5nbGVIYXRJblBhdGhJbnZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0ltcG9ydEFuZ2xlSGF0SW5QYXRoSW52YWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkODJjOTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdF5JblBhdGgvSW1wb3J0QW5nbGVIYXRJblBhdGhJbnZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0IiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiPgotICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgc2NoZW1hTG9jYXRpb249IkFuZ2xlSGF0SW5QYXRoSW52YWxpZC54c2QiLz4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdF5JblBhdGgvSW1wb3J0QW5nbGVIYXRJblBhdGhWYWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9JbXBvcnRBbmdsZUhhdEluUGF0aFZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjdiZDBkNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9JbXBvcnRBbmdsZUhhdEluUGF0aFZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0IiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiPgotICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgc2NoZW1hTG9jYXRpb249IkFuZ2xlSGF0SW5QYXRoVmFsaWQueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvQ2xvc2VCcmFja2V0SW5QYXRoSW52YWxpZC54c2QiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9DbG9zZUJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwYzZhNjAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9DbG9zZUJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvQ2xvc2VCcmFja2V0SW5QYXRoVmFsaWQueHNkIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvQ2xvc2VCcmFja2V0SW5QYXRoVmFsaWQueHNkIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI3ZjQ3NC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0Nsb3NlQnJhY2tldEluUGF0aFZhbGlkLnhzZCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvSW1wb3J0Q2xvc2VCcmFja2V0SW5QYXRoSW52YWxpZC54c2QiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9JbXBvcnRDbG9zZUJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiZDlhNzQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9JbXBvcnRDbG9zZUJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZCIKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0Ij4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJDbG9zZUJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0ltcG9ydENsb3NlQnJhY2tldEluUGF0aFZhbGlkLnhzZCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0ltcG9ydENsb3NlQnJhY2tldEluUGF0aFZhbGlkLnhzZCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxODA1MTMuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9JbXBvcnRDbG9zZUJyYWNrZXRJblBhdGhWYWxpZC54c2QiCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iQ2xvc2VCcmFja2V0SW5QYXRoVmFsaWQueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVJbnZhbGlkLnhzZCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0Nsb3NlQnJhY2tldFwwNTFJbkZpbGVuYW1lSW52YWxpZC54c2QiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGM2YTYwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVJbnZhbGlkLnhzZCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVWYWxpZC54c2QiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9DbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZVZhbGlkLnhzZCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyN2Y0NzQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9DbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZVZhbGlkLnhzZCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvSW1wb3J0Q2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVJbnZhbGlkLnhzZCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0ltcG9ydENsb3NlQnJhY2tldFwwNTFJbkZpbGVuYW1lSW52YWxpZC54c2QiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjBkMDZmLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvSW1wb3J0Q2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVJbnZhbGlkLnhzZCIKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0Ij4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJDbG9zZUJyYWNrZXQpSW5GaWxlbmFtZUludmFsaWQueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvSW1wb3J0Q2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVWYWxpZC54c2QiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9JbXBvcnRDbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZVZhbGlkLnhzZCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhMjUwM2IuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9JbXBvcnRDbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZVZhbGlkLnhzZCIKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0Ij4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJDbG9zZUJyYWNrZXQpSW5GaWxlbmFtZVZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhJbnZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aEludmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGM2YTYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aEludmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhWYWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhWYWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyN2Y0NzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoLUluUGF0aC9EYXNoSW5QYXRoVmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2gtSW5QYXRoL0ltcG9ydERhc2hJblBhdGhJbnZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaC1JblBhdGgvSW1wb3J0RGFzaEluUGF0aEludmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOTY0OGNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaC1JblBhdGgvSW1wb3J0RGFzaEluUGF0aEludmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iRGFzaEluUGF0aEludmFsaWQueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaC1JblBhdGgvSW1wb3J0RGFzaEluUGF0aFZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaC1JblBhdGgvSW1wb3J0RGFzaEluUGF0aFZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2YyZGE4ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2gtSW5QYXRoL0ltcG9ydERhc2hJblBhdGhWYWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0Ij4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJEYXNoSW5QYXRoVmFsaWQueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lSW52YWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0Rhc2gtSW5GaWxlbmFtZUludmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGM2YTYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lSW52YWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lVmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoSW5GaWxlbmFtZS9EYXNoLUluRmlsZW5hbWVWYWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyN2Y0NzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoSW5GaWxlbmFtZS9EYXNoLUluRmlsZW5hbWVWYWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaEluRmlsZW5hbWUvSW1wb3J0RGFzaC1JbkZpbGVuYW1lSW52YWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0ltcG9ydERhc2gtSW5GaWxlbmFtZUludmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTM0ZDgzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaEluRmlsZW5hbWUvSW1wb3J0RGFzaC1JbkZpbGVuYW1lSW52YWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0Ij4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJEYXNoLUluRmlsZW5hbWVJbnZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0ltcG9ydERhc2gtSW5GaWxlbmFtZVZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaEluRmlsZW5hbWUvSW1wb3J0RGFzaC1JbkZpbGVuYW1lVmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjMzNGFlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaEluRmlsZW5hbWUvSW1wb3J0RGFzaC1JbkZpbGVuYW1lVmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iRGFzaC1JbkZpbGVuYW1lVmFsaWQueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aEludmFsaWQueHNkIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aEludmFsaWQueHNkIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTBjNmE2MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvRXhjbGFtYXRpb25JblBhdGhJbnZhbGlkLnhzZCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aFZhbGlkLnhzZCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvRXhjbGFtYXRpb25JblBhdGhWYWxpZC54c2QiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjdmNDc0Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aFZhbGlkLnhzZCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9JbXBvcnRFeGNsYW1hdGlvbkluUGF0aEludmFsaWQueHNkIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9JbXBvcnRFeGNsYW1hdGlvbkluUGF0aEludmFsaWQueHNkIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzE4OWZmMy4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvSW1wb3J0RXhjbGFtYXRpb25JblBhdGhJbnZhbGlkLnhzZCIKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0Ij4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJFeGNsYW1hdGlvbkluUGF0aEludmFsaWQueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9JbXBvcnRFeGNsYW1hdGlvbkluUGF0aFZhbGlkLnhzZCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvSW1wb3J0RXhjbGFtYXRpb25JblBhdGhWYWxpZC54c2QiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODM5MGM2Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9JbXBvcnRFeGNsYW1hdGlvbkluUGF0aFZhbGlkLnhzZCIKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0Ij4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJFeGNsYW1hdGlvbkluUGF0aFZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvRXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZUludmFsaWQueHNkIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9FeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lSW52YWxpZC54c2QiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGM2YTYwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9FeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lSW52YWxpZC54c2QiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvRXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZVZhbGlkLnhzZCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvRXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZVZhbGlkLnhzZCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyN2Y0NzQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVWYWxpZC54c2QiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvSW1wb3J0RXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZUludmFsaWQueHNkIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9JbXBvcnRFeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lSW52YWxpZC54c2QiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDMwNTI4Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9JbXBvcnRFeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lSW52YWxpZC54c2QiCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iRXhjbGFtYXRpb24hSW5GaWxlbmFtZUludmFsaWQueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9JbXBvcnRFeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lVmFsaWQueHNkIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9JbXBvcnRFeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lVmFsaWQueHNkIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTkyZGQ5Ny4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvSW1wb3J0RXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZVZhbGlkLnhzZCIKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0Ij4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJFeGNsYW1hdGlvbiFJbkZpbGVuYW1lVmFsaWQueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9JbXBvcnRPcGVuQnJhY2tldEluUGF0aEludmFsaWQueHNkIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9JbXBvcnRPcGVuQnJhY2tldEluUGF0aEludmFsaWQueHNkIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQxMjUxNi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvSW1wb3J0T3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZCIKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0Ij4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJPcGVuQnJhY2tldEluUGF0aEludmFsaWQueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9JbXBvcnRPcGVuQnJhY2tldEluUGF0aFZhbGlkLnhzZCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvSW1wb3J0T3BlbkJyYWNrZXRJblBhdGhWYWxpZC54c2QiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZTQ2MWRkLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9JbXBvcnRPcGVuQnJhY2tldEluUGF0aFZhbGlkLnhzZCIKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0Ij4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJPcGVuQnJhY2tldEluUGF0aFZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvT3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvT3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwYzZhNjAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL09wZW5CcmFja2V0SW5QYXRoSW52YWxpZC54c2QiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvT3BlbkJyYWNrZXRJblBhdGhWYWxpZC54c2QiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL09wZW5CcmFja2V0SW5QYXRoVmFsaWQueHNkIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI3ZjQ3NC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvT3BlbkJyYWNrZXRJblBhdGhWYWxpZC54c2QiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvSW1wb3J0T3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZUludmFsaWQueHNkIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9JbXBvcnRPcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lSW52YWxpZC54c2QiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MGE2N2U5Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9JbXBvcnRPcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lSW52YWxpZC54c2QiCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iT3BlbkJyYWNrZXQoSW5GaWxlbmFtZUludmFsaWQueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9JbXBvcnRPcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lVmFsaWQueHNkIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9JbXBvcnRPcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lVmFsaWQueHNkIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDBhYjczOC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvSW1wb3J0T3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZVZhbGlkLnhzZCIKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0Ij4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJPcGVuQnJhY2tldChJbkZpbGVuYW1lVmFsaWQueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lSW52YWxpZC54c2QiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL09wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVJbnZhbGlkLnhzZCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwYzZhNjAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL09wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVJbnZhbGlkLnhzZCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lVmFsaWQueHNkIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lVmFsaWQueHNkIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI3ZjQ3NC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvT3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZVZhbGlkLnhzZCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kLkluUGF0aC9JbXBvcnRQZXJpb2RJblBhdGhJbnZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kLkluUGF0aC9JbXBvcnRQZXJpb2RJblBhdGhJbnZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDg5NzgwMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZC5JblBhdGgvSW1wb3J0UGVyaW9kSW5QYXRoSW52YWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0Ij4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJQZXJpb2RJblBhdGhJbnZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZC5JblBhdGgvSW1wb3J0UGVyaW9kSW5QYXRoVmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2QuSW5QYXRoL0ltcG9ydFBlcmlvZEluUGF0aFZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjIzYWIzMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZC5JblBhdGgvSW1wb3J0UGVyaW9kSW5QYXRoVmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iUGVyaW9kSW5QYXRoVmFsaWQueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kLkluUGF0aC9QZXJpb2RJblBhdGhJbnZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kLkluUGF0aC9QZXJpb2RJblBhdGhJbnZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTBjNmE2MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZC5JblBhdGgvUGVyaW9kSW5QYXRoSW52YWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kLkluUGF0aC9QZXJpb2RJblBhdGhWYWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZC5JblBhdGgvUGVyaW9kSW5QYXRoVmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjdmNDc0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kLkluUGF0aC9QZXJpb2RJblBhdGhWYWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9JbXBvcnRQZXJpb2QuSW5GaWxlbmFtZUludmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL0ltcG9ydFBlcmlvZC5JbkZpbGVuYW1lSW52YWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjNjI1NDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL0ltcG9ydFBlcmlvZC5JbkZpbGVuYW1lSW52YWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0Ij4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJQZXJpb2QuSW5GaWxlbmFtZUludmFsaWQueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9JbXBvcnRQZXJpb2QuSW5GaWxlbmFtZVZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9JbXBvcnRQZXJpb2QuSW5GaWxlbmFtZVZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGU5N2Q0Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvSW1wb3J0UGVyaW9kLkluRmlsZW5hbWVWYWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0Ij4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJQZXJpb2QuSW5GaWxlbmFtZVZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvUGVyaW9kLkluRmlsZW5hbWVJbnZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9QZXJpb2QuSW5GaWxlbmFtZUludmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGM2YTYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9QZXJpb2QuSW5GaWxlbmFtZUludmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvUGVyaW9kLkluRmlsZW5hbWVWYWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvUGVyaW9kLkluRmlsZW5hbWVWYWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyN2Y0NzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL1BlcmlvZC5JbkZpbGVuYW1lVmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZVwwNDdJblBhdGgvSW1wb3J0UXVvdGVJblBhdGhJbnZhbGlkLnhzZCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZVwwNDdJblBhdGgvSW1wb3J0UXVvdGVJblBhdGhJbnZhbGlkLnhzZCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkNzQ5NmMuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL0ltcG9ydFF1b3RlSW5QYXRoSW52YWxpZC54c2QiCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iUXVvdGVJblBhdGhJbnZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZVwwNDdJblBhdGgvSW1wb3J0UXVvdGVJblBhdGhWYWxpZC54c2QiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL0ltcG9ydFF1b3RlSW5QYXRoVmFsaWQueHNkIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGY4M2M4NS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZVwwNDdJblBhdGgvSW1wb3J0UXVvdGVJblBhdGhWYWxpZC54c2QiCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iUXVvdGVJblBhdGhWYWxpZC54c2QiLz4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL1F1b3RlSW5QYXRoSW52YWxpZC54c2QiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL1F1b3RlSW5QYXRoSW52YWxpZC54c2QiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGM2YTYwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9RdW90ZUluUGF0aEludmFsaWQueHNkIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL1F1b3RlSW5QYXRoVmFsaWQueHNkIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9RdW90ZUluUGF0aFZhbGlkLnhzZCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyN2Y0NzQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL1F1b3RlSW5QYXRoVmFsaWQueHNkIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL0ltcG9ydFF1b3RlXDA0N0luRmlsZW5hbWVJbnZhbGlkLnhzZCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZUluRmlsZW5hbWUvSW1wb3J0UXVvdGVcMDQ3SW5GaWxlbmFtZUludmFsaWQueHNkIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjFmYjM0Yi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZUluRmlsZW5hbWUvSW1wb3J0UXVvdGVcMDQ3SW5GaWxlbmFtZUludmFsaWQueHNkIgorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0IiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiPgotICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgc2NoZW1hTG9jYXRpb249IlF1b3RlJ0luRmlsZW5hbWVJbnZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZUluRmlsZW5hbWUvSW1wb3J0UXVvdGVcMDQ3SW5GaWxlbmFtZVZhbGlkLnhzZCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZUluRmlsZW5hbWUvSW1wb3J0UXVvdGVcMDQ3SW5GaWxlbmFtZVZhbGlkLnhzZCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljY2Y2ZGUuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL0ltcG9ydFF1b3RlXDA0N0luRmlsZW5hbWVWYWxpZC54c2QiCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iUXVvdGUnSW5GaWxlbmFtZVZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZUluRmlsZW5hbWUvUXVvdGVcMDQ3SW5GaWxlbmFtZUludmFsaWQueHNkIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZVwwNDdJbkZpbGVuYW1lSW52YWxpZC54c2QiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGM2YTYwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZVwwNDdJbkZpbGVuYW1lSW52YWxpZC54c2QiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZUluRmlsZW5hbWUvUXVvdGVcMDQ3SW5GaWxlbmFtZVZhbGlkLnhzZCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZUluRmlsZW5hbWUvUXVvdGVcMDQ3SW5GaWxlbmFtZVZhbGlkLnhzZCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyN2Y0NzQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL1F1b3RlXDA0N0luRmlsZW5hbWVWYWxpZC54c2QiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlIEluUGF0aC9JbXBvcnRTcGFjZUluUGF0aEludmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZSBJblBhdGgvSW1wb3J0U3BhY2VJblBhdGhJbnZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjNhMjdhZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlIEluUGF0aC9JbXBvcnRTcGFjZUluUGF0aEludmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iU3BhY2VJblBhdGhJbnZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlIEluUGF0aC9JbXBvcnRTcGFjZUluUGF0aFZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2UgSW5QYXRoL0ltcG9ydFNwYWNlSW5QYXRoVmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzkzZDIwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2UgSW5QYXRoL0ltcG9ydFNwYWNlSW5QYXRoVmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iU3BhY2VJblBhdGhWYWxpZC54c2QiLz4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZSBJblBhdGgvU3BhY2VJblBhdGhJbnZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2UgSW5QYXRoL1NwYWNlSW5QYXRoSW52YWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwYzZhNjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZSBJblBhdGgvU3BhY2VJblBhdGhJbnZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZSBJblBhdGgvU3BhY2VJblBhdGhWYWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlIEluUGF0aC9TcGFjZUluUGF0aFZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI3ZjQ3NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlIEluUGF0aC9TcGFjZUluUGF0aFZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZUluRmlsZW5hbWUvSW1wb3J0U3BhY2UgSW5GaWxlbmFtZUludmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZUluRmlsZW5hbWUvSW1wb3J0U3BhY2UgSW5GaWxlbmFtZUludmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2MwYmFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL0ltcG9ydFNwYWNlIEluRmlsZW5hbWVJbnZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0IiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiPgotICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgc2NoZW1hTG9jYXRpb249IlNwYWNlIEluRmlsZW5hbWVJbnZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9JbXBvcnRTcGFjZSBJbkZpbGVuYW1lVmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZUluRmlsZW5hbWUvSW1wb3J0U3BhY2UgSW5GaWxlbmFtZVZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTE2YmEzNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9JbXBvcnRTcGFjZSBJbkZpbGVuYW1lVmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iU3BhY2UgSW5GaWxlbmFtZVZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9TcGFjZSBJbkZpbGVuYW1lSW52YWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9TcGFjZSBJbkZpbGVuYW1lSW52YWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwYzZhNjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZUluRmlsZW5hbWUvU3BhY2UgSW5GaWxlbmFtZUludmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9TcGFjZSBJbkZpbGVuYW1lVmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZUluRmlsZW5hbWUvU3BhY2UgSW5GaWxlbmFtZVZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI3ZjQ3NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9TcGFjZSBJbkZpbGVuYW1lVmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9JbXBvcnRUaWxkZX5JbkZpbGVuYW1lSW52YWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9JbXBvcnRUaWxkZX5JbkZpbGVuYW1lSW52YWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhMDk4NTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZUluRmlsZW5hbWUvSW1wb3J0VGlsZGV+SW5GaWxlbmFtZUludmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iVGlsZGV+SW5GaWxlbmFtZUludmFsaWQueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL0ltcG9ydFRpbGRlfkluRmlsZW5hbWVWYWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9JbXBvcnRUaWxkZX5JbkZpbGVuYW1lVmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYmU5YTZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL0ltcG9ydFRpbGRlfkluRmlsZW5hbWVWYWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0Ij4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJUaWxkZX5JbkZpbGVuYW1lVmFsaWQueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVJbnZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVJbnZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTBjNmE2MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9UaWxkZX5JbkZpbGVuYW1lSW52YWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVWYWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9UaWxkZX5JbkZpbGVuYW1lVmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjdmNDc0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVWYWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGV+SW5QYXRoL0ltcG9ydFRpbGRlSW5QYXRoSW52YWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlfkluUGF0aC9JbXBvcnRUaWxkZUluUGF0aEludmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTYzZDRiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGV+SW5QYXRoL0ltcG9ydFRpbGRlSW5QYXRoSW52YWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0Ij4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJUaWxkZUluUGF0aEludmFsaWQueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGV+SW5QYXRoL0ltcG9ydFRpbGRlSW5QYXRoVmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZX5JblBhdGgvSW1wb3J0VGlsZGVJblBhdGhWYWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjODExMzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZX5JblBhdGgvSW1wb3J0VGlsZGVJblBhdGhWYWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0Ij4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJUaWxkZUluUGF0aFZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aEludmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZX5JblBhdGgvVGlsZGVJblBhdGhJbnZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTBjNmE2MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aEludmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aFZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGV+SW5QYXRoL1RpbGRlSW5QYXRoVmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjdmNDc0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGV+SW5QYXRoL1RpbGRlSW5QYXRoVmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL0ltcG9ydFVuZGVyc2NvcmVfSW5GaWxlbmFtZUludmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9JbXBvcnRVbmRlcnNjb3JlX0luRmlsZW5hbWVJbnZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGJkYTE2ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL0ltcG9ydFVuZGVyc2NvcmVfSW5GaWxlbmFtZUludmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iVW5kZXJzY29yZV9JbkZpbGVuYW1lSW52YWxpZC54c2QiLz4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9JbXBvcnRVbmRlcnNjb3JlX0luRmlsZW5hbWVWYWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL0ltcG9ydFVuZGVyc2NvcmVfSW5GaWxlbmFtZVZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2YyMTZmYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL0ltcG9ydFVuZGVyc2NvcmVfSW5GaWxlbmFtZVZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0IiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiPgotICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgc2NoZW1hTG9jYXRpb249IlVuZGVyc2NvcmVfSW5GaWxlbmFtZVZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL1VuZGVyc2NvcmVfSW5GaWxlbmFtZUludmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9VbmRlcnNjb3JlX0luRmlsZW5hbWVJbnZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTBjNmE2MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL1VuZGVyc2NvcmVfSW5GaWxlbmFtZUludmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL1VuZGVyc2NvcmVfSW5GaWxlbmFtZVZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvVW5kZXJzY29yZV9JbkZpbGVuYW1lVmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjdmNDc0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvVW5kZXJzY29yZV9JbkZpbGVuYW1lVmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL0ltcG9ydFVuZGVyc2NvcmVJblBhdGhJbnZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvSW1wb3J0VW5kZXJzY29yZUluUGF0aEludmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTI3N2ExLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvSW1wb3J0VW5kZXJzY29yZUluUGF0aEludmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iVW5kZXJzY29yZUluUGF0aEludmFsaWQueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvSW1wb3J0VW5kZXJzY29yZUluUGF0aFZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvSW1wb3J0VW5kZXJzY29yZUluUGF0aFZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQ3NDI2Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL0ltcG9ydFVuZGVyc2NvcmVJblBhdGhWYWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0Ij4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJVbmRlcnNjb3JlSW5QYXRoVmFsaWQueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvVW5kZXJzY29yZUluUGF0aEludmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9VbmRlcnNjb3JlSW5QYXRoSW52YWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwYzZhNjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9VbmRlcnNjb3JlSW5QYXRoSW52YWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvVW5kZXJzY29yZUluUGF0aFZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvVW5kZXJzY29yZUluUGF0aFZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI3ZjQ3NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL1VuZGVyc2NvcmVJblBhdGhWYWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci08L3NjaGVtYT4K